React-i18next 使用翻译将值传递到 .json

Fid*_*eak 1 reactjs react-i18next i18next-http-backend

我在这里关注了这篇文章:https://dev.to/adrai/how-to-properly-internationalize-a-react-application-using-i18next-3hdb

现在我想知道是否有办法将参数传递到从 .json 文件中提取的字符串中。

公共/locales/en/translation.json

{
  "GREETING": "Hello ${name}, nice to see you."
}
Run Code Online (Sandbox Code Playgroud)

src/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;
Run Code Online (Sandbox Code Playgroud)

源代码/应用程序

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;

Run Code Online (Sandbox Code Playgroud)

目前:浏览器显示“ Hello ${name},很高兴见到你。

我需要什么:浏览器显示“ Hello John Doe,很高兴见到你。

adr*_*rai 6

默认情况下 i18next 使用不同的格式前缀 ( {{) 和后缀 ( }})

尝试这样写你的翻译:

{
  "GREETING": "Hello {{name}}, nice to see you."
}
Run Code Online (Sandbox Code Playgroud)

插值变量如下:

<p>{t('GREETING', {name: "John Doe")}</p>
Run Code Online (Sandbox Code Playgroud)