2010-05-31 8 views
6

J'ai développé un exemple de logiciel dans C# windows Appliation. Comment en faire un logiciel de support multilingue.Prise en charge multilingue en C#

Par exemple: L'une des boîtes de message afficher « Bienvenue exemple d'application »

i installé le logiciel dans un os Chinees, mais il affiche le message en anglais seulement. J'utilise "table de chaînes" (fichier de ressources) pour ce problème.

En table de chaînes j'ai besoin de créer une entrée pour chaque message en anglais et en chinois.

c'est un processus opportun. Y a-t-un autre moyen de faire ça?

+2

Bon fil ici: http://stackoverflow.com/questions/119568/best-practice-to-make-a-multi-language-application-in-c-winforms – Inisheer

+0

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

+0

WinForms ou WPF? –

Répondre

4

Creare Rénove les fichiers pour chaque langue pour laquelle vous souhaitez prendre en charge les fonctions mentionnées ci-dessous.

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

Sur la base de la langue/CurrentCulture de l'utilisateur, lire les valeurs à partir du fichier de ressources linguistiques respectives et l'affichage dans l'étiquette ou MessageBog. Voici un exemple de code.

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; 

     } 

    } 

} 

Dans l'application asn asp.net, vous l'utiliseriez comme suit.

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

Vous maintenant mis:

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

Merci: maintenant j'utilise comme ça seulement ... pas d'autre moyen? –

0

Vous pouvez le faire en utilisant des fichiers de ressources. Vous devez créer un fichier de ressources pour chaque langue et vous pouvez utiliser le fichier approprié lors de l'exécution de l'application.

+0

Merci Ram, Maintenant, j'utilise cette méthode seulement .... une autre méthode simple? –

2

Si vous allez utiliser des fichiers de ressources comme Ram suggéré, il y a un bon blog sur la localisation here: ASP.NET MVC 2 Localization complete guide. (J'aurais dû mentionner que c'est pour Asp.net mvc 2, cela peut ou ne peut pas être utile) Vous devez encore passer du temps à faire des tableaux pour chaque langue. Je n'ai pas utilisé d'autre approche pour cela avant, j'espère que vous trouverez quelque chose d'utile

+0

Merci, tout est expliqué si facile et ça fonctionne. –

0

Resharper 5.0 peut grandement améliorer le temps que vous passez sur la localisation. Il dispose de fonctionnalités qui permettent de passer facilement à la ressource et il souligne (si choisi) toutes les chaînes qui sont localisables, il est donc plus difficile de les manquer. Etant donné qu'il a 30 jours d'essai (version complète), vous pouvez simplement l'installer, faire votre travail et désinstaller si vous ne pouvez pas se le permettre, mais je suggère de le garder :-) Il vaut vraiment le prix.

La localisation de logiciels et la globalisation ont toujours été des tâches difficiles et parfois non désirées pour les développeurs. ReSharper 5 simplifie considérablement l'utilisation des ressources en fournissant une pile complète de fonctionnalités pour les fichiers resx et les utilisations de ressources dans les codes C# et VB.NET, ainsi que dans les balisages ASP.NET et XAML.
Les fonctions dédiées incluent Déplacer la chaîne vers la ressource, Rechercher les utilisations de la ressource et d'autres actions de navigation. Combiné avec le support de refactoring, les inspections et les correctifs, vous obtenez un environnement de localisation pratique.