Internationalization 在i18n中,命名消息属性的正确方法是什么?

Internationalization 在i18n中,命名消息属性的正确方法是什么?,internationalization,naming-conventions,Internationalization,Naming Conventions,我们有一个网站,应该翻译成不同的语言。一些措辞在消息属性文件中,可供翻译。现在我想把剩下的文本添加到这些文件中 命名文本块的好方法是什么 <view>.<type>.<name> 。。 我们大部分都有网页,一些元素/模块在一些网站上重复。我建议采用以下惯例 functionalcontext.subcontext.key logicalcontext.subcontext.key 通过这种方式,您可以在超级上下文(下面示例中的id)中对所有公共消息进行逻

我们有一个网站,应该翻译成不同的语言。一些措辞在消息属性文件中,可供翻译。现在我想把剩下的文本添加到这些文件中

命名文本块的好方法是什么

<view>.<type>.<name>
。。

我们大部分都有网页,一些元素/模块在一些网站上重复。

我建议采用以下惯例

functionalcontext.subcontext.key
logicalcontext.subcontext.key
通过这种方式,您可以在超级上下文(下面示例中的id)中对所有公共消息进行逻辑分组。很少有东西不是特定于任何函数上下文(如lastName等),您可以将其分组到逻辑上下文中

order.id=Order Id
order.submission.submit=Submit Order
name.last=Last Name
据我所知,没有“标准”存在。因此,很难说什么是正确的,什么是不正确的资源密钥命名方式。但是,根据我的经验,我可以推荐以下方法:

property file name: <module>.properties
resource keys: <view or dialog>[.<sub-context>].<control-type>.<name>

它为翻译人员提供了足够的提示,让翻译人员知道它实际上是什么,这可能会导致正确的翻译…

我们使用点符号和驼峰大小写提出了以下密钥命名约定(Java,btw):

标签键(表单标签、页面/表单/应用程序标题等,即非完整句子;用于多个UI位置):

如果标签表示Java字段(即表单字段)并与表单标签匹配:label.nameofield
其他:label.sameAsValue

示例:

  • label.firstName=名字
  • label.lastName=姓氏
  • label.applicationTitle=应用程序标题
  • label.editADocument=编辑文档
内容键:

projectName.uiPath.messageOrContentType.n.*

其中:

  • projectName是项目的短名称(或从Java包派生的名称)
  • uiPath是指向内容键的UI导航路径
  • 应根据内容类型添加消息或内容类型(例如,添加、删除、更新、信息、警告、错误、标题、内容等)。示例消息:(1)页面已更新。(2) 处理您的请求时出错
  • n.处理以下情况:当一个页面上有多个内容区域时(例如,当内容由文本、图像等分隔时),当内容位于多个段落中或当内容位于(非)有序列表中时-应附加数字标识符。示例:…content.1…content.2

    当一个页面上有多个内容区域并且需要进一步分解一个或多个内容区域(基于上面的HTML示例)时,可以将第二个数字标识符附加到键上。示例:…content.1.1…content.1.2
示例:

  • training.mySetup.myInfo.content.1=这是内容1的第一句话。这是内容1的第二句话。此内容将由段落标记包围
  • training.mySetup.myInfo.content.2=这是内容2的第一句话。这是内容2的第二句话。此内容还将被段落标记包围
  • training.mySetup.myInfo.title=我的信息
  • training.mySetup.myInfo.updated=您的个人信息已更新
优点/缺点


+标签键可以很容易地重复使用;位置无关。
+对于不重复使用的内容键,在UI上定位页面将非常简单且符合逻辑

-翻译人员可能不清楚标签键在UI上的位置。对于不浏览页面的翻译人员来说,这可能不是问题,但对于开发人员来说可能仍然是问题。
-如果内容键必须在UI上的多个位置使用(这很可能),则键名选择在其他位置没有意义。在我们的例子中,管理层并不关心内容区域的值的重复,因此在本例中,我们将使用不同的键(以演示UI上的位置)



我们将非常感谢您对本次大会的反馈,特别是将改进本次大会的反馈,因为我们目前正在更新我们的资源包:)

到目前为止,我个人使用的并且我更喜欢的方法是使用句子本地化作为关键。例如:(请根据语言使用正确的语法替换T)

例如: 打印(T(“Hello world”))

在这种情况下,T将搜索一个键“Hello world”。如果未找到,则返回键,否则返回键的值


这样,您不需要编辑消息(使用默认语言),至少不需要使用参数。。。。它为我节省了很多开发时间

这是java属性还是.NET?好问题!您上面所描述的是一个很好的属性命名指南。不幸的是,这也是一个非常主观的领域。我想看看社区其他人的建议。记住干燥的原则()。如果一个属性在多个地方使用,并且不太可能改变,那么考虑一个属性名称,比如“公共.Buto.Stase= Save'”。通过扩展考虑删除与TAGLIB或模板的UI复制,即使是非常诱人重用翻译,如关闭,保存,OK…这不是一个好主意,因为保存有时意味着“保存文档”,而在另一个位置“保存产品”。同样,在其他语言中,使用两个不同的术语而不是通用的save/close/ok等可能是合适的。@Vitim.us对于save document和save product,“save”有什么不同?例如,重要的事实似乎是UI上下文是什么(按钮、标题、输入标签、工具提示等),但似乎并没有将其扩展为不同的视图。如果我理解正确,“保存”按钮是一个“保存”按钮,可以重复使用,但不应该是r
preferences.password_area.label.username=User name