Jeśli chodzi o bazę danych, zrób sobie coś takiego:
CREATE TABLE "BIRDS"
( "ID" NUMBER,
"WEIGHT" NUMBER(6,2)
);
CREATE TABLE "BIRDS_NAME"
( "ID" NUMBER,
"BIRDS_ID" NUMBER,
"NAME" VARCHAR2(30),
"LANGUAGE" VARCHAR2(2)
);
ALTER TABLE "BIRDS_NAME" ADD CONSTRAINT "BIRDS_NAME_FK1" FOREIGN KEY ("BIRDS_ID")
REFERENCES "BIRDS" ("ID") ON DELETE CASCADE ENABLE
Insert into BIRDS (ID,WEIGHT) values ('1','2,5');
Insert into BIRDS (ID,WEIGHT) values ('2','3');
Insert into BIRDS_NAME (ID,BIRDS_ID,NAME,LANGUAGE) values ('1','1','kura','PL');
Insert into BIRDS_NAME (ID,BIRDS_ID,NAME,LANGUAGE) values ('2','1','chicken','EN');
Insert into BIRDS_NAME (ID,BIRDS_ID,NAME,LANGUAGE) values ('3','2','kaczka','PL');
Insert into BIRDS_NAME (ID,BIRDS_ID,NAME,LANGUAGE) values ('4','2','duck','EN');
Czyli dodatkowa tabela, która trzyma nazwy w różnych językach. Możesz wyciągać teraz ptaki takim zapytaniem:
SELECT b.id, bn.name, b.weight
FROM birds b
INNER JOIN birds_name bn
ON b.id = bn.birds_id
WHERE UPPER(bn.language) = 'PL';
ID NAME WEIGHT
---------- ------------------------------ ----------
1 kura 2,5
2 kaczka 3
Zmieniasz tylko wartość języka w klauzuli WHERE.
Zaletą tego rozwiązania jest to, że przy dodawaniu kolejnego języka dodajesz tylko rekordy w tabeli językowej. Przy Twoim rozwiązaniu musiałbyś pewnie zmieniać wszędzie kod, a wtedy idzie się powiesić.
Sam decydujesz, czy użytkownik może edytować wartości w tabeli językowej.
Co do springa, wielojęzycznego frontu, to poszukaj spring thymeleaf internationalization
, nie mam w tym doświadczenia, ale zapewne sprowadza się to do plików językowych .properties
z odpowiednim przyrostkiem.