如何更改本地化网站上的日期时间格式?

时间:2013-02-01 06:33:05

标签: xpages date-format setlocale

我有一个针对不同语言的本地化网站

用户可以选择在配置文件中使用哪种语言,这将在PageLoad之前应用 使用

context.setLocalString("en")

“en”默认为en-US我相信所以网站上的日期以美国格式显示,所以我了解到我可以使用它。

context.setLocale(new Locale("en","gb"))

setLocal的问题是不会更新HTML lang =“en”属性所以事件虽然使用setLocal后日期是正确的,但使用的语言文件仍然是englisn(US)而不是英语(英国)一个。 (即不是html lang =“en-gb”)

所以当来自英国的用户将他们的语言设置为en-uk时,他们会获得美国语言文件。

所以我试着这样做

 context.setLocale(new Locale("en","gb"))
 context.setLocalString("en-GB")

但是setLocalString会覆盖setLocalString,反之亦然。所以看起来我不能同时使用它们

有什么方法可以在beforePageLoad上添加代码,以确保html lang属性都使用正确的语言更新,并且我的日期以正确的语言集格式显示?

1 个答案:

答案 0 :(得分:4)

尝试在 beforeRenderResponse 期间直接在视图根目录中设置语言环境,而不是使用上下文对象:

<xp:this.beforeRenderResponse>
    <![CDATA[#{javascript:
       facesContext.getViewRoot().setLocale( new java.util.Locale("en-GB") );
    }]]>
</xp:this.beforeRenderResponse>

或者您可以按照此处所述在阶段侦听器中切换区域设置: http://openntf.org/XSnippets.nsf/snippet.xsp?id=xpages-localization-setter

修改

语言环境设置有点奇怪。使用 context.setLocaleString()(如Panu Haaramo回答)时,您必须在 en GB 之间使用下划线,但这不会解决问题,因为 ViewRootRender 在渲染HTML输出时仅使用语言设置生成 lang 属性。

这个

new java.util.Locale("en", "GB").getLanguage()

仅返回 en ,忽略“GB”。

使用 context.setLocaleString 将带来相同的结果,因为它只解析给定的字符串并将其转换为 java.util.Locale ,它返回与descibed。

但是使用未定义的Locale将生成一个小写的 lang 属性。 F.E.这个

<xp:this.beforeRenderResponse>
   <![CDATA[#{javascript:
      facesContext.getViewRoot().setLocale( new java.util.Locale("en-Blabla-Blubb") );
   }]]>
</xp:this.beforeRenderResponse>

生成以下HTML标记:

<html lang="en-blabla-blubb">

这就是为什么这个答案顶部的代码将lang属性设置为 en-gb ,但这仍然是错误的:它应该将它设置为 en-GB as这里描述:w3.org: Best Practices: Specifying Language in XHTML & HTML Content