我正在尝试建立一个干净的环境来测试php的gettext。我从其中一个示例分叉并从此处开始,但未能使其正常工作: https://github.com/yookoala/gettext-example
(如果需要,请克隆源代码并进行自我测试)
PHP脚本的主要部分:
<?php
// set locale to either first argument or the $_GET['locale']
$localeToSet = $argv[1] ?? $_GET['locale'] ?? 'zh_HK.utf8';
if (($locale = setlocale(LC_ALL, [
$localeToSet,
"$localeToSet.utf8",
"$localeToSet.utf-8",
"$localeToSet.UTF8",
"$localeToSet.UTF-8",
])) === false) {
throw new Exception($localeToSet . ' is not supported in this system');
}
bindtextdomain('messages', 'locale');
textdomain('messages');
printf("locale: %s - \n", $locale);
printf(_("Hello, %s, it is nice to see you today.\n"), "Vic");
locale/zh_HK/LC_MESSAGES/messages.po
文件:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Codegroove.net
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr "Project-Id-Version: Codegroove.net Example Translations 0.0.1\n"
"Report-Msgid-Bugs-To: vmc@codegroove.net\n"
"POT-Creation-Date: 2010-05-28 06:18-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#, php-format
msgid "Hello, %s, it is nice to see you today.\n"
msgstr "你好,%s,很高興今日與你會面。\n"
CLI和PHP测试服务器均无法显示翻译后的文本(如预期的那样)。它只是显示原始消息。
这里有人知道我的设置有什么问题吗?还是我该如何找到问题所在?
答案 0 :(得分:0)
还有gettext的命令行版本。试试这个:
TEXTDOMAIN=messages TEXTDOMAINDIR=locale LC_ALL=zh_HK.UTF-8 gettext 'Hello, %s, it is nice to see you today.
>'
代替换行符,您必须按Enter,然后添加结束引号。 >
来自您的外壳。
行得通吗?然后,您知道问题出在代码中。如果不起作用,则问题出在您的设置和本地环境中。尝试查看gettext
会考虑哪些目录和文件,例如使用strace
左右。
其他可能的错误:
mo
文件而不是po
文件中检索的。是否存在?尝试msgunfmt locale/zh_HK/LC_MESSAGES/messages.mo
。bindtextdomain('messages', '/path/to/locale');
指定语言环境目录的绝对路径实际上使用什么语言环境?您没有发布脚本的输出。