命名资源文件中的密钥是最佳实践

时间:2009-03-07 09:45:38

标签: localization internationalization

是否有人对资源文件中的命名密钥有任何建议?例如,您是否将密钥的名称基于需要本地化的文本或使用该文本的控件?

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

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

  • editUser =编辑用户...
  • editGroup =编辑群组...

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

您更喜欢哪种方案?为什么?

5 个答案:

答案 0 :(得分:13)

我用usecase或action classname作为文字的前缀。例如:

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

这样可以避免碰撞:

EditStudent=Edit
EditClass=Edit
EditCourse=Edit Course

...也可以更轻松地找到你需要的东西。

我按实体分组的另一种方式是:

Person.id=#
Person.name=First name
Person.surname=Surname

这些可以在包含实体的表格中显示为标题。它会在以下情况下为您节省:

Person.id=#
Class.id=#
Course.id=Course Id

最后,通过在属性键中提供上下文,您可以避免错误的翻译。例如我曾经有过:

no=no

在左上角的单元格中用作id(#)表格标题,但是我们的法语翻译为法语做了这个:

no=non

......他认为这是“不”这个词(是的否定)。 :)

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

答案 1 :(得分:0)

我们根据该术语的英文版本。例如:EditUser 这是我们的开发人员可以轻松阅读的,并且可以在整个应用程序中需要术语的多个位置重复使用。

答案 2 :(得分:0)

以英文文本为基础,但前缀为窗口/对话框/出现单词或短语的内容。至少在布局空间有限的情况下,您可能希望避免落入到处具有完全相同的字符串的陷阱中:这会阻止您缩写以获得合适的布局,尤其是在像芬兰语这样的多音节语言中。

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

不要忽视同音异义词的危险。提供背景有助于防止这种情不要害怕使资源名称长于实际的英文术语,这可以大大帮助翻译。

答案 3 :(得分:0)

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

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

这样的消息如下:

  

无法在{1}之前安排{0}作业。

将记录为:

  

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

答案 4 :(得分:-1)

我认为首先你应该使用某种XML文件来存储这种数据。

类似的东西:

<?xml version =“1.0”encoding =“utf-8”standalone =“yes”?>
< XML>
<按钮>
<编辑>
< user> ***修改用户*
< / user>
< group> 修改论坛 < / group>

< /编辑>
< /按钮>
< / XML> **

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

类似的东西:

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

这是一个简单的例子。