Pergunta

Eu estou indo para o trabalho em um projeto onde uma bastante grande aplicação web precisa ajustada para lidar com várias línguas. A coisa corre com uma mão trabalhada código PHP, mas é muito limpo.

Eu queria saber qual seria a melhor maneira de fazer isso?

  1. Fazer algo por conta própria, tentando encaixar a arquitetura real.

  2. Reescrevendo uma boa parte dela usando uma estrutura (por exemplo, Symfony) que irá gerir i18n para mim?

Para a opção 1, onde devo armazenar os dados de i18n? * .Po, xliff, DB puro?

Eu pensei sobre uma alternativa: usando Symfony apenas para a tradução, mas a definição do controlador para carregar o site o que já é. Breve, mas sujo. Por outro lado, permite-nos fazer a seguinte modificação, movendo-se lentamente para a plena Symfony:. Este site é realmente um bom candidato para que

Mas talvez existam alguns mecanismos de tradução independente que iria fazer o trabalho melhor do que um framework web inteira. É um pouco como o uso de uma bazuca para matar uma mosca ...

Foi útil?

Solução

Há uma série de formas de combater isso. Nenhum deles "a melhor maneira" e todos eles com problemas a curto prazo ou a longo prazo. A primeira coisa a dizer é que múltiplos locais linguais não são fáceis, tradutores e pessoas adoráveis, mas difícil de trabalhar e a maioria dos programadores ver o problema como só uma questão técnica. Há também uma outra dimensão, fora do âmbito desta resposta, quanto a saber se você está traduzindo ou localizando. Isso envolve olhar para os públicos-alvo costumes culturais e, em seguida, adaptando a linguagem, estilo, layout, cor, tipo de letra etc., para que a cultura. Finalmente, não use MT, Machine Translation, para qualquer coisa séria ou se ele precisa ser preciso e na aquisição de tradutores garantir que eles estão traduzindo de uma língua estrangeira em sua língua nativa que significa que eles entendem todas as nuances da língua-alvo.

Right. Soluções. Com base no que você não quer reescrever o site, então simplesmente clone do site que você tem e traduzir as cópias para a língua-alvo. Assumindo que o código base é estável você pode usar um VCS para gerenciar quaisquer alterações no código. Você pode ajustar partes individuais do site para caber a língua-alvo, por exemplo, texto francês é, em média, 30% maior do que o texto em Inglês equivalente isso usando um site para entregar isto significa que você pode (vai) ter formatação problemas e precisa trocar um css diferente dentro e fora, dependendo do idioma. Pode parecer uma forma complicada de fazer isso, mas, em seguida, quanto tempo são os locais vão existir? A sobrecarga de fazê-lo desta forma de gestão pode muito bem ser menos do que outras opções.

A segunda maneira sem reconstruir. Substituir todo o conteúdo do site atual com tags e, em seguida, colocar o idioma diferente em tabelas de arquivo ou db, farejar os usuários idioma desejado (Você tem usuários que podem fazer uma preferência ou você deseja obter a marca de idioma do navegador registrado, ou é que vai ser URL dot-dot-fr, ponto-de que fazer a escolha) e, em seguida, substituir as marcas com a língua-alvo. Então você precisa para resolver os problemas de dimensionamento e as questões de imagem separadamente. Esta solução está em vigor quando frameworks como Symfony e Zend fazer para implementar l10n.

Em seguida, você pode reconstruir com um quadro ou com gettext e, eventualmente, ter uma solução mais limpa, mas lembre-estruturas foram projetados para resolver outros problemas, não tradução e o componente de tradução veio ao quadro como solução parcial não o total.

O grande problema com todas as soluções é a manutenção contínua. Porque não só você tem uma base de código, mas também múltiplas bases de linguagem de manter. A menos que tudo o que você em uma única solução é realmente inteligente e eficaz, em seguida, a tarefa contínua vai ser difícil.

Outras dicas

Trabalhar com arquivos de idiomas.

  1. Substitua cada seqüência de texto por uma variável
  2. Criar um arquivo de idioma para cada idioma e nele definir cada variável com o texto correspondente. (French.inc, dutch.inc ...)
  3. Incluir o arquivo certo em cada página.

Isso é para pequenos sites.

Se ficando maior, substituir os arquivos por um DB. :)

É importante notar que há duas etapas envolvidas antes de traduzir:

  1. Internacionalização: isto é, permitindo que o seu site para lidar com vários idiomas
  2. Localização: isto inclui traduzir seus textos (obtidos no passo 1) para cada idioma que você pretende suporte

Veja mais sobre isso na Wikipedia .

Passo 1 exigiria que você levar em conta o fato de que algumas línguas são escritas da direita para a esquerda (RTL) e caracteres não-europeus, como japonês ou chinês. Se você não estiver planejando para lidar com esses idiomas e caracteres que poderia ser mais simples.

Para este tipo de situação que eu preferiria ter um arquivo de idioma (na verdade, como muitos arquivos de idiomas como línguas que eu plano para apoiar, nomeando cada um como langcode.php como em en.php ou fr.php) com uma matriz associativa contendo todos os textos usados ??na local. O procedimento iria a seguinte:

  1. Analise o seu local para cada texto único que deve ser localizada
  2. Para cada página / seção eu iria criar uma matriz $lang['sectionname'][]
  3. Para cada texto que eu iria criar uma entrada $lang['sectionname']['textname']
  4. eu iria criar uma classe Lang.php que iria receber um parâmetro lang sobre instanciação, mas teria um padrão no caso de não lang é recebido (este método cargas langcode.php dependendo do parâmetro ou um padrão dependendo do seu idioma preferido)
  5. A classe teria um método setPage() que receberia a página / seção você vai estar exibindo
  6. A classe teria um método show() que receberia o texto a ser exibido (show() seria chamado tantas vezes quanto textos são mostrados em uma determinada página ... show() sendo uma espécie de invólucro para echo $lang['mypage']['mytext'])

Desta forma, você pode ter tantas línguas quanto você quer de uma forma muito fácil. Você poderia mesmo ter um administrador de linguagem onde você abre sua página idioma base (você realmente acabou de ler recursivamente as matrizes e exibi-los em textareas) e pode, então, "Salvar como ..." alguma outra língua.

Eu uso uma abordagem semelhante em meu site . É apenas uma página embora, mas eu fiz sites de várias páginas com esta idéia.

Se você tiver conteúdo enviado pelo usuário ou alguns CMS bastante complicado seria uma história diferente. Você pode olhar para os quadros-friendly i18n (Drupal vem à mente).

Você pode olhar para Zend_Translate , é um bastante abrangente, bem documentado e qualidade geral do código é grande. Ele também permite que você use uma API unificada para gettext, CSV, db, ini, array ou o que você acabar salvando suas mensagens traduzidas em.

Além disso, olhada / assistir a este tópico: Quais são boas ferramentas / frameworks para i18n de um php base de código? . Parece semelhante à sua pergunta.

Se é o suporte a caracteres de vários bytes, então pode valer a pena conferir as funções de string multibyte no PHP:

http://uk.php.net/manual/en/book .mbstring.php

Estes irão lidar melhor com caracteres multi-byte.

Eu uso o parâmetro hl e gettext combinando traduções motor já está lá com o próprio .po que faz novas traduções e idiomas aparecem quando o motor ou o meu django / GAE exemplo acrescenta:

{% get_current_language as LANGUAGE_CODE %}{{ LANGUAGE_CODE }}{% get_available_languages as LANGUAGES %}{% for LANGUAGE in LANGUAGES %}{% ifnotequal LANGUAGE_CODE LANGUAGE.0 %}{{ LANGUAGE.0 }}{% endifnotequal %}{% endfor %}

Então, mantendo a partir de duplicatas e usar plenamente traduções já lá vamos adiante aqui os desaparecidos por exemplo, os nomes dos meses árabe para aparecer diretamente, quer quando a equipe motor adiciona ou aplicativo

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