Source code

Revision control

Copy as Markdown

Other Tools

/* 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.focus.locale
import java.util.Locale
/**
* This is a helper class to do typical locale switching operations without hitting StrictMode errors or adding
* boilerplate to common activity subclasses.
*
* Inherit from `LocaleAwareFragmentActivity` or `LocaleAwareActivity`.
*/
object Locales {
/**
* 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 [Locales.getLanguageTag].
*
* @return a language string, such as "he" for the Hebrew locales.
*/
fun getLanguage(locale: Locale): String {
// Modernize certain language codes.
return when (val language = locale.language) {
"iw" -> {
"he"
}
"in" -> {
"id"
}
"ji" -> {
"yi"
}
else -> language
}
}
/**
* Gecko uses locale codes like "es-ES", whereas a Java [Locale] stringifies as "es_ES".
*
* This method approximates the Java 7 method `Locale#toLanguageTag()`.
*
* @return a locale string suitable for passing to Gecko.
*/
@JvmStatic
fun getLanguageTag(locale: Locale): String {
val language = getLanguage(locale)
val country = locale.country
return if (country.isEmpty()) {
language
} else {
"$language-$country"
}
}
/** Parses a locale code [String] and returns the corresponding [Locale]. */
fun parseLocaleCode(localeCode: String): Locale {
var index: Int
if (localeCode.indexOf('-').also { index = it } != -1 || localeCode.indexOf('_').also { index = it } != -1) {
val langCode = localeCode.substring(0, index)
val countryCode = localeCode.substring(index + 1)
return Locale.Builder().setLanguage(langCode).setRegion(countryCode).build()
}
return Locale.forLanguageTag(localeCode)
}
}