2010-05-31 31 views
6

He desarrollado un software de muestra en la aplicación C# windows. Cómo convertirlo en un software de soporte multilingüe.Compatibilidad con varios idiomas En C#

Por ejemplo: Uno de los cuadros de mensaje que aparezca "Bienvenidos a la aplicación de la muestra"

He instalado el software en un sistema operativo Chinees, pero muestra el mensaje sólo en Inglés.

Estoy usando "tabla de cadenas" (Archivo de recursos) para este problema.

En la tabla de cadenas, necesito crear entradas para cada mensaje en inglés y chino.

es un proceso oportuno. ¿Hay alguna otra manera de hacer esto?

+2

Buena hilo aquí: http://stackoverflow.com/questions/119568/best-practice-to-make-a-multi-language-application-in-c-winforms – Inisheer

+0

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

+0

WinForms o WPF? –

Respuesta

4

Creare Reources archivos para cada idioma que desea dar soporte mencionado a continuación.

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

Sobre la base de la lengua/CurrentCulture del usuario, leer los valores de archivo de recursos de idioma correspondiente y mostrar en la etiqueta o MessageBog. Aquí hay un código de muestra.

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; 

     } 

    } 

} 

En la aplicación asn asp.net, la usará de la siguiente manera.

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

Ahora le pones:

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

Gracias: ahora estoy usando solo así ... ¿no de otra manera? –

0

Puede hacerlo utilizando archivos de recursos. Necesita crear un archivo de recursos para cada idioma y puede usar el correspondiente al ejecutar la aplicación.

+0

Gracias Ram, ahora estoy usando este método solamente ... ¿algún otro método simple? –

2

Si se va a utilizar archivos de recursos como se sugiere Ram, no es un buen post sobre la localización here: ASP.NET MVC 2 Localization complete guide. (Debería haber mencionado que esto es para Asp.net mvc 2, puede o no ser útil). Todavía tiene que perder tiempo haciendo tablas para cada idioma. No he utilizado ningún otro enfoque para esto antes, espero que encuentre algo útil

+0

Gracias, todo se explica tan fácil y funciona. –

0

Resharper 5.0 puede mejorar en gran medida el tiempo que pasa en la localización. Tiene características que le permiten pasar fácilmente a los recursos y subraya (si se elige) todas las cadenas que son localizables, por lo que es más difícil no verlas.

Dado que tiene 30 días de prueba (versión completa) puede simplemente instalarlo, hacer su trabajo y desinstalarlo si no puede pagarlo, pero le sugiero que se quede :-) Realmente vale la pena su precio.

La localización de software y la globalización siempre han sido difíciles y en ocasiones tareas no deseadas para los desarrolladores. ReSharper 5 simplifica enormemente el trabajo con recursos al proporcionar una pila completa de características para los archivos resx y los usos de los recursos en C# y código VB.NET, así como en el marcado ASP.NET y XAML.
Las características dedicadas incluyen Mover cadena a recurso, Encontrar usos de recursos y otras acciones de navegación. En combinación con el soporte de refactorización, las inspecciones y las correcciones, obtiene un entorno de localización conveniente.

Cuestiones relacionadas