在java中检测浏览器语言

在java中检测浏览器语言,java,browser,Java,Browser,我在检测用户首选的浏览器语言时遇到问题 我发现navigator对象属性只检测与系统相关的语言。.userLanguage检测用户pc的本地语言或任务栏中使用的语言,并通过控制面板>区域和语言选项进行设置,然后.systemLanguage检测操作系统语言,然后.browserLanguage检测系统的默认浏览器语言。所以这些东西都帮不了我 我需要的是检测通过工具>InternetOptions设置的用户首选浏览器语言 使用Java有什么方法可以做到这一点吗 希望有人能帮我如果你能访问HttpS

我在检测用户首选的浏览器语言时遇到问题

我发现navigator对象属性只检测与系统相关的语言。.userLanguage检测用户pc的本地语言或任务栏中使用的语言,并通过控制面板>区域和语言选项进行设置,然后.systemLanguage检测操作系统语言,然后.browserLanguage检测系统的默认浏览器语言。所以这些东西都帮不了我

我需要的是检测通过工具>InternetOptions设置的用户首选浏览器语言

使用Java有什么方法可以做到这一点吗


希望有人能帮我

如果你能访问HttpServletRequest对象,那就很容易了。 假设您在一个servlet中:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
        Enumeration locales = request.getLocales();
/**
*You can get the first one matches your supported local like below
*/
        while (locales.hasMoreElements()) {
             Locale locale = (Locale) locales.nextElement();
             if (supportedLanguages.contains(locale)) {
                 requestLocale = locale;
                 break;
             }
        }
       super.doPost(request, response);
   }
如果您正在谈论在客户端检测浏览器语言。 我建议您使用JS来获取浏览器语言,您可以在Java代码中调用JS。顺便说一句,我在我的chrome上测试了它:

var type=navigator.appName
if (type=="Netscape"){
var lang = navigator.language
}
else{
var lang = navigator.userLanguage
}

如果您可以访问HttpServletRequest对象,那就相当容易了。 假设您在一个servlet中:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
        Enumeration locales = request.getLocales();
/**
*You can get the first one matches your supported local like below
*/
        while (locales.hasMoreElements()) {
             Locale locale = (Locale) locales.nextElement();
             if (supportedLanguages.contains(locale)) {
                 requestLocale = locale;
                 break;
             }
        }
       super.doPost(request, response);
   }
如果您正在谈论在客户端检测浏览器语言。 我建议您使用JS来获取浏览器语言,您可以在Java代码中调用JS。顺便说一句,我在我的chrome上测试了它:

var type=navigator.appName
if (type=="Netscape"){
var lang = navigator.language
}
else{
var lang = navigator.userLanguage
}

您可以使用下面的行

Locale browserLocale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
txtVal.setValue(browserLocale.getDisplayLanguage());
有关更多详细信息,请查看此

您可以使用以下行

Locale browserLocale = FacesContext.getCurrentInstance().getViewRoot().getLocale();
txtVal.setValue(browserLocale.getDisplayLanguage());
有关更多详细信息,请查看此

顺便说一句,“工具>Internet选项”可能重复您所说的是浏览器还是操作系统?FF确实没有
InternetOptions
菜单项。字符串Locale=System.getProperty(“user.language”)+“-”+System.getProperty(“user.region”);System.out.println(区域设置);这是我使用的代码。它给了我语言,但不是语言region@Kavya您是否尝试过
stringuserlocale=req.getHeader(“接受语言”)可能重复的BTW-“工具>InternetOptions”你说的是浏览器还是操作系统?FF确实没有
InternetOptions
菜单项。字符串Locale=System.getProperty(“user.language”)+“-”+System.getProperty(“user.region”);System.out.println(区域设置);这是我使用的代码。它给了我语言,但不是语言region@Kavya您是否尝试过
stringuserlocale=req.getHeader(“接受语言”)VBScript不是Java。我知道VBScript不是Java。我只是想把我的想法说清楚。对于服务器端,很容易通过请求获取语言。getLocales()。对于客户端,对于不同的浏览器,有不同的方式获取语言。我以vbscript为例来获取IE的AcceptLanguage键的注册表值。我展示了另一个JS来获取客户端的语言。您可以通过Selenium驱动程序轻松调用js。VBScript不是Java。我知道VBScript不是Java。我只是想把我的想法说清楚。对于服务器端,很容易通过请求获取语言。getLocales()。对于客户端,对于不同的浏览器,有不同的方式获取语言。我以vbscript为例来获取IE的AcceptLanguage键的注册表值。我展示了另一个JS来获取客户端的语言。您可以通过Selenium驱动程序轻松调用js。