react-i18next 在组件外部的简单文件中使用 t('title') 函数
react-i18-next use t('title') function in a simple file outside of components
我有一个只导出数据的常量。
Import i18n from './i18n'
export const offersList = [
{
id: 0,
itemButton: i18n.t('item1'),
title: i18n.t('title1'),
},
{
id: 0,
itemButton: 'Item 1',
title: 'Title 1',
},
{
id: 0,
itemButton: 'Item 1',
title: 'Title 1',
}
];
当我尝试在键内使用 t 函数时,它只是 return 一个简单的字符串,其中包含我想要显示的键。
我有 i18n.ts 这样的文件
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
i18n
.use(Backend)
.use(initReactI18next)
.init({
fallbackLng: 'ru',
debug: true,
react: {
useSuspense: false
},
interpolation: {
escapeValue: false,
}
});
export default i18n;
所以我找到了一个解决方案,它适用于我的情况,但也许你也有同样的情况。
问题是我使用了 i18next 的后端模块
import Backend from 'i18next-http-backend'
就我而言,我不应该使用这个模块。
所以 i18n.js(在我的例子中是 .ts )配置文件将是这样的
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
// the translations
// (tip move them in a JSON file and import them)
const resources = {
en: {
translation: {
'title': 'En test title',
},
},
ru: {
translation: {
'title': 'Ru test title',
},
}
};
i18n
.use(initReactI18next) // passes i18n down to react-i18next
.init({
resources,
lng: 'en',
keySeparator: false, // we do not use keys in form messages.welcome
interpolation: {
escapeValue: false, // react already safes from xss
},
});
export default i18n;
如果您想在一个简单的 js/ts 文件中处理组件外部的数据
你可以使用 t() 函数。您应该在文件中导入 i18next 配置文件(在我的例子中是一个简单的对象数组,其中包含我导出的数据)
import i18n from '../../i18n';
const offersList = [
{title: i18n.t('title')},
{text: i18n.t('text')},
{subtitle: i18n.t('subtitle')},
]
// keep in mind, if you want to change the language with a click in-app, you should keep i18n.on a function to fire update what language was changed.
i18n.on('languageChanged', (language) => {
offersList[0].itemButton = i18n.t('title');
});
export default offersList;
我有一个只导出数据的常量。
Import i18n from './i18n'
export const offersList = [
{
id: 0,
itemButton: i18n.t('item1'),
title: i18n.t('title1'),
},
{
id: 0,
itemButton: 'Item 1',
title: 'Title 1',
},
{
id: 0,
itemButton: 'Item 1',
title: 'Title 1',
}
];
当我尝试在键内使用 t 函数时,它只是 return 一个简单的字符串,其中包含我想要显示的键。 我有 i18n.ts 这样的文件
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
i18n
.use(Backend)
.use(initReactI18next)
.init({
fallbackLng: 'ru',
debug: true,
react: {
useSuspense: false
},
interpolation: {
escapeValue: false,
}
});
export default i18n;
所以我找到了一个解决方案,它适用于我的情况,但也许你也有同样的情况。
问题是我使用了 i18next 的后端模块
import Backend from 'i18next-http-backend'
就我而言,我不应该使用这个模块。 所以 i18n.js(在我的例子中是 .ts )配置文件将是这样的
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
// the translations
// (tip move them in a JSON file and import them)
const resources = {
en: {
translation: {
'title': 'En test title',
},
},
ru: {
translation: {
'title': 'Ru test title',
},
}
};
i18n
.use(initReactI18next) // passes i18n down to react-i18next
.init({
resources,
lng: 'en',
keySeparator: false, // we do not use keys in form messages.welcome
interpolation: {
escapeValue: false, // react already safes from xss
},
});
export default i18n;
如果您想在一个简单的 js/ts 文件中处理组件外部的数据 你可以使用 t() 函数。您应该在文件中导入 i18next 配置文件(在我的例子中是一个简单的对象数组,其中包含我导出的数据)
import i18n from '../../i18n';
const offersList = [
{title: i18n.t('title')},
{text: i18n.t('text')},
{subtitle: i18n.t('subtitle')},
]
// keep in mind, if you want to change the language with a click in-app, you should keep i18n.on a function to fire update what language was changed.
i18n.on('languageChanged', (language) => {
offersList[0].itemButton = i18n.t('title');
});
export default offersList;