我有一个已经构建好的 Angular 6 应用程序。现在我们计划将其支持为多种语言。我能够创建多个 xlf 文件并将目标字符串替换为语言。我的语言环境文件包含三个文件,例如 messages.en.xlf、messages.es.xlf 和 messages.fr.xlf,分别用于英语、西班牙语和法语。
根据浏览器的语言,应用程序应该选择所需的语言文件。如果浏览器设置为法语,它应该会自动获取 messages.fr.xlf 并以法语显示应用程序。
最初我的构建命令将是ng build --prod --output-hashing all
,但随着本地化更改,我需要使用--aot=false
并且--build-optimizer=false
我的应用程序的性能和加载时间变得更糟。
ng build --prod --output-hashing all --aot=false --build-optimizer=false
我的 main.ts 文件如下所示:
declare const require;
var userLang;
window.addEventListener('languagechange', function () {
// callLangugae();
location.reload(true);
});
function callLangugae() {
userLang = navigator.language;
userLang = userLang.split("-")[0];
switch (userLang) {
case 'es': {
registerLocaleData(localeEs);
break;
}
case 'fr': {
registerLocaleData(localeFr);
break;
}
case 'en': {
registerLocaleData(localeEn);
break;
}
default: {
userLang = 'en';
registerLocaleData(localeEn);
break;
}
}
}
callLangugae();
const translations = require(`raw-loader!./locale/messages.${userLang}.xlf`);
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [
{ provide: TRANSLATIONS, useValue: translations },
{ provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }
]
})
.catch(err => console.log(err));
我想知道是否有一种正确的方法可以根据浏览器的语言加载 xlf 文件,而不会出现性能问题并且不会使 AOT 为假。