mat*_*t b 4 java markup templates internationalization
我工作的一个Web项目以多种语言将(希望)可一天(我说"希望",因为虽然我们只有一个英语网站今日计划,我公司的其他产品使用多种语言,我希望我们也足够成功,也需要它.
我明白,最好的做法(我使用Java,Spring MVC和速度这里)是把所有的文字,用户将外部文件中看到,并指他们的名字的UI文件,如:
#in messages_en.properties:
welcome.header = Welcome to AppName!
#in the markup
<title>#springMessage("welcome.header")</title>
Run Code Online (Sandbox Code Playgroud)
但是,其从来没有过要经历这个过程的一个项目我自己,我很好奇,想解决这个问题的最好办法是什么,当你有上标记重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...
Run Code Online (Sandbox Code Playgroud)
我能想到的一个办法是,以标记的这种"低层次"本身存储在messages.properties的消息 - 但是这似乎是最糟糕的选择.
我能想到的其他选择是:
acquisitionAnnounce1
,acquisitionAnnounce2
,acquisitionAnnounce3
.这看起来非常乏味.Company1.name
,Company2.name
,Company2.ticker
等等,每一种在许多其他消息很可能再利用.这可能占该特定消息中80%的单词.是否有任何最佳实践来处理带有标记的文本的国际化?你只需要咬下来并承受分解每一段文字的痛苦吗?您亲自处理过的任何项目的最佳解决方案是什么?
通常,如果您使用Sitemesh或Velocity等模板引擎,则可以更有效地管理这些较小的HTML构建块作为子模板.
通过这样做,您可以将纯粹国际化的字符串逐渐归结为组,并使它们与那些标记子模板相关.使用跨越同一语言环境中的多语言的应用程序模板以及多个语言环境完成此类工作后,我们从未在消息包中放置标记.
我建议一个关键的良好做法是避免不惜一切代价在消息属性文件中放置标记(即使是在你放的低级别)!这对释放地狱的潜力不容忽视 - 咬紧牙关并正确分解,远不如使用分散的HTML标记管理多个文件那么痛苦.重要的是,您可以将标记可视化为整体块和分散,从而使得日常开发成为一件苦差事:
打破局面(到现实点,例如逻辑句子结构,但没有更精细)是前期的一些努力,但值得努力.
关于字符串细分粒度,以下是我们所做的示例:
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}
Run Code Online (Sandbox Code Playgroud)
因此,您可以使用消息包中的字符串替换方式执行有趣的操作,这也可以帮助您保留其逻辑含义,但允许您在句子中操作它.
正如其他人所说,请永远不要将字符串拆分成段.您将导致翻译人员感到悲伤,因为他们必须将他们的语言语法强制为您无意中创建的临时规则.通常,无法提供语法正确的翻译,特别是如果您在不同的上下文中重用某些段.
也不要删除标记.
请不要假设专业翻译工作在记事本:)计算机辅助翻译(CAT)工具,如Trados套件,非常了解标记.如果标记是HTML,而不是某些自定义XML格式,则无需进行特殊准备.Trados将保护标签免遭意外修改,同时仍允许在必要时进行更改.请注意,标签的某些元素通常需要进行本地化,例如alt文本或一些查询字符串,因此只剥离所有标记不会.
最重要的是,除非您正在进行零预算的个人项目,否则请考虑联系本地化供应商.本地化就像网页设计一样.有能力的供应商将帮助您为项目选择最佳解决方案/格式,并指导您完成源材料的准备并纳入本地化结果.当然,他们和他们的翻译人员将拥有所有必要的工具.(完全披露:我是翻译/本地化专家.并且不要拆分字符串:)