Ottima domanda! Ho lo stesso identico problema; le mie costanti sono essenzialmente: quali sono le lingue supportate nelle mie applicazioni e ulteriori informazioni su quelle lingue che riguardano le funzionalità nell'app.
Sfortunatamente, la cosa migliore che ho trovato (come hai) è semplicemente ridefinire le costanti per ogni lingua, come stai facendo attualmente (lo so, hai sicuramente voluto sentirlo ).
Ovviamente sembra sbagliato perché è l'opposto di DRY ( WET ?? ). Tuttavia, le costanti dovrebbero cambiare così raramente che i 5-10 minuti di ridefinizione per ciascuna lingua non mi infastidiscono. Alla fine della giornata, piccoli problemi con una soluzione "elegante" come la configurazione condivisa o la generazione del codice potrebbero richiedere ore o giorni per risolverlo, quindi cosa si ottiene veramente? La complessità aggiunta con il rischio che qualcosa vada storto e che possa richiedere ulteriori sforzi per risolvere non è qualcosa che voglio affrontare.
Inoltre, se la tua applicazione ha così tante costanti che ridefinendole per lingua quando le aggiungi o le cambia richiede una quantità significativa di tempo, potresti avere un odore di codice più significativo da trattare e, a quel punto, potresti vuoi passare a qualcosa di più complesso.
Quindi in breve, ridefinirli per ciascuna lingua è stata la mia soluzione migliore, e devo ancora pensare a qualcosa di più ASCIUTTO che non avrebbe più un fattore di rischio di quello che vorrei affrontare.
Una cosa per sicuramente , tuttavia, è assicurarsi che le tue costanti siano ben documentate in modo generalizzato (e linguistico agnostico) (abbiamo un repository documentarion aziendale con specifiche, documenti vari, documenti "da tavolo" ecc. dove conserviamo questo documento). Assicurati anche di avere meccanismi in atto per mantenere sincronizzate le loro definizioni. Si tratta di un grosso problema con l'approccio alla duplicazione, a parte una piccola quantità di stress psicologico dovuto alla duplicazione intenzionale del codice. Ma alla fine, i tuoi cambiamenti costanti dovrebbero essere deliberati e rari , quindi i problemi di sincronicità dovrebbero essere essenzialmente nulli.
Devo anche menzionare che nel corso degli anni ho visto porte multilingue di varie librerie (troppo stanche per ricordare quello che sono al momento) scritte dallo stesso gruppo che invariabilmente hanno costanti definite nelle lingue stesse. Nessuna configurazione condivisa, nessuna generazione di codice (eccetto per le 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 troverà una libreria per affrontare questo problema;)