2013-03-14 46 views
1

我想让每个文件都拥有它自己的语言文件。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} 

语言文件 - 朗/英语/ register.php

<?php 

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

?> 

在例子中注册需要通过从Register.php语言寄存器来显示。第三方物流。

我知道我可以分配Register.php文件中的每个语言字符串,但我希望,我将能够只分配谁注册语言文件,然后随机调用它,而不必分配每个语言字符串在Register.php

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

回答

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等。

相关问题