본 자료는
1. 간편한 다국어 변경에 대한 개요
2. 언어 변경을 위한 Resource 생성
3. 생성한 Resource에서 언어를 가져오기 위한 클래스 사용 방법
4. 예시 코드
순서로 진행합니다.
여러 개의 국가 언어를 UI에 표시하고자 하는 경우 모든 다국어를 Code로 설정하는 것은 매우 복잡하고 긴 코드 작업이 필요합니다.
복잡하고 긴 코드 작업을 최소화하기 위해서 사용하고자 하는 Text에 대한 국가별 언어를 Resource로 생성하여 필요에 따라서 언어를
한번에 변경할 수 있도록 하기 위한 내용입니다.
아래의 내용들을 확인하여 Resource 생성 방법부터 Code를 통해 Resource에 생성한 언어를 가져오는 방법까지 확인하여 실사용에 적용해보시기 바랍니다.
이 자료에서 설명하고자 하는 언어 변경 방법은 다국어를 사용하여 설정될 Text들을 미리 Resource 파일에 저장해두고 필요에 따라서 저장된 Text를 읽어와서 출력하는 방식입니다. 그렇기 때문에 Resource를 생성할 때 사용할 언어별 Resource 파일이 필요합니다. 자세한 Resource 생성 방법은 아래의 STEP을 참고해주시기 바랍니다.
- [STEP-1] 솔루션 탐색기(Solution Explorer)에서 [Project 우클릭] - [Add] - [New Folder]를 클릭하여 폴더 생성
복수개의 다국어 Resource를 편리하게 관리하기 위해서 폴더를 생성해줍니다. 해당 설명에서는 예시로 Language라는 이름으로 폴더를 생성하였습니다.
- [STEP-2] 생성한 폴더에 우클릭 후 [Add] - [New Item] - [Resources File]을 선택하여 Resource 파일을 생성합니다.
Resource 파일의 경우 이름에 해당 다국어 정보를 입력하는 것이 관리하기에 편리합니다. 해당 설명에서는 예시로 Resource_Ko(한글), Reosurce_EN(영어)로 생성하였습니다.
- [STEP-3] 생성한 Resource 파일을 열어보면 좌측 상단에 Resource Type이 Strings로 되어 있는지 확인한 뒤 Name과 Value에 사용할 Text와 그에 따른 제목을 작성합니다.
위 이미지를 보면 "안녕하세요"라는 Text를 사용하는 UI의 경우 Form1에 있는 SmartLabel1이기 때문에 Name을 "Form1_SmartLabe1"로 설정하였고 “감사합니다”라는 Text를 사용하는 UI의 경우 Form2에 있는 SmartLabel2이기 때문에 Name을 "Form2_SmartLabel2"로 설정하였습니다. 이와 같이 예시에서는 어떤 UI에 사용되는 Text인지에 따라서 Name을 설정했지만 자유롭게 Name을 설정해도 괜찮습니다. 다만 Value에 대한 언어별 리소스의 Name값은 반드시 동일해야 합니다. 예를 들어 "안녕하세요"의 영어버전인 "Hello"의 경우 Name 값이 "Form1_SmartLabel1"로 동일한 것을 확인해 보실 수 있습니다.
STEP-1 ~ 3까지의 방법을 통해서 Resource를 생성하는 방법에 대해서 확인해봤습니다. 위 예시에서는 한글과 영어만 사용하는 예시로 두개의 Resource만 만들었지만 사용해야 할 다국어 개수에 맞게 Resource를 생성하여 관리하시기 바랍니다.
3. 생성한 Resource에서 언어를 가져오기 위한 클래스 사용 방법언어별 Resource 파일 생성이 완료되었다면 생성한 Resource 파일을 사용해서 원하는 국가별 언어를 적용하는 방법에 대해서 설명 드리겠습니다.
// 다국어 사용을 위한 Resource 언어 변환 클래스
public class SmartStringResource
{
private static System.Resources.ResourceManager g_SelectResourceManager;
public static void SelectResource(System.Resources.ResourceManager selResource)
{
// 생성한 언어 Resource에 대한 접근을 위해 선택한 Resource의 ResourceManager를 등록
g_SelectResourceManager = selResource;
}
public static string GetString(string strName)
{
// 선택한 Resource 중 strName으로 설정되어 있는 Name의 Value값을 가져오기
return g_SelectResourceManager.GetString(strName);
}
}
인터페이스명 | SelectResource(System.Resources.ResourceManager selResource) |
---|---|
설명 |
변경할 다국어 Resource를 선택합니다. [인자] System.Resources.ResourceManager selResource : 선택한 언어 Resource의 ResourceManager |
사용 방법 [예시 코드] |
// UI의 Text를 영어로 변경하기 위한 Resource 선택 SmartStringResource.SelectResource(Change_Language.Language.Resource_EN.ResourceManager); // 선택한 Resource의 언어로 변경하기 위한 UI Update UILanguageChange(); |
인터페이스명 | GetString(string strName) |
---|---|
설명 |
선택한 다국어 Resource에서 strName과 동일한 Name의 Value값을 가져옵니다. [인자] string strName : Resource에서 가져올 Text에 대한 Name값 |
사용 방법 [예시 코드] |
private void UILanguageChange() { // Resource에 Form1_SmartLabe1이라는 Name을 가지고 있는 Text(Value)를 SmartLabel1의 Text로 설정합니다. smartLabel1.Text = SmartStringResource.GetString("Form1_smartLabel1"); smartLabel2.Text = SmartStringResource.GetString("Form2_smartLabel2"); } |
-
한글 -
영어