Angular2 i18n - 如何通过代码进行翻译

时间:2016-12-13 16:41:26

标签: angular internationalization

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

4 个答案:

答案 0 :(得分:1)

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

greetings = $localize`Hello ${this.world}!`;

Internationalization with @angular/localize

答案 1 :(得分:0)

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

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是不可能的。您能否在问题跟踪器中创建正确的功能请求   填写问题模板并添加用例(并链接到其他   如果适用,实施。)

     

感谢。

目前似乎没有可能在代码中使用翻译。

虽然,angular2的库类似于$translate

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混合应用程序),这是最好的解决方案,因为我能够为两个角度版本使用相同的翻译文件。

答案 2 :(得分:0)

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

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

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

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

在章节&#34;现有技术&#34;中,表中列出了一些要比较的库,但它们都不支持AOT。

答案 3 :(得分:0)

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

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


private translate: TranslateService;


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

这似乎有两种方法:

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

请参阅有关即时方法的文档说明。 https://github.com/ngx-translate/core

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