
Täielik Android'i rakenduse lokaliseerimise juhend
strings.xml-failist Play Store'i metaandmeteni: lokaliseeri oma Android'i rakendus Kotlin'i, Jetpack Compose'i, Fastlane'i ja automaatse tehisintellekti tõlkega.
Seadista Android'i projekt lokaliseerimiseks
Android kasutab lokaliseerimiseks kaustapõhist tava. Vaikestringid asuvad failis res/values/strings.xml ning tõlgitud stringid lokaadipõhistes kaustades, nagu res/values-de/ ja res/values-ja/.
// Android project structure for localization:
// res/
// ├── values/ ← Default (fallback) locale
// │ └── strings.xml
// ├── values-de/ ← German
// │ └── strings.xml
// ├── values-ja/ ← Japanese
// │ └── strings.xml
// └── values-es/ ← Spanish
// └── strings.xml
//
// Folder naming: values-{language} or values-{language}-r{Region}
// Examples: values-pt-rBR, values-zh-rCN, values-zh-rTWLoo strings.xml
Android'i stringiressursid kasutavad XML-i, kus juurelemendi '<resources>' sees on elemendid '<string>'. Kasuta stringi kohatäitjana %s, täisarvude jaoks %d ning tõlkijate ümberjärjestatavate positsiooniargumentidena %1$s/%2$s.
<!-- res/values/strings.xml -->
<resources>
<string name="welcome_title">Welcome to MyApp</string>
<string name="login_button">Sign In</string>
<string name="settings_label">Settings</string>
<string name="greeting">Hello, %s!</string> <!-- %s = string -->
<string name="item_count">%d items</string> <!-- %d = integer -->
<string name="app_name" translatable="false">MyApp</string>
</resources><!-- ❌ Common mistakes in strings.xml: -->
<!-- Unescaped apostrophe — crashes XML parser silently -->
<string name="message">It's a great day</string>
<!-- Missing from default values/strings.xml — app crashes -->
<!-- (only exists in values-de/strings.xml) -->
<!-- ✅ Correct versions: -->
<string name="message">It\'s a great day</string>
<!-- Or wrap in double quotes: -->
<string name="message">"It's a great day"</string>Töötle mitmusevorme
Android kasutab elemente '<plurals>', mille quantity-atribuudid on zero, one, two, few, many ja other. Iga sihtkeel võib vajada eri kategooriaid — araabia keel kasutab kõiki kuut, vene keel kategooriaid few ja many ning jaapani keel ainult other-kategooriat.
<!-- res/values/strings.xml -->
<resources>
<plurals name="items_count">
<item quantity="zero">No items</item>
<item quantity="one">%d item</item>
<item quantity="other">%d items</item>
</plurals>
</resources>
<!-- Usage in Kotlin: -->
<!-- val text = resources.getQuantityString(
R.plurals.items_count,
count, // selects plural form
count // format argument
) -->Kasuta koodis: Kotlin ja Jetpack Compose
Tavapärane Android kasutab funktsioone getString(R.string.key) ja resources.getQuantityString(). Jetpack Compose kasutab funktsioone stringResource(R.string.key) ja pluralStringResource(). Mõlemad leiavad käitusajal seadme lokaadi järgi õige tõlke.
// Traditional Android (Activity/Fragment)
val title = getString(R.string.welcome_title)
val greeting = getString(R.string.greeting, userName)
val items = resources.getQuantityString(
R.plurals.items_count, count, count
)
// Jetpack Compose
@Composable
fun WelcomeScreen(userName: String, itemCount: Int) {
// ✅ stringResource — Compose-aware, triggers recomposition
Text(text = stringResource(R.string.welcome_title))
// ✅ With format arguments
Text(text = stringResource(R.string.greeting, userName))
// ✅ Plurals — count passed TWICE
Text(text = pluralStringResource(
R.plurals.items_count,
itemCount, // selects plural form
itemCount // format argument
))
}Stringimassiivid ja vormindatud stringid
Kasuta elementi '<string-array>' järjestatud loendite jaoks (nt rippmenüü valikud ja kasutuselevõtu etapid). Kasuta vormindatud stringides positsioonilisi vormindusargumente (%1$s, %2$d), et tõlkijad saaksid sõnu lauseehitust rikkumata ümber järjestada.
<!-- res/values/strings.xml -->
<resources>
<!-- String array for dropdown/list -->
<string-array name="sort_options">
<item>Most Recent</item>
<item>Most Popular</item>
<item>Price: Low to High</item>
<item>Price: High to Low</item>
</string-array>
<!-- Positional format args for reordering -->
<string name="welcome_message">
Hello %1$s, you have %2$d new messages
</string>
<!-- Translators can reorder: -->
<!-- %2$d neue Nachrichten für %1$s -->
</resources>Lokaliseeri Google Play metaandmed Fastlane'iga
Halda Play Store'i metaandmeid — pealkirja, lühikirjeldust, täiskirjeldust ja muudatuste logisid — Fastlane'i käsuga supply hoidlas lokaadi järgi korraldatud lihttekstifailidena.
# Install Fastlane
$ gem install fastlane
# Initialize supply for Play Store metadata
$ fastlane supply init
# Directory structure created:
# fastlane/metadata/android/
# ├── en-US/
# │ ├── title.txt # App name (50 chars)
# │ ├── short_description.txt # Short desc (80 chars)
# │ ├── full_description.txt # Full desc (4000 chars)
# │ └── changelogs/
# │ └── default.txt # What's New
# ├── de-DE/
# │ └── ...
# └── ja-JP/
# └── ...
# Push metadata to Play Store:
$ fastlane supplyAutomatiseeri Play Store'i kirje lokaliseerimine
Jäta käsitsi kopeerimine ja kleepimine vahele. Tõlgi Play Store'i pealkiri, kirjeldus ja väljalaskemärkmed enam kui 175 lokaati, arvestades tähemärgipiiranguid.
Tutvu Google Play lõimingugaTesti lokaliseerimist
Testi emulaatori lokaadivahetuse, kohandatud LocaleListiga Compose'i eelvaadete ja arendaja valikute pseudolokaatidega. Eemalda Gradle'i resConfigs-seadistusega kolmanda osapoole teekidest soovimatud lokaadiressursid.
// 1. Emulator: Settings > System > Language > Add language
// 2. Compose Preview with locale:
@Preview
@Composable
fun WelcomePreview() {
val config = Configuration(resources.configuration).apply {
setLocale(Locale("de"))
}
val localContext = LocalContext.current
val localizedContext = localContext.createConfigurationContext(config)
CompositionLocalProvider(
LocalContext provides localizedContext
) {
WelcomeScreen()
}
}
// 3. Restrict library locales in build.gradle.kts:
android {
defaultConfig {
// Only include locales you actually translate
resourceConfigurations += listOf("en", "de", "ja", "es", "fr")
}
}
// 4. Enable pseudolocales in Developer Options:
// en-XA (accented) — detects hardcoded strings
// ar-XB (RTL) — tests layout mirroringAutomatiseeri tõlkekvaliteet
Automatiseeri tõlked
Tõlgi strings.xml, mitmusevormid, stringimassiivid ja Fastlane Supply metaandmed tehisintellektiga. Automatiseeri nii rakendusesiseste stringide kui ka Play Store'i metaandmete tõlkimine täielikult lokaliseeritud kohalolu jaoks.
# Translate strings.xml files
> Translate res/values/strings.xml
to Japanese, German, and Spanish
# Translate Play Store metadata too
> Translate fastlane/metadata/android/en-US/
to de-DE, ja-JP, es-ES
✓ 6 files translated in 3.2sAndroid Studio plugin on saadaval
Tõlgi Android'i XML-ressursse otse oma IDE-st i18n Agent'i IntelliJ / Android Studio pluginaga.
Lisavõimalus: nutikas varulokaat LocaleChain'iga
Android'i ressursside varulokaadi juhib operatsioonisüsteem. Kui pt-BR tõlked puuduvad, jätab Android pt-PT täielikult vahele ja kuvab inglise keele. LocaleChain püüab stringiotsingud kinni ning läbib seadistatava varulokaadiahela, nii et piirkondlikud kasutajad näevad lähimat saadaolevat tõlget.
LocaleChain for Android on avatud lähtekoodiga Kotlin'i teek. Vaata GitHub'is
// build.gradle.kts (app module)
dependencies {
implementation("com.i18nagent:locale-chain-android:0.1.0")
}// 1. Application.onCreate() — configure chains once
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
LocaleChain.configure()
}
}
// 2. BaseActivity — wrap context per Activity
open class BaseActivity : AppCompatActivity() {
override fun attachBaseContext(newBase: Context) {
super.attachBaseContext(LocaleChain.wrap(newBase))
}
}
// pt-BR user with only pt-PT translations?
// → Shows Portuguese instead of falling back to English
// Custom overrides for your specific locales:
LocaleChain.configure(
overrides = mapOf("es-MX" to listOf("es-419", "es"))
)Levinud komistuskivid
Puuduvad vaikestringid põhjustavad krahhi
App Bundle'i keelejaotused rikuvad rakendusesisese keelevahetuse
RTL-paigutused lähevad katki
Teegiressursside saastumine
Soovituslik failistruktuur
MyApp/
├── app/
│ └── src/main/
│ ├── res/
│ │ ├── values/
│ │ │ ├── strings.xml # Default (source) strings
│ │ │ └── plurals.xml # Plural rules
│ │ ├── values-de/
│ │ │ └── strings.xml
│ │ ├── values-ja/
│ │ │ └── strings.xml
│ │ └── values-es/
│ │ └── strings.xml
│ ├── java/com/example/myapp/
│ └── AndroidManifest.xml
├── fastlane/
│ └── metadata/android/
│ ├── en-US/
│ │ ├── title.txt
│ │ ├── short_description.txt
│ │ ├── full_description.txt
│ │ └── changelogs/default.txt
│ ├── de-DE/
│ └── ja-JP/
├── build.gradle.kts
└── settings.gradle.ktsProovi i18n Agent'i kohe
Kukuta tõlkefail siia
JSON, YAML, PO, XML, CSV, Markdown, Properties
või klõpsa faili valimiseks
Sihtkeeled
Varulokaat locale-chain-androidiga
Kui piirkondlikust lokaadist, näiteks pt-BR-st, puudub tõlkevõti, liigub Android otse vaikeressursside kausta ega kontrolli esmalt põhilokaati pt.
implementation("com.i18nagent:locale-chain-android:0.1.0")import com.i18nagent.localechain.LocaleChain
LocaleChain.configure(
overrides = mapOf(
"pt-BR" to listOf("pt", "en"),
"zh-Hant-HK" to listOf("zh-Hant", "zh", "en"),
)
)Vaata meie varulokaadi juhendist kõigi toetatud raamistike ja 75 sisseehitatud ahela loendit. Learn more →