«i18next backendConnector: ошибка загрузки пространства имен» при использовании react-i18next useTranslationHooks

#reactjs #typescript #react-hooks #i18next #react-i18next

#reactjs #машинописный текст #реагирующие хуки #i18next #react-i18next

Вопрос:

Я пытаюсь реализовать react-i18next в моем приложении create-react-app с помощью перехватов useTranslation().

Однако в консоли режим отладки показывает

i18next::backendConnector: не удалось загрузить адрес выставления счетов в пространстве имен для языка en, не удалось выполнить синтаксический анализ /locales/en/BillingAddress.json в json

и

i18next::translator: отсутствует ключ в форме адреса выставления счета.email Адрес электронной почты клиента (по умолчанию)

i18next.ts

 import {initReactI18next} from "react-i18next";
import i18next from "i18next";
import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-xhr-backend';
import XHR from "i18next-xhr-backend";

i18next
// .use(Backend)
    .use(LanguageDetector)
    .use(XHR)
    .use(initReactI18next) // passes i18n down to react-i18next
    .init({
        lng: "en",
        fallbackLng: {
            'en-US':['en'],
            'zh-CN':['cn'],
            default:['en']
        },
        debug: true,
        ns: ['billingAddress'],
        defaultNS: 'billingAddress',
        // load: "currentOnly",
        interpolation: {
            escapeValue: false // react already safes from xss
        },
        keySeparator: false,
        // backend: {
        //     loadPath: "/locales/{{lng}}/{{ns}}.json",
        //     crossDomain: true
        // },
        react: {
            wait: true,
        }
    });

export default i18next;
  

Файлы

 ├── src
│   ├── i18next.ts
│   ├── locales
│   │   ├── cn
│   │   │   └── billingAddress.ts
│   │   └── en
│   │       └── billingAddress.ts
│   ├── index.tsx

  

версия

«реагировать»: «^ 16.8.4»,

«i18next»: «^ 15.0.7»,

мой файл перевода

 export default{
  "Form": {
    "emailLabel": "customer Email",
    "emailPlaceholder": "email@emial.com",
  }
}
  

мой файл BillingAddress

   const [t, i18n] = useTranslation();

    const changeLanguage = (language: string) => (e: React.MouseEvent) => {
        i18n.changeLanguage(language)
    };

const someValues: billingAddress = {
emailLabel: t("Form.emailLabel","Customer Email")
}

return (
<div>
 <button onClick={changeLanguage("en")}>English</button>
<OtherComponent value={someValues} />
</div>
)

  

Я совершенно не понимаю, как загрузить пространство имен сейчас…
есть идеи?

Заранее спасибо!

Комментарии:

1. Можете ли вы изменить расширение файлов перевода на json и следовать синтаксису json

2. привет @ShubhamKhatri Я перенес перевод на общедоступный и изменил расширение fille, кажется, ошибок подключения больше нет. Спасибо за это

Ответ №1:

Вы могли бы просто следовать приведенному здесь примеру: https://github.com/i18next/react-i18next/tree/master/example/react/public/locales

Используя серверную часть xhr, вам нужно предоставить действительные файлы JSON в качестве исходного кода — вот и все.

Комментарии:

1. Спасибо! Я думаю, что это работает. Еще один вопрос, есть ли какой-либо способ, которым i18n.changeLanguage функция могла бы передавать en-us как языковую строку, потому что я пытаюсь объединить ее с moment.js , но когда я вызываю, i18n.changeLanguage('en-us') это не сработает, если не передать en .

2. к вашему сведению: более новое руководство по react-i18next можно найти здесь: dev.to/adrai /… yhat использует i18next-http-серверную часть вместо i18next-xhr-серверной части

3. Также есть хорошее видео об i18next, вторая часть которого полностью посвящена react: youtu.be/SA_9i4TtxLQ