This article explains the steps to implement localization for windows app using .NET
1. Design the interface by using table layout panel.
2. Change the localizable property of form to true.
3. Select the language by using the language property of form. It will create new resource file for that language.
4. Change the text property of each and every control into selected language.
5. Create the main resource for each and every language and add that into myproject folder of an application. By using this files we use to handle the message box and runtime string localization.
For example Resources.resx = file is use for default language( english-US)
Resources.es-MX.resx = this is for Spanish(Mexico).
To create this resources file: Add new item select the resource files add it to my project folder and Change its couple of property. OR you can use following tools
Custom tool :- VbMyResourcesResXFileCodeGenerator.
Custom tool namespace :- My.Resources.
6. Now access resource file to localize message in messagebox and runtime strings.
MessageBox.Show(My.Resources.NameOfString, My.Resources.Title, MessageBoxButtons.YesNo)7. Our goal is to localize app on changing combobox (cboLanguage). For this we use settings file and add/update following block of code and update[vb]
Public Shared ReadOnly Property [Default]() As MySettings
Get
#If _MyType = "WindowsForms" Then
If Not addedHandler Then
SyncLock addedHandlerLockObject
If Not addedHandler Then
AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
addedHandler = True
End If
End SyncLock
End If
#End If
Return defaultInstance
End Get
End Property
<Global.System.Configuration.UserScopedSettingAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Configuration.DefaultSettingValueAttribute("en-US")> _
Public Property UserLanguagePreference() As String
Get
Return CType(Me("UserLanguagePreference"), String)
End Get
Set(ByVal value As String)
Me("UserLanguagePreference") = value
End Set
End Property
End Class
End Namespace
Namespace My
<Global.Microsoft.VisualBasic.HideModuleNameAttribute(), _
Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()> _
Friend Module MySettingsProperty
<Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")> _
Friend ReadOnly Property Settings() As Global.<namespace>.My.MySettings
Get
Return Global.<namespace>.My.MySettings.Default
End Get
End Property
End Module
End Namespace
[/vb]
On selection change event of combobox add following code:
[vb]
Dim lang As String = ""
lang=cboLanguage.selectedvalue.tostring
My.Settings.UserLangualgePreference=lang
My.Settings.Save()
My.Application.ChangeUICulture(My.Settings.UserLanguagePreference)
'*** refresh current form(say Mainform) with localized strings
LoadFormResources()
[/vb]
Note: in combobox display member= Language Name (English)
Value Member = Language Code (en-US)
Add this method to refresh current form:
[vb]
Private Sub LoadFormResources()
Dim crm As ComponentResourceManager
crm = New ComponentResourceManager(GetType(MainForm))
Dim controlCollobj As New ControlsCollection(Me)
For Each aControl As Control In controlCollobj.Controls
crm.ApplyResources(aControl, aControl.Name)
Next aControl
End Sub
[/vb]
Hope, It helps.