我正在重新设计一个面向消费者的大型零售网站。想想像gap.com这样的东西
技术栈是 Apache tile、Apache velocity、Spring MVC。
问题:要正确实施 I18N,我应该为每个语言环境创建多个速度模板还是将字符串外部化到属性文件中?使用后一种方法,排序的速度模板中会有很多混乱 - resourcebundle.getMessage("website.title", "en_US") 而在前面的情况下,我可能会在多个模板中存在重复的逻辑.
我正在重新设计一个面向消费者的大型零售网站。想想像gap.com这样的东西
技术栈是 Apache tile、Apache velocity、Spring MVC。
问题:要正确实施 I18N,我应该为每个语言环境创建多个速度模板还是将字符串外部化到属性文件中?使用后一种方法,排序的速度模板中会有很多混乱 - resourcebundle.getMessage("website.title", "en_US") 而在前面的情况下,我可能会在多个模板中存在重复的逻辑.
你不应该做多个模板(每种语言一个)。那会适得其反。
此外,您需要定义某种包装器来翻译文本。您不想直接使用 Locale 或 Locale Identifiers(“en_US”),而是需要为会话设置 Locale 并使用此对象(可能是隐式的,因此您无需在每次调用时都传递它getMessage()
,因此包装)。
请注意,如果您ResourceBundle
直接调用类的方法,其中一些可能会抛出MissingResourceException
(这是运行时异常,使事情变得更糟)。你必须确保检查它。
顺便提一句。Velocity 定义了一些用于本地化目的的工具。有趣的是,我从未见过有人真正使用它(但老实说,我对 Velocity 的体验非常有限)。