Pregunta

Tengo que crear una aplicación GUI en Windows Mobile, y me gustaría que el usuario pueda elegir el idioma que desea, o que la aplicación elija el idioma automáticamente. Considero usar múltiples dlls que contengan solo los recursos necesarios.

1) ¿Cuál es la forma preferida (predeterminada) de hacer que la aplicación elija el idioma de recursos adecuado automáticamente, sin intervención del usuario? ¿Alguna muestra?

2) ¿Cuáles son mis opciones para permitir que el usuario / aplicación controle qué idioma debe mostrar?

3) Si es posible, ¿cómo creo un archivo dll que contenga múltiples recursos de idioma y luego elija dinámicamente el idioma?

¿Fue útil?

Solución

Para el n. ° 1, puede usar la función GetSystemDefaultLangID para obtener el identificador de idioma para la máquina.

Para el n. ° 2, puede enumerar los idiomas que admite y, cuando el usuario seleccione uno, escriba la selección en un archivo de texto o registro (¿hay un registro en Windows Mobile?). Al inicio, use la función en el n. ° 1 solo si no hay una selección en el archivo o registro.

Para el n. ° 3, la forma en que lo hacemos es tener una DLL de recursos por idioma, cada una de las cuales contiene los mismos ID de recursos. Una vez que descubra el idioma, cargue la DLL para ese idioma y el resto simplemente funciona.

Otros consejos

Re 1: La sugerencia anterior de GetSystemDefuaultLangID es buena.

Re 2: puede preguntar como primer paso en su instalación. O puede empaquetar diferentes instaladores para cada idioma.

Re 3: En teoría, el método DLL mencionado anteriormente suena muy bien, sin embargo, en la práctica no funcionó muy bien para mí personalmente.

Un método mejor es rodear todas las cadenas de su programa con: Localize o NoLocalize.

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

Localizar es solo una función que convierte su texto en inglés al idioma seleccionado. NoLocalize no hace nada.

Sin embargo, desea rodear sus cadenas con estos valores porque puede construir un par de scripts útiles en el lenguaje de scripts que elija.

1) Un script que busca todos los prefijos Localize (" y genera un archivo .ini con pares de valores de nombre english = otherlangauge. Si el archivo .ini de salida ya contiene una asignación, no lo agregue de nuevo. Nunca vuelve a crear el archivo ini por completo, su script solo agrega los que faltan cada vez que ejecuta su script.

2) Un script que busca todas las cadenas y se asegura de que estén rodeadas por Localize (" o NoLocalize (". Si no, le indica qué cadenas aún necesita localizar.

La razón # 2 es importante porque necesita asegurarse de que todas sus cadenas estén marcadas conscientemente como necesitadas de localización o no. De lo contrario, es absolutamente imposible asegurarse de tener una localización adecuada.

La razón para el n. ° 1 en lugar de cargar desde un archivo DLL es porque no requiere trabajo mantener esta solución y puede agregar nuevas cadenas que deben traducirse sobre la marcha.

Usted envía los archivos ini que salen con su programa. También da estos archivos ini a sus traductores para que puedan convertir los pares english = otherlanguage. Cuando se lo devuelvan, simplemente reemplace su archivo .ini registrado con el que le proporcionó su traductor. Ejecutar su secuencia de comandos como se menciona en el n. ° 1 volverá a agregar las traducciones faltantes si se realizó alguna mientras el traductor estaba traduciendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top