在我的Java应用程序中,我将默认系统区域设置(Locale.getDefault()
)设置为我的tomcat Web应用程序的HTTP请求的Accept-Language标头。
就我而言,这是de_DE
。
在服务器端,我尝试使用request.getLocale()
获取区域设置。但我只得到一个空字符串。
如果我将Accept-Language设置为de
,一切正常。
为什么de_DE
无法作为Accept-Language标头工作?
修改
这是我的客户端代码:
HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestProperty("Accept-Language", Locale.getDefault().toString());
这是我的服务器端代码:
request.getLocale().toString(); //empty string
request.getHeader("Accept-Language"); //"de_DE"
答案 0 :(得分:2)
语言标签的正确格式是de-DE。用破折号,而不是下划线。
我想如果其他网络服务器更宽松并且接受de_DE是等效的,那么它不会令人惊讶,但Tomcat却没有。作为参考,Tomcat将此解析委托给Locale.forLanguageTag(),这清楚地表明它需要格式de-DE。
答案 1 :(得分:0)
正如kumesana指出的那样,Tomcat将使用Locale.forLanguageTag()
将Accept-Language标头值转换为Locale。有一种相反的方法可以将Locale实例转换为预期的标头字符串:toLanguageTag()
我建议您使用此方法,而不是用下划线手动替换下划线,因此您的代码将如下所示:
connection.setRequestProperty("Accept-Language", Locale.getDefault().toLanguageTag());