45

一部のアプリケーションに手動で $locale を設定できますか?

ローカルをサポートする唯一の方法は、現在のロケールの角度ライブラリからローカリゼーション ファイルを含めることです。複数の文化がある場合はどうなりますか?その場合、ローカリゼーション ファイルを動的にロードする必要がありますか? 私は何が欠けていますか?

4

11 に答える 11

32

必要なロケールをロードしてlocalStorage、ページを更新できます。以下のスクリプトで、必要な i18n ファイルをロードします。その場でのロケールの変更はまだサポートされていません。

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script>
var locale = JSON.parse(localStorage.getItem('locale'));
if (locale) {
    document.write('<script src="scripts/i18n/angular-locale_'+locale+'.js"><\/script>');
}
</script>
于 2013-01-16T23:31:11.420 に答える
31

i18n を処理する angular モジュールを作成しました。i18n に対する AngularJS のサポートは非​​常に原始的です。より詳細に制御し、より柔軟にしたい場合は、angular-translate をチェックしてください - http://angular-translate.github.io/

お手伝いできることがあればお知らせください。

于 2013-08-05T19:43:49.850 に答える
24

現在、動的なローカリゼーションを探している人にとって、angular-dynamic-localeは素晴らしい仕事をします。

于 2014-02-20T13:57:24.913 に答える
23

私は同じ問題に苦労し、ここですべての回答を読み、プロジェクトに i18n/l10n を導入しました。これは私の結果です:

したがって、解決策はangular-translateangular-dynamic-locale の両方のプロジェクトを使用することです。

于 2015-10-20T11:52:21.307 に答える
15

正直なところ、angular の $locale サービスはまだかなり原始的です。とても良いのですが、このあたりは柔軟性に欠けるようです。最大の問題は、適切なロケール ファイルを動的に再読み込みしてロケールを切り替えたとしても、セットアップ時にロケール情報を登録しているため、日付フィルターなどは変更されたことを認識できないことです。1. 選択したロケールでページをリロードする... または 2. 独自のロケール プロバイダーとそれを使用するフィルターを作成します。

適切なスクリプト ファイルを動的にロードし、影響を受けるすべてのフィルターとサービスを再初期化してからビューを更新するサービスを作成することは可能かもしれませんが、この時点で何が必要になるかはよくわかりません。

于 2012-10-22T14:06:34.103 に答える
1

面白いものを見つけました。角度はありませんが、jquery であるため、統合は問題ありません。パフォーマンスをテストし、情報を返信します。

https://github.com/js-coder/x18n/wiki/Getting-started

https://github.com/js-coder/jQuery.x18n

于 2013-01-18T22:18:02.213 に答える
1

ブラウザーの angularJS ローカライズをロードする場合は、プロジェクトにhttps://github.com/angular/bower-angular-i18nhttps://github.com/lgalfaso/angular-dynamic-localeをインストールします。

インストールする各ライブラリのドキュメントをお読みください。これは私の Ionic プロジェクトの例です。

  1. 私のindex.htmlで:

    ...
    <!-- angular-dynamic-locale-->
    <script src="lib/angular-dynamic-locale/tmhDynamicLocale.min.js"></script>
    ...
    
  2. 私のapp.jsで

    var app = angular.module('project-name', ['ionic',..., 'tmh.dynamicLocale']);
    ...
    // tmhDynamicLocaleProvider
    app.config(function(tmhDynamicLocaleProvider) {
       //  override the default path (angular/i18n/angular-locale_{{locale}}.js) to the stored Angular i18n locale files
       tmhDynamicLocaleProvider.localeLocationPattern('lib/angular-i18n/angular-locale_{{locale}}.js');
    })
    ...
    app.run(function($rootScope, $ionicPlatform, ..., tmhDynamicLocale){
       // set locale for angular formats   
       var inArray = function(needle, haystack) {
          var key = '';
          for (key in haystack) {
             if (haystack[key] === needle) {
                return true;
             }
          }
          return false;
       };
       var preferredLanguage = navigator.language || navigator.browserLanguage || navigator.systemLanguage || navigator.userLanguage;
       if (typeof preferredLanguage === 'string') {
          var code = preferredLanguage.substring(2, 0);
             if (inArray(code, PROPERTIES.LANGUAGES)) {
                tmhDynamicLocale.set(code);
             }
       }
       ...
    
于 2016-09-09T12:44:23.267 に答える