【问题标题】:Angular 2 i18n gives Translation unavailable console messagesAngular 2 i18n 提供翻译不可用的控制台消息
【发布时间】:2017-02-21 23:18:46
【问题描述】:

我知道的 i18n 的早期 Angular 文档是 Stephen Fluin 的示例代码。 https://github.com/StephenFluin/i18n-sample/commit/e2cb2006c614fce0f6d623def5f13174583233d3

我试图密切关注它。 Atom-typescript 说没有错误,但我得到每个元素的翻译不可用控制台消息,如下所示,删除了 -

zone.js:355 未处理的承诺拒绝:模板解析错误:

md-grid-tile [ERROR ->] button id="terms" md-button aria-label="TERMS" i18n="button for Service Terms" TERMS /button /md"): AppComponent@63: 19 消息 id="8476fc13627507c3d0ec6b85dae533f0c5e44eef" ("-label="TERMS" i18n="button for Service Terms" 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>

ma​​in.ts 我遗漏了生产环境行和 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 位十六进制数字,用于 trans-unit id。我不知道它们是如何生成的。我的代码有 id="motto" 之类的东西。我的控制台消息包含 40 位十六进制,但每次我尝试某些东西时它们似乎都会改变。这部分是个谜。

这是非常前沿的,没有真正的文档,但有人知道如何解决这个问题吗?我在 10 月 17 日之前都在外地,但是当我回来时,我会热切地尝试好的想法。

【问题讨论】:

    标签: javascript angular internationalization translation


    【解决方案1】:

    事实证明,上面引用的 Stephen Fluin 帖子中的文件是由 Angular 翻译过程生成的。不要尝试复制、修改和粘贴——就像我在上面所做的那样!经过大量搜索,我发现在 Angular2 的开发文档的 Cookbook 部分中隐藏了该过程设置描述。 http://devdocs.io/angular~2_typescript/cookbook/i18n

    这是一个复杂的(无论如何对我来说)、多步骤的代码和翻译文件设置。但它有效。您可以选择即时 jiT 或提前 AoT 翻译。这也是一个多步骤的研究来做出决定。目前,Google 建议使用 jiT 进行开发(尽管绘制页面速度较慢)和使用 AoT 进行生产。 AoT 目前的设置非常复杂。谷歌表示他们正在努力让它变得更简单。希望这可以节省您一些时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-20
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2014-03-27
      相关资源
      最近更新 更多