php - GetText 和 PO 文件不适用于 XAMPP、PHP 7.3
问题描述
我知道有很多关于同样问题的帖子,但我真的无法弄清楚。
使用 PHP 7.3.23 在 OS X 上运行 XAMPP
PHP 片段:
<?php
$language = "fr_CA";
putenv("LANGUAGE=".$language);
//if(!defined('LC_ALL')) putenv('LC_ALL=' . $language);
$setlocale = setlocale(LC_ALL, $language);
$domain = "textdomain";
$bindtextdomain = bindtextdomain($domain, realpath(dirname(__FILE__)."/locale"));
$textdomain = textdomain($domain);
bind_textdomain_codeset($domain, 'UTF-8');
var_dump($setlocale); // Returns : string(5) "fr_CA"
var_dump($bindtextdomain); // Returns : string(57) "/ABSOLUTE_PATH_TO_WEBSITE/locale"
var_dump($textdomain); // Returns : my textdomain
echo _("Ceci est un test"); // Returns : the same (instead of "TEST REUSSI")
采购订单文件:
"Project-Id-Version: Projet\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-11-29 10:56-0500\n"
"PO-Revision-Date: 2020-11-29 10:57-0500\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: fr_CA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.2\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Poedit-KeywordsList: _;__;_e;esc_html__\n"
"X-Poedit-Basepath: ../../..\n"
"X-Poedit-SearchPath-0: .\n"
#: _test.php:7 _test_locale.php:18
msgid "Ceci est un test"
msgstr "TEST REUSSI"
文件夹结构是这样的:
locale/fr_CA/LC_MESSAGES/textdomain.po and .mo
语言环境存在(如果我查找语言环境 -a),也尝试重新启动 Apache。我没主意了。
解决方案
您需要将文本域添加到您的通话中:
// No good
echo _("Ceci est un test");
// This will work!
echo _($domain . "\004" . "Ceci est un test");
现在将文本域添加到msgctxt "textdomain"
您的 PO 文件中并保存。
#: _test.php:7 _test_locale.php:18
msgctxt "textdomain" # Add this
msgid "Ceci est un test"
msgstr "TEST REUSSI"
请记住,$domain
必须匹配该msgctxt
值。
此答案改编自“gmail dot com 的 kingjackal”的 PHP 官方文档评论,可以在此处查看
推荐阅读
- powershell - 电源外壳。为每个对象添加 +1 位
- gremlin - 带有确认的海王星丢弃顶点属性
- java - 如何以编程方式获取 HeaderManager 及其添加的 Header 等 HttpSamplerProxy 元素
- json - 如何通过 NEXT.js 中的 id 从 json 数组中的数据中选择一项
- ios - 使用 firebase-tools 删除 Firestore 文档不起作用
- swift - 解码快速继承数据
- angular - 迁移失败:找不到配置文件
- oracle-apex - Oracle APEX - 显示条件提示
- c# - 如何为同时运行的多个 ActionBlock 设置 CPU 优先级?
- python - 使用我的凭据进行 Google 誓言所有身份验证