2011-03-10 54 views
15

El siguiente ejemplo funciona en Mac OS X con Apache, es decir, me da la traducción de la cadena reenviada al monitor. Pero en Ubuntu con lighttpd obtengo el texto original 'Cuenta inactiva'. He intentado todo tipo de combinaciones de varialbes ambientales sin suerte. Tampoco son permisos de archivo porque puedo repetir el contenido del archivo .mo.no puede obtener gettext (php) en Ubuntu trabajo

<?php 

//$locale = 'sv_SE.UTF-8'; 
$locale = 'sv_SE'; 

$dir = dirname(__FILE__); 

// File permission is apparantly not a problem as this works... 
//echo file_get_contents($dir . '/sv_SE/LC_MESSAGES/flattr.mo'); 

putenv("LANG=$locale"); 
putenv("LANGUAGE=$locale"); 
putenv("LC_ALL=$locale"); 
putenv("LC_MESSAGES=$locale"); 
setlocale(LC_ALL, $locale); 
setlocale(LC_MESSAGES, $locale); 
//setlocale(LANG, $locale); 
//setlocale(LANGUAGE, $locale); 

bindtextdomain('flattr', $dir); 
//bind_textdomain_codeset("flattr", 'UTF-8'); 
textdomain('flattr'); 

echo _("Inactive account"); 

?> 

¿Alguien tiene alguna idea?

+0

Tiene el idioma configurado correctamente en el sistema operativo en sí? Ver mi pregunta anterior puede ayudar http://stackoverflow.com/questions/1431354/php-gettext-in-norwegian – fabrik

+1

¿Ha generado la configuración regional de sv_SE? De lo contrario, agregue (o elimine el comentario) una línea que contenga 'sv_SE.UTF-8' a'/etc/locale.gen' y luego ejecute 'sudo locale-gen'. –

+0

sudo locale-gen sv_SE.UTF-8 (y luego reinicie lighttpd) funcionó. ¿Podría publicarlo como respuesta a esta pregunta para que pueda marcarlo como correcto? ¡Gracias! – pthulin

Respuesta

33

que estaba enfrentando el mismo problema. Describiré las cosas que hice para arreglarlo en Ubuntu 10.10.

1) asegurarse de que haya 'gettext' instalado,

sudo apt-get install gettext 

Como alternativa, puede instalar 'php-gettext' si 'gettext' no se puede instalar. El paquete 'php-gettext' no es necesario si ya tiene 'gettext' instalado.

2) a continuación, generar la configuración regional para su idioma. En este ejemplo usaré 'sv_SE'. Lee los locales soportados en '/ usr/share/i18n/SUPPORTED',

less /usr/share/i18n/SUPPORTED 

Usted encontrará varias líneas que comienzan con 'sv_SE',

sv_SE.UTF-8 UTF-8 
sv_SE ISO-8859-1 
sv_SE.ISO-8859-15 ISO-8859-15 

Esto significa que tiene múltiples opciones para generar la configuración regional para sv_SE. Una de las opciones no tiene un punto (.) En su nombre (es decir, sv_SE ISO-8859-1); este es el juego de caracteres predeterminado para esa configuración regional. Para generar la configuración regional para el conjunto de caracteres por defecto, ejecute el siguiente comando,

sudo locale-gen sv_SE 

Si desea generar esa región para el juego de caracteres UTF-8, ejecute este comando,

sudo locale-gen sv_SE.UTF-8 

Reinicia Apache después de generar lugares (no va a encontrar los lugares recién generados de otro tipo),

sudo service apache2 restart 

3) por último, actualizar su script PHP para que coincida con la configuración regional que ha generado. Si generó la configuración regional para 'sv_SE',

setlocale (LC_ALL, "sv_SE");

Pero si usted generó la codificación UTF-8 equivalente de esa localidad, uso,

setlocale (LC_ALL, "sv_SE.UTF-8");

Todo debería funcionar ahora.

+0

+1 ¡Muchas gracias! – iLLin

+4

En Debian resulta que hay un paquete llamado 'locales-all' que puede proporcionar una salida más fácil sin tener que hacer' locale-gen' manualmente. También necesitaba 'apt-get install locales' – kizzx2

+0

+1, ¡Muy bien explicado! –

1

Aunque seguí los pasos descritos en la respuesta aceptada, no pude conseguir que funcione en Ubuntu 14.04 LTS. Tenía que hacer dos cosas importantes:

(1) Antes de generar el archivo messages.mo, tuve que especifique en el mensaje.po explícitamente UTF-8 para charset:

msgid "" 
msgstr "Project-Id-Version: PACKAGE VERSION\n" 
     "Report-Msgid-Bugs-To: \n" 
     "POT-Creation-Date: 2016-12-19 16:28+0530\n" 
     "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
     "Last-Translator: FULL NAME <[email protected]>\n" 
     "Language-Team: LANGUAGE <[email protected]>\n" 
     "Language: \n" 
     "MIME-Version: 1.0\n" 
     "Content-Type: text/plain; charset=UTF-8\n" <---------change here 
     "Content-Transfer-Encoding: 8bit\n" 

(2) Yo tenía que mantener mismo nombre de carpeta que instala la configuración regional. Por ejemplo, instalé Kannada ejecutando sudo locale-gen kn_IN. Esto generó kn_IN.UTF-8. Tenga en cuenta las letras mayúsculas y el guión en UTF-8. He utilizado este mismo nombre, mientras que la configuración regional en mi script PHP y para el nombre de la carpeta donde pongo el archivo messages.mo:

Script PHP: Nombre

// I18N support information 
$locale = "kn_IN.UTF-8";  <----------change here 
putenv("LANG=".$locale); 
putenv("LC_ALL=".$locale); 
setlocale(LC_ALL, $locale); 

$domain = 'messages'; 
bindtextdomain($domain, "./Locale"); 
bind_textdomain_codeset($domain, 'UTF-8'); 
textdomain($domain); 

carpeta:

project_folder 
    /Locale 
     /kn_IN.UTF-8  <------change here 
      /LC_MESSAGES 
       /messages.mo 

Ubuntu es sensible a las mayúsculas y minúsculas de los nombres de carpetas y archivos. Así que asegúrese de que las letras mayúsculas se mantienen como se muestra arriba.

documento de referencia, que me señaló en la dirección correcta: https://sendy.co/forum/discussion/935/translation-not-being-picked-up-on-ubuntu/p1

Cuestiones relacionadas