2012-06-05 120 views
3

在我的应用程序中,在Login page上,页面顶部有一个语言选项。L10N:为什么应用默认语言

Language option

如果我选择中国,一切都将完全转化为中国人。

Chinese

如果我点击Refresh按钮或Ctrl + R,页面仍然在中国。但是,如果我打开另一个标签转到相同的URL,即使语言选项仍显示Chinese被选中,所有内容都将再次显示为英语。

English again

不过,如果你点击About usMethodology,下一个页面将在中国再次因为它应该是。

如果您能告诉我我在这里做错了什么,我将不胜感激。

最好的问候,

+0

是不是语言代码的一部分你的网址?类似于“www.example.com/en/help”或“www.example.com/cn/help”? – adarshr

+0

@adarshr不,语言代码是我的'@ SessionScoped' bean中属性的一个。 –

+0

我想这可能是问题所在。您需要在URL中包含标识语言的内容并依靠此代码切换语言环境。否则,在新窗口/浏览器中打开的书签,共享URL,URL将不会被本地化。 – adarshr

回答

2

有显然是在您如何设置UIViewRoot的语言环境的问题。

它应该在您的主模板中按以下方式完成<f:view locale>,也许您对所有其他页面都有此权限,但对主页无此权限。

E.g.

<!DOCTYPE html> 
<html lang="#{localeBean.language}" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    ... 
> 
    <f:view locale="#{localeBean.locale}"> 
     <h:head> 
      ... 
     </h:head> 
     <h:body> 
      ... 
     </h:body> 
    </f:view> 
</html> 

#{localeBean}@SessionScoped一个看起来相似this

顺便说一句,这个问题表明,页面不共享一个共同的主模板,并且你在这里和那里复制XHTML代码。我会努力:)

+0

:)非常感谢。这正是我错过的。 –