2013-03-14 2 views
1

Я пытаюсь заставить каждый файл иметь собственный языковой файл.PHP/Smarty - у каждого файла есть собственный языковой файл

Я использую сочетание osDate, SMF и моего собственного кода. osDate хранит язык в базе данных, но я не хочу этого, я хотел бы, чтобы у каждого файла был свой собственный языковой файл, поэтому, например, регистр имеет собственный языковой файл на 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 для отображения в регистре. TPL.

Я знаю, что я могу назначить каждую языковую строку в файле Register.php, но я надеялся, что я могу просто назначить, кто регистрирует языковой файл, а затем просто называть его наугад, без необходимости назначать каждый language string в Register.php

Любой код, подсказки приветствуются. Я пробовал Googling, но он не придумал много.

ответ

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 и т. Д.