【问题标题】:Language system design语言系统设计
【发布时间】:2016-01-29 15:09:05
【问题描述】:

我即将在我的 codeigniter 项目中实现一个语言系统。 (按照本教程:http://www.sitepoint.com/multi-language-support-in-codeigniter/),但我的思维过程有点卡住了。

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

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

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

有没有人知道一个好的设计/路由模式可以使服务器加载时间/性能保持在最佳状态?

【问题讨论】:

  • 您能否简化您的问题。不清楚
  • 我想知道的是,使用数组中定义的文本创建基于多语言的网站的最佳方法是什么。如果我有一个完整的 .php 脚本,其中包含所有错误的数组,并且我必须将它加载到页面上以仅使用 1 个错误,它会加载很多不需要的数组。拥有最佳优化语言系统的最佳设计模式是什么?
  • 可以通过id调用。所以你只得到一个输出

标签: codeigniter system


【解决方案1】:

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

$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));

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

祝你好运!

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2014-12-18
    • 2020-12-08
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    相关资源
    最近更新 更多