【发布时间】:2013-10-03 09:23:52
【问题描述】:
我正在本地化我建立的网站。我通过读取 .lang 文件并根据所选语言将每一行(语法:key=string)放在一个变量中来做到这一点。
然后使用此数组将字符串放置在正确的位置。
我遇到的问题是某些字符串需要在它们中间有超链接,例如在某个地方我把我的名字链接到我的联系页面。或者网站的很多读数都需要在字符串中。
为了解决这个问题,我定义了一个包含 html + Forecaster + html 的变量, 并且本地化文件在字符串中包含 $Forecaster 变量。
我很快发现的问题是它顽固地拒绝从文件中解析字符串中的内联变量。
而是打印文件中的字符串和变量名。
我还没有找到让它解析变量的方法。
例如,“加热花费了 $str_time”将完全像这样打印在页面上,而不是输入之前定义的 $str_time 值。
我目前使用 fopen() 和 fgets() 打开和读取这些行。然后我分解它们以分离键和字符串,然后将它们放入数组中。
有没有办法让它解析变量,或者是否有另一种方法可以读取允许解析内联变量的行?
获取该行并将其转换为数组的代码如下所示:
(显然是循环播放)
#list($key, $string) = explode('=', $line);
$key = strtok($line, '=');
$string = strtok('=');
$local[$key] = $string;
$counter++;
echo $local[$key] . "<br>";
计数器未使用,回显用于测试。
.lang 文件中的一行如下所示:
fuel.results.heatup.timeused=Heating up took $str_time
我会在我想要这样的字符串的地方调用数组:
$local['fuel.results.heatup.timeused']
如您所见,我已经尝试过 explode 和 strtok ,但没有任何作用。
【问题讨论】:
-
请出示您的代码。您是否使用双引号作为字符串分隔符?
-
与其自己“创建”变量,为什么不在这个文件中使用真正的 PHP 代码来定义变量并包含它? (顺便说一句,我宁愿选择一个保存翻译的数组,而不是全局范围内的单个变量,而不是将其设为全局,而是将其包装在一个返回它的函数中。)
-
如果我是唯一一个制作语言文件的人,我只会使用 php 文件。但由于其他人能够提供翻译,我希望 .lang 文件尽可能简单。
-
当然我不使用"作为分隔符。我使用=作为分隔符将键与字符串分开。
-
删除爆炸的东西会产生相同的结果。似乎问题出在 fgets 或附近。
标签: php string file parsing variables