67

我试图在 AngularJS 中找到支持多种语言的文档,但没有成功。是否支持本地化?

4

6 回答 6

72

看看角度翻译:https ://github.com/angular-translate/angular-translate

对于所有 DIY 的人:

您可以找到 Angular 的本地化文件:这里

这些文件将帮助您使用内置的角度过滤器:日期货币数字。惊人的......到目前为止。

现在您想使用自己的文本,而您需要的只是 angular.js 依赖注入的强大功能。创建一个新文件,如:“myTexts_en_us.js”并像这样使用 $provide.value:

$provide.value("myTexts", {firstText : "This is my localized text"});

详情:http:
//jsfiddle.net/4tRBY/24/

对于实际使用,您应该添加一个过滤器:http : //jsfiddle.net/4tRBY/41/

尖端:

  • 确保手动、JS 或服务器将新的本地化文件插入到 html 中。(服务器是这里的最佳选择!)
  • 如果您包含其中一个angular-local 文件,则无需在您的应用程序模块中进行设置。(您将自动拥有 $locale - 请参阅小提琴)
  • 为您的 $provide-value 添加一个 id 键 - 并将该值设置为您在文件中使用的语言代码 - 这将在测试时派上用场。
于 2013-02-24T20:20:04.037 回答
18

您正在寻找的是$locale

实际上,在 angularjs 主页的一半左右也有一个示例。

他们的例子中的一个片段:

function BeerCounter($scope, $locale) {
  $scope.beers = [0, 1, 2, 3, 4, 5, 6];
  if ($locale.id == 'en-us') {
    $scope.beerForms = {
      0: 'no beers',
      one: '{} beer',
      other: '{} beers'
    };
  } else {
    $scope.beerForms = {
      0: 'žiadne pivo',
      one: '{} pivo',
      few: '{} pivá',
      other: '{} pív'
    };
  }
}

我不确定这是否是一个“标准”……但这是一个开始。如果你有很多本地化工作要做,我想我会创建一个服务来注入我的控制器......像这样的伪代码:

app.service('myLocalization', ['$locale', function($locale) {
    var res = {
       'help' : { 
           'en-us': 'help',
           'es-mx': 'ayudame'
       },
       'beer' : {
            'en-us': 'beer',
            'es-mx': 'cerveza'
       }
    }

    return {
       getString: function(key) {
          return res[key][$locale.id];
       }
    }
});
于 2012-09-30T23:19:17.420 回答
7

我创建了一个专门用于本地化目的的模块 - https://github.com/4vanger/angular-l10n 它支持消息本地化、参数替换、更改飞行语言环境并提供许多方便的使用方式 - 过滤器、指令等.

于 2013-04-11T10:28:15.737 回答
2

只是为了信息的完整性——从 AngularJS 1.4 流中的某个地方开始——核心之外还会有另一个 i18n 实现。请看一下https://github.com/angular/i18n

于 2015-03-06T18:19:42.117 回答
0

你也可以看看这个:

https://github.com/angular-ui/ui-utils/pull/173

性能优于目前可用于 angular 的任何其他 i18n 库。

于 2014-02-02T06:21:17.300 回答
0

如果您正在寻找 i18n 支持,那么您可以参考以下项目,该项目具有完整的多语言功能并且易于实施。看看github项目

angularjs-本地化服务

于 2014-06-06T09:08:39.913 回答