1

Angular アプリでロケールの変更を構成する際に問題が発生しています。Angular Momentと Moment.jsを使用しています

まず、angular.module.config でロケールを英語に設定し、必要に応じて相対時間オブジェクトをすぐに設定します。

            moment.locale('en', {
                relativeTime: {
                    future: "In %s",
                    past: "%s ago",
                    s: "<1 minute",
                    m: "1 minute",
                    mm: "%d minutes",
                    h: "1 hour",
                    hh: "%d hours",
                    d: "24 hours",
                    dd: "%d days",
                    M: "1 month",
                    MM: "%d months",
                    y: "1 year",
                    yy: "%d years"
                }
            });

これは意図したとおりに機能し、

今、私も同等のオブジェクトを持っていますが、ドイツ語用です。構成にドロップすると、英語の構成が上書きされるため、どこにドロップすればよいかわかりません。

次に、ヘッダーメニュービューに選択ドロップダウンがあり、コントローラーに EN と DE (翻訳用にすでに小文字になっています) がありamMoment.changeLocale('de');、モーメント部分をドイツ語に変更するために関連付けることができないようです。 moment で直接更新することもできないようです。

どうすればこれを達成できますか?

4

1 に答える 1

3

relativeTime以前の構成を上書きすることなく、複数のロケールを連続してカスタマイズできます。

ドロップダウンの変更を、選択したロケールng-changeを呼び出す関数にバインドするために使用できます。amMoment.changeLocale

moment-with-localesデフォルト以外のロケールで moment を使用するには、必要なすべてのロケール ファイルをインポートする必要があることに注意してください。

あなたが達成したいことを理解していれば、ここに実際の例があります:

angular.module('MyApp',['angularMoment'])
.run(function(){
  moment.updateLocale('en', {
    relativeTime: {
      future: "In %s",
      past: "%s ago",
      s: "<1 minute",
      m: "1 minute",
      mm: "%d minutes",
      h: "1 hour",
      hh: "%d hours",
      d: "24 hours",
      dd: "%d days",
      M: "1 month",
      MM: "%d months",
      y: "1 year",
      yy: "%d years"
    }
  });
  moment.updateLocale('de', {
    relativeTime: {
      future : 'in %s',
      past : 'vor %s',
      s : '<ein Minute',
      m : 'ein Minute',
      mm : '%d Minuten'
    }
  });
})
.controller('AppCtrl', function($scope, moment, amMoment) {
  $scope.last_update = moment().valueOf();
  $scope.lang = 'en';
  
  $scope.changeLang = function(){
    amMoment.changeLocale($scope.lang);
  };
  $scope.changeLang();
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-moment/0.10.3/angular-moment.min.js"></script>

<div ng-app="MyApp" ng-controller="AppCtrl">
  {{last_update|amDateFormat:'dddd, MMMM Do YYYY, HH:mm:ss a'}}
  <br/>
  <span am-time-ago="last_update"></span>
  <br/>
  
  <select name="singleSelect" ng-model="lang" ng-change="changeLang()">
    <option value="en">EN</option>
    <option value="de">DE</option>
  </select>
  
  {{lang}}
  
</div>

于 2016-07-19T22:51:49.430 に答える