반응형

안녕하세요.

 

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

 

이번에 회사에서 관리하는 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파일만 추가하여 적용해주면

 

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

 

한번 도전해 보세요^^

 

감사합니다

반응형
반응형

안녕하세요.

 

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

 

회사 생활을 하면서 여러가시 프로젝트를 경험하게 된다.

 

그중 제일 이해가 되지 않고 관리하기 힘든 부분이 바로 "프로그램"에 대한 관리 이다.

 

물론 개발자 입장에서 Source Code만 분석하면 어는정도 프로젝트에 대한 이해가 된다 하지만 회사에서 요구하는건

 

많은 것을 요구하게 된다

 

 

예를 들면 "Source Code는 너희만 아는거고....나는 모르니 내가 알수 있는 문서로 가져와" 머 이런 업무 지시들...

 

그래서 나름 문서화 해서 "프로그램 정의서", "인터페이스 정의서", "테이블 정의서", "ERD" 뭐 이런 산출물을 작성하면

 

이렇게 말한다 "이게 뭔데~! 초등학생이 봐도 알 수 있는 그런 자료를 가져와"

 

나는 생각한다 회사 바꿔야 하나??ㅋㅋㅋㅋ

 

그래서 여러 인터넷 검색과 경험을 토대로 프로젝트 산출물 과정을 잘 나열한 자료가 있어서 공유하고자 한다

 

 

▣ 개발 프로젝트 산출물 단계별 과정

 

1. 분석 단계

   ⊙ 요구사항 정의서 : 고객의 니즈를 담고 있는 문서, 고객의 니즈에 따라서 프로젝트의 스펙이 결정될 것이다

   ⊙ 기능 차트 : 니즈를 베이스로 큰 카테고리를 만들어서 프로젝트의 역할을 보여준다

   ⊙ 프로세스 정의서 : 기능차트를 기준으로 각각의 프로세스를 보여준다

   ⊙ 인터페이스 정의서 : 프로세스 정의서 기준으로 외부 S/W 및 장비와 연결정보를 정의한 문서

 

 

 

2. 설계 단계

    ⊙ 화면설계서 : 웹어플리케이션 혹은 기타 어플리케이션에서 고객이 사용하고자하는 샘플 화면 문서

    ⊙ ERD : 데이터베이스를 생성하고 테이블간의 관계를 나타내는 문서

    ⊙ 테이블 목록 : 한눈에 데이터베이스 구조를 볼 수 있는 목록

    ⊙ 테이블 정의서 : 각 테이블의 필드명 값, 바이트 등의 정보 표시

    ⊙ 개발 표준 정의서 : 변수명, 클래스명, 파일명의 규칙등 코딩에 관련된 규칙을 담은 문서

    ⊙ 단위테스트 시나리오 : 프로세스별 단위 테스트를 위한 테스트 문서

    ⊙ 통합테스트 시나리오 : 단위테스트를 근간으로 고객의 니즈를 보안할 수 있는 테스트 문서

 

3. 개발 단계

    ⊙ 소스코드 : 오류 수정까지 끝난 원시코드 자체

    ⊙ 프로그램 정의서 : 소스코드의 단계별(모듈) 동작표준을 정의한 문서 

    ⊙ 단위테스트 결과서 : 단위테스트 시나리오를 기준으로 한 테스트 결과

    ⊙ 결함/오류 보고서 : 단위테스트를 통해 발견된 에러/버그의 원인과 수정에 대한 내용

    ⊙ 오류코드 정의서 : 결함/오류 보고서의 내용을 베이스로 해당 시스템에서 발생 할 수 있는 오류를 코드화 하여 보여줌

    ⊙ 통합테스트 결과서 : 통합테스트 시나리오를 기준으로 한 결과로서 개발완료 여부의 기준이 되는 문서

    ⊙ 시스템 이행 계획서 : 유지보수와 관련하여 관리가 필요할 경우 해당 프로젝트의 관리 포인트를 누가 언제 이행할 것인지를 기록

 

 

4. 구현 단계

    ⊙ 시스템 이행 결과서 : 시스템 이행 계획서를 통해 이행된 결과를 확인받는 문서

    ⊙ 사용자 매뉴얼 : 사용자 화면이 존재할 경우, 일반적인 조작법과 화면등의 예시를 들어 산출되는 문서

    ⊙ 운영자 매뉴얼 : 개발된 프로젝트 시스템 전방에 대한 내용을 담는 문서

    ⊙ 교육(인수) 명세서 : 사용자 매뉴얼, 운영자 매뉴얼을 중심으로 담당자에게 세부사항을 교육/인수한 후 받는 문서

    ⊙ 개발 산출물별 검사 리스트 : 산출물들의 이상여부, 인수여부 체크후 받는 문서

    ⊙ 프로젝트 완료보고서 : 최종적으로 개발된 내용, 인도물, H/W, 고객사 대표, 개발자 대표의 확인이 들어간 문서

 

 

 

인터넷에 있는 단계별 수행 산출물 중에 현재 제 개인적인 생각으로 필수 사용하고 있는 항목을 별도로 표시 해봤습니다

 

개발 업무도 힘에 겨운데 이런 산출물까지 만들어야 하는 우리 현실이......

 

대한민국의 모든 개발자분들이 활짝 웃는 그날까지 열심히 할께요~

 

감사합니다

 

 

반응형

'코딩정보 > IT' 카테고리의 다른 글

[CMD] 배치파일 한글 깨짐 현상 해결 방법  (0) 2024.07.03
[네트워크] ARP 사용방법  (0) 2019.06.12
반응형

안녕하세요~

C# 프로그래밍을 연습 개발 하고 있는 코딩하는남자 입니다!!

 

이번에 연습해볼것은 QR코드 생성 인데요

왜 굳이 C#으로 QR코드를 생성해요? 라는 의구심이 드실거 같은데요

QR코드를 사용하여 활용할 곳이 생각보다 많다(?) 입니다ㅋㅋㅋ

굳이 예를 들면 인식이 필요한 프로그램 개발시

또는 자재관리, 재고관리, 재공관리, 물류관리, 편의점, 등

모든 물건을 다루는 곳에서 갯수, 금액 등을 관리하기 위한 인식코드로

많이 사용 할수 있을거 같네요

아 본문으로 돌아와서 C#에서 어떻게 문자열을 QR코드로 생성을 시키는지

보도록 하겠습니다

참고로 저도 인터넷 정보를 보고 연습을 하고 실전에 적용을 하는 입장이다 보니 검색을 통해 저보다 더 상세한 정보를 검색해 보실수 있으니 중복 검색은 필수 입니다

============================================

개발환경 : Visual Studio 2010 사용

QR코드 Generator DLL : 링크 참조

QR Code .NET Generator | Using free .NET sample to create QR Code barcodes

BizCode Generator for .NET Ultimate The most mature & flexible barcode SDK for Microsoft .NET Framework Quick Overviews Mature barcode creating SDK Support every .NET IDEs Support C#, VB.NET, etc. Dynamic barcodes support For all printers Overview QR Code More Barcode Tutorial C# Sample VB.NET S

www.businessrefinery.com

===============================================

준비가 되셨다면 차근 차근 이미지로 하나씩 따라 해볼까요?

 

1. QR코드 Generator DLL 다운로드 받기

: 링크를 통해 싸이트 접속 후 DOWNLOAD 버튼 클릭

어렵지 않아요

 

2. 비쥬얼 스튜디오에 참조 시키기

1) 다운로드 받은 파일 압축 풀기

※ 압축을 풀었을때 사진 입니다 처음에는 압축형식으로 되어 있어요~

 

 

2) 참조 DLL 찾기

압축을 풀면 다음과 같은 구조로 압축이 풀리게 되는데

저희가 사용할 DLL의 위치를 알려드릴께요~

천천히 그림파일을 참고해서 따라오세요~

 

 

3) 비쥬얼 스튜디오 DLL 참조 시키기

기본적인 비쥬얼 스튜디오에 DLL참조하는 방법은

아마 다들 아실꺼라고 생각하고 대충 넘어가겠습니다

절대 귀찮아서가 아닙니다!!

비쥬얼 스튜디오에 DLL을 첨부 완료되고 난 뒤에 화면 입니다

자 이제 거의 끝나가요~ 별거 없죠?ㅋ

이제 소스 코드로 넘어갈건데요

간단합니다 7줄이면 끝이에요~

참 쉬죠잉~ㅋㅋㅋ

 

 

4) 소스 작성하기

참조시킨 DLL 사용을 위해 참조선언을 먼저 작성해 주세요

사용하실려는 페이지의 제일 상단에 아래와 같이 using문을 작성해주시고요~

 

그다음 아래와 같이 QR코드를 생성할 소스 코드를 입력합니다

참고로 저는 이미지로 보이지 않고 Bitmap으로 전환하여 레포트 툴과 연동 시킬 예정입니다

만약 이미지로 만드실 경우 맨 아래 쪽 구문의 주석을 바꿔주시면 됩니다

QRCode barcode = new QRCode(); string url = pFIELD[22, 3]; barcode.Code = url; barcode.ModuleSize = 6.0f; barcode.Resolution = 300; //이미지로 저장 //barcode.drawBarcode2ImageFile("Temp.png"); //Bitmap으로 전환하여 사용 var barcodebitmap = (Bitmap)barcode.drawBarcodeOnBitmap();

이미지로 표시 할 경우는 위의 구문으로 처리가 완료가 되고 이벤트를 주셔서 사용하시면 Debug폴더 안에 이미지로 생성이 됩니다

 

참고로 저는 레포트툴과 연동을 하기 위해 하나의 구문이 더 필요한데

아래의 구문은 어떤 레포트툴을 사용하시는냐에 따라 달라지기 때문에 참고만 하시기 바랍니다

ARViewer21.Document.Pages[ThisPage].DrawImage(barcodebitmap, false, LSHIFT + ExTTI(1400), PTM + ExTTI(7430), ExTTI(500), ExTTI(420));

네 이상으로 C#을 이용해 QR코드 생성하는 예제였습니다!

글로 이해 안되실분들을 위해서 영상 제작을 해보았습니다

글과 영상을 통해 QR코드를 만들어 나만의 프로그램을 제작해보시는건 어떨까요?ㅎㅎ

이상 코딩하는남자 였습니다!!

반응형

+ Recent posts