我必须本地化用 thymeleaf 和 spring 4 编写的现有应用程序。 对于静态内容,messages_FR.properties和messages_ES.properties以及传统的Spring i18n策略的创建效果很好。
问题来自动态内容(存储在数据库记录中)。
先前版本的内容由th:text="${product.title}"
显示。
现在,通过使用lang后缀复制字段来本地化数据库内容,因此对于表产品和行标题,我还有两行 title_ES < / strong>和 title_FR
现在我需要将此显示本地特定,即对于法语本地,它应使用th:text="${product.title_FR}"
或类似th:text=${@beans.i18n(product.title)}
实施此类逻辑的推荐方法是什么?
感谢任何帮助。
答案 0 :(得分:1)
您有几种可能性:
i18n
一样使用自己的bean并使用th:text
。您可以使用LocaleContextHolder来访问请求的区域设置(不完全确定名称)。您将完全控制如何解决密钥。#{...}
。您可能需要处理缓存逐出,因为messageresolution正在使用内部缓存。编写自己的方言不是必需的,因为大多数时候这只是用更好的语法包装一些bean调用。
可能最简单的方法是使用bean并相应地调整文本表达式。 第二种方法的优点是所有消息都可以针对数据库进行解析,您可以在运行时轻松覆盖属性文件中的值。