我有JSTL Java代码,它读取请求标头Accept language paremeter
<c:set var="locale" value="<%= request.getHeader("Accept-Language") %>"/>
变量区域设置的值因浏览器语言设置的顺序而异。
有时就像这样
en-GB,en;q=0.8,en-AU;q=0.6,en-US;q=0.4,en-CA;q=0.2
其他时候就像这样
en,en-GB;q=0.8,en-AU;q=0.6,en-US;q=0.4,en-CA;q=0.2
在任何一种情况下,我都想读取第一次出现的语言环境,例如en-XX。在这种情况下,en-GB。
我使用的是分离功能,但我无法找出将其用于此任务的正确方法。
我这样做了,只有当en-XX是字符串中的第一个
时才能工作<c:set var="locale" value="<%= request.getHeader("Accept-Language").split(",")[0] %>"/>
非常感谢任何有关将正则表达式与分割函数(或任何其他函数)结合使用的帮助。
谢谢,
答案 0 :(得分:1)
两个答案:
{{1}}:
根据Accept-Language标头返回客户端将接受内容的首选语言环境。
做你想做的事情可能是更好的选择。
答案 1 :(得分:0)
specification中没有任何内容表明语言按优先级(质量)的降序排列。
您应该做的是将您支持的语言与给定的语言列表进行比较,以找到最佳匹配。
E.g。如果你得到这个(例子来自规范):
Accept-Language: da, en-gb;q=0.8, en;q=0.7
但你只支持“英语(美国)”和“西班牙语(墨西哥)”,那么最好的(唯一的)匹配是en;q=0.7
,意思是“任何英语”,所以你的选择是{{ 1}}。
这一切都应该在Servlet或动作处理程序中完成,而不是在JSP中完成。或者,您可以创建一个帮助程序类来提供JSP可以与en-US
一起使用的逻辑。