我试图让每个文件拥有自己的语言文件。
我正在使用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中的字符串
任何代码,欢迎提示。 我试过谷歌搜索,但它没有提出太多。
答案 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
等。