Ottima domanda! Ho lo stesso problema esatto; le mie costanti sono essenzialmente: quali lingue sono supportate nelle mie applicazioni e informazioni aggiuntive su quelle lingue in relazione alla funzionalità nell'app.
Sfortunatamente, la cosa migliore che ho trovato (come hai fatto) è semplicemente ridefinire le costanti per ogni lingua, come stai facendo attualmente (lo so, sicuramente lo volevi sentire ).
Ovviamente sembra sbagliato perché è l'opposto di DRY ( WET ?? ). Tuttavia, le costanti dovrebbero cambiare così raramente che i 5-10 minuti di ridefinirle per ogni lingua non mi disturbano davvero. Alla fine della giornata, piccoli problemi con una soluzione "elegante" come la configurazione condivisa o la generazione di codice potrebbero richiedere ore o giorni per risolversi, quindi cosa si guadagna davvero? La complessità aggiunta con il rischio che qualcosa vada storto e che possa richiedere uno sforzo ulteriore per risolvere non è qualcosa che voglio affrontare.
Inoltre, se la tua applicazione ha così tante costanti che la ridefinizione per lingua quando le aggiungi o le cambi richiede un notevole lasso di tempo, potresti avere solo un odore di codice più significativo da affrontare e, a quel punto, potresti voler girare a qualcosa di più complesso.
Quindi, in breve, ridefinirle per ogni lingua è stata la mia soluzione migliore, e devo ancora pensare a qualcosa di più ASCIUTTO che non avrebbe più fattore di rischio di quello che voglio affrontare.
Una cosa da fare sicuramente , tuttavia, è quella di garantire che le costanti siano ben documentate in modo generalizzato (e indipendente dal linguaggio) (abbiamo un repository documentarion aziendale con specifiche, documenti vari, documenti "tavolo da disegno", ecc. Dove conserviamo questo documento). Assicurati inoltre di disporre di meccanismi per sincronizzare le loro definizioni. Questo è un problema tanto grande quanto l'approccio di duplicazione che avrai, ad eccezione di una piccola quantità di disagio psicologico dovuto alla duplicazione intenzionale del codice. Ma alla fine, i tuoi costanti cambiamenti dovrebbero essere molto deliberati e poco frequenti , quindi i problemi di sincronicità dovrebbero essere sostanzialmente nulli.
Devo anche ricordare che nel corso degli anni ho visto porte multilingue di varie biblioteche (troppo stanche per ricordare cosa sono al momento) scritte dallo stesso gruppo che invariabilmente hanno costanti definite nelle stesse lingue. Nessuna configurazione condivisa, nessuna generazione di codice (ad eccezione delle librerie client dell'API di Google ... ma dai, Google ha le risorse per permettersi tale complessità). Quindi penso che abbiamo colpito un muro di mattoni su questo. Forse qualcuno alla fine inventerà una biblioteca per affrontare questo problema;)