Localizzazione

Questa guida presenta i concetti alla base dell'internazionalizzazione e della localizzazione e collegamenti alle istruzioni su come produrre applicazioni per dispositivi mobili Xamarin usando questi concetti.

Per passare direttamente ai dettagli tecnici della localizzazione delle app Xamarin, iniziare con uno di questi articoli sulle procedure specifiche della piattaforma:

i18n e L10n

L'internazionalizzazione è il processo di rendere il codice in grado di visualizzare lingue diverse e adattarne la visualizzazione per impostazioni locali diverse ,ad esempio la formattazione di numeri e date. Questa operazione è detta anche globalizzazione.

La localizzazione è il passaggio seguente: creazione di risorse (ad esempio stringhe e immagini) per ogni lingua e creazione di bundle con l'app internazionalizza.

L'internazionalizzazione viene spesso abbreviata in i18n - abbreviata per 18 lettere tra "i" e "n". La localizzazione è abbreviata in modo simile a L10n: per 10 lettere tra "L" e "n".

Panoramica

Questo documento presenta i concetti associati all'internazionalizzazione e alla localizzazione e il modo in cui si applicano allo sviluppo di applicazioni per dispositivi mobili in generale. Durante la progettazione e la compilazione di un'applicazione, è possibile che in precedenza siano stati specificati hardcoded, ma che devono essere parametrizzati per la localizzazione includono:

  • Layout e testo dello schermo,
  • Icone, grafica e colori,
  • File video e audio,
  • Testo dinamico e formattazione del testo (ad esempio numeri, valuta e date),
  • Modifiche al layout per le lingue da destra a sinistra (RTL) e
  • Ordinamento dei dati.

Indipendentemente dalle piattaforme per dispositivi mobili per cui l'app è destinata a questi suggerimenti, puoi creare un'app localizzata di alta qualità.

Considerazioni sulla progettazione

Progettare un'applicazione in modo che sia possibile localizzarne il contenuto è detta internazionalizzazione. L'internazionalizzazione è più che semplicemente consentire il caricamento di stringhe di linguaggio diverse in fase di esecuzione: un'app ben progettata dovrebbe consentire la modifica di tutte le risorse in base alla lingua e alle impostazioni locali (incluse immagini, suoni e video) e può adattare la formattazione e il layout per gestire stringhe di dimensioni diverse.

In questa sezione vengono illustrate alcune considerazioni di progettazione da tenere in considerazione durante la creazione di un'applicazione internazionalizzata.

Layout e lunghezza stringa

Le stringhe cinesi e giapponesi possono essere molto brevi. A volte uno o due caratteri possono essere abbastanza significativi per un'etichetta di campo di input.

Le stringhe tedesche (ad esempio) possono essere molto lunghe; a volte una parola relativamente breve in inglese diventa molto lunga in altre lingue: diventando ritagliata o altrimenti riflusso inaspettatamente il layout.

Confrontare le lunghezze delle stringhe per alcuni elementi nella schermata iniziale di iOS in inglese, tedesco e giapponese:

German vs Japanese string length

Si noti che Impostazioni in inglese (8 caratteri) richiede 13 caratteri per la traduzione tedesca, ma solo 2 caratteri in giapponese.

I layout in cui l'etichetta di visualizzazione e il campo di input sono side-by-side sono difficili da usare quando la lunghezza dell'etichetta può variare notevolmente. Spesso un layout in cui l'etichetta viene visualizzata sopra un campo è più facile da localizzare perché la larghezza intera dello schermo è disponibile sia per l'etichetta che per l'input.

Come regola generale, se si creano layout fissi (in particolare gli elementi affiancati) consentono almeno il 50% di larghezza superiore rispetto alle stringhe inglesi necessarie per le etichette e il testo. Questo non risolverà ogni problema, ma fornirà un buffer che funzionerà in molti casi.

Convalida dell'input

Attenzione ai presupposti durante la scrittura di regole di convalida. Potrebbe sembrare valido richiedere un input di campo di testo per "richiedere" almeno tre caratteri in inglese, perché una singola lettera raramente ha alcun significato. In cinese e giapponese, tuttavia, un singolo carattere potrebbe essere un input valido e un messaggio di convalida "sono necessari almeno 3 caratteri" non ha senso per tali lingue.

Altre attività apparentemente semplici come la convalida di un indirizzo di posta elettronica o l'URL del sito Web diventano più complicate con i caratteri non sono limitati al subset ASCII.

Scrivere le regole di convalida tenendo presente l'internazionalizzazione, ovvero scegliere le regole meno restrittive o scrivere la logica in modo che funzioni in modo diverso per ogni linguaggio.

Immagini e colori

Non tutte le immagini devono cambiare in base alla scelta della lingua di un utente. Molte icone o foto saranno adatte a tutti gli utenti, non importa quale lingua parlano. Alcune risorse hanno senso localizzare però, ad esempio:

  • Immagini che illustrano persone o posizioni specifiche: l'app potrebbe risultare più rilevante per gli utenti se mostra persone/località locali.
  • Icone: alcune iconografia possono essere specifiche delle impostazioni cultura ed è possibile semplificare l'uso dell'app localizzare le immagini per riflettere la comprensione locale.
  • Colori: alcune impostazioni cultura comprendono i colori in modo diverso: il rosso potrebbe significare un avviso in un'area, ma buona fortuna in un'altra. Rivolgersi agli altoparlanti nativi durante la progettazione dell'app per determinare se è necessario creare un meccanismo per localizzare i colori.

Video e suoni

I video e i suoni presentano sfide speciali durante la localizzazione di un'applicazione, perché sebbene sia relativamente facile ottenere stringhe tradotte, la registrazione di più tracce vocali o clip video può essere sia costosa che difficile.

Anche più copie di file video e audio possono aumentare significativamente le dimensioni dell'applicazione (soprattutto se si localizza in un numero elevato di lingue o si hanno molti file multimediali). Potresti prendere in considerazione il download solo degli asset linguistici necessari dopo che l'utente ha installato l'app, ma questo potrebbe comportare anche un'esperienza utente scarsa nelle reti lente.

Esistono spesso diversi modi per risolvere i problemi di localizzazione: l'aspetto più importante consiste nel considerarli in anticipo e assicurarsi che l'applicazione sia progettata per gestirli.

Date, ore, numeri e valuta

Se si usano funzioni di formattazione .NET, ricordarsi di specificare le impostazioni cultura in modo che i separatori decimali vengano analizzati correttamente ed evitare la generazione di eccezioni di conversione. Ad esempio, sia 1.99 che 1.99 sono rappresentazioni decimali valide a seconda delle impostazioni locali.

Quando i dati provengono da un'origine nota (ad esempio, dal proprio codice o da un servizio Web controllato) è possibile impostare come hardcoded un identificatore delle impostazioni cultura che corrisponde alla formattazione, ad esempio InvariantCulture, che funzionerà per la formattazione della lingua inglese standard.

double.Parse("1,999.99", CultureInfo.InvariantCulture);

Se i dati vengono inseriti dall'utente dell'app, analizzarli usando un'istanza CultureInfo che riflette le impostazioni locali:

double.Parse("1 999,99", CultureInfo.CreateSpecificCulture("fr-FR"));

Per altre informazioni, vedere gli articoli MSDN Analisi di stringhe numeriche e analisi di stringhe di data e ora.

Lingue da destra a sinistra (RTL)

Alcune lingue, come l'arabo, l'ebraico e l'urdu (ad esempio), vengono lette da destra a sinistra. Le applicazioni che supportano queste lingue devono usare progettazioni dello schermo che si adattano per i lettori da destra a sinistra, ad esempio:

  • Il testo deve essere allineato a destra.
  • Le etichette dovrebbero essere visualizzate a destra dei campi di input.
  • Il posizionamento predefinito dei pulsanti è in genere invertito.
  • Anche lo scorrimento rapido gerarchico e l'animazione (e altre metafore e animazioni di navigazione) che usano la direzione per il contesto devono essere invertiti.

Sia iOS che Android supportano layout da destra a sinistra e rendering dei tipi di carattere, con funzionalità predefinite che consentono di apportare le modifiche precedenti. Xamarin.Forms attualmente non supporta automaticamente il rendering RTL.

Ordinamento

Lingue diverse definiscono l'ordinamento degli alfabeti in modo diverso, anche quando usano lo stesso set di caratteri.

Vedere il dettaglio del confronto tra stringhe nelle procedure consigliate per l'uso di stringhe in .NET Framework per un esempio in cui il linguaggio (CultureInfo) influisce sull'ordinamento.

È improbabile che le funzionalità predefinite del database nelle piattaforme per dispositivi mobili supportino l'ordinamento specifico del linguaggio, quindi potrebbe essere necessario implementare codice aggiuntivo nella logica di business.

Assicurarsi di scrivere e testare l'algoritmo di ricerca tenendo presenti più lingue. Gli aspetti da considerare includono:

  • Completamento automatico: se è stata compilata una funzione di completamento automatico, assicurarsi che vengano forniti suggerimenti relativi alla lingua dell'utente.
  • Corrispondenza tra query e dati: le query immesse in una lingua specifica verranno eseguite solo su contenuto scritto in tale lingua o su tutti i contenuti dell'app?
  • Stemming: se la ricerca è compilata per cercare parole simili, radici delle parole e altre ottimizzazioni di ricerca, queste ottimizzazioni sono create per tutte le lingue supportate?
  • Ordinamento: assicurarsi che i risultati siano ordinati correttamente (vedere sopra).

Dati da origini dati esterne

Molte applicazioni scaricano dati da origini esterne, da feed Twitter e RSS a meteo, notizie o prezzi azionari. Quando questo viene visualizzato a un utente, è necessario considerare la possibilità di visualizzare una schermata di informazioni irrilevanti o illeggibili.

Esistono alcune strategie che è possibile usare per provare a verificare che l'app visualizzi i dati rilevanti per l'utente:

  • Origini diverse: l'applicazione potrebbe scaricare i dati da un'origine diversa a seconda della lingua o delle impostazioni locali dell'utente. Le notizie locali, il meteo e i prezzi delle azioni potrebbero avere più senso di qualcosa scaricato da un feed America del Nord n.
  • Visualizzazione localizzata: se si visualizza un feed di Twitter o foto, è necessario visualizzare i metadati (ad esempio il tempo impiegato) nella propria lingua, anche se il contenuto stesso rimane nella lingua originale.
  • Traduzione: è possibile creare un'opzione di traduzione nell'app per eseguire una traduzione automatica dei dati in ingresso. Questo potrebbe essere automatico o a discrezione dell'utente: è sufficiente assicurarsi di informare l'utente se si sta verificando, poiché le traduzioni automatiche non sono mai perfette!

Ciò potrebbe anche influire sui collegamenti esterni a tracce audio o video: quando si progetta l'applicazione, assicurarsi di pianificare in anticipo l'origine di contenuti tradotti o assicurarsi che gli utenti siano adeguatamente informati dall'interfaccia utente quando il contenuto non verrà presentato nella propria lingua.

Non traslare eccessivamente

Alcune stringhe nella tua app potrebbero non dover tradurre o almeno richiedono particolare attenzione da parte del traduttore. Ecco alcuni esempi:

  • URL: se si elenca un URL, potrebbe essere necessario modificarlo in base alla lingua. Ad esempio, facebook.com non richiede la traduzione, rileva automaticamente la lingua nel sito principale. Altri siti hanno contenuto specifico delle impostazioni locali e può essere necessario offrire un URL diverso, ad esempio yahoo.com rispetto a yahoo.fr o yahoo.it.
  • Numeri di telefono: in particolare quelli con codici paese o numeri diversi per i chiamanti che parlano una determinata lingua.
  • Dettagli contatto: gli indirizzi e altre informazioni possono variare in base alla lingua o alle impostazioni locali.
  • Marchi e nomi di prodotto: alcune stringhe non richiedono la traduzione perché sono sempre scritte nella stessa lingua.

Infine, assicurarsi di includere istruzioni dettagliate per il traduttore se determinate stringhe richiedono un trattamento speciale.

Testo formattato

In genere non si è verificato un problema con le app per dispositivi mobili perché le stringhe in genere non sono formattate in modo avanzato. Tuttavia, se nella tua app è necessario un testo rtf (ad esempio la formattazione grassetto o corsivo) assicurati che il traduttore sappia come inserire la formattazione, i file di stringhe lo archiviano correttamente ed è formattato correttamente prima di essere visualizzato all'utente (ad esempio, non lasciare che i codici di formattazione stessi vengano presentati all'utente).

Suggerimenti di traduzione

La traduzione delle stringhe usate da un'applicazione viene considerata parte del processo di localizzazione. In genere questa attività verrà esternalizzata a un servizio di traduzione e eseguita da personale multilingue che potrebbe non conoscere l'applicazione o l'azienda.

I suggerimenti seguenti consentono di produrre stringhe che sono più facili da tradurre in modo accurato e quindi migliorare la qualità delle app localizzate.

Localizzare stringhe complete, non parole

In alcuni casi gli sviluppatori usano l'approccio di provare a specificare singole parole o frasi "frammenti" in modo che possano riutilizzarli in tutta l'applicazione. Ad esempio, per il testo "Hai 5 messaggi". Possono specificare le stringhe seguenti per la traduzione

Non valido:

"You have"
"no"
"message"
"messages"

e quindi tentare di creare la frase corretta nel codice usando la concatenazione di stringhe:

Non valido:

"You have" + " " + numMsgs + " " + "messages"
"You have" + " no " + "messages"

Questo è sconsigliato perché non funzionerà necessariamente per tutte le lingue e sarà difficile per il traduttore comprendere il contesto di ogni segmento breve. Comporta anche il riutilizzo delle stringhe tradotte, che possono causare problemi in un secondo momento se vengono usati in contesti diversi (e quindi vengono aggiornati).

Consenti riordinamento dei parametri

Alcuni linguaggi di programmazione richiedono una sintassi aggiuntiva per specificare l'ordine dei parametri in una stringa, tuttavia .NET supporta già il concetto di segnaposto numerato, quindi

Buono:

"a {0} b {1} cde {3}"

può essere tradotto il seguente (dove la posizione e l'ordine dei segnaposto vengono modificati)

"{2} {3} f g h {0}"

e i token verranno ordinati come previsto dal traduttore. Assicurarsi di includere una spiegazione del contenuto di ogni segnaposto durante l'invio della stringa a un traduttore.

Usare più stringhe per la cardinalità

Evitare stringhe come "You have {0} message/s." Usare stringhe specifiche per ogni stato per offrire un'esperienza utente migliore:

Buono:

"You have no messages."
"You have 1 message."
"You have 2 messages."
"You have {0} messages."

Dovrai scrivere codice nella tua app per valutare il numero visualizzato e scegliere la stringa appropriata. Alcune piattaforme (inclusi iOS e Android) hanno funzionalità predefinite per scegliere automaticamente la stringa plurale migliore in base alle preferenze per la lingua/impostazioni locali correnti.

Consentire il sesso

Le lingue in alfabeto latino talvolta usano parole diverse a seconda del sesso dell'oggetto. Se la tua app conosce il sesso, dovresti consentire alle stringhe tradotte di riflettere questa situazione.

Esiste anche il caso più ovvio anche in inglese, in cui le stringhe fanno riferimento a una persona o a un utente specifico dell'app. Ad esempio, alcuni siti mostrano messaggi come "Bob commented on his post" in modo da avere bisogno di stringhe per un sesso maschile, femminile e non binario o sconosciuto:

Buono:

"{0} commented on his post"
"{0} commented on her post"
"{0} commented on their post"

Non riutilizzare le stringhe

O più accuratamente, non riutilizzare le stringhe solo perché sono simili quando la stringa stessa ha uno scopo o un significato diverso.

Si supponga, ad esempio, di avere un interruttore attivato/disattivato nell'app e che il controllo switch richieda che il testo "on" e "off" sia localizzato. Puoi anche visualizzare il valore di tale impostazione altrove nell'app in un'etichetta di testo. È consigliabile usare stringhe diverse per la visualizzazione del commutatore rispetto allo stato dell'opzione (anche se sono la stessa stringa nella lingua predefinita), ad esempio:

  • "Attivato" – visualizzato sul commutatore stesso
  • "Disattivato" – visualizzato sul commutatore stesso
  • "Attivato" – visualizzato in un'etichetta
  • "Disattivato" – visualizzato in un'etichetta

Ciò offre la massima flessibilità per il traduttore:

  • Per motivi di progettazione, ad esempio l'opzione stessa usa "on" e "off" minuscole, ma l'etichetta di visualizzazione usa le lettere maiuscole "On" e "Off".
  • Alcune lingue potrebbero richiedere che il valore dell'opzione sia abbreviato per adattarsi al controllo dell'interfaccia utente, mentre la parola completa (tradotta) può essere visualizzata nell'etichetta.
  • In alternativa, per alcune lingue il rendering del commutatore potrebbe essere usato "I" e "O" per la familiarità culturale, ma è comunque consigliabile che l'etichetta sia "On" o "Off".

Servizi di traduzione

Traduzione automatica

Per creare funzionalità di traduzione nell'app, prendere in considerazione l'API Testo Traduttore di Azure.

A scopo di test è possibile usare uno dei numerosi strumenti di traduzione online per includere testo localizzato nell'app durante lo sviluppo:

Sono disponibili molti altri. La qualità della traduzione automatica in genere non è considerata abbastanza valida per rilasciare un'applicazione senza prima essere esaminata e testata da traduttori professionisti o parlanti nativi.

Traduzione professionale

Ci sono anche servizi di traduzione professionale che prenderanno le vostre stringhe e li distribuiranno ai propri traduttori, fornendovi traduzioni completate per una tariffa.

Uno dei servizi più noti è LionBridge. La maggior parte dei servizi professionali supporta tutti i tipi di file comuni, tra cui stringhe, XML, RESX e POT/PO.

Riepilogo

Questo articolo ha introdotto alcuni dei concetti da conoscere prima di internazionalizzare l'app e quindi localizzare le risorse e come modificare le preferenze linguistiche per ogni piattaforma.

Questi concetti possono essere applicati alle varie tecniche di internazionalizzazione specifiche della piattaforma e multipiattaforma possibili con Xamarin.

Continuare a leggere i dettagli tecnici per la piattaforma a cui si è interessati: