摘要:最后,貼一下貼一下整個(gè)語言類文件的源碼注釋版下午框架源碼分析語言類語言類提供了一些方法用于獲取語言文件和不同語言的文本來實(shí)現(xiàn)國際化。
本篇博文講述語言類,主要講述語言類的用法,關(guān)于語言類本身文件類內(nèi)容并沒有多少內(nèi)容,比較簡單,稍微查看代碼就可以明白其作用用途,語言類提供了一些方法用于獲取語言文件和不同語言的文本來實(shí)現(xiàn)國際化。下面我們講述多語言的用法。
在你的 CodeIgniter 的 system 目錄,有一個(gè) language 子目錄,它包含了一系列 英文 的語言文件。在 system/language/english/ 這個(gè)目錄下的這些文件定義了 CodeIgniter 框架的各個(gè)部分使用到的一些常規(guī)消息,錯(cuò)誤消息,以及其他一些通用的單詞或短語。
如果需要的話,你可以創(chuàng)建屬于你自己的語言文件,用于提供應(yīng)用程序的錯(cuò)誤消息和其他消息,或者將核心部分的消息翻譯為其他的語言。翻譯的消息或你另加的消息應(yīng)該放在 application/language/ 目錄下,每種不同的語言都有相應(yīng)的一個(gè)子目錄(例如, "french" 或者 "german")。CodeIgniter 框架自帶了一套 "英語" 語言文件,另外可以在CodeIgniter框架官方網(wǎng)站中的翻譯倉庫中找到其他不同的語言,每個(gè)語言都有一個(gè)獨(dú)立的目錄。
當(dāng) CodeIgniter 加載語言文件時(shí),它會(huì)先加載 system/language/ 目錄下的,然后再加載你的 application/language/ 目錄下的來覆蓋它。
如何處理多語言呢?請看下面:
如果你想讓你的應(yīng)用程序支持多語言,你就需要在 application/language/ 目錄下提供不同語言的文件,然后在 application/config/config.php 配置文件中指定默認(rèn)語言。application/language/english/ 目錄可以包含你的應(yīng)用程序需要的額外語言文件,例如錯(cuò)誤消息。每個(gè)語言對應(yīng)的目錄中都應(yīng)該包含從 翻譯倉庫 中獲取到的核心文件,或者你自己翻譯它們,你也可以添加你的程序需要的其他文件。你應(yīng)該將你正在使用的語言保存到一個(gè)會(huì)話變量中。
語言文件例子:
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 的語言類給你的應(yīng)用程序提供了一種簡單輕便的方式來實(shí)現(xiàn)多語言,它并不是通常我們所說的 國際化與本地化 的完整實(shí)現(xiàn)。我們可以給每一種語言一個(gè)別名,一個(gè)更通用的名字,而不是使用諸如 "en"、 "en-US"、"en-CA-x-ca" 這種國際標(biāo)準(zhǔn)的縮寫名字。
我們?nèi)绾问褂谜Z言類呢?
1、創(chuàng)建語言文件
語言文件的命名必須以 lang.php 結(jié)尾,例如,你想創(chuàng)建一個(gè)包含錯(cuò)誤消息的文件,你可以把它命名為:error_lang.php 。(在每個(gè)文件中使用一個(gè)通用的前綴來避免和其他文件中的相似名稱沖突是個(gè)好方法。例如,如果你在創(chuàng)建錯(cuò)誤消息你可以使用 error 前綴。)在此文件中,你可以在每行把一個(gè)字符串賦值給名為 $lang 的數(shù)組,例如:
//例如: $lang["language_key"] = "這是要現(xiàn)實(shí)的信息"; //具體: $lang["error_email_missing"] = "電子郵件地址填寫錯(cuò)誤"; $lang["error_url_missing"] = "URL地址填寫錯(cuò)誤"; $lang["error_username_missing"] = "用戶名不能為空";
2、加載語言文件
在使用語言文件之前,你必須先加載它??梢允褂孟旅娴拇a:
$this->lang->load("filename", "language");
其中 filename 是你要加載的語言文件名(不帶擴(kuò)展名),language 是要加載哪種語言(比如,英語)。如果沒有第二個(gè)參數(shù),將會(huì)使用 application/config/config.php 中設(shè)置的默認(rèn)語言。你也可以通過傳一個(gè)語言文件的數(shù)組給第一個(gè)參數(shù)來同時(shí)加載多個(gè)語言文件。
$this->lang->load(array("filename1", "filename2"));
3、讀取語言文本
當(dāng)你的語言文件已經(jīng)加載,你就可以通過下面的方法來訪問任何一行語言文本:
$this->lang->line("language_key");
注:其中,language_key 參數(shù)是你想顯示的文本行所對應(yīng)的數(shù)組的鍵名。
萬一你不確定你想讀取的那行文本是否存在,你還可以將第二個(gè)參數(shù)設(shè)置為 FALSE 禁用錯(cuò)誤日志:
//該方法只是簡單的返回文本行,而不是顯示出它。 $this->lang->line("misc_key", FALSE);
如果你發(fā)現(xiàn)你需要在整個(gè)應(yīng)用程序中使用某個(gè)語言文件,你可以讓 CodeIgniter 在系統(tǒng)初始化的時(shí)候 自動(dòng)加載該語言文件。可以打開 application/config/autoload.php 文件,把語言放在 autoload 數(shù)組中。
關(guān)于語言類的就講解這么多,在國際化的今天程序多語言的開發(fā)也是必不可少的,CI框架這一語言類在當(dāng)前是非常實(shí)用的。最后,貼一下貼一下整個(gè)語言類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; } /** * 從一個(gè)已加載的語言文件中,通過行名獲取一行該語言的文本。 */ 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; } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30613.html
摘要:楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),。本文來源知乎作者路人甲鏈接楚江數(shù)據(jù)提供網(wǎng)站數(shù)據(jù)采集和爬蟲軟件定制開發(fā)服務(wù),服務(wù)范圍涵蓋社交網(wǎng)絡(luò)電子商務(wù)分類信息學(xué)術(shù)研究等。 楚江數(shù)據(jù)是專業(yè)的互聯(lián)網(wǎng)數(shù)據(jù)技術(shù)服務(wù),現(xiàn)整理出零基礎(chǔ)如何學(xué)爬蟲技術(shù)以供學(xué)習(xí),http://www.chujiangdata.com。 第一:Python爬蟲學(xué)習(xí)系列教程(來源于某博主:htt...
摘要:以下這些項(xiàng)目,你拿來學(xué)習(xí)學(xué)習(xí)練練手。當(dāng)你每個(gè)步驟都能做到很優(yōu)秀的時(shí)候,你應(yīng)該考慮如何組合這四個(gè)步驟,使你的爬蟲達(dá)到效率最高,也就是所謂的爬蟲策略問題,爬蟲策略學(xué)習(xí)不是一朝一夕的事情,建議多看看一些比較優(yōu)秀的爬蟲的設(shè)計(jì)方案,比如說。 (一)如何學(xué)習(xí)Python 學(xué)習(xí)Python大致可以分為以下幾個(gè)階段: 1.剛上手的時(shí)候肯定是先過一遍Python最基本的知識(shí),比如說:變量、數(shù)據(jù)結(jié)構(gòu)、語法...
摘要:如要運(yùn)行多次,請把上次生成的映射文件代碼刪除再運(yùn)行。層啟動(dòng)類掃描接口,必須加上提一嘴,這個(gè)注解非常的關(guān)鍵,這個(gè)對應(yīng)了項(xiàng)目中所對應(yīng)的包路徑,必須加上,否則會(huì)導(dǎo)致異常。另外,關(guān)注之后在發(fā)送可領(lǐng)取免費(fèi)學(xué)習(xí)資料。 微信公眾號(hào):一個(gè)優(yōu)秀的廢人如有問題或建議,請后臺(tái)留言,我會(huì)盡力解決你的問題。 前言 如題,今天介紹 SpringBoot 與 Mybatis 的整合以及 Mybatis 的使用,之前...
摘要:前端日報(bào)精選解密一專題之如何判斷兩個(gè)對象相等在項(xiàng)目上,為什么我們分別選擇了音頻框架教程發(fā)布中文深入理解筆記解構(gòu)使數(shù)據(jù)訪問更便捷周二放送緩存知乎專欄個(gè)非常實(shí)用的小技巧風(fēng)雨過后見彩虹個(gè)你可能不知道的屬性眾成翻譯如何在模板驅(qū)動(dòng)表單中自 2017-08-09 前端日報(bào) 精選 解密 Angular WebWorker Renderer (一)JavaScript專題之如何判斷兩個(gè)對象相等在項(xiàng)目上...
摘要:在框架中配置文件多目錄前后臺(tái)應(yīng)該是個(gè)很常見的事情。于是在求學(xué)問道的途中,終于得到了比較完美的解決方法。業(yè)務(wù)需求環(huán)境需求在中實(shí)現(xiàn)前后臺(tái)的效果。因?yàn)橐呀?jīng)不支持設(shè)置子目錄下的控制器為默認(rèn)控制器的功能。 showImg(https://segmentfault.com/img/remote/1460000010545771); ????在框架中配置文件多目錄、前后臺(tái)應(yīng)該是個(gè)很常見的事情。像一...
閱讀 912·2021-11-22 13:53
閱讀 2540·2021-10-15 09:40
閱讀 1007·2021-10-14 09:42
閱讀 3547·2021-09-22 15:59
閱讀 896·2021-09-02 09:47
閱讀 2397·2019-08-30 15:54
閱讀 1445·2019-08-29 17:14
閱讀 408·2019-08-29 15:15