问题标签 [angular-i18n]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular6 - Angular 6:i18n:如何更新已翻译的现有 .xlf 文件?
在 Angular 6 中,既然我想我理解了如何制作 i18n 文件并利用它们(例如https://angular.io/guide/i18n),我想知道如何维护所述文件。如果我进入并更改 html,据我所知,我将不得不使用ng xi18n
命令重新生成 messages.xml 文件,这意味着我将需要将文件重新翻译成其他语言,或者至少,进行某种视觉匹配,以便我可以将某些 div 标签的内容从已翻译的旧文件移至新文件的新位置。维护更改似乎需要很多开销,我希望我遗漏了一些东西,但这是维护文件的预期工作流程吗?以下是正确的[我希望不是],还是有更好的方法我不知道?
创建:
ng xi18n
使用命令生成 messages.xlf- 复制并重命名 messages.xlf => messages.fr.xlf
- 打开messages.fr.xlf,复制标签之间的内容并将其粘贴在下面,然后重命名source => target,然后将内容翻译成新的语言(例如法语)
维护:
- 对 html 和/或内容进行更改后,使用
ng xi18n
命令重新生成 messages.xlf - 制作messages.xlf的副本并重命名(例如messages.fr2.xlf)
- 打开messages.fr.xlf并尝试识别可以复制到messages.fr2.xlf的内容,然后删除messages.fr.xlf并重命名messages.fr.xlf??? 对所有语言重复???
是否有我缺少的命令或工具可以帮助我匹配我放入 i18n 标签(例如i18n="@@myUniqueTag"
)中的持久 ID,以便我可以将翻译的目标(例如<target>my translated content</target>
)自动移动到新文件?还是我真的必须手动将所有目标移动到新文件并将它们与每个源标签匹配?
javascript - Angular 2 路由 - 重定向到不同的应用程序
我正在用其他语言生成我的应用程序的各种版本。我正在使用 AOT(提前)编译,所以我最终得到了一个结构如下的静态可部署站点:
我目前可以使用下拉菜单在主要语言网站之间切换,用户可以在其中选择他们的首选语言,然后我使用纯 JavaScript 加载所需站点的主条目文件,如下所示:
这是可行的,因为请求实际文件似乎index.html
意味着 Angular 不会将请求解释href
为 Angular 路由。
不过,我想要发生的是,当用户输入路径中已经包含语言版本的 URL 时,我希望提供该语言版本。我还希望保留 URL 路径,以便 Angular 路由为请求的 URL 加载适当的组件。
例如:
用户输入
myDomain.com/fr/myPage
子目录下的应用程序
/fr/
被加载,该应用程序中的 Angular 路由加载相关组件MyPage
目前,如果我输入 URL myDomain.com/fr/myPage
,Angular 路由会尝试将所需的子文件夹解释fr
为不存在的路由,因此出现以下错误:
如何加载所需的应用程序和正确的组件?必须有一种方法可以让 Angular 识别fr
URL 中的 引用不同的应用程序。也许我缺少构建配置或其他东西?package.json
这是我构建法语版本的脚本:
angular - Angular 6 - i18n 与 ngx-translate
我正在使用 Angular 6 进行一个大型项目。这个项目需要大量的 i18n 集成。我正在努力就如何进行做出正确的决定。
我看到它的方式是我可以选择:
- ngx-translate ( https://github.com/ngx-translate/core )
- 角 i18n ( https://angular.io/guide/i18n )
我倾向于选择选项 2;Angular 的 i18n。这是因为它是 Angular 自己的内置包,对我来说更合适。显然,它对 SEO 也更好,并且在没有任何工作的情况下对性能稍微好一点。另外,现在它发布了,我认为 ngx-translate 可能已被弃用。这里有很多信息:Angular 5 国际化。
但是,这是我的保留意见:
- 显然 Angular 的版本是相当新的/仍在追赶(https://github.com/ngx-translate/core/issues/495)。是不是太新了?
- 显然我必须为每种语言建立一个单独的网站(https://angular.io/guide/i18n#template-translations)???我真的不认为这会是一件好事。是对的吗?还是每次都动态插入模板文件?我知道使用 ngx-translate 翻译的单词只是存储在 .json 文件中 - 我喜欢它的简洁性。我不认为我们想要一堆不同的网站构建。
有没有办法使用 Angular i18n 进行实时语言切换?即在页面上切换语言而不从服务器重新加载/重新获取数据?这就是他们所说的JIT吗?
有没有人尝试过https://github.com/robisim74/angular-l10n?看起来也很好。
angular6 - 添加 HttpInterceptor 后,ngx-translate 无法正常工作
就像标题说的那样,在我将 HttpInterceptor 添加到我的代码之前,一切正常,问题是我有两种方法来翻译我的字段,一种仍然可以正常工作,第二种不像下面显示的那样
应答器内的翻译正在工作,而在 dxButton 中使用管道的翻译不起作用这是我的拦截器服务
有没有人知道为什么在我添加 httpInterceptor 之后使用 Pipe 停止工作的翻译。
angular - angular 5 为 i18n 动态更改语言环境
我正在尝试动态更改语言环境以更改 i18n 语言。我有两个文件,一个是英文值,另一个是法文值。
我现在尝试的是这样的:
但它给了我以下错误:
关于如何动态从英语切换到法语的任何想法?:/
angular - 测试角度 i18n - 如何提供 i18nLocale 进行测试
使用 angular-i18n 并尝试使用 CLI ('ng test') 进行单元测试,但不知道如何为测试的构建设置 i18nLocale,就像我对“ng build”的指定构建配置所做的那样。
或者,如果我可以在运行时进行设置(请注意,我可以使用 ...{provide: LOCALE_ID, useValue: 'he'}... 设置语言环境,但这不会触发 i18n 机制)。
任何想法?
angular - Angular 6 混合 i18n JIT 和 AOT
似乎开发使用JIT,生产使用AOT,这很好。但是我正在尝试使用 JIT 读取似乎为空的 LOCALE_ID:
出来为空。
我怀疑我需要在 JIT 设置中指定语言。按照这些说明: https ://angular.io/guide/i18n#merge-with-the-jit-compiler
但是,如果我进行此设置,以后使用 AOT 进行翻译不会有冲突吗?- 如何在 JIT 中访问默认语言环境而不使其为空?- 如何在 Angular 6 中混合 JIT 和 AOT?
javascript - 有没有办法用 Angular 本机国际化机制翻译绑定?
问题
我正在为我的 Angular 6 应用程序实现翻译。它需要支持多种语言的应用程序的静态文本。我在运行时不需要动态翻译——我只需要生成一个应用程序,其中包含在构建期间选择的语言的文本。
Angular 有完整的国际化页面,但它只关注模板中所有文本都被硬编码的情况,如下面的代码:
在我的模板中几乎没有这种情况。此外,在我看来,用模板中硬编码的所有文本编写整个应用程序似乎是不可能或极其肮脏的,所以如果这是唯一可用于翻译的机制,那么它对我来说似乎完全没用。
在我的组件中,我经常将文本绑定到一些 JavaScript 变量(或者是精确的对象属性),如下面的代码所示:
假设变量仍然是静态的,只是存储在组件或服务中,例如:
问题
有没有办法在构建期间使用 Angular 原生翻译(国际化)机制来翻译锚文本(或实际上是成员的text
属性)?navigationEntries
JavaScript 数据的结构和模板的 HTML 可以改变。
如果 Angular 本机国际化机制无法处理这个问题(但我想知道它们到底有什么用),那么还有哪些其他解决方案可以帮助实现这种翻译?我找到了 ngx-translate库,但它提供的翻译可以在运行时动态更改,理想情况下,我不想在所有翻译文本上添加不必要的动态解决方案开销。
angular - 本地化 i18n 字符串时如何排除其他元数据
当升级到 Angular 6.1.1 时,看起来有一些额外的元数据标签现在包含在生成的 xmb 文件中。例如,这是一个使用 angular 4 的 xmb 片段示例:
这是升级到 Angular 6.1.1 后的输出:
请注意插值字符串现在如何在插值部分 ( <ex>{{ (target$ | async)?.token | async }}</ex>
) 中获得输出。
运行时是否可以禁用此功能npm run xi18n
?它在我们的本地化过程中引起了很多问题,我们宁愿不编写每次都运行的字符串解析器