我正在开发一个网络项目,该项目(希望)有一天能够以多种语言提供(我说“希望”是因为虽然我们今天只计划了一个英语网站,但我公司的其他产品都是多语言的,我希望我们足够成功也需要这一点)。

据我所知,最佳实践(我在这里使用 Java、Spring MVC 和 Velocity)是将用户将在外部文件中看到的所有文本放在外部文件中,并按名称在 UI 文件中引用它们,例如:

#in messages_en.properties:
welcome.header = Welcome to AppName!

#in the markup
<title>#springMessage("welcome.header")</title>

但是,我自己以前从未在项目中经历过这个过程,所以我很好奇当 UI 的某些部分需要大量标记时,处理此问题的最佳方法是什么,例如:

<p>We are excited to announce that Company1 has been acquired by
<a href="http://www.companydivisionx.com" class="boldLink">Division X</a>,
a fast-growing division of <a href="http://www.company2.com" class="boldLink">Company 2</a>, Inc. 
(Nasdaq: <a href="http://finance.google.com/finance?q=blah" class="boldLink">BLAH</a>), based in...

我能想到的一个选择是将这种“低级”标记存储在消息的 messages.properties 本身中 - 但这似乎是最糟糕的选择。

我能想到的其他选择是:

  • 将每个非标记内部片段存储在 messages.properties 中,例如 acquisitionAnnounce1, acquisitionAnnounce2, acquisitionAnnounce3. 。这似乎 非常 虽然很乏味。
  • 将此消息分解为更多可重用的组件,例如 Company1.name, Company2.name, Company2.ticker, 等等,因为其中每一个都可能在许多其他消息中重复使用。这可能占此特定消息中 80% 的单词。

是否有处理带有大量标记的国际化文本的最佳实践?难道你就只能咬紧牙关,承受着拆散每一段文字的痛苦吗?您亲自处理过的项目中最好的解决方案是什么?

有帮助吗?

解决方案

通常,如果您使用模板引擎,例如 网站网 或者 速度 您可以更有效地将这些较小的 HTML 构建块作为子模板进行管理。

通过这样做,您可以逐步将纯粹国际化的字符串归结为组,并使它们与这些标记子模板相关。在使用跨同一区域设置中的多种语言以及多个区域设置的应用程序模板完成此类工作后,我们从未在消息包中放置标记。

我建议一个关键的良好实践是避免将标记(即使是在您放置的较低级别)放置在消息属性文件中 不惜一切代价! 这带来的后果是不容忽视的——咬紧牙关并正确地分解事情,远比管理许多带有分散的 HTML 标记的文件要痛苦得多。重要的是,您可以将标记可视化为整体块并将其分散到各处,这将使日常开发成为一件苦差事,因为:

  • 您将失去 IDE 颜色突出显示和语法验证
  • 当设计/标记过滤器更改时,很可能很容易错过一个或另一个语言环境文件

将事情分解(到一个现实的点,例如逻辑句子结构,但不能更精细)是前期的一项艰苦工作,但值得付出努力。

关于字符串细分粒度,以下是我们所做的示例:

    comment.atom-details=Subscribe To Comments
    comment.username-mandatory=You must supply your name
    comment.useremail-mandatory=You must supply your email address 
    comment.email.notification=Dear {0}, the comment thread you are watching has been updated.
    comment.feed.title=Comments on {0}
    comment.feed.title.default=Comments
    comment.feed.entry.title=Comment on {0} at {1,date,medium} {2,time,HH:mm} by {3}


    comment.atom-details=Suscribir a Comentarios
    comment.username-mandatory=Debes indicar tu nombre
    comment.useremail-mandatory=Debes indicar tu direcci\u00f3n de correo electr\u00f3nico
    comment.email.notification=La conversaci\u00f3n que estas viendo ha sido actualizada
    comment.feed.title=Comentarios sobre {0}
    comment.feed.title.default=Comentarios
    comment.feed.entry.title=Comentarios sobre {0} a {1,date,medium} {2,time,HH:mm} por {3}

因此,您可以通过在消息包中进行字符串替换的方式来做一些有趣的事情,这也可以帮助您保留它的逻辑含义,但允许您在句子中操作它。

其他提示

正如其他人所说,请不要将字符串分成几段。你会让译者感到悲伤,因为他们必须将他们的语言语法强制遵循你无意中创建的临时规则。通常不可能提供语法正确的翻译,特别是当您在不同的上下文中重复使用某些片段时。

也不要删除标记。

请不要假设专业翻译人员在记事本中工作:) 计算机辅助翻译 (CAT) 工具(例如 Trados 套件)非常了解标记。如果标记是 HTML,而不是某些自定义 XML 格式,则不需要特殊准备。Trados 将保护标签免遭意外修改,同时仍允许在必要时进行更改。请注意,标签的某些元素通常需要本地化,例如替代文本或一些查询字符串,因此仅删除所有标记是不行的。

最重要的是,除非您正在从事零预算的个人项目,否则请考虑联系本地化供应商。本地化是一种服务,就像网页设计一样。有能力的供应商将帮助您为您的项目选择最佳的解决方案/格式,并指导您完成源材料的准备和合并本地化结果。当然,他们和他们的翻译人员将拥有所有必要的工具。(全面披露:我是一名翻译/本地化专家。并且不要拆分字符串:)

首先, 分开你的弦。这使得本地化人员翻译文本变得更加困难,因为他们看不到要翻译的整个字符串。

我可能会尝试在链接周围使用占位符:

<a href="%link1%" class="%link1class%">X部门</a>

当我将网站本地化为 30 种语言时,我就是这样做的。它并不完美,但它有效。

我认为不可能(或容易)从字符串中删除所有标记,您需要有一种方法来插入网址和任何额外的标记。

你应该避免拉断琴弦。这不仅成为翻译的噩梦,而且还做出了在目标语言中可能不正确的语法假设。

虽然占位符对很多事情都有帮助,但我不建议对 URL 使用占位符。这允许您为不同的区域设置自定义 URL。毕竟,当他们的语言环境是阿根廷西班牙语时,将他们发送到英语页面是没有意义的!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top