PHP I18N gettext不翻译特定语言中的特定字符串

PHP I18N gettext不翻译特定语言中的特定字符串,php,html,internationalization,gettext,Php,Html,Internationalization,Gettext,我一直在绞尽脑汁,在互联网上搜索了一段时间,却没有找到一个与我类似的解决方案(或案例),所以我转向这里的每个人: 我目前正在一个网站上工作,该网站使用gettext扩展进行国际化,目前计划只使用英语和德语。 不管怎么说,我的翻译在很大程度上是有效的,但对我来说,有一个非常奇怪的问题,我似乎无法解决: 首先,一些代码/背景: 问题发生在通过php包含的页脚中,页脚包含一个小的侧导航: <div class="nav fixed-bottom style-footer"&g

我一直在绞尽脑汁,在互联网上搜索了一段时间,却没有找到一个与我类似的解决方案(或案例),所以我转向这里的每个人:

我目前正在一个网站上工作,该网站使用gettext扩展进行国际化,目前计划只使用英语和德语。 不管怎么说,我的翻译在很大程度上是有效的,但对我来说,有一个非常奇怪的问题,我似乎无法解决:

首先,一些代码/背景:

问题发生在通过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>
中文:

#: includes/footer.php:3
msgid "btn_contact"
msgstr "Contact"
现在,当我打开页面时,每个字符串都正确显示,除了btn_联系人,甚至是来自同一文件(footer.php)的btn_语言,这只发生在德语中,当我切换到英语时,它正确显示“contact”,而不是像切换到德语时那样显示“btn_contact”(如果不清楚,我会在底部添加两张显示英语和德语的图片)

我在Windows 10 PC上进行本地开发,使用IIS在我的PC上托管页面,在我的同事Windows 10 PC和他的MacBook上也是如此(都使用XAMPP托管)

我尝试过删除po文件中的btn_联系人条目,我通过PoEdit删除并重新创建了德语翻译,清除浏览器缓存(在Chrome、Edge(又名reskinned Chrome)和Firefox中都是最新的)等,删除并重写footer.php中的行,删除并重新安装IIS

我不知道我还能改变什么(inb4这是一个超级简单的改变,我的笨蛋根本看不到)

如果我因为Google Fu太弱而错过了这个问题的解决方案,我道歉

如果需要其他代码部分进行澄清,我会在需要时添加它们


字符串不是从
.po
文件转换而来,而是从
.mo
文件转换而来。您可以使用
msgfmt
程序从
.po
文件创建
.mo
文件

看起来您的德语
.mo
文件不完整,并且缺少“btn_联系人”的翻译。您可以使用程序
msgunfmt
检查
.mo
文件的内容:

msgunfmt FILENAME.mo
有关翻译工作流的更多详细信息,请参阅文档()。更新(重新编译)
.mo
文件后,应显示翻译

顺便说一下,不需要使用丑陋的符号标识符(如“btn_contact”)作为消息ID。只需使用原始字符串:

_("Contact")

你有没有试过用英文文件替换德语文件,看看这个文件对你是否也有效?这样你就可以推断出文件本身没有损坏。如果有效,我会更改btn_contact的值,看看是否有效。如果有效,请检查你使用的字符编码。让我知道错误sults,我将帮助您进一步调试。我尝试更改这些值,奇怪的是,这些值确实显示了btn_联系人当时正确的术语,但当我更改回“Kontakt”时,它仍保留在测试条目上。然后我尝试切换文件,这似乎完全破坏了一切。在一阵愤怒中,我删除了整个语言目录(root/locales/locale code/LC_MESSAGES/main.po)并完全从头开始重新对其进行了编辑,而且由于某种原因(目前)它似乎可以正常工作
_("Contact")