How to change software UI language

本文详细介绍了一种软件用户界面(UI)多语言切换的方法。通过修改资源文件中的菜单项文字来实现不同语言间的切换,包括如何创建和加载不同的菜单资源,并在运行时根据用户的语言选择动态切换显示的语言。

    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.

 

 

 

<think>好的,用户问的是如何将语言设置改为英语。首先,我需要确定用户可能使用的设备和平台,比如Windows、macOS、Android、iOS或者网页服务。每个系统的设置路径不同,得分开说明。接下来,我得回忆常见的操作系统更改语言的步骤。比如Windows10和11,通常在设置里的时间和语言部分,添加英语并设为默认。需要检查用户是否可能需要重启,这点要提醒。对于macOS,系统偏好设置里的语言与地区,添加英语并拖到顶部,可能也需要重启。 移动设备方面,Android在系统设置的语言和输入部分,添加英语并调整顺序。iOS则在通用设置的语言选项里更改,可能需要下载语言包。这部分要分清楚步骤,避免混淆。还有常见应用和网站,比如Google账户或Microsoft账户,用户可能需要进入账户设置调整语言偏好。这部分要简明,指出具体路径。需要注意用户可能遇到的困难,比如某些系统需要管理员权限,或者更改后部分程序仍显示原语言。是否需要提到这些?可能作为小贴士加入,帮助用户解决问题。 然后,代码部分有没有需要?比如用命令行更改系统语言,但普通用户可能不常用,可能不需要。不过如果有相关命令,比如Windows的PowerShell命令,可以提及,但需谨慎,确保准确。最后,相关问题要基于用户的问题,比如如何恢复默认语言,多语言切换,或者解决更改后显示问题。要确保问题相关且有帮助,引导用户进一步解决可能的需求。 检查步骤是否符合要求:避免使用首先、然后,用换行分隔方法。每个步骤清晰,不使用第一人称。引用内容分散在步骤中,不堆在末尾。代码和公式格式正确,但这里可能不需要数学公式,主要代码示例如果有的话要正确标注。 确保最后的相关问题部分格式正确,标题一行,三个问题,编号正确。没有多余换行或空格。问题基于用户原始内容和回答,比如其他设备设置、多语言切换、恢复原语言等。</think>**更改系统/应用语言为英语的方法** --- **Windows系统** 进入**Settings > Time & Language > Language**,点击**Add a language**搜索并安装**English**。安装完成后将其设为默认语言,重启系统生效。 管理员权限下可使用PowerShell: ```powershell Set-WinUILanguageOverride -Language en-US ``` **macOS系统** 打开**System Preferences > Language & Region**,点击**+**添加**English**并拖至语言列表顶部。重启应用或系统使更改生效。 **Android设备** 进入**Settings > System > Languages & input > Languages**,点击**Add a language**选择**English**,调整顺序至首位。 **iOS设备** 前往**Settings > General > Language & Region > iPhone Language**,选择**English**并确认。 **常见应用/网站** - **Google账户**:访问`myaccount.google.com`,进入**Data & personalization > Language**修改。 - **Microsoft账户**:登录`account.microsoft.com`,选择**Your info > Language preferences**调整。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值