Implementación de la función de Globalización / Multilingüe en la aplicación de API win32

He desarrollado una aplicación de ventana (Win32 API) en visual C ++. Tengo que añadir la función multilingüe en esta aplicación. ¿Puede alguien por favor guiarme en cómo llevar adelante esta tarea?

lo básico para una aplicación multilingüe en Windows es el uso de “recursos”. un recurso es un fragmento agregado al final de su archivo ejecutable, que solo contiene datos, y está formateado de una manera muy específica para que Windows pueda interpretar esos datos.

en sus recursos, puede encontrar cuadros de diálogo, tablas de cadenas, pero también información sobre la versión (los que se muestran en el cuadro de diálogo de propiedades de un archivo en el explorador). puede ver los recursos de cualquier dll o exe abriendo el exe o dll en Visual C ++. al desarrollar una aplicación, puede crear un recurso (Archivo / Nuevo), agregarlo a su proyecto (igual que cuando agrega un archivo) y editar los recursos (usando el editor de recursos, generalmente una pestaña al lado de la Vista de archivos) en el explorador de proyectos).

Cada recurso (diálogo, diálogo, plantilla, información de versión, tabla de cadenas, …) contiene un identificador de idioma que puede cambiar. puede crear el mismo recurso varias veces utilizando un identificador de idioma diferente. Una vez comstackda, cuando Windows carga la aplicación, intentará abrir recursos cuyo idioma esté más cerca del idioma de la interfaz de usuario de Windows.

en el SDK de Windows se define un conjunto de funciones para hacer un buen uso de esos recursos: LoadString, LoadCursor, LoadBitmap y todo lo que se encuentra en el capítulo de recursos .

Ahora, cada vez que use una cadena en su código, póngala en un recurso de tabla de cadenas y use la función LoadString para recuperarla. Las ventanas y los cuadros de diálogo generalmente se cargan en el idioma correcto sin necesidad de una llamada de función específica, siempre que haya establecido el identificador de idioma correcto en los recursos.

voila, esa es la introducción más corta al desarrollo multilingüe en Windows que podría hacer. Estoy seguro de que puede encontrar muchos artículos bien escritos sobre recursos o desarrollo multilingüe en Windows en la red.

Hay varios aspectos de los que debes preocuparte:

  1. Comstack tu aplicación como Unicode
  2. localizar (traducir) la aplicación, lo que hace que “hable” otro idioma
  3. use un comportamiento que tenga en cuenta la ubicación, donde debe ordenar, o formatee la fecha / hora / números como lo espera el usuario

Para la localización, la mejor práctica actual es no usar cadenas en su código, pero almacenarlas en archivos DLL de solo recursos (o “DLL satélite”) Probablemente sea mejor comenzar desde aquí: http://msdn.microsoft.com/en-us /goglobal/bb978454.aspx , especialmente los tutoriales y las presentaciones a la derecha.

Para el trabajo de localización hasta el detalle, puede consultar esto: http://mihai-nita.net/2007/05/03/how-to-localize-an-rc-file/

Para un comportamiento que tenga en cuenta el entorno local, debe utilizar API especiales como GetNumberFormat o GetDateFormat. Probablemente puede comenzar desde aquí http://msdn.microsoft.com/en-us/library/dd319078%28VS.85%29.aspx o aquí http://msdn.microsoft.com/en-us/goglobal/dd565826 .aspx

Pero, por supuesto, ninguna respuesta será suficiente, ya que hay libros completos sobre el tema. Así que simplemente comience desde el portal de globalización de MS ( http://msdn.microsoft.com/en-us/goglobal/ ), especialmente la pestaña “Aprender”, y o desde allí.

Y cuando se topa con algunos problemas (lo más probable es que lo haga), pase por microsoft.public.win32.programmer.grupo internacional de noticias (lo sé, alejar a alguien del stackoverflow puede no ser una “buena forma”, pero hay una lugar, por lo que podría obtener mejores respuestas).

Use gettext para todas sus cadenas.

Esto puede ser un gran problema, o un pequeño problema, dependiendo de lo que haga su progtwig.

Cosas a considerar:

  1. Codificación de cadenas y caracteres. Poner cadenas en un recurso (o usar gettext) es un comienzo, pero es posible que desee considerar cómo almacenar cadenas internamente; p.ej. busque en una encoding Unicode como UTF-16 si todavía no está utilizando dicha encoding.

  2. Considere cómo procesa y almacena datos de cadena, ya que también es importante: ¿necesita ordenar o hacer comparaciones de casos? El orden ASCII (por ejemplo, comparar el valor simple en un ‘char’) podría no ser correcto. Algunas de estas preocupaciones se describen aquí .

  3. Los formatos de salida de fecha y hora, los formatos de salida de dinero y otras cosas también dependen de la cultura.

  4. Finalmente, es posible que necesite rediseñar los elementos de su IU según la tecnología de interfaz que esté utilizando. Las cadenas son más largas y más cortas en diferentes idiomas con diferentes fonts de sistema. En el caso extremo, es posible que deba considerar su diseño para los lectores de derecha a izquierda.