Localization 在资源文件中命名密钥最佳实践

Localization 在资源文件中命名密钥最佳实践,localization,internationalization,Localization,Internationalization,有人对资源文件中的密钥命名有什么建议吗?例如,密钥的名称是基于需要本地化的文本还是基于使用该文本的控件 假设您在多个屏幕中有一个编辑按钮(一个用于编辑用户,一个用于编辑组)。您可以使用以下键: editUserButton.label=编辑用户 editGroupButton.label=编辑组 或 编辑用户=编辑用户 编辑组=编辑组 或 user.edit=编辑用户 group.edit=编辑组 你喜欢什么方案?为什么 我通过用例或动作类名为文字添加前缀。例如: PlaceOrde

有人对资源文件中的密钥命名有什么建议吗?例如,密钥的名称是基于需要本地化的文本还是基于使用该文本的控件

假设您在多个屏幕中有一个编辑按钮(一个用于编辑用户,一个用于编辑组)。您可以使用以下键:

  • editUserButton.label=编辑用户
  • editGroupButton.label=编辑组

  • 编辑用户=编辑用户
  • 编辑组=编辑组

  • user.edit=编辑用户
  • group.edit=编辑组

你喜欢什么方案?为什么

我通过用例或动作类名为文字添加前缀。例如:

PlaceOrder.invalidId=Invalid id for order {0} PlaceOrder.success=Your order {0} was successful PlaceOrder.fail.visa=Your visa was ... PlaceOrder.fail.communications=We could not... PlaceOrder.submit=Buy now Login=Login Login.fail=Your credentials did not... Login.alread=You are already logged in PlaceOrder.invalidId=订单{0}的id无效 PlaceOrder.success=您的订单{0}成功 PlaceOrder.fail.visa=您的签证是。。。 PlaceOrder.fail.communications=我们无法。。。 PlaceOrder.submit=立即购买 登录=登录 Login.fail=您的凭据没有。。。 Login.alread=您已经登录 这样可以避免碰撞:

EditStudent=Edit EditClass=Edit EditCourse=Edit Course 编辑学生=编辑 编辑类=编辑 编辑课程=编辑课程 …而且还可以更轻松地找到您需要的

另一种方式是按实体划分I组:

Person.id=# Person.name=First name Person.surname=Surname 个人识别码=# Person.name=名字 姓 这些可以作为标题显示在具有实体的表上。它在以下情况下为您节省了时间:

Person.id=# Class.id=# Course.id=Course Id 个人识别码=# Class.id=# Course.id=课程id 最后,通过在属性键中提供上下文,可以避免错误翻译。例如,我曾经:

no=no 否=否 它被用作左上角单元格上的id(#)表格标题,但我们的法语翻译为法语做了以下操作:

no=non 否=非 。。。他以为是“不”这个词(是的否定词)


最后(但并非最不重要的)当您想要重构/重命名类并快速更新这些属性键而不必查看模板时,使用classname作为前缀将有助于您。

我认为首先您应该使用某种XML文件来存储此类数据

比如:





***编辑用户*

编辑组


**

然后使用“translate”类获取(并设置/保存)文本

比如:

myTranslateClass.load('translate.xml')
myTranslateClass.get('button','edit','user')


这是一个简单的例子。

我们基于这个术语的英文版本。编辑用户
也就是说,它很容易被我们的开发人员阅读,并且可以在整个应用程序中所需的多个位置重复使用。

以英文文本为基础,但前缀为窗口/对话/单词或短语出现的位置。至少在版面空间有限的情况下,您可能希望避免陷入到处都有完全相同的字符串的陷阱:这会阻止您通过缩写来获得像样的版面,特别是在芬兰语等多音节语言中

当然,你仍然应该努力保持命名的一致性。如果您在商业上这样做,增加字符串的数量也会增加翻译成本


不要忽视同音词的危险。提供上下文有助于防止这种情况。不要害怕使资源名称比实际的英语术语长,这可以极大地帮助翻译人员

@cherouvim的答案是+1,但它总是归结为文档

记录每个值(使用资源源文件格式支持的任何注释机制),包括每个参数的数据类型(如果字符串是formattable)。例如,用于.resx格式的VS编辑器公开了一个注释字段,这使它非常容易

因此,一条信息如下:

无法在{1}之前计划{0}作业

将被记录为如下内容:

记录的错误消息,{0}:作业名称,{1}日期/时间为ISO 8601格式


我从来没有想过将键基于用例。这似乎是一个合理的方法+1当您的应用程序具有100多个用例、视图和操作时,它会有所帮助。我还更新了我的答案,提供了更多信息。由于我们使用Java和Flex,属性文件在我的情况下更加方便。使用非严格结构化文件进行此类存储不是一个好主意(在我看来),因为它太容易在存储的数据中迷失自己,而且存在许多冲突问题。此外,XML或JSON由所有语言处理,这给了您更大的灵活性:]