摘要:最后,貼一下貼一下整個語言類文件的源碼注釋版下午框架源碼分析語言類語言類提供了一些方法用于獲取語言文件和不同語言的文本來實現國際化。
本篇博文講述語言類,主要講述語言類的用法,關于語言類本身文件類內容并沒有多少內容,比較簡單,稍微查看代碼就可以明白其作用用途,語言類提供了一些方法用于獲取語言文件和不同語言的文本來實現國際化。下面我們講述多語言的用法。
在你的 CodeIgniter 的 system 目錄,有一個 language 子目錄,它包含了一系列 英文 的語言文件。在 system/language/english/ 這個目錄下的這些文件定義了 CodeIgniter 框架的各個部分使用到的一些常規消息,錯誤消息,以及其他一些通用的單詞或短語。
如果需要的話,你可以創建屬于你自己的語言文件,用于提供應用程序的錯誤消息和其他消息,或者將核心部分的消息翻譯為其他的語言。翻譯的消息或你另加的消息應該放在 application/language/ 目錄下,每種不同的語言都有相應的一個子目錄(例如, "french" 或者 "german")。CodeIgniter 框架自帶了一套 "英語" 語言文件,另外可以在CodeIgniter框架官方網站中的翻譯倉庫中找到其他不同的語言,每個語言都有一個獨立的目錄。
當 CodeIgniter 加載語言文件時,它會先加載 system/language/ 目錄下的,然后再加載你的 application/language/ 目錄下的來覆蓋它。
如何處理多語言呢?請看下面:
如果你想讓你的應用程序支持多語言,你就需要在 application/language/ 目錄下提供不同語言的文件,然后在 application/config/config.php 配置文件中指定默認語言。application/language/english/ 目錄可以包含你的應用程序需要的額外語言文件,例如錯誤消息。每個語言對應的目錄中都應該包含從 翻譯倉庫 中獲取到的核心文件,或者你自己翻譯它們,你也可以添加你的程序需要的其他文件。你應該將你正在使用的語言保存到一個會話變量中。
語言文件例子:
system/ language/ english/ ... email_lang.php form_validation_lang.php ... application/ language/ english/ error_messages_lang.php french/ ... email_lang.php error_messages_lang.php form_validation_lang.php ...
切換語言
$idiom = $this->session->get_userdata("language"); $this->lang->load("error_messages", $idiom); $oops = $this->lang->line("message_key");
CodeIgniter 的語言類給你的應用程序提供了一種簡單輕便的方式來實現多語言,它并不是通常我們所說的 國際化與本地化 的完整實現。我們可以給每一種語言一個別名,一個更通用的名字,而不是使用諸如 "en"、 "en-US"、"en-CA-x-ca" 這種國際標準的縮寫名字。
我們如何使用語言類呢?
1、創建語言文件
語言文件的命名必須以 lang.php 結尾,例如,你想創建一個包含錯誤消息的文件,你可以把它命名為:error_lang.php 。(在每個文件中使用一個通用的前綴來避免和其他文件中的相似名稱沖突是個好方法。例如,如果你在創建錯誤消息你可以使用 error 前綴。)在此文件中,你可以在每行把一個字符串賦值給名為 $lang 的數組,例如:
//例如: $lang["language_key"] = "這是要現實的信息"; //具體: $lang["error_email_missing"] = "電子郵件地址填寫錯誤"; $lang["error_url_missing"] = "URL地址填寫錯誤"; $lang["error_username_missing"] = "用戶名不能為空";
2、加載語言文件
在使用語言文件之前,你必須先加載它。可以使用下面的代碼:
$this->lang->load("filename", "language");
其中 filename 是你要加載的語言文件名(不帶擴展名),language 是要加載哪種語言(比如,英語)。如果沒有第二個參數,將會使用 application/config/config.php 中設置的默認語言。你也可以通過傳一個語言文件的數組給第一個參數來同時加載多個語言文件。
$this->lang->load(array("filename1", "filename2"));
3、讀取語言文本
當你的語言文件已經加載,你就可以通過下面的方法來訪問任何一行語言文本:
$this->lang->line("language_key");
注:其中,language_key 參數是你想顯示的文本行所對應的數組的鍵名。
萬一你不確定你想讀取的那行文本是否存在,你還可以將第二個參數設置為 FALSE 禁用錯誤日志:
//該方法只是簡單的返回文本行,而不是顯示出它。 $this->lang->line("misc_key", FALSE);
如果你發現你需要在整個應用程序中使用某個語言文件,你可以讓 CodeIgniter 在系統初始化的時候 自動加載該語言文件。可以打開 application/config/autoload.php 文件,把語言放在 autoload 數組中。
關于語言類的就講解這么多,在國際化的今天程序多語言的開發也是必不可少的,CI框架這一語言類在當前是非常實用的。最后,貼一下貼一下整個語言類Lang.php文件的源碼(注釋版):
load($value, $idiom, $return, $add_suffix, $alt_path); } return; } $langfile = str_replace(".php", "", $langfile); if ($add_suffix === TRUE) { $langfile = preg_replace("/_lang$/", "", $langfile) . "_lang"; } $langfile .= ".php"; if (empty($idiom) OR !preg_match("/^[a-z_-]+$/i", $idiom)) { $config =& get_config(); $idiom = empty($config["language"]) ? "english" : $config["language"]; } if ($return === FALSE && isset($this->is_loaded[$langfile]) && $this->is_loaded[$langfile] === $idiom) { return; } //加載基本文件,任何其他語言文件可以覆蓋它 $basepath = BASEPATH . "language/" . $idiom . "/" . $langfile; if (($found = file_exists($basepath)) === TRUE) { include($basepath); } if ($alt_path !== "") { $alt_path .= "language/" . $idiom . "/" . $langfile; if (file_exists($alt_path)) { include($alt_path); $found = TRUE; } } else { foreach (get_instance()->load->get_package_paths(TRUE) as $package_path) { $package_path .= "language/" . $idiom . "/" . $langfile; if ($basepath !== $package_path && file_exists($package_path)) { include($package_path); $found = TRUE; break; } } } if ($found !== TRUE) { show_error("Unable to load the requested language file: language/" . $idiom . "/" . $langfile); } if (!isset($lang) OR !is_array($lang)) { log_message("error", "Language file contains no data: language/" . $idiom . "/" . $langfile); if ($return === TRUE) { return array(); } return; } if ($return === TRUE) { return $lang; } $this->is_loaded[$langfile] = $idiom; $this->language = array_merge($this->language, $lang); log_message("info", "Language file loaded: language/" . $idiom . "/" . $langfile); return TRUE; } /** * 從一個已加載的語言文件中,通過行名獲取一行該語言的文本。 */ public function line($line, $log_errors = TRUE) { $value = isset($this->language[$line]) ? $this->language[$line] : FALSE; if ($value === FALSE && $log_errors === TRUE) { log_message("error", "Could not find the language line "" . $line . """); } return $value; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30613.html
摘要:楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,。本文來源知乎作者路人甲鏈接楚江數據提供網站數據采集和爬蟲軟件定制開發服務,服務范圍涵蓋社交網絡電子商務分類信息學術研究等。 楚江數據是專業的互聯網數據技術服務,現整理出零基礎如何學爬蟲技術以供學習,http://www.chujiangdata.com。 第一:Python爬蟲學習系列教程(來源于某博主:htt...
摘要:以下這些項目,你拿來學習學習練練手。當你每個步驟都能做到很優秀的時候,你應該考慮如何組合這四個步驟,使你的爬蟲達到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學習不是一朝一夕的事情,建議多看看一些比較優秀的爬蟲的設計方案,比如說。 (一)如何學習Python 學習Python大致可以分為以下幾個階段: 1.剛上手的時候肯定是先過一遍Python最基本的知識,比如說:變量、數據結構、語法...
摘要:如要運行多次,請把上次生成的映射文件代碼刪除再運行。層啟動類掃描接口,必須加上提一嘴,這個注解非常的關鍵,這個對應了項目中所對應的包路徑,必須加上,否則會導致異常。另外,關注之后在發送可領取免費學習資料。 微信公眾號:一個優秀的廢人如有問題或建議,請后臺留言,我會盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,之前...
摘要:前端日報精選解密一專題之如何判斷兩個對象相等在項目上,為什么我們分別選擇了音頻框架教程發布中文深入理解筆記解構使數據訪問更便捷周二放送緩存知乎專欄個非常實用的小技巧風雨過后見彩虹個你可能不知道的屬性眾成翻譯如何在模板驅動表單中自 2017-08-09 前端日報 精選 解密 Angular WebWorker Renderer (一)JavaScript專題之如何判斷兩個對象相等在項目上...
摘要:在框架中配置文件多目錄前后臺應該是個很常見的事情。于是在求學問道的途中,終于得到了比較完美的解決方法。業務需求環境需求在中實現前后臺的效果。因為已經不支持設置子目錄下的控制器為默認控制器的功能。 showImg(https://segmentfault.com/img/remote/1460000010545771); ????在框架中配置文件多目錄、前后臺應該是個很常見的事情。像一...
閱讀 902·2021-11-22 13:53
閱讀 2533·2021-10-15 09:40
閱讀 1000·2021-10-14 09:42
閱讀 3475·2021-09-22 15:59
閱讀 888·2021-09-02 09:47
閱讀 2367·2019-08-30 15:54
閱讀 1438·2019-08-29 17:14
閱讀 399·2019-08-29 15:15