Isso é o que eu tenho, mas não funciona.
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())
}
saídas de log do console: en, en, en
saída esperada do log do console: en, zh-cn, zh-cn
Quando tentei alterar o momento de importação de 'momento' para o momento de importação de 'momento/min/momento-com-locales', mas ele gera um erro nesta linha:
const total = moment.duration(this.props.stoveUsage.total, 'seconds').format('H:mm', { trim: false })
erro: momentWithLocales2.default.duration(...).format não é uma função
Confirmando isso, moment.locale('es')
não tem efeito para mim no React Native.
import 'moment/min/moment-with-locales'
faz o truque!
moment.locale('fr'); moment().format("ll");
resulta em "1 févr. 2018"
como esperado.
Se você não quiser usar moment-with-locales
, que carrega todos os dados de localidade, voltando para o momento v2.18 corrigiu isso para mim. Definitivamente, há um bug com o moment v2.20 e a configuração da localidade em reagir nativo.
@Leeds-eBooks Você poderia explicar como você importa o momento? Eu voltei para 2.18 e ainda preciso importar o momento do momento com locales para que o local funcione corretamente no react-native
Obrigado
@msevestre Sim, claro, embora eu ache que minha solução possa estar desatualizada agora, eu fiz funcionar no meu código e segui em frente, acho que uma versão posterior do momento pode ter corrigido. No entanto, minha correção é:
https://github.com/tqc/moment.git#no-dynamic-import
do git, em vez de moment
diretamente do npmimport 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'])
Isso é o que estou fazendo, e está funcionando para mim, mas como eu disse, pode não ser mais necessário.
@Leeds-eBooks Incrível. Obrigado pelo seu feedback rápido. Realmente ajudou
Isso funcionou comigo,
https://momentjs.com/docs/#/i18n/instance -locale/
Você deve colocar no App.js todas as palavras para o idioma que desejar, isso funcionará em todos os seus aplicativos.
@VanessaChu - você ainda tem um problema?
Esta solução funciona para mim
Ei pessoal, import 'moment/locale/fr';
funciona para mim, mas se eu quiser fazer um dinâmico, como não ter que importar todos os idiomas existentes, você conhece algum truque para fazer algo como import 'moment/locale/[variable]'
where variable é o idioma necessário?
Para que funcione com todos os países... :/
Espero que a maioria dos participantes da discussão tenha resolvido seus problemas :) Obrigado @Leeds-eBooks
Para 3.x, podemos ter mais versões do moment com/sem a importação dinâmica/es6, então isso é um problema menor.
Olá @MayeuldP ,
Não sei se você chega a corrigir usando linguagens variáveis de momentos no Reactjs/ReactNative, mas quero compartilhar a solução pode ajudar alguém.
você não precisa importar cultura por cultura, basta adicionar: import 'moment/min/locales'
only e depois você pode definir seu moment.local('') com sua cultura favorita.
Estou usando a v2.18 e esse método funciona.
import moment from 'moment';
import momentFR from 'moment/src/locale/fr'
moment.locale('fr',momentFR );
Oi, @KashifAhmed Na v.2.22.2 você deve usar moment.updateLocale('fr',momentFR)
Aviso de descontinuação: use moment.updateLocale(localeName, config) para alterar uma localidade existente. moment.defineLocale(localeName, config) deve ser usado apenas para criar uma nova localidade Veja http://momentjs.com/guides/#/warnings/define -locale/ para mais informações.
Verifique isso:
import moment from "moment";
import 'moment/min/locales'
Isso inclui todas as configurações de idioma do momento, é js, então não há problema com tamanho.
Eu tive problema antes quando alguém instala o aplicativo com um celular com idioma diferente.
A partir disso, você pode definir qualquer local definido por momento sem nenhum problema,
moment.locale('es');
Ou usar a localidade do dispositivo sem se preocupar com isso está fora das especificações do seu idioma, como exemplo de @benadamstyles
No meu caso, importar a localidade não foi suficiente, então usei o dicionário importado e removi o primeiro caractere que é um sublinhado _
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'
não funcionou para mim, mas import 'moment/locale/en-gb'
sim.
"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"
},
No arquivo mais alto da árvore, veja como meu código se parece:
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
Estou usando a v2.18 e esse método funciona.
`
import moment from 'moment'; import momentFR from 'moment/src/locale/fr' moment.locale('fr',momentFR );
poderia dar alguns exemplos.
Muito obrigado!
Mudei minha versão de 2.24 para 2.18 e agora funciona. Há um bug em algum lugar após 2.20.
seu trabalho para mim
import moment from 'moment'
import 'moment/locale/pt-br'
moment.locale('pt-br')
seu trabalho para mim
import moment from 'moment' import 'moment/locale/pt-br' moment.locale('pt-br')
Certifique-se de verificar se o que você recebe de .locale()
é o que você definiu. Ele cai de volta silenciosamente.
Comentários muito úteis
import 'moment/min/moment-with-locales'
faz o truque!
moment.locale('fr'); moment().format("ll");
resulta em
"1 févr. 2018"
como esperado.