Primeiro, gettext
é um bom caminho a percorrer, então não descarte se não parecer fácil a princípio; No entanto, existem outras opções que também são úteis. Antes de explicar isso, vamos dar uma olhada em suas sugestões primeiro:
Ao array
fazer isso, você tem uma solução bastante direta. O bom é que você pode armazenar suas traduções em um armazenamento de dados e carregá-las no seu script PHP como uma matriz, e é isso. No entanto, se você deseja armazenar seu array estaticamente em um arquivo PHP, é necessário editá-lo: a) programador PHP ou um usuário experiente que esteja familiarizado com a sintaxe PHP, apenas para editar o arquivo b) sincronizar até quatro ou cinco arquivos de idiomas diferentes pode ser bastante irritante e propenso a erros.
O que você precisa considerar aqui é: Como mais tarde adicionar novos elementos ao arquivo de idioma? Posso deixar para um tradutor ou deve haver um programador PHP?
Seu modo variable
de fazê-lo não é prático. Por quê? Presumo que você terá algumas funções pelo menos em sua aplicação, certo? Então você precisa passar todas essas variáveis quando chamar a função ou precisar global
delas. Se você acha que terá mais de dez variáveis como essa, então eu o desencorajo fortemente a fazer isso. Também pode haver conflito de nome - você pode potencialmente substituir o valor de outra variável com o mesmo nome; no entanto, isso pode ser resolvido adicionando um prefixo tão simples quanto um sublinhado, então você terá, $_welcome
por exemplo. De qualquer forma, se eu fosse você, nem pensaria nisso; Não faça isso.
Uma boa maneira de fazer isso é definir constantes com um prefixo. Por exemplo, no seu, en.lang.php
você terá algo parecido define( 'LABEL_WELCOME', 'Welcome' );
e no seu, no.lang.php
você terá define ( 'LABEL_WELCOME', 'Velkommen' );
. O bom de usar constantes, em vez de variáveis, é que elas estão sempre disponíveis em seu script. Portanto, você não precisa injetar ou globalizá-los. Em comparação com matrizes e variáveis, elas são mais rápidas devido à maneira como o PHP as manipula - elas ocupam menos espaço na memória. A desvantagem é que você não pode passá-los para o tradutor, então, novamente, você precisa de um desenvolvedor PHP. Também a sincronização entre arquivos pode ser um pouco dolorosa novamente.
A outra opção é ter uma função ou classe / método para recuperar a tradução. Será menos eficiente - no entanto, não acho que você precise dessa micro-otimização, mas a vantagem adicional é que você pode aplicar uma lógica personalizada ao recuperar a tradução. Por exemplo, imagine que um dia seu amado gerente de projetos o perguntará se você poderia esconder todos esses textos em maiúsculas. Você não pode se recusar a fazê-lo, portanto, ter uma função intermediária pode ajudá-lo muito quando você precisa aplicar / alterar um padrão em todas as suas traduções.
Para finalizar:
Pense em como os tradutores podem usá-lo e crie uma solução funcional para o KISS.
Pense em como você pode permanecer sincronizado entre diferentes idiomas.
Pense se a mesma tradução pode ser necessária, digamos para o aplicativo móvel. Uma solução de plataforma cruzada pode economizar seu tempo. Não descarte JSON e bancos de dados comuns.
Pense em como você pode aplicar / alterar a lógica ao recuperar as traduções.
Esqueceu o desempenho. Em 99,9% das vezes, você não chegará tão longe na micro-otimização, como constantes x variáveis x chamadas de função . Presumo que seu tempo como desenvolvedor / equipe seja mais caro do que um tempo de processador.
Atualização # 1
Meu Deus, eu posto uma resposta para uma pergunta de um ano. Por que ninguém está dizendo nada aqui? Precisamos de alertas para esses casos.
Atualização # 2
No lado direito, diz que é uma pergunta de um ano; No entanto, foi perguntado há dois anos! Tudo é enganoso aqui!