2010-03-11 16 views
7

Estoy intentando usar gettext add localization support para mi sitio web. He seguido varias guías sobre cómo configurar gettext y he hecho lo siguiente:PHP gettext function solo devuelve orignal cadena no traducida

He creado los siguientes archivos y directorios en la raíz de mi proyecto dir:

test.php 

locale/ 
    de_DE 
    LC_MESSAGES 
     messages.mo 
     messages.po 

    en_GB 
    LC_MESSAGES 
     messages.mo 
     messages.po 

He usado Poedit para crear los archivos .po y mo anteriores. Lo hice usar terminaciones de línea Unix, UTF-8 y establecer el idioma y el país en consecuencia.

continuación, he creado un script PHP llamado test.php que tiene el siguiente código:

<?php 

    define('LOCALE', 'de_DE'); 

    // Set up environmental variables 
    putenv("LC_ALL=" . LOCALE); 
    setlocale(LC_ALL, LOCALE); 
    bindtextdomain("messages", "./locale"); 
    bind_textdomain_codeset("messages", LOCALE .".utf8"); 
    textdomain("messages"); 

    die(gettext('This is a test.')); 

?> 

He importado el texto "Esto es una prueba." a Poedit y suministró la traducción y la guardó.

Pero por algún motivo el script test.php solo mostrará el texto original sin traducir. Se niega a cargar la versión para los archivos de traducción.

Vale la pena señalar que el servidor ejecuta Linux (Ubuntu), Apache 2.2.11 y PHP 5.2.6-3ubuntu4.5. Revisé phpinfo() y gettext está habilitado.

¿Alguien me puede ayudar? Gracias.

Respuesta

14

Su problema podría estar relacionado con la localización faltante de su sistema. Instala la configuración regional alemana y todo debería funcionar:

sudo apt-get install language-pack-de-base 

A continuación, emita el siguiente comando y debería ver los lugares alemanes:

locale -a 

Después de eso, el siguiente código debería funcionar, suponiendo que todavía tener el .po y .mo archivos en la estructura de directorios que describes:

<?php 

    setlocale(LC_ALL, 'de_DE.UTF-8'); 
    bindtextdomain('messages', './locale'); 
    textdomain('messages'); 

    echo gettext('This is a test.'); 

    ?> 
+0

Entonces, ¿funcionó? ¿De hecho era un problema relacionado con una configuración regional faltante o alguna otra cosa? – bpedro

+0

¡Sí! Funcionó Muchas gracias por su ayuda. – Camsoft

+0

¡Ningún problema! ¡Me alegro de poder ayudar! – bpedro

0

pruebe lo siguiente

<?php 

    define(LC_MESSAGES, 'de_DE'); 

    // Set up environmental variables 
    putenv("LANGUAGE=de_DE"); 
    bindtextdomain("*", dirname(__FILE__).'/locale'); 
    bind_textdomain_codeset("messages", 'UTF-8');  

    die(gettext('This is a test.')); 

?> 
+0

Desafortunadamente esto no funcionó. Todavía solo muestra la versión en inglés. – Camsoft

1

Sí, sí, macros de soporte de PHP de nuevo. Solo una pista, que podría o no ser útil para usted:

Debido a la horrible implementación de gettext de PHP, muchos proyectos de código abierto como WordPress cambiaron a este: http://savannah.nongnu.org/projects/php-gettext/ y omitieron por completo la versión original.

Lo hice, también, en uno de mis proyectos, y no puedo decir que me pierda nada.

Desventaja para proyectos comerciales: Es bajo la GPL.

+0

Interesante. Echaré un vistazo a esto. Arh, aunque ser GPL va a ser un problema. – Camsoft

+0

No puedo usar esto porque, como dijiste, es GPL y este problema que estoy teniendo está en un proyecto comercial. – Camsoft

+0

Conozco el problema. Aquí también tenemos un proyecto de código cerrado, y nos queda implementar algo nosotros mismos, porque no podemos usar php-gettext (o queremos confiar en el módulo gettext de PHP).Sin embargo, pensé que valía la pena responder, ya que es un proyecto importante para incorporar en otro software PHP GPL. – Boldewyn