2009-02-05 22 views
4

我正在开发一个网络项目,希望有一天能够以多种语言提供(我说“希望”,因为虽然今天我们只有一个英文网站计划,但我公司的其他产品是多语言的,我是希望我们也能成功,也需要这样做)。将大量标记文字国际化的最佳做法?

我知道最佳实践(我在这里使用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... 

我能想到的一个选择是将这个“低等级l“的message.properties中的标记,但这似乎是最糟糕的选择。

,我能想到的其他选项是:

  • 商店每个非标记内片段messages.properties,如acquisitionAnnounce1acquisitionAnnounce2acquisitionAnnounce3。这似乎虽然乏味。
  • 将此消息分解为更多可重用组件,例如Company1.name,Company2.name,Company2.ticker等,因为其中的每一个都可能在许多其他消息中重用。这可能会占该特定消息中80%的字数。

是否有任何最佳做法来处理国际化与这种标记沉重的文字?你只需要咬下去,并承担分解每一段文本的痛苦?您亲自处理的任何项目的最佳解决方案是什么?

回答

6

通常,如果您使用模板引擎(如SitemeshVelocity),则可以更有效地管理这些较小的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} 

所以,你可以用在消息包这也可以帮助你保存它的逻辑意义,但允许你如何替换字符串有趣的事情你在句子中操纵它。

+1

不知道我是否完全理解管理这些较小构建块作为子模板的好处。是不是所有来自子模板的字符串仍然会进入相同的messages.properties? – 2009-02-05 17:14:41

+0

是的,你仍然会有很多字符串 - 我想我的观点是你不能真正避免它。防止大量消息字符串的一种策略是将消息包字符串放在数据库中,这是明智的。 – 2009-02-05 17:16:54

3

首先,不要拆分你的字符串。这使得本地化人员难以翻译文本,因为他们无法看到要翻译的整个字符串。

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

< A HREF = “%链接1%” 级= “%link1class%” > X部门</A >

这就是我如何做当我将网站本地化为30种语言时。这不是完美的,但它的工作原理。

我不认为从字符串中删除所有标记是可能的(或简单的),你需要有一种方法来插入URL和任何额外的标记。

2

你应该避免打破你的字符串。这不仅成为翻译的噩梦,而且还会产生语法假设,这在目标语言中可能不正确。

尽管占位符可以对很多事情有所帮助,但我不会建议使用URL占位符。这使您可以自定义不同区域设置的URL。毕竟,当他们的语言环境是阿根廷西班牙语时,将它们发送到英文页面毫无意义!

6

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

不要删除标记。

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

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