Ricerca…


introduzione

Internazionalizzazione (i18n) e localizzazione (L10n) vengono utilizzati per adattare il software in base alle differenze nelle lingue, nelle differenze regionali e nel pubblico di destinazione.

Internazionalizzazione: il processo di pianificazione per la localizzazione futura, ovvero rendere flessibile la progettazione del software in modo tale da adattarlo e adattarsi agli sforzi futuri di localizzazione.

Localizzazione: il processo di adattamento del software a una particolare regione / paese / mercato (locale).

Osservazioni

Per testare un dispositivo per la localizzazione, è possibile riavviare il dispositivo o l'emulatore in un particolare locale usando adb come segue:

  1. Esegui adb usando il comando: adb shell
  2. Eseguire il comando seguente al prompt dei comandi di adb: setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start dove [tag lingua BCP-47] è il codice specifico della lingua come descritto qui: codici BCP47

ad esempio per verificare la localizzazione giapponese nell'app, utilizzare il comando: setprop persist.sys.locale ja-JP;stop;sleep 5;start

Pianificazione per la localizzazione: abilitare il supporto RTL in Manifest

Il supporto RTL (da destra a sinistra) è una parte essenziale nella pianificazione di i18n e L10n. A differenza della lingua inglese scritta da sinistra a destra, molte lingue come arabo, giapponese, ebraico, ecc. Sono scritte da destra a sinistra. Per attirare un pubblico più globale, è una buona idea pianificare i layout in modo da supportare questi linguaggi fin dall'inizio del progetto, in modo che l'aggiunta della localizzazione sia più semplice in seguito.

Il supporto RTL può essere abilitato in un'app Android aggiungendo il tag supportsRtl AndroidManifest , in questo modo:

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

Pianificazione per la localizzazione: aggiungi il supporto RTL in Layouts

L'avvio dell'SDK 17 (Android 4.2), il supporto RTL è stato aggiunto nei layout Android ed è una parte essenziale della localizzazione. Andando avanti, la notazione left/right nei layout dovrebbe essere sostituita dalla notazione start/end . Se, tuttavia, il progetto ha un valore minSdk inferiore a 17 , è necessario utilizzare sia la left/right che la notazione start/end nei layout.

Per i layout relativi, devono essere utilizzati alignParentStart e alignParentEnd , in questo modo:

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

Per specificare la gravità e la gravità del layout, dovrebbe essere usata una notazione simile, in questo modo:

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

Paddings e margini dovrebbero anche essere specificati di conseguenza, in questo modo:

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

Pianificazione per la localizzazione: test di layout per RTL

Per verificare se i layout che sono stati creati sono compatibili RTL, effettuare le seguenti operazioni:

Vai a Impostazioni -> Opzioni sviluppatore -> Disegno -> Forza la direzione del layout RTL

L'attivazione di questa opzione costringerebbe il dispositivo a utilizzare le impostazioni locali RTL e sarà possibile verificare facilmente tutte le parti dell'app per il supporto RTL. Si noti che non è necessario aggiungere effettivamente alcun nuovo locale / supporto linguistico fino a questo punto.

Coding per localizzazione: creazione di stringhe e risorse predefinite

Il primo passo per la codifica per la localizzazione è creare risorse predefinite. Questo passaggio è così implicito che molti sviluppatori non ci pensano nemmeno. Tuttavia, la creazione di risorse predefinite è importante perché se il dispositivo viene eseguito su una locale non supportata, carica tutte le sue risorse dalle cartelle predefinite. Se manca anche una delle risorse dalle cartelle predefinite, l'app si arresterebbe semplicemente.

L'insieme predefinito di stringhe deve essere inserito nella seguente cartella nel percorso specificato:

res/values/strings.xml 

Questo file dovrebbe contenere le stringhe nella lingua che gli utenti maggioritari dell'app dovrebbero parlare.

Inoltre, le risorse predefinite per l'app devono essere posizionate nelle seguenti cartelle e posizioni:

res/drawable/
res/layout/

Se la tua app richiede cartelle come anim o xml , le risorse predefinite devono essere aggiunte alle seguenti cartelle e posizioni:

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

Codifica per localizzazione: fornitura di stringhe alternative

Per fornire traduzioni in altre lingue (locales), abbiamo bisogno di creare un file strings.xml in una cartella separata dalla seguente convenzione:

res/values-<locale>/strings.xml

Di seguito è riportato un esempio per lo stesso:

Esempio per locales

In questo esempio, abbiamo le stringhe inglesi predefinite nel file res/values/strings.xml , le traduzioni francesi sono fornite nella cartella res/values-fr/strings.xml e le traduzioni giapponesi sono fornite nella cartella res/values-ja/strings.xml

Altre traduzioni per altre impostazioni locali possono essere aggiunte all'app.

Un elenco completo dei codici locali può essere trovato qui: codici ISO 639

Stringhe non traducibili:

Il tuo progetto potrebbe avere certe stringhe che non devono essere tradotte. Le stringhe utilizzate come chiavi per SharedPreferences o stringhe utilizzate come simboli rientrano in questa categoria. Queste stringhe devono essere memorizzate solo nel file strings.xml predefinito e devono essere contrassegnate con un attributo translatable="false" . per esempio

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

Questo attributo è importante perché le traduzioni vengono spesso eseguite da professionisti bilingui. Ciò consentirebbe a queste persone coinvolte nelle traduzioni di identificare stringhe che non devono essere tradotte, risparmiando così tempo e denaro.

Codifica per localizzazione: fornitura di layout alternativi

La creazione di layout specifici per la lingua spesso non è necessaria se è stata specificata la notazione di start/end corretta, come descritto nell'esempio precedente. Tuttavia, potrebbero esserci situazioni in cui i layout di default potrebbero non funzionare correttamente per alcune lingue. A volte, i layout da sinistra a destra potrebbero non essere tradotti per le lingue RTL. È necessario fornire i layout corretti in questi casi.

Per fornire completa ottimizzazione per i layout RTL, siamo in grado di utilizzare i file di layout completamente separati utilizzando il ldrtl qualificatore risorsa ( ldrtl acronimo di layout direzione da destra a sinistra}). Ad esempio, possiamo salvare i file di layout di default in res/layout/ e i nostri layout ottimizzati RTL in res/layout-ldrtl/ .

Il qualificatore ldrtl è ottimo per risorse estraibili, in modo da poter fornire grafici orientati nella direzione corrispondente alla direzione di lettura.

Ecco un ottimo post che descrive la precedenza dei layout di ldrtl : layout specifici per la lingua



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow