2016-02-10 5 views
0

У меня возникли проблемы с получением перевода для работы на моем локальном сервере WAMP (v2.5). Вот пример проблемы.PHP gettext не работает на локальном сервере WAMP

putenv("LANG=frc");       //output: 1 
setlocale(LC_ALL, "frc");     //output: French_Canada.1252 

$domain = 'messages'; 

bindtextdomain($domain, "locale");   //output: D:\wamp\www\[project folder]\locale 
bind_textdomain_codeset($domain, 'UTF-8'); //output: UTF-8 
textdomain($domain);       //output: messages 

echo gettext("Hello");      //output: Hello 

А вот структура папок:

locale 
    --> French_Canada.1252 
     --> LC_MESSAGES 
      --> messages.po 
      --> messages.mo 

И, наконец, файл PO:

msgid "" 
msgstr "" 
"Project-Id-Version: \n" 
"POT-Creation-Date: 2016-02-10 14:01-0500\n" 
"PO-Revision-Date: 2016-02-10 14:01-0500\n" 
"Last-Translator: \n" 
"Language-Team: \n" 
"Language: fr_CA\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"X-Generator: Poedit 1.8.2\n" 
"X-Poedit-Basepath: ../../..\n" 
"Plural-Forms: nplurals=2; plural=(n > 1);\n" 
"X-Poedit-SearchPath-0: .\n" 

#: test.php:11 
msgid "Hello" 
msgstr "Bonjour" 

Вот что я пробовал:
1) Удаление 64 бит WAMP и устанавливая 32-разрядную WAMP на своем месте.
2) Использование различных языковых кодов, таких как fr_CA, fr_FR, fr. fr является единственным, который распознается, но у меня все еще была такая же проблема (даже после переименования папки в fr)
3) Изменение кода на 1252 и Windows-1252 (как в файле php, так и в файле PO)
4) Перезапуск всех услуг после каждого изменения

+0

FYI, Gettext перестал нормально работать на Windows, после того, как PHP/5,3 (см [Gettext всегда будет использовать систему локаль по умолчанию] (http://stackoverflow.com/questions/19569362/gettext-will-always-use- система по умолчанию-локали)). Независимо от того, я рекомендую переименовать вашу папку с 'French_Canada.1252' на что-то вроде' fr'. –

+0

У меня не было выбора, кроме как использовать [php-gettext] (https://launchpad.net/php-gettext/) – Falantar

ответ

0

Использование GetText Класс: https://github.com/oscarotero/Gettext И загрузите свой файл .po по-разному на локальном или в Интернете.

use Gettext\Translator; 
use Gettext\GettextTranslator; 

$locale = !empty($_GET['locale']) ? $_GET['locale'] : Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']); 
$_SESSION['locale'] = $locale; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
$domain = 'traduction'; 

if(strstr($_SERVER['HTTP_HOST'], '127.0.0.1')) { 

    $t = new Translator(); 

    //Create a Translations instance using a po file 
    $translations = Gettext\Translations::fromPoFile('locale/'.$locale.'/LC_MESSAGES/'.$domain.'.po'); 
    $t->loadTranslations($translations); 


} else { 

    //Create the translator instance 
    $t = new GettextTranslator(); 

    //Set the language and load the domain 
    $t->setLanguage($locale); 
    $t->loadDomain($domain, 'Locale'); 

} 

//If you want use the global functions 
$t->register(); 

echo __('Pomme'); // "Apple" 
echo n__('%d fenetre', '%d fenetres', 2, 2); // "2 windows" 
Смежные вопросы