是否可以将 gettext 与来自 mysqli_query 的数据一起使用?

Is it possible to use gettext with data from mysqli_query?

静态内容工作正常,但当我使用时:

$r = mysqli_query($dbc,"select name from table");
while($row = mysqli_fetch_array($r)){
    echo gettext($row['name']);

}

Poedit 无法识别我完全理解的动态内容。

但是有解决办法吗?

gettext 的工作流程基于这样一个事实,即您使用已定义的函数调用标记源代码,例如gettext('string to localise')。该源代码可以自动解析,所有可本地化的字符串都可以提取到一个 POT 文件中。显然,正如您所说,如果您要本地化的字符串实际上不在您的源代码中,这将不起作用。在这种情况下,您需要手动桥接该提取步骤。

您真正需要做的就是生成一个包含所有字符串的 POT 格式的文件。使用读取数据库内容并将相关条目输出到 POT 文件的简短 PHP 脚本应该相对容易。由于 POT 是一种广泛支持的格式,因此有许多 PHP 库可以轻松地为您生成此输出;您主要只需要编写一个数据库查询并围绕它进行循环。搜索您最喜欢的开源存储库,您会找到满足您需求的内容。

您可以从那里 concatenate 将该 POT 文件添加到您的其他 POT 文件中,或者您可以将其作为单独的翻译文件保存。您当然应该注意使用正确的 gettext 工作流程,以确保您永远不会用您的更改覆盖任何内容:

  1. 从数据库中提取最新的源字符串到 POT 文件中
  2. initialise 目标语言 PO 文件(仅限第一次)
  3. 对源进行更改,重复 1.,然后使用 msgmerge
  4. 将更改同步到 PO 文件中
  5. 本地化 PO 文件(使用 Poedit 或其他工具)
  6. compile PO文件转MO文件