1

我正在尝试将网页翻译成多种语言。但是,我只能让 gettext 为西班牙语工作。

我正在使用这段代码:

$lang = "de_DE";
if (isset($_GET['lang'])) $lang = $_GET['lang'];
putenv("LC_ALL=$lang");
setlocale(LC_ALL, $lang);
bindtextdomain("messages", "locale");
bind_textdomain_codeset('messages', 'UTF-8');
textdomain("messages");

如果我设置 $lang="es_ES" 字符串被翻译成西班牙语,但如果我设置 $lang="de_DE" 翻译不起作用,我只会看到默认的英文版本。

我认为这可能与我的计算机语言环境有关(我在西班牙语中使用 Windows)。我在 Windows 上工作(使用 Wamp localhost),我不知道我是否需要安装更多的东西,如果是的话,怎么做。

如果我必须这样做,它会在我的在线托管中工作而无需在那里安装任何东西吗?

谢谢!:)

4

1 回答 1

1

setlocale() 在 Windows 中存在 PHP 官方文档中提到的问题:

语言环境信息是按进程维护的,而不是按线程维护的。如果您在 Windows 上的 IIS 或 Apache 等多线程服务器 API 上运行 PHP,您可能会在脚本运行时遇到语言环境设置的突然更改,尽管脚本本身从未调用 setlocale()。这是由于其他脚本同时在同一进程的不同线程中运行,使用 setlocale() 更改了进程范围的语言环境。

Windows 用户可以在 Microsoft 的 MSDN 网站上找到有关区域设置字符串的有用信息。支持的语言字符串可在 »语言字符串文档中找到,支持的国家/地区字符串可在 »国家/地区字符串文档中找到。

您需要意识到的主要是许多 PHP 函数是 *ix OS 程序 API 的包装器。所以它们在 linux 和其他兼容的操作系统中可以很好地工作——在 Windows 中不是那么好。

于 2013-05-04T01:34:29.480 回答