簡介:這是ThinkPHP多語言在分組下的用法!的詳細頁面,介紹了和php,PHP ThinkPHP多語言在分組下的用法!有關的知識、技巧、經驗,和一些php源碼等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=325720' scrolling='no'>
參考:http://www.coderblog.in/2010/11/thinkphp-multilingual-with-group.html
ThinkPHP2.0開始就可以支援項目分組,分組的好處是可以讓整個項目層次更加清晰,也許是因為習慣了.net的清晰分層,所以我覺得在一個項目裡,不管大小,都應該層次分明,這樣方便管理之餘也方便代碼的分離。
ThinkPHP的分組功能可讓你分別建立多個目錄以對應不同的分組,如可分為 Admin 和 Home 2個組,就可以在 Action 下建立不同的目錄,感覺這樣是挺清晰方便的。不過也正是因為使用了分組功能,導致在多語言項目時就會出現些預想不到的問題了,總是找不到對應的語言檔案來解釋,所有標籤都直接輸出大寫了。
開始一直找不出問題,寫法都沒錯的啊,感覺這點官方的手冊上說得並不清楚哦,如果按手冊上做,根本出不來效果,然後只好直接跟蹤源碼查看個究竟了。
其實如果查看一下檢測多語言的那段代碼就會很清楚是怎麼回事了,此代碼是在 ThinkPHP/Lib/Think/Core/App.class.php ,以下是主要的代碼:
// 不開啟語言套件功能,僅僅載入架構語言檔案直接返回if (!C('LANG_SWITCH_ON')){ L(include THINK_PATH.'/Lang/'.$langSet.'.php'); return;}
剛開始就是卡在這裡了,如果要使用自己定義的語言,這個選擇必須開啟,然後就是語言檔案的路徑存放問題,繼續往下看:
// 定義當前語言define('LANG_SET',strtolower($langSet));// 載入架構語言套件if(is_file(THINK_PATH.'/Lang/'.LANG_SET.'.php')) L(include THINK_PATH.'/Lang/'.LANG_SET.'.php');// 讀取項目公用語言套件if (is_file(LANG_PATH.LANG_SET.'/common.php')) L(include LANG_PATH.LANG_SET.'/common.php');$group = '';// 讀取當前分組公用語言套件// 例如定義了分組GROUP_NAME為Admin,則路徑為:// 當前項目路徑/zh-cn/Admin/lang.phpif (defined('GROUP_NAME')){ $group = GROUP_NAME.C('TMPL_FILE_DEPR'); if (is_file(LANG_PATH.LANG_SET.'/'.$group.'lang.php')) L(include LANG_PATH.LANG_SET.'/'.$group.'lang.php');}// 讀取當前模組語言套件// 例如當前為為MemberAction模組,則模組名為:Member,語言檔案名稱為:member.php(檔案名稱為小寫)if (is_file(LANG_PATH.LANG_SET.'/'.$group.strtolower(MODULE_NAME).'.php')) L(include LANG_PATH.LANG_SET.'/'.$group.strtolower(MODULE_NAME).'.php');
看完後就應該非常清楚了吧,呵,如果定義了分組,就必須按以下目錄結構和規則命名:
Lang
-- 語言編碼如(zh-cn)
-- 分組名
--模組名.php
--lang.php(此為本組的公用語言套件)
還是舉個例比較好理解,如我項目分為2組:
Admin, Home,在Admin下有一個名為 LoginAction.class.php 的操作,現要為Admin下建立多語言套件,那麼目錄結構應該為:
Lang
-- zh-cn
-- Admin
-- login.php (對應login操作)
-- lang.php (Admin下的公用語言)
當然,最後別忘記要開啟LANG_SWITCH_ON的配置,否則就全部返回大寫了:
LANG_SWITCH_ON => true
“ThinkPHP多語言在分組下的用法!”的更多相關文章 》
愛J2EE關注Java邁克爾傑克遜視頻站JSON線上工具
http://biancheng.dnbcw.info/php/325720.html pageNo:14