ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C#] Resources를 통한 다국어 기능 구현
    취미생활/C# 2019. 12. 10. 12:05
    반응형

    안녕하세요.

     

    코딩하는남자에 코딩연습생입니다

     

    이번에 회사에서 관리하는 MES 프로그램에 갑작스런 외국인 사용자가 추가 되어

     

    기존 한국어/인도네시아어만 사용되고 있었는데 중국어를 추가해야 될 일이 발생했어요~

     

    그래서 어떤식으로 다국어 기능을 구현할까 고민하다가 좋은 정보가 있어 블로그에 기재하게 되었습니다

     

    원리는 간단합니다

     

    기존 프로젝트에 언어별 Resource 파일을 추가해서 

     

    컨트롤별 한국어/인도네이아어/중국어 작성해 놓고 이벤트에 따라 해당 리소스 파일의 정보를 보여주는식으로

     

    구동 되어 집니다

     

     

    [구현 방법]

    1. 기존 프로젝트에 폴더를 삽입

       - 저는 Language라고 햇어요

         (솔루션 탐색기에서 폴더 추가하는 방법은 따로 설명하지 않을께요)

       

     

    2. Language 폴더에 리소스 파일을 생성합니다

       - 리소스파일명은 개인 취향입니다 저는 Str.resx라고 했어요

         (Language폴더에서 마우스 오른쪽 버튼을 누루고 추가 새 항목 선택 후 리소스파일을 선택하면 됩니다)

       

     

      - 총 3개의 리소스 파일을 추가했습니다

        (Str.resx : 기본 리소스 파일, Str.ko-KR.resx : 한국어 리소스 파일, Str.zh-CN.resx : 중국어 리소스 파일)

     

    3. 리소스 파일의 액세스 한정자 확인

       - Str.resx 기본 리소스 파일의 액세스 한정자 타입은 Internal 입니다

       

     

      - Str.ko-KR.resx와 Str.zh-CN.resx 파일의 액세스 한정자 타입은 코드 생성 안됨으로 하시면 됩니다

      (보통 생성 순서에 따르 자동 지정되니 확인만 하시면 될거 같습니다)

     

    4. 디자인을 통해 언어 선택을 할 콤보박스를 생성

       - 저는 콤보박스로 했는데 이것도 개인취향이니 편하신데로 해도 되요

     

    5. 콤보박스 이벤트 생성

       - comboBox1_SelectedIndexChanged 이벤트 생성하여 콤보박스의 Index가 변경될때 발생하도록 합니다

     

    6. comboBox1_SelectedIndexChanged 코드 생성

       - CultureInfo 함수를 사용하기 위해서는 "using System.Globalization;" 선언문을 꼭 해주셔야 합니다

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                if (comboBox1.SelectedIndex == 0)
                {
                    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ko-KR");
                    SetTextLanguage();
                }
                else if (comboBox1.SelectedIndex == 1)
                {
                    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("zh-CN");
                    SetTextLanguage();
                }
    
            }

      - 언어 선택에 다른 컨트롤 변경 코드 생성

    public void SetTextLanguage()
            {
                lblUSERMODE.Text = POPMachine.Language.Str.lblUSERMODE;
                label4.Text = POPMachine.Language.Str.label4;
                NAME_DATE.Text = POPMachine.Language.Str.NAME_DATE;
                button1.Text = POPMachine.Language.Str.button1;
                button3.Text = POPMachine.Language.Str.button3;
                button4.Text = POPMachine.Language.Str.button4;
                label5.Text = POPMachine.Language.Str.label5;
                label14.Text = POPMachine.Language.Str.label14;
                label2.Text = POPMachine.Language.Str.label2;
                label8.Text = POPMachine.Language.Str.label8;
                label10.Text = POPMachine.Language.Str.label10;
                label7.Text = POPMachine.Language.Str.label7;
                label9.Text = POPMachine.Language.Str.label9;
                label6.Text = POPMachine.Language.Str.label6;
                label16.Text = POPMachine.Language.Str.label16;
                label11.Text = POPMachine.Language.Str.label11;
                label13.Text = POPMachine.Language.Str.label13;
                cmdRun_WMIX_NO1.Text = POPMachine.Language.Str.cmdRun_WMIX_NO1;
                cmdRun_WMIX_NO2.Text = POPMachine.Language.Str.cmdRun_WMIX_NO2;
                cmdRun_WMIX_NO3.Text = POPMachine.Language.Str.cmdRun_WMIX_NO3;
                cmdRun_WHLOT_NO.Text = POPMachine.Language.Str.cmdRun_WHLOT_NO;
                cmdRun_WRACK_NO.Text = POPMachine.Language.Str.cmdRun_WRACK_NO;
                cmdRun_NG_SELFCHACK.Text = POPMachine.Language.Str.cmdRun_NG_SELFCHACK;
                cmdRun_WPART_CUST.Text = POPMachine.Language.Str.cmdRun_WPART_CUST;
                cmdRun_WFORM_MCPLAN.Text = POPMachine.Language.Str.cmdRun_WFORM_MCPLAN;
                cmdRun_WLOT_NO.Text = POPMachine.Language.Str.cmdRun_WLOT_NO;
                hoverGradientButton1.Text = POPMachine.Language.Str.hoverGradientButton1;
                cmdRun_WPCardScan.Text = POPMachine.Language.Str.cmdRun_WPCardScan;
                cmdRun_WStart.Text = POPMachine.Language.Str.cmdRun_WStart;
                cmdRun_WOKQty.Text = POPMachine.Language.Str.cmdRun_WOKQty;
                cmdRun_WPrint.Text = POPMachine.Language.Str.cmdRun_WPrint;
                cmdRun_WMCStopHist.Text = POPMachine.Language.Str.cmdRun_WMCStopHist;
                cmdRun_WFinish.Text = POPMachine.Language.Str.cmdRun_WFinish;
                cmdRun_WProcImage.Text = POPMachine.Language.Str.cmdRun_WProcImage;
                cmdRun_WNGQty.Text = POPMachine.Language.Str.cmdRun_WNGQty;
                cmdRun_WLPrint.Text = POPMachine.Language.Str.cmdRun_WLPrint;
                cmdRun_WWaiting.Text = POPMachine.Language.Str.cmdRun_WWaiting;
                button5.Text = POPMachine.Language.Str.button5;
                cmdRun_Workers.Text = POPMachine.Language.Str.cmdRun_Workers;
                cmdRun_WorkHist.Text = POPMachine.Language.Str.cmdRun_WorkHist;
                cmdRun_Mold.Text = POPMachine.Language.Str.cmdRun_Mold;
                cmdRun_Wheel.Text = POPMachine.Language.Str.cmdRun_Wheel;
                cmdRun_SubPartImage.Text = POPMachine.Language.Str.cmdRun_SubPartImage;
                cmdRun_PCardStatus.Text = POPMachine.Language.Str.cmdRun_PCardStatus;
                cmdRun_Video.Text = POPMachine.Language.Str.cmdRun_Video;
                cmdRun_Call.Text = POPMachine.Language.Str.cmdRun_Call;
                cmdRun_Setting.Text = POPMachine.Language.Str.cmdRun_Setting;
                cmdRun_Exit.Text = POPMachine.Language.Str.cmdRun_Exit;
    
            }

     

    저는 해당 화면에 컨트롤이 많아 이렇게 나열했지만 좀 더 응용하면 Resource 파일을 연계하여

     

    같은 종류의 컨트롤별 자동 지정되도록 구현하면 Source Code가 좀 더 깔끔해질거 같네요

     

    이렇게 구현하게되면 나중에 언어가 추가 될때 당황하지 않고 Resorce파일만 추가하여 적용해주면

     

    더 많은 언어들의 쉽게 적용할 수 있습니다

     

    한번 도전해 보세요^^

     

    감사합니다

    반응형
Designed by Tistory.