討論區快速選單
知識庫快速選單
程式設計俱樂部Facebook粉絲團 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
不同語系整合方法
更改我的閱讀文章字型大小
作者 : 020645903(ReLife) 人氣指數超過10000點
[ 貼文 81 | 人氣 14439 | 評價 30 | 評價/貼文 0.37 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/8/27 上午 11:56:25
最近跟大陸客戶有軟體上的來往, 對方要求轉簡體語系, 但每次update都要轉換有點麻煩.

還要編譯..測試...大幅增加一個run的時間 :(

且考慮到以後在台灣販賣也有繁體 . 美語 等語係問題..

於是想說做個語言整合. 可惜目前沒有好方法.

求助有經驗的大哥大姊們提供方向!!

萬分感激!

PS:目前無明確想法可提供出來討論.
作者 : hoda(hoda)
[ 貼文 12 | 人氣 1 | 評價 30 | 評價/貼文 2.5 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人020645903註記此篇回應為很有道理 2010/9/4 下午 02:15:54
在此提供我目前做的方式..
1.利用 GetSystemDefaultLangID 取得 OS 的語系 ID ,就可以判斷目前程式是在那種語系底下運行.
   之後就可以動態的顯示出它所對應的語言。
2.在程式中可以使用 #define USE_BUG5 ; #dedine USE_GB ;#define USE_ENG .....
  之後程式在寫時根据這的定義去寫出所有要顯示文字.到時只要改變這些 define 重新compiler 就可以產生你要的語言檔。
3.另一種是使用 Unicode 的方式去顯示,但有可能要包著字型檔,這種做法可以讓程式不管是在中文(繁中,簡中)or 英文,
  的OS 裡都能顯示出正確的文字,但這樣只是解決繁中的字型到簡体的OS 不會變亂碼.但用戶看到的還是繁中的字体.

以上作法提供給你參考.
作者 : hoda(hoda)
[ 貼文 12 | 人氣 1 | 評價 30 | 評價/貼文 2.5 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/4 下午 02:17:18
在此提供我目前做的方式..
1.利用 GetSystemDefaultLangID 取得 OS 的語系 ID ,就可以判斷目前程式是在那種語系底下運行.
   之後就可以動態的顯示出它所對應的語言。
2.在程式中可以使用 #define USE_BUG5 ; #dedine USE_GB ;#define USE_ENG .....
  之後程式在寫時根据這的定義去寫出所有要顯示文字.到時只要改變這些 define 重新compiler 就可以產生你要的語言檔。
3.另一種是使用 Unicode 的方式去顯示,但有可能要包著字型檔,這種做法可以讓程式不管是在中文(繁中,簡中)or 英文,
  的OS 裡都能顯示出正確的文字,但這樣只是解決繁中的字型到簡体的OS 不會變亂碼.但用戶看到的還是繁中的字体.

以上作法提供給你參考.
作者 : 020645903(ReLife) 人氣指數超過10000點
[ 貼文 81 | 人氣 14439 | 評價 30 | 評價/貼文 0.37 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/8 下午 01:54:52

>在此提供我目前做的方式..
>1.利用 GetSystemDefaultLangID 取得 OS 的語系 ID ,就可以判斷目前程式是在那種語系底下運行.
> 之後就可以動態的顯示出它所對應的語言。
>2.在程式中可以使用 #define USE_BUG5 ; #dedine USE_GB ;#define USE_ENG .....
> 之後程式在寫時根据這的定義去寫出所有要顯示文字.到時只要改變這些 define 重新compiler 就可以產生你要的語言檔。
>3.另一種是使用 Unicode 的方式去顯示,但有可能要包著字型檔,這種做法可以讓程式不管是在中文(繁中,簡中)or 英文,
> 的OS 裡都能顯示出正確的文字,但這樣只是解決繁中的字型到簡体的OS 不會變亂碼.但用戶看到的還是繁中的字体.
>
>以上作法提供給你參考.


先謝謝hoda 大大的回應,

目前我的作法是在project內包含繁簡英三種語言檔, 客戶選擇哪個語言介面就將介面上所有的label全部讀取換成對應的語系..
跟hoda 大大的 1.2 方法接近. 只是說這方法當我們遇到符號的時候就掛了..
但這方法已經大幅縮短一整個run的時間了!! (開心)

請問hoda 大大的方法三應該怎麼實現呢? 會走方法1.2正是因為不懂方法3怎麼做 ><"...

萬分感激!!
作者 : jackting(MagicJack)
[ 貼文 123 | 人氣 0 | 評價 410 | 評價/貼文 3.33 | 送出評價 10 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/8 下午 04:06:13
我們以前把所有要顯示的文字串 (符號也包括在內) 都使用變數定義, 需要程式組合的字串也一樣.
所以會有許多字串變數, 而且變數名稱也都很長.
這個工作很辛苦, 不過只花一次工夫作完就好.

然後把這些字串變數集中到 2~3 個檔案中定義, 程式則直接用 header file include.

要加上其他語言時只要把原始語言的檔案交給對方翻譯, 翻譯好的檔案檢查無誤後, 編上另一個檔名待用.

Compile 時不分語系, 但最後要 Link 時的批次檔就有分語系了. 測試時也需要別的語系的電腦.

現在計畫改用 Unicode, 還在作苦工把 char/str 相關的函數換成另一套.
作者 : hoda(hoda)
[ 貼文 12 | 人氣 1 | 評價 30 | 評價/貼文 2.5 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/9 下午 02:56:55
關於用unicode 去顯示中文字的做法,因為我的程式都是用 BCB 6去寫的,也許在vc上的做法有些不同.
1.首先在程式一運行時我會去註冊一個”字型檔”(也許是繁中 or 簡中的字庫).....AddFontResource("C:\\xxxx\\xxxx.TTF");
 (這個字庫可以伴隨著.exe 的檔案,也可以利用 res 的方式把它跟 .exe 包在一起(網路上有它的做法))
2.因為 BCB 6 本身並無法直接顯示unicode 的文字,所以有兩種做法
   (1).上網找可以顯示uniocde 的VCL (如 Tntxxx 的 VCL).
   (2).最通用的方式是直接找出要把字串顯示在上面的 DC .之後利用TextOutW 的方式去顯示出unicode 的字型.
     大至上的順序是這樣的GetDC(取得DC);CreateFont(創建你要顯示的字型大小及樣式);SelectObject(設定字型);
     SetBkColor(設定字体的背景顏色);SetTextColor(設定字体的顏色);TextOutW(在特定的位置上顯示unicode 的字串);
     ReleaseDC(釋放DC).
這樣就算我的程式是在非繁体中文的 OS 中,它也可以正常的顯示出繁体中文,而不會變成亂碼。
以上是我目前在 BCB6 上顯示unicode 的一些做法,供你參考.
    
作者 : 020645903(ReLife) 人氣指數超過10000點
[ 貼文 81 | 人氣 14439 | 評價 30 | 評價/貼文 0.37 | 送出評價 9 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/9/9 下午 04:34:12

>關於用unicode 去顯示中文字的做法,因為我的程式都是用 BCB 6去寫的,也許在vc上的做法有些不同.
>1.首先在程式一運行時我會去註冊一個”字型檔”(也許是繁中 or 簡中的字庫).....AddFontResource('C:\\xxxx\\xxxx.TTF');
> (這個字庫可以伴隨著.exe 的檔案,也可以利用 res 的方式把它跟 .exe 包在一起(網路上有它的做法))
>2.因為 BCB 6 本身並無法直接顯示unicode 的文字,所以有兩種做法
> (1).上網找可以顯示uniocde 的VCL (如 Tntxxx 的 VCL).
> (2).最通用的方式是直接找出要把字串顯示在上面的 DC .之後利用TextOutW 的方式去顯示出unicode 的字型.
> 大至上的順序是這樣的GetDC(取得DC);CreateFont(創建你要顯示的字型大小及樣式);SelectObject(設定字型);
> SetBkColor(設定字体的背景顏色);SetTextColor(設定字体的顏色);TextOutW(在特定的位置上顯示unicode 的字串);
> ReleaseDC(釋放DC).
>這樣就算我的程式是在非繁体中文的 OS 中,它也可以正常的顯示出繁体中文,而不會變成亂碼。
>以上是我目前在 BCB6 上顯示unicode 的一些做法,供你參考.
>
>


謝hoda 大大指點, 誠實的說目前無法深度理解這個方法的原理, 我再去找些輔助的相關資料試驗看看!!

萬分感謝您的指導!! (^_^)
 板主 : 小呆 , 冷眼
 > 遊戲程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 遊戲程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
遊戲程式設計
1 aming 2280 
2 冷眼 1450 
3 阿西德倫 510 
4 PLAYER 390 
5 garf 340 
6 Akira 330 
7 白老鼠(Gary) 290 
8 BlueTulip 270 
9 東昇 250 
10 CCL 240 
遊戲程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625