2008-08-06 28 views
64

¿Cuál es la mejor manera de admitir varios idiomas para la interfaz en una aplicación ASP.NET MVC? He visto personas usar archivos de recursos para otras aplicaciones. ¿Sigue siendo esta la mejor manera?Múltiples idiomas en una aplicación ASP.NET MVC?

+0

posible duplicado de [Cómo localizar la aplicación ASP.NET MVC?] (Http: // stackoverflow.com/questions/192465/how-to-localize-asp-net-mvc-application) – Marijn

+0

sitio web multilingüe con el parámetro out passing, consulte este [sitio web multilingüe en MVC 4 C#] (http: //lesson8.blogspot .in/2013/03/multi-language-website-in-mvc-4-c.html) – Sender

Respuesta

40

Si está utilizando los motores de vista predeterminados, los recursos locales funcionan en las vistas. Sin embargo, si necesita obtener cadenas de recursos dentro de una acción de controlador, no puede obtener recursos locales y debe usar recursos globales.

Esto tiene sentido cuando lo piensas porque los recursos locales son locales para una página aspx y en el controlador, ni siquiera has seleccionado tu vista.

+0

¿Esto también funcionará en el motor de vista de maquinilla de afeitar? –

+0

Sí, esto tiene sentido para los controladores. ¿Pero qué hay de View Models? Son (a menudo) específicos para la vista y tendría sentido hacer referencia a los recursos específicos de la vista en el código del modelo de vista. Me pregunto si existe un mecanismo para hacer que un archivo de recursos sea local para una vista y su modelo de vista ... –

+0

@Haacked, hola, tenemos un sitio web de compras en asp mvc, así que cuando el usuario selecciona el idioma árabe, queremos hacer el todo el sitio árabe, ¿podemos usar Microsoft Bing Bing [traductor] (https://www.bing.com/translator/) o microsoft [traductor API] (http://www.microsoft.com/en-us/translator/products .aspx) o debería comprar [localize.js] (https://localizejs.com/features) para lograr esto rápido? – stom

3

Sí, los recursos siguen siendo la mejor manera de admitir varios idiomas en el entorno .NET. Porque son fáciles de referencia e incluso más fáciles de agregar nuevos idiomas.

Site.resx 
Site.en.resx 
Site.en-US.resx 
Site.fr.resx 
etc... 

Así que usted todavía tiene que utilizar los archivos de recursos.

+0

¿Cómo se deben colocar para que esto funcione? –

21

He encontrado this resource a ser muy útil

Es una envoltura alrededor de la HttpContext.Current.GetGlobalResourceString y HttpContext.Current.GetLocalResourceString que le permite llamar a los recursos así ...

// default global resource 
Html.Resource("GlobalResource, ResourceName") 

// global resource with optional arguments for formatting 
Html.Resource("GlobalResource, ResourceName", "foo", "bar") 

// default local resource 
Html.Resource("ResourceName") 

// local resource with optional arguments for formatting 
Html.Resource("ResourceName", "foo", "bar") 

El único problema que encontré es que los controladores no tienen acceso a las cadenas de recursos locales.

1

Algunas de las otras soluciones mencionadas como respuesta no funcionan para la versión de lanzamiento de MVC (funcionaban con versiones anteriores de alfa/beta).

Aquí es un buen artículo que describe una forma de implementar la localización que será inflexible y no rompa la unidad de pruebas de controladores y vistas: localization guide for MVC v1

2

proyecto The Orchard utiliza un método de acceso directo llamado "T" para hacer todas las traducciones de cadenas in-page. Entonces verás etiquetas con @T ("A String to Translate").

Tengo la intención de ver cómo esto se implementa detrás de las escenas y potencialmente utilizarlo en proyectos futuros. El nombre corto mantiene el código más limpio ya que se usará mucho.

Lo que me gusta de este enfoque es que la cadena original (inglés, en este caso) todavía es fácilmente visible en el código, y no requiere una búsqueda en una herramienta de recursos o en otra ubicación para decodificar aquí.

Ver http://orchardproject.net para obtener más información.

+0

Hay casos en los que la cadena de origen "A String to Translate", que es exactamente idéntica, debería traducirse de manera diferente en función del contexto circundante. Esto ocurre especialmente con cadenas de una sola palabra. – springy76

Cuestiones relacionadas