vc多語言版本的配置方法和注意事項
編者:李國帥
背景原因:
早些年曾做個翻譯配置的處理,對特定檔案制作中文和英文兩個版本。這裡提供給大家參考。
主要是對軟體的界面和提示語進行兩個版本的顯示。
此方法适用環境:
界面不多,翻譯量不大
針對特定檔案進行多語言配置。
對于翻譯同樣也要解答這幾個問題:
1、翻譯什麼?如何翻譯?
2、何時翻譯?
3、翻譯字典資源如何存放?如何讀取?
4、效率改進?
步驟:
1、設定語言項
配置語言選項的地方有兩個:安裝時,設定時。他們都可以把設定項寫入系統資料庫,隻不過安裝時使用腳本寫入系統資料庫,設定時直接調用api寫入。
2、加載資源檔案
曾使用了三種方式:
- 字元串資源檔案(多種資源dll)
也比較常見,把翻譯子產品封裝到dll中,這裡不做介紹。
- 翻譯檔案
翻譯檔案可以使用xml,html,ini,cvs等個很多格式,以前選擇了資源檔案的形式。如下:
直接使用資源檔案(擴充檔案)
res\Transfer_String.htm 類型HTML 标記IDR_TRANSFER_STRING
Transfer_Player_String
CLASSID$CLSID:AC664CD3-2A49-42B1-AC6F-33A05A8E38A6
STATUS_NULL$""$""
STATUS_NOVIDEO$NotVideo$無視訊
STATUS_STOP$Stop$停止
STATUS_STOPPING$Stopping$正在停止
STATUS_PAUSE$Pause$暫停
STATUS_CONNECTING$Connecting$正在連接配接
STATUS_CONNECTFAILED$Connect Failed$連接配接失敗
STATUS_INTERRUPT$Interrupt$中斷
STATUS_TIMEOUT$Timeout$逾時
STATUS_URLERROR$URL Error$URL錯誤
STATUS_PATHERROR$Path Error$路徑錯誤
STATUS_FILTERERROR$Data Error$資料錯誤
TAGEND$TagEnd$結束
然後分析資源
- 直接的字元數組。
使用源檔案中的數組,transfer.h
3、把翻譯項儲存到map
4、讀取和顯示
讀取待翻譯的詞語,生成id-value對放入map中,需要的時候讀取出來。
pMain->GetTx("IDC_XXX").c_str()。
例如
void C****DLg::SetControlTitle()
{
CManageClientDlg* pMain = (CManageClientDlg*)GetParent();
ASSERT(pMain!=NULL);
SetDlgItemText(IDC_CARRIERGENDER0,pMain->GetTx("IDC_UNKNOWN").c_str());
SetDlgItemText(IDC_CARRIERGENDER1,pMain->GetTx("VS_GENDOR_MAN").c_str());
SetDlgItemText(IDC_CARRIERGENDER2,pMain->GetTx("VS_GENDOR_WOMAN").c_str());
SetDlgItemText(IDC_COUNTRY,pMain->GetTx("ID_CHINA").c_str());
}
注意事項:
需要綜合考慮專業和美觀的問題
不同語言的文字長度不一緻,需要進行實際的測試和調整,才能使界面美觀完整。
系統控件有些是有作業系統決定的,可能需要自定義或者特殊配置。比如月曆控件,系統彈出框等。
如果擷取不到資源,可以使用界面上的原始界面替代
中文顯示亂碼是設計問題。如果作業系統安裝有中文字庫自然不是亂碼。