Estou localizando meu aplicativo php. Eu tenho um dilema em escolher o melhor método para realizar o mesmo.
Método 1: Atualmente, estou armazenando palavras para serem localizadas em uma matriz em um arquivo php
<?php
$values = array (
'welcome' => 'bienvenida'
);
?>
Estou usando uma função para extrair e retornar cada palavra de acordo com o requisito
Método 2: devo usar um arquivo txt que armazena a seqüência de caracteres do mesmo?
<?php
$welcome = 'bienvenida';
?>
Minha pergunta é qual é o melhor método, em termos de velocidade e esforço para desenvolver o mesmo e por quê?
Edit: Eu gostaria de saber qual dos dois métodos é mais rápido em responder e por que seria isso? Além disso, qualquer melhoria no código acima seria apreciada !!
php
localization
sree
fonte
fonte
Respostas:
O PHP possui ótimas possibilidades internas de localização. A maneira mais comum parece ser gettext - este tutorial mostra como é usado.
Desde o PHP 5.3, há também o intl, que oferece muito mais recursos (para formatar números, datas e moedas, dependendo da localidade, por exemplo).
fonte
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 precisarglobal
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 parecidodefine( '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!
fonte