Pergunta

Um amigo meu está agora a construção de uma aplicação web com J2EE e Struts, e vai ser preparado para exibir páginas em vários idiomas.

Foi-me dito que a melhor maneira de apoiar um site em vários idiomas é usar um arquivo de propriedades onde você armazenar todas as cadeias de suas páginas, algo como:

welcome.english = "Welcome!"
welcome.spanish = "¡Bienvenido!"
...

Esta solução é ok, mas o que acontece se o site apresenta notícias ou algo assim (blog)?Quero dizer, o conteúdo que não é estático, que é atualizado com frequência...As pessoas que mantêm o site tem que escrever a cada nova entrada em cada idioma com suporte, e armazene cada versão de entrada no banco de dados.O aplicativo carrega apenas as entradas do usuário do idioma escolhido.

Como projetar o banco de dados para suportar este tipo de aplicação?

Obrigado.

Foi útil?

Solução

Como eu ter projetado o banco de dados antes de ter Notícias-tabela contendo informações básicas como NewsID (int), NewsPubDate (datetime), NewsAuthor (varchar/int) e, em seguida, ter uma tabela vinculada NewsText que tem estas colunas:NewsID(int), NewsText(texto), NewsLanguageID(int).E por último, você tem uma tabela que tem LanguageID(int) e LanguageName(varchar).

Então, quando você quiser mostrar o seu blog a notícia-página você fazer:

SELECT NewsText FROM News INNER JOIN NewsText ON News.NewsID = NewsText.NewsID
WHERE NewsText.NewsLanguageID = <<Session["UserLanguageID"]>>

Que Sessão de bits é uma variável local onde armazenar o idioma de usuários quando eles fizerem logon ou entra no site pela primeira vez.

Outras dicas

Aviso:Eu não sou um java hacker, então YMMV mas...

O problema com o uso de uma lista de "propriedades" é que você precisa de muita disciplina.Cada vez que você adicionar uma cadeia de caracteres que deve ser a saída para o usuário que você vai precisar para abrir o seu arquivo de propriedades, olhar para ver se a seqüência de caracteres (ou algo mais ou menos equivalente a isso) já está no arquivo e, em seguida, ir e adicionar a nova propriedade, se ele não estiver.Em cima disto, você tinha que ter esperança do arquivo de propriedades foi bastante legível / editáveis, caso você queria dar para um externos equipe de tradução para lidar com eles.

O banco de dados baseado abordagem é útil para todas as suas base de dados de conteúdo.Idealmente, você quer torná-lo fácil para ligar peças de conteúdo em conjunto com a sua tradução.Ele só realmente cai para todos os lugares que você pode querer algo de saída que não de um banco de dados (mensagens de erro, etc.).

Uma bastante tecnologia antiga que encontramos ainda funciona muito bem, é utilizar o gettext.Gettext ou alguma variante parece estar disponível para a maioria dos idiomas e plataformas.A premissa básica é que você quebrar a sua saída em uma função especial chamada assim:

echo _("Please do not press this button again");

Em seguida, executando o gettext ferramentas através de seu código fonte irá extrair todas as instâncias empacotado como que em uma "nota de encomenda" do arquivo.Isto irá conter entradas, tais como:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr ""

E você pode adicionar a sua tradução para o local apropriado:

#: myfolder/my.source:239
msgid "Please do not press this button again"
msgstr "s’il vous plaît ne pas appuyer sur le bouton ci-dessous à nouveau"

Subseqüentes execuções do gettext ferramentas de simplesmente atualizar seus arquivos po.Você não precisa extrair o arquivo po a partir de sua fonte.Se você sabe que você pode deseja traduzir seu site para baixo da linha e, em seguida, você pode apenas usar o formato mostrado acima (os sublinhados função) com todos os seus saída.Se você não fornecer um arquivo po ele só vai retornar tudo o que você colocar nas citações.gettext é projetado para trabalhar com as localidades de forma que os usuários região é usado para recuperar o apropriado arquivo po.Isto torna muito fácil adicionar novas traduções.

Gettext Prós

  • Não ficar em seu caminho durante a codificação
  • Muito fácil adicionar traduções
  • Arquivos PO, pode ser compilado para baixo para velocidade
  • Existem bibliotecas disponíveis para a maioria das linguagens / plataformas
  • Existem boas ferramentas de plataforma cruzada para lidar com as traduções.Na verdade, é possível obter a sua equipe de tradução, com uma ferramenta como o poEdit para torná-lo muito mais fácil para eles para gerenciar projetos de tradução

Gettext Contras

  • Resolve o seu site "móveis" necessidades, mas normalmente seria ainda quer um banco de dados baseado abordagem para o seu banco de dados de conteúdo dirigido

Para mais informações sobre gettext ver esta página da wikipédia

Java web com suporte a aplicações de internacionalização utilizando a java standard tag library.

Você tem 2 problemas.Conteúdo estático e dinâmico.

para conteúdo estático, você pode usar jstl.Ele usa java ResourceBundles para fazer isso.Eu consegui chegar a um Databased feito bundle trabalhando com a ajuda deste site.

O segundo problema é o conteúdo dinâmico.Para resolver este problema, você vai precisar para armazenar os dados, de modo que você pode obter diferentes traduções com base na Localidade do usuário.(Localidade inclui País e Idioma).

Não é trivial, mas é algo que você pode fazer com um pouco de planejamento frente.

@Auron

isso é o que nós aplicá-lo.Nossos aplicativos são todos PHP, mas gettext tem uma longa herança.

Parece que há uma bom implementação em Java

Tag libraries, são bem se você está usando JSP, mas você também pode conseguir I18N usando um modelo baseado em tecnologia, tais como FreeMarker.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top