데이터베이스에 있는 언어팩을 닷넷 리소스 파일로 변환할 수 있나요?

1 답변

0 투표

네, 가능합니다. 크게 다음 흐름으로 진행합니다:

  1. 데이터베이스에서 언어팩 조회
  2. .resx 파일 생성
  3. 리소스 작성 후 저장

아래는 C# 콘솔 애플리케이션 예제입니다.

using System;
using System.Data;
using System.Data.SqlClient;
using System.Resources;
using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace DbToResx
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1) DB 연결 정보
            var connectionString = "Server=.;Database=YourDb;User Id=sa;Password=YourPw;";

            // 2) 출력할 언어 목록과 대상 폴더 지정
            var cultures = new[] { "en", "ko", "jp" };
            var outputDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources");
            Directory.CreateDirectory(outputDir);

            using (var conn = new SqlConnection(connectionString))
            {
                conn.Open();

                foreach (var culture in cultures)
                {
                    // 3) 테이블에서 culture별 키·값 불러오기
                    using (var cmd = new SqlCommand(
                        @"SELECT MessageKey, MessageValue
                          FROM LanguagePack
                          WHERE Culture = @culture", conn))
                    {
                        cmd.Parameters.Add(new SqlParameter("@culture", culture));
                        using (var reader = cmd.ExecuteReader())
                        {
                            // 4) .resx 작성기 준비
                            var resxPath = Path.Combine(outputDir, $"Strings.{culture}.resx");
                            using (var resx = new ResXResourceWriter(resxPath))
                            {
                                // 5) 레코드 순회하며 추가
                                while (reader.Read())
                                {
                                    var key = reader.GetString(0);
                                    var value = reader.GetString(1);
                                    resx.AddResource(key, value);
                                }
                                resx.Generate();  // 파일에 기록
                            }
                            Console.WriteLine($"Generated: {resxPath}");
                        }
                    }
                }
            }

            Console.WriteLine("Done.");
        }
    }
}

상세 설명

  1. DB 조회

    • SqlConnection / SqlCommand 로 언어팩 테이블(LanguagePack)에서
      MessageKey·MessageValue·Culture 컬럼을 가져옵니다.
  2. ResXResourceWriter

    • System.Resources.ResXResourceWriter 클래스로 .resx 파일을 만듭니다.
    • AddResource(string name, object value)로 키·값을 등록한 뒤 Generate() 호출.
  3. 파일 네이밍

    • 일반적으로 .resxStrings.resx (기본),
      Strings.ko.resx, Strings.en.resx 식으로 문화권별로 분리합니다.
  4. 후처리

    • Visual Studio 프로젝트에 생성된 .resx 파일을 포함시키면, 빌드 시 .resources로 컴파일됩니다.
    • ResourceManager 또는 자동 생성된 Strings 클래스(.Designer.cs)로 런타임에 접근 가능.

추가 팁

  • Bulk Export: SQL Server Management Studio(SSMS)에서 쿼리 결과를 CSV로 뽑아두고, 간단한 스크립트(JSON→.resx)로 변환해도 됩니다.
  • ResX Manager 확장: VS용 ResXManager 툴을 쓰면, 여러 언어 .resx를 GUI에서 한꺼번에 편집·관리할 수 있습니다.

이 과정을 통해 데이터베이스에 있는 언어팩 데이터를 .NET 표준 리소스 파일(.resx)로 손쉽게 변환할 수 있습니다. 추가로 궁금하신 부분 있으면 알려주세요!

add
...