Angular13 Angular 部署多个语言环境

2024-02-25 开发教程 Angular13 匿名 7

部署多个语言环境

如果 ​myapp ​是包含项目可分发文件的目录,你通常会在语言环境目录中为不同的语言环境提供不同的版本,比如法语版的 ​myapp/fr​ 和西班牙语版的 ​myapp/es​。

带有 ​href​ 属性的 HTML ​base ​标签指定了相对链接的基本 URI 或 URL。如果你将工作空间构建配置文件 ​angular.json​ 中的 ​"localize"​ 选项设置为 ​true ​或语言环境 ID 数组,CLI 会为应用程序的每个版本调整 base ​href​。要为应用程序的每个版本调整 base ​href​,CLI 会将语言环境添加到配置的 ​"baseHref"​ 中。在工作区配置文件 ​angular.json​ 中为每个语言环境指定 ​"baseHref"​。以下示例展示了设置为空字符串的 ​"baseHref"​。

"projects": {
"angular.io-example": {
// ...
"i18n": {
"sourceLocale": "en-US",
"locales": {
"fr": {
"translation": "src/locale/messages.fr.xlf",
"baseHref": ""
}
}
},
"architect": {
// ...
}
}
}
// ...
}

此外,要在编译时声明 base ​href​,请将在 CLI 中使用带有 ​--baseHref​ 选项的 ​ng build​ 。

配置服务器

多语言的典型部署方式是为来自不同子目录的每种语言提供服务。使用 ​Accept-Language​ HTTP 标头将用户重定向到浏览器中定义的首选语言。如果用户未定义首选语言,或者首选语言不可用,则服务器将回退到默认语言。要更改语言,就转到另一个子目录。 子目录的更改通常使用应用程序中实现的菜单进行。

Nginx 范例

以下示例展示了 Nginx 配置。

http {
# Browser preferred language detection (does NOT require
# AcceptLanguageModule)
map $http_accept_language $accept_language {
~*^de de;
~*^fr fr;
~*^en en;
}
# ...
}
server {
listen 80;
server_name localhost;
root /www/data;
# Fallback to default language if no preference defined by browser
if ($accept_language ~ "^$") {
set $accept_language "fr";
}
# Redirect "/" to Angular application in the preferred language of the browser
rewrite ^/$ /$accept_language permanent;
# Everything under the Angular application is always redirected to Angular in the
# correct language
location ~ ^/(fr|de|en) {
try_files $uri /$1/index.html?$args;
}
# ...
}

Apache 范例

以下示例展示了 Apache 配置。

<VirtualHost *:80>
ServerName localhost
DocumentRoot /www/data
<Directory "/www/data">
RewriteEngine on
RewriteBase /
RewriteRule ^../index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (..) $1/index.html [L]
RewriteCond %{HTTP:Accept-Language} ^de [NC]
RewriteRule ^$ /de/ [R]
RewriteCond %{HTTP:Accept-Language} ^en [NC]
RewriteRule ^$ /en/ [R]
RewriteCond %{HTTP:Accept-Language} !^en [NC]
RewriteCond %{HTTP:Accept-Language} !^de [NC]
RewriteRule ^$ /fr/ [R]
</Directory>
</VirtualHost>