2009-04-28 9 views
6

Ho aggiunto il multi-linguaggio utilizzando il breve articolo qui sotto.C# Creazione di un'impostazione per il linguaggio multilingue

Quando si aggiunge ad esempio la lingua tedesca si avrà questi file: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

Nel primo file si avrà risorse per la lingua neutra, come stringhe, immagini, ..

Quindi ora è necessario aggiungere anche le risorse per le stringhe utilizzate nel codice. Aggiungi un nuovo file di risorse e chiamalo formMain.Strings.resx Quindi inserirò il nome, coppia di valori per ogni stringa che deve essere tradotta. Quando aggiungi il file di risorse, viene automaticamente digitato perché un altro file con nome formMain.Strings.Designer.cs viene rigenerato automaticamente ad ogni chiusura di resx designer.

Aggiungi un'altra risorsa con nome formMain.Strings.de-DE.resx. Aggiungi la stessa chiave del nome dalla risorsa precedente e modifica semplicemente il valore con le parole tedesche corrispondenti. Ora per accedere alla risorsa creata dalla fonte sarà così.

MessageBox.Show (formMain_Strings.SameStringName);

Tuttavia, ho cambiato la lingua tailandese. Tutto funziona correttamente quando eseguo la mia app in VS.

Tuttavia, non appena aggiungo un progetto di installazione e l'installazione sul computer client, non cambierà la lingua in tailandese e si limiterà alla lingua predefinita.

Quindi ho aggiunto i file di risorse e la TH-TH dll all'impostazione del progetto. E ho ancora lo stesso problema.

Packaging file 'Lang.Strings.resx'... 
Packaging file 'MultiLanguage.resources.dll'... 
Packaging file 'MultiLanguage.exe'... 
Packaging file 'Lang.Strings.th-TH.resx'... 

Come tutto funziona correttamente quando si esegue in Visual Studio. C'è qualcosa che devo fare per farlo funzionare una volta che è stato installato. Tutte le proprietà per ogni file che ho conservano il valore predefinito.

Molte grazie,

=========

static void Main() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH"); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

risposta

10

ho trovato la risposta

Fare clic sul progetto di installazione in Esplora soluzioni e quindi fare clic su Aggiungi \ Output progetto \. Da finestra di dialogo selezionare il progetto per il quale si desidera includere la localizzazione (sat elite), quindi selezionare Risorse localizzate.

Dopo l'installazione nella cartella in cui installo, ho la cartella TH-TH che include l'assembly satellite.

Grazie,

+0

Se possibile, è meglio abbandonare Setup Project non appena umanamente possibile e passare a Windows Installer XML (WiX). Ho spedito un prodotto utilizzando un progetto di installazione una volta. Mai più. Mai, mai più. – Promit

+0

Ho appena dato una rapida occhiata a WiX e non riesce nemmeno a includere la DLL localizzata delle risorse nel pacchetto di installazione. Sembra che le risorse localizzate in qualsiasi tipo di progetto di installazione semplicemente non funzioni (sto lavorando a un progetto VC++ qui). – galmok

1

Prova ad aggiungere in questa fase di avvio della app (se non è lì):

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 

Qui è un short article che discute alcune delle opzioni su come farlo funzionare, e le opzioni per selezionare le impostazioni locali in fase di runtime.


Edit dopo i commenti:

Assicurarsi che l'assembly satellite si trova nel luogo appropriato, e costruito in modo corretto. Da tale articolo ho fatto riferimento:

"Quando .NET runtime avvia un'applicazione cerca un possibile file di assembly satellite Un file assembly satellite è un file assembly di sola risorsa con estensione .resources.dll anziché .exe. dll (se l'assembly principale è una libreria) I file di assembly satellite si trovano sempre in una sottodirectory specifica della lingua della directory principale dell'applciation.Se il file dell'applicazione è Converter.exe, il file assembly satellite giapponese è ja \ Converter.resources.dll."

Ci sono alcune cose che dovresti controllare qui, controlla il nome dell'assemblaggio, assicurati che sia nella posizione corretta, nel tuo caso dovrebbe trovarsi in una sottodirectory th-TH con il nome appropriato sotto il vostro eseguibile. Se è lì, deve essere trovato e usato correttamente.

Ecco another good source of information su questo argomento.

+0

Ciao. Ho già aggiunto questo al mio evento di caricamento dei moduli. Tutto funziona bene nello studio visivo. Solo quando installo sul computer del cliente. public Form1() { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo ("th-TH"); InitializeComponent(); } – ant2009

+0

Provare a spostarlo nella routine Main(), prima di caricare il modulo. Credo che averlo a form_load sia troppo tardi ... a quel punto, gli assembly sono già stati caricati e scelti. –

+0

Ciao. L'ho rimosso dal form_load e l'ho messo nel mio main. Tuttavia, funziona nello studio visivo. Ma non appena installo sul computer client mostra solo la lingua predefinita e non quella tailandese. Nel mio primo post ho aggiunto i miei file di risorse e resource.dll. Dovrei farlo? – ant2009