我的项目包含带有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的时候,在定位翻译时会有一些问题。
我不是在寻找存储数据的替代方案,我是在寻找这个问题的解决方案。
发布于 2011-02-22 01:48:56
使用preg_replace_callback或/e (eval --它听起来像邪恶是有原因的!)preg_replace的修饰符。
发布于 2011-02-22 01:57:39
如果您在preg_replace触发之前调用gettext函数,则需要允许PCRE库为您调用该函数,如果您使用的是PHP5+,请尝试执行以下操作:
preg_replace_callback("%\<t\>([a-zA-Z0-9\.\\s)]*)\</t\>%is",function($matches){
return $matches[1];
},$template);https://stackoverflow.com/questions/5069321
复制相似问题