react-i18next 并用组件替换占位符键
react-i18next and replacing placeholder keys with components
以前我使用 react-intl
并且能够为将被组件替换的项目设置占位符,例如{br}
与 <br />
.
我目前在尝试使用 react-i18next
和 i18next-icu
时遇到错误:
// Using Intl format (via i18next-icu)
{
"test": "Replace with a{br}line-break. {button}"
}
t("test", { br: <br />, button: <button>Click me!</button> });
// Outputted translated text
Replace with a[object Object]line-break. [object Object]
是否真的可以使用 i18next
/i18next-icu
来做到这一点?如果不是,将组件插入翻译后的字符串的另一种方法是什么?
https://react.i18next.com/latest/trans-component 是否将 React 组件(如 br、strong 等)包含到您的翻译中
您需要在 i18n.js 中像这样配置 React i18next 以支持基本标签:
import i18n from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import { initReactI18next } from "react-i18next";
i18n
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: "en",
react: {
// https://react.i18next.com/latest/trans-component#trans-props
transSupportBasicHtmlNodes: true,
transKeepBasicHtmlNodesFor: ["br", "strong", "b", "i"],
}
});
export default i18n;
然后你可以像@jamuhl 说的那样使用这个组件:
const keyInTranslationJsonFile=`My text that can be <b>{{boldPlaceholder}}</b>`;
<Trans i18nKey={keyInTranslationJsonFile}>{{boldPlaceholder: "bold"}}</Trans>
我刚刚注意到无法提醒 Trans 组件。据我所知,您不能使用 t()
函数或使用任何标签来加粗。但至少你仍然可以使用普通的占位符。
像这样:
const keyInTranslationJsonFile=`You've selected the max of {{selectLimit}} elements`;
alert(
t(keyInTranslationJsonFile, {
selectLimit: selectLimit,
})
);
以前我使用 react-intl
并且能够为将被组件替换的项目设置占位符,例如{br}
与 <br />
.
我目前在尝试使用 react-i18next
和 i18next-icu
时遇到错误:
// Using Intl format (via i18next-icu)
{
"test": "Replace with a{br}line-break. {button}"
}
t("test", { br: <br />, button: <button>Click me!</button> });
// Outputted translated text
Replace with a[object Object]line-break. [object Object]
是否真的可以使用 i18next
/i18next-icu
来做到这一点?如果不是,将组件插入翻译后的字符串的另一种方法是什么?
https://react.i18next.com/latest/trans-component 是否将 React 组件(如 br、strong 等)包含到您的翻译中
您需要在 i18n.js 中像这样配置 React i18next 以支持基本标签:
import i18n from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import { initReactI18next } from "react-i18next";
i18n
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: "en",
react: {
// https://react.i18next.com/latest/trans-component#trans-props
transSupportBasicHtmlNodes: true,
transKeepBasicHtmlNodesFor: ["br", "strong", "b", "i"],
}
});
export default i18n;
然后你可以像@jamuhl 说的那样使用这个组件:
const keyInTranslationJsonFile=`My text that can be <b>{{boldPlaceholder}}</b>`;
<Trans i18nKey={keyInTranslationJsonFile}>{{boldPlaceholder: "bold"}}</Trans>
我刚刚注意到无法提醒 Trans 组件。据我所知,您不能使用 t()
函数或使用任何标签来加粗。但至少你仍然可以使用普通的占位符。
像这样:
const keyInTranslationJsonFile=`You've selected the max of {{selectLimit}} elements`;
alert(
t(keyInTranslationJsonFile, {
selectLimit: selectLimit,
})
);