Stuart McLachlan
stuart at lexacorp.com.pg
Wed Feb 25 04:55:37 CST 2009
In the absence of the sample DB, function Startup() below may need a minor modification. Here's the *total* code required to do the translations with a Collection, which is indexed on Form,Control and Language (other than to add "SetCaptions Me.Name" in each forms on_open). Option Compare Database Option Explicit Global gcolTranslation As New Collection Global glngLanguage As Long Function StartUp() 'Code which is run when the application starts Dim rs As DAO.Recordset Dim x As Long 'Fill Collection Set rs = CurrentDb.OpenRecordset("tblLanguages") While Not rs.EOF For x = 2 To rs.Fields.Count - 1 gcolTranslation.Add rs(x), _ rs!FormName & Chr$(0) _ & rs!ControlName & Chr$(0) _ & Format(x - 2, "00") Next rs.MoveNext Wend 'Get current default language glngLanguage = DLookup("Language", "uSysDefaults") End Function Function SetCaptions(frm As Form) Dim ctl As Control 'skip labels which don't have a translation On Error Resume Next For Each ctl In frm For Each ctl In frm.Controls If ctl.ControlType = acLabel Then ctl.Caption = gcolTranslation(frmName _ & Chr$(0) & ctl.Name _ & Chr$(0) & Format(glngLanguage, "00")) End If Next ctl End Function Function SetLanguage(Language As Long) Dim frm As Form CurrentDb.Execute "Update uSysDefault Set Language = " & Language 'update all open forms For Each frm In Application.Forms SetCaptions frm Next End Function