2010-05-31 17 views
6

Ho sviluppato un software di esempio in C# windows Appliation. Come renderlo un software di supporto multilingue.Supporto multilingue in C#

Per esempio: Una delle finestre di messaggio sul display "Benvenuti a campione applicazione"

Ho installato il software in un sistema operativo a Chinees, ma visualizza il messaggio in solo inglese.

sto usando "tabella di stringhe" (File di risorse) per questo problema.

Nella tabella di stringhe ho bisogno di creare una voce per ogni messaggio in inglese e Chinees.

è un processo tempestivo. C'è un altro modo di fare questo?

+2

Buono thread qui: http://stackoverflow.com/questions/119568/best-practice-to-make-a-multi-language-application-in-c-winforms – Inisheer

+0

anche qui: http: // msdn.microsoft.com/en-us/library/1021kkz0%28v=VS.100% 29.aspx – Inisheer

+0

WinForms o WPF? –

risposta

4

Creare i file di risorse per ciascuna lingua a cui si desidera fornire supporto per quanto indicato di seguito.

alt text http://geekswithblogs.net/images/geekswithblogs_net/dotNETPlayground/resx.gif

Sulla base della lingua/CurrentCulture dell'utente, leggere i valori dal file di risorse rispettiva lingua e la visualizzazione in etichetta o MessageBog. Ecco alcuni esempi di codice.

public static class Translate 

{ 

    public static string GetLanguage() 

    { 

     return HttpContext.Current.Request.UserLanguages[0]; 

    } 



    public static string Message(string key) 

    { 

     ResourceManager resMan = null; 

     if (HttpContext.Current.Cache["resMan" + Global.GetLanguage()] == null) 

     { 

      resMan = Language.GetResourceManager(Global.GetLanguage()); 

      if (resMan != null) HttpContext.Current.Cache["resMan" + Global.GetLanguage()] = resMan; 

     } 

     else 

      resMan = (ResourceManager)HttpContext.Current.Cache["resMan" + Global.GetLanguage()]; 



     if (resMan == null) return key; 



     string originalKey = key; 

     key = Regex.Replace(key, "[ ./]", "_"); 



     try 

     { 

      string value = resMan.GetString(key); 

      if (value != null) return value; 

      return originalKey; 

     } 

     catch (MissingManifestResourceException) 

     { 

      try 

      { 

       return HttpContext.GetGlobalResourceObject("en_au", key).ToString(); 

      } 

      catch (MissingManifestResourceException mmre) 

      { 

       throw new System.IO.FileNotFoundException("Could not locate the en_au.resx resource file. This is the default language pack, and needs to exist within the Resources project.", mmre); 

      } 

      catch (NullReferenceException) 

      { 

       return originalKey; 

      } 

     } 

     catch (NullReferenceException) 

     { 

      return originalKey; 

     } 

    } 

} 

In asn asp.net, lo si utilizza come segue.

<span class="label">User:</span> 

Ora ci si mette:

<span class="label"><%=Translate.Message("User") %>:</span> 
+1

Grazie: ora sto usando solo questo .... Nessun altro modo? –

0

È possibile farlo utilizzando i file di risorse. È necessario creare un file di risorse per ciascuna lingua ed è possibile utilizzare quello appropriato durante l'esecuzione dell'applicazione.

+0

Grazie Ram, ora sto usando questo metodo solo .... qualche altro metodo semplice? –

2

Se si dovesse andare a utilizzare i file di risorse come suggerito Ram, c'è un buon post sulla localizzazione here: ASP.NET MVC 2 Localization complete guide. (Avrei dovuto dire che questo è per Asp.net mvc 2, potrebbe essere o non essere utile) Devi ancora passare il tempo a creare tabelle per ogni lingua. Non ho ancora utilizzato alcun altro approccio per questo, spero che tu trovi qualcosa di utile

+0

Grazie, è tutto spiegato in modo semplice e funziona. –

0

Resharper 5.0 può migliorare notevolmente il tempo che si spende per la localizzazione. Ha delle caratteristiche che consentono di spostare facilmente le risorse e sottolinea (se lo si sceglie) tutte le stringhe che sono localizzabili, quindi è più difficile non vederle.

Dato che ha 30 giorni di prova (versione completa) è possibile semplicemente installarlo, fare il tuo lavoro e disinstallarlo se non te lo puoi permettere, ma vorrei suggerire di tenerlo :-) Vale davvero la pena è il prezzo.

La localizzazione e la globalizzazione del software sono sempre state attività difficili e talvolta indesiderate per gli sviluppatori. ReSharper 5 semplifica enormemente il lavoro con le risorse fornendo una serie completa di funzionalità per i file resx e gli utilizzi delle risorse in C# e nel codice VB.NET, nonché nei markup ASP.NET e XAML.
Le funzioni dedicate includono Sposta stringa a risorsa, Trova usi di risorse e altre azioni di navigazione. Combinato con il supporto del refactoring, le ispezioni e le correzioni, si ottiene un ambiente di localizzazione conveniente.