Sök…


Introduktion

Internationalisering (i18n) och Localization (L10n) används för att anpassa programvara beroende på skillnader i språk, regionala skillnader och målgrupp.

Internationalisering: processen för planering för framtida lokalisering, dvs göra mjukvarudesignen flexibel i en utsträckning att den kan anpassas och anpassas till framtida lokaliseringsinsatser.

Lokalisering: processen för att anpassa programvaran till en viss region / land / marknad (språk).

Anmärkningar

För att testa en enhet för lokalisering kan enheten eller emulatorn startas om i ett visst språk med hjälp av adb enligt följande:

  1. Kör adb med kommandot: adb shell
  2. Kör följande kommando vid kommandotolken adb: setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start där [BCP-47 språk tagg] är den språkspecifika koden som beskrivs här: BCP47 koder

t.ex. för att kontrollera japansk lokalisering i appen, använd kommandot: setprop persist.sys.locale ja-JP;stop;sleep 5;start

Planering för lokalisering: aktivera RTL-stöd i Manifest

RTL (höger till vänster) -stöd är en viktig del i planeringen för i18n och L10n. Till skillnad från engelska som skrivs från vänster till höger skrivs många språk som arabiska, japanska, hebreiska etc. från höger till vänster. För att vädja till en mer global publik är det en bra idé att planera dina layouter för att stödja dessa språk från början av projektet, så att lägga till lokalisering blir enklare senare.

RTL-stöd kan aktiveras i en Android-app genom att lägga till supportsRtl taggen i AndroidManifest , så:

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

Planering för lokalisering: Lägg till RTL-support i Layouts

Från och med SDK 17 (Android 4.2) lades RTL-support till i Android-layouter och är en viktig del av lokaliseringen. I framtiden bör left/right notation i layouter ersättas med notering av start/end . Om ditt projekt emellertid har ett minSdk värde mindre än 17 , bör både left/right och start/end notation användas i layouter.

För relativa layouter alignParentStart och alignParentEnd användas, på samma sätt:

<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>

För att specificera tyngdkraften och layoutens tyngdkraft, bör liknande notering användas på samma sätt:

    <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"/>

Paddningar och marginaler bör också anges i enlighet därmed, på samma sätt:

<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"/>

Planering för lokalisering: Testlayout för RTL

Gör följande för att testa om layouterna som har skapats är RTL-kompatibla:

Gå till Inställningar -> Utvecklaralternativ -> Ritning -> Tvinga RTL-layoutriktningen

Att aktivera detta alternativ skulle tvinga enheten att använda RTL-platser och du kan enkelt verifiera alla delar av appen för RTL-support. Observera att du inte behöver lägga till några nya platser / språkstöd fram till detta.

Kodning för lokalisering: Skapa standardsträngar och resurser

Det första steget för kodning för lokalisering är att skapa standardresurser. Detta steg är så implicit att många utvecklare inte ens tänker på det. Att skapa standardresurser är dock viktigt eftersom om enheten körs på ett land som inte stöds skulle den ladda alla sina resurser från standardmapparna. Om till och med en av resurserna saknas i standardmapparna skulle appen helt enkelt krascha.

Standarduppsättningen av strängar bör läggas i följande mapp på den angivna platsen:

res/values/strings.xml 

Den här filen bör innehålla strängarna på det språk som majoriteten av appens användare förväntas tala.

Standardresurserna för appen ska också placeras i följande mappar och platser:

res/drawable/
res/layout/

Om din app kräver mappar som anim eller xml , bör standardresurserna läggas till följande mappar och platser:

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

Kodning för lokalisering: Tillhandahålla alternativa strängar

För att tillhandahålla översättningar på andra språk (platser) måste vi skapa en strings.xml i en separat mapp enligt följande konvention:

res/values-<locale>/strings.xml

Ett exempel på samma ges nedan:

Exempel för orter

I det här exemplet har vi engelska strängar som standard i filen res/values/strings.xml , franska översättningar finns i mappen res/values-fr/strings.xml och japanska översättningar finns i mappen res/values-ja/strings.xml

Andra översättningar för andra platser kan på liknande sätt läggas till appen.

Här hittar du en komplett lista över landskoder: ISO 639-koder

Icke-översättbara strängar:

Ditt projekt kan ha vissa strängar som inte ska översättas. Strängar som används som nycklar för SharedPreferences eller strängar som används som symboler hör till denna kategori. Dessa strängar ska förvaras endast i standard strings.xml och bör märkas med ett translatable="false" attribut. t.ex

<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>

Detta attribut är viktigt eftersom översättningar ofta utförs av professionella som är tvåspråkiga. Detta skulle göra det möjligt för dessa personer som är involverade i översättningar att identifiera strängar som inte ska översättas, vilket sparar tid och pengar.

Kodning för lokalisering: Tillhandahålla alternativa layouter

Att skapa språkspecifika layouter är ofta onödigt om du har angett rätt start/end slutnotation, som beskrivs i det tidigare exemplet. Det kan dock finnas situationer där standardinställningarna kanske inte fungerar korrekt för vissa språk. Ibland kan layouter från vänster till höger kanske inte översätta för RTL-språk. Det är nödvändigt att tillhandahålla rätt layouter i sådana fall.

För att tillhandahålla fullständig optimering för RTL-layouter kan vi använda helt separata layoutfiler med ldrtl ( ldrtl står för layout-riktning-höger-till-vänster}). Vi kan till exempel spara dina standardlayoutfiler i res/layout/ och våra RTL-optimerade layouter i res/layout-ldrtl/ .

ldrtl kvalet är utmärkt för dragbara resurser, så att du kan tillhandahålla grafik som är orienterad i den riktning som motsvarar läsriktningen.

Här är ett bra inlägg som beskriver förekomsten av ldrtl layouterna: Språkspecifika layouter



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow