作者 主題: [教學] 多國語言範例 Tcl/Tk 篇(二)  (閱讀 4434 次)

0 會員 與 1 訪客 正在閱讀本文。

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[教學] 多國語言範例 Tcl/Tk 篇(二)
« 於: 2005-03-28 14:56 »
不快點切入主題,會再被人點名,說我是來騙吃騙喝的!
(咦,午餐也要自己出錢買,茶水也要自己倒,怎麼個騙吃騙喝法?)

Tcl/Tk 的多國語言使用方法全在 msgcat 這個 function 上了,一切
由它開始。它使用概念和之前談過的 xgettext 類似,直接把一個字串
當做是 index ,再去跟據系統目前設定的語系,找出翻譯好的字串,
詳細使用方法請查 man n msgcat 。

來看看範例,此程式名稱為 msgcat_exp1.tcl :
代碼: [選擇]

#!/usr/bin/wish
# Tcl/Tk 範例

# mcload: 載入翻譯檔的目錄路徑
::msgcat::mcload "./msgs/"

# 看看目前是什麼語系
# 中括弧是執行的意思,就如 bash 的 ``
# 給變數的值是用 set
set language [::msgcat::mclocale]
puts "language is $language"

set hello_en "hello"
set ok ""
set hello_s ""

# 翻譯字串
namespace eval ::msgcat_exp1 {
        set hello_s [::msgcat::mc "hello"]
        set ok [::msgcat::mc "ok"]
}
# 先印原始字串
puts "$hello_en"

# 再印翻譯字串
puts "$hello_s"

puts "$ok"
exit

再來就是翻譯檔,再建立一個目錄 msgs ,及在此目錄下,建立一個
名為 to.msg 的檔:
代碼: [選擇]

# 某土話的語系叫 TO,檔名要改成小寫,附檔名是 .msg
# 下一行的 msgcat_exp1 要配合你呼叫的 program 的檔名
namespace eval ::msgcat_exp1 {
# 土話 hello 的翻譯為 tolow
        ::msgcat::mcset to "hello" "tolow"
# ok 的翻譯為 susu      
        ::msgcat::mcset to "ok" "susu"
}

也另外建一個檔 msgs/zh_tw.msg
代碼: [選擇]

# now 是 zh_TW ,要改成全小寫
# msgcat_exp1
namespace eval ::msgcat_exp1 {
# zh_tw 是要翻的語系,如果是法文就是 fr 之類的。
        ::msgcat::mcset zh_tw "hello" "哈囉"
        ::msgcat::mcset zh_tw "ok" "確定"
}


mcload 會自動去輸入的路徑找相關語系的翻譯檔,如 en_US 就找
en_us.msg ,zh_TW 就自動找 zh_tw.msg (一定會自動改成小寫),
所以翻譯檔的檔名不能隨便亂取。

再來看看執行結果:
代碼: [選擇]

[thyme@thyme tk]$ export LC_MESSAGES=en
[thyme@thyme tk]$ ./msgcat_exp1.tcl
language is en
hello
hello
ok
[thyme@thyme tk]$ export LC_MESSAGES=to
[thyme@thyme tk]$ ./msgcat_exp1.tcl
language is to
hello
tolow
susu


咦,怎麼不試中文的?因為我試中文會有亂碼,要用另一種方式,
喝個水,下篇再討論。

(報告站長,在 code 中的「程、現、設」 出現亂碼)

dnl

  • 可愛的小學生
  • *
  • 文章數: 21
    • 檢視個人資料
Re: [教學] 多國語言範例 Tcl/Tk 篇(二)
« 回覆 #1 於: 2005-03-30 10:47 »
引述: "thyme"
(報告站長,在 code 中的「程、現、設」 出現亂碼)


這個真的要站長修改才行 :p 在竹貓閒逛了一兩個小時,和一堆死掉的連結博鬥
結果還是靠 google 的網頁存檔才找到修改法,
因為 mod 的作者有提到不要散布,so ....
google 關鍵字:phpBB 2.0.6 多國語言 & CODE 標籤亂碼修正
我剛剛在自已的論壇上測試,只要修改 bbcode.php 的部份就可以解決這個問題
不過有什麼副作用目前不明 XD 應該是 ok 吧…

ps 但是已經亂碼的文章不會因為修改了亂碼就會消失,還是得重貼一次……