我无法分辨XMB/XTB和XLF/XLIFF是否具有相同功能的不同风格,或者在使用Angular的i18n进行翻译时是否有充分理由使用其中一种与另一种相比.一种格式在翻译软件中更占优势吗?是否有关于Angular更好的XMB/XTB?
Angular i18n文档将它们全部列为选项,并且似乎默认为XLF,但似乎没有解释文件格式的任何差异或优缺点.
是否可以在需要条件操作的字符串上使用 i18n
<h2 i18n>{{ updateMode ? 'Edit' : 'Add'}}</h2>
Run Code Online (Sandbox Code Playgroud) 有一种情况在子组件上定义输入,如下所示:
interface MyValues {
text: string;
path: string;
someOtherValue: string;
}
@Input() myValues: MyValues;
Run Code Online (Sandbox Code Playgroud)
我需要myValues通过如下输入从父组件传递给子组件:
<my-child-component [myValues]="myValues" />
Run Code Online (Sandbox Code Playgroud)
由于它不是简单的数据类型输入,因此我无法使用此处Angular 文档中推荐的 i18n 属性样式。这是一个具有多个值的对象,因此在传递给子组件时无法对其进行翻译(除非我遗漏了某些东西)。
在子组件中,有一些代码如下:
<span *ngFor="let myValue of myValues">
<a>{{myValue.Text}}</a>
</span>
Run Code Online (Sandbox Code Playgroud)
通常我想做的是为需要翻译的锚点分配一个 id,如下所示:
<a i18n="@@myChildComponent_text">{{myValue.Text}}</a>
Run Code Online (Sandbox Code Playgroud)
这样做的问题是它会在名为的翻译文件中创建一个字段,@@myChildComponent_text以进行翻译。但是,传递给这个子组件的这个对象在里面的值是动态的myValues,因此字面翻译将根据传入的内容而变化。
我的问题是,在将对象传递给子组件上的输入时,我如何仍然利用i18nAngular 国际化能力和@@id自定义 id,该对象将在其中具有需要转换的不同物理值?
我正在开发一个网络应用程序,我需要添加多语言支持。我浏览了 Angular 文档,发现翻译是在构建时发生的。我很好奇我们是否可以以应用程序在运行时翻译成不同语言的方式来开发它。我做了一些研究,但找不到正确的答案。
所以我的问题是,我可以在菜单顶部的下拉语言选择器中添加并在运行时更改语言吗?
在我们的 Angular 应用程序中,我们使用 Angular i18n 机制在组件 HTML 中将字符串标记为可翻译,并ng xi18n用于提取可翻译字符串并将它们写入 xlf 文件。但是除了我们的应用程序字符串之外,xlf 文件还包含来自 ng-bootstrap 库的字符串,我们在我们的应用程序中使用了它,并且它的所有代码都在 node_modules 文件夹中。
下面的 xml 块是一个示例,它显示了一个字符串,我们不希望在我们的 messages.xlf 中有,但它也被ng xi18n工具提取:
...
<trans-unit id="ngb.alert.close" datatype="html">
<source>Close</source>
<context-group purpose="location">
<context context-type="sourcefile">node_modules/@ng-bootstrap/ng-bootstrap/alert/alert.d.ts</context>
<context context-type="linenumber">3</context>
</context-group>
</trans-unit>
...
Run Code Online (Sandbox Code Playgroud)
有没有办法在提取的字符串中不包含来自 node_modules 的内容?像一些可以在某个地方配置的排除选项?我在 google 上找不到任何类似的东西,但我想在打开 angular-cli github 项目上的错误请求之前先在这里问一下......
更多细节:
通过以下步骤给出了重现此问题的简单方法:
@ng-bootstrap/ng-bootstrap": "^5.2.1"将这一行添加到 package.json 并运行 npm install<div i18n>example text</div>我正在从 Angular 8.0 升级到 Angular 9.1.1。通过一些工作,一切都可以正常构建并运行。我遇到了本地化问题https://angular.io/guide/migration-localize并遵循了这些说明 - 这使我的项目能够构建和运行!但是,当我运行测试(业力/茉莉花)时,我仍然遇到这个问题
我使用 CLI 来升级我的项目。我似乎找不到任何其他迁移本地化所需的步骤。
我正在使用 TestBed 进行单元测试,但在调用 时失败TestBed.createComponent,抛出错误:
Error: It looks like your application or one of its dependencies is using i18n.
Angular 9 introduced a global `$localize()` function that needs to be loaded.
Please run `ng add @angular/localize` from the Angular CLI.
(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.
For server-side rendering applications add the import to your `main.server.ts` file.)
Run Code Online (Sandbox Code Playgroud)
失败测试组件模板中的一段 HTML 示例是:
<span i18n> …Run Code Online (Sandbox Code Playgroud) 我正在使用@angular/localize 以三种语言使用我的应用程序,但在部署服务器时遇到了麻烦。原因是即使所有语言环境都使用相同的资产,它们也会被下载并为每个资产进行部署。
这就是为什么我试图删除除一个语言环境之外的所有资源的原因。我使用脚本并删除了文件夹本身。但是现在我希望其他语言环境使用来自 en-US 的资产,而不是像他们现在所做的那样说找不到 404。
目前有没有办法实现这一目标?
我的语言环境配置是这样的:
"i18n": {
"sourceLocale": "en-US",
"locales": {
"fr": "src/locale/messages.fr.xtb",
"pt": "src/locale/messages.pt.xtb",
"hi": "src/locale/messages.hi.xtb",
}
},
Run Code Online (Sandbox Code Playgroud)
并检查服务我正在使用此配置:
"prod-hi": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"deleteOutputPath": false,
"assets": [],
"localize": ["hi"]
},
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习并在项目中添加角度国际化。我只能理解角度文档的编译时翻译(https://angular.io/guide/i18n-overview)。
我需要像这样的东西https://stackblitz.com/github/ngx-translate/example这是第三方库“ngx-translate”。
难道我们不能仅使用 Angular 库而不使用任何第三方库来实现相同的运行时翻译吗?
如果角度库可以进行运行时翻译,请指导我。
internationalization angular-i18n ngx-translate angular angular-localize
我从 Angular 文档中读到了这一点: https: //angular.io/guide/i18n
我不清楚:一旦将翻译添加到应用程序并使用“ng xi18n”创建源文件,应用程序代码就会在添加单词和新翻译后被修改。如何识别这些新翻译以及如何将它们整合到现有的语言翻译中?我的意思是,第一个翻译文件发送给翻译人员,返回后进行了集成,但现在新添加的要翻译的元素不在那里。整合这些新元素进行翻译的过程是怎样的?
非常感谢您的任何反馈!问候, 法比努斯
我有 2 个文件en.json,并且xx.json有 Angular 应用程序中的翻译。常见的想法是在两个文件中为多语言应用程序创建翻译,但有时一些程序员仅在其中一个文件中添加翻译,因为他们仅用自己的语言测试应用程序。
我正在寻找能够检查两个 JSON 文件中相同结构的工具,否则它会抛出错误,并且在您为第二语言创建翻译时有助于添加。您知道这方面有什么好的做法、工具或插件吗?我正在使用网络风暴。
angular-i18n ×10
angular ×9
angular-cli ×2
angular5 ×1
angular9 ×1
json ×1
locale ×1
testbed ×1
typescript ×1
webstorm ×1