With the explosive growth of the Internet and rapid globalization of the world's economies, the earth is getting smaller and smaller. The applications that you develop for a local market may soon be used in another country. If the world used a common language, that would make the life of developers much easier. However, reality is far from perfect. With globalization, you need to consider the localization of your application for each specific market segment.
When people talk about localizing their applications, they often think of simply changing the text in a window to another language. While this is part of the localization process, localization involves much more, such as:
As a developer, you need to be concerned with the following:
|
Related Reading
Programming Visual Basic .NET |
In this first article on globalization and localization, I will explain the basics of localization and how to display localized information in your Windows application. In the next installment, I will show you how to use .NET to localize a Windows application that changes its display to suit a particular culture.
A culture is a way to identify a particular setting pertinent to a location or country. You use a culture code to represent a culture. Let me give you some examples of culture codes:
A neutral culture represents a culture that is associated with a language but is not specific to a particular location. For example, "en" is a neutral culture, because it represents the English language but does not provide a specific instance of where it is used.
A specific culture is a culture that is specific to a region or country. For example, "en-GB" is a specific culture.
Finally, the invariant culture is neither a neutral nor specific culture. It is English, but is not associated with any location. The invariant culture is used for representing data that is not shown to the user. For example, you use the invariant culture to persist date information to a file. This ensures that the date information would not be misrepresented if is it going to be interpreted in another specific culture.
In .NET, you can obtain detailed information about the culture used/supported
via the CultureInfo class. The following prints out all of the specific
cultures supported in .NET:
Imports System.Globalization
...
Dim CI As CultureInfo
For Each CI In _
CultureInfo.GetCultures(CultureTypes.SpecificCultures)
Console.WriteLine(CI.Name)
Console.WriteLine(ControlChars.Tab & CI.DisplayName)
Console.WriteLine(ControlChars.Tab & _
CI.NumberFormat.CurrencySymbol)
Console.WriteLine(ControlChars.Tab & _
CI.DateTimeFormat.ShortDatePattern)
Next
Here are two specific ones:
...
en-US
English (United States)
$
M/d/yyyy
en-GB
English (United Kingdom)
£
dd/MM/yyyy
...
As you can see, the currency symbol for the "en-US" culture is "$", while that of the "en-GB" culture is "£". The date formats between the two cultures are also different, most notably in the order in which the day and the month are displayed.
Be default, your .NET application will automatically load the current culture used by the operating system. However, it is often useful to let users explicitly choose the type of culture required during runtime.
The first step towards localization is to control the way information
is formatted. For example, you want to format numbers and dates according
to a particular culture. This is accomplished through the CurrentCulture
property. As setting a culture in .NET is done at the thread level,
you can change a thread's culture by using the property:
System.Threading.Thread.CurrentThread.CurrentCulture
To illustrate how to localize display information, let's build a Windows application. Populate the default Form1 with the following controls:
MainMenuLabelTextBoxDateTimePickerButtonGroupBoxThe populated Windows form is as shown in Figure 1.
|
| Figure 1. The populated Windows Form |
The MainMenu control contains three menus representing these different
cultures:
When the DataTimePicker or TextBox (for salary) control is changed,
I will display the date and salary using the drawText() subroutine.
Private Sub DateTimePicker1_ValueChanged(ByVal sender _
As System.Object, _
ByVal e As System.EventArgs) _
Handles DateTimePicker1.ValueChanged
drawText()
End Sub
Private Sub TextBox4_TextChanged(ByVal sender As _
System.Object, ByVal e As _
System.EventArgs) Handles _
TextBox4.TextChanged
' textbox for salary
drawText()
End Sub
Basically, I use the drawText() subroutine to re-display the date of
birth and salary information. Note that for the salary, I first
assign it to a double variable and then format it using the ToString()
method with a "c" currency format string.
Sub drawText()
Try
lblDOB.Text = DateTimePicker1.Value
' assign the salary to a double
Dim salary As Double = TextBox4.Text
lblSalary.Text = salary.ToString("c")
Catch ex As Exception
lblSalary.Text = "Error!"
End Try
End Sub
When the user clicks on the US menu, switch to English in the US culture:
Private Sub MenuItem2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MenuItem2.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
MenuItem2.Checked = True
MenuItem3.Checked = False
MenuItem4.Checked = False
drawText()
End Sub
The same goes for English in the UK and Chinese in the China cultures:
Private Sub MenuItem3_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MenuItem3.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-GB")
MenuItem3.Checked = True
MenuItem2.Checked = False
MenuItem4.Checked = False
drawText()
End Sub
Private Sub MenuItem4_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MenuItem4.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("zh-CN")
MenuItem4.Checked = True
MenuItem2.Checked = False
MenuItem3.Checked = False
drawText()
End Sub
When a culture is changed, I need to explicitly call the drawText()
subroutine to display the date and salary in the new format (see Figure
2):
![]() |
| Figure 2. Displaying the date and salary in English in the US, English in the UK, and Chinese in the China cultures. |
The beauty of .NET localization is that most of the formatting issues are taken care of by the framework. However, do note that although the currency symbol changes with different cultures, the value remains unchanged. .NET only performs display localization; you need to perform the actual currency conversion yourself.
In my next article, I will discuss how you can localize your Windows application to display different languages.
Wei-Meng Lee (Microsoft MVP) http://weimenglee.blogspot.com is a technologist and founder of Developer Learning Solutions http://www.developerlearningsolutions.com, a technology company specializing in hands-on training on the latest Microsoft technologies.
Return to ONDotnet.com
Copyright © 2009 O'Reilly Media, Inc.