React-i18next передать значение в .json, используя перевод

Я следил за статьей здесь: https://dev.to/adrai/how-to-properly-internationalize-a-react-application-using-i18next-3hdb.

Теперь я хочу знать, есть ли способ передать аргумент в строку, извлеченную из файла .json.

public/locales/en/translation.json

{
  "GREETING": "Hello ${name}, nice to see you."
}

источник/i18n.ts

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}, рад тебя видеть."

Что мне нужно: браузер для отображения "Привет, Джон Доу, рад тебя видеть."

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно будет передать переменную в качестве второго аргумента функции «t».

<p>{t('GREETING', {name: "John Doe")}</p>

Это не работает для меня. Также, я думаю, вам нужно исправить порядок ( { ) }.

Fiddle Freak 09.05.2022 05:05

В json я поменял ${name} на {{name}}, и теперь все работает. Спасибо. Если вы обновите свой ответ, я дам вам кредит.

Fiddle Freak 09.05.2022 05:07
Ответ принят как подходящий

По умолчанию i18next использует другие префиксы формата ({{) и суффиксы (}}).

Попробуйте написать свои переводы так:

{
  "GREETING": "Hello {{name}}, nice to see you."
}

И переменная интерполяция вот так:

<p>{t('GREETING', {name: "John Doe")}</p>

Другие вопросы по теме