我所知道的i18n的早期Angular文档是Stephen Fluin的示例代码。 https://github.com/StephenFluin/i18n-sample/commit/e2cb2006c614fce0f6d623def5f13174583233d3
我试图密切关注它。 Atom-typescript没有错误,但是我为每个元素都获得了不可用的控制台消息,如下所示<和>删除 -
zone.js:355未处理的承诺拒绝:模板解析错误:
md-grid-tile [错误 - >]按钮id =“terms”md-button aria-label =“TERMS”i18n =“服务条款按钮”TERMS / button / md“):AppComponent @ 63 :19 消息不可用于消息id =“8476fc13627507c3d0ec6b85dae533f0c5e44eef”(“ - label =”TERMS“i18n =”服务条款按钮“TERMS / button / md-grid-tile
我的相关代码是:
的package.json 与显示的相同,除了我不包括@ angular / tsc-wrapped,因为这里似乎没必要。
component.html - 我的HTML示例如下:
<h4 id="motto" i18n="our motto stating the value of using this site">MOTTO</h4>
<md-grid-tile><button id="terms" md-button aria-label="TERMS" i18n="button for Terms of Service">TERMS</button></md-grid-tile>
main.ts 我遗漏了生产环境线&amp; polyfills
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { TRANSLATIONS, TRANSLATIONS_FORMAT, LOCALE_ID } from '@angular/core';
import { AppModule } from './app.module';
import { TRANSLATION } from './components/navigation/language/messages.en';
platformBrowserDynamic().bootstrapModule(
AppModule,
{providers: [
{ provide: TRANSLATIONS, useValue:TRANSLATION },
{ provide:TRANSLATIONS_FORMAT, useValue:'xlf' },
{ provide:LOCALE_ID, useValue:'en' }
]});
messages.en.ts 重复元素的示例如下:
export const TRANSLATION = `
<?xml version='1.0' encoding='utf-8'?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" datatype="plaintext" original="ng2.template">
<body>
<trans-unit id="motto" datatype="html" approved="yes">
<source>MOTTO</source> <target state="translated">Find a home, save time</target>
<note priority="1" from="description">our motto stating the value of using this site</note>
</trans-unit>
<trans-unit id="terms" datatype="html" approved="yes">
<source>TERMS</source> <target state="translated">Terms of Service</target>
<note priority="1" from="description">button for Terms of Service</note>
</trans-unit>
messages.en.xlf 重复元素的再次示例
<?xml version='1.0' encoding='utf-8'?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
<file source-language="en" datatype="plaintext" original="ng2.template">
<body>
<trans-unit id="motto" datatype="html" approved="yes">
<source>MOTTO</source> <target state="translated">Find a home, save time</target>
<note priority="1" from="description">our motto stating the value of using this site</note>
</trans-unit>
messages.xlf 再次举例说明重复元素
<?xml version="1.0" encoding="UTF-8" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="ng2.template">
<body>
<trans-unit id="motto" datatype="html">
<source>MOTTO</source>
<target/>
<note priority="1" from="description">our motto stating the value of using this site</note>
</trans-unit>
Stephen的代码有40位十六进制数字用于转换单元ID。我不知道它们是如何产生的。我的代码有id =“motto”之类的东西。我的控制台消息包含40位十六进制数字,但每次尝试时它们似乎都会改变。这部分是一个谜。
这是非常流行的,没有真正的文档,但有谁知道如何解决这个问题?我出城直到10/17,但是当我回来时,我会热切地尝试好主意。
答案 0 :(得分:0)
事实证明,上面引用的Stephen Fluin的帖子中的文件是由Angular翻译过程生成的。不要尝试复制,修改和粘贴 - 就像我上面所做的那样!经过大量的搜索,我发现在Angular2的devdocs的Cookbook部分中,这个过程设置了描述。 http://devdocs.io/angular~2_typescript/cookbook/i18n
这是一个复杂的(对我来说,无论如何),代码和翻译文件的多步骤设置。但它的确有效。您可以选择及时的jiT或提前AoT翻译。这也是做出决定的多步骤研究。目前,谷歌建议使用jiT进行开发(虽然绘制页面的速度较慢)和AoT用于生产。 AoT目前设置起来非常复杂。谷歌表示他们正在努力使其更简单。希望能为您节省一些时间。