spring / thymeleaf i18n用于数据库内容

时间:2016-08-15 08:48:39

标签: spring spring-mvc internationalization locale thymeleaf

我必须本地化用 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)}

的内容

实施此类逻辑的推荐方法是什么?

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您有几种可能性:

  • 像您的i18n一样使用自己的bean并使用th:text。您可以使用LocaleContextHolder来访问请求的区域设置(不完全确定名称)。您将完全控制如何解决密钥。
  • 编写一个MessagesResolver,用于解析数据库中的密钥。然后使用i18n的标准表达式:#{...}。您可能需要处理缓存逐出,因为messageresolution正在使用内部缓存。

编写自己的方言不是必需的,因为大多数时候这只是用更好的语法包装一些bean调用。

可能最简单的方法是使用bean并相应地调整文本表达式。 第二种方法的优点是所有消息都可以针对数据库进行解析,您可以在运行时轻松覆盖属性文件中的值。