windows mobile多國語言實現

來源:互聯網
上載者:User

介紹一種多國語言的實現辦法,這也是微軟推薦的方式,開啟windows mobile下的windows目錄可以看到有很多以MUI為尾碼名的檔案,例如shellres.dll.0804.mui、shell.dll.0804.mui。。。。。。我們可以用eXeScope.exe或者resources hacker這樣的檔案查看器查看一下這些檔案究竟是怎麼一回事,不難發現檔案裡面都是一些資源ID和相對應的字串。也許你就疑惑這是為什麼呢?這些檔案有什麼作用呢?下面分解。

MUI是Multilingual User Interface的縮寫,意為多語系使用者介面,主要是用來實現軟體的國際化,也就是軟體的多國語言版本的實現。其實一個mui檔案也是一個DLL來的,但是這個dll有點特殊,不像我們以往的帶來了那樣包含了很多的函數體供dll外或者本身調用,而是只包含字串資源,所以可以在vs下建立一個dll項目,不需要其他代碼,只需要dll的進入點如下:

#include "windows.h"

 

/////////////////////////////////////////////////////////////////////////////

// DLL Entry Point

 

extern "C"

BOOL WINAPI DllMain(HANDLE hInstance, DWORD dwReason, LPVOID lpReserved)

{

    return TRUE;

}

除此以外,剛才也提到了,dll裡只包含字串資源,所以必須添加一個資源設定檔如***.rc,在裡面添加相應的字串資源資訊,如下:

IDR_HELLO_MENUBAR MENU DISCARDABLE

BEGIN

    MENUITEM "Exit",                          PSP_DLGINDIRECT

    POPUP "Menu"

    BEGIN

        MENUITEM "Exit",                          PSP_DLGINDIRECT

        MENUITEM "Test",                        ID_MENU_TEST

    END

END

在這裡要特別注意了,因為每一個mui也就是說每一個dll就代表一種語言,所以在資源設定檔裡就是通過對每個字串資源進行相應語言的更改達到多國語言的效果,例如你要做成簡體中文版本,你就必須在重建立一個dll,同樣建立一個資源設定檔,但是得把剛才上面的這段資源配置指令碼代碼改成如下:

IDR_HELLO_MENUBAR MENU DISCARDABLE

BEGIN

    MENUITEM "退出",                          PSP_DLGINDIRECT

    POPUP "菜單"

    BEGIN

        MENUITEM "退出",                          PSP_DLGINDIRECT

        MENUITEM "測試",                        ID_MENU_TEST

    END

END

然後可以通過把定義資源ID的resources.h這個檔案分享權限設定出來,讓多個mui檔案和應用程式用同一個資源ID。

同時你還需要在dll項目添加一個匯出檔案如***.def,其實不需要匯出函數名如下就可以:

LIBRARY      "hello.exe.0804.mui"

 

EXPORTS

也許你還會問,那應用程式怎麼去通過匹配相應的mui檔案來進行語言的定位?請看。

剛才說到windows目錄下有shellres.dll.0804.mui,其實mui檔案的命名有一定的規則可循,可不是亂來的,首先shellres.dll表明這個mui檔案是專門用於shellres.dll多國語言版本,再例如hello.exe.0804.mui這個表示是專用於hello.exe。然後0804這又是表示什麼意思呢,這是微軟定義的語言ID是一個十六進位數,例如簡體中文的ID就是0x0804,而美國英語ID則是0409。其他國家的語言ID可以查看sdk中的Language Identifiers and Locales。

那系統怎麼去實現識別應用使用哪一個mui檔案呢?在系統註冊表中HKEY_CURRENT_USER\Control\Panel\Desktop\MultiUILanguageId記錄了系統的預設語言ID,所以系統會根據這個預設ID進行自動設定,而不需程式員再使用代碼控制。但是有一點要注意的是mui檔案和應用程式要放在同一個目錄下。在使用vs產生mui檔案時,可以通過對項目屬性進行設定,讓vs直接產生mui檔案,在dll項目中”項目屬性”----“連結器”----“常規”中的”輸出檔案” $(OutDir)/your_mui_name,只需要修改your_mui_name為你相應的mui檔案名稱就可以。

使用mui來實現多國語言版本的實現,不需要更改應用程式的代碼,只需要直接添加或刪除獨立的mui檔案,mui檔案和應用程式是高分離的,方便管理。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.