Angular 1.3.15
中文本翻译的最佳做法是什么?此版本的Angular仅具有部分本地化支持,具有复数和格式转换,但没有文本转换。对于Angular的未来版本,有一些外部库,如angular-translate和官方库i18n。
答案 0 :(得分:2)
解决方案是将angular-translate用于翻译文件,将angular-dynamic-locale用于本地化文件。 angular-translate上的翻译引擎提供了一些非常有用的功能,可以帮助您在各种场景中,它似乎是非常成熟的库。无需在下一版角度中将其迁移出去。角度动态区域设置使用the angular-i18 library提供的本地化文件,因此它基本上是以编程方式更改本地化的扩展。
使用bower安装库并在index.html中加载脚本。 Angular-translate使用angular-translate-loader-static-files
模块加载json文件:
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/angular-translate/angular-translate.js"></script>
<script src="bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js"></script>
<script src="bower_components/angular-dynamic-locale/tmhDynamicLocale.min.js"></script>
在config中加载angular-translate和angular-dynamic-locale模块并初始化提供程序,以从localization
目录加载翻译和语言环境文件:
var app = angular.module('app', ['pascalprecht.translate', 'tmh.dynamicLocale'])
.config(function ($translateProvider, tmhDynamicLocaleProvider) {
$translateProvider
.useStaticFilesLoader({
prefix: 'localization/translations-',
suffix: '.json'
})
.preferredLanguage('en-US')
.useSanitizeValueStrategy('escaped') // Security for escaping variables
.usePostCompiling(true); // Post compiling angular filters
tmhDynamicLocaleProvider
.localeLocationPattern('/localization/angular-locale_{{locale}}.js');
)};
向控制器注入服务并加载资源文件:
app.controller('Ctrl', ['$scope', 'tmhDynamicLocale', '$translate',
function ($scope, tmhDynamicLocale, $translate) {
$translate.use('en-US'); // translations-en-US.json
tmhDynamicLocale.set('en-US'); // angular-locale_en-US.js
}]);
现在翻译和语言环境适用于模板:
// angular-locale_en-US.js
{{ 100 | currency }} // $100.00
// translations-en-US.json
// "NAME" : "John"
<label translate>NAME</label>
<input type="text" ng-model="name" placeholder="{{ 'NAME' | translate }}">
答案 1 :(得分:0)
在尝试内化使用angular构建的单页应用时,我也遇到了困难。正如您正确指出的那样,未来的版本将为i18n提供良好的支持。
在我的情况下,我最终使用过滤器来翻译文本。根据您在应用上的内容量,这可能是也可能不是一个好的解决方案。
以下文章描述的解决方案与我实施的解决方案非常接近,以及其他几个甜蜜的技巧
http://blog.trifork.com/2014/04/10/internationalization-with-angularjs/
我很想知道你采取了什么方法来解决这个问题 问题
干杯