mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
833c18887f
--HG-- rename : mobile/android/base/LocaleAware.java => mobile/android/base/Locales.java
117 lines
3.7 KiB
Java
117 lines
3.7 KiB
Java
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.gecko;
|
|
|
|
import java.util.Locale;
|
|
|
|
import org.mozilla.gecko.BrowserLocaleManager;
|
|
import org.mozilla.gecko.LocaleManager;
|
|
|
|
import android.app.Activity;
|
|
import android.content.Context;
|
|
import android.os.Bundle;
|
|
import android.os.StrictMode;
|
|
import android.support.v4.app.FragmentActivity;
|
|
|
|
/**
|
|
* This is a helper class to do typical locale switching operations without
|
|
* hitting StrictMode errors or adding boilerplate to common activity
|
|
* subclasses.
|
|
*
|
|
* Either call {@link Locales#initializeLocale(Context)} in your
|
|
* <code>onCreate</code> method, or inherit from
|
|
* <code>LocaleAwareFragmentActivity</code> or <code>LocaleAwareActivity</code>.
|
|
*/
|
|
public class Locales {
|
|
public static void initializeLocale(Context context) {
|
|
final LocaleManager localeManager = BrowserLocaleManager.getInstance();
|
|
final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads();
|
|
StrictMode.allowThreadDiskWrites();
|
|
try {
|
|
localeManager.getAndApplyPersistedLocale(context);
|
|
} finally {
|
|
StrictMode.setThreadPolicy(savedPolicy);
|
|
}
|
|
}
|
|
|
|
public static class LocaleAwareFragmentActivity extends FragmentActivity {
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
Locales.initializeLocale(getApplicationContext());
|
|
super.onCreate(savedInstanceState);
|
|
}
|
|
}
|
|
|
|
public static class LocaleAwareActivity extends Activity {
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
Locales.initializeLocale(getApplicationContext());
|
|
super.onCreate(savedInstanceState);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Sometimes we want just the language for a locale, not the entire language
|
|
* tag. But Java's .getLanguage method is wrong.
|
|
*
|
|
* This method is equivalent to the first part of
|
|
* {@link Locales#getLanguageTag(Locale)}.
|
|
*
|
|
* @return a language string, such as "he" for the Hebrew locales.
|
|
*/
|
|
public static String getLanguage(final Locale locale) {
|
|
// Can, but should never be, an empty string.
|
|
final String language = locale.getLanguage();
|
|
|
|
// Modernize certain language codes.
|
|
if (language.equals("iw")) {
|
|
return "he";
|
|
}
|
|
|
|
if (language.equals("in")) {
|
|
return "id";
|
|
}
|
|
|
|
if (language.equals("ji")) {
|
|
return "yi";
|
|
}
|
|
|
|
return language;
|
|
}
|
|
|
|
/**
|
|
* Gecko uses locale codes like "es-ES", whereas a Java {@link Locale}
|
|
* stringifies as "es_ES".
|
|
*
|
|
* This method approximates the Java 7 method
|
|
* <code>Locale#toLanguageTag()</code>.
|
|
*
|
|
* @return a locale string suitable for passing to Gecko.
|
|
*/
|
|
public static String getLanguageTag(final Locale locale) {
|
|
// If this were Java 7:
|
|
// return locale.toLanguageTag();
|
|
|
|
final String language = getLanguage(locale);
|
|
final String country = locale.getCountry(); // Can be an empty string.
|
|
if (country.equals("")) {
|
|
return language;
|
|
}
|
|
return language + "-" + country;
|
|
}
|
|
|
|
public static Locale parseLocaleCode(final String localeCode) {
|
|
int index;
|
|
if ((index = localeCode.indexOf('-')) != -1 ||
|
|
(index = localeCode.indexOf('_')) != -1) {
|
|
final String langCode = localeCode.substring(0, index);
|
|
final String countryCode = localeCode.substring(index + 1);
|
|
return new Locale(langCode, countryCode);
|
|
}
|
|
|
|
return new Locale(localeCode);
|
|
}
|
|
}
|