我即将在我的codeigniter项目中实现一个语言系统。 (遵循本教程:http://www.sitepoint.com/multi-language-support-in-codeigniter/),但我对思考过程感到困惑。
该网站将包含大量文字,因此必须有很多单独的语言文件,如error_english.php,user_english.php等......
但我想知道,这是正确的方法吗?例如,如果我有一个页面,其中加载了不同的语言文件,因为它有很多文本,我必须加载1个单词,如Firsname或其他东西。
这意味着我必须加载user_english.php,而其中包含例如超过100行的文本。难道不会有很多装载因为这个,只有一个字?会有这么多不需要的数组。
有没有人知道一个好的设计/路由模式能够保持服务器的负载时间/性能最佳?
答案 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));
请注意,在开始之前考虑条目的命名和冲突是个好主意。
祝你好运!