我试图在 AngularJS 中找到支持多种语言的文档,但没有成功。是否支持本地化?
6 回答
看看角度翻译: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 键 - 并将该值设置为您在文件中使用的语言代码 - 这将在测试时派上用场。
您正在寻找的是$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];
}
}
});
我创建了一个专门用于本地化目的的模块 - https://github.com/4vanger/angular-l10n 它支持消息本地化、参数替换、更改飞行语言环境并提供许多方便的使用方式 - 过滤器、指令等.
只是为了信息的完整性——从 AngularJS 1.4 流中的某个地方开始——核心之外还会有另一个 i18n 实现。请看一下https://github.com/angular/i18n
如果您正在寻找 i18n 支持,那么您可以参考以下项目,该项目具有完整的多语言功能并且易于实施。看看github项目