【问题标题】:Is it possible to use gettext with data from mysqli_query?是否可以将 gettext 与来自 mysqli_query 的数据一起使用?
【发布时间】:2015-05-18 11:33:35
【问题描述】:
静态内容可以正常工作,但是当我使用时:
$r = mysqli_query($dbc,"select name from table");
while($row = mysqli_fetch_array($r)){
echo gettext($row['name']);
}
Poedit 无法识别我完全理解的动态内容。
但是有解决办法吗?
【问题讨论】:
标签:
php
database
mysqli
gettext
poedit
【解决方案1】:
gettext 的工作流程基于您使用定义的函数调用来标记源代码这一事实,例如gettext('string to localise')。此源代码可以自动解析,所有可本地化的字符串都可以提取到 POT 文件中。显然,正如您所说,如果您要本地化的字符串实际上不在您的源代码中,这将不起作用。在这种情况下,您需要手动桥接该提取步骤。
您真正需要做的就是生成一个包含所有字符串的 POT 格式的文件。使用一个简短的 PHP 脚本,读取数据库内容并将相关条目输出到 POT 文件中,这应该相对容易。由于 POT 是一种受到广泛支持的格式,因此有许多 PHP 库可以轻松地为您生成此输出;您通常只需要编写一个数据库查询并围绕它进行循环。搜索您最喜欢的开源存储库,您会找到适合您需求的内容。
从那里您可以concatenate 将该 POT 文件添加到您的其他 POT 文件中,或者您可以将其保存为单独的翻译文件。您当然应该注意使用正确的 gettext 工作流程,以确保您的更改不会覆盖任何内容:
- 从数据库中提取最新的源字符串到 POT 文件中
-
initialise目标语言 PO 文件(仅第一次)
- 在更改源时,重复 1.,然后使用
msgmerge 将更改同步到 PO 文件中
- 本地化 PO 文件(使用 Poedit 或其他)
-
compilePO文件转MO文件