Angular i18n应用程序的Nginx配置
我使用支持法语和英语的i18n构建了angular-5应用程序.然后,我为每种支持的语言部署了该应用程序的单独版本
I built an angular-5 application using i18n that supports both french and english. I then deployed a separate version of the app for each supported language
- dist
|___ en/
| |__ index.html
|___ fr/
|__ index.html
我还添加了以下nginx配置,以两种语言为应用程序提供服务;
I also added the following nginx configuration to serve the application in both languages;
server {
root /var/www/dist;
index index.html index.htm;
server_name host.local;
location ^/(fr|en)/(.*)$ {
try_files $2 $2/ /$1/index.html;
}
}
我想做的是同时服务两个应用程序,并允许在英语和法语版本之间进行切换.
What I wanted to do is to serve both applications and allow switching between the english and the french version.
例如,假设我在host.local/en/something
如果我切换到host.local/fr/something
,则应该获得内容"页面的法语版本.
Let's say for example I'm on host.local/en/something
if I switch to host.local/fr/something
I should get the french version of the "something" page.
使用共享的nginx配置,每次浏览应用程序时刷新页面时都会收到404 not found错误,这也阻止了我彼此独立浏览应用程序并在它们之间切换.
With the nginx configuration I shared, I get a 404 not found error every time I refresh pages when browing my apps which also prevents me from browsing my apps independently from one another and switching between them.
我想念什么?实现该目标的合适的Nginx conf是什么?
What did I miss? What's the appropriate Nginx conf to achieve that?
我在iis上做过同样的事情,首先必须使用"base-href"选项构建应用程序:
i've done the same thing on iis, first you have to build your app with "base-href" option:
ng build --output-path=dist/fr --prod --bh /fr/
ng build --output-path=dist/en --prod --bh /en/
对于nginx,请使用此配置
and for nginx use this config
location /fr/ {
alias /var/www/dist/fr/;
try_files $uri$args $uri$args/ /fr/index.html;
}
location /en/ {
alias /var/www/dist/en/;
try_files $uri$args $uri$args/ /en/index.html;
}
要从/en/someroute导航到/fr/someroute,您可以在具有语言切换器的组件中获取当前路由器的URL
and for navigation from /en/someroute to /fr/someroute , you can get the current router url in your component where you have the language switcher
getCurrentRoute() {
return this.router.url;
}
,然后单击语言选择器,您将重定向到与所选语言相同的路由:
and when click on a language selector you redirect to the same route with the selected language :
<li *ngFor="let language of languages;let i=index" >
<a href="/{{language.lang}}/#{{getCurrentRoute()}}" (click)="changeLanguage(language.lang)">
{{language.lang}}
</a>
</li>
更改语言方法
changeLanguage(lang: string) {
const langs = ['en', 'fr'];
this.languages = this.allLanguages.filter((language) => {
return language.lang !== lang;
});
this.curentLanguage = this.allLanguages[langs.indexOf(lang)].name
localStorage.setItem('Language', lang);
if (isDevMode()) {
location.reload(true);
}
}