Pergunta

Há alguns tutoriais lá fora para gettext (w / Poedit) ... infelizmente, é principalmente para um ambiente UNIX. E ainda mais lamentável é que estou executando meu servidor WAMP no Windows XP (mas eu estou desenvolvendo para um ambiente UNIX) e nenhum dos tutoriais pode obter gettext funcionando corretamente para mim. A partir da página man ( http://us3.php.net/manual/en/ book.gettext.php ), parece que é um processo diferente em um ambiente Windows. Eu tentei algumas das soluções nos comentários, mas eu ainda não posso fazê-lo funcionar! Por favor, eu passei muitas horas sobre isso, espero que alguém pode me apontar na direção certa para obter essa coisa de trabalho! (E eu tenho certeza que existem outras pessoas lá fora que compartilham minha frustração). Até agora, com a minha configuração, eu só estou ficando saída "Olá mundo!" enquanto eu deveria estar recebendo a string traduzido.

Aqui está minha configuração / código até agora:

<?php
// test.php
if (!defined('LC_MESSAGES')) {
    define('LC_MESSAGES', 6);

}
$locale = "deu_DEU"; // apparently the locales are different on a WINDOWS platform

putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("greetings", ".\locale");
textdomain("greetings");


echo _("Hello World"); 

?>

Estrutura da pasta

root:     C:\Program Files\WampServer 2\www
test.php: C:\Program Files\WampServer 2\www\site
.po:      C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.po
.mo:      C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.mo

Por favor, informe! Obrigado pelo seu tempo:)

Foi útil?

Solução 6

Foi porque eu não tinha as localidades instalado.

Outras dicas

Eu tive problemas ao trabalhar com gettext na minha máquina local, e depois de alguma pesquisa eu encontrei esta página que resolveu o meu problema: http://www.kipras.com/getting -gettext-to-work-in-apache-on-windows / 96

Estou citando a partir da página web:

Servidores no Linux (ou qualquer outro servidor janelas de intervalo), a maneira de fazer isso é isto:

setlocale(LC_MESSAGES, “en_US”);

A maneira correta de conjunto localidade em janelas é esta:

putenv(“LC_ALL=en_US”);

Eu tive o mesmo problema, e desperdiçou quase um dia ou assim sobre ele. Finalmente, eu encontrei uma solução muito simples, ou seja, para desinstalar WAMP Server (versão 2.1), e instalar uma versão mais recente (WampServer 2.1e - 32 bits). É estranho, mas resolveu o problema completamente.

Aqui está o código de exemplo que funcionou para mim:

<?php

    $locale = "deu_DEU";

    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);

    bindtextdomain("greetings", "./locale");
    textdomain("greetings");

    echo _("Hello World");

?>

Hope isso ajuda.

Eu não fez uma investigação completa sobre isso, mas eu tenho certeza que um de seus erros é que você usou códigos de localidade inválidos - mesmo no Windows os códigos locales são os mesmos - estes são locais gettext e eles são multiplataforma .

Por favor, tente usar apenas "de" como código de localidade, ele deve funcionar. Também não se esqueça que o seu PHP tem extensão gettext instalado e ativado (cheque com phpinfo).

pode ser tarde demais, mas eu estava tendo problemas semelhantes até que eu habilitado "tag curta aberta" no meu WAMP php configurações

Esta é a solução que funcionou para mim. Isso funciona na mais recente wampserver. (Fonte: http://www.extradrm.com/blog/?p=1035)

1) Baixar php-gettext a partir daqui: https://launchpad.net/php-gettext/ + download e descompactá-lo

2) Adicione os seguintes arquivos encontrados na raiz do pacote na mesma pasta como test-language.php: - gettext.inc - gettext.php - streams.php

3) Abra o seu php.ini e comentário fora php_gettext.dll wampserver:

;extension=php_gettext.dll

4) Este é o novo arquivo de teste test-language.php

<?php
error_reporting(E_ALL | E_STRICT);

// define constants
define('PROJECT_DIR', realpath('./'));
define('LOCALE_DIR', 'C:/wamp/www/test/locale');
define('DEFAULT_LOCALE', 'es_ES');

require_once('gettext.inc');

$supported_locales = array('en_US', 'sr_CS', 'de_CH','es_ES');
$encoding = 'UTF-8';

$locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE;

//var_dump($locale);die();

// gettext setup
T_setlocale(LC_MESSAGES, $locale);
// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, LOCALE_DIR);
// bind_textdomain_codeset is supported only in PHP 4.2.0+
if (function_exists('bind_textdomain_codeset'))
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);

echo gettext("HELLO_WORLD");
?>

Depois de tudo isso, você deve criar a pasta locale, en_US (ou outro idioma) pasta, LC_MESSAGES pasta e, em seguida, colocar o arquivo messages.po.

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