我想在我的Angular应用程序中使用i18n和i10n。
如果我理解正确,我可以将脚本注入我的index.html
,并且有关语言的更改会随时更改。我测试了它,当我手动添加脚本并刷新页面时,它可以工作。
不幸的是,我正在尝试为正确的语言注入脚本。 我创建了一个按钮,我想在点击按钮上添加葡萄牙语脚本。
app.controller('appController', ['$scope', '$route', 'UserTopBarWidget',
function($scope, $route, UserTopBarWidgetService){
$scope.topBarWidget = UserTopBarWidget;
$scope.topBarWidget.loadTopBarWidget();
}
}]);
在这个文件中,我只加载我创建的名为UserTopBarWidget
的服务。
UserTopBarWidget
:
app.service('UserTopBarWidgetService', function($http){
this.loadTopBarWidget = function(){
//loading something
};
this.loadPortugueseLanguage = function(){
var locale = "pt-pt";
$.getScript("https://code.angularjs.org/1.2.16/i18n/angular-locale_" + locale + ".js");
}
});
我有一个名为index.html
的页面html,并向其注入我的html文件:
的index.html:
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="../common/css/bootstrap.css" />
<link rel="stylesheet" type="text/css" href="../common/css/style.css" />
<title></title>
</head>
<body ng-controller="AppCtrl">
<div id="container" ng-view></div>
</body>
</html>
注入的html:
<button type="button" id="searchButton" class="btn btn-default" ng-click="topBarWidget.loadPortugueseLanguage()">Portugese</button>
<h2>{{date | date: 'fullDate' }}</h2>
<h2>{{money | currency}}</h2>
我得到的答案:
Tuesday, June 10, 2014
$500.00
我想用葡萄牙语看到它。 我做错了什么?
答案 0 :(得分:2)
问题
到目前为止,在纯角度中无法动态更改区域设置,您只能在引导级别执行此操作,但有一些项目可以实现此功能。这个特别好恕我直言
答案 1 :(得分:1)
您的问题确实有两种可能的解决方案。
一个是使用angular-dynamic-locale作为@maurycy已经解释过。它不是我能想到的最干净的解决方案,但它总比没有好。
另一种可能的解决方案是使用其他专用的i18n库创建自己的库,例如iLib 你为什么要这么做呢? 好吧,内置的AngularJS i18n例程不允许处理其他日历,时区和格式百分比。这些是严重的缺点。事实上,您无法根据用户个人资料覆盖格式化区域设置(或者您可以,但忘记了网站缓存)是另一个。
我建议使用基于iLib的自定义解决方案(我曾经推荐Globalize但在最近的更改之后似乎有点无用)与angular-translate相结合用于用户界面转换和内置角度区域设置处理复数形式(在撰写时,角度翻译并不能很好地处理它)。