【问题标题】:angular 5 change locale dynamically for i18nangular 5 为 i18n 动态更改语言环境
【发布时间】:2019-01-13 05:54:33
【问题描述】:

我正在尝试动态更改语言环境以更改 i18n 语言。 我有两个文件,一个是英文值,另一个是法文值。

我现在尝试的是这样的:

 ngOnInit() {
    const localeName = localStorage.getItem('locale') || 'fr';
    import(`@angular/common/locales/${localeName}.js`).then(locale => {
      registerLocaleData(locale.default);
    });
  }

但它给了我以下错误:

error TS1323: Dynamic import cannot be used when targeting ECMAScript 2015 modules.

关于如何动态从英语切换到法语有什么想法吗? :/

【问题讨论】:

  • 不确定这是否重复,但感谢您的链接,我可能已经跳过了这个。加:那里提出的解决方案对我不起作用。它完成但不做任何事情

标签: angular internationalization locale angular-i18n


【解决方案1】:

嗯,不确定这是一个很好的解决方案,但这就是我所做的。它适用于我的目的,所以也许它可以帮助其他人。

在 main.ts 中:

if (localStorage.getItem('locale') === null) {
localStorage.setItem('locale', 'en');
}

const locale = localStorage.getItem('locale');
declare const require;
const translations = require(`raw-loader!./locale/messages.${locale}.xlf`);

platformBrowserDynamic().bootstrapModule(AppModule, {
  providers: [
    {provide: TRANSLATIONS, useValue: translations},
    {provide: TRANSLATIONS_FORMAT, useValue: 'xlf'}
  ]
});

在 html 代码中:

<a  mat-menu-item href="" (click)="changeLang('fr')">
    <mat-icon>settings</mat-icon>
    <span>FR</span>
  </a>

  <a  mat-menu-item href="" (click)="changeLang('en')">
    <mat-icon>settings</mat-icon>
    <span>EN</span>
  </a>

在 component.ts 中:

changeLang(lang: string) {

    if (lang === 'fr') {
      localStorage.setItem('locale', 'fr');
    }

    if (lang === 'en') {
      localStorage.setItem('locale', 'en');
    }
  }

别对我大喊大叫,我只是一个有棱角的新手^^

【讨论】:

  • 嗨,刚刚在一个类似的问题上花了几个小时,并了解了标准 i18n 和页面“热”翻译之间的主要区别,我认为使用 github.com/ngx-translate/core 可以获得更好的结果跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 2019-04-23
相关资源
最近更新 更多