问题描述
我一直在打扰我的大脑并搜索互联网一段时间,却没有找到类似于我的解决方案(或案例),所以我转向这里的每个人:
我目前正在使用gettext-extension进行国际化的网站上工作,目前仅计划使用英语和德语。 总而言之,我的翻译工作大部分都在进行中,但是对我来说,有一个非常奇怪的问题,我似乎无法解决:
首先,一些代码/背景:
问题出现在通过PHP包含的页脚中,并且页脚中包含一个小的侧面导航:
<div class="nav fixed-bottom style-footer">
<div class="col-auto">
<a class="nav-link" href="./index.PHP?page=contact"><?PHP echo _("btn_contact"); ?></a>
</div>
<div class="col-auto">
<a class="nav-link" href="#"><?PHP echo _("btn_language"); ?></a>
</div>
<div class="col-auto">
<a class="nav-link" href="#"><?PHP echo _("btn_contact"); ?></a>
</div>
</div>
(我添加了“ btn_language”作为测试,认为可能是无法正确翻译整个文件的情况,但事实并非如此),该页面也是使用banner.PHP构建的, nav.PHP,content.PHP,footer.PHP,其中content.PHP动态更改/显示内容,其余部分始终显示/“静态”并固定在其位置(位于页眉上方内容上方Nav上方的页眉(固定至底部)浏览器窗口))
po文件最初是通过PoEdit创建的,它可以正确识别并抓取所有其他文件中的“ btn_contact”条目,所讨论的po条目如下所示:
德语:
#: includes/footer.PHP:3
msgid "btn_contact"
msgstr "Kontakt"
英语:
#: includes/footer.PHP:3
msgid "btn_contact"
msgstr "Contact"
现在,当我打开页面时,每个字符串都可以正确显示,除了btn_contact字符串中的 ,甚至是btn_language来自同一文件(footer.PHP)以及 only 以德语显示,当我切换到英语时,它会正确显示“ Contact”,而不是切换到德语时的“ btn_contact”(如果不清楚,我会在底部添加两张显示英语和德语的图片)
我正在Windows 10 PC上进行本地开发,在工作时使用IIS在PC上托管页面,在Windows 10 PC和他的MacBook上都是相同的(两者都使用XAMPP托管) 我尝试删除po文件中的btn_contact-Entry,我通过PoEdit删除并重新创建了德语翻译,清除了浏览器缓存(在Chrome,Edge(也称为重新命名为Chrome的Chrome)和Firefox中发生)都是最新的)等,删除并重写footer.PHP中的行,删除并重新安装IIS 我不知道还有什么可以改变的(inb4这是我的笨蛋没有看到atm的一个超级容易的改变)
解决方法
不是从.po
文件而是从.mo
文件转换字符串。您可以使用.mo
程序从.po
文件创建msgfmt
文件。
您的德语.mo
文件似乎不完整,并且缺少“ btn_contact”的翻译。您可以使用程序.mo
检查msgunfmt
文件的内容:
msgunfmt FILENAME.mo
有关翻译工作流程的更多详细信息,请参阅文档(https://www.php.net/manual/en/book.gettext.php)。更新(重新编译).mo
文件后,应显示翻译。
顺便说一句,无需使用丑陋的符号标识符(例如“ btn_contact”)作为消息ID。只需使用原始字符串即可:
_("Contact")