Problema al configurar gettext ()

Estoy trabajando en una aplicación php. Ahora estoy tratando de traducirlo a diferentes idiomas.
Para hacerlo, estoy usando gettext (). Pero tengo un problema con la configuración. Tengo la biblioteca instalada correctamente. tengo gettext(textToTranslate) alrededor del código y he creado sin problemas archivos .mo y .po.

La configuración en mi index.php es (trabajando en xampp, Ubuntu):

// Language
$lang = 'es_ES';

// Domain
$text_domain = 'project';

putenv('LC_ALL='.$lang);
setlocale(LC_ALL, $lang);

bindtextdomain($text_domain, './locale' );

bind_textdomain_codeset($text_domain, 'UTF-8');

textdomain($text_domain);

y mi estructura de archivos es:

/opt/lampp/htdocs/blanca/gettext/locale/es_ES/LC_MESSAGES/project.po 
/opt/lampp/htdocs/blanca/gettext/locale/es_ES/LC_MESSAGES/project.mo

Pero sigo viendo el código en inglés, que es el idioma predeterminado. ¿Alguien podría ayudarme con esto? Gracias por adelantado

EDITAR

@ubuntu:~$ locale -a
C
es_AR.utf8
es_BO.utf8
es_CL.utf8
es_CO.utf8
es_CR.utf8
es_DO.utf8
es_EC.utf8
es_ES.utf8
es_GT.utf8
es_HN.utf8
es_MX.utf8
es_NI.utf8
es_PA.utf8
es_PE.utf8
es_PR.utf8
es_PY.utf8
es_SV.utf8
es_US.utf8
es_UY.utf8
es_VE.utf8
POSIX

EDITAR

Ejecutando un pequeño script php bajo strace COMAND

<?php
// Idioma

$lang = 'es_ES.utf8';

// Dominio

$text_domain = 'blanca';

// Dependiendo de tu OS putenv/setlocale configurarán tu idioma.

putenv('LC_ALL='.$lang);

setlocale(LC_ALL, $lang);



// La ruta a los archivos de traducción

bindtextdomain($text_domain, './gettext/locale' );
// El codeset del textdomain

bind_textdomain_codeset($text_domain, 'UTF-8');

// El Textdomain
textdomain($text_domain);

// Print a test message
echo gettext("User");


// Or use the alias _() for gettext()
echo _("User");
?> 

comando: strace -e trace=file -o test.txt php prog.php

getcwd ("/ opt / lampp / htdocs / blanca", 4096) = 25 lstat ("/ opt / lampp / htdocs / blanca / prog.php", {st_mode = S_IFREG | 0644, st_size = 521, ...}) = 0 lstat ("/ opt / lampp / htdocs / blanca", {st_mode = S_IFDIR | 0777, st_size = 4096, ...}) = 0 lstat ("/ opt / lampp / htdocs", {st_mode = S_IFDIR | 0755 , st_size = 4096, ...}) = 0 lstat ("/ opt / lampp", {st_mode = S_IFDIR | 0755, st_size = 4096, ...}) = 0 lstat ("/ opt", {st_mode = S_IFDIR | 0755, st_size = 4096, ...}) = 0 getcwd ("/ opt / lampp / htdocs / blanca", 4096) = 25 lstat ("/ opt / lampp / htdocs / blanca /./ locale", 0x7fffb2c1a670) = -1 ENOENT (No existe tal archivo o directorio) open ("/ usr / share / locale / locale.alias", O_RDONLY) = 3 open ("/ usr / share / locale / es_ES.utf8 / LC_MESSAGES / blanca / gettext. mo ", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open (" / usr / share / locale / es_ES / LC_MESSAGES / blanca / gettext.mo ", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open ("/ usr / share / locale / es.utf8 / LC_MESSAGES / blanca / gettext.mo", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open ("/ usr / share / locale / es / LC_MESSAGES / licenciado en Derecho anca / gettext.mo ", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open (" / usr / share / locale-langpack / es_ES.utf8 / LC_MESSAGES / blanca / gettext.mo ", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open ("/ usr / share / locale-langpack / es_ES / LC_MESSAGES / blanca / gettext.mo", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open ("/ usr / share / locale-langpack / es.utf8 / LC_MESSAGES / blanca / gettext.mo ", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio) open (" / usr / share / locale-langpack / es / LC_MESSAGES / blanca / gettext.mo ", O_RDONLY) = -1 ENOENT (No existe tal archivo o directorio)

prog.php is located in my application directory.

preguntado el 16 de mayo de 11 a las 18:05

4 Respuestas

Sospecho que las configuraciones regionales que intentas establecer a través de setlocale no están disponibles en su sistema. Que dice el comando locale -a (correr desde el caparazón) volver? Asegúrese de que los valores de las configuraciones regionales instaladas partido las configuraciones regionales que está intentando establecer. Si faltan sus configuraciones regionales en español, lo que probablemente aún debe hacer es dpkg-reconfigure locales.

No sé la razón, pero el hecho es (o posiblemente sí estaba, en un Debian o Ubunto de alrededor de 2008 en el que trabajé en 2009) que setlocale fallará si la configuración regional no está instalada en su sistema. Lo cual no es obvio de inmediato, ya que está proporcionando los archivos de mensajes con su aplicación y no parece depender de ningún archivo o configuración regional del sistema, pero ya sabe, puede haber una razón.

contestado el 16 de mayo de 11 a las 23:05

He editado mi pregunta con tu sugerencia. Cambié $ lang = 'es_ES.utf8'; pero aún así el texto está en inglés. ¿¿Tiene usted alguna otra idea?? Gracias - Blanca Hdez

Sí: ejecute un script de muestra mínimo con strace y vuelva a comprobar el sistema de archivos open llamadas para ver dónde está buscando Gettext sus archivos de mensajes. - Ilustración

Perdón por la demora, pero no tuve tiempo para este problema. Edito mi pregunta con el programa que se ejecuta bajo strace. ¡¡Gracias por la sugerencia!! He jugado con los resultados, pero sin éxito. Blanca Hdez

Pruebe setlocale (LC_MESSAGES, "es_ES");

Respondido 10 Jul 11, 20:07

No estoy seguro de cómo hacer esto en php, pero en bash

export LC_MESSAGES="LL_CC"

donde LL - localidad, CC - país. algo como en_US o en_US.UTF8. Estuve luchando contra este problema durante la mitad de mi día y solo funcionó exportar LC_MESSAGES. Entonces, sugiero, en php sería

putenv('LC_MESSAGES='.$lang);

Respondido 02 ago 12, 01:08

He intentado ayudar a aquellos que todavía están buscando esto aquí: PHP gettext no funciona

Espero que ayude.

contestado el 19 de mayo de 18 a las 23:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.