Lokalizace a překlady v Androidu - zizanek/-github-tz-pma-2026-priprava GitHub Wiki

Lokalizace a překlady v Androidu: Práce se souborem strings.xml

Vkládání všech textů do zdrojového souboru res/values/strings.xml namísto jejich přímého zapisování do kódu (tzv. „hardcoding“) tvoří základní předpoklad pro lokalizaci (překlad) aplikace do různých jazyků.

Android disponuje vestavěným mechanismem, který podle nastaveného jazyka v zařízení uživatele automaticky vybere odpovídající jazykovou verzi textů.


1. Princip fungování jazykových zdrojů

Veškeré výchozí texty jsou uloženy v základním adresáři:

  • res/values/strings.xml (výchozí jazyk – použit vždy, když není dostupný konkrétní překlad)

Pro každý další podporovaný jazyk se vytvoří specifický adresář s tzv. jazykovým kvalifikátorem:

  • res/values-en/strings.xml (anglický překlad)
  • res/values-de/strings.xml (německý překlad)
  • res/values-cs/strings.xml (český překlad, pokud výchozí složka obsahuje angličtinu)

Klíče (name) jednotlivých řetězců musí zůstat ve všech souborech zcela shodné, mění se pouze samotný text mezi značkami <string>.


2. Výchozí jazyk (Fallback mechanismus) a volba jazyka

Častým dotazem bývá, zda soubor res/values/strings.xml musí povinně obsahovat angličtinu, nebo v něm může být čeština.

Jak systém vyhodnocuje jazyky za běhu:

  1. Systém nejprve vyhledá složku s přesným kódem aktuálního jazyka zařízení (např. při němčině hledá values-de/).
  2. Pokud složku pro daný jazyk nenalezne, je použit soubor ze základní složky res/values/strings.xml (tzv. fallback).

Čeština jako výchozí jazyk:

Technicky není překážkou, pokud je výchozí soubor vytvořen v češtině a překladová složka values-en/ v angličtině:

  • Uživatel s českým zařízením uvidí češtinu (z res/values/).
  • Uživatel s anglickým zařízením uvidí angličtinu (z res/values-en/).
  • Uživatel s jiným jazykem (např. španělštinou či francouzštinou) uvidí češtinu, protože pro jeho jazyk překlad neexistuje a systém sáhne do výchozího souboru.

Školní výuka vs. mezinárodní praxe:

  • Ve školní výuce a lokálních projektech: Čeština jako výchozí jazyk v res/values/strings.xml je zcela běžná a didakticky přirozená.
  • V profesionální mezinárodní praxi: Jako průmyslový standard bývá do základní složky res/values/ umisťována angličtina, zatímco čeština je vyčleněna do res/values-cs/. Tím je zaručeno, že uživatelům z nepodporovaných zemí bude zobrazen globálně srozumitelný jazyk.

3. Přidání překladu v Android Studiu: Translations Editor

Android Studio obsahuje grafický nástroj Translations Editor, který tvorbu překladů výrazně usnadňuje a zabraňuje chybám v ručním vytváření složek.

Postup vytvoření nového jazyka:

  1. Otevře se soubor res/values/strings.xml.
  2. V pravém horním rohu editoru se klikne na odkaz Open editor.
  3. Otevře se tabulka všech textů aplikace. V horní liště se klikne na ikonu zeměkoule s plusem (Add Locale).
  4. Ze seznamu se vybere požadovaný jazyk (např. en: English).
  5. Android Studio automaticky:
    • vytvoří novou složku res/values-en/ a v ní soubor strings.xml,
    • přidá do tabulky nový sloupec pro překlad.
  6. Do nového sloupce se vepíší přeložené texty.

4. Ukázka zdrojových souborů

Výchozí soubor (res/values/strings.xml):

<resources>
    <string name="app_name">Objednávka kola</string>
    <string name="order_title">Jaké kolo chcete objednat?</string>
    <string name="button_make_order_text">Objednat Kolo</string>
    <string name="textview_order_summary_text">Souhrn objednávky:</string>
</resources>

Anglický soubor (res/values-en/strings.xml):

<resources>
    <string name="app_name">Bike Order</string>
    <string name="order_title">Which bike do you want to order?</string>
    <string name="button_make_order_text">Order Bike</string>
    <string name="textview_order_summary_text">Order summary:</string>
</resources>

5. Jak systém vybírá správný text za běhu

V kódu layoutu ani v jazyce Kotlin se nevytvářejí žádné podmínky pro zjišťování jazyka. Výběr je prováděn automaticky:

  • V XML layoutu:
    Při odkazu @string/button_make_order_text systém ověří jazyk telefonu a automaticky načte odpovídající verzi.

  • V kódu Kotlinu:
    Při volání metody getString(R.string.nazev_retezce) probíhá tentýž výběr:

    val summaryText = getString(R.string.textview_order_summary_text)
    

6. Práce s dynamickými texty (Parametry v překladech)

Častým problémem při překladu jsou dynamicky doplňované hodnoty (např. název vybraného kola či cena). Různé jazyky mají odlišný slovosled, proto nelze řetězce spojovat prostou konkatenací pomocí operátoru +.

V souboru strings.xml se pro proměnné hodnoty definují formátovací zástupné znaky:

  • %s – zástupný znak pro textový řetězec (String),
  • %d – zástupný znak pro celé číslo (Integer).

Definice v strings.xml:

<!-- Čeština: %s bude nahrazeno názvem kola, %d cenou -->
<string name="order_confirmation">Objednávka kola %s byla odeslána za %d Kč.</string>

Definice v values-en/strings.xml:

<string name="order_confirmation">Order of bike %s was submitted for %d CZK.</string>

Použití v Kotlinu (např. pro Toast):

val bikeName = "Oiz M10"
val price = 95000

// Parametry se předávají přímo do metody getString()
val message = getString(R.string.order_confirmation, bikeName, price)

Toast.makeText(this@MainActivity, message, Toast.LENGTH_SHORT).show()

Díky tomuto formátu je zajištěn gramaticky správný slovosled pro všechny jazykové mutace.

⚠️ **GitHub.com Fallback** ⚠️