Предпосылки:

Настраивать

После установки i18next вам необходимо создать файл i18n.js, желательно в той же папке, что и ваш app.js. В этом файле вы инициализируете локаль, свои переводы и даже можете добавить собственные средства форматирования. Для справки, вот как выглядит мой файл: Примечание: Не забудьте называть свое пространство имен «перевод» независимо от того, как вы называете свои файлы, так как это значение по умолчанию и гарантирует, что i18next найдет ваш переводы.

import i18n from 'i18next';
import { reactI18nextModule } from 'react-i18next';
import de from '../public/locales/de/translations.json';
import en from '../public/locales/en/translations.json'; 
i18n.use(reactI18nextModule).init({    
   fallbackLng: 'en',    
   lng: navigator.language || navigator.userLanguage,     
   resources: {        
      en: {            
         translation: en        
      },        
      de: {            
         translation: de        
      }    
   },     
   interpolation: {        
      escapeValue: false   
   },    
 
   wait: true
}); 
export default i18n;

Затем вы создадите файлы json для своих переводов. Я решил поместить их в папку src и создал такую ​​структуру: locale → en → translations.json. Это упрощает добавление дополнительных языков. В своих файлах json вы создадите узнаваемый ключ и перевод на этот язык. Вот небольшой пример такого файла:

{
   "group": "Gruppe",
   "group_plural": "Gruppen",
   "blog_title": "Eine React.js App mit i18next lokalisieren"
}

Как видите, я использую сборку во множественном числе i18next, это особенно полезно, если вы не знаете, что будет использоваться до времени выполнения. Вот пример кода, демонстрирующий эту функциональность:

i18n.t('group', {count: numberOfGroups})

Подключение

Если вы используете HOC, лучше всего вводить переводы, так как это позволяет вам менять язык на лету. Я также использую redux, поэтому большинство моих компонентов уже инкапсулированы, но это не проблема, поскольку мы можем просто инкапсулировать эти завернутые компоненты. Вот как это выглядит при экспорте HOC:

import { translate } from 'react-i18next';
// If you are using redux or other wrappers
export default translate()(
   connect()(AccountEditorContainer)
);
// Just i18next
export default translate()(AccountEditorContainer);

После того, как вы подключили свой компонент, вы сможете получить доступ к своим переводам следующим образом:

this.props.t('blog_title')

Примечание. Для убеждения используйте const {t} = this.props

Автономный

Однако вам не нужно этого делать, и иногда вы хотите использовать i18next в сагах или функциях, которые не экспортируют HOC. В этих случаях вы можете напрямую импортировать файл i18n.js, который будет выглядеть следующим образом:

import i18n from '../i18n';
i18n.t('blog_title')

Резюме

i18next - это быстрый и простой способ локализовать ваше приложение, поскольку Интернет становится все более глобальным. Первоначальная настройка может потребовать некоторых усилий, особенно если у вас уже есть готовое приложение. Однако добавлять новые строки очень просто, поэтому я рекомендую начать этот процесс как можно раньше.