PHP / Smarty - 每个文件都有自己的语言文件

时间:2013-03-14 15:54:08

标签: php smarty

我试图让每个文件拥有自己的语言文件。

我正在使用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.php中的字符串

任何代码,欢迎提示。 我试过谷歌搜索,但它没有提出太多。

1 个答案:

答案 0 :(得分: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 function以显示具有所需数量的翻译文本,例如

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

翻译函数将从已定义为Hello %name%的已知字符串列表中提取“问候”字符串。然后,它会将%name%替换为用户名称Hello John等。