【问题标题】:Inject script for i18n in Angular app在 Angular 应用程序中为 i18n 注入脚本
【发布时间】:2014-07-31 01:57:09
【问题描述】:

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

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

【问题讨论】:

    标签: javascript angularjs internationalization


    【解决方案1】:

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

    一个是使用angular-dynamic-locale,正如@maurycy 已经解释的那样。这不是我能想到的最干净的解决方案,但总比没有好。

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

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

    【讨论】:

      【解决方案2】:

      问题

      到目前为止,纯 Angular 无法动态更改语言环境,您只能在引导级别执行此操作,但有一些项目实现了此功能。恕我直言,这个特别好

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

      【讨论】:

      • 很高兴有人已经提到了这一点。内置的 Angular 区域格式化过滤器违反了 i18n 最佳实践...... Angular Dynamic Locale,来拯救,但是...... 问题是,这实际上是一个肮脏的 hack。如果您怀疑,请查看代码。但总比没有好。
      猜你喜欢
      • 2022-07-12
      • 2016-07-07
      • 1970-01-01
      • 2018-09-28
      • 2019-06-22
      • 2021-05-29
      • 2016-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多