PHP - gettest solo traduce al ingles

   
Vista:

gettest solo traduce al ingles

Publicado por Alberto (3 intervenciones) el 01/10/2014 22:36:46
Haciendo pruebas internacionalizando un texto con PHP, solo consigo que lo traduzca al ingles.
Tengo la estructura de ficheros que indica en los tutoriales que he visto
locale/en_US/LC_MESSAGES/con los ficheros messages.mo y messages.po
locale/es_ES/LC_MESSAGES/con los ficheros messages.mo y messages.po
locale/fr_FR/LC_MESSAGES/con los ficheros messages.mo y messages.po

Cada fichero tiene la palabra clave 'Servicios' traducida a cada idioma

Y en php tengo este código
1
2
3
4
5
6
7
8
9
<?php
putenv("LANG=en_US");
setlocale(LC_ALL, "en_US");
 
bindtextdomain("messages", "locale");
textdomain("messages");
?>
 
<h1><?php echo gettext("Servicios") ?></h1>

Cuando pongo el codigo 'en_US' muestra la traducción bien pero cuando lo cambio a 'es_ES' o 'fr_FR' de esta manera:

1
2
putenv("LANG=es_ES");
setlocale(LC_ALL, "es_ES");

o

1
2
putenv("LANG=fr_FR");
setlocale(LC_ALL, "fr_FR");

sigue mostrando la traducción al ingles.

Estoy trabajando en Windows 7, y no se si tendrá algo que ver, pero la función
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'] ; me vuelve
"es-ES,es;q=0.8" siempre cambie o no putenv y setlocale a otra localización

He probado un monton de cosas, y ya no se que hacer, en que puede estar fallando?
Estoy usando wamp
Apache Version : 2.4.9
PHP Version : 5.5.12
Server Software: Apache/2.4.9 (Win64) PHP/5.5.12

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

gettest solo traduce al ingles

Publicado por xve (5523 intervenciones) el 02/10/2014 08:58:38
Hola Alberto, la verdad es que sobre Windows nunca lo he utilizado...

Una vez has cambiado la variable con putenv, si haces un echo de la variable te da el valor correcto?
1
2
putenv("LANG=es_ES");
echo getenv("LANG");


No se si esto funcionara en Windows... pero... has probado con?
1
setlocale( LC_MESSAGES, 'es_ES');


Si nos puedes comentar...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

gettest solo traduce al ingles

Publicado por Alberto (3 intervenciones) el 02/10/2014 14:41:07
Buenas
Muchas gracias por tu respuesta

Ahora mismo haciendo pruebas tengo este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
    //$user_locale="es_ES.UTF-8";
    $locale = "es_ES" ;
    $domain = 'messages';
    setlocale(LC_ALL, $locale);
    putenv('LANG='.$locale);
    putenv('LANGUAGE='.$locale);
    putenv('LC_ALL='.$locale);
    putenv('LC_MESSAGES='.$locale);
 
    bindtextdomain($domain, './locale');
    bind_textdomain_codeset($domain, 'UTF-8');
    textdomain($domain);
    echo "<br>".getenv("LANG");        -> Devuelve: 'es_ES'
    echo "<br>".gettext("Servicios") ;  -> La traducción es la que está en el fichero 'locale/en_US/LC_MESSAGES/messages.mo'
 
///////////////////////////////////////////////////////////
 
    $user_locale="es_ES.UTF-8";
    //$locale = "es_ES" ;
    $domain = 'messages';
    setlocale(LC_ALL, $user_locale);
    putenv('LANG='.$user_locale);
    putenv('LANGUAGE='.$user_locale);
    putenv('LC_ALL='.$user_locale);
    putenv('LC_MESSAGES='.$user_locale);
 
    bindtextdomain($domain, './locale');
    bind_textdomain_codeset($domain, 'UTF-8');
    textdomain($domain);
    echo "<br><br>".getenv("LANG"); -> Devuelve: 'es_ES.UTF-8'
    echo "<br>".gettext("Servicios") ;   -> La traducción es la que está en el lfichero 'locale/en_US/LC_MESSAGES/messages.mo'


Cuando añado la linea:
1
setlocale(LC_MESSAGES, 'es_ES');

Me salta un error:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
( ! ) Notice: Use of undefined constant LC_MESSAGES - assumed 'LC_MESSAGES' in C:\wamp\www\traduccion\traduce.php on line 113
Call Stack
# Time Memory Function Location
1 0.0010 249728 {main}( ) ..\traduce.php:0

( ! ) Deprecated: setlocale(): Passing locale category name as string is deprecated. Use the LC_* -constants instead in C:\wamp\www\traduccion\traduce.php on line 113
Call Stack
# Time Memory Function Location
1 0.0010 249728 {main}( ) ..\traduce.php:0
2 0.0030 250944 setlocale ( ) ..\traduce.php:113

( ! ) Warning: setlocale(): Invalid locale category name LC_MESSAGES, must be one of LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, or LC_TIME in C:\wamp\www\traduccion\traduce.php on line 113
Call Stack
# Time Memory Function Location
1 0.0010 249728 {main}( ) ..\traduce.php:0
2 0.0030 250944 setlocale ( ) ..\traduce.php:113
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Veo que en la documentación de php de setlocale() dice:
LC_MESSAGES para las respuestas del sistema (disponible si PHP fue compilado con libintl)

Que puede pasar? Me estoy desanimando, esta tarde probaré en linux. También subí el código a un servidor gratuito de hostinger y tampoco funciona, pero creo que debe ser porque habrá que reiniciar el servidor.
Muchas gracias
Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

gettest solo traduce al ingles

Publicado por Alberto (3 intervenciones) el 03/10/2014 00:05:30
Buenas

Acabo de ver que en linux sin cambiar nada me funciona perfectamente, así que es un problema del windows
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

gettest solo traduce al ingles

Publicado por xve (5523 intervenciones) el 03/10/2014 09:08:04
No dispongo de ningún Windows para probarlo, pero si dan con la solución, te agradecería que lo comentaras.

Con que versión de Windows lo estas probando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar