如果在语言文件中找不到消息密钥,则显示默认语言消息

时间:2014-05-21 12:20:22

标签: php codeigniter multilingual

在我的Codeigniter项目中,我正在整合多语言支持。为此我已经使用以下代码定义了一个帮助器类 lang_helper.php

function lang_dropdown()
{
    $ci =& get_instance();
    $ci->load->database();
    $sql = "select language from languages";
    $q = $ci->db->query($sql);
    $data=$q->result();
    $list=array();
    $list['']= 'Language';      
     foreach($data as $type )
     {
        $list[$type->language]= $type->language;      
     }
    return $list;
}

我在 application / language 文件夹中创建了单独的语言文件(例如,对于英语语言,我在 application / language / english / message_lang.php中创建了消息键和值< / em>文件)。

现在在控制器功能中,我已经包含以下几行并将这些行传递给视图文件以显示语言下拉列表。

在控制器中,

$data['dropdown'] = lang_dropdown();  // multilanguage dropdown list
$data['language']=$this->session->userdata('site_language');

并且在视野中,

$js = 'id="langdrop" onChange="changelanguage(\''.base_url().'\')"';
echo form_dropdown('langdrop', $dropdown,$language,$js);

显示下拉列表,

<select name="langdrop" id="langdrop" onchange="changelanguage('http://192.168.1.150/workspace/teshot/')">
<option value="">Language</option>
<option value="chinese">chinese</option>
<option value="dutch">dutch</option>
<option value="english" selected="selected">english</option>
</select>

我的js功能是:

function changelanguage(baseurl)
{
    var lang=$("#langdrop").val();
    window.location=baseurl+"index.php/index/language/"+lang;
}

我将多语言消息显示为lang('messagekey')。现在一切都很好。

现在我的要求是,如果语言文件中没有与所选语言相对应的键/值,那么它应该显示来自默认语言文件的消息。

即我在 application / language / english / message_lang.php 文件中有一条消息,

$lang['hourago']='hour ago';

因此,为了在视图文件中显示它,我将像这样写lang('hourago')。如果文件中没有对应于法语的条目(在 application / language / french / message_lang.php 文件中),那么它应该显示来自我的默认语言的消息(假设我的默认语言)是英文,然后它应显示值hour ago

我在 application / hooks 文件夹中创建了一个文件 LanguageLoader.php

class LanguageLoader
{
    public function load_language()
    {
        $ci =& get_instance();
        $ci->load->helper('language');
        $ci->load->library('session');
        $language= $ci->session->userdata('site_language');
        if ($language)
        { 
            $ci->lang->load('message', $language);
        }
        else
        {
            $ci->lang->load('message', 'english');
        }
    }
}

并且还在配置文件夹中启用了挂钩, hooks.php

$hook['post_controller_constructor'][] = array(
    'class' => 'LanguageLoader',
    'function' => 'load_language',
    'filename' => 'LanguageLoader.php',
    'filepath' => 'hooks',
    'params' => array()
);

这怎么可能?任何人都可以帮我这样做吗?

提前致谢。

0 个答案:

没有答案