Java/JSF i18n长文本(术语、常见问题解答)

Java/JSF i18n长文本(术语、常见问题解答),java,jsf,localization,internationalization,seam,Java,Jsf,Localization,Internationalization,Seam,在大多数情况下,我只是在页面的某个地方组合了很多短文本字符串。但在一些情况下,我只有一个长的静态文本页面,如术语或常见问题解答 现在,只需将该段落也放在资源包中,或者构建一个切换到terms_en.xhtml等等 在JSF中处理长文本的最佳/默认方法是什么?通常有两种方法: 将文本放入资源文件中,无论文本的长度如何。我相信您不想这样做,因为这样做很麻烦,而且资源文件变得更难维护 创建静态文件(即HTML页面或简单文本文件)并在运行时加载它们。对于HTML文件,您可以使用例如iframe轻松地嵌入

在大多数情况下,我只是在页面的某个地方组合了很多短文本字符串。但在一些情况下,我只有一个长的静态文本页面,如术语或常见问题解答

现在,只需将该段落也放在资源包中,或者构建一个切换到terms_en.xhtml等等


在JSF中处理长文本的最佳/默认方法是什么?

通常有两种方法:

  • 将文本放入资源文件中,无论文本的长度如何。我相信您不想这样做,因为这样做很麻烦,而且资源文件变得更难维护
  • 创建静态文件(即HTML页面或简单文本文件)并在运行时加载它们。对于HTML文件,您可以使用例如iframe轻松地嵌入它们。您只需读取正确的文件,但名称可以由后端控制器基于UIViewRoot区域设置生成。对于静态文本文件,您的方法会有所不同:只需在后端按需加载它们并请求内容
  • 就个人而言,我更喜欢使用简单文本文件的第二种方法。如果您不需要任何“丰富”的特性,例如给定单词或段落的不同样式,那么它可能非常容易实现。 事实上,iframe的方式也很容易处理,我不接受这个想法的唯一原因就是iframe,它意味着两个请求而不是一个请求

    顺便说一句。实际上,您可以在后端加载HTML并正确显示,但您必须记住不要转义标记:

    <h:outputText escape="false" value="#{someController.faq}" />
    
    
    

    确保这不是最终用户可以输入的内容,因为最终会出现XSS漏洞。

    我不确定JBoss Seam是否设置了UIViewRoot的区域设置(应该设置),答案是JSF特定的,就像问题一样。我使用Seam LocaleSelector访问区域设置,我想这也设置了UIViewRoot的区域设置。-另一种方法是,在.xhtml文件中添加长文本,并根据语言使用rendered=将其包围,或者根据语言使用不同的*_xx.xhtml文件。是的,条件呈现是可能的解决方案之一。我看到的唯一问题是,它几乎不可维护。如何添加更多语言?如何修改现有的?当然有可能,但很麻烦