views: 2175 times


很多時候在中文化插件的地方會遇到一些困難,那就是在插件原始碼中包含了韓文訊息,一方面當然是不希望直接使用中文來代替韓文,另一方面在不使用直接取代的狀況下很多地方又有其難度。這裡提供在我個人中文化插件的一些小技巧,給大家參考。
在 index.xml 這個檔案裡面,有 4 種標籤是可以加上 xml:lang 這個 attriubute 的,且 TT/TC 也能看得懂。
以我自己寫的 SItemap_XML 這個插件來說,我在 index.xml 中使用了 <adminMenu> 且用 <handler> 呼叫了 index.php 裡面的一個 sitemap_Manager 函式,由這一個函式來產生所需要的設定畫面。再舉一例,以 JP_ThumbnailListViewTT 這個插件來說,他是使用 <config> 標籤,以 manifestHandler 這個 Attribute 呼叫了 CFG_ThumbnailSet 函式,來產生設定畫面。
不管是我呼叫的 sitemap_Manager 或是 JP 呼叫的 CFG_ThumbnailSet 函式,這樣的呼叫方式都會遇到一個問題,就是沒辦法單純的從 index.xml 中設定語言。這個時候,我們來看看 index.php 到底可以怎麼改。
在 TC 1.6 版之後,要獲取使用者所設定的語言到底是什麼,可以使用這幾種方法:
原本字串是:보호되어 있는 글입니다.
要改為這樣:_myts('보호되어 있는 글입니다.');
前端就會被轉換顯示為:被保護的文章。
假設有使用到變數,就要使用 _myfs() 來做轉換,例如:
原本字串是:에 해당되는 글 '.$itemCount.' 건
要改為這樣:_myfs('에 해당되는 글 %1 건', $itemCount);
前端就會被轉換顯示為:目前共有 $itemCount 則
當然,在前端 $itemCount 這個 php 變數會被轉換成數值或字串,倘若你有很多個變數,那就用 %1, %2, %3 依此類推。
說了這麼多,希望各位在中文化插件的時候能有所應用。
個人是不建議將中文化的字典加入原本的語言檔案裡面。因為原本的語言檔案,他會將整個語言檔寫入前端頁面,會使用非常大量的 javascript 資源,對於 Client 端來說並不是一件好事,對於 Servlet 端來說,也會造成一些無謂的流量浪費。
像是之前改的 FM_Modren 這個插件來說,雖然它是不可關閉插件,但是,這個插件所使用的語言設定,對於非部落格管理員來說並不需要,也就不用導入前端頁面。但是因為寫入原本語言檔的關係,他依舊被導入了前端頁面,這點就有點多此一舉了。
必要的話,個人是傾向於將 FM_Modren 語言檔案額外去設定,一方面可以減輕整個部落格的負擔,另一方面也許可以減少一點點流量吧。不過,由於整個 FM_Modren 到底用到多少語言設定,又,那些語言設定跟誰有重複使用,在這些狀況都不明的情況下,要改可能還是有相當難度啊。
在 index.xml 這個檔案裡面,有 4 種標籤是可以加上 xml:lang 這個 attriubute 的,且 TT/TC 也能看得懂。
- <title>,插件標題
- <description>,插件描述
- <author>,插件作者
- <config>,插件設定頁面內容,在插件啟用時,會呼叫這裡面的設定。
以我自己寫的 SItemap_XML 這個插件來說,我在 index.xml 中使用了 <adminMenu> 且用 <handler> 呼叫了 index.php 裡面的一個 sitemap_Manager 函式,由這一個函式來產生所需要的設定畫面。再舉一例,以 JP_ThumbnailListViewTT 這個插件來說,他是使用 <config> 標籤,以 manifestHandler 這個 Attribute 呼叫了 CFG_ThumbnailSet 函式,來產生設定畫面。
不管是我呼叫的 sitemap_Manager 或是 JP 呼叫的 CFG_ThumbnailSet 函式,這樣的呼叫方式都會遇到一個問題,就是沒辦法單純的從 index.xml 中設定語言。這個時候,我們來看看 index.php 到底可以怎麼改。
在 TC 1.6 版之後,要獲取使用者所設定的語言到底是什麼,可以使用這幾種方法:
- 先 global $blog, service;
然後使用 $blog['blogLanguage'] 或是 $service['language'] 取得 - 先 requireComponent("Textcube.Function.Setting");
直接使用 TC 的預設函式 setting::getBlogSetting('language') 或是 getBlogSetting('language') 取得
// 將普通字串做轉換這兩個函式就是轉換字串使用的。然後,你需要建立一個檔案,這個檔案可以放在跟插件同一層資料夾,或者是,你可以跟我一樣在插件資料夾中建立一個 lang 資料夾,然後使用 require_once 的方式將語言檔轉入。
function _myts($t) {
global $__ts;
if (isset($__ts[$t])) {
return $__ts[$t];
} else {
return $t;
}
}
// 將自帶變數字串做轉換
function _myfs($t) {
$t = get_ts($t);
if (func_num_args() <= 1) {
return $t;
} else {
for ($i = 1; $i < func_num_args(); $i++) {
$arg = func_get_arg($i);
$t = str_replace('%' . $i, $arg, $t);
}
return $t;
}
}
// 整體宣告,$__ts 是語言檔所使用的陣列語言檔案的名稱要以 TC 的設定去做設定,像是 ko.php, zh-TW.php, zh-CN.php 等等,檔案的內容很簡單。以 JP_Thumbnail 那個插件為例子,那麼 zh-TW.php 的內容就是。
global $blog, $service, $__ts;
// 取得語言設定
if (!isset($blog['blogLanguage'])) {
$blog['blogLanguage'] = $service['language'];
}
// 設定語言檔案路徑
switch($blog['blogLanguage']) {
case "zh-TW":
case "zh-CN":
$languageFile = 'lang/'.$blog['blogLanguage'].'.php';
break;
default:
$languageFile = "";
}
// 取得語言檔案
if(!empty($languageFile)) { require($languageFile); }
<?php // 繁體中文最後,你要把 index.php 檔案中,所有被設定在語言檔案裡面的字串,一字不漏的用 _myts('字串') 給包起來,如果只是純粹的字串轉換,那麼使用 _myts() 即可,例如:
/* contributed by Hina (http://hina.ushiisland.net/blog/hinablue/) */
// 1.6
/* zh-TW */
$__ts = array();
$__ts['에 해당되는 글 [##_list_count_##]건'] = '目前共有 [##_list_count_##] 則';
$__ts['보호되어 있는 글입니다.'] = '被保護的文章。';
$__ts['썸네일 이미지를 사이드바에 출력하여 보여 줍니다.'] = '在預覽模式以縮圖的形式輸出展示.';
...(後略)
?>
原本字串是:보호되어 있는 글입니다.
要改為這樣:_myts('보호되어 있는 글입니다.');
前端就會被轉換顯示為:被保護的文章。
假設有使用到變數,就要使用 _myfs() 來做轉換,例如:
原本字串是:에 해당되는 글 '.$itemCount.' 건
要改為這樣:_myfs('에 해당되는 글 %1 건', $itemCount);
前端就會被轉換顯示為:目前共有 $itemCount 則
當然,在前端 $itemCount 這個 php 變數會被轉換成數值或字串,倘若你有很多個變數,那就用 %1, %2, %3 依此類推。
說了這麼多,希望各位在中文化插件的時候能有所應用。
個人是不建議將中文化的字典加入原本的語言檔案裡面。因為原本的語言檔案,他會將整個語言檔寫入前端頁面,會使用非常大量的 javascript 資源,對於 Client 端來說並不是一件好事,對於 Servlet 端來說,也會造成一些無謂的流量浪費。
像是之前改的 FM_Modren 這個插件來說,雖然它是不可關閉插件,但是,這個插件所使用的語言設定,對於非部落格管理員來說並不需要,也就不用導入前端頁面。但是因為寫入原本語言檔的關係,他依舊被導入了前端頁面,這點就有點多此一舉了。
必要的話,個人是傾向於將 FM_Modren 語言檔案額外去設定,一方面可以減輕整個部落格的負擔,另一方面也許可以減少一點點流量吧。不過,由於整個 FM_Modren 到底用到多少語言設定,又,那些語言設定跟誰有重複使用,在這些狀況都不明的情況下,要改可能還是有相當難度啊。





Leave your greetings.
以一個程式設計師的角度去看...
2008/03/19 14:48 [ Permalink : Modify/Delete : Reply ]只能說TC是一個底層架構非常差的系統
但是INTERFACE端的設計確是有可學習的優點
底層架構不好這點我倒是不否認 T_T
2008/03/19 15:03 [ Permalink : Modify/Delete ]但是他現在這種 interface 的設計架構,我以前就很愛用勒 XD
他之前應該是想學 ROR 的那種敏捷開發架構
結果因為 RewriteEngine 的種種狀況會搞死自己
發現不太行了之後,苦海無涯,回頭是岸吧 =___=
他現在還是有很多自咬嘴巴的程式在裡面
像是我之前遇到的 plugins 不能呼叫 AJAX 傳值的問題就是一例
如果說是安全性考量,也還算說得過去啦!
但是,這本來就是 open source 的東西,說要多安全好像也....XD
扣除那個 interface 的部分,我對於他的一些靜態的類別也很感興趣
特別是 POD 在處理 DataBase 的部分,速度還頗快哩!
雖然我是有 clone 一份差不多的,但是靜態宣告實在太麻煩
所以也沒有實際應用在工作案件上(總不能用自己不熟的類別吧)
現在只希望穩定就好,難不成你要 clone 一個 偽TC 嗎?
那我會幫你測試的(哈哈)
现在都想改用Wordpress了,实在不想在不认识的韩语上花费时间了
2008/04/03 15:11 [ Permalink : Modify/Delete : Reply ]我有改用過 wp,也有寫過把 TT 轉換成 wp 的一些工具
2008/04/03 15:30 [ Permalink : Modify/Delete ]但是,實在是很麻煩,特別是附件檔案跟 wp 的差異太大
雖然 wp 是很強大沒錯,但是終究還是習慣問題囉!
韓文對我來說是沒有什麼差別
反正我也沒有用很多插件,而程序本身的韓文
中文化的部分其實也做得差不多了,倒是沒有什麼難處
只是,官方每次改版動作都超大,很讓人無力就是了 T_T