大数跨境
0
0

Access开发如何优雅实现中英文切换

Access开发如何优雅实现中英文切换 Access开发
2025-09-26
1
导读:今天就来分享一个超实用的技巧:用VBA实现Access系统的中英文一键切换,不需要做两套系统,也不需要改控件名!

Hi,大家好!

在我服务过众多的甲方爸爸中,有不少是外企或者是合资企业,他们大多有一个共同的语言语言要求,就是英文!当然,像我这样的开发老炮,英语水平也只是勉强够用。所以,今天就和大家聊聊如何实现Access系统的中文与英文切换功能。

很多朋友遇到多语言需求,第一反应是:

方法1:做两套系统

  • ❌ 维护成本翻倍

  • ❌ 功能更新要改两次

  • ❌ 容易出现版本不一致

方法2:用代码硬编码
If language = "EN"Then    Me.Label1.Caption = "Customer Name"Else    Me.Label1.Caption = "客户名称"EndIf
  • ❌ 代码臃肿难维护

  • ❌ 新增语言要改所有代码

  • ❌ 翻译散落各处,管理混乱

方法3:每个控件做两个

  • ❌ 界面设计复杂

  • ❌ 控件太多影响性能

  • ❌ 调整布局要改两遍

01
创建翻译资源表

建表 tblLanguage:

字段名  类型  说明
TextKey 文本(主键)  翻译键,如 "BTN_SAVE" 
CN 文本
中文内容
EN 文本
英文内容

可以填写一些数据:

FORM_TITLE_MAIN 客户管理系统  Customer Management System
BTN_SAVE 保存 Save
BTN_DELETE 删除
Delete
BTN_CLOSE
关闭
Close
LBL_CUSTOMER_NAME 客户名称 
Customer Name


02
新建窗体

接着创建一个窗体,如图:


在窗体设计视图中,给需要翻译的控件设置Tag属性,比如标签控件的tag输入:LANG=FORM_TITLE_MAIN



03
添加代码

先添加一个通用模块:

OptionCompare DatabaseOptionExplicit'=============================================' 模块:modLanguage' 功能:多语言支持模块' 作者:Access开发'=============================================Public sLan AsString'获取翻译文本PublicFunction T(strKey AsStringAsString    Dim rs As DAO.Recordset    Dim strSQL AsString    Dim strLang AsString        OnErrorGoTo Err_Handler        strLang = sLan    strSQL = "SELECT " & strLang & " FROM tblLanguage WHERE TextKey='" & strKey & "'"        Set rs = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)    IfNot rs.EOF Then        T = Nz(rs.fields(0).value, strKey)    Else        T = strKey  '找不到翻译就返回键名    EndIf        rs.Close    Set rs = Nothing    ExitFunction    Err_Handler:    T = strKeyEndFunction'应用语言到窗体PublicSub ApplyLanguageToForm(frm As Form)    Dim ctl As Control    Dim strKey AsString        OnErrorResumeNext        '处理窗体标题(Tag格式:LANG=键名)    If InStr(frm.Tag, "LANG=") > 0Then        strKey = Mid(frm.Tag, InStr(frm.Tag, "LANG=") + 5)        strKey = Split(strKey, ";")(0)  '支持多个标记用分号分隔        frm.Caption = T(strKey)    EndIf        '处理所有控件    ForEach ctl In frm.Controls        If InStr(ctl.Tag, "LANG=") > 0Then            strKey = Mid(ctl.Tag, InStr(ctl.Tag, "LANG=") + 5)            strKey = Split(strKey, ";")(0)                        '根据控件类型设置不同属性            SelectCase ctl.ControlType                Case acLabel, acCommandButton, acToggleButton                    ctl.Caption = T(strKey)                Case acTextBox, acComboBox, acListBox                    '文本框可能需要设置占位符                    If InStr(ctl.Tag, "PLACEHOLDER") > 0Then                        ctl.PlaceholderText = T(strKey)                    EndIf                Case acPage  '选项卡页                    ctl.Caption = T(strKey)            EndSelect        EndIf    Next ctlEndSub'刷新所有打开的窗体PublicSub RefreshAllForms()    Dim i AsInteger    For i = 0To Forms.Count - 1        ApplyLanguageToForm Forms(i)    Next i    '刷新界面    DoEventsEndSub

在窗体上输入代码:

PrivateSub btnLanguage_Click()    '可以加个提示    IfMe.cmb_Lan = "EN"Then                MsgBox "Language switched to English", vbInformation    Else        MsgBox "语言已切换为中文", vbInformation    EndIf        sLan = Me.cmb_Lan     ApplyLanguageToForm MeEndSubPrivateSub Form_Load()    ApplyLanguageToForm MeEndSub


04
运行测试

最后就是运行测试一下了。



4.png


通过"资源表+Tag标记+VBA模块"的方式,我们可以:

✅ 轻松实现多语言切换

✅ 统一管理所有翻译

✅ 支持动态添加语言

✅ 不改变原有程序结构

✅ 维护方便,扩展简单


这个是一个基础的中英文的切换,下次我们来讲讲不基础的方式,通过API调用的。




【声明】内容源于网络
0
0
Access开发
面向Access爱好者与Access专业开发人员的技术服务平台,日常分享Access开发学习与实践中的点滴。
内容 187
粉丝 0
Access开发 面向Access爱好者与Access专业开发人员的技术服务平台,日常分享Access开发学习与实践中的点滴。
总阅读261
粉丝0
内容187