Moment: React NativeでmomentJSのロケールを変更するにはどうすればよいですか?

作成日 2018年01月30日  ·  21コメント  ·  ソース: moment/moment

これは私が持っているものですが、機能しません。

import moment from 'moment' 
import 'moment/min/moment-with-locales' 
import 'moment-duration-format' // used by moment  
componentDidMount () {  
 console.log(moment.locale())   
 console.log(moment.locale('zh-cn'))    
 console.log(moment.locale())  
} 

コンソールログ出力:en、en、en
予想されるコンソールログ出力:en、zh-cn、zh-cn

importmomentを 'moment'からimportmomentを 'moment / min / moment-with-locales'に変更しようとしましたが、次の行でエラーがスローされます。

const total = moment.duration(this.props.stoveUsage.total, 'seconds').format('H:mm', { trim: false })

エラー:momentWithLocales2.default.duration(...)。formatは関数ではありません

Troubleshooting Up-For-Grabs

最も参考になるコメント

import 'moment/min/moment-with-locales'

トリックを行います!

moment.locale('fr'); moment().format("ll");

期待どおりに"1 févr. 2018"になります。

全てのコメント21件

それを確認すると、 moment.locale('es')はReactNativeでは効果がありません。

import 'moment/min/moment-with-locales'

トリックを行います!

moment.locale('fr'); moment().format("ll");

期待どおりに"1 févr. 2018"になります。

すべてのロケールデータをロードするmoment-with-localesを使用したくない場合は、v2.18にロールバックすると、これが修正されました。 モーメントv2.20とreactnativeでのロケールの設定には間違いなくバグがあります。

@ Leeds-eBooksどのように瞬間をインポートするか説明していただけますか? 2.18にロールバックしましたが、localをreact-nativeで適切に機能させるには、moment-with-localesからモーメントをインポートする必要があります。

ありがとう

@msevestreええ、もちろん、私のソリューションは今では時代遅れかもしれないと思いますが、コードで機能させて先に進みました。後のバージョンのmomentで修正された可能性があります。 それにもかかわらず、私の修正は次のとおりです。

  • npmから直接momentではなく、gitからhttps://github.com/tqc/moment.git#no-dynamic-importをインストールします
  • それから:
import moment from 'moment'

import 'moment/src/locale/en-gb'
import 'moment/src/locale/es'
import 'moment/src/locale/fr'
import 'moment/src/locale/pl'
import 'moment/src/locale/pt'
// ...etc

// bonus trick!
import DeviceInfo from 'react-native-device-info'
const deviceLocale = DeviceInfo.getDeviceLocale()
moment.locale([deviceLocale, 'en'])

これは私がしていることであり、私のために働いていますが、私が言うように、それはもはや必要ではないかもしれません。

@ Leeds-eBooks素晴らしい。 迅速なフィードバックをありがとうございます。 本当に助かりました

これは私にうまくいきました、
https://momentjs.com/docs/#/i18n/instance -locale /

App.jsで、必要以上にすべての単語を言語にインスタンス化する必要があります。これは、すべてのアプリケーションで機能します。

@ VanessaChu-まだ問題がありますか?

この解決策は私のために働きます

こんにちは、 import 'moment/locale/fr'; は私には役立ちますが、既存のすべての言語をインポートする必要がないなど、動的なものを実行したい場合は、 import 'moment/locale/[variable]'のような何かを行うためのトリックを知っていますか?必要な言語は何ですか?
すべての国で機能するように...:/

ほとんどのディスカッション参加者が問題を解決したことを願っています:)@ Leeds-eBooksに感謝します

3.xの場合、動的インポート/ es6を使用する場合と使用しない場合のモーメントのバージョンが増える可能性があるため、これはそれほど問題にはなりません。

こんにちは@MayeuldP
Reactjs / ReactNativeで瞬間の可変言語を使用して修正するために到着したかどうかはわかりませんが、誰かに役立つ可能性のあるソリューションを共有したいと思います。
カルチャごとにカルチャをインポートする必要はありません。代わりに: import 'moment/min/locales'のみを追加するだけで、後で好きなカルチャでmoment.local( '')を設定できます。

私はv2.18を使用していますが、この方法は機能します。

import moment from 'moment';
import momentFR from 'moment/src/locale/fr' 
moment.locale('fr',momentFR );

こんにちは、 @ KashifAhmed v.2.22.2では、moment.updateLocale( 'fr'、momentFR)を使用する必要があります

非推奨の警告:moment.updateLocale(localeName、config)を使用して、既存のロケールを変更します。 moment.defineLocale(localeName、config)は、新しいロケールの作成にのみ使用する必要があります。詳細については、 http://momentjs.com/guides/#/warnings/define -locale /を参照してください。

これをチェックして:

import moment from "moment";
import 'moment/min/locales'

これには、現時点からのすべてのlanguajes構成が含まれ、jsであるため、サイズに問題はありません。

以前、誰かが別の言語のモバイルでアプリをインストールしたときに問題が発生しました。

これにより、瞬間的に定義された任意のロケールを問題なく設定できます。

moment.locale('es');

または、デバイスロケールを心配せずに使用することは、@ benadamstylesの例としてのlanguajes仕様の範囲外です。

私の場合、ロケールをインポートするだけでは不十分だったので、インポートした辞書を使用して、アンダースコア_である最初の文字を削除しました。

import moment from 'moment';
import momentPTBR from 'moment/src/locale/pt-br';

function prepareLocale(locale) {
  for (const key in locale) {
    if (locale.hasOwnProperty(key)) {
      // remove first character underscore fom key, i.e. '_calendar' => 'calendar'
      locale[key.substring(1)] = locale[key];
    }
  }
  return locale;
}

moment.defineLocale('pt-br', prepareLocale(momentPTBR));

import 'moment/src/locale/en-gb'は私には機能しませんでしたが、 import 'moment/locale/en-gb'は機能しました。

  "dependencies": {
    "expo": "32.0.0",
    "moment": "2.24.0",
    "react": "16.5.0",
    "react-native": "https://github.com/expo/react-native/archive/sdk-32.0.0.tar.gz"
  },

ツリーの一番上のファイルで、コードは次のようになります。

import moment from 'moment'

import 'moment/locale/en-gb'

const momentLocale = moment.locale('en-gb')
if (momentLocale !== 'en-gb') {
  throw new Error(`Moment fell back to locale ${momentLocale}`)
}

export default () => null

私はv2.18を使用していますが、この方法は機能します。

` import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
いくつか例を挙げていただけませんか。
どうもありがとう!

バージョンを2.24から2.18に変更しましたが、動作するようになりました。 2.20以降のどこかにバグがあります。

私のためのその仕事

import moment from 'moment'
import 'moment/locale/pt-br'
moment.locale('pt-br')

私のためのその仕事

import moment from 'moment'
import 'moment/locale/pt-br'
moment.locale('pt-br')

.locale()から返されるものが設定したものであることを確認してください。 静かにフォールバックします。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

slavafomin picture slavafomin  ·  3コメント

dogukankotan picture dogukankotan  ·  3コメント

vbullinger picture vbullinger  ·  3コメント

RobinvanderVliet picture RobinvanderVliet  ·  3コメント

tanepiper picture tanepiper  ·  3コメント