我正在尝试将网页翻译成多种语言。但是,我只能让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),我不知道是否需要安装更多内容,如果有的话,该怎么做。
如果我必须这样做,它会在我的在线托管中工作而不在那里安装任何东西吗?
谢谢! :)
答案 0 :(得分:1)
setlocale()在PHP的官方文档本身中提到了Windows中的问题:
每个进程维护区域设置信息,而不是每个线程。如果 您正在IIS或Apache等多线程服务器API上运行PHP 在Windows上,您可能会遇到语言环境设置的突然更改 脚本正在运行,但脚本本身从未调用过 的setlocale()。这是由于其他脚本运行不同而发生的 同一个进程的线程同时改变了 使用setlocale()的进程范围的语言环境。
Windows用户可以在以下位置找到有关区域设置字符串的有用信息 微软的MSDN网站。支持的语言字符串可以在中找到 »language strings documentation和支持的国家/地区 »country/region strings documentation。
中的字符串
主要是你需要意识到的是许多PHP函数都是* ix OS程序API的包装器。因此,它们将在Linux和其他兼容的操作系统中运行良好 - 在Windows中效果不佳。