我正在编写一些代码,但是我想要实现除数据库之外的语言系统(可能稍后集成)。 目前我在我的语言课中有这些代码行:
final public function findTexts()
{
global $engine;
$file = file_get_contents('./styles/'.$engine->getStyle().''.$engine->getPage());
if(strpos($file, '%%'))
{
echo "String found";
}
}
让我告诉你我的其他功能:
final public function getText($text)
{
global $engine, $LANG;
$text = str_ireplace($text, $LANG[substr($text, 2, -2)], $text);
echo $text;
}
我想要做的是检查字符串的文件(在样式文件夹中)(例如%% Hi %%)。在我的语言文件中,我说Hi == Hello,所以当我执行getText函数时,它会说'Hello'。但是,我想让它变得简单,所以你只需要在文件中键入%% Hi %%,语言类将自动检查包含%%的所有字符串,最后是%%,并将替换%%和%%中的字符串,语言文件中包含给定的字符串。
希望这是足够的信息...
非常感谢!
答案 0 :(得分:0)
您可以使用正则表达式和preg_replace_callback来完成此操作。请参阅下面的示例:
<?php
final public function findTexts()
{
global $engine;
$file = file_get_contents('./styles/'.$engine->getStyle().''.$engine->getPage());
$language = $this;
$file = preg_replace_callback('/(%%([^%]+)%%)/',function($matches) use ($language){
$word = $matches[2];
return $language->getText($word);
},$file);
}
如果您有大量文件或大量替换,此方法可能会变得非常慢。如果你在做一个非常小的个人网站,那就太棒了。如果您正在做一些更大的事情,我强烈建议缓存结果,这样您就不必为每个请求和文件重新计算它。