Pergunta

Estamos nos preparando para traduzir o nosso site PHP em várias línguas, e com o apoio gettext em PHP parece que o caminho a percorrer.

Todos os tutoriais que eu vejo recomendo usar o texto Inglês como o ID da mensagem, ou seja.

gettext ( "Olá!")

Mas isso é realmente uma boa idéia? Vamos dizer que alguém em marketing quer mudar o texto para "Olá, gente!". Então você não tem que atualizar todos os arquivos de linguagem, porque essa string - que na verdade é o ID da mensagem - mudou

?

É melhor ter algum tipo de genérico ID, como "hello.message", e um arquivo de traduções Inglês?

Foi útil?

Solução

Eu uso IDs significativas, tais como "welcome_back_1", que seria "welcome back, %1" etc. Eu sempre tenho Inglês como minha linguagem "base" assim no pior dos casos, quando um idioma específico não tem um ID de mensagem, eu caio -Back em Inglês.

Eu não gosto de usar frases reais ingleses como mensagem de ID é porque se o Inglês muda mesmo acontece com o ID. Isso não pode afetá-lo muito se você usar algumas ferramentas automatizadas, mas me incomoda. Eu não gosto de usar códigos simples (como msg3975) porque eles não fazem nada não significa, de modo a leitura do código é mais difícil se você não maca comentários em todos os lugares.

Outras dicas

Uau, eu estou surpreso que ninguém está defendendo usando o Inglês como uma chave. Eu usei esse estilo em um par de projetos de software, e IMHO que funcionou muito bem. A legibilidade do código é grande, e se você mudar uma cadeia Inglês torna-se óbvio que as necessidades de mensagem a ser considerado para re-tradução (que é uma coisa boa).

No caso que você está corrigindo única ortografia ou fazendo alguma outra mudança que definitivamente não exige tradução, é uma simples questão de atualizar os IDs para essa seqüência nos arquivos de recursos.

Dito isso, eu estou actualmente a avaliar se deve ou não levar esta maneira de fazer I18N para a frente para um novo projeto, por isso é bom ouvir algumas ideias sobre por que isso pode não ser uma boa idéia.

Eu discordo fortemente com Richard Harrison resposta sobre qual afirma que é "o único caminho". Caro autor da questão, não confie uma resposta que estados, é a única maneira, porque o "único caminho" não existe.

Aqui é uma outra maneira que IMHO tem algumas vantagens em relação a abordagem Richards:

  • Iniciar com o uso do proto-versão da seqüência de Inglês como original.
  • Não mostrar esses proto-cordas, mas criar um arquivo de tradução para Inglês nontheless
  • Copie os proto-cordas para a tradução para o início

Vantagens:

  • código legível
  • texto em seu código é muito próximo se não idêntico ao que seus visualização exibe
  • Se você quer mudar o texto em Inglês, você não mudar o proto-corda, mas a tradução
  • Se você quiser traduzir a mesma coisa duas vezes, basta escrever um proto-corda ligeiramente diferente ou apenas adicionar 'versão para isto e aquilo' e você ainda tem um código perfeitamente legível

A razão para as IDs sendo Inglês é para que o ID é devolvido se a tradução falhar por qualquer razão - a tradução para o idioma atual e Token não estar disponível, ou outros erros. Isso, claro, assume o desenvolvedor está escrevendo o texto original em Inglês, e não alguma pessoa documentação.

Além disso, se o texto em Inglês muda, então provavelmente as outras traduções precisam ser atualizados?

Na prática, nós também usamos IDs Pure, em vez de, em seguida, texto em Inglês, mas isso não significa que temos que fazer muito trabalho extra para padrão para Inglês.

Em uma palavra, não faça isso.

A mesma palavra / frase em Inglês pode muitas vezes têm mais de um significado, e cada um significa uma tradução diferente.

Definir ids mnemônicos para as suas cordas, e deleite Inglês como apenas outro idioma.

Concordo com outros cartazes que números de identificação em código são um pesadelo para a legibilidade do código.

Ex engenheiro de localização

Há muito a considerar e resposta não é tão fácil.

Usando planície Inglês

Pros

  • fácil de escrever e Código de leitura
  • Na maioria dos casos, ele funciona mesmo sem executar funções de tradução em código

Contras

  • programadores envolvidos devem ser também bons redatores:)
  • Você precisa escrever textos precisos corretas totalmente em Inglês, mesmo no caso em que a primeira língua que você precisa executar é outra coisa (ou seja, estamos começando lof de projectos em língua checa e estamos localizando-os a EN mais tarde) .
  • Em muitos casos, você precisa contextos de uso. Se você deixar de fazê-lo de begginig, é um monte de trabalho para adicioná-los mais tarde. Para explicar:. Em Inglês, uma palavra pode ter muitos meands diferentes - e você precisa usar contextos para diferenciá-los - e não é sempre tão fácil (order = ordem de classificação, ou pode ser da ordem de compra)
  • Pode ser muito difícil de corrigir Inglês mais tarde no processo. Correções das strings vai muitas vezes levar à perda de frases já traduzidos. É muito frustrante para tradução livre para 3 línguas diferentes só porque você corrigiu Inglês.

Usando as teclas

Pros

  • Você pode usar funções de plataforma de localização mesmo para o idioma Inglês. Ou seja, estamos usando a plataforma linda CrowdIn. Há um monte de ferramentas úteis - ou melhor, um fluxo de trabalho completo - para a gestão de tradução: votação para traduções diferentes, a história de tradução, glossários (o que ajuda a manter a tradução coerente / idioma), prova, aprovação, etc. Usando teclas de tornar este processo muito mais mais suave.

  • É muito mais fácil para enviar textos Engish para revisão etc. Normalmente, não é uma boa idéia para deixar redatores modificar seu código diretamente:)

Contras

  • configuração do projeto mais complicado.
  • difícil de usar% d,% s etc.

Você não já respondeu a sua própria pergunta? :)

Claramente, se você pretende i18n apoio de sua aplicação, você deve tratar todas as implementações de linguagem o mesmo. Se alguém decide uma corda precisa mudar, você faz uma alteração semelhante em todos os arquivos de idioma. Os metadados com o check-in deve agrupar todos os arquivos de idioma juntos na mesma mudança. Se o seu idioma "default" é tratado de forma diferente, que torna mais difícil de manter.

No final do dia, um tradutor deve ser capaz de sentar-se e mudar os textos para cada idioma (para que correspondam no significado) sem ter de envolver o programador que já fez sua / seu trabalho.

Isto faz-me sentir como a resposta adequada é usar uma versão modificada do gettext onde você coloca cordas como este

_(id, backup_text, context)

_('ABOUT_ME', 'About Me', 'HOMEPAGE')

contexto ser opcional

porque assim? porque você precisa identificar texto no sistema usando texto não Inglês de identificação única que poderia se repetir em outros lugares.

Você também deve manter o backup, id e do contexto no mesmo lugar em seu código para reduzir as discrepâncias.

O id também é tem que ser legível, que traz o problema de sinônimos e uso duplicado (mesmo como ids), poderíamos prefixar os ids como esta "HOMEPAGE_ABOUT_ME" ou "MAIL_LETTER", mas

  1. as pessoas esquecem de fazer isso no início e mudá-lo mais tarde é um problema
  2. seu mais flexível para que o sistema seja capaz de grupo tanto por id e do contexto

, que é por isso que também adicionado a variável de contexto no final

o texto de backup pode ser praticamente qualquer coisa, até poderia ser "[ABOUT_ME @ página inicial texto deixou de carga, entre em contato example@example.com]"

não vai funcionar com o gettext atual edição de programas como "poedit", mas eu acho que você pode definir nomes de variáveis ??personalizadas para traduções gosta apenas "t ()" sem o sublinhado no início.

Eu sei que gettext também tem suporte para contextos, mas não é muito bem documentado ou amplamente utilizado.

P.S. Eu não tenho certeza sobre a melhor forma variável para impor o bem eo código extensível de modo sugestões são bem vindas.

Eu iria tão longe para dizer que você nunca (para a maioria dos valores de não) quer usar texto livre como chaves para nada. Imagine se SO utilizado o título consulta como chave para essa página, por exemplo. Se alguém links para ele, e, em seguida, o título é editado, a ligação já não é válida.

Seu problema é semelhante, exceto você também seria responsável por atualizar todos os links ...

Como Douglas Leeder menciona, o que você provavelmente vai querer fazer é usar o Inglês como o idioma padrão (backup), apesar de uma interface que usa Inglês e outra língua misturado é muito confusa (mas levemente divertido, também).

Além das considerações acima, existem muitos casos em que você deseja que a "chave" (msgid) para ser diferente do texto original (em Inglês). Por exemplo, no modo de exibição HTML, eu poderia querer dizer [aaaa], onde o destino e rótulo de que tag âncora dependem da localidade do usuário. Por exemplo. que poderia ser um link para uma rede social, e em US seria Facebook, mas na China seria Weibo. Assim, os msgids poderia ser algo como socialSiteUrl e socialSiteLabel.

Eu uso uma mistura.

Para cordas básicas que eu não acho que terá conflitos / modificações / significados estranhos, eu vou fazer a chave ser o mesmo que o Inglês.

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