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

Hi,大家好!

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

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

方法1:做两套系统

  • ❌ 维护成本翻倍

  • ❌ 功能更新要改两次

  • ❌ 容易出现版本不一致

方法2:用代码硬编码

If language = "EN" Then    Me.Label1.Caption = "Customer Name"Else    Me.Label1.Caption = "客户名称"End If
  • ❌ 代码臃肿难维护

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

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

方法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

添加代码

先添加一个通用模块:

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

在窗体上输入代码:

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

04

运行测试

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

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

✅ 轻松实现多语言切换

✅ 统一管理所有翻译

✅ 支持动态添加语言

✅ 不改变原有程序结构

✅ 维护方便,扩展简单

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Access开发易登软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值