Moment: ロケールの変更が機能しない

作成日 2016年02月15日  ·  22コメント  ·  ソース: moment/moment

ロケール値を変更しようとすると、何も起こらず、エラーも発生しません。

      this.$log.log(moment.locale()); // returns 'en'
      this.$log.log(moment.locale('fr')); // set to french but returns 'en'
      this.$log.log(moment.locale()); // of course, still returns 'en' instead of 'fr'

Chrome開発者ツールコンソールからも試しました。

> moment.locale('fr')
-> "en"
Troubleshooting

最も参考になるコメント

追加した:
import 'moment/locale/fr';

および使用:
moment.locale('fr')

ロケールがフランス語に正しく設定されるようになりました。
動的ではありませんが、今のところは機能します。

私はそれを閉じることができると思います、そして答えたすべての人々に感謝します。
この問題がTypeScript / Angular / Jspmを使用している人々に役立つことを願っています。

全てのコメント22件

別の瞬間を与える可能性のあるモジュールローダーを使用していますか?

import m from 'moment';

this.$log.log(m.locale());
this.$log.log(m.locale('fr'));
this.$log.log(m.locale());

this.$log.log(window.moment.locale());
this.$log.log(window.moment.locale('is'));
this.$log.log(window.moment.locale());

私は角度のあるプロジェクトに参加しています。モジュールはJSPMのハンドルです。
「それはあなたに別の瞬間を与えているかもしれない」とはどういう意味かわかりません

3行は、同じ方法で同じ瞬間を使用して試した実際のコードです。
特定の変数を使用しても同じ結果になります。

import * as moment from 'moment';

export function registerDateFormatService(appModule: angular.IModule) {
   appModule.service('dateFormatService', DateFormatService);
}

export class DateFormatService {
   constructor(private $log: ng.ILogService) {
   }

   public format(value: moment.Moment, displayFormat: string): string {
      this.$log.log(value.locale());
      this.$log.log(value.locale('fr'));
      this.$log.log(value.locale());
      return value.format(displayFormat);
   }
}

結果は次のとおりです。

angular.js:13239 Moment {_isAMomentObject: true, _i: "2010-10-20 4:30", _f: "YYYY-MM-DD", _isUTC: false, _pf: Object…}_d: Wed Oct 20 2010 00:00:00 GMT+0200 (CEST)_f: "YYYY-MM-DD"_i: "2010-10-20 4:30"_isAMomentObject: true_isUTC: false_isValid: true_locale: Locale_abbr: "en"_ordinalParse: /\d{1,2}(th|st|nd|rd)/_ordinalParseLenient: /\d{1,2}(th|st|nd|rd)|\d{1,2}/ordinal: (number)__proto__: Locale_pf: Object__proto__: Moment
angular.js:13239 en

ロケールデータをインポートしていますか? どの.jsファイルを使用していますか?

行の後に別のインポートを追加することを意味しますか?
'moment'からのモーメントとして*をインポートします。

または、ここではJSPMを使用してモジュールsensにインポートします。
(私はmoment.jsと、私の場合はjspmモジュールフォルダーにfr.jsのようなlocalexx.jsのように見えるものをたくさん持っています。)

ドキュメントの「使用場所」セクションを読み、それらのシナリオのいずれかが当てはまるかどうかを確認してください。 一般に、 moment-with-locales.jsを使用するか、ロケールデータを個別にロードする必要があります。 ほとんどのローダーは言語ファイルを自動的に取得しないため、個別にインポートする必要がある場合があります。

基本的に、ロードされていないロケールに切り替えようとすると、momentはenロケールに戻ります。

「ブラウザへのロケールのロード」も参照してください。

これで何ができるか実験します。
package.jsonに追加された単純な行を使用しており、jspmからnpminstallで使用されます
"moment": "github:moment/moment@^2.11.2"

次に、それを1回のインポートで使用します。
import * as moment from 'moment';

同じ使用法を持つ可能性のある将来のユーザーを追跡するために、このコメントに書き込みました。
実験結果を掲載します。
ありがとう

追加した:
import 'moment/locale/fr';

および使用:
moment.locale('fr')

ロケールがフランス語に正しく設定されるようになりました。
動的ではありませんが、今のところは機能します。

私はそれを閉じることができると思います、そして答えたすべての人々に感謝します。
この問題がTypeScript / Angular / Jspmを使用している人々に役立つことを願っています。

たぶんこれをドキュメントに追加してください。 私は同じ問題を抱えていて、ますます多くの人々がバウアーの代わりにjspmを使い始めました。

動作してよかったです! ドキュメントリポジトリに問題を追加しました。 そこにPRを送ってください。

そのようにインポート
import'moment / src / locale / fr-ca ';
import'moment / src / locale / en-ca ';

@younssに感謝し

@younssあなたは私の救世主です! 2017年10月10日であり、ドキュメントにはこの変更が指定されていません。 瞬間2.18から2.19.0に更新され、ロケールのインポートが完全にクラッシュしました:(
Reactを使用します。
再度、感謝します!

2.19.1にアップグレードしたときに同じ問題が発生しました
多分これは役立つかもしれません:

削除する :

  • node_modulesフォルダー
  • package-lock.json

再起動:
npmインストール

私は通常どおり「モーメント」をインポートし続け、ソースでロケールを使用します。 したがって、 @ younssのようにインポートする必要はありません。
VueJSの使用。
これは私のために働いた。

たぶん、pbはpackage-lock.jsonファイルにあり、モーメントノードデータを適切に更新しません。 それを削除してnpminstallを再起動すると、すべてのデータが更新された新しいpackage-lock.jsonファイルが作成されます。

@younss 、ありがとう、私のために働きます、私はparcel-bundlerを使用しています

この解決策は私のために働いた..ここに

追加した:
import'moment / locale / fr ';

これはまた変わりましたか?
インストールしました:

npm i moment-with-locales-es6
npm i moment

1つの関数でクラスを作成しました:

import * as moment from 'moment';
import 'moment/locale/pt-br';
import 'moment/locale/fr-ca';

export class DatetimeFormatPipe
    transform(date: string): string {
        moment.locale('pt-BR');
        console.log(moment.locale()); 
        console.log('pt-BR', moment(date).toLocaleString());

        moment.locale('fr-CA');
        console.log(moment.locale());
        console.log('fr-CA', moment(date).toLocaleString());

        return "";
    }
}

ログは次のとおりです。

pt-br
pt-BR 2016年12月20日火曜日10:45:12GMT + 0100
fr-ca
fr-CA 2016年12月20日火曜日10:45:12GMT + 0100

そのようにインポート
import'moment / src / locale / fr-ca ';
import'moment / src / locale / en-ca ';

それは私のために働きますありがとう!

私が使う:

import moment from 'moment/dist/moment';
import fr from 'moment/dist/locale/fr';

moment.locale('fr', fr);

そしてそれは動作します。
他の解決策は私にはうまくいきませんでした。

import moment from 'moment/dist/moment';
import 'moment/dist/locale/ru';

moment.locale('ru');

私のために働く唯一のもの。 @ ligne13ヒントをありがとう!

モーメント2.25.2

やあ、

'import' moment / locale / fr ';'を使用する場合 Node / Expressアプリで、次のエラーが発生しました: 「構文エラー:

私はこれをグーグルで検索し、

このインポートを追加できない場合、ロケールを変更する別の方法はありますか?

ありがとう

ポール


仕様:

  • OS:Ubuntu20.04からWSL2
  • ノード:12.18.3
  • NPM:6.14.6
  • Express:4.16.1
  • MomentJS:2.27

やあ、

'import' moment / locale / fr ';'を使用する場合 Node / Expressアプリで、次のエラーが発生しました: 「構文エラー:

私はこれをグーグルで検索し、

このインポートを追加できない場合、ロケールを変更する別の方法はありますか?

ありがとう

ポール

仕様:

  • OS:Ubuntu20.04からWSL2
  • ノード:12.18.3
  • NPM:6.14.6
  • Express:4.16.1
  • MomentJS:2.27

@pbrissaud

node.jsではまだ「import」を使用できません。 私はそれを自分で試したことがありませんが、これはうまくいくと思います:

require('moment/locale/fr')
moment.locale('fr');
このページは役に立ちましたか?
0 / 5 - 0 評価