我知道如何使用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句柄中创建错误,我或必须创建自定义类 会处理那个错误吗?
答案 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