i18n 中的嵌套命名空间
Nested namespaces in i18n
我的应用程序相当大,所以为了有一个更有条理的翻译文件,我想使用 nasted 命名空间。示例:
{
"contract": {
"index": {
"pageTitle": "Contract"
}
}
问题出在我访问它的时候。在 this question 的帮助下,我发现我可以使用它来访问索引中的键,如下所示:
const { t, i18n } = useTranslation('contract', { useSuspense: false });
...
t('index.pageTitle')
问题是似乎没有必要在我想访问的每个键前加上前缀 index.
。我想做的是导入名称空间索引而不是合同,并按如下方式使用它:
const { t, i18n } = useTranslation('contract:index', { useSuspense: false });
...
t('pageTitle')
这是行不通的。我也试过contract.index
。在官方文档中,我没有找到任何关于嵌套的内容。是否有可能完成我正在尝试做的事情,或者我是否必须坚持为每个键添加前缀?
Nested namespaces are not supported.
您可以修饰 useTranslation
挂钩以为命名空间中的页面提供此扩展功能。
import { useTranslation as useTranslationBase } from "react-i18next";
const useTranslation = (ns, page, props={}) => {
const trans = useTranslationBase(ns, props);
return {
...trans,
t: (keys, options) => {
let _keys = keys;
if (!Array.isArray(keys)) _keys = [String(keys)];
_keys = _keys.map(key =>`${page}.${key}`)
return trans.t(_keys, options)
}
}
}
用法
export default function () {
const { t } = useTranslation('contract', 'index');
return <div>{t(["pageTitle"])}-{t("pageTitle")}</div>
}
我的应用程序相当大,所以为了有一个更有条理的翻译文件,我想使用 nasted 命名空间。示例:
{
"contract": {
"index": {
"pageTitle": "Contract"
}
}
问题出在我访问它的时候。在 this question 的帮助下,我发现我可以使用它来访问索引中的键,如下所示:
const { t, i18n } = useTranslation('contract', { useSuspense: false });
...
t('index.pageTitle')
问题是似乎没有必要在我想访问的每个键前加上前缀 index.
。我想做的是导入名称空间索引而不是合同,并按如下方式使用它:
const { t, i18n } = useTranslation('contract:index', { useSuspense: false });
...
t('pageTitle')
这是行不通的。我也试过contract.index
。在官方文档中,我没有找到任何关于嵌套的内容。是否有可能完成我正在尝试做的事情,或者我是否必须坚持为每个键添加前缀?
Nested namespaces are not supported.
您可以修饰 useTranslation
挂钩以为命名空间中的页面提供此扩展功能。
import { useTranslation as useTranslationBase } from "react-i18next";
const useTranslation = (ns, page, props={}) => {
const trans = useTranslationBase(ns, props);
return {
...trans,
t: (keys, options) => {
let _keys = keys;
if (!Array.isArray(keys)) _keys = [String(keys)];
_keys = _keys.map(key =>`${page}.${key}`)
return trans.t(_keys, options)
}
}
}
用法
export default function () {
const { t } = useTranslation('contract', 'index');
return <div>{t(["pageTitle"])}-{t("pageTitle")}</div>
}