PHP中gettext的__函数无法翻译,是否需替换为gettext()?
为什么
__()不生效而gettext()可以? 嘿,这个问题我之前也踩过坑!其实核心原因很简单:原生PHP里并没有__()这个函数——你在文章里看到的__()大多是WordPress、Laravel这类框架自定义的gettext别名,而非PHP gettext扩展的原生语法。
先理清原生gettext的内置别名
PHP的gettext扩展只内置了一个官方别名:单下划线的_(),它和gettext()完全等价。也就是说,你直接把代码改成这样就能正常工作:
echo _("Test 2"); // 这行和gettext("Test 2")效果完全一致
让__()生效的简单解决办法
如果你习惯用双下划线的__(),只需要自己定义一个全局函数就行,把它作为gettext()的简单包装:
// 可以把这段代码放在你的公共配置文件或入口文件开头 function __($message) { return gettext($message); }
添加完这个函数后,__("Test 2")就会和gettext("Test 2")一样正常返回翻译内容了。
额外提醒
如果之后你切换到某个Web框架开发,框架自带的__()可能会包含更多附加逻辑(比如处理翻译域、上下文或者多语言切换),但在原生PHP的纯gettext场景下,必须自己定义这个函数才能使用。
完全没必要把所有__()替换成gettext(),加个简单的函数定义就能搞定问题啦!
内容的提问来源于stack exchange,提问作者neggenbe
相关产品推荐
相关产品推荐

