Esto es un poco una pregunta general, abierta a las opiniones. He estado tratando de encontrar una buena forma de diseñar para la localización de recursos de cadena para una aplicación Windows MFC y utilidades relacionadas. Mi lista es:La mejor manera de diseñar para la localización de cadenas
- debe preservar los literales de cadena en el código (en oposición a la sustitución con recursos #define macro ID), por lo que los mensajes están todavía en línea legible
- deben permitir que los recursos cadena localizada (la)
- no debe imponer restricciones adicionales entorno de ejecución (por ejemplo: la dependencia de .NET, etc.)
- debería haber intromisión mínima en el código existente (la modificación de menos, mejor)
- Debe ser depurable
- debe generar archivos de recursos que son editables por herramientas comunes (es decir: formato común)
- no deben utilizar bloques de copiar/pegar comentario para preservar las cadenas literales en el código, o cualquier otra cosa que crea el potencial para la desincronización
- Would sea agradable permitir la comprobación estática (en tiempo de compilación) de que cada cadena "anotada" está en los archivos de recursos
- Sería bueno permitir la agrupación de cadenas de recursos entre idiomas (para componentes en varios idiomas, p. ej .: C++ nativo) y .NET)
Tengo una manera que cumple con todos mis deseos hasta cierto punto, excepto para la comprobación estática, pero tengo h ad para desarrollar un poco de código personalizado para lograrlo (y tiene limitaciones). Me pregunto si alguien ha resuelto este problema de una manera particularmente buena.
Editar: La solución actualmente tengo es el siguiente:
ShowMessage(RESTRING(_T("Some string")));
ShowMessage(RESTRING(_T("Some string with variable %1"), sNonTranslatedStringVariable));
entonces tengo una utilidad personalizado para analizar las cadenas de dentro bloquea el 'encordar' y ponerlas en un archivo .resx para localización, y un objeto COM C# separado para cargarlos desde archivos de recursos localizados con repliegue. Si el objeto C# no está disponible (o no se puede cargar), recurro a la cadena en el código. La macro se expande a una clase de plantilla que llama al objeto COM y realiza el formateo, etc.
De todos modos, pensé que sería útil agregar lo que tengo ahora como referencia.
¿Has descubierto una forma de hacerlo sin reemplazar cadenas en el código con los ID de recursos? Lo que estás describiendo suena como el método coloquial, que ciertamente puede funcionar, pero no es realmente lo que estoy buscando. – Nick
No, no codificamos cadenas en nuestras aplicaciones. Lo que sí vemos es una constante descriptiva que se relaciona con la identificación del recurso. – BoltBait