Best practice per creare un'applicazione multilingue in C # / WinForms? [chiuso]


94

Ho cercato di creare applicazioni adatte a più lingue in C # poiché ho bisogno di lavorare su un piccolo progetto in cui questo è il caso. Ho trovato fondamentalmente due modi per farlo:

Imposta la proprietà Localizable di un modulo su true, imposta la proprietà Language, compila tutte le etichette e così via, e il gioco è fatto. Il principale svantaggio che vedo in questo è: come fare altre cose che non fanno parte di un modulo pronto per più lingue (ad esempio finestre pop-up, file di registro o finestre, ecc.).

Crea un file di risorse, ad esempio "Lang.en-us.resx" e uno per ogni lingua, ad esempio "Lang.nl-nl.resx" e riempilo con stringhe. L'IDE sembra generare automaticamente una classe per me, quindi nel codice posso semplicemente usare Lang.SomeText. Il più grande svantaggio che vedo in questo è: per ogni modulo ho bisogno di impostare tutte le etichette e le altre didascalie nel codice (e non sembra che il data binding funzioni con queste risorse).

Sono sicuro, tuttavia, che ci siano anche altri metodi per farlo.

Allora, qual è la migliore pratica? Qual è il più semplice per le piccole applicazioni (pochi moduli, connessione al database, ecc.) E qual è la scalabilità migliore per le applicazioni più grandi?


3
Ho notato che non costruttive (o altre domande di tipo "non valido per COSÌ") sono una delle domande più preziose :) Anche questa è una buona domanda (penso che i voti lo dimostrino) Ecco una buona dimostrazione di come per utilizzare il componente aggiuntivo multilingue per il supporto multilingue youtube.com/watch?v=SNIyP1QQdVs
Prokurors

1
A volte è così difficile mettere insieme tutti i frammenti di conoscenza su Internet e trovo questa domanda inestimabile in questo momento. Sicuramente ci sono momenti in cui chiudere le domande soft è meno costruttivo che lasciarle aperte, e penso che questa sia una di quelle volte. :)

Risposte:


20

Ho sempre utilizzato file di risorse per applicazioni multilingue.
Ci sono molti articoli sul web che spiegano come usarli.

Ho usato due modi diversi:

  • Un file di risorse per modulo
  • Un file di risorse globale

Il file / modulo di risorse è più facile da implementare, è sufficiente inserire i valori nel file di risorse, ma trovo che questo approccio sia più difficile da mantenere, poiché le etichette sono disperse in tutta l'applicazione.

Il file di risorse globale consente di centralizzare tutte le etichette (immagini, ecc.) In un file (per lingua), ma significa impostare manualmente le etichette nel caricamento del modulo. Questo file può essere utilizzato anche per messaggi di errore, ecc.

Questione di gusto ...

Un ultimo punto, scrivo programmi in inglese e francese, uso "en" e "fr" e non "en-US" e "fr-FR". Non complicare le cose, i diversi dileletti dell'inglese (americano, inglese, australiano ecc.) Hanno poche differenze sufficienti per usarne solo uno (lo stesso vale per il francese).


2
A volte devi preoccuparti dei dialetti. Ad esempio, i caratteri cinesi sono completamente diversi nel cinese tradizionale (Taiwan) rispetto al cinese semplificato (Cina continentale).
MarkJ

1
@MarkJ La documentazione MSDN menziona che il cinese tradizionale e il cinese semplificato non sono dialetti (paese / regione) ma culture neutre. Msdn: "Una cultura neutra è una cultura associata a una lingua ma non a un paese / area geografica. Una cultura specifica è una cultura associata a una lingua e a un paese / area geografica. Ad esempio," fr "è una lingua neutra culture e "fr-FR" è una cultura specifica. Notare che "zh-CHS" (cinese semplificato) e "zh-CHT" (cinese tradizionale) sono culture neutre ".
banda larga

Recentemente l'ho fatto con l'aiuto di link , 2 passaggi non menzionati qui: 1. Fare clic su tutti i file .resource e impostare la proprietà "Build Action" su "Content". 2. Fare clic su tutti i file .resource e impostare la proprietà "Copia nella directory di output" su "Copia sempre".
Sourav

1
@Kiquenet Per un completo (con prefisso) risposta incluso il supporto a livello di .NET, vedere: stackoverflow.com/a/35813707/2901207
CularBytes

9

Recentemente ho scritto un programma con supporto sia in lingua tedesca che inglese. Sono stato sorpreso di scoprire che se ho semplicemente chiamato le mie risorse in inglese LanguageResources.resx e le mie risorse in tedesco LanguageResources.de.resx, ha selezionato automaticamente la lingua corretta. Il ResXFileCodeGenerator si è preso cura di tutto per me.

Si noti che i campi nei due file erano gli stessi e tutti i campi tedeschi non ancora inseriti sarebbero stati visualizzati nell'applicazione come inglese poiché la lingua del file più aspecifica è quella predefinita. Quando si cerca una stringa, va dal più specifico (es. .De-DE.resx) al meno specifico (es. .Resx).

Per ottenere le tue stringhe, usa le chiamate ResourceManager.GetString o ResourceManager.GetObject. L'applicazione dovrebbe darti il ​​ResourceManager gratuitamente.


6

A beneficio di altri che potrebbero imbattersi in questo (1+ anni dopo l'ultimo post), sono l'autore di un prodotto di localizzazione professionale che rende estremamente semplice l'intero processo di traduzione. È un componente aggiuntivo di Visual Studio che estrarrà tutte le stringhe ".resx" da qualsiasi soluzione arbitraria e le caricherà in un singolo file che può essere tradotto utilizzando un'applicazione autonoma gratuita (i traduttori possono scaricarla dal mio sito). Lo stesso componente aggiuntivo importerà quindi le stringhe tradotte nella soluzione. Estremamente facile da usare con molte protezioni integrate, molti campanelli e fischietti e aiuto in linea (non ne avrai bisogno molto). Vedi http://www.hexadigm.com


1
Questo dovrebbe essere aggiunto come funzione nativa a visualstudio! Ottimo software!
Caverna

Grazie mille (apprezzato). Sarei stato d'accordo con te prima di avviare il prodotto (circa 10 anni fa) ma se MSFT lo implementasse oggi mi metterebbe fuori dal mercato :)
Larry
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.