Convert obsolete language codes to new standards in Accept-Language and User-Agent.

Bug:2593415
Change-Id: I6b0bd161a0a2222da6ab7812614c1ba03d8c22eb
This commit is contained in:
Shimeng (Simon) Wang
2010-04-14 18:11:05 -07:00
parent d404d6f162
commit 0e4cb9d89f

View File

@@ -296,13 +296,13 @@ public class WebSettings {
"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; en-us)"
+ " AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0"
+ " Safari/530.17";
private static final String IPHONE_USERAGENT =
private static final String IPHONE_USERAGENT =
"Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us)"
+ " AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0"
+ " Mobile/7A341 Safari/528.16";
private static Locale sLocale;
private static Object sLockForLocaleSettings;
/**
* Package constructor to prevent clients from creating a new settings
* instance.
@@ -327,6 +327,8 @@ public class WebSettings {
android.os.Process.myUid()) != PackageManager.PERMISSION_GRANTED;
}
private static final String ACCEPT_LANG_FOR_US_LOCALE = "en-US";
/**
* Looks at sLocale and returns current AcceptLanguage String.
* @return Current AcceptLanguage String.
@@ -336,32 +338,53 @@ public class WebSettings {
synchronized(sLockForLocaleSettings) {
locale = sLocale;
}
StringBuffer buffer = new StringBuffer();
final String language = locale.getLanguage();
if (language != null) {
buffer.append(language);
final String country = locale.getCountry();
if (country != null) {
buffer.append("-");
buffer.append(country);
}
}
if (!locale.equals(Locale.US)) {
buffer.append(", ");
java.util.Locale us = Locale.US;
if (us.getLanguage() != null) {
buffer.append(us.getLanguage());
final String country = us.getCountry();
if (country != null) {
buffer.append("-");
buffer.append(country);
}
StringBuilder buffer = new StringBuilder();
addLocaleToHttpAcceptLanguage(buffer, locale);
if (!Locale.US.equals(locale)) {
if (buffer.length() > 0) {
buffer.append(", ");
}
buffer.append(ACCEPT_LANG_FOR_US_LOCALE);
}
return buffer.toString();
}
/**
* Convert obsolete language codes, including Hebrew/Indonesian/Yiddish,
* to new standard.
*/
private static String convertObsoleteLanguageCodeToNew(String langCode) {
if (langCode == null) {
return null;
}
if ("iw".equals(langCode)) {
// Hebrew
return "he";
} else if ("in".equals(langCode)) {
// Indonesian
return "id";
} else if ("ji".equals(langCode)) {
// Yiddish
return "yi";
}
return langCode;
}
private static void addLocaleToHttpAcceptLanguage(StringBuilder builder,
Locale locale) {
String language = convertObsoleteLanguageCodeToNew(locale.getLanguage());
if (language != null) {
builder.append(language);
String country = locale.getCountry();
if (country != null) {
builder.append("-");
builder.append(country);
}
}
}
/**
* Looks at sLocale and mContext and returns current UserAgent String.
* @return Current UserAgent String.
@@ -379,11 +402,11 @@ public class WebSettings {
} else {
// default to "1.0"
buffer.append("1.0");
}
}
buffer.append("; ");
final String language = locale.getLanguage();
if (language != null) {
buffer.append(language.toLowerCase());
buffer.append(convertObsoleteLanguageCodeToNew(language));
final String country = locale.getCountry();
if (country != null) {
buffer.append("-");