Skip to main content

Az Android-alkalmazások lokalizációjának teljes útmutatója

A strings.xml fájltól a Play Store metaadataiig: lokalizálja Android-alkalmazását Kotlinnal, Jetpack Compose-zal, Fastlane-nel és automatizált AI-fordítással.

1

Az Android-projekt előkészítése lokalizációhoz

Az Android mappaalapú konvenciót használ a lokalizációhoz. Az alapértelmezett karakterláncok a res/values/strings.xml fájlban, a fordítások pedig olyan területspecifikus mappákban találhatók, mint a res/values-de/ vagy res/values-ja/.

Android Project Structure
// 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-rTW
A res/values/ mappa a tartalék területi beállítás. Ha egy karakterlánc hiányzik egy területspecifikus mappából, az Android az alapértelmezettből tölti be. Ha azonban az alapértelmezettből hiányzik egy karakterlánc, az alkalmazás összeomlik a nem támogatott területi beállításoknál.
2

strings.xml létrehozása

Az Android karakterlánc-erőforrásai XML-t használnak '<string>' elemekkel egy '<resources>' gyökérelemben. Karakterlánc-helyőrzőhöz használjon %s, egész számhoz %d, a fordítók által átrendezhető pozicionális argumentumokhoz pedig %1$s/%2$s jelölést.

res/values/strings.xml
<!-- 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>
Az escape-karakter nélküli aposztrófok észrevétlenül összeomlasztják az XML-elemzőt. Használjon \' karaktert, vagy tegye az értéket dupla idézőjelbe. Emellett: az alapértelmezett values/strings.xml fájlból hiányzó karakterlánc azonnali összeomlást okoz, nem szabályos tartalékot, mint az iOS-nél.
Common strings.xml Mistakes
<!-- ❌ 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>
3

Többes számok kezelése

Az Android '&lt;plurals&gt;' elemeket használ quantity attribútumokkal: zero, one, two, few, many, other. Minden célnyelv más kategóriákat igényelhet — az arab mind a 6-ot, az orosz a few/many kategóriát, a japán csak az other kategóriát használja.

res/values/strings.xml
<!-- 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
) -->
A quantity attribútum az eszköz területi beállításának CLDR-szabályai szerint választja ki a többes számú alakot. Tartalékként mindig adja meg az „other” kategóriát — ez az egyetlen, amely minden nyelven biztosan létezik.
4

Használat kódban: Kotlin és Jetpack Compose

A hagyományos Android a getString(R.string.key) és resources.getQuantityString() függvényt használja. A Jetpack Compose a stringResource(R.string.key) és pluralStringResource() függvényt használja. Futásidőben mindegyik az eszköz területi beállítása szerinti helyes fordítást adja vissza.

WelcomeScreen.kt
// 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
    ))
}
pluralStringResource(R.plurals.items, count, count) — a count paramétert kétszer kell átadni. Az első választja ki a többes számú alakot, a második a formátumargumentum. A második count kihagyása a Compose leggyakoribb többesszám-kezelési hibája.
5

Karakterlánctömbök és formázott karakterláncok

Rendezett listákhoz — például legördülő menük beállításaihoz vagy bevezető lépésekhez — használjon '&lt;string-array&gt;' elemet. Formázott karakterláncokban használjon pozicionális argumentumokat (%1$s, %2$d), hogy a fordítók a mondatszerkezet megbontása nélkül rendezhessék át a szavakat.

res/values/strings.xml
<!-- 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>
A %1$s típusú pozicionális argumentumok lehetővé teszik a paraméterek szabad átrendezését. A „Hello %1$s, you have %2$d items” eltérő szórendű nyelveken „%2$d items for %1$s” alakot kaphat a kód módosítása nélkül.
6

Google Play-metaadatok lokalizálása Fastlane-nel

A Fastlane supply parancsával a Play Store metaadatait — címet, rövid és teljes leírást, valamint változásnaplókat — területi beállítás szerint rendezett egyszerű szövegfájlokként kezelheti a repozitoriumban.

Terminal
# 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 supply
A lokalizált Play Store-adatlap több mint 30%-kal növeli a letöltéseket a nem angol piacokon. A cím, a rövid és a teljes leírás is részt vesz a keresési indexelésben, ezért fordításuk a legjobb megtérülésű lokalizációs feladat.
Google Play

A Play Store-adatlap lokalizációjának automatizálása

Hagyja el a kézi másolást és beillesztést. Fordítsa le Play Store-címét, leírását és kiadási megjegyzéseit több mint 175 területi beállításra, a karakterkorlátok figyelembevételével.

A Google Play-integráció felfedezése
7

A lokalizáció tesztelése

Teszteljen emulátoros nyelvváltással, egyéni LocaleList értéket használó Compose-előnézetekkel és a Fejlesztői beállítások pszeudoterületi beállításaival. A Gradle resConfigs beállításával távolítsa el a külső könyvtárak nem kívánt nyelvi erőforrásait.

Testing Localization
// 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 mirroring
Teszteljen németül (a szöveg körülbelül 30%-kal hosszabb) és japánul (körülbelül 50%-kal rövidebb), hogy észlelje az elrendezési hibákat. Engedélyezze a pszeudoterületi beállításokat (en-XA az ékezetes, ar-XB az RTL-szöveghez) a Fejlesztői beállításokban, így valódi fordítások nélkül is terheléses tesztnek vetheti alá az elrendezést.

A fordítási minőség automatizálása

Az i18n-validate segítségével még kiadás előtt észlelheti a hiányzó kulcsokat, hibás helyőrzőket és többesszám-problémákat. A valódi fordítások elkészülte előtt az i18n-pseudo álfordításaival tesztelheti a felületet.
8

Fordítások automatizálása

Fordítsa le mesterséges intelligenciával a strings.xml fájlokat, a többes számú alakokat, a karakterlánctömböket és a Fastlane Supply metaadatait. Automatizálja az alkalmazáson belüli szövegek és a Play Áruház metaadatainak fordítását a teljesen lokalizált megjelenésért.

Terminal
# 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.2s
Az i18n Agent kezeli az Android XML escape-karaktereit, megőrzi a translatable="false" jelölőket, betartja a célnyelv CLDR többesszám-kategóriáit, és változatlanul hagyja a pozicionális formázási argumentumokat.
JetBrains

Android Studio-bővítmény érhető el

Fordítsa le az Android XML-erőforrásokat közvetlenül az IDE-ben az IntelliJhez és az Android Studióhoz készült i18n Agent bővítménnyel.

Install
+

Bónusz: intelligens területi tartalék a LocaleChainnel

Az Android erőforrás-tartalékát az operációs rendszer vezérli. Ha hiányzik a pt-BR fordítás, az Android teljesen kihagyja a pt-PT változatot, és angol szöveget jelenít meg. A LocaleChain elfogja a karakterlánc-lekéréseket, és végigjár egy beállítható tartalékláncot — így a regionális felhasználók a legközelebbi elérhető fordítást látják.

A LocaleChain for Android egy nyílt forráskódú Kotlin-könyvtár. Megtekintés a GitHubon

build.gradle.kts
// build.gradle.kts (app module)
dependencies {
    implementation("com.i18nagent:locale-chain-android:0.1.0")
}
MyApp.kt / BaseActivity.kt
// 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"))
)

Gyakori buktatók

A hiányzó alapértelmezett karakterláncok összeomlást okoznak

Az iOS-szel ellentétben, amely a nyers kulcsot jeleníti meg, az Android ResourceNotFoundException hibával összeomlik, ha egy karakterlánc hiányzik az alapértelmezett res/values/strings.xml fájlból. Mindig gondoskodjon arról, hogy minden kulcs szerepeljen az alapértelmezett fájlban.

Az App Bundle nyelvi felosztása megszakítja az alkalmazáson belüli nyelvváltást

A Google Play App Bundle csomagjai nyelv szerint bontják fel az APK-kat — a felhasználók csak az eszközük nyelvéhez tartozó karakterláncokat kapják meg. Ha alkalmazáson belüli nyelvváltást kínál, adja hozzá a bundle '{ language { enableSplit = false } }' beállítást a build.gradle.kts fájlhoz.

Hibás RTL-elrendezések

Az elrendezésekben a start/end helyett left/right használata, illetve az android:supportsRtl="true" hiánya az AndroidManifest.xml fájlból. A meglévő elrendezések automatikus átalakításához használja az Android Studio Refactor > Add RTL Support parancsát.

Könyvtári erőforrások okozta szennyeződés

A külső könyvtárak saját values-XX/strings.xml fájlokat csomagolnak, ezért az Android úgy érzékelheti, hogy az alkalmazás olyan nyelveket is támogat, amelyeket valójában nem. A build.gradle.kts resConfigs beállításával korlátozza a csomagolt területi beállításokat azokra, amelyekhez ténylegesen készít fordítást.

Ajánlott fájlszerkezet

Project Structure
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.kts

Try i18n Agent Now

Drop your translation file here

JSON, YAML, PO, XML, CSV, Markdown, Properties

or click to browse

Target languages

No signup requiredInstant estimate

Területi tartalék a locale-chain-android használatával

Ha egy fordítási kulcs hiányzik egy regionális területi beállításból, például a pt-BR változatból, az Android a pt szülőterület ellenőrzése helyett közvetlenül az alapértelmezett erőforrásmappára vált.

Terminal
implementation("com.i18nagent:locale-chain-android:0.1.0")
Configuration
import com.i18nagent.localechain.LocaleChain

LocaleChain.configure(
    overrides = mapOf(
        "pt-BR" to listOf("pt", "en"),
        "zh-Hant-HK" to listOf("zh-Hant", "zh", "en"),
    )
)

A támogatott keretrendszerek és a 75 beépített lánc teljes listájáért tekintse meg Területi tartalék útmutatónkat. Learn more →

Android-lokalizáció – gyakori kérdések