You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular国际化(i18n)应用部署Nginx后无法加载字体问题

Angular国际化(i18n)部署Nginx后字体加载失败解决方案

问题描述

  • Angular国际化应用部署在本地Nginx服务器,页面功能正常,但字体文件无法加载
  • 浏览器控制台显示字体请求指向Nginx根目录(如/assets/fonts/xxx.ttf),而非对应语言包目录下的assets文件夹(如/en/assets/fonts/xxx.ttf)

文件夹结构说明

Nginx根目录html下包含各语言子目录:en、en-CA、en-US,每个语言目录内有assets/fonts文件夹存放字体文件,以及Angular编译生成的index.html等应用文件。

当前Nginx配置

http {
    include       mime.types;
    default_type  application/octet-stream;
   
    sendfile        on;
    keepalive_timeout  65;

    map $http_accept_language $accept_language {
        ~*^en-US en-US;
        ~*^en-CA en-CA;
        ~*^en en;
    }

server {
    listen 80;
    server_name localhost;
    root html;

    if ($accept_language ~ "^$") {
        set $accept_language "en";
    }

    rewrite ^/$ /$accept_language permanent;

    location ~ ^/(en-CA|en-US|en) {
        try_files $uri /$1/index.html?$args;
    }
    
    location ~* \.(eot|ttf|woff)$ {
        add_header Access-Control-Allow-Origin *;
    }
    # ...
}

解决方案

方案1:修正Angular编译时的base href(推荐)

编译Angular应用时,为每个语言包指定对应语言目录作为base-href,Angular会自动为所有资源请求添加语言目录前缀:

# 编译en版本
ng build --localize --base-href /en/
# 编译en-CA版本
ng build --localize --base-href /en-CA/
# 编译en-US版本
ng build --localize --base-href /en-US/

重新部署编译后的文件后,字体请求会自动指向/[lang]/assets/fonts/路径,无需修改Nginx配置。

方案2:修改Nginx配置重写字体请求路径

如果无法重新编译Angular应用,可通过Nginx重写规则将根目录下的字体请求转发到对应语言目录:
修改Nginx的server块配置,添加字体请求重写规则:

server {
    listen 80;
    server_name localhost;
    root html;

    if ($accept_language ~ "^$") {
        set $accept_language "en";
    }

    rewrite ^/$ /$accept_language permanent;

    # 处理语言目录下的应用请求
    location ~ ^/(en-CA|en-US|en) {
        try_files $uri /$1/index.html?$args;
        
        # 该语言目录下的字体直接返回
        location ~* \.(eot|ttf|woff)$ {
            add_header Access-Control-Allow-Origin *;
        }
    }
    
    # 捕获根目录下的字体请求,重定向到当前语言目录
    location ~* ^/assets/fonts/.*\.(eot|ttf|woff)$ {
        rewrite ^/assets/fonts/(.*)$ /$accept_language/assets/fonts/$1 permanent;
        add_header Access-Control-Allow-Origin *;
    }
}

此配置会将所有指向/assets/fonts/的字体请求,重定向到浏览器偏好语言对应的目录下的字体文件。

内容的提问来源于stack exchange,提问作者Libin Jose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:22:20