解决方案是将angular-translate 用于翻译文件,将angular-dynamic-locale 用于本地化文件。 angular-translate 上的翻译引擎提供了一些非常有用的功能,可以在各种场景中为您提供帮助,它似乎是一个非常成熟的库。无需在 Angular 的下一个版本中将其迁移出去。 angular-dynamic-locale 使用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>
加载 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 }}">