1

構築した Web サイトをローカライズしています。私は .lang ファイルを読み込んで、選択した言語に応じて各行 (構文: key=string) を変数に配置することでこれを行っています。

この配列は、文字列を正しい場所に配置するために使用されます。

私が抱えている問題は、特定の文字列の途中にハイパーリンクを配置する必要があることです。たとえば、連絡先ページにリンクする名前を配置した場所などです。または、Web サイトの読み取りの多くを文字列にする必要があります。

これを解決するために、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

すべての変数名がわからない場合は、. なしでこの例を使用できます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 に答える