Мы используем библиотеку «i18next» в проекте React для обеспечения локализации для нескольких стран. Однако возникает вопрос о том, как эффективно разделить переводы и каков оптимальный способ их загрузки на клиенте.
Наш проект представляет собой CRM, который предназначен для использования различными типами пользователей, например: Admin, Manager, Рабочий и т. Д.
Наш технический стек: React + C # + SQL DB
Кроме того, мы определили, что мы хотим повторно использовать переводы только для «текста кнопки», для всех остальных переводов. текст будет считаться уникальным и никогда не использоваться повторно.
В настоящее время у нас есть структура папок, в которой каждый файл перевода создается для комбинации «Тип пользователя» + «Язык», например: «Worker_Sweden», «Admin_Finland»и т. д. Я еще не реализовал логику переключения файлов в соответствии с типом пользователя.
- Имея это в виду, имеет ли смысл сохранять такую структуру?
Я вижу здесь три варианта:
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
}
});
Процесс локализации - это что-то новое для меня, любой совет будет признателен.