본문 바로가기
이미지 매크로

C# .NET Core 매크로 프로그램 만들기. (이미지 및 다국어 리소스 모듈 추가)

by 업무자동화 2024. 3. 5.
반응형

유료 매크로 프로그램 다운로드

http://ngmsoftware.com/bbs/board.php?bo_table=product_review 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#매크로 #메크로 #매크로프로그램 #스마트스토어 #슬롯 #조회수매크로 #인스타매크로 #인스타그램매크로 #유튜브매크로 #좋아요매크로 #마케팅매크로 #슬롯매크로 #오토핫키매크로 #파이썬매크로 #네이버카페매크로 #댓글매크로 #블로그매크로 #카카오톡매크로 #가리기매크로 #상품입력매크로 #쿠팡매크로 #쇼피매크로 #코인매크로 #주식매크로 #바이럴마케팅매크로 #추천구독매크로

 

  • 엔지엠 커뮤니티 월 이용료: 4,500원, 1년 이용료: 55,000원 (전체 기능의 80프로)
  • 엔지엠 얼티밋 월 이용료: 6,500원, 1년 이용료: 77,000원 (전체 기능의 90프로)
  • 엔지엠 엔터프라이즈 월 이용료: 9,200원, 1년 이용료: 110,000원 (전체 기능 사용)

 

안녕하세요. 엔지엠소프트웨어입니다. 이전 시간에 .NET Core 프레임워크를 이용해서 윈도우 폼 GUI를 만들었습니다. 오늘은 다국어를 처리할 수 있는 리소스 매니저 모듈을 만들거예요. 윈도우 응용 프로그램이나 웹 응용프로그램이 유사한 방식을 사용합니다. 다만, 구현하는 방법이 약간(?) 다릅니다. 다국어를 지원하는 응용프로그램을 만드는건 많은 노력과 시간이 필요합니다. 물론, 프로그램의 규모가 클수록 비례하는 부분이죠^^

 

비주얼 스튜디오에서 프로젝트를 열고, 새로운 프로젝트를 추가하세요. 프로젝트명은 Fw.Client.ResourceManager입니다. 기존에 만들었던 NGM 6 매크로 프로그램은 솔루션 전체에 하나의 리소스만 사용했습니다. 방대한 내용 때문인지 점점 느려지는 느낌을 받아서, 이번에는 클라이언트와 시스템으로 나눠서 만들 예정입니다. 다음에 매크로 엔진을 만들 때 시스템용 리소스 매니저를 하나 더 추가할께요.

 

 

리소스 매니저의 구조는 아래와 같습니다. 기존에 NGM 6에는 더 많은 클래스가 있었는데요. 라이브러리의 용도와 달라서 리소스 관련된 것들만 제외하고 모두 삭제 했습니다. Caption, Description, Image 폴더를 각각 만들고, 맵핑용 클래스도 추가해줍니다. 그리고, 전체적으로 리소스를 관리할 매니저도 추가하세요.

 

 

매니저는 리소스로부터 인스턴스화 하는 기능을 담당합니다.

    public class Manager
    {
        private static System.Resources.ResourceManager _resxCaption = new System.Resources.ResourceManager("GlobalResource.Caption.Globalization", typeof(Manager).Assembly);
        private static System.Resources.ResourceManager _resxDescription = new System.Resources.ResourceManager("GlobalResource.Description.Globalization", typeof(Manager).Assembly);
        private static System.Resources.ResourceManager _resxImage = new System.Resources.ResourceManager("GlobalResource.Image.Globalization", typeof(Manager).Assembly);

        public static System.Resources.ResourceManager Caption { get { return _resxCaption; } }

        public static System.Resources.ResourceManager Description { get { return _resxDescription; } }

        public static System.Resources.ResourceManager Image { get { return _resxImage; } }
    }

 

각각의 리소스들은 싱글톤(Singletone) 디자인이 적용되어 있습니다. 한번 생성된 인스턴스가 다시 생성되지 않도록 하기 위함입니다. 싱글톤을 적용할 때 몇가지 주의할점이 있습니다. 멀티 스레딩 환경에서 동시에 접근하는 경우인데요. 이런 경우를 대비하기 위해서 추가적인 설정이 필요하지만, 우리는 에디터 또는 플레이어가 실행될 때 한번 초기화하면 되기 때문에 스레딩까지 신경쓰지 않아도 됩니다.

    /// <summary>
    /// 제목을 표시하는 모든 리소스를 관리하는 매니저입니다.
    /// </summary>
    public class CaptionResource
    {
        private static System.Resources.ResourceManager? _resxManager = null;

        /// <summary>
        /// 중앙에서 관리되는 리소스 매니저 인스턴스를 가져옵니다.
        /// </summary>
        public static System.Resources.ResourceManager Instance
        {
            get
            {
                if (_resxManager == null)
                {
                    _resxManager = new System.Resources.ResourceManager("Fw.Client.ResourceManager.Caption.Globalization", typeof(CaptionResource).Assembly);
                }
                return _resxManager;
            }
        }
    }

 

위 내용을 참고해서 Image와 Description도 코딩해보세요. 이제 에디터 프로젝트에서 리소스 매니저를 참조 추가하세요.

 

 

MainView의 읽기 전용 속성을 3개 추가 해줍니다. 리소스들도 관리할 수 있는 클래스를 하나 만들고 싶지만... 많아봐야 5~6개정도 될거 같아서 이건 건너뛰도록 할께요.

    public partial class MainView : KryptonForm
    {
        public System.Resources.ResourceManager ResxDescription { get; }

        public System.Resources.ResourceManager ResxCaption { get; }

        public System.Resources.ResourceManager ResxImage { get; }

 

.NET Framework에서는 속성에 ReadOnly 특성을 달아주거나 한정자를 추가하면 되는데요. .NET Core는 복잡도를 줄이기 위해 속성에 set을 사용하지 않으면 자동으로 읽기 전용으로 작동합니다. 참고로, ReadOnly와 Constant는 동작 방식이 다릅니다. 상수로 설정하면 속성을 초기화할 수 없기 때문에 읽기 전용으로 만들었습니다. 그리고, 접근 제한을 위해 생성자에서 1번만 초기화해야 합니다.

        public MainView()
        {
            InitializeComponent();

            this.ResxDescription = Fw.Client.ResourceManager.DescriptionResources.Instance;
            this.ResxCaption = Fw.Client.ResourceManager.CaptionResource.Instance;
            this.ResxImage = Fw.Client.ResourceManager.ImageResource.Instance;
        }

 

위에서 깜밖하고 설명하지 않은 내용이 있었네요. 아래 그림과 같이 리소스 매니저의 각각의 폴더에 지원할 다국어만큼 리소스 파일을 추가해야 합니다. 아래 그림을 참고해서 네이밍룰을 지켜야 합니다. 저는 영어와 한국어 2개만 일단 추가 해두었습니다. 엔지엠 6에서는 중국어까지 포함되어 있는데요. 이번엔... 중국어는 빼야 할거 같습니다. 나중에 필요할 때 추가하면 되니까요^^

 

 

이제 마지막까지 왔네요. 리소스를 사용하려면 아래와 같이 GetString 메소드로 리소스 키를 가져오면 내용이 자동으로 바인딩됩니다.

            DockManager.AttachDocks(kryptonDockingManager, new Model.Editor.PageModel[] 
            { 
                new Model.Editor.PageModel 
                {
                    Name = Ai.Dock.Tool,
                    View = new Docks.ToolDock(),
                    Text = this.ResxCaption.GetString(Ai.Dock.Tool),
                    Title = this.ResxCaption.GetString(Ai.Dock.Tool),
                    Description = this.ResxCaption.GetString($"{Ai.Dock.Tool}{Ai.Definition.Description}")
                },
                new Model.Editor.PageModel
                {
                    Name = Ai.Dock.Function,
                    View = new Docks.FunctionDock(),
                    Text = this.ResxCaption.GetString(Ai.Dock.Function),
                    Title = this.ResxCaption.GetString(Ai.Dock.Function),
                    Description = this.ResxCaption.GetString($"{Ai.Dock.Function}{Ai.Definition.Description}")
                }
            });

 

핵심 코드는 아래 한줄입니다.

Text = this.ResxCaption.GetString(Ai.Dock.Tool),

 

캡션 리소스에는 아래와 같이 들어 있습니다.

 

 

아직 다국어를 변경하고 적용하는 기능은 구현하지 않았습니다. 따라서, 한국어와 영어를 번갈아가면서 확인할수는 없는데요. 이 부분은 나중에 구현하기로 하고, 일단은 시스템 컬쳐를 따라가기 때문에 기본적으로 한국어가 적용되어야 합니다. 잘 되는지 확인 해볼까요?

 

 

도구 상자와 함수 상자 그리고, 속성이 한글로 잘 표시되고 있네요. 영어로도 잘 나오는지 확인하기 위해 아래와 같이 컬쳐를 변경 해보세요.

        private void MainView_Load(object sender, EventArgs e)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");

 

다시 실행해보면 영어로 잘 나옵니다.

 

 

다음 시간에는 리본 컨트롤에 다국어 설정을 추가하고, 정상적으로 동작하는지 테스트 해볼께요~

 

[ 각종 자동화 매크로 및 RPA 프로그램 제작 해드립니다. ]

[ 초보자도 쉽게 따라할 수 있는 기초 학습 강좌 보기 ]

 

원본 글 보기

http://ngmsoftware.com/bbs/board.php?bo_table=tip_and_tech 

 

엔지엠소프트웨어

엔지엠 매크로는 복잡한 반복작업을 자동화할 수 있습니다. PC 게임, 모바일 게임을 최적으로 지원하며 모든 PC 프로그램 및 업무에 적용할 수 있습니다.

www.ngmsoftware.com

#비활성매크로 #g102매크로 #철권매크로 #레이저마우스매크로 #ghub매크로 #녹화매크로 #키보드반복매크로 #로지텍마우스광클매크로 #플라스크매크로 #윈도우매크로 #비활성g매크로 #오토매크로 #자동사냥 #주식매크로 #오토핫키키보드 #오토핫키마우스 #오토핫키이미지 #지존오토 #기계식매크로 #하드웨어매크로 #무한반복매크로 #대량이메일발송매크로 #엑셀VBA매크로 #주식모니터링매크로 #이미지맥스 #심플핫키 #오토클리커 #UiPath #Brity #스푸퍼 #DKOM #모바일게임매크로 #다클라매크로 #다계정매크로 #인스타그램매크로 #짜맥매크로 #챗굴매크로

반응형

댓글