Codeigniter处理lang文件?

时间:2014-03-12 22:44:24

标签: codeigniter exception-handling lang

我知道如何使用CI lang helper和lang类,但我的问题是可能的 使用来自SYSTEM之外的其他目录的lang文件,也许我可以在app的根目录下创建一个新文件夹并从那里调用语言文件?

还有一点,就是对CI完成的lang文件的处理好吗?

我想添加用户可以上传lang文件的内容,但需要检查结构,这里

是一个例子

$lang["msg_first_name"] = "First Name";

这是正确的lang行,但是如果某个上传文件看起来像这样呢?

$lang["msg_first_name"] = "First Name i "Michael" and i like chocolate";

你看到有两个

  

"

这是否会在lang文件或CI句柄中创建错误,我或必须创建自定义类 会处理那个错误吗?

2 个答案:

答案 0 :(得分:0)

为什么stystem文件夹中的语言应该位于application/language文件夹中。用户上传语言并不是一个好主意。它是一个很大的SECURITY HOLE,因为任何人都可以上传任何脚本,并且会由您的代码执行。您永远不应该允许在系统中上传任何可执行代码。

如果你上传一个损坏的文件,它将导致php错误。所以当有一个php错误时,codeigniter对此无能为力。只是简单地认为你正在包含一个php文件,就像通常你会为任何PHP做的那样。所以CI做同样的事情,然后阅读一些变量($lang)并分配给一个类别。

是的,您可以使用您的define文件夹加载您可以用几种方式执行此操作的语言

        $this->load->add_package_path('YOUR_PATH');
        //so your language will be YOUR_PATH/language/YOUR_LANG_FOLDER(english default)
         $this->load->language('language_file'); //user

       OR

        $this->lang->load('YOUR_LANG_FILE','LANG',FALSE,TRUE,'YOUR_PATH') ;

        //look the function description 
        /**
 * Load a language file
 *
 * @access  public
 * @param   mixed   the name of the language file to be loaded. Can be an array
 * @param   string  the language (english, etc.)
 * @param   bool    return loaded array of translations
 * @param   bool    add suffix to $langfile
 * @param   string  alternative path to look for language file
 * @return  mixed
 */  

    OR extend the CI_Lang and modify the load function they way you want, to do this you have to create a file `application/core/MY_Lang.php` 

    class MY_Lang extends CI_Lang {

          //OVERWRITE THE FUNCTION 
          function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = ''){

       //MODIFY THE THE CODE FOMR CI_Lang AND SET THE INCLUDE PATH AS YOU WANT
        }
    }

答案 1 :(得分:0)

您可以编写不同的语言文件并随时加载它们。阅读以下链接:http://www.sitepoint.com/multi-language-support-in-codeigniter/

您放置文件的文件夹是application / language / [LANG],然后您只需在控制器中调用它们,无需进一步修改。重要的是要注意文件必须以“_lang.php”

结束

关于上传文件,只需将您的语言文件(在不同的语言文件夹中必须具有相同的名称)部署到该文件夹​​中即可。我用类似的多语言文件做的是构建一个控制器,用于从CSV文件导入语言行,并将不同的行写入语言文件:

Code    | Message
name    | Su nombre
surname | Su apellido

有了这个,你从那里写出整个语言文件,检查奇怪的符号。您甚至可能有多个具有不同语言的列,并保持与它的一致性,因为每次启动importer_language时都会覆盖该文件:

Code    | MsgSpanish     | MsgEnglish
name    | Su nombre      | Your Name
surname | Su apellido    | Your Surname