Thứ tư, ngày 7 tháng 12 năm 2016

C# – Multi Language (đa ngôn ngữ) trong Windows Forms

Ngày đăng: 26/3/2012, 8:40:9PM | Lượt xem: 4,226
Hot!

Để tạo một ứng dụng đa ngôn ngữ, cách điển hình là tạo các string table để lưu trữ các văn bản, chuỗi cho mỗi ngôn ngữ. Trong .NET, bạn có thể dùng các Resource để tạo ra các string table này và dùng lớp ResourceManager để quản lý và lấy ra các chuỗi cụ thể dựa vào một đối tượng CultureInfo.

Để tạo một ứng dụng đa ngôn ngữ, cách điển hình là tạo các string table để lưu trữ các văn bản, chuỗi cho mỗi ngôn ngữ. Trong .NET, bạn có thể dùng các Resource để tạo ra các string table này và dùng lớp ResourceManager để quản lý và lấy ra các chuỗi cụ thể dựa vào một đối tượng CultureInfo.

Download sourcecode (38 KB)

Trước hết tôi tạo một ứng dụng WinFoms với tên WinFormsMultilingual, tạo thêm một thư mục tên là “Lang”. Sau đó thêm một Resources File với tên MyResource.resx vào thư mục này.

Tạo thêm hai Resource vào thư mục Lang tương ứng cho hai ngôn ngữ là English và Vietnamese. Các Resource này phải có tên theo dạng < default resource name >.<culture>.resx với <default resource name > chính là MyResource mà tôi đặt ở bước trên.

Solution Explorer sẽ có dạng:

Thêm dữ liệu vào các file MyResource.en-US.resx và  MyResource.vi-VN.resx. Mỗi dòng bao gồm hai cột cần có dữ liệu là Name và Value. Cột Name là định danh giúp lấy ra Value của bảng khi bạn dùng ResourceManager để làm việc:

Viết phương thức SetLanguage() để thay đổi ngôn ngữ cho giao diện. Các giá trị của tham số cultureName bạn có thể tham khảo ở cuối bài viết:

private void SetLanguage(string cultureName)
{
    culture = CultureInfo.CreateSpecificCulture(cultureName);
    ResourceManager rm = new
        ResourceManager("WinFormsMultiLingual.Lang.MyResource", typeof(Form1).Assembly);

    btnHello.Text = rm.GetString("hello", culture);
    radEnglish.Text = rm.GetString("english", culture);
    radVietnamese.Text = rm.GetString("vietnamese", culture);
    helloWorldString = rm.GetString("helloworld", culture);
}

Mã nguồn code-behind hoàn chỉnh của Form1.cs:

using System;
using System.Windows.Forms;
using System.Resources;
using System.Globalization;

namespace WinFormsMultiLingual
{
    public partial class Form1 : Form
    {
        CultureInfo culture;
        string helloWorldString = "Hello World!";

        public Form1()
        {
            InitializeComponent();

            culture = CultureInfo.CurrentCulture;

        }

        private void btnHello_Click(object sender, EventArgs e)
        {
            MessageBox.Show(helloWorldString);
        }

        private void LanguageRadioButtons_CheckedChanged(object sender, EventArgs e)
        {
            if (radEnglish.Checked)
                SetLanguage("en-US");
            else if (radVietnamese.Checked)
                SetLanguage("vi-VN");
            //else
            //    ...

        }

        private void SetLanguage(string cultureName)
        {
            culture = CultureInfo.CreateSpecificCulture(cultureName);
            ResourceManager rm = new
                ResourceManager("WinFormsMultiLingual.Lang.MyResource", typeof(Form1).Assembly);

            btnHello.Text = rm.GetString("hello", culture);
            radEnglish.Text = rm.GetString("english", culture);
            radVietnamese.Text = rm.GetString("vietnamese", culture);
            helloWorldString = rm.GetString("helloworld", culture);
        }
    }
}

Khi biên dịch, mỗi một tập tin Resource sẽ được tạo ra trong một thư mục mới với tên tương ứng là en-US và vi-VN. Mỗi thư mục này sẽ chứa một tập tin có tên WinFormsMultiLingual.resources.dll.

Kết quả:

Tham khảo:

National Language Support (NLS) API Reference

http://yinyangit.wordpress.com

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.