我的项目包含HTML模板。为了简化本地化,我在HTML模板的所有内容中添加了一个前缀和后缀。由于我无法在HTML中使用_()
,因此在显示模板之前我会进行替换:
preg_replace("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",_("$1"),$template);
我用我的_()
翻译功能替换了tr()
,显然它被点击了,我猜不能找到翻译。
当我使用print _('same text');
时,它会正确显示。
preg_replace("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",_("hello"),$template);
所以我猜测在使用preg_replace
这样的时候找到翻译有一些问题。
我不是在寻找存储数据的替代方案,如果您有任何问题,我正在寻找解决方案。
答案 0 :(得分:2)
使用preg_replace_callback
或/e
(eval - 这就是为什么它听起来像邪恶!)修饰符preg_replace
。
答案 1 :(得分:1)
你在preg_replace被触发之前调用gettext函数,你需要允许PCRE库为你调用这个函数,如果你使用PHP5 +那么试试这个:
preg_replace_callback("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",function($matches){
return $matches[1];
},$template);