在全球化的今天,软件的多语言支持变得越来越重要。许多用户可能并不擅长英语,因此,为他们提供母语支持是提升用户体验的关键。为了解决这一问题,开发了一个ActiveX控件,它可以帮助程序员轻松地将程序的用户界面翻译成所需的语言。本文将详细介绍如何在VC++和VB程序中使用这个控件。
在程序中使用这个控件非常简单,这里提供了两种方法:一种是用于VC++程序,另一种是用于VB程序。
对于VC++程序,控件提供了一个名为TranslateWindow
的函数,用于翻译程序的用户界面。假设有两个菜单项:英语和越南语。英语菜单项用于将程序的用户界面翻译成英语,而越南语菜单项则翻译成越南语。只需要在程序中添加以下代码:
void CTestSDIView::OnLanguageEnglish() {
int nIndex = m_IGMLCtrl.LanguageByName("English");
m_IGMLCtrl.SetActiveLanguage(nIndex);
m_IGMLCtrl.TranslateWindow((LONG)AfxGetMainWnd()->GetSafeHwnd());
}
void CTestSDIView::OnLanguageVietNamese() {
int nIndex = m_IGMLCtrl.LanguageByName("VietNamese");
m_IGMLCtrl.SetActiveLanguage(nIndex);
m_IGMLCtrl.TranslateWindow((LONG)AfxGetMainWnd()->GetSafeHwnd());
}
对于使用VB编写的程序,控件提供了一个名为TranslateWindow
的函数来解决问题。由于几乎所有VB程序都基于COM技术,因此控件需要以不同的方式完成任务。在这种情况下,需要在项目中添加以下代码:
Private Sub MenuItem_Click0()
IGMLCtrl.ActiveLanguage = IGMLCtrl.LanguageByName("English")
bResult = IGMLCtrl.TranslateObject(Me)
End Sub
在使用控件之前,需要加载字典文件。加载指定的字典文件,可以这样做:
void CTestSDIView::OnInitialUpdate() {
// your initial code here...
if (m_IGMLCtrl.LoadDictionary("Dictionary.dic")) {
// Translate Window into recently used language.
m_IGMLCtrl.TranslateWindow((LONG)GetSafeHwnd());
m_IGMLCtrl.TranslateWindow((LONG)AfxGetMainWnd()->GetSafeHwnd());
}
}
Sub Form_Load(..)
// your initial codes
IGMLCtrl.LoadDictionary "Dictionary.dic"
IGMLCtrl.TranslateObject(me)
End Sub
在这个例子中,从程序启动的位置加载了名为Dictionary.dic
的文件。
如果希望在运行时切换语言,必须首先设置活动语言索引,然后调用TranslateWindow(...)
或TranslateObject(...)
函数。
ActiveLanguage
或NativeLanguage
属性是字典文件中语言的索引。可以直接设置它,或者通过LanguageByName(LPCTSTR lpszLanguageName)
函数设置。
字典文件对于确保控件正常工作非常重要。它通常是一个文本文件,因此对于程序员和最终用户来说都更容易。其结构如下所示:
[Configuration]
Active Language=VietNamese
Native Language=English
[English]
&File
&New\tCtrl+N
&Open
&Save
[VietNamese]
Tập tin
Tạo mới
Mở file
Lưu file
Lưu file với tên mới
Active Language
键指定程序当前使用的语言。Native Language
键指定程序员在设计时使用的语言。