静态内容工作正常,但是当我使用时:
$r = mysqli_query($dbc,"select name from table");
while($row = mysqli_fetch_array($r)){
echo gettext($row['name']);
}
Poedit 无法识别我完全理解的动态内容。
但是有解决方法吗?
最佳答案
gettext 的工作流程基于这样一个事实:您使用定义的函数调用标记源代码,例如gettext('要本地化的字符串')
。该源代码可以自动解析,并且所有可本地化的字符串都可以提取到 POT 文件中。显然,正如您所说,如果您要本地化的字符串实际上不在源代码中,则这不起作用。在这种情况下,您需要手动桥接该提取步骤。
您真正需要做的就是生成一个 POT 格式的文件,其中包含所有字符串。使用一个简短的 PHP 脚本应该相对容易,该脚本读取数据库内容并将相关条目输出到 POT 文件中。由于 POT 是一种广泛支持的格式,因此有许多 PHP 库可以轻松地为您生成此输出;您大多只需要编写一个数据库查询并循环它。搜索您最喜欢的开源存储库,您会找到适合您需求的内容。
从那里您可以 concatenate将该 POT 文件复制到您的其他 POT 文件中,或者您可以将其保留为单独的翻译文件。您当然应该注意使用正确的 gettext 工作流程,以确保您的更改永远不会覆盖任何内容:
- 从数据库中提取最新的源字符串到 POT 文件
- initialise目标语言 PO 文件(仅限第一次)
- 对源进行更改时,重复 1.,然后使用
msgmerge
将更改同步到 PO 文件中 - 本地化 PO 文件(使用 Poedit 或其他工具)
- compile PO文件转MO文件
关于php - 是否可以将 gettext 与来自 mysqli_query 的数据一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29075374/