2014-03-12 58 views
0

我知道如何使用CI lang助手和lang類,但我的問題是有可能從 使用來自SYSTEM以外的其他目錄的lang文件,也許我可以在應用程序根目錄中創建一個新文件夾並從那裏調用語言文件?Codeigniter處理lang文件?

還有其他的東西,是CI處理好的lang文件嗎?

我想補充的財產以後用戶可以uplaod郎文件,但結構需要進行檢查,這裏

就是一個例子

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

這是正確的郎行,但如果一些上傳文件看起來像這樣?

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

你看在兩個

這是否會在郎文件創建錯誤,或CI搞定,我還是必須做出一個自定義類 將處理那個錯誤?

回答

0

爲什麼你的語言在系統文件夾中應該在application/language文件夾中,而且它不是一個真棒d想法由用戶上傳語言。它是一個很大的SECURITY HOLE,因爲任何人都可以上傳任何腳本,並且將由您的代碼執行。你永遠不應該允許上傳你的系統中的任何可執行代碼。

如果你上傳一個破損的文件,會導致php錯誤。所以當出現php錯誤時,codeigniter無法對此做任何事情。只是簡單地認爲你通常包括一個PHP文件,你會爲任何PHP做。所以CI做同樣的事情,然後閱讀一些變量($lang),併爲其分配一個類別。

是的,你可以用你定義的文件夾來加載,你可以在幾個方式做到這一點的語言

 $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 
     } 
    } 
+0

好了,但沒有最終用戶會上傳文件,只有系統管理員,圍繞孔這不是問題,可以將lang放在其他文件夾中,或者我可以直接上傳到系統文件夾,CI是否允許上傳到系統文件夾? – Schneider

+0

我確實修改了我的答案,當你指的是系統文件夾時,你的意思是應用程序文件夾。你不應該把你的代碼寫在系統文件夾中,系統文件夾應該有所有的CI代碼,你應該根據需要擴展你的應用程序中的類。是的,你可以上傳任何你想要它依賴於你和你設置上傳路徑的方式 – Minhaz

0

您可以編寫不同語言的文件,只要你想加載它們。閱讀以下鏈接:http://www.sitepoint.com/multi-language-support-in-codeigniter/

您放置文件的文件夾是應用程序/語言/ [LANG],然後您只需在控制器中調用它們,不需要進一步修改。需要注意的是,這些文件必須以「_lang.php」結尾

關於上傳文件,只需將您的語言文件(必須在不同語言文件夾中具有相同名稱)部署到該文件夾​​中,然後開始。我已經有類似MULTILANGUAGES文件做的是建立一個控制器,我使用導入從CSV文件中的語言行寫上不同的進線語言文件:

Code | Message 
name | Su nombre 
surname | Su apellido 

有了這一點,你寫全語言從那裏檢查文件,檢查奇怪的符號。你甚至可以有不同的語言多列,並保持連貫性與它,因爲你每次都覆蓋該文件啓動該importer_language:

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

不錯,我在想那個,你有那個控制器嗎? – Schneider

+0

對不起,我不能發佈它,但想法是使用fgetcsv函數從CSV中逐行獲取代碼,檢查並過濾每個輸入,打開不同的語言文件,以0作爲代碼的$路線和短語取決於語言鍵,然後將每行寫入不同的文件。要閱讀整個CSV文件,您可以查看http://www.php.net/manual/en/function.fgetcsv.php。這是一個非常酷的問題,同時管理所有的文件,我很喜歡它,我希望你也會這樣做XD – Chococroc