How to change software UI language

    Recently,I mastered a method on how to change software UI language such as menu,button something like that. Here,I wirte something for you and share my code with you.If you like it.we can talk about it together and exchange our mind each other.OK?

   First of all,I will introduce to you abou Menu resource and how to use it to translate language.As all of you know,Menu resource play a important role in developing software,we must master it and then we will do something that we want to do.Maybe you can understand what I just have said.

   Using Editor context to open rc file and you will see something as following description:
    // Menu
    //

IDR_MAINFRAME MENU PRELOAD DISCARDABLE
BEGIN
    POPUP "文件(&F)"
    BEGIN
        MENUITEM "新建(&N)/tCtrl+N",            ID_FILE_NEW
        MENUITEM "打开(&O).../tCtrl+O",         ID_FILE_OPEN
        MENUITEM "保存(&S)/tCtrl+S",            ID_FILE_SAVE
        MENUITEM "另存为(&A)...",               ID_FILE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "打印(&P).../tCtrl+P",         ID_FILE_PRINT
        MENUITEM "打印预览(&V)",                ID_FILE_PRINT_PREVIEW
        MENUITEM "打印设置(&R)...",             ID_FILE_PRINT_SETUP
        MENUITEM SEPARATOR
        MENUITEM "最近文件",                    ID_FILE_MRU_FILE1, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "退出(&X)",                    ID_APP_EXIT
    END
    POPUP "编辑(&E)"
    BEGIN
        MENUITEM "撤消(&U)/tCtrl+Z",            ID_EDIT_UNDO
        MENUITEM SEPARATOR
        MENUITEM "剪切(&T)/tCtrl+X",            ID_EDIT_CUT
        MENUITEM "复制(&C)/tCtrl+C",            ID_EDIT_COPY
        MENUITEM "粘贴(&P)/tCtrl+V",            ID_EDIT_PASTE
    END
    POPUP "查看(&V)"
    BEGIN
        MENUITEM "工具栏(&T)",                  ID_VIEW_TOOLBAR
        MENUITEM "状态栏(&S)",                  ID_VIEW_STATUS_BAR
        MENUITEM "语言",                        ID_LANGUAGEMENU
    END
    POPUP "帮助(&H)"
    BEGIN
        MENUITEM "关于 MenuBGround(&A)...",     ID_APP_ABOUT
    END
END

Translate them like this:

IDR_ENGLISH MENU DISCARDABLE
BEGIN
    POPUP "file(&F)"
    BEGIN
        MENUITEM "new(&N)/tCtrl+N",             ID_FILE_NEW
        MENUITEM "open(&O).../tCtrl+O",         ID_FILE_OPEN
        MENUITEM "save(&S)/tCtrl+S",            ID_FILE_SAVE
        MENUITEM "save as(&A)...",              ID_FILE_SAVE_AS
        MENUITEM SEPARATOR
        MENUITEM "print(&P).../tCtrl+P",        ID_FILE_PRINT
        MENUITEM "printview(&V)",               ID_FILE_PRINT_PREVIEW
        MENUITEM "printset(&R)...",             ID_FILE_PRINT_SETUP
        MENUITEM SEPARATOR
        MENUITEM "Recent file",                 ID_FILE_MRU_FILE1, GRAYED
        MENUITEM SEPARATOR
        MENUITEM "exit(&X)",                    ID_APP_EXIT
    END
    POPUP "edit(&E)"
    BEGIN
        MENUITEM "undo(&U)/tCtrl+Z",            ID_EDIT_UNDO
        MENUITEM SEPARATOR
        MENUITEM "cut(&T)/tCtrl+X",             ID_EDIT_CUT
        MENUITEM "copy(&C)/tCtrl+C",            ID_EDIT_COPY
        MENUITEM "paste(&P)/tCtrl+V",           ID_EDIT_PASTE
    END
    POPUP "look(&V)"
    BEGIN
        MENUITEM "toolbar(&T)",                 ID_VIEW_TOOLBAR
        MENUITEM "statusbar(&S)",               ID_VIEW_STATUS_BAR
        MENUITEM "language",                    ID_LANGUAGEMENU
    END
    POPUP "help(&H)"
    BEGIN
        MENUITEM "about MenuBGround(&A)...",    ID_APP_ABOUT
    END
END

And then,save them.you just completed the step one.The next task is about how to associate with software UI.

  You should return resource manager and open menu item ,you will see another menu IDR_ENGLISH.Add the same ID for IDR_ENGLISH and IDR_MAINFRAME like the following picture:

   The two menus:
    Chinese:

           

   English:

    

  Pay attention to language and "语言",you must use the same ID. and then you will  response menu function such as language or "语言" as following code description:

 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
 {
  TRACE0("Failed to create toolbar/n");
  return -1;      // fail to create
 }

 if (!m_wndStatusBar.Create(this) ||
  !m_wndStatusBar.SetIndicators(indicators,
    sizeof(indicators)/sizeof(UINT)))
 {
  TRACE0("Failed to create status bar/n");
  return -1;      // fail to create
 }

 // TODO: Delete these three lines if you don't want the toolbar to
 //  be dockable
 m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
 EnableDocking(CBRS_ALIGN_ANY);
 DockControlBar(&m_wndToolBar);

 m_English.LoadMenu("IDR_ENGLISH");          //加入英文菜单资源
 HMENU hMenu = ::GetMenu(this->m_hWnd);    //获得中文菜单资源
 m_Chinese.Attach(hMenu);                  //保存中文菜单资源

 //about cmenu bar background color information

 return 0;
}

Respose function for translation language like this:

xxx.h:

  class CMainFrame : public CFrameWnd
{
 
protected: // create from serialization only
 CMainFrame();
 DECLARE_DYNCREATE(CMainFrame)

// Attributes
public:

// Operations
public:

// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CMainFrame)
 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
 //}}AFX_VIRTUAL

// Implementation
public:
 virtual ~CMainFrame();
#ifdef _DEBUG
 virtual void AssertValid() const;
 virtual void Dump(CDumpContext& dc) const;
#endif

protected:  // control bar embedded members
 CStatusBar  m_wndStatusBar;
 CToolBar    m_wndToolBar;
 CBrush m_wndBrush;
 BOOL IsEnglish;
 CMenu m_Chinese;
 CMenu m_English;

// Generated message map functions
protected:
 //{{AFX_MSG(CMainFrame)
 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
 afx_msg void OnLanguagemenu();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};

 

xxx.cpp:

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 //{{AFX_MSG_MAP(CMainFrame)
    ON_WM_CREATE()
    ON_COMMAND(ID_LANGUAGEMENU, OnLanguagemenu)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

 

   void CMainFrame::OnLanguagemenu()
{
 // TODO: Add your command handler code here
 IsEnglish = !IsEnglish;
 if (IsEnglish)
 {
  this->SetMenu(&m_English);
 }
 else
 {
  this->SetMenu(&m_Chinese);
 }
}

In the end.you have finished it.

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值