1

各ファイルに独自の言語ファイルを持たせようとしています。

osDate、SMF、および自分のコードを組み合わせて使用​​しています。osDateは言語をデータベースに保存しますが、これは望ましくありません。各ファイルに独自の言語ファイルを持たせたいので、たとえば、registerにはlang / english/register.phpに独自の言語ファイルがあります。

Smartyを使用するので、頭痛の種になります。

以下のPHPコードは機能していますが、言語側を追加または機能させる方法がわかりません。

これが私の現在のコードです。

tester1.php

<?php

if (!defined('SMARTY_DIR')) {
    include_once('init_test.php');
}

$actionArray = array(
    'register' => array('Register.php', 'Register'),
);

if (!isset($_REQUEST['action']) || !isset($actionArray[$_REQUEST['action']])) {
    echo '<a href="?action=register">test</a>';
} else {
    require_once($actionArray[$_REQUEST['action']][0]);
    call_user_func($actionArray[$_REQUEST['action']][1]);

}

$t->display('index.tpl');

?>

Register.php

<?php

function Register() {
    global $t;
    $t->assign('rendered_page', $t->fetch('register.tpl'));
}

?>

index.tpl

{$rendered_page}

register.tpl

Test: {$testlang}<br>
Title: {$title}

言語ファイル-lang/english / register.php

<?php

$lang['testlang'] = 'working';
$lang['title'] = 'This is the title';

?>

したがって、この例では、RegisterはRegister.phpから言語を渡してregister.tplに表示する必要があります。

Register.phpファイルで各言語文字列を割り当てることができることは承知していますが、Registerで各言語文字列を割り当てることなく、who register言語ファイルを割り当ててから、ランダムに呼び出すことができると期待していました。 .php

どんなコードでも、ヒントは大歓迎です。グーグルを試しましたが、あまり思いつきませんでした。

4

1 に答える 1

1

レンダリングされたものをSmartyに渡さないでください。使用する文字列の配列を渡す必要があります。

register.php

$lang = array(
    'test' => "working",
    'title' => "This is the title", 
);

function Register() {
   global $lang;
   $t->assign('lang', $lang);
}

index.tpl

Test: {$lang['test']}<br>
Title: {$lang['title']}

あなたが求めたことをします。

ただし、パラメータを文字列に渡す必要がある場合に使用するのは非常に面倒なので、このようにコーディングする必要はありません。

必要な数の変数を使用して翻訳されたテキストを表示するSmarty関数を定義する必要があります。

{translate string='Greeting' name=$user.name}

translate関数が、として定義される既知の文字列のリストから「Greeting」文字列をプルする場合Hello %name%。その後、ユーザー名に置き換え%name%られますHello John

于 2013-03-15T13:46:26.483 に答える