2011-07-06 12 views
5

¿C# ofrece una manera de traducir cadenas sobre la marcha o algo similar?C# cadena traducción

Ahora estoy trabajando en algún código heredado, que tiene algunas partes como este:

section.AddParagraph(String.Format("Premise: {0}", currentReport.Tenant.Code)); 
section.AddParagraph(String.Format("Description: {0}", currentReport.Tenant.Name)); 

section.AddParagraph(); 

section.AddParagraph(String.Format("Issued: #{0:D5}", currentReport.Id)); 
section.AddParagraph(String.Format("Date: {0}", currentReport.Timestamp.ToString(
        "dd MMM yyyy", CultureInfo.InvariantCulture))); 
section.AddParagraph(String.Format("Time: {0:HH:mm}", currentReport.Timestamp)); 

Por lo tanto, quiero poner en práctica el traducción de estas cadenas en la marcha basada en alguna tabla de sustitución (por ejemplo, como Qt hace).

  • es esto posible (probablemente, usando algo que ya tiene C# o el uso de un post-procedimiento - puede ser posible con PostSharp)?
  • ¿Existe algún enfoque de internalización genérico para las aplicaciones creadas con C#(desde cero)?

Respuesta

6

hace algo de enfoque de internalización genérica para aplicaciones hechas con C# (desde cero) existen?

Sí, usando resource files. Y aquí está another article en MSDN.

1

En el proyecto de C# Actualmente trabajo en, escribimos una función auxiliar que funciona así:

section.AddParagraph(I18n.Translate("Premise: {0}", currentReport.Tenant.Code)); 
section.AddParagraph(I18n.Translate("That's all"); 

Al tiempo de construcción, un script busca en todas las invocaciones I18n.Translate, así como todos los controles de interfaz de usuario, y llena una tabla con todas las frases en inglés. Esto se traduce.

En tiempo de ejecución, el texto en inglés se busca en un diccionario y se reemplaza con el texto traducido. Algo similar ocurre con nuestros recursos de diálogo de winforms: están construidos en inglés y luego se traducen utilizando el mismo diccionario.

La mayor fortaleza de este esquema, es también la mayor debilidad: si utiliza la misma cadena en dos lugares, se traduce de la misma manera. Esto acorta el archivo que envía al traductor, lo que ayuda a reducir los costos. Si alguna vez necesita forzar una traducción diferente de la misma palabra inglesa, necesita evitar eso. Mientras tengamos el sistema (4 años más o menos), nunca tuvimos la necesidad de hacerlo. También hay beneficios: usted lee el texto de la interfaz de usuario en inglés en línea con la fuente (para no esconderse detrás de un identificador que necesita nombrar), y si elimina el código, también se elimina automáticamente de los recursos traducidos.

+0

Oh, i18n significa i-nternationalizatio-n. –

Cuestiones relacionadas