Localizzazione (i18n) con avvio a molla con dati nel database

5

Sto scrivendo un'app Spring boot con Thymeleaf , che dovrebbe supportare due lingue (o più). Ho impostato il resolver locale e messages.properties, quindi ora la mia app può tradurre messaggi statici sul cambio di impostazioni locali.

Il problema è che alcuni dati nel mio database MySQL contengono del testo (ad esempio, la descrizione di un prodotto). Avrei bisogno di tradurre anche questi dati.

Quindi, la mia domanda è, qual è l'approccio migliore per questo? Duplica tutte le voci, hai due tabelle, hai due app separate per ogni lingua?

    
posta Miha Jamsek 22.09.2017 - 18:24
fonte

1 risposta

1

Sono riuscito a risolvere il problema da solo:

In primo luogo, ho creato entità:

Prodotto (id, nome, prezzo, descrizione)

Lingua (id, lang)

Product_t (id, prod_id, lang_id, name, description)

poi ho creato la funzione sul database:

FUNCTION 'getLangOrder'(language INTEGER, locale varchar(5)) RETURNS int(11)
BEGIN
    case language 
        when (select id from language where lang=locale) then return 1; 
        when 2 then return 2;
        when 1 then return 3;
        else return 4;
    end case;
RETURN 5;
END

Questa funzione ordina le mie traduzioni prima specificando le impostazioni locali specificate (se il valore predefinito è zero) e se ciò non è presente nell'ordine definito (inglese (2), sloveno (1), tedesco (3))

Poi nel mio repository invece di usare la funzione predefinita findAll () di JPA ho definito la mia query:

select p.id
, ifnull((select t.description 
                  from product_t t where t.prod_id = p.id 
                  order by getLangOrder(lang_id, @lang) limit 1)
          , p.description 
  ) as description 
, ifnull((select t.name 
                 from product_t t where t.prod_id = p.proj_id 
                 order by getLangOrder(lang_id, @lang) limit 1)
          , p.name
  ) as name
, p.price 
from product p

dove @lang è il mio argomento passato (locale letto dal cookie)

Che poi ha creato un elenco con entità Prodotto, dove il nome e la descrizione sono stati tradotti.

    
risposta data 22.09.2017 - 23:04
fonte

Leggi altre domande sui tag