2008-11-06 4 views
16

Estamos seguros de que llevaremos nuestro producto a nivel internacional y eventualmente tendremos que internacionalizarlo. ¿Cuánta internacionalización recomendaría que hagamos a medida que avanzamos?Internationalizing Desktop App dentro de un par de años ... ¿Qué deberíamos hacer ahora?

Creo que en otras palabras, ¿hay alguna internacionalización que sea fácil ahora pero que puede ser mucho peor si permitimos que la base de código madure y eso no nos ralentizará mucho si decidimos comenzar a hacerlo ahora?

tecnología utilizada: C#, WPF, WinForms

Respuesta

32

Prepare ahora, antes de escribir todas las cadenas en el mismo código base.

Todo después de ahora será demasiado tarde. ¡Es ahora o nunca!

Es cierto que es un esfuerzo extra para prepararse bien ahora, pero no hacerlo resultará ser mucho más caro.

Si no sigue todas las pautas en los enlaces siguientes, al menos tenga en cuenta los puntos 1,2 y 7 del resumen, que son muy baratos de hacer ahora y que causan más dolor en mi experiencia.

Consulte estas pautas y vea usted mismo por qué es mejor comenzar ahora y tener todo preparado.

  1. Developing world ready applications

  2. Best practices for developing world ready applications

pequeño extracto:

  1. Mover todos los recursos localizables a DLL sólo de recursos separados. Los recursos localizables incluyen elementos de interfaz de usuario como cadenas de caracteres, mensajes de error, cuadros de diálogo, menús y recursos de objetos incrustados. (Mover los recursos a una DLL después será una molestia)
  2. No codificar cadenas o recursos de interfaz de usuario. (Si no se prepara, sabe que codificará cadenas)
  3. No coloque recursos no localizables en las DLL de solo recursos. Esto causa confusión para los traductores.
  4. No utilice cadenas compuestas que se crean en tiempo de ejecución a partir de frases concatenadas. Las cadenas compuestas son difíciles de localizar porque a menudo asumen un orden gramatical en inglés que no se aplica a todos los idiomas. (Después del diseño de la interfaz, cambiar frases es más difícil)
  5. Evite construcciones ambiguas como "Carpeta vacía" donde las cadenas se pueden traducir de forma diferente según los roles gramaticales de los componentes de las cadenas. Por ejemplo, "vacío" puede ser un verbo o un adjetivo, y esto puede conducir a diferentes traducciones en idiomas como el italiano o el francés. (Mismo número)
  6. Evite el uso de imágenes e íconos que contengan texto en su aplicación. Son caros de localizar (Utilice texto sobre la imagen)
  7. Deje espacio suficiente para que la longitud de las cadenas se expanda en la interfaz de usuario. En algunos idiomas, las frases pueden requerir 50-75 por ciento más de espacio.(Mismo problema, si no lo planifica ahora, el rediseño es más costoso)
  8. Use la clase System.Resources.ResourceManager para recuperar recursos en función de la cultura.
  9. Utilice Microsoft Visual Studio .NET para crear cuadros de diálogo de Windows Forms, para que puedan ser localizados utilizando el Editor de recursos de Windows Forms (Winres.exe). No codifique cuadros de diálogo de Windows Forms a mano.
3

En mi humilde opinión, afirmar que algo va a suceder "en unos años" se traduce literalmente como "esperamos algún día", lo que realmente significa "nunca". Aunque todavía leería varios tutoriales para asegurarme de que no comete ningún error horrendo. Hacer el correcto soporte de internacionalización ahora significará menos trabajo en el futuro, y una vez que se acostumbre a él, no tendrá ningún efecto real en la productividad actual. Pero si puede medir el objetivo en años, tal vez no valga la pena hacerlo en este momento.

He trabajado en dos proyectos que internacionalizaron: una aplicación C# ASP.NET (existente antes de unirme al proyecto) y una aplicación PHP (hice mi propio método utilizando un control de internacionalización gratuito y mi propia aplicación de administración).

Debe almacenar todo el texto (etiquetas, texto del botón, etc.) como datos dentro de una base de datos. Refiértalos con las teclas (prefiero usar las primeras 4 palabras, mayúsculas, los espacios convertidos en guiones bajos y no alfanuméricos eliminados) y cuando tenga un duplicado, añada un número al final. El beneficio de este método clave es que el programador tiene una comprensión bastante sólida del contenido del texto con sólo mirar la clave.

Escriba una utilidad para extraer los datos y compilar los archivos de recursos .NET que agregue a su proyecto para su compilación. Cree un archivo de recursos por separado para cada idioma. En su código, use la tecla para señalar la entrada correcta.

Me deslizarse sobre los documentos de MS sobre el tema: http://www.microsoft.com/globaldev/getwr/dotneti18n.mspx

Algunas cosas básicas que deben evitarse:

  • nunca jamás usar software de traducción, contratar a un profesional o un pasante teniendo ese idioma en una universidad local
  • Nunca intente crear texto agregando dos entradas existentes, porque la gramática difiere enormemente en cada idioma, esto nunca funcionará. Entonces, si tiene una cadena que dice "Hacer clic" y quiere una que diga "Haga clic ahora", no intente crear una configuración que combine dos entradas, o durante la traducción, copie la palabra para hacer clic y traduzca la palabra ahora. Trate cada cadena como una traducción totalmente nueva desde cero
+0

En lo que respecta al YAGNI ... sí, pienso de esa manera en muchas cosas. Sin embargo, esta es un área en la que me han mordido el trasero. La internacionalización es una forma común de aumentar la base de usuarios de su producto, por lo que desea asegurarse de que puede hacerlo. Un proyecto en el que trabajé literalmente no podría.Eso fue malo. –

2

Agregaré para almacenar y manipular datos de cadena como Unicode (NVARCHAR en MS SQL).

0

Si usa datos de prueba, use cadenas que no sean en inglés (por ejemplo, ruso, polaco, noruego, etc.). La codificación muestra su pequeña cabeza fea en cada esquina. Si no está en sus propias bibliotecas, entonces en las externas.

Personalmente prefiero el ruso porque aunque no hablo ni una palabra de ruso (a pesar del origen de mi nombre) tiene caracteres en el extranjero y requiere más espacio que el inglés y, por lo tanto, también prueba el espaciado.
No sé si eso es algo específico del idioma, o simplemente porque nuestro traductor ruso le gusta las cadenas detalladas.

+0

raro! Hizo el mismo error tres veces. Incluso en mi lengua materna no está escrito así. Y los otros idiomas que escribí son correctos. A veces me engaño incluso a mí mismo –

0

La internacionalización permitirá que su producto sea utilizable en otros países, es fácil y debe hacerse desde el principio (de esta manera las personas de habla inglesa de todo el mundo pueden usar su software), esas 3 reglas lo llevarán la mayor parte del camino allí:

  1. Compatibilidad con caracteres internacionales: utilice únicamente tipos de datos Unicode en archivos y bases de datos.
  2. Admite formatos internacionales de fecha, hora y número: utilice CultureInfo.InvariantCulture cuando almacene datos en un archivo o en un almacenamiento legible por computadora, use CultureInfo.CurrentCulture cuando muestre datos o analice la información del usuario, nunca haga su propio análisis ni utilice ningún otro objeto cultural .
  3. Los datos textuales ingresados ​​por el usuario deben considerarse como un recuadro negro, no intente dividirlos en palabras o letras, especialmente cuando se lo muestre al usuario: diferentes idiomas tienen reglas de difracción y el sistema operativo sabe cómo mostrarlo. a la derecha del texto, no lo hace.

La localización está traduciendo el software a diferentes idiomas, esto es difícil y costoso, un buen comienzo es nunca codificar cadenas de caracteres y nunca construir oraciones de cadenas más pequeñas.

1

Algunas preguntas a piensan acerca ...

Cómo partido puede permitirse el lujo de retrasar el envío de la versión en Inglés de su aplicación para ahorrar un poco de costo internacionalizar más adelante?

¿Seguirás operando si no obtienes el flujo de efectivo del envío rápido de la versión en inglés?

¿Cómo va a obtener la interfaz de usuario correcta, si no recibe retroalimentación rápidamente de algunos clientes al respecto?

¿Con qué frecuencia volverá a escribir la interfaz de usuario antes de tener que internacionalizarla?

¿Sus clientes en inglés desean poder personalizar cadenas en la interfaz de usuario, p. no todo el mundo llama una "nota de envío" del mismo modo.

Como una parte importante del dolor de la internacionalización es asegurarse de no romper la versión en inglés, ¿la prueba de sistema automatizada de la interfaz de usuario es una mejor inversión?

La única cosa que creo que siempre voy a hacer es: “No utilice cadenas compuestas que se construyen en tiempo de ejecución a partir de frases concatenadas” y si lo hace, no difundir el código que se acumula la una cadena única sobre muchos métodos.

Tener su interfaz de usuario automáticamente cambiar el tamaño (y el diseño) para hacer frente a la longitud de las etiquetas, etc. le ahorrará mucho tiempo en los últimos años si puede hacerlo a bajo costo. Hay muchos juegos de control de terceros para formularios de Windows que le permiten etiquetar cuadros de texto, etc., sin tener que poner las etiquetas como controles separados.

Estoy empezando a internacionalizar una aplicación de WinForms, esperamos poder utilizar el "nombre" de cada control como la clave de búsqueda, sin tener que mover muchos archivos de recursos, etc. No siempre es tan difícil como piensas al principio ...

Cuestiones relacionadas