U++ 雖然為了要 Moveable 而用的是自家的 String,不過它也沒忘記要打一份 WString 出來
而且還幫你做了一堆 charset tool,所以 i18n 算滿容易滿足的
L10n 的部分 U++ 其實也有支援機制,
方法大概如下:
1. 在 code 裡面所有需要 localize 的 string 都用 t_() 這個 macro 包起來,比如說像這樣
printf(t_("this string can be localized"));2. 在 package 裡面新增一個 .t file,裡面列出所有需要被 replace 的 t_() string,像這樣
T_("this string can be localized") T_("second line")要注意的是這邊沒列出來的 string 就會被接下來的步驟忽略,
而且這個 .t file 是 complie time 就被 reference 的東西,
所以要是有問題就得重 build 了
這大概是最不 make sense 也最容易出錯的步驟了,
以後如果有需要應該寫個 parser 自動生才對
3. 回到 code 裡面,在適當的地方加入這兩行
#define TFILE <PACKAGE_NAME/T_FILE_NAME> #include <Core/t.h>PACKAGE_NAME 跟 T_FILE_NAME 別忘了代換掉
另外要設定 locale 的話可以這樣做
SetLanguage(SetLNGCharset(LNGFromText("zhtw"), CHARSET_UTF8));
4. 以上都弄好了就 build 吧,build 完以後去找執行檔
(可以從主選單 Build -> Open output directory 叫 TheIDE 幫你找)
假設你的執行檔叫 run.exe,
那下 command "run.exe --export-tr zhtw_" 就會生出一個 zh-TW 而且是 utf-8 編碼的純文字檔案
裡面會有你寫在 .t file 裡面的所有 string,好好翻譯吧
command 最後一個參數是 language, locale, encoding 那些,詳細看這裡
要注意的是這個 tr file 不吃 BOM 的
5. 接下來...就沒有接下來了,剛剛那個 tr file 翻完去跑 run.exe 就會看到 L10n 了!
P.S. 這串方法作字串代換的時間點是在 object constructor,
所以基本上是要重開程式才能切語言....
嗯,用 pimp 把所有 ui object 包起來不知道有沒有搞頭....
沒有留言:
張貼留言