【问题标题】:Angular2 i18n - How to get translation through codeAngular2 i18n - 如何通过代码进行翻译
【发布时间】:2017-04-28 19:36:16
【问题描述】:

我在 i18n(对于 Angular2)中找不到任何文档,除了在 HTML 中显示已翻译的文本。 我需要做的是直接在我的代码中获取翻译后的文本。在使用 ng-translate 功能的 Angular 1 中,使用 $translate 服务很容易获得它。我在 Angular 2 的新 i18n 中找不到等价物。我错过了什么吗?

【问题讨论】:

标签: angular internationalization


【解决方案1】:

从 Angular 9 开始,有一个实验性且未记录的 $localize 标签功能。它可以应用于模板字符串。

问候 = $localize`你好 ${this.world}!`;

Internationalization with @angular/localize

【讨论】:

【解决方案2】:

这是在 github 上发布关于 i18n 计划的链接:

https://github.com/angular/angular/issues/9104

在 06-11-2016 @zh99998 问:

如何在脚本中获取 i18n 字符串?例如:

let _THIS_IS_A_I18N_STRING = ??? alert(_THIS_IS_A_I18N_STRING);

和@vicb(angular2 成员)说:

@zh99998 @marcalj 这在当前的 impl 中是不可能的。您能否在问题跟踪器中创建适当的功能请求 填写问题模板并添加用例(并链接到其他 实施(如果适用)。

谢谢。

目前似乎无法在代码中使用翻译。

虽然,有类似于 $translate 的 angular2 库:

https://github.com/ocombe/ng2-translate

用法类似于$translate(来自文档):

translate.get('HELLO', {value: 'world'}).subscribe((res: string) => {
    console.log(res);
    //=> 'hello world'
});

用法类似于translate 过滤器(来自文档):

<div>{{ 'HELLO' | translate:param }}</div>

在我的情况下(ng1/ng2 混合应用程序),这是最好的解决方案,因为我能够为两个角度版本使用相同的翻译文件。

【讨论】:

  • 这可能很有趣,但我们已经用原生 i18n 实现了所有内容,所以我们不想添加另一个库......无论如何,谢谢!
  • 确实,处理原生可用的东西的第三方库听起来很奇怪。真的没有办法在代码中访问翻译!?
【解决方案3】:

我搜索过相同的主题。看来,Angular i18n 还不支持使用开箱即用的行为来翻译 ts 代码中的字符串。

https://github.com/angular/angular/issues/11405

我们已经实现了翻译服务和一起使用管道。还有一些其他的库,例如ngx-translate 在源代码中使用翻译。以下是关于 i18n 的 Angular 设计文档。

https://docs.google.com/document/d/1LH7lJ1GjRgpGUjzNb6Eg4xrPooRdi80QOTYYh8z_JyY/edit#

在“现有技术”一章中,一些库列在表中进行比较,但它们都不支持 AOT。

【讨论】:

  • 有趣的代码 - 一定会看看。谢谢。
【解决方案4】:

也许这已经被回答了,但以下为我做了。

import { TranslateService } from '@ngx-translate/core';


private translate: TranslateService;


const response= this.translate.instant('HELLO_WORLD');

这似乎有两种方法:

  1. get 方法返回一个 observable
  2. instant 方法直接返回翻译。 需要注意的是,即时方法是同步的

请参阅他们关于 instant 方法的文档说明。 https://github.com/ngx-translate/core

这个方法是同步的,默认的文件加载器是异步的。您有责任知道您的翻译何时已加载,并且使用此方法是安全的。如果你不确定,那么你应该使用 get 方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2019-10-14
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多