Reactjs 如何使用i18next和react-i18next处理嵌套和组织转换键?以及其他最佳做法问题

Reactjs 如何使用i18next和react-i18next处理嵌套和组织转换键?以及其他最佳做法问题,reactjs,localization,internationalization,i18next,react-i18next,Reactjs,Localization,Internationalization,I18next,React I18next,在使用i18n时,我有几个关于最佳实践和工作流程的问题 我目前正在使用react-i18next 我使用组件中的默认值直接定义键,然后使用babel-plugin-i18next-extract 示例 <I18nText ns="meeting" i18nKey="meeting-invitation.videoConferenceLink" defaults="You can joi

在使用i18n时,我有几个关于最佳实践和工作流程的问题 我目前正在使用
react-i18next
我使用组件中的默认值直接定义键,然后使用
babel-plugin-i18next-extract

示例

    <I18nText
        ns="meeting"
        i18nKey="meeting-invitation.videoConferenceLink"
        defaults="You can join the video conference call for {{meeting.name}} when it starts via: <br /> <0>{{meeting.videoConference.link}}</0>"
        components={[
            <a
                href={meeting.videoConference.link}
                target="_blank"
                rel="noopener noreferrer"
            >
                {meeting.videoConference.link}
            </a>,
        ]}
        values={{ meeting }}
    />
会议
操作
可以有不同的计数,我知道我可以使用嵌套,我可以像这样将计数传递给每个嵌套键

0 meetings, 0 actions         => You have no scheduled meetings and no actions deadlines so far to prepare for.
1 meeting, 1 action           => You have 1 scheduled meeting and 1 action deadline so far to prepare for.
2-inf meetings, 2-inf actions => You have (2-inf) scheduled meetings and (2-inf) action deadlines so far to prepare for.
"key": "You have $t(glossary:scheduledMeetingWithCount, {\"count\": {{meetingCount}}}) and $t(glossary:actionDeadlinesWithCount, {\"count\": {{actionCount}}}) so far to prepare for."
t('action:action-assigned.content', {
  context: action.dueDate && 'dated'
})
但是翻译人员不会对所有嵌套和传递计数感到困惑吗?以及
scheduledMeetingWithCount
actionDeadlinesWithCount
键,它们应该位于哪个命名空间中<代码>词汇表?在
会议
行动
名称空间中,每个人都在自己的相关名称空间中? 这个定义应该是什么样的

"scheduledMeetingWithCount": "1 scheduled meeting",
"scheduledMeetingWithCount_plural": "{{count}} scheduled meeting",
"scheduledMeetingWithCount_0": "no scheduled meetings"  // doesn't i18next not support `_0` for `en`?
这难道不需要多次翻译关键的
会议
行动
?当它被单独定义为
会议
时,它的复数形式为
会议
,当有计数
无会议
1次会议
(2-inf)会议
,当我需要在会议名称前添加
预定
{count}预定会议
无预定会议
?我是否要对整个系统中使用的每个关键字执行此操作

二,️⃣ 如何设置嵌套键的格式?

假设我有一个值为
的密钥,会议安排在下周举行
我有一个用于会议的键,它的值是
meetings
,但它是小写的,但我有一个格式函数
titleCase
所以我想使用类似于
{$t(词汇表:meeting_复数),titleCase}}的东西,计划在下周使用

但这将导致
会议(复数),titleCase}}定于下周举行
我也试过了

t('{{meeting, titleCase}} are scheduled for next week', {meeting: '$t(glossary:meeting_plural)'})
但这将导致下周计划的$T(词汇表:Meeting_复数)
所以我最终使用了

t('{{meeting, titleCase}} are scheduled for next week', { meeting: t('glossary:meeting_plural') })
哪个有效 但这是最佳实践吗?我是否应该让译员再次翻译会议?我是否应该为“会议”的标题加上另一个键

三,️⃣ 如何处理值的变化,我应该使用上下文还是为每个变化添加一个键?如果使用上下文,如何提取所需的每个上下文?

我有一个句子,它根据传递的操作是否具有属性
dueDate
而改变 当
dueDate
存在时,它会显示

Looks like you have a new action to complete: <strong>{{ action.title }}</strong> assigned by <strong> {{ action.creator.name }} </strong> and to be completed before <strong>{{ action.dueDate, dddd, MMMM Do, YYYY }}</strong>.
我该怎么处理这个案子?他们应该用自己的钥匙分开吗? 我试过这样使用上下文

0 meetings, 0 actions         => You have no scheduled meetings and no actions deadlines so far to prepare for.
1 meeting, 1 action           => You have 1 scheduled meeting and 1 action deadline so far to prepare for.
2-inf meetings, 2-inf actions => You have (2-inf) scheduled meetings and (2-inf) action deadlines so far to prepare for.
"key": "You have $t(glossary:scheduledMeetingWithCount, {\"count\": {{meetingCount}}}) and $t(glossary:actionDeadlinesWithCount, {\"count\": {{actionCount}}}) so far to prepare for."
t('action:action-assigned.content', {
  context: action.dueDate && 'dated'
})
action.json的键

"action-assigned.content": "Looks like you have a new action to complete: <strong>{{ action.title }}</strong> assigned by <strong> {{ action.creator.name }} </strong>.",
"action-assigned.content_dated": "Looks like you have a new action to complete: <strong>{{ action.title }}</strong> assigned by <strong> {{ action.creator.name }} </strong> and to be completed before <strong>{{ action.dueDate, dddd, MMMM Do, YYYY }}</strong>."
“action assigned.content”:“看起来您有一个新操作要完成:{{action.title}{{action.creator.name}}分配”,
“action assigned.content_dated:”看起来您有一个新的操作要完成:{{action.title}{action.creator.name}}分配,并在{action.dueDate,ddddd,MMMM Do,yyyyy}之前完成。”
这是上下文的正确用法吗?我必须手动添加这些密钥,而不是使用提取工具,并且必须关闭
discardOldKeys
,因为它正在删除日期为
\u的密钥

四,️⃣ 如何组织公用密钥?

我是否在
common
名称空间中抛出我将在整个系统中使用的任何东西?如果我用键的值命名键,是否可以?还是给他们一个特定的钥匙更好

五,️⃣ 我是否应该提取相似但有不同名词的值?

我有值
查看操作
查看项目
查看会议
,…等等。我应该用值
View{{item}}
生成一个键,并将
key
传递给我要使用的名词,还是只在它的键中生成每个值

六,️⃣ 是否有支持i18next Interval复数后处理器的TMS?

七,️⃣ 我是否应该切换到使用I18next icu?

我发现
ICU
i18next
默认格式更好地处理复数,因为在
en
中,我可以向
0
添加特定条件,而不限于
key
key\u复数
而且
ICU
还有
select
,它就像一个switch语句,解决了我遇到的一些问题,为什么
i18next
没有
select
这样的语句呢?
context
是否应该处理
select
处理的用例

八,️⃣ 是否有人对他们以前使用并喜欢的TMS有个人推荐?

我想要一个支持
i18next
功能的。好吧,我已经研究过locize,但发现它们的定价很难预测。我更希望有固定价格的产品

九,️⃣ 是否有我可以学习最佳实践和如何扩展i18n的资源?

我搜索了i18n资源,但发现社区有点缺乏深入的指导或端到端的工作流程指南,我大部分时间都是通过反复尝试来实现的,但不确定我是否会面临障碍,或者在当前使用的实现中遇到成长困难