PHP I18N gettext不能以特定语言翻译一个特定字符串

问题描述

我一直在打扰我的大脑并搜索互联网一段时间,却没有找到类似于我的解决方案(或案例),所以我转向这里的每个人:

我目前正在使用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的一个超级容易的改变)

由于Google-Fu的功能不佳,我是否应该错过此问题的解决方案,对不起?

是否需要其他代码部分进行澄清,我将在需要时添加它们

The part of the page in question,both languages compared

解决方法

不是从.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")