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

Localization 使用和/或重用本地化字符串最实用的方法是什么 问题,localization,internationalization,multilingual,Localization,Internationalization,Multilingual,假设我至少有3个不同的对话框视图: 创建是否要创建此文件?[取消][确定] 保存是否保存此文件?[取消][确定] 删除是否删除此项?[取消][确定] 在这种情况下,创建键/值对最实用的方法是什么 选项1:每个视图的唯一键 缺点:键之间存在大量重复值。更改每一项花费了大量时间,例如,如果您想将Ok更改为Accept 选项2:公共字符串的可重用变量 缺点:如果需要单独更改,例如将OK更改为Confirm CreateConfirm Save和Confirm Delete,则需要更改代码中的变量

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

创建是否要创建此文件?[取消][确定]


保存是否保存此文件?[取消][确定]


删除是否删除此项?[取消][确定]


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

选项1:每个视图的唯一键 缺点:键之间存在大量重复值。更改每一项花费了大量时间,例如,如果您想将
Ok
更改为
Accept

选项2:公共字符串的可重用变量 缺点:如果需要单独更改,例如将
OK
更改为
Confirm Create
Confirm Save
Confirm Delete
,则需要更改代码中的变量

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

您对这里的语言不太熟悉,所以我将使用RubyonRails来拼凑一个简单的玩具示例

选项3:缺少翻译时的回退 然后,您可以使用足够智能的助手来使用这些回退:

模块对话框帮助程序
def对话框_文本(动词,字段)
翻译的动词=t(“动词{verb}”)
t(“dialogs.{verb}.{field}”,默认值:t(“dialogs.default.{field}”,动词:翻译动词),动词:翻译动词)
结束
def\u呈现\u对话框(动词)
呈现(部分:'nice_dialog_box',局部:{verb:verb})#然后重复调用dialog_文本(动词'ok')、dialog_文本(动词'cancel')
结束
def create_对话框
很好地呈现一个对话框(“创建”)
结束
#等等。。。
结束

如果您想更改默认的“OK”文本,它只在一个地方定义。如果要特别覆盖删除确认文本,只需在
对话框.delete
子树下写一个大小写即可。我还没有找到任何类似的最佳实践,但我认为可能有多层回退的分层结构将提供您所追求的那种灵活性。

我支持选项1。双倍下降

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

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

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

随着您对越来越多的语言进行本地化,您越来越可能遇到原始开发人员不知道如何进行区分的情况,因为它们在原始开发人员所说的语言中并不重要

在你的例子中,“这个”一词突然出现在我的脑海中。您省略了句子的宾语,即命名正在创建或保存的对象的名词。您不准备根据隐式对象的性别或数量,以不同的方式拒绝“this”一词。您可能会遇到一种语言,其中对象需要显式,或者对它的引用在创建和保存时拼写不同

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

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

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"
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?"
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}'