Bug 1446202 - 1. Return correct locale string to Gecko; r?droeh
Locale.toString() doesn't return the correct locale format that Gecko
expects, so reformat the locale string before returning. (for example,
Locale.toString() returns "en_US_POSIX#Latn" whereas Gecko expects
"en-Latn-US-POSIX"). The incorrect locale format was preventing intl
code (and the datetime box) from initializing.
MozReview-Commit-ID: JmDYkDj31pL
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoAppShell.java
@@ -71,16 +71,17 @@ import android.hardware.SensorManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.media.AudioManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Looper;
import android.os.ParcelFileDescriptor;
import android.os.PowerManager;
import android.os.SystemClock;
import android.os.Vibrator;
import android.provider.Settings;
@@ -1867,11 +1868,26 @@ public class GeckoAppShell
if (prop == null) {
return 0;
}
return Integer.parseInt(prop);
}
@WrapForJNI
public static String getDefaultLocale() {
- return Locale.getDefault().toString();
+ final Locale locale = Locale.getDefault();
+ if (Build.VERSION.SDK_INT >= 21) {
+ return locale.toLanguageTag();
+ }
+
+ final StringBuilder out = new StringBuilder(locale.getLanguage());
+ final String country = locale.getCountry();
+ final String variant = locale.getVariant();
+ if (!TextUtils.isEmpty(country)) {
+ out.append('-').append(country);
+ }
+ if (!TextUtils.isEmpty(variant)) {
+ out.append('-').append(variant);
+ }
+ // e.g. "en", "en-US", or "en-US-POSIX".
+ return out.toString();
}
}