角度和翻译

时间:2015-05-19 10:44:09

标签: angularjs localization translation

Angular 1.3.15中文本翻译的最佳做法是什么?此版本的Angular仅具有部分本地化支持,具有复数和格式转换,但没有文本转换。对于Angular的未来版本,有一些外部库,如angular-translate和官方库i18n

  1. 目前翻译的最佳做法是什么?
  2. 如果计划将来从1.3.15升级到1.4,该怎么办?

2 个答案:

答案 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/

我很想知道你采取了什么方法来解决这个问题 问题

干杯