finalmente llegamos en torno a la implementación de informe de localización. La carga de Crystal Reports ya es la parte más lenta/peor de la experiencia del usuario en nuestra aplicación, por lo que queríamos evitar cualquier impacto en el rendimiento. La otra idea que informó nuestra decisión fue que las traducciones no cambiarán dentro de un lanzamiento enviado.
Desarrollamos una aplicación que utiliza la API de Crystal Reports (2008, por lo que no hay RDC) y funciona en dos fases.
La primera fase es raspar todo el texto y la salida a un archivo inglés .resx. La parte más difícil de esto es identificar texto traducible dentro de funciones y reemplazar campos incrustados con tokens que indican "no traducir".
Después de que vuelven las versiones localizadas del resx, la segunda fase de la aplicación toma cada informe junto con cada resx y guarda nuevos informes con inglés reemplazado por texto traducido. Esto también nos permitió cambiar las fuentes solo en informes japoneses a MS Gothic, evitando así la necesidad de licenciar una fuente "universal". Los caracteres japoneses en fuentes "universales" (por ejemplo, Arial Unicode MS) tienden a parecer basura.
La Crystal API es bizantina, y debe tener cuidado con los casos de borde alrededor de la detección de cadenas traducibles dentro de funciones y campos incrustados.Tenga cuidado con los campos integrados como PageNofM, no están encerrados entre llaves (sin mencionar que debe reemplazar esto con la página {campo} de {campo} para que se pueda traducir "página" y "de"). Un puntero, use los controladores para reemplazar los elementos existentes con copias clonadas/modificadas, no puede simplemente modificar el contenido de texto de los elementos en su lugar. Buena suerte si sigues esta ruta, pero al final creemos que es la mejor opción.
# 2 sería el uso de la RDC para escanear a través de cada campo de texto y reemplazar con texto localizado? –
Sí, nunca lo he hecho, así que no estoy seguro de qué tipo de dolores de cabeza están involucrados. –
¿Qué opinas sobre un UFL que devuelve cadenas localizadas? Llamar a eso de cada campo de etiqueta sería un problema de rendimiento? –