Localização (i18n) com inicialização Spring com dados no banco de dados

5

Estou escrevendo um aplicativo Spring boot com Thymeleaf , que deve suportar dois idiomas (ou mais). Eu configurei o resolvedor de localidade e o messages.properties, então agora meu aplicativo pode traduzir mensagens estáticas na alteração de localidade.

O problema é, porque há alguns dados no meu banco de dados MySQL que possuem texto (por exemplo, descrição de um produto). Eu precisaria que esses dados fossem traduzidos também.

Então, minha pergunta é: qual é a melhor abordagem para isso? Duplicar todas as entradas, ter duas tabelas, ter dois aplicativos separados para cada idioma?

    
por Miha Jamsek 22.09.2017 / 18:24
fonte

1 resposta

1

Consegui resolver o problema sozinho:

Primeiro, criei entidades:

Produto (id, nome, preço, descrição)

Idioma (id, lang)

Product_t (id, prod_id, lang_id, nome, descrição)

então eu criei a função no banco de dados:

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

Esta função ordena minhas traduções pela primeira localidade especificada (se null for padrão) e se isso estiver faltando na ordem definida (inglês (2), esloveno (1), alemão (3))

Em seguida, no meu repositório, em vez de usar a função findAll () padrão do JPA, defini minha própria consulta:

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

onde @lang é meu argumento passado (locale lido do cookie)

O que então criou lista com entidades Produto, onde nome e descrição foram traduzidos.

    
por 22.09.2017 / 23:04
fonte