【问题标题】:Angular2 i18n language switchAngular2 i18n 语言切换
【发布时间】:2017-02-15 02:30:17
【问题描述】:

我正在寻找方法

  • 动态设置当前要显示的语言:我已经关注了最新的角度食谱here关于国际化 但它说“用户的语言被硬编码为 index.html 中的全局 document.locale 变量

如何在 angular2 + typescript 中动态设置?

这是我来自官方 Angular2 plunkr 的尝试:https://plnkr.co/edit/lWV4VhzpWYnCXeDBpzsn?p=preview 我已经注释掉了

document.locale='en';

并尝试在 typescript 服务中检索 window.document,并更改那里的语言环境,但尽管调用了它并正确设置了语言环境(在控制台中看到),但界面并未以所选语言显示 启动时

那么下拉按钮当然也不起作用,因为使用了相同的错误方式并且显示没有刷新,但这是下一步。

【问题讨论】:

  • 与此同时,我完成了一个读取 document.URL 并在 i18n-providers.ts 文件中设置 document.locale 的版本。这当然不是正确的方法,但同时我可以继续翻译 plnkr.co/edit/TE7raLGC9pvYfaRu6Syg?p=preview (此示例不适用于 plunkr,但可以在本地工作)

标签: angular dynamic typescript internationalization switching


【解决方案1】:

我正在将用户选择的语言密钥保存到本地存储中:

//<select name="selectLocate" (change)="onChange($event.target.value)">
 public onChange(localeId: string): void {
    localStorage.setItem('localeId', localeId);
    location.reload(true);
  }

然后强制重新加载,并在i18n.provider.ts

let locale = localStorage.getItem('localeId');

【讨论】:

  • 简单而伟大。我已经更改了 plunkr 示例,它工作正常! plnkr.co/edit/JyE4l4TjEruuPsrbanmK
  • 我没有使用systemsjs。是否可以使用 webpack 进行配置?
  • @sardarCoder 不知道你是否还在为此苦苦挣扎,但如果是的话。是的,您可以:只需使用 raw-loader 加载 xlf 文件:{test: /\.xlf/, loader: 'raw-loader'},
  • @GOB raw-loader 是一个用于 webpack 的加载器,可让您将文件作为字符串导入。那么?
  • 如果我在应用程序加载时获得设置并且它包含我应该使用的语言怎么办?我需要在不重新加载页面的情况下应用它的方法(不想获得两次设置)。
猜你喜欢
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2013-08-06
  • 2020-06-20
相关资源
最近更新 更多