2011-10-05 71 views
1

所以即时制作三种语言的主页。 我使用的开关方法,这里是代码 -创建多语言主页

public function languages() 
{ 
if (isset($_GET['lang']) && $_GET['lang'] != '') 
{ 
    $_SESSION['lang'] = $_GET['lang']; 
} 
else 
{ 
    $_SESSION['lang'] = 'en_EN'; 
} 
switch($_SESSION['lang']) 
{ 
    case 'en_EN': require_once('language/lang.eng.php');break; 
    case 'lv_LV': require_once('language/lang.lv.php');break; 
    case 'ru_RU': require_once('language/lang.ru.php');break; 
    default: require_once('language/lang.eng.php'); 
} 
} 

public function translate($txt) 
{ 
    global $text; 
    return $text[$txt]; 
} 

,它应该显示的index.php文件,这样的 -

<?php $index->translate('search'); ?> 

但问题是,它表明没有错误,没有通知,没有警告,也没有翻译或默认文本。 我包含函数语言(),也许你可以帮我解决这个问题?

编辑: 即时调用$语言在index.php文件开始 - <?php require_once('class.index.php'); $index = new index; $index->languages(); ?>和$文本是在lang.eng.php中定义; lang.lv.php和lang.ru.php文件。

+0

你在translate()之前调用languages()吗?他们是一流的方法吗? –

+0

您定义了'languages()',但我没有看到你在哪里调用它。另外,'$ text'是在哪里定义的? – Anson

+0

你好, 即时调用index.php文件开始语言 - <?php require_once('class.index.php'); $ index = new index; $ index->​​ languages(); ?>和$ text是在lang.eng.php中定义的; lang.lv.php和lang.ru.php文件。 – user980952

回答

3

由于您使用的类,我认为最好是使用属性,而不是全局,它会更容易在将来的维护。创建一个类变量持有$文本和使用

class Index { 

    var $text; 

    public function languages() 
    { 
    require("....."); 

    $this->text = $text; 
    } 

    public function translate($txt) 
    { 
    if(isset($this->text[$txt])) 
    { 
     return $this->text[$txt]; 
    } 
    else 
    { 
    return "no translation"; 
    } 
    } 

} 

$index = new Index; 
$index->languages(); 
echo $index->translate('search'); 
+0

嘿,嗯,我的语言文件看起来像这样 - $ text = array( '搜索'=>'搜索', 'read_more'=>'阅读全文', (这里有更多翻译...) ); 我得到了问题,我必须要放在里面吗? WHOORAY它的工作原理; )! Cheers :) – user980952

+0

...好的,那么我的代码有什么问题?如果你传递'搜索',它会搜索数组中的'搜索'键,如果存在,则返回它。我只是添加了一些默认信息,如果它困扰你,你可以跳过那部分! –

+0

它工作的很好,谢谢;)! – user980952

1

<?php echo $index->translate('search'); ?> 
+0

我在那里,只是在这里重新编写它,并忘记添加,错误:(。其他建议? – user980952

0

首先检查会话是否被初始化与否,也将语言()函数调用之前的翻译,以便它加载在翻译之前,也投入使用error_reporting(E_ALL)的语言在顶部,以便任何错误suppresion将被删除,并把回声翻译语句的返回结果

+0

你好,如果我echo $ _SESSION ['lang']它显示一切正确,与error_reporting,它显示没有错误它已经在e_ALL上了),并且我在那里,只是在这里重新编写它,并忘记添加,错误:(。其他建议? – user980952