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');

?>

注册.php

<?php

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

?>

索引.tpl

{$rendered_page}

注册.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 文件中分配每个语言字符串,但我希望,我能够只分配 who register 语言文件,然后随机调用它,而不必在 Register 中分配每个语言字符串.php

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

4

1 回答 1

1

你不应该将渲染的东西传递给 Smarty - 你应该传递一个字符串数组来使用。

注册.php

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

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

索引.tpl

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

会按照你的要求去做。

但是 - 您不想像这样编写它,因为当您不可避免地需要将参数传递给字符串时,使用它会非常痛苦。

您应该定义一个Smarty 函数以根据需要显示具有尽可能多的变量的翻译文本,例如

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

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

于 2013-03-15T13:46:26.483 回答