http://web.archiveorange.com/archive/v/fwvde0wN3xcViMtADw6x
似乎navigator.language属性在androids的webview中总是“en”。那么,获得用户语言的最佳方法是什么?在原生java代码中获取它并通过javascript将其转换为webview?或任何其他更好的方式?
答案 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等中读取它。