web浏览器可以使用接受语言头请求一种语言,并列出若干种语言。Safari只列出OSX上的一种语言,这是操作系统中的当前语言集。现在,这是一个问题,当涉及到挪威。挪威有三种语言代码ISO 639-1 (nb,nn,no).nb是Bokm l,nn是Nynorsk,no是组成这两种语言的“宏语言”。
如果我们只有一个Bokm l l10n,那么最好将Bokm l版本提供给请求Nynorsk的人,而不是回到默认的语言。在我看来,在没有完美匹配的情况下,应该可以解决“最佳匹配”服务器端的问题(例如,nb和nn似乎都会回到不匹配状态,这似乎是一个小小的飞跃)。目前,客户端有责任提供一份已被接受的语言列表。
应用程序在JSP中,并使用JSTL来本地化最终被解析为资源包的String。
同样的问题也适用于以书面形式存在的其他宏语言。
那么,如何在不重复语言资源的情况下处理这个问题呢?
发布于 2011-03-22 04:32:52
因此,我以一种通用的方式解决了这个问题,它允许我为所有的way应用程序集中定义“后备”语言服务器端。
我所做的就是包装HttpServletRequest并拦截getAttribute用于javax.servlet.jsp.jstl.fmt.localizationContext.request
。它通常是一个字符串(ResourceBundle
的基本名称),但是您可以解析它并用一个LocalizationContext
替换它,然后fmt:message
标记将使用它。解析它时,您将传递一个ResourceBundle.Control,即执行适当映射的实现getFallbackLocale
。
现在,看一看宏观语言列表,我没有看到任何其他显而易见的语言,这些语言是常见的(例如,我怀疑人们用当地的阿拉伯语冲浪,但现在我已经做好了准备:)但在挪威,我认为Bokm l和Nynorsk都是不可避免的,在网络上普遍使用,而且肯定有很多网站只局限于其中之一。
发布于 2011-03-18 04:36:50
为Nynorsk语言创建一个类资源包,并将其父包设置为Bokmal包。有关如何加载包的说明,请参见http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle%28java.lang.String,%20java.util.Locale,%20java.lang.ClassLoader%29:
public class foobar_nn extends ListResourceBundle {
public foobar_nn {
setParent(ResourceBundle.getBundle("foobar", new Locale("nb")));
}
@Override
protected Object[][] getContents() {
return new Object[0][0];
}
}
或者,只需更改构建过程,以便将每个xxx_nb.properties文件复制到xxx_nn.properties。
https://stackoverflow.com/questions/5351863
复制相似问题