Реагировать родной момент.локаль не работает

Я работаю с React Native версии 0.45.1 и с moment версии 2.18.1.

Я пытаюсь изменить дату в соответствии с локальным устройством, но я всегда получаю дату в локали "en-Us". Я не могу импортировать все локали, как я видел в некоторых решениях, так как я не знаю языковой стандарт устройства заранее. (например: https://github.com/moment/moment/issues/2962)

какие-то другие варианты?

2 ответов


Я не могу импортировать все локали, как я видел в некоторых решениях, так как я не знаю языковой стандарт устройства заранее.

на самом деле, вы можете импортировать все локали в этот момент (moment-with-locales упоминается прямо там на Домашняя страница):

import moment from 'moment/min/moment-with-locales'
// Or if you are using require instead:
var moment = require('moment/min/moment-with-locales')

тогда вы должны иметь возможность получить языковой стандарт устройства с любым модулем / методом, который вы предпочитаете (в моем примере я буду использовать Экспо) и изменения момент для этого. Например:

var deviceLocale = await Expo.Util.getCurrentLocaleAsync()
moment.locale(deviceLocale)

Я не скажу, что импорт всего является лучшим методом для обработки этого как moment-with-locales - это больше, чем просто moment, но он делает то, что вы хотите, чтобы он выполнил. Вы также можете просто импортировать поддерживаемые вами локали, как указано в комментарии Github, с которым я связан.


вместо импорта локали по локали я использую это решение для установки локали глобально:

import { getDeviceLocale } from "react-native-device-info";
import moment from "moment";
import "moment/min/locales";

const deviceLocale = getDeviceLocale();

moment.locale(deviceLocale); //set your locale (eg: fr)
moment(1316116057189).fromNow(); // il y a 7 ans

поделиться с теми, кто в этом нуждается