无法让 GETTEXT 与 MAMP 服务器上的 PHP 和 Windows 10 一起使用

Can't get GETTEXT to work with PHP on MAMP server and Windows 10

我想使用 gettextpoedit 以及 php 进行网站翻译。我可以让 poedit 工作,但 gettext 在我的本地 Web 开发环境 MAMP 中似乎不起作用,至少我认为这是问题所在。

我的规格:

OS: Windows 10
Gettext 0.21 with Libiconv 1.16 (installed with executable)
Dev Server: MAMP 4.2 (both apache and nginx server show the same error)
Dev Environment: PhpStorm (with MAMP local server set up)
PHP: 7.4 or 8.0 (both throw error)
Browser: Chrome and Firefox (both throw error)

MWEHTML:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1><?php gettext("Welcome") ?></h1>
</body>
</html>

输出:

Fatal error: Uncaught Error: Call to undefined function gettext() in C:\MAMP\htdocs\test\test.php:8 Stack trace: #0 {main} thrown in C:\MAMP\htdocs\test\test.php on line 8

我已经重新安装 MAMP 并更新了 gettext 但错误仍然存​​在。我错过了什么吗?

我也会对你们如何专业地进行翻译感兴趣。 Poedit 很方便,但有更好的方法吗?到目前为止,我只见过 PHPLaravel 数组,当你有大 paragraphsspans 时,使用它们非常不愉快。

编辑:

运行 phpinfo() 显示 gettext:

环境中:

PHP变量中:

编辑2:

php_gettext.dll 可以在 php/ext 目录中找到并且 extention=gettextphp.ini.

中激活

运行 php -r "echo gettext('hello');"php 目录中产生:

PHP Warning:  PHP Startup: Unable to load dynamic library 'gettext' (tried: C:\php\ext\gettext (Das angegebene Modul wurde nicht gefunden), C:\php\ext\php_gettext.dll (Das angegebene Modul wurde nicht gefunden)) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'gettext' (tried: C:\php\ext\gettext (Das angegebene Modul wurde nicht gefunden), C:\php\ext\php_gettext.dll (Das angegebene Modul wurde nicht gefunden)) in Unknown on line 0
PHP Fatal error:  Uncaught Error: Call to undefined function gettext() in Command line code:1
Stack trace:
#0 {main}
  thrown in Command line code on line 1

Fatal error: Uncaught Error: Call to undefined function gettext() in Command line code:1
Stack trace:
#0 {main}
  thrown in Command line code on line 1

我从 php -i 中提取了 extension_dir,即 C:PHP/ext。这个目录以前不存在。我已经通过将 C:\Program Files\gettext-iconv\lib\gettext 移到里面但没有变化来测试它。 gettext 文件夹中没有 .so 文件,这与@cetver 的回答不同。在那之后,我尝试将我的整个 PHP dist 移动到 C:PHP 但这也没有改变任何东西。

简而言之:我将 gettext 移到了 php extension dir 但它没有帮助。

编辑3:

现在我重新启动了我的机器,它工作了!

phpinfo() 现在显示 gettext 并且站点加载:

带走:

使用 C:PHP 作为你的 PHP 距离。

为 CLI SAPI 加载的 gettext 扩展:

$ php -r "echo gettext('hello');"

Web SAPI没有: 在phpinfo页面上搜索compile flag --with-gettext[=DIR]

  1. 查找扩展目录:php -i | grep extension_dir(例如 extension_dir => /usr/lib/php/20190902 => /usr/lib/php/20190902 )
  2. 找到gettext扩展路径:find /usr/lib/php/20190902 | grep gettext(例如/usr/lib/php/20190902/gettext.so)
  3. 从 cli 目录复制扩展到 web 目录:cp /usr/lib/php/20190902/gettext.so <phpinfo_page>/extension_dir_path
  4. 重新加载网络服务器