Проблема с настройкой gettext () - PullRequest
2 голосов
/ 16 мая 2011

Я работаю над приложением php.Сейчас я пытаюсь перевести его на разные языки.
Для этого я использую gettext ().Но у меня проблема с конфигурацией.У меня правильно установлена ​​библиотека.У меня есть gettext(textToTranslate) вокруг кода, и я создал без проблем .mo и .po файлы.

Конфигурация на моем index.php (работает на 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);

, а моя структура файлов:

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

Но явсе еще видя код на английском языке, qhich является языком по умолчанию.Кто-нибудь может мне помочь в этом ??Заранее спасибо

РЕДАКТИРОВАТЬ

@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

РЕДАКТИРОВАТЬ

Запуск небольшого php-скрипта под 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");
?> 

Команда: 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 (нет такого файла или каталога) 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 (нет такого файла или каталога) open ("/ usr / share / locale / es_ES / LC_MESSAGES/blanca/gettext.mo ", O_RDONLY) = -1 ENOENT (нет такого файла или каталога) open ("/ usr / share / locale / es.utf8 / LC_MESSAGES / blanca / gettext.mo", O_RDONLY) = -1 ENOENT (нет такого файла или каталога) open("/usr/share/locale/es/LC_MESSAGES/blanca/gettext.mo", O_RDONLY) = -1 ENOENT (нет такого файла или каталога) open ("/ usr / share / locale-langpack / es_ES.utf8 / LC_MESSAGES/blanca/gettext.mo ", O_RDONLY) = -1 ENOENT (нет такого файла или каталога) open (" / usr / share / locale-langpack / es_ES / LC_MESSAGES / blanca / gettext.mo ", O_RDONLY) = -1 ENOENT(Нет такого файла или каталога) open ("/ usr / share / locale-langpack / es.utf8 / LC_MESSAGES / blanca / gettext.mo", O_RDONLY) = -1 ENOENT (Нет такого файла или каталога) open ("/ usr/share/locale-langpack/es/LC_MESSAGES/blanca/gettext.mo ", O_RDONLY) = -1 ENOENT (нет такого файла или каталога)

prog.php is located in my application directory.

Ответы [ 4 ]

0 голосов
/ 19 мая 2018

Я попытался помочь тем, кто все еще ищет это здесь: PHP gettext не работает

Надеюсь, что поможет.

0 голосов
/ 10 июля 2011

Попробуйте setlocale (LC_MESSAGES, "es_ES");

0 голосов
/ 02 августа 2012

Я не уверен, как это сделать в php, но в bash

export LC_MESSAGES="LL_CC"

, где LL - локаль, CC - страна.что-то вроде en_US или en_US.UTF8.Я боролся с этой проблемой в течение половины своего дня, и работал только экспорт LC_MESSAGES.Итак, я предлагаю, в php это будет

putenv('LC_MESSAGES='.$lang);
0 голосов
/ 16 мая 2011

Я подозреваю, что локали, которые вы пытаетесь установить с помощью setlocale, недоступны в вашей системе.Что возвращает команда locale -a (запустить из оболочки)?Убедитесь, что значения установленных локалей совпадают с локалями, которые вы пытаетесь установить.Если ваши испанские локали отсутствуют, то, вероятно, все еще нужно сделать dpkg-reconfigure locales.

Я не знаю причину, но факт есть (или, возможно, был на Debianили Ubunto примерно с 2008 года, в котором я работал в 2009 году), что setlocale не будет работать, если в вашей системе не установлен языковой стандарт.Это не сразу очевидно, так как вы предоставляете файлы сообщений вместе с вашим приложением, и, похоже, они не зависят от каких-либо системных языковых файлов или настроек - но вы знаете, что может быть причина.

...