Я нашел эту хорошую и простую статью https://medium.com/@jamuhl/translate-your-expo-io-react-native-mobile-application-aa220b2362d2 для реализации локализации в RN (в Expo).
Мой вариант использования немного отличается: в моем приложении есть список сотен терминов для перевода (объект js размером ~ 1 МБ на каждый язык, умноженный на 6-7 языков).
Приложение полностью отключено (нет возможности загрузить файлы локали с сервера), поэтому я ищу лучший способ ленивой загрузки объекта локали json / js, который мне нужен.
Я здесь, чтобы получить советы от экспертов RN / i18next.
РЕДАКТИРОВАТЬ: Я практически скопировал конфигурацию i18n этого https://github.com/i18next/react-i18next/blob/master/example/react-native-expo/js/i18n.js
Настоящие базы данных находятся в поле data:DB
. Obiouvsly, что это не лучший способ загружать тяжелые файлы, я всегда загружаю всю БД на всех языках .. могу ли я как-то сохранить ту же простую структуру, но лениво загружать только тот язык, который мне нужен? В противном случае есть пример локальной ленивой загрузки (из файловой системы устройства) в i18next и react-native?
import i18n from 'i18next';
import {reactI18nextModule} from 'react-i18next';
i18n
.use(languageDetector)
.use(reactI18nextModule)
.init({
fallbackLng: 'en',
resources: {
en: {
home: {
title: 'Welcome',
introduction: 'This text comes from i18next and is provided in english.',
},
data: { DB:require("./locales/it.json") },
},
de: {
home: {
title: 'Willkommen',
introduction: 'Dieser Text ist von i18next und ist in deutsch.',
},
data: { DB:require("./locales/de.json") },
}
},
// have a common namespace used around the full app
ns: ['common'],
defaultNS: 'home',
debug: true,
interpolation: {
escapeValue: false, // not needed for react as it does escape per default to prevent xss!
}
});
i18next
вам нужно получить только активный язык. Оттуда вы можете написать свой собственный модуль и использоватьswitch
поверх активного языка и сделать что-то вродеrequire("activelanguage.json")
- person alfredopacino   schedule 18.07.2019require('….json’)
был дословно заменен соответствующим объектом. - person Charlie Harding   schedule 18.07.2019