0

私は多言語スクリプトを作成しています。私は完全に動作するようにしました。言語変数を含む配列があります。各言語には、変数を含む独自のファイルがあります。スクリプトは、ユーザーが選択した言語に基づいてロードするファイルを決定します。

これは私が各言語ファイルに持っているものです:

$lang = array();
$lang['var1'] = "Some text here";
$lang['var2'] = "Some text here";
...
$lang['var20'] = "Some text here";

今、私はそれをより動的にして、パラメーターを含めたいと思っています。vBulletin 言語テンプレートで見たのですが、次のようなものがありますtext text text {1} text text text {2} text text

このテキストが欲しい: Hello {1}, this is the User CP. パラメータは動的で、ユーザーごとに異なる必要があります。

これを行う方法?

4

3 に答える 3

1

それをどのように使用したいかによって異なりますが、たとえば、次のように使用printfまたはsprintf出力することができます。

言語ファイル:

$lang['varxx'] = 'Hello %s, this is the User CP';

それを使用するスクリプト:

$name = "test user";
printf($lang['varxx'], $name);
$modified_string = sprintf($lang['varxx'], $name);
于 2012-06-29T20:54:36.020 に答える
0

通常、ラッパー関数が使用されます。$langこれまでアレイに直接アクセスしていた場合は、適応する必要があります。

そして、それを行うのは非常に簡単です。

 function t ($textid) {

      $text = $GLOBALS["lang"][$textid];
      $args = func_get_args();

      $text = preg_replace('#\{(\d+)\}#e', '$args[$1]', $text);

      return $text;
 }

ただし、別のパターンスキームを使用して、正規表現を回避することができます。

使用法は単純です:

 print t("var1", "placeholder", ...);
于 2012-06-29T20:57:03.703 に答える
0
$lang = array();
$lang['var1'] = "Hello %1$s, here's a %2$s";
echo vsprintf($lang['var1'], array("John", "cookie"));

出力:

Hello John, here's a cookie

sprintfvsprintfの詳細

于 2012-06-29T20:58:00.477 に答える