線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1421
推到 Plurk!
推到 Facebook!

請教BCB6製作多國語系切換功能 遇上了奇怪的問題

缺席
upen24931251
一般會員


發表:4
回覆:1
積分:1
註冊:2011-03-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-03-10 16:04:51 IP:140.96.xxx.xxx 訂閱
我的作業系統是WinXP繁中語系
而我的BCB6是professional而非企業版,
企業版似乎有個很好用的多國語言功能,但是在專業版上面看不到這東西,
所以用Resource DLL Wizard這種做法我就先放棄不理了.


已經參考了很多篇網路上的資料,
最後決定用INI檔案方式來實現多國語系:
我先以版上的文章為基礎來實做,
當完全使用原本的程式碼的時候,
繁體以及英文可以切換無誤,
但是簡體卻會出現亂碼,而這個問題在切換作業系統的語系之後,
會變成繁體是亂碼,簡體正常顯示;
查詢網路的結果,得到BCB只對AnsiString有反應,
所以我去找了一個可以顯示Unicode的方法,也就是安裝TntUnicode

安裝了TntUnicode之後,想說應該可以顯示簡體中文了吧!
於是將ini檔案另存為unicode格式,
接著執行測試程式如下:
同時創造兩個按鈕,其Caption輸入同一簡體字串:多国语言系统测试
標準元件出現的結果是:多??言系???
而TntUnicode元件出現的是:多国语言系统测试

所以我想應該可以使用TntUnicode元件成功地呈現我想要的"自由切換語系的功能"吧!
我所想達成的功能是:
有三個按鈕分別代表簡體繁體英文,當我按下任意一個按鈕的時候,
整個Form裡面的所有按鈕還有文字都會變成該語系.

但是,當我按照網路上的說明,把原本的程式再次改寫,
當我按下簡體按鈕,顯示出來的卻是一堆問號與繁體交雜,
這時候我想說會不會是因為 "TIniFiles"這個傢伙吃下去AnsiString也只吐AnsiString出來,
所以我用API的方式,先讀進AnsiString格式的繁體中文Big5編碼,轉換成GB碼,
流程:Big5->Unicode->GB繁中->GB簡中
而出來的結果如同預料,和一開始沒有用TntUnicode元件的情況依樣,是一堆亂碼;
我在.cpp標頭檔寫上:#define UNICODE
然後把程式內容所有改成以WideString回傳,執行結果變成一堆問號和繁中交雜.

網路上另外一種做法是用Resource DLL Wizard來實現,
但是不知道為何,我的BCB6無法像網路上說的那樣,將reinit.pas編譯成reinit.hpp,
.pas不知道為何都無法編譯,所以這個方法我就放棄了.

我想問的問題如下:
1: TINIFiles輸入輸出如果只能用AnsiString的話,是不是在讀取的一開始,
不管我輸入的文件是Unicode或者是Ansi,他都會直接強制轉換成Ansi來做處理,
所以我再輸出之後做處理是沒有意義的,因為在輸入的時候,就已經因為強制轉換而被破壞掉了?

2:如果真的如我問題1所說,在讀取的時候格式就被破壞掉了,
那麼是否有別種讀取方法可以不損害格式,而能夠讓TiniFile輸入和輸出都能夠維持是Unicode呢?


3:搜尋了很久也找不到TntUnicode的說明文件,是否在TntUnicode裡面有取代TiniFiles的功能存在呢?

4:如果我還是想用INIFIle這樣的做法來完成多國語系切換,是否還有別種做法?
如果有的話,是否可以分享一下如何實現呢?

5:曾經看過一個網站介紹關於繁體中文Unicode和簡體中文Unicode字串在支援與不支援Unicode的程式傳輸,
會出現很多問號,而在因為繁簡Unicode兩者有重疊部分,在這重疊部分還是會正常顯示,
但是其他未重疊的部分則會用問號表示.
所以像我明明輸出了簡體Unicode但是卻沒辦法正常顯示,或許是因為上述這原因吧,
那麼,簡繁體Unicode之間又該如何轉換呢?
或者這是字集選擇的問題呢? (我在設定上通通都是用Default_CharSet)




希望能有人幫我解答這些問題,在此先謝過大家的耐心囉.


系統時間:2017-10-18 22:43:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!