Реагировать на проект с папкой и файловой структурой i18next - PullRequest
0 голосов
/ 30 октября 2019

Мы используем библиотеку «i18next» в проекте React для обеспечения локализации для нескольких стран. Однако возникает вопрос о том, как эффективно разделить переводы и каков оптимальный способ их загрузки на клиенте.

Наш проект представляет собой CRM, который предназначен для использования различными типами пользователей, например: Admin, Manager, Рабочий и т. Д.

Наш технический стек: React + C # + SQL DB

Кроме того, мы определили, что мы хотим повторно использовать переводы только для «текста кнопки», для всех остальных переводов. текст будет считаться уникальным и никогда не использоваться повторно.

В настоящее время у нас есть структура папок, в которой каждый файл перевода создается для комбинации «Тип пользователя» + «Язык», например: «Worker_Sweden», «Admin_Finland»и т. д. Я еще не реализовал логику переключения файлов в соответствии с типом пользователя.

  1. Имея это в виду, имеет ли смысл сохранять такую ​​структуру?

Я вижу здесь три варианта:

1) Просто оставьте его, например, в "./assests/translations/en/common.json".

2) Использовать плагин i18next, например "i18next-xhr-backend"? Однако я не могу найти никакой подробной документации относительно использования этой библиотеки.

3) Загрузить файлы перевода в некоторые CDN и вытащить их оттуда после обнаружения локали и типа пользователя?

import i18next from 'i18next';
import { initReactI18next } from "react-i18next";
import common_en from './assets/translations/en/common.json'
import common_no from './assets/translations/no/common.json'
import common_sv from './assets/translations/sv/common.json'
import common_da from './assets/translations/da/common.json'
import common_fi from './assets/translations/fi/common.json'

i18next
  .use(initReactI18next) // passes i18n down to react-i18next
  .init({
    resources: {
        'en': {
          common: common_en
        },
        'sv': {
            common: common_sv
        },
        'no': {
            common: common_no
        },
        'da': {
            common: common_da
        },
        'fi': {
            common: common_fi
        }
      },
      react: {
        wait: false,
        bindI18n: 'languageChanged loaded',
        bindStore: 'added removed',
        nsMode: 'default'
      },
      lng: "en",
      fallbackLng: "en",
      interpolation: {
        escapeValue: false
      }
  });

Процесс локализации - это что-то новое для меня, любой совет будет признателен.

...