11

有一些关于 gettext 的教程(使用 Poedit)......不幸的是,它主要用于 UNIX 环境。更不幸的是,我在 Windows XP 上运行我的 WAMP 服务器(但我正在为 UNIX 环境进行开发),并且没有任何教程可以让 gettext 为我正常工作。从手册页看来,它在 Windows 环境中是一个不同的过程。我已经在评论中尝试了一些解决方案,但我仍然无法让它发挥作用!我已经花了很多时间在这上面,希望有人能指出我正确的方向来让这个东西工作!(而且我敢肯定还有其他人与我一样感到沮丧。)到目前为止,我的设置,我只得到输出“Hello World!” 而我应该得到翻译后的字符串。

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

// 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"); 

文件夹结构

根目录: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
4

6 回答 6

6

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

我从网页上引用:

在 Linux 服务器(或除 windows 之外的任何其他服务器)上,这样做的方法是:

setlocale(LC_MESSAGES, “en_US”);

在 Windows 上设置位置的正确方法是:

putenv(“LC_ALL=en_US”);
于 2010-04-25T15:44:07.760 回答
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");

?>

希望能帮助到你。

于 2011-07-18T21:00:04.907 回答
0

我没有对此进行全面调查,但我确信您的错误之一是您使用了无效的语言环境代码——即使在 Windows 上,语言环境代码也是相同的——这些是 gettext 语言环境,它们是跨平台的。

请尝试仅使用“de”作为语言环境代码,它应该可以工作。还要确保您的 PHP 已安装并激活了 gettext 扩展(检查 phpinfo)。

于 2009-12-12T17:23:11.200 回答
0

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

于 2013-09-11T14:30:22.057 回答
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");
?>

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

于 2014-06-12T11:16:08.390 回答
-3

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

于 2012-09-16T09:36:39.203 回答