From 9f5cee9fdb24c53e0fdb786c767ead6f4e63528e Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Mon, 24 Nov 2025 21:41:13 +0100 Subject: [PATCH] Add gendered string variant files --- .../settings/locale/LocaleSettingsScreen.kt | 52 +++++---- .../main/res/values-ar-feminine}/strings.xml | 0 .../main/res/values-ar-masculine}/strings.xml | 0 .../main/res/values-be-feminine/strings.xml | 3 + .../main/res/values-be-masculine/strings.xml | 3 + .../main/res/values-ca-feminine/strings.xml | 3 + .../main/res/values-ca-masculine/strings.xml | 3 + .../main/res/values-cs-feminine/strings.xml | 3 + .../main/res/values-cs-masculine/strings.xml | 3 + .../main/res/values-el-feminine/strings.xml | 3 + .../main/res/values-el-masculine/strings.xml | 3 + .../main/res/values-es-feminine/strings.xml | 3 + .../main/res/values-es-masculine/strings.xml | 3 + .../src/main/res/values-fr-feminine/unit.xml | 2 - .../src/main/res/values-fr-masculine/unit.xml | 2 - .../main/res/values-he-feminine/strings.xml | 3 + .../main/res/values-he-masculine/strings.xml | 3 + .../main/res/values-hi-feminine/strings.xml | 3 + .../main/res/values-hi-masculine/strings.xml | 3 + .../main/res/values-it-feminine/strings.xml | 3 + .../main/res/values-it-masculine/strings.xml | 3 + .../main/res/values-pl-feminine/strings.xml | 3 + .../main/res/values-pl-masculine/strings.xml | 3 + .../main/res/values-pt-feminine/strings.xml | 6 + .../main/res/values-pt-masculine/strings.xml | 6 + .../res/values-pt-rBR-feminine/strings.xml | 6 + .../res/values-pt-rBR-masculine/strings.xml | 6 + .../main/res/values-ro-feminine/strings.xml | 6 + .../main/res/values-ro-masculine/strings.xml | 6 + .../main/res/values-ru-feminine/strings.xml | 6 + .../main/res/values-ru-masculine/strings.xml | 6 + .../main/res/values-uk-feminine/strings.xml | 6 + .../main/res/values-uk-masculine/strings.xml | 6 + core/i18n/src/main/res/values/strings.xml | 4 + crowdin.yml | 107 +++++++++++------- 35 files changed, 218 insertions(+), 63 deletions(-) rename {plugins/sdk/src/main/res/values-fr-feminine => core/i18n/src/main/res/values-ar-feminine}/strings.xml (100%) rename {plugins/sdk/src/main/res/values-fr-masculine => core/i18n/src/main/res/values-ar-masculine}/strings.xml (100%) create mode 100644 core/i18n/src/main/res/values-be-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-be-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-ca-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-ca-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-cs-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-cs-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-el-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-el-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-es-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-es-masculine/strings.xml delete mode 100644 core/i18n/src/main/res/values-fr-feminine/unit.xml delete mode 100644 core/i18n/src/main/res/values-fr-masculine/unit.xml create mode 100644 core/i18n/src/main/res/values-he-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-he-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-hi-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-hi-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-it-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-it-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-pl-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-pl-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-pt-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-pt-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-pt-rBR-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-pt-rBR-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-ro-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-ro-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-ru-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-ru-masculine/strings.xml create mode 100644 core/i18n/src/main/res/values-uk-feminine/strings.xml create mode 100644 core/i18n/src/main/res/values-uk-masculine/strings.xml diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/locale/LocaleSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/locale/LocaleSettingsScreen.kt index a28b2395a..2b363cba4 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/locale/LocaleSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/locale/LocaleSettingsScreen.kt @@ -13,6 +13,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalResources import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.capitalize import androidx.core.app.GrammaticalInflectionManagerCompat import androidx.core.net.toUri import androidx.core.os.LocaleListCompat @@ -53,7 +54,11 @@ fun LocaleSettingsScreen() { Preference( icon = R.drawable.flag_24px, title = stringResource(R.string.preference_language), - summary = if (language == null) stringResource(R.string.preference_value_system_default) else language.getDisplayName(language), + summary = if (language == null) { + stringResource(R.string.preference_value_system_default) + } else { + language.getDisplayName(language).replaceFirstChar { it.uppercase(language) } + }, enabled = isAtLeastApiLevel(33), onClick = { context.tryStartActivity( @@ -63,26 +68,33 @@ fun LocaleSettingsScreen() { ) } ) - ListPreference( - icon = R.drawable.wc_24px, - title = "Form of address", - value = GrammaticalInflectionManagerCompat.getApplicationGrammaticalGender(context).let { - if (it == GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_NOT_SPECIFIED) { - GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_NEUTRAL - } else { - it - } - }, - onValueChanged = { - GrammaticalInflectionManagerCompat.setRequestedApplicationGrammaticalGender(context, it) - }, - enabled = isAtLeastApiLevel(34), - items = listOf( - "Neutral" to GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_NEUTRAL, - "Feminine" to GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_FEMININE, - "Masculine" to GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_MASCULINE, + if (listOf("fr").contains(LocalResources.current.configuration?.locales[0]?.language)) { + ListPreference( + icon = R.drawable.wc_24px, + title = stringResource(R.string.preference_form_of_address), + value = GrammaticalInflectionManagerCompat.getApplicationGrammaticalGender( + context + ).let { + if (it == GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_NOT_SPECIFIED) { + GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_NEUTRAL + } else { + it + } + }, + onValueChanged = { + GrammaticalInflectionManagerCompat.setRequestedApplicationGrammaticalGender( + context, + it + ) + }, + enabled = isAtLeastApiLevel(34), + items = listOf( + stringResource(R.string.preference_form_of_address_neutral) to GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_NEUTRAL, + stringResource(R.string.preference_form_of_address_fem) to GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_FEMININE, + stringResource(R.string.preference_form_of_address_masc) to GrammaticalInflectionManagerCompat.GRAMMATICAL_GENDER_MASCULINE, + ) ) - ) + } ListPreference( icon = R.drawable.schedule_24px, title = stringResource(R.string.preference_clock_widget_time_format), diff --git a/plugins/sdk/src/main/res/values-fr-feminine/strings.xml b/core/i18n/src/main/res/values-ar-feminine/strings.xml similarity index 100% rename from plugins/sdk/src/main/res/values-fr-feminine/strings.xml rename to core/i18n/src/main/res/values-ar-feminine/strings.xml diff --git a/plugins/sdk/src/main/res/values-fr-masculine/strings.xml b/core/i18n/src/main/res/values-ar-masculine/strings.xml similarity index 100% rename from plugins/sdk/src/main/res/values-fr-masculine/strings.xml rename to core/i18n/src/main/res/values-ar-masculine/strings.xml diff --git a/core/i18n/src/main/res/values-be-feminine/strings.xml b/core/i18n/src/main/res/values-be-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-be-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-be-masculine/strings.xml b/core/i18n/src/main/res/values-be-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-be-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-ca-feminine/strings.xml b/core/i18n/src/main/res/values-ca-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-ca-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-ca-masculine/strings.xml b/core/i18n/src/main/res/values-ca-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-ca-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-cs-feminine/strings.xml b/core/i18n/src/main/res/values-cs-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-cs-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-cs-masculine/strings.xml b/core/i18n/src/main/res/values-cs-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-cs-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-el-feminine/strings.xml b/core/i18n/src/main/res/values-el-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-el-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-el-masculine/strings.xml b/core/i18n/src/main/res/values-el-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-el-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-es-feminine/strings.xml b/core/i18n/src/main/res/values-es-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-es-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-es-masculine/strings.xml b/core/i18n/src/main/res/values-es-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-es-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-fr-feminine/unit.xml b/core/i18n/src/main/res/values-fr-feminine/unit.xml deleted file mode 100644 index 854200555..000000000 --- a/core/i18n/src/main/res/values-fr-feminine/unit.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/i18n/src/main/res/values-fr-masculine/unit.xml b/core/i18n/src/main/res/values-fr-masculine/unit.xml deleted file mode 100644 index 854200555..000000000 --- a/core/i18n/src/main/res/values-fr-masculine/unit.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/core/i18n/src/main/res/values-he-feminine/strings.xml b/core/i18n/src/main/res/values-he-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-he-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-he-masculine/strings.xml b/core/i18n/src/main/res/values-he-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-he-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-hi-feminine/strings.xml b/core/i18n/src/main/res/values-hi-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-hi-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-hi-masculine/strings.xml b/core/i18n/src/main/res/values-hi-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-hi-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-it-feminine/strings.xml b/core/i18n/src/main/res/values-it-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-it-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-it-masculine/strings.xml b/core/i18n/src/main/res/values-it-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-it-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-pl-feminine/strings.xml b/core/i18n/src/main/res/values-pl-feminine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-pl-feminine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-pl-masculine/strings.xml b/core/i18n/src/main/res/values-pl-masculine/strings.xml new file mode 100644 index 000000000..55344e519 --- /dev/null +++ b/core/i18n/src/main/res/values-pl-masculine/strings.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-pt-feminine/strings.xml b/core/i18n/src/main/res/values-pt-feminine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-pt-feminine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-pt-masculine/strings.xml b/core/i18n/src/main/res/values-pt-masculine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-pt-masculine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-pt-rBR-feminine/strings.xml b/core/i18n/src/main/res/values-pt-rBR-feminine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-pt-rBR-feminine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-pt-rBR-masculine/strings.xml b/core/i18n/src/main/res/values-pt-rBR-masculine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-pt-rBR-masculine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-ro-feminine/strings.xml b/core/i18n/src/main/res/values-ro-feminine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-ro-feminine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-ro-masculine/strings.xml b/core/i18n/src/main/res/values-ro-masculine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-ro-masculine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-ru-feminine/strings.xml b/core/i18n/src/main/res/values-ru-feminine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-ru-feminine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-ru-masculine/strings.xml b/core/i18n/src/main/res/values-ru-masculine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-ru-masculine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-uk-feminine/strings.xml b/core/i18n/src/main/res/values-uk-feminine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-uk-feminine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values-uk-masculine/strings.xml b/core/i18n/src/main/res/values-uk-masculine/strings.xml new file mode 100644 index 000000000..43ddc6238 --- /dev/null +++ b/core/i18n/src/main/res/values-uk-masculine/strings.xml @@ -0,0 +1,6 @@ + + + %1$s pretende aceder aos dados de %2$s. + Recusar + Permitir + \ No newline at end of file diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 71fbbef40..c6f3e0762 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -1059,4 +1059,8 @@ Language, units, time format Language System default + Form of address + Neutral + Feminine + Masculine diff --git a/crowdin.yml b/crowdin.yml index aafc927b6..0778953c9 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -5,45 +5,74 @@ files: type: android languages_mapping: android_code: - ar: ar # Arabic - az: az # Azerbaijani - eu: eu # Basque - be: be # Belarusian - bn: bn # Bengali - ca: ca # Catalan - zh-CN: zh-rCN # Chinese Simplified - zh-TW: zh-rTW # Chinese Traditional - cs: cs # Czech - da: da # Danish - nl: nl # Dutch, Netherlands - eo: eo # Esperanto - fi: fi # Finnish - fr: fr # French, France - fr-fem: fr-feminine # French (feminine) - fr-masc: fr-masculine # French (masculine) - de: de # German, Germany - el: el # Greek - he: iw # Hebrew - hu: hu # Hungarian - id: in # Indonesian - it: it # Italian, Italy - ja: ja # Japanese - ko: ko # Korean - lt: lt # Lithuanian - ms: ms # Malay - nb: nb # Norwegian Bokmal - fa: fa # Persian - pl: pl # Polish - pt-BR: pt # Portuguese, Brazil - pt-PT: pt-rPT # Portuguese, Portugal - ro: ro # Romanian - ru: ru # Russian, Russia - es-MX: es # Spanish, Mexico - sv-SE: sv # Swedish, Sweden - th: th # Thai - tr: tr # Turkish, Türkiye - uk: uk # Ukrainian - vi: vi # Vietnamese + ar: ar # Arabic + az: az # Azerbaijani + eu: eu # Basque + be: be # Belarusian + be-fem: be-feminine # Belarusian (feminine) + be-masc: be-masculine # Belarusian (masculine) + bn: bn # Bengali + ca: ca # Catalan + ca-fem: ca-feminine # Catalan (feminine) + ca-masc: ca-masculine # Catalan (masculine) + zh-CN: zh-rCN # Chinese Simplified + zh-TW: zh-rTW # Chinese Traditional + cs: cs # Czech + cs-fem: cs-feminine # Czech (feminine) + cs-masc: cs-masculine # Czech (masculine) + da: da # Danish + nl: nl # Dutch, Netherlands + eo: eo # Esperanto + fi: fi # Finnish + fr: fr # French, France + fr-fem: fr-feminine # French (feminine) + fr-masc: fr-masculine # French (masculine) + de: de # German, Germany + el: el # Greek + el-fem: el-feminine # Greek (feminine) + el-masc: el-masculine # Greek (masculine) + he: iw # Hebrew + he-fem: he-feminine # Hebrew (feminine) + he-masc: he-masculine # Hebrew (masculine) + hi: hi # Hindi + hi-fem: hi-feminine # Hindi (feminine) + hi-masc: hi-masculine # Hindi (masculine) + hu: hu # Hungarian + id: in # Indonesian + it: it # Italian, Italy + it-fem: it-feminine # Italian (feminine) + it-masc: it-masculine # Italian (masculine) + ja: ja # Japanese + ko: ko # Korean + lt: lt # Lithuanian + ms: ms # Malay + nb: nb # Norwegian Bokmal + fa: fa # Persian + pl: pl # Polish + pl-fem: pl-feminine # Polish (feminine) + pl-masc: pl-masculine # Polish (masculine) + pt-BR: pt # Portuguese, Brazil + pt-BR-fem: pt-feminine # Portuguese, Brazil (feminine) + pt-BR-masc: pt-masculine # Portuguese, Brazil (masculine) + pt-PT: pt-rPT # Portuguese, Portugal + pt-PT-fem: pt-feminine # Portuguese, Portugal (feminine) + pt-PT-masc: pt-masculine # Portuguese, Portugal (masculine) + ro: ro # Romanian + ro-fem: ro-feminine # Romanian (feminine) + ro-masc: ro-masculine # Romanian (masculine) + ru: ru # Russian, Russia + ru-fem: ru-feminine # Russian (feminine) + ru-masc: ru-masculine # Russian (masculine) + es-MX: es # Spanish, Mexico + es-MX-fem: es-feminine # Spanish, Mexico (feminine) + es-MX-masc: es-masculine # Spanish, Mexico (masculine) + sv-SE: sv # Swedish, Sweden + th: th # Thai + tr: tr # Turkish, Türkiye + uk: uk # Ukrainian + uk-fem: uk-feminine # Ukrainian (feminine) + uk-masc: uk-masculine # Ukrainian (masculine) + vi: vi # Vietnamese - source: /core/i18n/src/main/res/values/units.xml translation: /core/i18n/src/main/res/values-%android_code%/%original_file_name% type: android