使用和/或重用本地化字符串的最实用方法是什么



>问题

假设我至少有 3 个不同的对话框视图:

创建

是否要创建此内容?[取消][确定]

保存

是否要保存此内容?[取消][确定]

删除

是否要删除此内容?[取消][确定]


在这种情况下,创建要使用的键/值对的最实用方法是什么?

选项 1:每个视图的唯一键

createTitle : "Create"
createDescription : "Would you like to create this?"
createPositiveButton: "OK"
createNegativeButton: "Cancel"
saveTitle : "Save"
saveDescription : "Would you like to save this?"
savePositiveButton: "OK"
saveNegativeButton: "Cancel"
deleteTitle : "Delete"
deleteDescription : "Would you like to delete this?"
deletePositiveButton: "OK"
deleteNegativeButton: "Cancel"

缺点:键之间有很多重复的值。花费大量时间更改每个,例如,如果要将Ok更改为Accept

选项 2:常见字符串的可重用变量

genericPositiveButton: "OK"
genericNegativeButton: "Cancel"
createTitle : "Create"
createDescription : "Would you like to create this?"
saveTitle : "Save"
saveDescription : "Would you like to save this?"
deleteTitle : "Delete"
deleteDescription : "Would you like to delete this?"

缺点:如果需要进行单个更改,例如将OK更改为Confirm CreateConfirm SaveConfirm Delete则需要更改代码中的变量。

总结

显然,这里没有一刀切的答案,但我想知道是否有一套关于本地化文件变量的使用和重用的最佳实践,尤其是在大型多平台应用程序中。

我主张选项1。并加倍努力。

但实际上,这是一个重要的设计决策,你应该和你的国际化团队讨论一下。准备好现在仔细权衡投资,以后进行更快、更便宜的本地化,而不是现在更快、更便宜的首次上市时间,以后再返工成本。"实用"通常归结为对这些权衡的一组权重。

这是选项 1 的情况。立即投资,以便以后更快、更便宜地进行本地化。您说您对"尤其是大型多平台应用程序"感兴趣。让我们假设"大"也意味着"准备本地化为世界各地的大量语言",以及"大到足以收获规模经济"。

任何大规模本地化都应由核心开发人员、本地化团队和翻译语言服务提供商实现自动化。自动化的一个重要部分是使用翻译记忆库。这是一个工具,可以识别源短语何时与已翻译的源短语相同或相似,并提供翻译以供与该源短语重复使用。

随着您本地化为越来越多的语言,您越来越有可能遇到原始开发人员不知道的区别,因为它们在原始开发人员使用的语言中无关紧要。

在你的例子中,"这个"这个词突然出现在我身上。你省略了句子的宾语,即命名正在创建或保存的事物的名词。您没有规定根据隐含对象的性别或数量而以不同的方式拒绝"这个"一词。 您应该会遇到一种语言,其中对象需要显式,或者对它的引用需要以不同的方式拼写以创建与保存。

当您允许将消息存储为完整的单元时,您允许翻译人员和本地化人员进行正确的短语所需的控制。

您不应该害怕将"确定"更改为"接受"所需的努力。如果您有自动化功能,并且按钮文本的键拼写一致,那么您应该能够编写一个工具来批量进行更改。例如,正则表达式可以识别键"createPositiveButton","deletePositiveButton"和"savePositiveButton",然后在一个操作中将所有这些键后面的"确定"文本更改为"接受"。

你在这里没有具体说明语言,所以我将使用Ruby on Rails来组合一个简单的玩具示例。

选项 3:缺少翻译时的回退

verbs:
save: 'save'
delete: 'delete'
create: 'create'
dialogs:
default:
ok: 'OK'
cancel: 'Cancel'
title: '%{verb}'
text: 'Would you like to %{verb} this?'
delete:
text: 'Are you sure you want to %{verb} this? Warning: This cannot be undone'
save:
ok: 'Confirm %{verb}'

然后,您可以使用足够智能的帮助程序来使用这些回退:

module DialogHelper
def dialog_text(verb, field)
translated_verb = t("verbs.#{verb}")
t("dialogs.#{verb}.#{field}", default: t("dialogs.default.#{field}", verb: translated_verb), verb: translated_verb)
end
def nicely_render_a_dialog(verb)
render(partial: 'nice_dialog_box', locals: {verb: verb}) # This then calls dialog_text(verb, 'ok'), dialog_text(verb, 'cancel') repeatedly
end
def create_dialog
nicely_render_a_dialog('create')
end
# et cetera...
end

如果要更改默认的"确定"文本,则只在一个位置定义该文本。如果要专门覆盖删除确认文本,只需在dialogs.delete子树下编写该案例即可。我还没有找到任何已发布的最佳实践,但我想一个分层结构,可能具有多层回退,将提供你所追求的那种灵活性。

相关内容

最新更新