Я следил за статьей здесь: https://dev.to/adrai/how-to-properly-internationalize-a-react-application-using-i18next-3hdb.
Теперь я хочу знать, есть ли способ передать аргумент в строку, извлеченную из файла .json.
{
"GREETING": "Hello ${name}, nice to see you."
}
import i18n from 'i18next';
import {initReactI18next} from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import Backend from 'i18next-http-backend';
i18n
// i18next-http-backend
// loads translations from your server
// https://github.com/i18next/i18next-http-backend
.use(Backend)
// detect user language
// learn more: https://github.com/i18next/i18next-browser-languageDetector
.use(LanguageDetector)
// pass the i18n instance to react-i18next.
.use(initReactI18next)
// init i18next
// for all options read: https://www.i18next.com/overview/configuration-options
.init({
debug: false,
fallbackLng: 'en',
interpolation: {
escapeValue: false // not needed for react as it escapes by default
}
});
export default i18n;
import React, {useState} from 'react';
import {useTranslation} from 'react-i18next';
function App() {
const {t} = useTranslation();
const [name] = useState('John Doe');
return (
<div>
<p>{t('GREETING')}</p>
</div>
);
}
export default App;
В настоящее время: браузер показывает "Привет, ${name}, рад тебя видеть."
Что мне нужно: браузер для отображения "Привет, Джон Доу, рад тебя видеть."





Вам нужно будет передать переменную в качестве второго аргумента функции «t».
<p>{t('GREETING', {name: "John Doe")}</p>
В json я поменял ${name} на {{name}}, и теперь все работает. Спасибо. Если вы обновите свой ответ, я дам вам кредит.
По умолчанию i18next использует другие префиксы формата ({{) и суффиксы (}}).
Попробуйте написать свои переводы так:
{
"GREETING": "Hello {{name}}, nice to see you."
}
И переменная интерполяция вот так:
<p>{t('GREETING', {name: "John Doe")}</p>
Это не работает для меня. Также, я думаю, вам нужно исправить порядок
( { ) }.