在Angular应用程序中为i18n注入脚本

时间:2014-06-10 10:31:15

标签: javascript angularjs internationalization

我想在我的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

我想用葡萄牙语看到它。 我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题

到目前为止,在纯角度中无法动态更改区域设置,您只能在引导级别执行此操作,但有一些项目可以实现此功能。这个特别好恕我直言

https://github.com/lgalfaso/angular-dynamic-locale

答案 1 :(得分:1)

您的问题确实有两种可能的解决方案。

一个是使用angular-dynamic-locale作为@maurycy已经解释过。它不是我能想到的最干净的解决方案,但它总比没有好。

另一种可能的解决方案是使用其他专用的i18n库创建自己的库,例如iLib 你为什么要这么做呢? 好吧,内置的AngularJS i18n例程不允许处理其他日历,时区和格式百分比。这些是严重的缺点。事实上,您无法根据用户个人资料覆盖格式化区域设置(或者您可以,但忘记了网站缓存)是另一个。

我建议使用基于iLib的自定义解决方案(我曾经推荐Globalize但在最近的更改之后似乎有点无用)与angular-translate相结合用于用户界面转换和内置角度区域设置处理复数形式(在撰写时,角度翻译并不能很好地处理它)。