Zoeken…


Invoering

Internationalisatie (i18n) en Localization (L10n) worden gebruikt om software aan te passen aan verschillen in talen, regionale verschillen en doelgroep.

Internationalisering: het planningsproces voor toekomstige lokalisatie, dwz het flexibel maken van het softwareontwerp zodat het zich kan aanpassen en aanpassen aan toekomstige lokalisatie-inspanningen.

Lokalisatie: het proces van aanpassing van de software aan een bepaalde regio / land / markt (locale).

Opmerkingen

Om een apparaat te testen op lokalisatie, kan het apparaat of de emulator opnieuw worden opgestart op een bepaalde locatie door adb als volgt te gebruiken:

  1. Run adb met het commando: adb shell
  2. Voer de volgende opdracht uit bij de adb-opdrachtprompt: setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start waar [BCP-47- taaltag ] de taalspecifieke code is zoals hier beschreven: BCP47-codes

bijv. om de Japanse lokalisatie in de app te controleren, gebruik de opdracht: setprop persist.sys.locale ja-JP;stop;sleep 5;start

Planning voor lokalisatie: schakel RTL-ondersteuning in Manifest in

RTL-ondersteuning (van rechts naar links) is een essentieel onderdeel van de planning voor i18n en L10n. In tegenstelling tot de Engelse taal die van links naar rechts wordt geschreven, worden veel talen zoals Arabisch, Japans, Hebreeuws, etc. van rechts naar links geschreven. Om een meer wereldwijd publiek aan te spreken, is het een goed idee om uw lay-outs te plannen om deze taal vanaf het allereerste begin van het project te ondersteunen, zodat het later gemakkelijker is om lokalisatie toe te voegen.

RTL ondersteuning kan in een Android-app worden ingeschakeld door het toevoegen van de supportsRtl tag in de AndroidManifest , als volgt:

<application
    ...
    android:supportsRtl="true"
    ...>
...
</application>

Planning voor lokalisatie: voeg RTL-ondersteuning toe in Layouts

Vanaf SDK 17 (Android 4.2) is RTL-ondersteuning toegevoegd in Android-lay-outs en is een essentieel onderdeel van de lokalisatie. Voortaan moet de left/right notatie in lay-outs worden vervangen door start/end eindnotatie. Als uw project echter een minSdk waarde van minder dan 17 , moeten zowel de left/right als de start/end minSdk in lay-outs worden gebruikt.

Voor relatieve lay-outs moeten alignParentStart en alignParentEnd als volgt worden gebruikt:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
</RelativeLayout>

Voor het specificeren van de zwaartekracht en de zwaartekracht van de layout moet een soortgelijke notatie worden gebruikt, zoals hier:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|start"
        android:gravity="left|start"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right|end"
        android:gravity="right|end"/>

Opvullingen en marges moeten ook als volgt worden gespecificeerd:

<include layout="@layout/notification"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="12dp"
    android:layout_marginStart="12dp"
    android:paddingLeft="128dp"
    android:paddingStart="128dp"
    android:layout_toLeftOf="@id/cancel_action"
    android:layout_toStartOf="@id/cancel_action"/>
<include layout="@layout/notification2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginRight="12dp"
    android:layout_marginEnd="12dp"
    android:paddingRight="128dp"
    android:paddingEnd="128dp"
    android:layout_toRightOf="@id/cancel_action"
    android:layout_toEndOf="@id/cancel_action"/>

Planning voor lokalisatie: testlay-outs voor RTL

Om te testen of de gemaakte lay-outs RTL-compatibel zijn, doet u het volgende:

Ga naar Instellingen -> Ontwikkelaarsopties -> Tekening -> Forceer RTL-indelingsrichting

Als u deze optie inschakelt, wordt het apparaat gedwongen RTL-landinstellingen te gebruiken en kunt u eenvoudig alle delen van de app verifiëren voor RTL-ondersteuning. Merk op dat u tot dit punt geen nieuwe ondersteuning voor landinstellingen / taal hoeft toe te voegen.

Codering voor lokalisatie: standaardreeksen en bronnen maken

De eerste stap voor het coderen voor lokalisatie is het maken van standaardbronnen. Deze stap is zo impliciet dat veel ontwikkelaars er niet eens aan denken. Het maken van standaardbronnen is echter belangrijk, omdat als het apparaat op een niet-ondersteunde landinstelling wordt uitgevoerd, alle bronnen uit de standaardmappen worden geladen. Als zelfs een van de bronnen ontbreekt in de standaardmappen, crasht de app gewoon.

De standaardreeks strings moet in de volgende map op de opgegeven locatie worden geplaatst:

res/values/strings.xml 

Dit bestand moet de tekenreeksen bevatten in de taal die van de meeste gebruikers van de app wordt verwacht.

Ook moeten standaardbronnen voor de app in de volgende mappen en locaties worden geplaatst:

res/drawable/
res/layout/

Als uw app mappen zoals anim of xml vereist, moeten de standaardbronnen worden toegevoegd aan de volgende mappen en locaties:

res/anim/
res/xml/
res/raw/

Codering voor lokalisatie: alternatieve tekenreeksen bieden

Om vertalingen in andere talen (landinstellingen) te bieden, moeten we een strings.xml in een afzonderlijke map volgens de volgende conventie:

res/values-<locale>/strings.xml

Een voorbeeld hiervan wordt hieronder gegeven:

Voorbeeld voor landinstellingen

In dit voorbeeld hebben we standaard Engelse tekenreeksen in het bestand res/values/strings.xml , Franse vertalingen zijn beschikbaar in de map res/values-fr/strings.xml en Japanse vertalingen zijn beschikbaar in de map res/values-ja/strings.xml

Andere vertalingen voor andere locaties kunnen op dezelfde manier aan de app worden toegevoegd.

Een complete lijst met landcode is hier te vinden: ISO 639-codes

Niet-vertaalbare tekenreeksen:

Uw project heeft mogelijk bepaalde tekenreeksen die niet moeten worden vertaald. Tekenreeksen die worden gebruikt als sleutels voor SharedPreferences of tekenreeksen die worden gebruikt als symbolen, vallen in deze categorie. Deze strings mogen alleen worden opgeslagen in de standaard strings.xml en moeten worden gemarkeerd met een kenmerk translatable="false" . bv

<string name="pref_widget_display_label_hot">Hot News</string>
<string name="pref_widget_display_key" translatable="false">widget_display</string>
<string name="pref_widget_display_hot" translatable="false">0</string>

Dit kenmerk is belangrijk omdat vertalingen vaak worden uitgevoerd door tweetalige professionals. Hierdoor zouden deze personen die bij vertalingen betrokken zijn, strings kunnen identificeren die niet moeten worden vertaald, wat tijd en geld bespaart.

Codering voor lokalisatie: alternatieve lay-outs bieden

Het maken van taalspecifieke lay-outs is vaak niet nodig als u de juiste start/end eindnotatie hebt opgegeven, zoals beschreven in het eerdere voorbeeld. Er kunnen echter situaties zijn waarin de standaardlay-outs mogelijk niet correct werken voor bepaalde talen. Soms kunnen van links naar rechts lay-outs niet worden vertaald voor RTL-talen. In dergelijke gevallen moet u de juiste lay-outs opgeven.

Om volledige optimalisatie voor RTL-lay-outs te bieden, kunnen we volledig afzonderlijke lay- ldrtl gebruiken met behulp van de kwalificatie ldrtl ( ldrtl staat voor layout-richting-rechts-naar-links}). We kunnen bijvoorbeeld uw standaardlay res/layout-ldrtl/ opslaan in res/layout/ en onze voor RTL geoptimaliseerde lay-outs in res/layout-ldrtl/ .

De kwalificatie ldrtl is geweldig voor tekenbare bronnen, zodat u afbeeldingen kunt maken die zijn georiënteerd in de richting die overeenkomt met de leesrichting.

Hier is een geweldige post die de prioriteit van de ldrtl lay-outs beschrijft: ldrtl lay- outs



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow