Grande question! J'ai exactement le même problème; mes constantes sont essentiellement: quelles langues sont prises en charge dans mes applications, et des informations supplémentaires sur ces langues en ce qui concerne les fonctionnalités de l'application.
Malheureusement, la meilleure chose que j'ai trouvée (comme vous l'avez) est de simplement redéfinir les constantes pour chaque langue, comme vous le faites actuellement (je sais, vous vouliez certainement entendre cela ).
Évidemment, ça ne va pas parce que c'est l'opposé de SEC ( MOUILLÉ ?? ). Cependant, les constantes devraient changer si rarement que les 5-10 minutes de les redéfinir pour chaque langue ne me dérangent pas vraiment. À la fin de la journée, de petits problèmes avec une solution «élégante» comme la configuration partagée ou la génération de code peuvent prendre des heures ou des jours à résoudre, alors qu'est-ce qui est vraiment gagné? La complexité supplémentaire avec le risque de quelque chose qui ne va pas et qui pourrait prendre des efforts supplémentaires pour réparer n'est pas quelque chose que je veux traiter.
De plus, si votre application a tellement de constantes que les redéfinir par langue lorsque vous les ajoutez ou les changez prend beaucoup de temps, vous pourriez simplement avoir une odeur de code plus importante à gérer et, à ce stade, vous voudrez peut-être activer à quelque chose de plus complexe.
Donc, en bref, les redéfinir pour chaque langue a été ma meilleure solution, et je n'ai pas encore pensé à quelque chose de plus SEC qui n'aurait pas plus de facteur de risque que je veux traiter.
Une chose à vraiment faire, cependant, est de faire en sorte que vos constantes sont bien documentées dans une généralisée (et agnostique de langue) manière (nous avons une prise en pension de documentarion de l' entreprise avec des spécifications, documents divers, « planche à dessin » docs, etc. où nous gardons ce document). Assurez-vous également que des mécanismes sont en place pour synchroniser leurs définitions. C'est à peu près aussi gros problème avec l'approche de duplication que vous aurez, à l'exception d'une petite quantité de détresse psychologique due à la duplication intentionnelle de code. Mais au final, vos changements constants devraient être très délibérés et peu fréquents , donc les problèmes de synchronicité devraient être essentiellement nuls.
Je dois également mentionner qu'au fil des ans, j'ai vu des ports multilingues de diverses bibliothèques (trop fatigués pour se souvenir de ce qu'ils sont en ce moment) écrits par le même groupe qui ont invariablement des constantes définies dans les langues elles-mêmes. Pas de configuration partagée, pas de génération de code (sauf pour les bibliothèques clientes de l'API Google ... mais allez, Google a les ressources pour permettre une telle complexité). Je pense donc que nous avons frappé un mur de briques sur celui-ci. Peut-être que quelqu'un finira par trouver une bibliothèque pour résoudre ce problème;)