@somekind Mam wrażenie, że czepiasz/czepiamy się słówek, więc spróbuję przedstawić cały pomysł nieco dokładniej.
Problem polega na odpowiedzi na pytanie jaki jest właściwy sposób na utrzymywanie 2 wersji językowych aplikacji. Z mojego doświadczenia, najlepszym sposobem jest posiadanie 1 gałęzi kodu będącej w stanie obsłużyć oba języki. To, który język jest obsługiwany w danej chwili przychodzi z zewnątrz (konfiguracja). Autor pytanie nie napisać czym te wersje mają się różnić. Jeżeli chodzi tylko o interface użytkownika, to jest od groma gotowych rozwiązań pozwalających wstawić odpowiednie wartości. Czasami może wystąpić jeszcze:
- Inna logika biznesowa, bo np. w jednym kraju RSSO liczy się wg. innego wzoru, albo system ma rozpoznawać tablice rejestracyjne wg. innego schematu
- Inny zestaw funkcji (bo np. rozpoznawanie twarzy gdzieś jest zabronione.
Oba punkty powinny być rozwiązane na tej samej gałęzi kodu, a informacja o tym, która opcja akurat jest wybrana powinna być definiowana nie w kodzie typu public static final String FLAVOUR = "PL"
, tylko wstrzykiwana z zewnątrz - parametr command line, plik konfiguracyjny, zmienna środowiskowa osobny micro service z konfiguracją, systemowe locale - nie wiem bo konkretnie się sprawdzi w tym przypadku.
W kodzie aplikacji albo będziemy mieli ileś tam if...then
, albo można wyciągnąć specyficzne dla języka fragmenty do osobnych bibliotek/modułów/usług (nie wiem w czym to jest pisane, więc nie odpowiem dokładnie). Te kawałki kodu mogą być wstrzykiwane albo runtime, albo build time z CI. Też nie powiem co jest lepsze, bo nie wiem nawet czy to aplikacja desktop, czy rozproszony system działający w kontenerach.
Podsumowując, możliwe są 2 podejścia, albo wszystko załatwia kod, dostajemy pojedynczy zestaw artefaktów i za pomocą zewnętrznie podanego parametru / zestawu parametrów definiujemy które gałęzie kodu są właściwe dla tej instancji, albo zaprzęgamy do roboty CI, który zbuduje osobne artefakty skonfigurowane do działania w konkretnych sytuacjach.
Niezależnie od tego co zostaje wybrane, obowiązkowym punktem startu jest zrobienie dokładnej analizy czym mają się różnić te instancje, bo jak zwykle, wybór narzędzi powinien zależeć od tego co ma zostać zrobione.