blob: 6656fa331c0788d2b5a77eb3f9a14d2c48c59d81 [file] [log] [blame]
/*
* Copyright 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.compose.ui.text.intl
import androidx.compose.runtime.Immutable
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
/**
* A `Locale` object represents a specific geographical, political, or cultural region. An operation
* that requires a `Locale` to perform its task is called _locale-sensitive_ and uses the `Locale`
* to tailor information for the user. For example, displaying a number is a locale-sensitive
* operation— the number should be formatted according to the customs and conventions of the user's
* native country, region, or culture.
*
* @param platformLocale Platform specific Locale object that provides the actual values for the
* members of this class.
* @see TextStyle
* @see SpanStyle
*/
@Immutable
class Locale internal constructor(val platformLocale: PlatformLocale) {
companion object {
/** Returns a [Locale] object which represents current locale */
val current: Locale
get() = platformLocaleDelegate.current[0]
}
/**
* Create Locale object from a language tag.
*
* @param languageTag A [IETF BCP47](https://tools.ietf.org/html/bcp47) compliant language tag.
* @return a locale object
*/
constructor(languageTag: String) : this(platformLocaleDelegate.parseLanguageTag(languageTag))
/** The ISO 639 compliant language code. */
val language: String
get() = platformLocale.language
/** The ISO 15924 compliant 4-letter script code. */
val script: String
get() = platformLocale.script
/** The ISO 3166 compliant region code. */
val region: String
get() = platformLocale.region
/**
* Returns a IETF BCP47 compliant language tag representation of this Locale.
*
* @return A IETF BCP47 compliant language tag.
*/
fun toLanguageTag(): String = platformLocale.getLanguageTag()
override fun equals(other: Any?): Boolean {
if (other == null) return false
if (other !is Locale) return false
if (this === other) return true
return toLanguageTag() == other.toLanguageTag()
}
// We don't use data class since we cannot offer copy function here.
override fun hashCode(): Int = toLanguageTag().hashCode()
override fun toString(): String = toLanguageTag()
}