Windows上的PHP gettext

时间:2009-09-24 17:54:24

标签: php windows gettext

有一些关于gettext(w / Poedit)的教程......不幸的是,它主要用于UNIX环境。更不幸的是,我在Windows XP上运行我的WAMP服务器(但我正在为UNIX环境开发),并且没有一个教程可以让gettext正常工作。从手册页(http://us3.php.net/manual/en/book.gettext.php)开始,它似乎是Windows环境中的不同进程。我已经在评论中尝试了一些解决方案,但我仍然无法让它工作!拜托,我花了很多时间在这上面,希望有人可以指出我正确的方向让这件事情发挥作用! (而且我确信还有其他人与我分享我的挫折感)。到目前为止,我的设置,我只输出“Hello World!”而我应该得到翻译的字符串。

到目前为止,这是我的设置/代码:

<?php
// test.php
if (!defined('LC_MESSAGES')) {
    define('LC_MESSAGES', 6);

}
$locale = "deu_DEU"; // apparently the locales are different on a WINDOWS platform

putenv("LC_ALL=$locale");
setlocale(LC_ALL, $locale);
bindtextdomain("greetings", ".\locale");
textdomain("greetings");


echo _("Hello World"); 

?>

文件夹结构

root:     C:\Program Files\WampServer 2\www
test.php: C:\Program Files\WampServer 2\www\site
.po:      C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.po
.mo:      C:\Program Files\WampServer 2\www\site\locale\deu_DEU\LC_MESSAGES\greetings.mo

请指教!谢谢你的时间:))

6 个答案:

答案 0 :(得分:6)

我在本地计算机上使用gettext时遇到了问题,经过一些搜索后我发现这个页面解决了我的问题: http://www.kipras.com/getting-gettext-to-work-in-apache-on-windows/96

我引用网页:

  

在Linux服务器(或任何其他服务器上)   除了窗户),这样做的方法是   这样:

setlocale(LC_MESSAGES, “en_US”);
     

设置地点的正确方法   窗户是这样的:

putenv(“LC_ALL=en_US”);

答案 1 :(得分:2)

我遇到了同样的问题,几乎浪费了一天左右的时间。最后,我找到了一个非常简单的解决方案,即卸载WAMP Server(版本2.1),安装较新版本(WampServer 2.1e - 32位)。这很奇怪,但它完全解决了这个问题。

以下是适用于我的示例代码:

<?php

    $locale = "deu_DEU";

    putenv("LC_ALL=$locale");
    setlocale(LC_ALL, $locale);

    bindtextdomain("greetings", "./locale");
    textdomain("greetings");

    echo _("Hello World");

?>

希望它有所帮助。

答案 2 :(得分:0)

我没有对此进行全面调查,但我确定您的一个错误是您使用了无效的区域设置代码 - 即使在Windows上,区域代码是相同的 - 这些是gettext区域设置,它们是跨平台的。

请尝试仅使用“de”作为区域设置代码,它应该可以工作。还要确保您的PHP安装并激活了gettext扩展(请使用phpinfo进行检查)。

答案 3 :(得分:0)

可能为时已晚,但在我的WAMP php设置中启用“短打开标签”之前我遇到了类似的问题

答案 4 :(得分:0)

这是适合我的解决方案。这适用于最新的wampserver。 (来源:http://www.extradrm.com/blog/?p=1035

1)从这里下载php-gettext:https://launchpad.net/php-gettext/+download并解压缩

2)将包根目录中的以下文件添加到与test-language.php相同的文件夹中: - gettext.inc - gettext.php - streams.php

3)打开你的php.ini并注释掉wampserver php_gettext.dll:

;extension=php_gettext.dll

4)这是新的测试文件test-language.php

<?php
error_reporting(E_ALL | E_STRICT);

// define constants
define('PROJECT_DIR', realpath('./'));
define('LOCALE_DIR', 'C:/wamp/www/test/locale');
define('DEFAULT_LOCALE', 'es_ES');

require_once('gettext.inc');

$supported_locales = array('en_US', 'sr_CS', 'de_CH','es_ES');
$encoding = 'UTF-8';

$locale = (isset($_GET['lang']))? $_GET['lang'] : DEFAULT_LOCALE;

//var_dump($locale);die();

// gettext setup
T_setlocale(LC_MESSAGES, $locale);
// Set the text domain as 'messages'
$domain = 'messages';
bindtextdomain($domain, LOCALE_DIR);
// bind_textdomain_codeset is supported only in PHP 4.2.0+
if (function_exists('bind_textdomain_codeset'))
bind_textdomain_codeset($domain, $encoding);
textdomain($domain);

echo gettext("HELLO_WORLD");
?>

完成所有这些后,您必须创建语言环境文件夹,en_US(或其他语言)文件夹,LC_MESSAGES文件夹,然后放入messages.po文件。

答案 5 :(得分:-3)

这是因为我没有安装语言环境。