Localização em php, melhores práticas ou abordagem?


11

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 !!


2
você considerou gettext?
precisa saber é o seguinte

@ sagarchalise eu olhei para ele, mas eu quero construir meu próprio método, eu e qualquer um dos dois acima. Então, eu gostaria de saber qual método funciona mais rápido e qual é mais confiável! :)
sree

Se você quer saber em termos de velocidade, faça alguns casos de teste. O que roda mais rápido, 1 milhão de vezes o primeiro ou o segundo método?
Francisco Presencia

2
Não reinvente uma roda que funcione bem.
Gbjbaanb

Respostas:


10

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).


Obrigado pela sua resposta, mas, posso saber pelo método acima qual é o melhor método de construir em termos de velocidade e confiabilidade.
sree

10

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 arrayfazer 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 variablede 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 globaldelas. 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á, $_welcomepor 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.phpvocê terá algo parecido define( 'LABEL_WELCOME', 'Welcome' );e no seu, no.lang.phpvocê 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:

  1. Pense em como os tradutores podem usá-lo e crie uma solução funcional para o KISS.

  2. Pense em como você pode permanecer sincronizado entre diferentes idiomas.

  3. 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.

  4. Pense em como você pode aplicar / alterar a lógica ao recuperar as traduções.

  5. 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!


você parece um viajante do tempo de volta ao tempo :) tnx pela resposta!
sree

3
@sree Sim! Eu venho de 4 de abril de 2014! Se você comprar alguns compartilhamentos do Facebook ou WhatsApp em 2012, não precisará escrever código PHP em 2014!
Mahdi

1
rofl concordou !!!
sree
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.