Stai sviluppando l'applicazione ASP.Net MVC, vero? Altre risposte sembrano essere specifiche per le applicazioni desktop. Fammi catturare cose comuni:
Rilevazione delle impostazioni locali
È abbastanza importante che l'applicazione rilevi correttamente le impostazioni internazionali dell'utente. Nell'applicazione desktop, CultureInfo.CurrentCulture contiene le impostazioni internazionali di formattazione preferite (quella che dovrebbe essere utilizzata per formattare numeri, date, valute, ecc.) Mentre CultureInfo.CurrentUICulture contiene le impostazioni internazionali preferite dell'interfaccia utente (quella che dovrebbe essere utilizzata per visualizzare i messaggi localizzati) . Per le applicazioni Web, è necessario impostare entrambe le culture su auto (per rilevare automaticamente le impostazioni locali dall'intestazione AcceptLanguage) a meno che non si desideri implementare un flusso di lavoro di rilevamento delle impostazioni locali sofisticato (ad esempio, si desidera supportare il cambio della lingua su richiesta).
Esternalizzare le stringhe
Tutte le stringhe dovrebbero provenire da risorse, ovvero file Resx. Nell'app Winforms è facilmente raggiungibile impostando la proprietà Localizable su true. Dovresti anche esternalizzare (purtroppo) manualmente le stringhe che provengono dai tuoi modelli. È anche relativamente semplice. In Asp.Net dovresti esternalizzare tutto manualmente ...
layout
Devi assolutamente consentire l'espansione della stringa. Nel mondo Winforms è realizzabile tramite TableLayoutPanel che dovrebbe essere usato per assicurarsi che il layout si adatterà automaticamente per adattarsi al testo più lungo. Nel mondo web, sei un po 'sfortunato. Potrebbe essere necessario implementare il meccanismo di localizzazione CSS - un modo per modificare (sovrascrivere) le definizioni CSS. Ciò consentirebbe alle persone di localizzazione di modificare i problemi di stile su richiesta. Assicurati che ogni elemento HTML nella pagina renderizzata abbia un ID univoco, che consentirà di indirizzarlo con precisione.
Questioni specifiche per la cultura
Evita l'uso di grafica, colori e suoni che potrebbero essere specifici per la cultura occidentale. Se ne hai davvero bisogno, ti preghiamo di fornire mezzi di localizzazione. Evita la grafica sensibile alla direzione (poiché questo sarebbe un problema quando provi a localizzarlo per dire arabo o ebraico). Inoltre, non dare per scontato che il mondo intero stia usando gli stessi numeri (cioè non è vero per l'arabo).
ToString () e Parse ()
Assicurati di passare sempre CultureInfo quando chiami ToString () a meno che non sia supportato. In questo modo stai commentando le tue intenzioni. Ad esempio: se si utilizza un numero internamente e per qualche motivo è necessario convertirlo in stringa utilizzare:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
Per i numeri che verranno visualizzati per l'uso dell'utente:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
Lo stesso vale per Parse (), TryParse () e persino ParseExact () - alcuni brutti bug potrebbero essere introdotti senza l'uso corretto di CultureInfo. Questo perché una povera anima di Microsoft, piena di buone intenzioni, ha deciso che è una buona idea trattare CultureInfo.CurrentCulture come predefinito (sarebbe usato se non si passa nulla), dopo tutto quando qualcuno sta usando ToString ( ) lui / lei vuole mostrarlo all'utente, giusto? Scoprire che non è sempre il caso, ad esempio provare a memorizzare il numero di versione dell'applicazione nel database e quindi convertirlo in istanza della classe Version. In bocca al lupo.
Date e fusi orari
Assicurarsi di archiviare e creare sempre un'istanza di DateTime in UTC (utilizzare DateTime.UtcNow anziché DateTime.Now). Converti l'ora locale in formato locale dopo aver visualizzato:
DateTime now = DateTime.UtcNow;
var s = now.ToLocalTime().ToString(CultureInfo.CurrentCulture);
Se devi inviare e-mail con riferimento temporale nel corpo, assicurati di includere le informazioni sul fuso orario - includi sia l'offset UTC sia l'elenco delle città:
DateTime someDate; // i.e. from database
var formattedDate = String.Format("{0} {1}",
someDate.ToLocaleTime().ToString(CultureInfo.CurrentCulture),
TimeZoneInfo.Local.DisplayName);
Messaggi composti
Sei già stato avvisato di non concatenare le stringhe. Invece probabilmente useresti String.Format () come mostrato sopra. Tuttavia, devo dichiarare che è necessario ridurre al minimo l'uso di messaggi composti. Questo perché le regole grammaticali di destinazione sono abbastanza diverse, quindi i traduttori potrebbero non solo riordinare la frase (questo sarebbe risolto usando segnaposto e String.Format ()), ma tradurre l'intera frase in modo diverso in base a cosa sarà sostituito. Lascia che ti dia alcuni esempi:
// Multiple plural forms
English: 4 viruses found.
Polish: Znaleziono 4 wirusy. **OR** Znaleziono 5 wirusów.
// Conjugation
English: Program encountered incorrect character | Application encountered incorrect character.
Polish: Program napotkał nieznaną literę | Aplikacja napotkała nieznaną literę.
Altre questioni di concatenazione
La concatenazione non è limitata alle stringhe. Evita di disporre i controlli insieme, ad esempio:
Ricordamelo di nuovo tra [casella di testo con numero] giorni.
Questo dovrebbe essere riprogettato in modo simile a: Ricordamelo di nuovo in questo numero di giorni: [casella di testo].
Codifica dei caratteri e caratteri
Salvare sempre, trasferire, qualunque testo in Unicode (cioè in UTF-8). Non scrivere i caratteri nel codice: potrebbe essere necessario modificarli nella localizzazione e questo disattiverà il meccanismo di fallback dei caratteri predefinito (nel caso di Winforms). Ricorda di consentire caratteri "strani" nella maggior parte dei campi (ad es. Nome utente).
Test
Probabilmente dovrai implementare la cosiddetta pseudo traduzione, ovvero creare risorse per dire cultura tedesca e copiare le tue stringhe inglesi aggiungendo prefisso e suffisso. Puoi anche avvolgere i segnaposto per rilevare facilmente stringhe composte. Lo scopo della pseudo traduzione è di rilevare problemi di localizzazione come stringhe codificate, problemi di layout e uso eccessivo di messaggi composti.