C\#WinForm 국제 화 실현 의 간단 한 방법

소프트웨어 업계 가 지금까지 발전 하면 서 국제 화 문 제 는 매우 중요 한 위 치 를 차지 해 왔 고 점점 중시 되 어야 한다.개발 자 에 게 있어 절 차 를 작성 하기 전에 국제 화 문 제 는 먼저 고려 해 야 할 문제 이다.가끔 은 이 문 제 는 디자이너 의 고려 범위 안에 있 지만 결국은 개발 자 들 이 실현 해 야 한다.따라서 국제 화 를 어떻게 실현 하 는 지 는 개발 자 들 이 반드시 파악 해 야 할 기본 적 인 기능 이다.오늘 여기 서 말 하고 자 하 는 것 은 C\#를 이용 하여 WinForm 개발 을 할 때 국제 화 는 어떻게 실현 되 었 는 지 하 는 것 이다.시간 과 지면 관 계 를 감안 하여 여기 서 간단 한 국제 화 실현 방법 만 소개 한다.여기 서 언급 한 방법 은 이미 많은 사람들 이 언급 한 적 이 있 을 지 모 르 지만 필 자 는 지루 하지 않 게 소개 한다.C\#에서 국제 화 를 실현 하려 면 관련 자원 파일 이 필요 합 니 다.예 를 들 어 한 소프트웨어 에서 영어,중국어 두 가지 언어 를 지원 하려 면 이 두 가지 언어의 자원 파일 이 있어 야 합 니 다.이것 은 C\#에서 자원 파일(접미사 이름 은 resx)로 이 루어 질 수 있 습 니 다.우 리 는 영어 자원 파일 의 이름 을 resource.en-US 로 정 하고 중국어 자원 파일 의 이름 은 resource.zh-CN 입 니 다.두 자원 파일 과 관련 된 ID 는 모두 같 아야 합 니 다.이 두 가지 자원 파일 이 있 으 니,이어서 어떻게 하 는 지 를 고려 해 야 한다.여러 곳 에서 사용 하 는 상황 에 적응 하기 위해 필 자 는 리 소스 Culture 를 따로 작 성 했 습 니 다.이 종 류 는 정적 인 방법 을 포함 하고 있 습 니 다.주요 역할 은 현재 언어 를 설정 하고 현재 언어 로 돌아 가 는 관련 문자열 입 니 다.이 종류의 코드 는 다음 과 같다.

using System.Reflection;
using System.Resources;
using System.Threading;
using System.Globalization;

namespace GlobalizationTest
{
    class ResourceCulture
    {
        /// <summary>
        /// Set current culture by name
        /// </summary>
        /// <param name="name">name</param>
        public static void SetCurrentCulture(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                name = "en-US";
            }

            Thread.CurrentThread.CurrentCulture = new CultureInfo(name);
        }

        /// <summary>
        /// Get string by id
        /// </summary>
        /// <param name="id">id</param>
        /// <returns>current language string</returns>
        public static string GetString(string id)
        {
            string strCurLanguage = "";

            try
            {
                ResourceManager rm = new ResourceManager("GlobalizationTest.Resource", Assembly.GetExecutingAssembly());
                CultureInfo ci = Thread.CurrentThread.CurrentCulture;
                strCurLanguage = rm.GetString(id, ci);
            }
            catch
            {
                strCurLanguage = "No id:" + id + ", please add.";
            }

            return strCurLanguage;
        }
    }
}

Form 1 의 코드 는 다음 과 같 습 니 다:

/**
 * This project is just a example to show how to do the globalization in C# winform.
 * You and rebuild and/or modify it by yourself if you want.
 * Specially, this project was created in Visual Studio 2010.
 *
 * Project Name : GlobalizationTest
 * Create Date  : April 29th, 2010
 * */

using System;
using System.Windows.Forms;

namespace GlobalizationTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Set the resource culture
        /// </summary>
        private void SetResourceCulture()
        {
            // Set the form title text
            this.Text = ResourceCulture.GetString("Form1_frmText");

            // Set the groupbox text
            this.gbLanguageView.Text = ResourceCulture.GetString("Form1_gbLanguageViewText");
            this.gbLanguageSelection.Text = ResourceCulture.GetString("Form1_gbLanguageSelectionText");

            // Set the label text
            this.lblCurLanguageText.Text = ResourceCulture.GetString("Form1_lblCurLanguageText");
            this.lblNameText.Text = ResourceCulture.GetString("Form1_lblNameText");
            this.lblPhoneText.Text = ResourceCulture.GetString("Form1_lblPhoneText");   

            // Set the button text
            this.btnMsgShow.Text = ResourceCulture.GetString("Form1_btnMsgShowText");

            // Set radiobutton text
            this.rbEnglish.Text = ResourceCulture.GetString("Language_EnglishText");
            this.rbChinese.Text = ResourceCulture.GetString("Language_ChineseText");

            // Set the current language text
            if (rbEnglish.Checked)
            {
                this.lblCurLanguage.Text = ResourceCulture.GetString("Language_EnglishText");
            }
            else if (rbChinese.Checked)
            {
                this.lblCurLanguage.Text = ResourceCulture.GetString("Language_ChineseText");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Set the default language
            ResourceCulture.SetCurrentCulture("en-US");

            this.SetResourceCulture();
        }

        private void btnMsgShow_Click(object sender, EventArgs e)
        {
            if(string.IsNullOrEmpty(txtName.Text))
            {
                MessageBox.Show(ResourceCulture.GetString("Form1_msgbox_nameText"), ResourceCulture.GetString("Form1_msgbox_TitleText"),
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            if (string.IsNullOrEmpty(txtPhone.Text))
            {
                MessageBox.Show(ResourceCulture.GetString("Form1_msgbox_phoneText"), ResourceCulture.GetString("Form1_msgbox_TitleText"),
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            MessageBox.Show(ResourceCulture.GetString("Form1_msgbox_InfoText") + txtName.Text + ", " + txtPhone.Text,
                ResourceCulture.GetString("Form1_msgbox_TitleText"), MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void rbEnglish_CheckedChanged(object sender, EventArgs e)
        {
            ResourceCulture.SetCurrentCulture("en-US");
            this.SetResourceCulture();
        }

        private void rbChinese_CheckedChanged(object sender, EventArgs e)
        {
            ResourceCulture.SetCurrentCulture("zh-CN");
            this.SetResourceCulture();
        }
    }
}

최종 효 과 는 다음 그림 1 과 그림 2 와 같다.

그림 1

요약 하면 C\#의 WinForm 에서 국제 화 를 실현 하려 면 적어도 다음 과 같은 몇 가 지 를 준비 해 야 한다.(1)필요 한 자원 파일(본 고 에서 언급 한 영어 와 중국어 자원 파일)을 준비 해 야 한다.(2)네 임 스페이스 도입(System.Reflection,System.Resources,System.Threading 과 System.Globalization 포함);(3)리 소스 관리자(즉 리 소스 관리자);(4)현재 프로 세 스 의 언어 영역 설정 하기;(5)자원 관리 자 를 통 해 지정 한 자원 파일 에서 필요 한 값 을 가 져 옵 니 다.상술 한 방법 을 통 해 국제 화 를 간단하게 실현 할 수 있다.

좋은 웹페이지 즐겨찾기