语言系统设计

时间:2016-01-29 15:09:05

标签: codeigniter system

我即将在我的codeigniter项目中实现一个语言系统。 (遵循本教程:http://www.sitepoint.com/multi-language-support-in-codeigniter/),但我对思考过程感到困惑。

该网站将包含大量文字,因此必须有很多单独的语言文件,如error_english.php,user_english.php等......

但我想知道,这是正确的方法吗?例如,如果我有一个页面,其中加载了不同的语言文件,因为它有很多文本,我必须加载1个单词,如Firsname或其他东西。

这意味着我必须加载user_english.php,而其中包含例如超过100行的文本。难道不会有很多装载因为这个,只有一个字?会有这么多不需要的数组。

有没有人知道一个好的设计/路由模式能够保持服务器的负载时间/性能最佳?

1 个答案:

答案 0 :(得分:0)

语言包只是键值对。是的,如果需要你加载数千行,它工作正常。减轻该行数的一种方法是为站点的不同部分提供不同的语言包文件。 所以你可以有一个错误文件并执行:

$this->load->language('errors');

但实际上它并没有对速度产生实际影响 - 它是一种组织性的东西。

我已经扩展我的使用字段替换。语言包还提供了一种将代码与表示分开的方法 - 我总是在模型中使用它们,即使我只是用英语写作,因为它形成了代码逻辑和输出之间的分离,使代码更容易阅读。

所以,如果你把它放在你的助手:

function lang_sub( $str, $params = '')
{
    $CI = & get_instance();
    $return_string =  $str;
    if (array_key_exists($str, $CI->lang->language))
    {
        // the str is a key. so it only is a one line substitution.
        $return_string = $CI->lang->line($str);
        if (is_array($params))// if a parameter array is sent, substitute the strings %s in order.
        {
            $return_string = vsprintf($r, $params);
        }
    }
    return $return_string;
}

您可以在语言条目中执行以下操作:

$lang['login_message'] = "Welcome %s good to see you again! we as last saw your on %s.";

并且在您的模型中可以执行以下操作:

$welcome_message = lang_sub('login_message',array($username,$last_seen));

请注意,在开始之前考虑条目的命名和冲突是个好主意。

祝你好运!