Gran pregunta! Yo tengo exactamente el mismo problema; mis constantes son esencialmente: qué idiomas son compatibles con mis aplicaciones e información adicional sobre esos idiomas en lo que respecta a la funcionalidad de la aplicación.
Desafortunadamente, lo mejor que he encontrado (como lo has hecho) es simplemente redefinir las constantes para cada idioma, como lo estás haciendo actualmente (lo sé, definitivamente querías escuchar eso ).
Obviamente se siente mal porque es lo contrario de DRY ( WET ?? ). Sin embargo, las constantes deben cambiar con tan poca frecuencia que los 5-10 minutos de redefinirlas para cada idioma realmente no me molestan. Al final del día, los pequeños problemas con alguna solución 'elegante' como la configuración compartida o la generación de código podrían tardar horas o días en resolverse, entonces, ¿qué se gana realmente? La complejidad añadida con el riesgo de que algo salga mal que podría requerir un esfuerzo adicional para solucionarlo no es algo con lo que quiera tratar.
Además, si su aplicación tiene tantas constantes que redefinirlas por idioma cuando las agrega o cambia toma una cantidad de tiempo considerable, es posible que tenga que lidiar con un olor a código más significativo y, en ese momento, es posible que desee cambiar a algo más complejo
En resumen, redefinirlos para cada idioma ha sido mi mejor solución, y todavía tengo que pensar en algo más SECO que no tenga más factor de riesgo del que quiero tratar.
Sin embargo, una cosa que debe hacer definitivamente es asegurarse de que sus constantes estén bien documentadas de manera generalizada (y agnóstica del lenguaje) (tenemos un repositorio de documentación de la compañía con especificaciones, documentos misceláneos, documentos de 'tablero de dibujo', etc., donde guardamos este documento). También asegúrese de tener mecanismos establecidos para mantener sus definiciones sincronizadas. Eso es un problema tan grande con el enfoque de duplicación como lo tendrá, excepto por una pequeña cantidad de angustia psicológica por la duplicación intencional de código. Pero al final, sus cambios constantes deberían ser muy deliberados e infrecuentes , por lo que los problemas de sincronía deberían ser esencialmente nulos.
También debo mencionar que a lo largo de los años, he visto puertos en varios idiomas de varias bibliotecas (demasiado cansados para recordar lo que son en este momento) escritos por el mismo grupo que invariablemente tienen constantes definidas en los propios idiomas. Sin configuración compartida, sin generación de código (excepto para las bibliotecas de cliente API de Google ... pero vamos, Google tiene los recursos para permitirse tal complejidad). Así que creo que hemos golpeado una pared de ladrillos en este caso. Quizás alguien finalmente encuentre una biblioteca para tratar este problema;)