БД Big Locale в React-native (Expo)

Я нашел эту хорошую и простую статью 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!
        }
    });

person alfredopacino    schedule 06.05.2018    source источник
comment
Вы когда-нибудь находили решение этой проблемы? Мне интересно то же самое   -  person Charlie Harding    schedule 18.07.2019
comment
@CharlieHarding: мое решение: от i18next вам нужно получить только активный язык. Оттуда вы можете написать свой собственный модуль и использовать switch поверх активного языка и сделать что-то вроде require("activelanguage.json")   -  person alfredopacino    schedule 18.07.2019
comment
@alfredpacino, вы уверены, что сборщик метро все равно не включает все языки в оператор switch? У меня создалось впечатление, что каждый require('….json’) был дословно заменен соответствующим объектом.   -  person Charlie Harding    schedule 18.07.2019


Ответы (1)


С i18next довольно просто создать собственную внутреннюю реализацию ... https://www.i18next.com/misc/creating-own-plugins#backend

Я бы посоветовал объединить ваши переводы с приложением и не загружать их с каких-либо внешних ресурсов. Вы также можете напрямую добавлять переводы на лету, используя https://www.i18next.com/overview/api#resource-handling

person jamuhl    schedule 07.05.2018
comment
Я отредактировал вопрос первым предложенным мной решением - person alfredopacino; 09.05.2018