Pergunta

Eu quero começar a usar gettext para lidar com minhas traduções em projetos web (PHP 5). Uma vez que é um padrão amplamente utilizado com uma boa reputação parece ser a melhor escolha.

No entanto, eu também estou ouvindo coisas sobre servidor incompatibly e sendo-non-thread-safe. O que isso significa para os meus projetos que usam então? Desde que eu construir coisas que muitas pessoas usam, é muito importante que as minhas obras de código.

Estamos a falar de problemas menores (como as pessoas ainda usam PHP 4) ou grandes problemas como a distribuição e instalação de gettext em websevers sendo baixo?

Foi útil?

Solução

Threads problema só se aplica se uma utilidades embutido PHP (mod-php de Apache por exemplo) e corre servidor que usa segmentos (como o servidor Apache com o trabalhador-MPM).

Assim - questão de segurança rosca não se aplica a você se:

  1. você usa servidor NGINX (ele não usa threads.)
  2. Você usa Apache (com qualquer um threaded MPM ou não) e PHP em modo fastcgi
  3. Você pode usar o Apache com MPM non-threaded (como prefork-MPM) e PHP em modo de mod-php.

Assim - a maioria das pessoas com padrão Apache instalação não deve se preocupar com gettext não ser thread-safe, como padrão do Apache de instalar em usos de mais distro non-threaded prefork-MPM

P.S. também -. manter em mente que o Apache no Windows é enfiada

Outras dicas

Eu acho que jogar um pouco mais com o php parte manuais comentários devem injuriarem mais informações .... um dos comentários no guia sobre seção gettext

O GNU gettext biblioteca funciona em um por processo, não base por linha. Isto significa que em um multi-usuário colocação como o servidor web Apache ele só vai funcionar com um MPM prefork (Isto é, um processo por utilizador). Trabalhador e outros MPMs rosca não vai funcionar.

Além disso, muitos usuários controlar GNU gettext pelo ambiente do sistema configuração variáveis ??como LANG. Esta não é uma boa solução para um servidor web meio ambiente devido a uma corrida óbvio condição.

http://www.php.net/manual/en/gettext .setup.php

Eu tive mesmo problema com o PHP 5.6.30 VC11 Theard Seguro no Windows 10. Solução encontrada e corrigir esse problema aqui por sirio3mil.

Aparentemente PHP com TS pode acessar somente pasta do idioma Locale. Então, quando setlocale e função putenv é chamada com outra língua de um sistema, pasta com .mo e .po não podem ser lidos.

Solução alternativa é ter apenas uma pasta do idioma com idioma do sistema e vários pares de .mo / .po arquivos para cada idiomas traduzidos. Domínio será definido com a linguagem queria.

Exemplo com a Swiss francês, alemão e italiano:

Pasta estrutura

\ Locale \ fr_CH \ LC_MESSAGES

    linguagem
  • fr_CH.mo + fr_CH.po // sistema
  • de_CH.mo + de_CH.po
  • it_CH.mo + it_CH.po

Código

$lang = 'fr_CH' or 'de_CH' or 'it_CH'

bindtextdomain($lang, '.\Locale');
textdomain($lang);
bind_textdomain_codeset($lang, 'UTF-8');
setlocale (LC_ALL, $lang);
putenv('LC_ALL=' . $lang);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top