TOC

This article is currently in the process of being translated into Vietnamese (~68% done).

Working with Culture & Regions:

Introduction

Trước đây, nếu một chương trình chỉ thường chạy trên một vài máy tính lân cận thì giờ đậy, nhờ toàn cầu hóa và mạng Internet, một phần mềm máy tính có thể được sử dụng rộng khắp trên thế giới và trên nhiều thiết bị. Điều này đồng nghĩa với việc bạn phải viết code xử lý nhiều trường hợp liên quen đến văn hóa. Văn hóa ở đây chỉ cách hiển thị số, hiển thị ngày, giờ. Lấy ví dụ như ở nhiều nước, trong đó có Việt Nam, dấu phẩy (1,42) được dùng thay cho dấu chấm thập phân (1.42); hay nhiều nước viết ngày trước tháng sau, trong khi có nơi viết tháng trước.

Xử lý tất cả các trường hợp có thể có rất phiền phức. Thật may mắn khi .NET framework có các tính năng dưới dạng các lớp đối tượng để giải quết vấn đề này. Trong đó, lớp CultureInfo được sử dụng nhiều nhất và là tâm điểm của bài viết này. Tuy vậy .NET còn cung cấp các lớp xử lý theo vùng miền và cả lịch nữa (không phải nơi nào trên thế giới cũng dùng chung một loại lịch.)

Chủ đề này đặc biệt quan trọng nếu như bạn đang viết ứng dụng hỗ trợ đa ngôn ngữ. Thâm chí nếu bạn chỉ viết cho một tiếng thì nhiều khi vấn đề bất đồng về cú pháp vẫn xảy ra trên các thiết bị khác nhau. Để thấy được tầm quan trọng của vấn đề "văn hóa", hãy xem ví dụ sau:

string inputNumber = "1.425";
double usNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("en-US"));
double germanNumber = double.Parse(inputNumber, CultureInfo.GetCultureInfo("de-DE"));
Console.WriteLine(usNumber.ToString() + " is not the same as " + germanNumber);

Hãy coi inputNumber là một giá trị số ta nhận được từ người dùng ứng dụng (như từ một trường nhập số trong một form trên mạng chẳng hạn). Ta sử dụng double.Parse() để chuyển chuỗi này thành số thực, nhưng sử dụng thêm tham số thuộc kiểu CultureInfo (tương ứng với Anh-Mỹ ở trên và Đức ở dưới) - nếu tham số này được bỏ qua thì giá trị mặc định sẽ do hệ thống quy định, tùy theo máy của bạn mà nó có thể là tiếng Anh, tiêng Đức hay khác. Để ý kết quả in ra:

1,425 is not the same as 1425

Quite true! Our number value just got a thousand times bigger, because in Germany, they use a comma as the decimal separator, while a period acts as the thousands separator. This would be a major problem in most applications, but the good news is that while the example illustrates the problem, it also illustrates the solution: You always have to be in control of how you receive input and then deal with it accordingly, because as you can see, thanks to the CultureInfo class, .NET is capable of parsing a number (and dates too!) in any of the possible formats, as long as you tell it what to expect.

Summary

Dealing with cultural and regional differences is perhaps even more important when programming than in real life. Fortunately for us, the .NET framework can be a huge help in these regards, as long as you know where to look. In the next couple of articles, we'll discuss the tools offered by the .NET framework for dealing with these differences.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!