1

我正在本地化我建立的网站。我通过读取 .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,但没有任何区别。

4

2 回答 2

0

就我个人而言,我会以 JSON 格式编写您的文本文件,以便更轻松地提取数据。

这是直接来自 php 手册的解决方案:http: //nz2.php.net/manual/en/function.eval.php

$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";

值得注意的是 eval() 以错误的方式使用可能非常危险,因此请确保您的代码非常安全。例如,如果有人用真正的 PHP 代码更改了您的 txt 文件,他们可以直接在服务器上执行它。

另一种方法需要您知道所有变量名称,然后可以执行以下操作:

$str = 'Heating up took $str_time';
echo 'str=' . str_replace('$str_time', $str_time, $str);

或通过数组执行此操作:

$str = 'Heating up took $str_time as well as $other_value';
$vars = Array('str_time', 'other_value');
foreach($vars as $varName) {
  $str = str_replace('$' . $varName, $$varName, $str);
}
echo 'str=' . $str;
于 2013-10-03T09:47:00.157 回答
0

如果你不知道所有的变量名,你可以使用这个例子,不用eval(). 建议避免eval()

$str = 'fuel.results.heatup.timeused=Heating up took $str_time';
$str_time = 'value';
if(preg_match('/\$([a-z0-9_]+)/i', $str, $v)) {
  $vname = $v[1];
  $str = str_replace('$'.$vname, $$vname, $str);
}
echo $str;      // fuel.results.heatup.timeused=Heating up took value
于 2013-10-03T09:57:11.737 回答