2016-02-10 51 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

仅供参考,gettext的停止后PHP/5.3(见[Gettext的总是会使用系统默认区域设置(http://stackoverflow.com/questions/19569362/gettext-will-always-use-在Windows上正常工作系统默认的语言环境))。无论如何,我建议你将你的文件夹从'French_Canada.1252'重新命名为'fr'。 –

+0

我别无选择,只能使用[php-gettext](https://launchpad.net/php-gettext/) – Falantar

回答

0

使用GetText类:https://github.com/oscarotero/Gettext 并在您的本地或Web上加载您的.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" 
相关问题