Lokalizace Androidu
Tento dokument představuje lokalizační funkce sady Android SDK a přístup k nim pomocí Xamarinu.
Funkce platformy Android
Tato část popisuje hlavní funkce lokalizace Androidu. Přeskočte na další část a podívejte se na konkrétní kód a příklady.
Národní prostředí
Uživatelé zvolí jazyk v nastavení > jazyka a vstupu. Tento výběr určuje jazyk zobrazený i místní nastavení (např. pro formátování data a čísla).
Aktuální národní prostředí lze dotazovat prostřednictvím aktuálního Resources
kontextu:
var lang = Resources.Configuration.Locale; // eg. "es_ES"
Tato hodnota bude identifikátor národního prostředí, který obsahuje kód jazyka i kód národního prostředí oddělený podtržítkem. Tady je seznam národních prostředí Java a národních prostředí podporovaných Androidem prostřednictvím StackOverflow.
K běžným příkladům patří:
en_US
pro angličtinu (USA)es_ES
pro španělštinu (Španělsko)ja_JP
pro japonštinu (Japonsko)zh_CN
pro čínštinu (Čína)zh_TW
pro čínštinu (Tchaj-wan)pt_PT
pro portugalštinu (Portugalsko)pt_BR
pro portugalštinu (Brazílie)
LOCALE_CHANGED
Android se vygeneruje android.intent.action.LOCALE_CHANGED
, když uživatel změní výběr jazyka.
Aktivity se můžou rozhodnout zpracovat nastavením android:configChanges
atributu aktivity, například takto:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Locale | ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
Základy internacionalizace v Androidu
Strategie lokalizace Androidu má následující klíčové části:
Složky prostředků, které obsahují lokalizované řetězce, obrázky a další prostředky.
GetText
metoda, která se používá k načtení lokalizovaných řetězců v kódu@string/id
v souborech AXML pro automatické umístění lokalizovaných řetězců do rozložení.
Složky prostředků
Aplikace pro Android spravují většinu obsahu ve složkách prostředků, například:
- layout – obsahuje soubory rozložení AXML.
- kreslení – obsahuje obrázky a další nakreslené zdroje.
- hodnoty – obsahuje řetězce.
- raw – obsahuje datové soubory.
Většina vývojářů už umí používat přípony dpi v kreslitelném adresáři k poskytování více verzí obrázku a umožňuje Androidu zvolit správnou verzi pro každé zařízení. Stejný mechanismus se používá k poskytování více překladů jazyka příponou adresářů prostředků s identifikátory jazyka a jazykové verze.
Poznámka:
Při zadávání jazyka nejvyšší úrovně jako es
jsou vyžadovány pouze dva znaky. Při zadávání celého národního prostředí však formát názvu adresáře vyžaduje pomlčku a malá písmena r k oddělení dvou částí, například pt-rBR nebo zh-rCN. Porovnejte ji s hodnotou vrácenou v kódu, která má podtržítko (např. pt_BR
). Obě tyto hodnoty se liší od použití třídy .NET CultureInfo
, která má pouze pomlčku (např. pt-BR
). Při práci na platformách Xamarin mějte na paměti tyto rozdíly.
formát souboru Strings.xml
Adresář lokalizovaných hodnot (např. values-es nebo values-pt-rBR) by měly obsahovat soubor s názvem Strings.xml , který bude obsahovat přeložený text pro dané národní prostředí.
Každý přeložitelný řetězec je element XML s ID prostředku zadaným jako name
atribut a přeložený řetězec jako hodnota:
<string name="app_name">TaskyL10n</string>
Potřebujete utéct podle normálních pravidel XML a name
musí to být platné ID prostředku Androidu (bez mezer nebo pomlček). Tady je příklad výchozího (anglického) souboru řetězců pro příklad:
hodnoty/Strings.xml
<resources>
<string name="app_name">TaskyL10n</string>
<string name="taskadd">Add Task</string>
<string name="taskname">Name</string>
<string name="tasknotes">Notes</string>
<string name="taskdone">Done</string>
<string name="taskcancel">Cancel</string>
</resources>
Hodnoty španělského adresáře obsahují soubor se stejným názvem (Strings.xml), který obsahuje překlady:
values-es/Strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">TaskyLeon</string>
<string name="taskadd">agregar tarea</string>
<string name="taskname">Nombre</string>
<string name="tasknotes">Notas</string>
<string name="taskdone">Completo</string>
<string name="taskcancel">Cancelar</string>
</resources>
Při nastavení souborů řetězců lze přeložené hodnoty odkazovat jak v rozloženích, tak v kódu.
Soubory rozložení AXML
Pokud chcete odkazovat na lokalizované řetězce v souborech rozložení, použijte @string/id
syntaxi. Tento fragment kódu XML z ukázky ukazuje text
vlastnosti, které se nastavují s lokalizovanými ID prostředků (některé další atributy byly vynechány):
<TextView
android:id="@+id/NameLabel"
android:text="@string/taskname"
... />
<CheckBox
android:id="@+id/chkDone"
android:text="@string/taskdone"
... />
GetText – metoda
Pokud chcete načíst přeložené řetězce v kódu, použijte metodu GetText
a předejte ID prostředku:
var cancelText = Resources.GetText (Resource.String.taskcancel);
Řetězce množství
Prostředky řetězců androidu také umožňují vytvářet řetězce množství, které umožňují překladatelům poskytovat různé překlady pro různá množství, například:
- "Zbývá 1 úkol."
- "Stále je potřeba provést 2 úkoly."
(místo obecného pole "Zbývá n úkolů").
V Strings.xml
<plurals name="numberOfTasks">
<!--
As a developer, you should always supply "one" and "other"
strings. Your translators will know which strings are actually
needed for their language.
-->
<item quantity="one">There is %d task left.</item>
<item quantity="other">There are %d tasks still to do.</item>
</plurals>
K vykreslení celého řetězce použijte metodu GetQuantityString
předáním ID prostředku a hodnoty, která se má zobrazit (což je předáno dvakrát). Druhý parametr používá Android k určení , který quantity
řetězec se má použít, třetí parametr je hodnota ve skutečnosti nahrazena řetězcem (obě jsou povinné).
var translated = Resources.GetQuantityString (
Resource.Plurals.numberOfTasks, taskcount, taskcount);`
Platné quantity
přepínače jsou:
- žádný
- jeden
- dva
- málo
- mnoho
- other
Podrobněji jsou popsány v dokumentaci k Androidu. Pokud daný jazyk nevyžaduje speciální zpracování, budou tyto quantity
řetězce ignorovány (například pouze angličtina používá one
a other
zadávání zero
řetězce nebude mít žádný vliv, nebude použit).
Obrázky
Lokalizované obrázky se řídí stejnými pravidly jako soubory řetězců: všechny obrázky odkazované v aplikaci by měly být umístěny do nakreslených adresářů, takže je tam náhradní.
Obrázky specifické pro národní prostředí by se pak měly umístit do kvalifikovaných kreslených složek, jako jsou kreslené es nebo drawable-ja (lze také přidat specifikátory dpi).
Na tomto snímku obrazovky jsou čtyři obrázky uloženy v kreslitelném adresáři, ale pouze jeden, flag.png, má lokalizované kopie v jiných adresářích.
Jiné typy prostředků
Můžete také poskytnout další typy alternativních prostředků, prostředků specifických pro jazyk, včetně rozložení, animací a nezpracovaných souborů. To znamená, že můžete zadat konkrétní rozložení obrazovky pro jeden nebo více cílových jazyků, například můžete vytvořit rozložení speciálně pro němčinu, která umožňuje velmi dlouhé textové popisky.
Android 4.2 zavedl podporu jazyků zprava doleva (RTL), pokud jste nastavili nastavení android:supportsRtl="true"
aplikace . Kvalifikátor "ldrtl"
prostředků lze zahrnout do názvu adresáře, aby obsahovala vlastní rozložení navržená pro zobrazení RTL.
Další informace o pojmenování a náhradním pojmenování adresářů prostředků najdete v dokumentaci k Androidu, kde najdete alternativní zdroje informací.
Název aplikace
Název aplikace se snadno lokalizuje pomocí in @string/id
pro MainLauncher
aktivitu:
[Activity (Label = "@string/app_name", MainLauncher = true, Icon="@drawable/launcher",
ConfigurationChanges = ConfigChanges.Orientation | ConfigChanges.Locale)]
Jazyky zprava doleva (RTL)
Android 4.2 a novější poskytuje úplnou podporu rozložení RTL, která jsou podrobně popsána v blogu podpory nativní verze RTL.
Při použití Androidu 4.2 (úroveň rozhraní API 17) a novějších je možné hodnoty zarovnání zadat start
end
místo left
a right
(například android:paddingStart
). K dispozici jsou také nová rozhraní API, jako LayoutDirection
je , TextDirection
a TextAlignment
pomáhají vytvářet obrazovky, které se přizpůsobí čtečkám RTL.
Následující snímek obrazovky ukazuje lokalizovanou ukázku Tasky v arabštině:
Následující snímek obrazovky ukazuje lokalizovanou ukázku Tasky v hebrejštině:
Text RTL se lokalizuje pomocí Strings.xml souborů stejným způsobem jako text LTR.
Testování
Nezapomeňte důkladně otestovat výchozí národní prostředí. Pokud se z nějakého důvodu nedají načíst výchozí prostředky (tj. chybí), aplikace se chybově ukončí.
Testování emulátoru
Pokyny k nastavení emulátoru na konkrétní národní prostředí pomocí prostředí ADB najdete v části Testování Google v emulátoru Androidu .
adb shell setprop persist.sys.locale fr-CA;stop;sleep 5;start
Testování zařízení
Pokud chcete testovat na zařízení, změňte jazyk v aplikaci Nastavení .
Tip
Poznamenejte si ikony a umístění položek nabídky, abyste mohli vrátit jazyk k původnímu nastavení.
Shrnutí
Tento článek popisuje základy lokalizace aplikací pro Android pomocí integrovaného zpracování prostředků. Další informace o i18n a L10n pro iOS, Android a multiplatformní aplikace (včetně Xamarin.Forms) najdete v této příručce pro různé platformy.