Rendere l'app localizzabile

Un'app localizzata è un'app che può essere localizzata in altri mercati, lingue o regioni senza che si evidenzi alcun difetto funzionale nell'app. La proprietà più essenziale di un'app localizzabile è che il codice eseguibile è stato separato in modo pulito dalle risorse localizzabili dell'app. È quindi necessario determinare quali risorse dell'app devono essere localizzate. Se l'app deve essere localizzata per altri mercati, bisogna chiedersi cosa cambiare.

È anche consigliabile acquisire familiarità con le linee guida per la globalizzazione.

Inserire le stringhe in File di risorse (.resw)

Non impostare valori letterali stringa hardcoded nel codice imperativo, nel markup XAML o nel manifesto del pacchetto dell'app. Inserire invece le stringhe in File di risorse (.resw) in modo che possano essere adattate a mercati locali diversi indipendentemente dai file binari compilati dell'app. Per altri dettagli, consultare Localizzare le stringhe nell'interfaccia utente e nel manifesto del pacchetto dell'app.

Questo argomento illustra anche come aggiungere commenti al file di risorse predefinito (.resw). Ad esempio, se si vuole adottare una voce o un tono informale, assicurarsi di spiegarlo nei commenti. Inoltre, per ridurre al minimo le spese, verificare che vengano fornite ai traduttori solo le stringhe da tradurre.

Impostare la lingua predefinita per l'app in modo appropriato nel file di origine del manifesto del pacchetto dell'app (file Package.appxmanifest). La lingua predefinita determina la lingua usata quando le lingue preferite dell'utente non corrispondono ad alcuna delle lingue supportate dell'app. Contrassegnare tutte le risorse con la lingua (anche quelle nella lingua predefinita, ad esempio \Assets\en-us\Logo.png) in modo che il sistema possa indicare la lingua in cui si trova la risorsa e come viene usata in situazioni particolari.

Personalizzare le immagini e altre risorse di file per la lingua

Preferibilmente, bisogna globalizzare le immagini, ovvero renderle indipendenti dalla cultura. Per le immagini e altre risorse di file per cui non è possibile, creare il maggior numero di varianti diverse necessarie e inserire i qualificatori di lingua appropriati nei nomi di file o cartelle. Per maggiori informazioni, consultare Adattare le risorse di lingua, scalabilità, contrasto elevato e altri qualificatori.

Per ridurre al minimo i costi di localizzazione, non inserire testo né materiale sensibile alla cultura nelle immagini per iniziare. Un'immagine appropriata nella propria cultura potrebbe essere offensiva o erroneamente interpretata in altre culture. Evitare l'uso di immagini specifiche per una cultura, ad esempio le cassette postali, che non sono comuni in tutto il mondo. Evitare simboli religiosi, animali, politici o immagini specifiche di genere. La visualizzazione di carne, parti del corpo o movimenti delle mani può essere un argomento sensibile. Se non è possibile evitare tutti questi elementi, le immagini dovranno essere localizzate in modo ponderato. Se stai localizzando in una lingua con una direzione di lettura diversa dalla propria, l'utilizzo di immagini ed effetti simmetrici semplifica il supporto del mirroring.

Inoltre evitare l'uso di testo nelle immagini e della voce nei file audio/video.

Uso del colore nell'app

Considerare ciò quando si usa il colore. L'uso di combinazioni di colori associate a bandiere nazionali o movimenti politici può essere problematico. Le scelte relative al colore possono essere esaminate dagli esperti della cultura. inoltre l'uso del colore pone problemi di accessibilità. Se si utilizza il colore per trasmettere significato, è necessario trasmettere le stesse informazioni anche con altri mezzi, ad esempio dimensioni, forma o etichetta.

Prendere in considerazione il factoring delle stringhe in frasi

Usare stringhe di dimensioni appropriate. Le stringhe brevi sono più facili da tradurre e consentono il riutilizzo della traduzione (consente di risparmiare le spese perché la stessa stringa non viene inviata più di una volta al localizzatore). Inoltre, stringhe estremamente lunghe potrebbero non essere supportate dagli strumenti di localizzazione.

Ma in contrasto con questa linea guida c’è il rischio di riutilizzare una stringa in contesti diversi. Anche parole semplici come "on" e "off" possono essere tradotte in modo diverso, a seconda del contesto. Nella lingua inglese è possibile usare "on" e "off" per un interruttore per la Modalità aereo, Bluetooth e dispositivi. Ma in italiano, la traduzione dipende dal contesto di ciò che viene attivato e disattivato. È necessario creare una coppia di stringhe per ogni contesto. È possibile riutilizzare le stringhe se i due contesti sono uguali. Ad esempio, è possibile riutilizzare la stringa "Volume" sia per il volume dell'effetto audio che per il volume musicale, perché entrambi fanno riferimento all'intensità del suono. Non è consigliabile riutilizzare la stessa stringa quando si fa riferimento a un volume del disco rigido perché il contesto e il significato sono diversi e la parola potrebbe essere tradotta in modo diverso.

Inoltre, una stringa come "text" o "fax", i lingua inglese, può essere usata sia come verbo che come sostantivo, quindi può confondere durante il processo di traduzione. Creare invece una stringa separata per il formato verbo e sostantivo. Quando non si è certi che i contesti siano uguali, è consigliabile usare una stringa distinta.

In breve, inserire le stringhe in parti che funzionano in tutti i contesti. Esisteranno casi in cui una stringa dovrà essere un'intera frase.

Si consideri la stringa seguente: "Impossibile sincronizzare {0}."

Un'ampia gamma di parole può sostituire {0}, ad esempio "appuntamento", "attività" o "documento". Anche se questo esempio funziona per la lingua inglese, non funzionerà in tutti i casi per la frase corrispondente, ad esempio in tedesco. Si noti che nelle frasi tedesche seguenti, alcune delle parole nella stringa modello ("Der", "Die", "Das") devono corrispondere alla parola parametrizzata:

Inglese Tedesco
Impossibile sincronizzare l'appuntamento. Der Termin konnte nicht synchronisiert werden.
Impossibile sincronizzare l'attività. Die Aufgabe konnte nicht synchronisiert werden.
Impossibile sincronizzare il documento. Das Dokument konnte nicht synchronisiert werden.

Un altro esempio può essere la frase "Ricordamelo tra {0} minuto/i"." L'uso della parola "minuto/i" funziona per la lingua inglese, ma altre lingue potrebbero utilizzare termini diversi. Ad esempio, la lingua polacca usa "minuta", "minuty" o "minut" a seconda del contesto.

Per risolvere questo problema, localizzare l'intera frase, anziché una singola parola. Questa operazione può sembrare un lavoro aggiuntivo e una soluzione inelegante, ma è la soluzione migliore perché:

  • Verrà visualizzato un messaggio grammaticalmente corretto per tutte le lingue.
  • Il traduttore non avrà bisogno di chiedere con cosa verranno sostituite le stringhe.
  • Quando un problema simile a questo si verifica dopo il completamento dell'app, non sarà necessario implementare una correzione del codice costosa.

Altre considerazioni riguardanti le stringhe

Evitare colloquialismi e metafore nelle stringhe create nella lingua predefinita. La lingua specifica di un gruppo demografico, ad esempio relativo a cultura ed età, può essere difficile da comprendere o tradurre perché solo le persone del gruppo demografico usano tale lingua. Analogamente, le metafore potrebbero avere senso per una persona, ma non significano nulla per un latro gruppo di persone. Ad esempio, un "bluebird" ha un significato specifico per coloro che praticano lo sci, ma coloro che non sono parte di questa cultura, non comprendono il riferimento.

Non usare gergo tecnico, abbreviazioni o acronimi. Il linguaggio tecnico è meno probabile che venga compreso da destinatari non tecnici o persone di altre culture o aree geografiche ed è difficile da tradurre. Nelle conversazioni quotidiane, le persone non usano queste parole. Il linguaggio tecnico viene spesso visualizzato nei messaggi di errore per identificare i problemi hardware e software, ma è consigliabile che le stringhe siano tecniche solo se l'utente necessita di tale livello di informazioni e può intervenire o trovare qualcuno in grado di comprenderle.

Una buona scelta è l'uso di voce o tono informale. È possibile usare i commenti nel file di risorse predefinito (.resw) per indicare tale intenzione.

Pseudo-localizzazione

Pseudo-localizzare l'app per individuare eventuali problemi di localizzazione. La pseudo localizzazione è un tipo di test di localizzazione di prova o di divulgazione. Si produce un set di risorse che non sono realmente tradotte; lo sembrano soltanto. Ad esempio, le stringhe sono circa il 40% più lunghe rispetto alla lingua predefinita e presentano delimitatori in modo da poter vedere a colpo d'occhio se vengono troncati nell'interfaccia utente.

Considerazioni sulla distribuzione

Quando si installa un'app che contiene dati linguistici localizzati, si potrebbe scoprire che solo la lingua predefinita è disponibile per l'app anche se inizialmente sono state inclusa risorse per più lingue. Questo perché il processo di installazione è ottimizzato per installare solo le risorse della lingua che corrispondono alla lingua e alla cultura specifiche del dispositivo. Pertanto, se il dispositivo è configurato per en-US, solo le risorse della lingua en-US vengono installate con l'app.

Nota

Non è possibile installare supporto linguistico aggiuntivo per l'app dopo l'installazione iniziale. Se si modifica la lingua predefinita dopo l'installazione di un'app, questa continua a usare solo le risorse della lingua originale.

Per essere certi che tutte le risorse linguistiche siano disponibili dopo l'installazione, creare un file di configurazione per il pacchetto dell'app che specifichi che determinate risorse sono richieste durante l'installazione (incluse le risorse linguistiche). Questa funzionalità di installazione ottimizzata viene abilitata automaticamente quando il file .appxbundle dell'applicazione viene generato durante la creazione del pacchetto. Per altre informazioni, consultare Verificare che le risorse siano installate in un dispositivo indipendentemente dal fatto che un dispositivo le richieda.

Facoltativamente, per assicurarsi che tutte le risorse siano installate (non solo un subset), è possibile disabilitare la generazione di .appxbundle quando si crea il pacchetto dell'app. Questa opzione non è tuttavia consigliata perché può aumentare il tempo di installazione dell'app.

Disabilitare la generazione automatica di .appxbundle impostando l'attributo "Genera bundle dell'app" su "never":

  1. In Visual Studio fare clic con il pulsante destro del mouse sul nome progetto
  2. Selezionare Store ->Crea pacchetti di app...
  3. Nella finestra di dialogo Crea pacchetti, selezionare Voglio creare pacchetti da caricare in Microsoft Store usando un nuovo nome app e poi fare clic su Avanti.
  4. Nella finestra di dialogo Selezionare un nome app selezionare/creare un nome dell'app per il pacchetto.
  5. Nella finestra di dialogo Seleziona e configura pacchetti, impostare Genera bundle dell'app su Never.

Attenzione alla geopolitica

Evitare l'offesa politica nelle mappe o quando si fa riferimento alle regioni. Le Mappe potrebbero includere confini regionali o nazionali controversi e sono di frequente una fonte di offesa politica. Prestare attenzione che qualsiasi interfaccia utente usata per selezionare una nazione si riferisca a essa come "paese/area geografica". Pubblicare un territorio conteso in un elenco con l'etichetta "paesi", ad esempio in un modulo di indirizzo, potrebbe offendere alcuni utenti.

Eventi che cambiano lingua e regione

Sottoscrivere eventi che vengono generati quando cambiano le impostazioni della lingua e della regione del sistema. Eseguire questa operazione in modo da poter ricaricare le risorse, se appropriato. Per informazioni dettagliate, consultare Aggiornamento delle stringhe in risposta agli eventi di modifica del valore del qualificatore e Aggiornamento delle immagini in risposta agli eventi di modifica del valore del qualificatore.

Assicurarsi che l'ordine dei parametri sia corretto durante la formattazione delle stringhe

Non presupporre che tutti i linguaggi esprimano i parametri nello stesso ordine. Si consideri ad esempio questo formato.

    string.Format("Every {0} {1}", monthName, dayNumber); // For example, "Every April 1".

La stringa di formato in questo esempio funziona per l'inglese (Stati Uniti). Ma non è appropriato per il tedesco (Germania), ad esempio, dove il giorno e il mese vengono visualizzati nell'ordine inverso. Assicurarsi che il traduttore conosca lo scopo di ciascuno dei parametri in modo che possa invertire l'ordine degli elementi di formato nella stringa di formato (ad esempio, "{1}{0}") in modo appropriato per la lingua di destinazione.

Non sovra-localizzare

Inviare ai traduttori solo il linguaggio naturale, non linguaggio di programmazione né markup. Un tag <link> non è un linguaggio naturale. Considerare i seguenti esempi.

Non localizzare questo Localizzare questo
<collegamento>Condizioni per l'utilizzo</collegamento> Condizioni per l'utilizzo
<collegamento>informativa sulla privacy</collegamento> Informativa sulla privacy

L'inclusione del tag <link> nel file di risorse (.resw) significa che probabilmente verrà tradotto. Ciò renderebbe il tag non valido. Se sono presenti stringhe lunghe che devono includere markup per mantenere il contesto e garantire l'ordinamento, rendere chiaro nei commenti cosa non tradurre.

Scegliere un approccio di traduzione appropriato

Dopo che le stringhe vengono separate in file di risorse, possono essere tradotte. Il momento ideale per tradurre le stringhe è dopo la finalizzazione delle stringhe nel progetto, che in genere si verifica verso la fine di un progetto. È possibile affrontare il processo di traduzione in diversi modi. Ciò può dipendere dal volume di stringhe da tradurre, dal numero di lingue da tradurre e da come verrà eseguita la traduzione (ad esempio internamente o assumendo un fornitore esterno).

Prendere in considerazione queste opzioni.

  • I file di risorse possono essere tradotti aprendoli direttamente nel progetto. Questo approccio funziona bene per un progetto con un piccolo volume di stringhe che devono essere tradotte in due o tre lingue. Può essere adatto per uno scenario in cui uno sviluppatore parla più di una lingua ed è disposto a gestire il processo di traduzione. Questo approccio trae vantaggio dalla rapidità, non richiede strumenti e riduce al minimo il rischio di traduzione errata. Ma non è scalabile. In particolare, le risorse in diverse lingue possono facilmente non essere sincronizzate, causando esperienze utente negative e problemi di manutenzione.
  • I file di risorse stringa sono in formato di testo XML o ResJSON, quindi potrebbero essere trasferiti per la traduzione utilizzando qualsiasi editor di testo. I file tradotti verranno quindi copiati nuovamente nel progetto. Questo approccio comporta un rischio di modifica accidentale dei tag XML da parte dei traduttori, ma consente il lavoro di traduzione all'esterno del progetto di Microsoft Visual Studio. Questo approccio potrebbe funzionare bene per i progetti che devono essere tradotti in un numero ridotto di lingue. Il formato XLIFF è un formato XML progettato appositamente per l'uso nella localizzazione e deve essere ben supportato da alcuni fornitori di localizzazione o strumenti di localizzazione. È possibile usare Multilingual App Toolkit per generare file XLIFF da altri file di risorse, ad esempio .resw o resjson.

Nota

La localizzazione potrebbe anche essere necessaria per altri asset, tra cui immagini e file audio.

Considerare anche le seguenti domande:

  • Gli strumenti di localizzazione Sono disponibili numerosi strumenti di localizzazione per analizzare i file di risorse e consentire ai traduttori di modificare solo le stringhe traducibili. Questo approccio riduce il rischio che un traduttore modifichi accidentalmente i tag XML. Ma ha lo svantaggio di introdurre un nuovo strumento e processo al procedimento di localizzazione. Uno strumento di localizzazione è ideale per i progetti con un volume elevato di stringhe, ma un numero ridotto di lingue. Per altre informazioni, consultare Come usare Multilingual App Toolkit.
  • Fornitori di localizzazione Considerare l'utilizzo di un fornitore di localizzazione se l'applicazione contiene stringhe estese che devono essere tradotte in un gran numero di lingue. Un fornitore di localizzazione può fornire consigli su strumenti e processi, oltre a tradurre i file di risorse. Si tratta di una soluzione ideale, ma è anche l'opzione più costosa e può aumentare il tempo di turnaround per il contenuto tradotto.

Mantenere coerenti le chiavi di accesso e le etichette

È una sfida "sincronizzare" le chiavi di accesso utilizzate nell'accessibilità con la visualizzazione delle chiavi di accesso localizzate, poiché le due risorse stringa sono classificate in due sezioni separate. Assicurarsi di fornire commenti per la stringa di etichetta, ad esempio: Make sure that the emphasized shortcut key is synchronized with the access key.

Supportare furigana per le stringhe giapponesi che possono essere ordinate

I caratteri kanji giapponesi hanno la proprietà di avere più di una lettura (pronuncia) a seconda della parola in cui vengono utilizzati. Ciò comporta problemi quando si tenta di ordinare gli oggetti denominati giapponesi, ad esempio nomi di applicazioni, file, canzoni e così via. In passato, i kanji giapponesi venivano solitamente ordinati in un ordine comprensibile dal computer denominato XJIS. Purtroppo, perché questo ordinamento non è fonetico non è molto utile per gli esseri umani.

I Furigana risolvono questo problema consentendo all'utente o all'autore di specificare la fonetica per i caratteri in uso. Se si usa la procedura seguente per aggiungere i furigana al nome dell'app, è possibile assicurarsi che sia ordinato nella posizione corretta nell'elenco delle app. Se il nome dell'app contiene caratteri kanji e i furigana non vengono specificati quando la lingua dell'interfaccia utente o l'ordinamento sono impostati sul giapponese, Windows fa del suo meglio per generare la pronuncia appropriata. Tuttavia, è possibile ordinare i nomi delle app contenenti letture rare o univoche in una lettura più comune. Pertanto, la procedura consigliata per le applicazioni giapponesi (in particolare quelle contenenti caratteri kanji nei nomi) è fornire una versione con furigana del nome dell'app come parte del processo di localizzazione giapponese.

  1. Aggiungere "ms-resource:Appname" come Nome visualizzato del pacchetto e Nome visualizzato dell'applicazione.

  2. Creare una cartella ja-JP in stringhe e aggiungere due file di risorse come indicato di seguito:

    strings\
        en-us\
        ja-jp\
            Resources.altform-msft-phonetic.resw
            Resources.resw
    
  3. In Resources.resw per ja-JP generale: aggiungere una risorsa stringa per Appname "希蒼"

  4. In Resources.altform-msft-phonetic.resw per le risorse furigana giapponesi: Aggiungere un valore furigana per AppName "のあ"

L'utente può cercare il nome dell'app "希蒼" usando sia il valore furigana "のあ" (noa) che il valore fonetico (usando la funzione GetPhonetic dell'Input Method Editor (IME)) "まれあお" (mare-ao).

L'ordinamento segue il formato Pannello di controllo regionale:

  • In un'impostazione locale per l'utente giapponese,
    • Se i furigana sono abilitati, "希蒼" viene ordinato in "の".
    • Se mancano i furigana, "希蒼" viene ordinato in "ま".
  • In un'impostazione locale per l'utente non giapponese,
    • Se i furigana sono abilitati, "希蒼" viene ordinato in "の".
    • Se mancano i furigana, "希蒼" viene ordinato in "漢字".

Esempi