Android funziona su molti dispositivi in molte regioni. Per raggiungere la maggior parte degli utenti, assicurati che l'app gestisce testo, file audio, numeri, valute e grafici in appropriati per i paesi in cui viene usata l'app.
In questa pagina vengono descritte le best practice per la localizzazione di Android. app.
Devi avere una conoscenza pratica di Kotlin o della programmazione Java lingua e avere familiarità con Caricamento delle risorse Android, dichiarare gli elementi dell'interfaccia utente in XML, considerazioni sullo sviluppo, come ciclo di vita dell'attività, e principi generali di internazionalizzazione e localizzazione.
È buona norma usare il framework delle risorse Android per separare il maggior numero possibile di aspetti localizzati della tua app rispetto alla funzionalità di base dell'app.
- Inserisci la maggior parte o tutti i contenuti dell'interfaccia utente della tua app in di risorse, come descritto in questa pagina e nel Panoramica delle risorse per app.
- Il comportamento dell'interfaccia utente, invece, è determinato dal tuo codice basato su Kotlin o Java. Ad esempio, se gli utenti inseriscono dati che devono formattata o ordinata in modo diverso a seconda delle impostazioni internazionali, utilizza Kotlin o Linguaggio di programmazione Java per gestire i dati in modo programmatico. Questa pagina non vedremo come localizzare il codice basato su Kotlin o Java.
Per una breve guida alla localizzazione delle stringhe nell'app, vedi Supporta diverse lingue e culture.
Panoramica: passaggio da una risorsa all'altra in Android
Le risorse sono stringhe di testo, layout, audio, grafica e qualsiasi altro elemento necessari alla tua app Android. Un'app può includere più di risorse, ognuna personalizzata per una diversa configurazione del dispositivo. Quando l'utente esegue l'app, Android seleziona e carica automaticamente le risorse che si adattano meglio al dispositivo.
Questa pagina è incentrata sulla localizzazione e sulle impostazioni internazionali. Per una descrizione completa del cambio di risorsa e tutti i tipi di configurazioni quali l'orientamento dello schermo o il tipo di touchscreen, consulta Fornisci risorse alternative.
Quando scrivi la tua app, crei risorse predefinite e alternative
per l'utilizzo dell'app. Quando gli utenti eseguono la tua app, il sistema Android
seleziona le risorse da caricare in base alle impostazioni internazionali del dispositivo.
Per creare risorse, devi posizionare i file all'interno
sottodirectory della directory res/
del progetto.
Perché le risorse predefinite sono importanti
Quando l'app viene eseguita in una lingua non specificata
specifico per le impostazioni internazionali, Android carica le stringhe predefinite da
res/values/strings.xml
. Se questo file predefinito non è presente o se è
manca una stringa necessaria alla tua app, significa che l'app non viene eseguita
e restituisce un errore. L'esempio seguente illustra cosa può succedere quando
il file di testo predefinito è incompleto.
Esempio:
Il codice di un'app basato su Kotlin o Java si riferisce a sole due stringhe, text_a
e text_b
. L'app include un file di risorse localizzato
(res/values-en/strings.xml
) che definisce text_a
e
text_b
in inglese. L'app include anche un oggetto
file di risorse (res/values/strings.xml
) che include un
definizione per text_a
, ma non per text_b
.
- Quando l'app viene avviata su un dispositivo con la lingua inglese impostata su Inglese,
potrebbe funzionare senza problemi, perché
res/values-en/strings.xml
contiene entrambi i testi necessari stringhe. - Tuttavia, quando l'app viene avviata su un dispositivo impostato su in una lingua diversa dall'inglese, l'utente vede un messaggio di errore e un messaggio di chiusura . L'app non viene caricata.
Per evitare questa situazione, assicurati che res/values/strings.xml
del file esistente e che definisca ogni stringa necessaria. Questa situazione si applica
tutti i tipi di risorse, non solo le stringhe: è necessario creare un insieme di risorse
file di risorse contenenti tutte le risorse su cui la tua app chiama,
come layout, disegnabili o animazioni. Per informazioni sui test, consulta
Sezione Test per le risorse predefinite.
Utilizzare le risorse per la localizzazione
Questa sezione illustra come creare risorse predefinite e risorse alternative. Spiega inoltre come viene assegnata la precedenza alle risorse e come fai riferimento ai tuoi risorse nel codice.
Crea risorse predefinite
Inserisci il testo predefinito dell'app in res/values/strings.xml
. Per queste stringhe, utilizza
lingua predefinita, ovvero la lingua che prevedi per la maggior parte delle
agli utenti dell'app.
Il set di risorse predefinito include anche eventuali drawable e layout predefiniti e può includere altri tipi di risorse, come le animazioni. Queste risorse vai nelle seguenti directory:
res/drawable/
: directory obbligatoria con almeno un contenuto della directory un file immagine per l'icona dell'app su Google Playres/layout/
: directory obbligatoria che contiene un XML file che definisce il layout predefinitores/anim/
: obbligatorio se ne haires/anim-<qualifiers>
cartelleres/xml/
: obbligatorio se ne haires/xml-<qualifiers>
cartelleres/raw/
: obbligatorio se ne haires/raw-<qualifiers>
cartelle
Suggerimento: nel codice, esamina ogni riferimento a un Risorsa Android. Assicurati che per ciascuno sia definita una risorsa predefinita. Assicurati inoltre che il file di stringa predefinito sia completo: un file localizzato il file stringa può contenere un sottoinsieme di stringhe, ma la stringa default devono contenerli tutti.
Crea risorse alternative
Gran parte della localizzazione di un'app consiste nel fornire testo alternativo per lingue diverse. In alcuni casi fornisci anche elementi grafici alternativi, audio, layout e altre risorse specifiche per le impostazioni internazionali.
Un'app può specificare molti res/<qualifiers>/
ciascuna con qualificatori diversi. Per creare una risorsa alternativa
impostazioni internazionali diverse, utilizzi un qualificatore che specifica una lingua o
lingua-regione. Il nome di una directory di risorse deve essere conforme
allo schema di denominazione descritto in
Fornisci
risorse alternative, altrimenti la tua app non potrà essere compilata.
Esempio:
Supponiamo che la lingua predefinita della tua app sia l'inglese e che
vuoi localizzare tutto il testo dell'app in francese e
il testo, ad eccezione del titolo dell'app,
Giapponese. In questo caso, devi creare tre strings.xml
ciascuno archiviato in una directory delle risorse specifica per le impostazioni internazionali:
res/values/strings.xml
Contiene testo inglese per tutte le stringhe usate dall'app, incluso il testo per una stringa denominatatitle
.res/values-fr/strings.xml
Contenere testo in francese per tutte le stringhe, tra cuititle
.res/values-ja/strings.xml
Contenere testo giapponese per tutte le stringhe trannetitle
,
Se il tuo codice basato su Kotlin o Java si riferisce a R.string.title
, ecco cosa
avviene durante l'esecuzione:
- Se sul dispositivo è impostata una lingua diversa dal francese, Android carica
title
dal fileres/values/strings.xml
. - Se il dispositivo è impostato sulla lingua francese, Android carica
title
dallares/values-fr/strings.xml
file.
Se sul dispositivo è impostata la modalità giapponese, Android cerca
title
nel file res/values-ja/strings.xml
. Ma
poiché questa stringa non è inclusa nel file, Android utilizza
predefinito e carica title
in inglese dal
res/values/strings.xml
file.
Quali risorse hanno la precedenza?
Se più file di risorse corrispondono alla configurazione di un dispositivo, Android segue una di regole per decidere quale file utilizzare. Tra i qualificatori che possono essere specificato in un nome di directory delle risorse, la lingua richiede quasi sempre la precedenza.
Esempio:
Supponiamo che un'app includa un insieme predefinito di elementi grafici e altre due insiemi di grafici, ciascuno ottimizzato per una configurazione dispositivo diversa:
res/drawable/
Contiene elementi grafici predefiniti.res/drawable-small-land-stylus/
Contiene elementi grafici ottimizzati per l'utilizzo con un dispositivo che richiede input da un stilo e dispone di uno schermo QVGA a bassa densità con orientamento orizzontale.res/drawable-ja/
e
Contiene grafica ottimizzata per l'utilizzo con il giapponese.
Se l'app viene eseguita su un dispositivo configurato per l'uso del giapponese,
Android carica elementi grafici da res/drawable-ja/
, anche se il dispositivo
che si aspetta di ricevere input da uno stilo e che ha una bassa densità di QVGA
schermo con orientamento orizzontale.
Eccezione: gli unici qualificatori che prendono in considerazione La precedenza sulle impostazioni internazionali nel processo di selezione sono il codice paese per cellulari (Centro clienti) e la rete mobile. il codice di monitoraggio (MNC).
Esempio:
Supponi di avere la seguente situazione:
- Il codice dell'app chiama
R.string.text_a
.
- Sono disponibili due file di risorse pertinenti:
res/values-mcc404/strings.xml
, che includetext_a
nella lingua predefinita dell'app, in questo caso Inglese.res/values-hi/strings.xml
, che includetext_a
in hindi.
- L'app è in esecuzione su un dispositivo con:
configurazione:
- La scheda SIM sia collegata a una rete mobile in India (Centro clienti 404).
- La lingua è impostata su hindi (
hi
).
Android carica text_a
da
res/values-mcc404/strings.xml
(in inglese), anche se il dispositivo è
configurata per l'hindi. Questo perché, nel processo di selezione delle risorse,
preferisce una corrispondenza Centro clienti a una corrispondenza di lingua.
Il processo di selezione non è sempre così semplice come questi esempi suggerire. Per una descrizione più dettagliata della procedura, consulta l'articolo Come Android trova la risorsa migliore corrispondente. Tutti i qualificatori sono descritti ed elencati in ordine di precedenza nel Panoramica delle risorse per app.
Fai riferimento alle risorse nel codice
Nel codice dell'app basato su Kotlin o Java, fai riferimento alle risorse utilizzando la sintassi
R.resource_type.resource_name
o
android.R.resource_type.resource_name
Per ulteriori informazioni, vedi
Accedi alle risorse delle tue app.
Gestisci le stringhe per la localizzazione
Questa sezione descrive le best practice per la gestione delle stringhe relative alla localizzazione.
Sposta tutte le stringhe in tabs.xml
Durante la creazione delle app, non impostare alcuna stringa come hardcoded. Dichiara invece tutti i tuoi
stringhe come risorse in un file strings.xml
predefinito, il che semplifica l'aggiornamento
e localizzarle. Le stringhe nel file strings.xml
possono essere estratte facilmente,
tradotti e integrati di nuovo nella tua app, con qualificatori appropriati, senza
modifiche al codice compilato.
Se generi immagini con testo, inserisci anche queste stringhe in strings.xml
e
di rigenerare le immagini dopo la traduzione.
Segui le linee guida di Android per le stringhe della UI
Durante la progettazione e lo sviluppo delle interfacce utente, presta attenzione a come di comunicare con l'utente. In generale, usa uno stile conciso sintetico ma breve, e che utilizza uno stile coerente in tutte le UI.
Assicurati di leggere e seguire i consigli di Material Design per scrittura stile e scelta delle parole. In questo modo le tue app appaiono più eleganti e aiutano gli utenti a comprendere le tue dell'interfaccia utente più rapidamente.
Inoltre, se possibile, utilizza sempre la terminologia standard di Android, ad esempio per elementi dell'interfaccia utente come barra delle app, menu opzioni, barra di sistema e notifiche. Termini di utilizzo di Android in modo corretto e coerente semplifica la traduzione e migliora il prodotto finale per gli utenti.
Fornisci un contesto sufficiente per le stringhe dichiarate
Quando dichiari le stringhe nel file strings.xml
, assicurati di descrivere il contesto
in cui viene usata la stringa. Queste informazioni sono preziose per il traduttore e
qualità delle traduzioni di qualità migliore. Ti aiuta anche a gestire le stringhe in modo più efficace.
Ecco un esempio:
<!-- The action for submitting a form. This text is on a button that can fit 30 chars --> <string name="login_submit_button">Sign in</string>
Ti consigliamo di fornire informazioni contestuali come le seguenti:
- A cosa serve questa stringa? Quando e dove viene presentata all'utente?
- Dove si trova nel layout? Ad esempio, le traduzioni sono meno flessibili anziché nelle caselle di testo.
Contrassegna le parti del messaggio che non devono essere tradotte
Spesso, le stringhe contengono testo che non deve essere tradotto in altre lingue. Comuni esempi sono una porzione di codice, un segnaposto per un valore, un simbolo speciale o un nome. Man mano che preparare le stringhe per la traduzione, cercare e contrassegnare il testo che deve rimanere invariato, senza in modo che il traduttore non la modifichi.
Per contrassegnare il testo da non tradurre, utilizza un <xliff:g>
. Ecco un tag di esempio che indica che il testo "%1$s"
non è
di modifiche durante la traduzione, per evitare di danneggiare il messaggio:
<string name="countdown"> <xliff:g id="time" example="5 days">%1$s</xliff:g> until holiday </string>
Quando dichiari un tag segnaposto, aggiungi un attributo ID che spieghi che cosa placeholder. Se l'app sostituisce in un secondo momento il valore segnaposto, assicurati di fornire un example per chiarire l'uso previsto.
Di seguito sono riportati altri esempi di tag segnaposto:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <!-- Example placeholder for a special Unicode symbol --> <string name="star_rating">Check out our 5 <xliff:g id="star">\u2605</xliff:g> </string> <!-- Example placeholder for a URL --> <string name="app_homeurl"> Visit us at <xliff:g id="application_homepage">http://my/app/home.html</xliff:g> </string> <!-- Example placeholder for a name --> <string name="prod_name"> Learn more at <xliff:g id="prod_gamegroup">Game Group</xliff:g> </string> <!-- Example placeholder for a literal --> <string name="promo_message"> Please use the "<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount. </string> ... </resources>
Elenco di controllo per la localizzazione
Per una panoramica completa della procedura di localizzazione e distribuzione di un'app per Android, vedi Tradurre e localizzare le app.
Suggerimenti per la localizzazione
Segui questi suggerimenti per localizzare la tua app.
Progetta la tua app affinché funzioni in qualsiasi lingua
Non dare per scontato nulla sul dispositivo su cui un utente esegue il tuo dell'app. Il dispositivo potrebbe avere hardware che non avevi previsto oppure potrebbe essere impostato su un'impostazione internazionale non pianificata o che non puoi testare. Progetta la tua app in modo che funzioni normalmente o non funzioni correttamente a prescindere dal dispositivo su cui viene eseguito.
Importante: assicurati che la tua app
include un set completo di risorse predefinite:
res/drawable/
e una res/values/
cartella senza
modificatori aggiuntivi nei nomi delle cartelle, che contengono tutte le immagini e il testo
necessarie alla tua app.
Se in un'app manca anche una risorsa predefinita, questa non viene eseguita su
dispositivo impostato su una lingua non supportata. Ad esempio, se
Il file predefinito di res/values/strings.xml
non contiene una stringa
di cui ha bisogno l'app, se viene eseguita in una lingua non supportata
tenta di caricare res/values/strings.xml
, l'utente vede un errore
e un pulsante Forza chiusura.
Per ulteriori informazioni, consulta la sezione Test per Risorse.
Progetta un layout flessibile
Se devi riorganizzare il layout
per adattarlo a una determinata lingua,
puoi creare un layout alternativo per quella lingua, ad esempio
res/layout-de/main.xml
per un layout in lingua tedesca. Tuttavia, questa operazione
può rendere la tua app più difficile da gestire. È meglio creare un'unica
un layout più flessibile.
Un'altra situazione tipica è una lingua che richiede qualcosa di diverso il suo layout. Ad esempio, potresti avere un modulo di contatto che include due campi name quando l'app viene eseguita in giapponese, ma tre campi nome quando l'app viene eseguita in un'altra lingua. Puoi gestire questa situazione in uno dei seguenti modi: in due modi:
- Crea un layout con un campo che puoi attivare o attivare in modo programmatico disattivare, in base alla lingua.
- Fai in modo che il layout principale includa un altro layout che includa la variabile modificabile . Il secondo layout può avere configurazioni diverse a seconda lingue diverse.
Evita di creare più file di risorse e stringhe di testo del necessario
Probabilmente non dovrai creare un'alternativa specifica per ogni lingua
risorse nella tua app. Ad esempio, il layout definito nel
res/layout/main.xml
file potrebbe funzionare in qualsiasi lingua, nel qual caso
non occorre creare file di layout alternativi.
Inoltre, potrebbe non essere necessario creare testo alternativo per ogni stringa. Per Ad esempio, supponiamo che:
- La lingua predefinita della tua app è l'inglese americano. Ogni stringa
utilizzata dall'app è definita con l'ortografia in inglese americano, in
res/values/strings.xml
. - Per alcune frasi importanti, devi fornire l'ortografia inglese britannico. Vuoi utilizzare queste stringhe alternative quando la tua app viene eseguita su un dispositivo nel Regno Unito.
Per farlo, crea un piccolo file chiamato
res/values-en-rGB/strings.xml
che include solo le stringhe che
diverse se l'app viene eseguita nel Regno Unito. Per gli altri
le stringhe, l'app ripristina i valori predefiniti e utilizza quello che
definita in res/values/strings.xml
.
Utilizzare l'oggetto Android Context per la ricerca manuale delle impostazioni internazionali
Puoi cercare le impostazioni internazionali utilizzando l'oggetto Context
resi disponibili da Android, come mostrato nell'esempio che segue:
Kotlin
val primaryLocale: Locale = context.resources.configuration.locales[0] val locale: String = primaryLocale.displayName
Java
Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0); String locale = primaryLocale.getDisplayName();
Utilizzare il servizio di traduzione app
La traduzione delle app Google Cloud sia integrato nel Play Console Ti permette di ricevi un preventivo immediato ed effettua un ordine con di traduzione automatica. Puoi ordinare le traduzioni in una o più lingue per le stringhe dell'interfaccia utente dell'app, il testo della scheda del Play Store, i nomi degli IAP e il testo della campagna pubblicitaria.
Testare le app localizzate
Testa l'app localizzata su un dispositivo o usando l'emulatore Android. In particolare, testare l'app per assicurarti che siano incluse tutte le risorse predefinite necessarie.
Esegui test su un dispositivo
Tieni presente che il dispositivo su cui stai eseguendo il test potrebbe essere notevolmente diverso da i dispositivi disponibili per i consumatori in altri paesi. Le lingue disponibili sul tuo dispositivo possono essere diverse da quelle disponibili su altri dispositivi. Inoltre, risoluzione e densità dello schermo del dispositivo potrebbero variare e questo può incidere la visualizzazione di stringhe e drawable nella UI.
Per modificare le impostazioni internazionali o la lingua su un dispositivo, utilizza l'app Impostazioni.
Test su un emulatore
Per maggiori dettagli sull'utilizzo dell'emulatore, vedi Eseguire app sull'emulatore Android.
Creazione e utilizzo di impostazioni internazionali personalizzate
Un modello "personalizzato" le impostazioni internazionali sono una combinazione di lingua o regione utilizzata l'immagine di sistema non supporta in modo esplicito. Puoi testare il funzionamento della tua app in una lingua personalizzata creandone una personalizzata nell'emulatore. Esistono due metodi modi per farlo:
- Utilizza l'app Impostazioni internazionali personalizzate, accessibile dall' scheda dell'app. Dopo aver creato le impostazioni internazionali personalizzate, passa alle impostazioni internazionali toccando e tenere il nome della lingua.
- Passa a una lingua personalizzata dalla shell
adb
, come descritto nella sezione seguente.
Quando imposti l'emulatore su una lingua non disponibile su Android immagine di sistema, il sistema stesso viene visualizzato nella lingua predefinita. Il tuo ma localizza correttamente.
Cambia le impostazioni internazionali dell'emulatore dalla shell adb
Per modificare le impostazioni internazionali nell'emulatore utilizzando la shell adb
, segui questi passaggi:
- Scegli le impostazioni internazionali che vuoi testare e determina il tag della lingua BCP-47.
ad esempio
fr-CA
per il francese canadese.
- Avvia un emulatore.
- Dalla shell della riga di comando sul computer host, esegui questo comando
comando:
adb shell
oppure, se hai un dispositivo collegato, specifica che desideri l'emulatore aggiungendo l'opzione-e
:
adb -e shell
- Nel prompt della shell
adb
(#
), esegui questo comando:
setprop persist.sys.locale [BCP-47 language tag];stop;sleep 5;start
Sostituisci le sezioni tra parentesi con i codici appropriati del Passaggio 1.
Ad esempio, per eseguire un test in francese canadese:
setprop persist.sys.locale fr-CA;stop;sleep 5;start
Questo causa il riavvio dell'emulatore. Quando appare di nuovo la schermata Home, riavvia l'app. e l'app si avvia con le nuove impostazioni internazionali.
Test delle risorse predefinite
Per verificare se un'app include tutte le risorse di stringa di cui ha bisogno, segui questi passaggi:
- Impostare l'emulatore o il dispositivo su una lingua diversa dalla tua app
assistenza in tempo reale. Ad esempio, se l'app ha stringhe francesi in
res/values-fr/
ma non ha stringhe spagnole inres/values-es/
, quindi imposta le impostazioni internazionali dell'emulatore su Spagnolo. Puoi usare l'app Impostazioni internazionali personalizzate per impostare l'emulatore su un lingua non supportata. - Esegui l'app.
- Se l'app mostra un messaggio di errore e un pulsante Forza chiusura,
una stringa non disponibile. Assicurati che i tuoi
res/values/strings.xml
file include una definizione di ogni stringa utilizzata dall'app.
Se il test ha esito positivo, ripetilo per altri tipi di configurazioni. Per
Ad esempio, se l'app ha un file di layout chiamato
res/layout-land/main.xml
ma non contiene un file denominato
res/layout-port/main.xml
, quindi imposta l'emulatore o il dispositivo su
orientamento verticale e controlla se l'app viene eseguita.