我即将在我的codeigniter项目中实现一个语言系统。(遵循本教程:http://www.sitepoint.com/multi-language-support-in-codeigniter/),但我有点卡在思考过程中。
该网站将包含大量的文本,所以将有很多独立的语言文件,如error_english.php,user_english.php等。
但我在想,这是正确的方法吗?例如,如果我有一个页面,其中加载了不同语言的文件,因为它有很多文本,而我必须加载一个单词,比如Firsname或其他东西。
这意味着我必须加载user_english.php,而这将包含超过100行的文本。仅仅为了一个单词,难道不会有很多的加载吗?会有很多不需要的数组。
有没有人知道一个好的设计/路由模式,能够使服务器的加载时间/性能保持最佳?
发布于 2017-01-13 06:00:28
语言包是简单的键-值对。是的,如果需要,你可以加载数千行代码,而且运行得很好。减少行数的一种方法是为站点的不同部分提供不同的语言包文件。因此,您可能有一个错误文件,并执行以下操作:
$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));请注意,在开始之前考虑条目的命名和冲突是一个好主意。
祝好运!
https://stackoverflow.com/questions/35087715
复制相似问题