【问题标题】:How to style parts of i18n messages when using thymeleaf使用 thymeleaf 时如何设置部分 i18n 消息的样式
【发布时间】:2018-03-14 14:37:15
【问题描述】:

我不确定这是问这个问题的正确地方。我想知道如何最好地为 l10n 属性文件中的部分消息设置样式。例如,我的客户希望在帮助窗口中显示此消息和格式:

这是一个自我评估比较应用程序。

最简单的解决方案是在该标签的 messages.properties 条目中包含 HTML 标记。这样做的问题是,处理messages.properties 的40 个翻译器必然会犯错误,例如删除

有更好的方法吗?

【问题讨论】:

    标签: properties localization internationalization thymeleaf


    【解决方案1】:

    我看到的解决方案通常只是在 .properties 文件中使用带有 HTML 标记的th:utext。我认为它确实会像您提到的那样造成维护麻烦,并且应该保持在最低限度。

    一种解决方法是在某些情况下创建单独的字符串,例如:

    <span th:text=#{thisIsA}>This is a </span><strong><span th:text="#{selfAssessment}">self-assessment</span></strong>
    

    但是,这很容易出错,因为某些语言可能会更改单词的顺序。所以这不是一个很好的选择。

    如果 HTML 标记特别有问题,另一种方法虽然有点难看,但可能是:

    thisIsASelfAssessment=This is a {0}self-assessment{1}.
    

    甚至

    thisIsA=This is a {0}.
    selfAssessment=self-assessment
    

    但这可能会让下一个阅读它的开发人员感到困惑,并且可能会引入与 40 位翻译人员查看它时遇到的相同问题,因为您有花括号。这也变得非常乏味并产生更多的行。

    所以最后,您可能最好使用最简单的utext 解决方案。

    在项目方面,您可以在不使用标记的情况下完成初始翻译,并在翻译完成后添加标记。当您需要更改字符串时,将来可能会出现此问题,但这样做可以最大程度地减少一些麻烦。将这些字符串保存在 .properties 文件中的单独块中可能很有意义,以便您以后可以定位它们。

    问得好,我自己也遇到过这个问题。

    【讨论】:

    • 保持没有标记的翻译是行不通的,例如,我不知道在中文文本中将标记放在哪里。我可以添加一些自动化测试来快速发现文本语法无效的位置,并使用您第二个建议中的花括号方法
    • 是的,您甚至可以使用 Thymeleaf 来处理语法的属性值。如果你发现一个异常,你就知道你遇到了问题。
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多