在android中获取用户的语言

时间:2011-07-01 11:57:40

标签: android localization

http://web.archiveorange.com/archive/v/fwvde0wN3xcViMtADw6x

似乎navigator.language属性在androids的webview中总是“en”。那么,获得用户语言的最佳方法是什么?在原生java代码中获取它并通过javascript将其转换为webview?或任何其他更好的方式?

4 个答案:

答案 0 :(得分:3)

解决此问题的一种方法是使用userAgent - navigator.userAgent,并在其上运行正则表达式以查找该语言。

示例Android ua字符串(来自http://www.gtrifonov.com/2011/04/15/google-android-user-agent-strings-2/):

Mozilla / 5.0(Linux; U; Android 2.0.1; en-us; Droid Build / ESD56)AppleWebKit / 530.17(KHTML,类似Gecko)版本/ 4.0 Mobile Safari / 530.17

所以请匹配语言:navigator.userAgent.match(/[a-z]{2}-[a-z]{2}/),返回en-us

如果您想要非常安全,可以匹配语言前面Android 2.0.1;的存在。正则表达式是:

navigator.userAgent.match(/Android \d+(?:\.\d+){1,2}; [a-z]{2}-[a-z]{2}/).toString().match(/[a-z]{2}-[a-z]{2}/)

答案 1 :(得分:2)

这可能会有所帮助:

Locale.getDefault().getDisplayLanguage();

答案 2 :(得分:2)

我发现此问题的解决方案是通过webview的设置设置用户代理:

WebSettings settings = wv.getSettings();
settings.setJavaScriptEnabled(true);
settings.setUserAgentString(Locale.getDefault().getLanguage());

在您的网站内容中,您可以通过以下方式检索它:

var userLang = navigator.userAgent;

这只应用于显示本地内容的webview。

答案 3 :(得分:0)

这取决于您需要此信息的位置。如果您需要Android操作系统区域设置,Locale.getDefault()就足够了。对于服务器端,检测Locale的最佳方法是读取HTTP协议的Accept-Language标头的内容 在这种情况下,区域设置检测取决于所使用的服务器端技术。对于简单的Servlet,您只需执行request.getLocale(),对于JSF,您可以从UIViewRoot等中读取它。