Localizzare l'app

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 Play
  • res/layout/: directory obbligatoria che contiene un XML file che definisce il layout predefinito
  • res/anim/: obbligatorio se ne hai res/anim-<qualifiers> cartelle
  • res/xml/: obbligatorio se ne hai res/xml-<qualifiers> cartelle
  • res/raw/: obbligatorio se ne hai res/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:

  1. res/values/strings.xml
    Contiene testo inglese per tutte le stringhe usate dall'app, incluso il testo per una stringa denominata title.
  2. res/values-fr/strings.xml
    Contenere testo in francese per tutte le stringhe, tra cui title.
  3. res/values-ja/strings.xml
    Contenere testo giapponese per tutte le stringhe tranne title,

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 file res/values/strings.xml.
  • Se il dispositivo è impostato sulla lingua francese, Android carica title dalla res/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 include text_a nella lingua predefinita dell'app, in questo caso Inglese.
    • res/values-hi/strings.xml, che include text_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:

  1. Scegli le impostazioni internazionali che vuoi testare e determina il tag della lingua BCP-47. ad esempio fr-CA per il francese canadese.
  2. Avvia un emulatore.
  3. 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
  4. 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:

  1. 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 in res/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.
  2. Esegui l'app.
  3. 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.