[WPF] 지역화 (다중 언어)
본 예제는 resource에 국가별 언어를 미리 등록해두고
설정(Language Culture)에 따라 표출되는 언어가 변경되도록 하는 예제입니다.
Git - https://github.com/jeseok-Mun/WPF_Example_MultiLanguage
참고 | |
PC 언어 코드 | System.Globalization.CultureInfo.CurrentCulture |
국가별 언어 코드(Language Culture)
Code | Name |
af | Afrikaans |
af-ZA | Afrikaans (South Africa) |
ar | Arabic |
ar-AE | Arabic (U.A.E.) |
ar-BH | Arabic (Bahrain) |
ar-DZ | Arabic (Algeria) |
ar-EG | Arabic (Egypt) |
ar-IQ | Arabic (Iraq) |
ar-JO | Arabic (Jordan) |
ar-KW | Arabic (Kuwait) |
ar-LB | Arabic (Lebanon) |
ar-LY | Arabic (Libya) |
ar-MA | Arabic (Morocco) |
ar-OM | Arabic (Oman) |
ar-QA | Arabic (Qatar) |
ar-SA | Arabic (Saudi Arabia) |
ar-SY | Arabic (Syria) |
ar-TN | Arabic (Tunisia) |
ar-YE | Arabic (Yemen) |
az | Azeri (Latin) |
az-AZ | Azeri (Latin) (Azerbaijan) |
az-AZ | Azeri (Cyrillic) (Azerbaijan) |
be | Belarusian |
be-BY | Belarusian (Belarus) |
bg | Bulgarian |
bg-BG | Bulgarian (Bulgaria) |
bs-BA | Bosnian (Bosnia and Herzegovina) |
ca | Catalan |
ca-ES | Catalan (Spain) |
cs | Czech |
cs-CZ | Czech (Czech Republic) |
cy | Welsh |
cy-GB | Welsh (United Kingdom) |
da | Danish |
da-DK | Danish (Denmark) |
de | German |
de-AT | German (Austria) |
de-CH | German (Switzerland) |
de-DE | German (Germany) |
de-LI | German (Liechtenstein) |
de-LU | German (Luxembourg) |
dv | Divehi |
dv-MV | Divehi (Maldives) |
el | Greek |
el-GR | Greek (Greece) |
en | English |
en-AU | English (Australia) |
en-BZ | English (Belize) |
en-CA | English (Canada) |
en-CB | English (Caribbean) |
en-GB | English (United Kingdom) |
en-IE | English (Ireland) |
en-JM | English (Jamaica) |
en-NZ | English (New Zealand) |
en-PH | English (Republic of the Philippines) |
en-TT | English (Trinidad and Tobago) |
en-US | English (United States) |
en-ZA | English (South Africa) |
en-ZW | English (Zimbabwe) |
eo | Esperanto |
es | Spanish |
es-AR | Spanish (Argentina) |
es-BO | Spanish (Bolivia) |
es-CL | Spanish (Chile) |
es-CO | Spanish (Colombia) |
es-CR | Spanish (Costa Rica) |
es-DO | Spanish (Dominican Republic) |
es-EC | Spanish (Ecuador) |
es-ES | Spanish (Castilian) |
es-ES | Spanish (Spain) |
es-GT | Spanish (Guatemala) |
es-HN | Spanish (Honduras) |
es-MX | Spanish (Mexico) |
es-NI | Spanish (Nicaragua) |
es-PA | Spanish (Panama) |
es-PE | Spanish (Peru) |
es-PR | Spanish (Puerto Rico) |
es-PY | Spanish (Paraguay) |
es-SV | Spanish (El Salvador) |
es-UY | Spanish (Uruguay) |
es-VE | Spanish (Venezuela) |
et | Estonian |
et-EE | Estonian (Estonia) |
eu | Basque |
eu-ES | Basque (Spain) |
fa | Farsi |
fa-IR | Farsi (Iran) |
fi | Finnish |
fi-FI | Finnish (Finland) |
fo | Faroese |
fo-FO | Faroese (Faroe Islands) |
fr | French |
fr-BE | French (Belgium) |
fr-CA | French (Canada) |
fr-CH | French (Switzerland) |
fr-FR | French (France) |
fr-LU | French (Luxembourg) |
fr-MC | French (Principality of Monaco) |
gl | Galician |
gl-ES | Galician (Spain) |
gu | Gujarati |
gu-IN | Gujarati (India) |
he | Hebrew |
he-IL | Hebrew (Israel) |
hi | Hindi |
hi-IN | Hindi (India) |
hr | Croatian |
hr-BA | Croatian (Bosnia and Herzegovina) |
hr-HR | Croatian (Croatia) |
hu | Hungarian |
hu-HU | Hungarian (Hungary) |
hy | Armenian |
hy-AM | Armenian (Armenia) |
id | Indonesian |
id-ID | Indonesian (Indonesia) |
is | Icelandic |
is-IS | Icelandic (Iceland) |
it | Italian |
it-CH | Italian (Switzerland) |
it-IT | Italian (Italy) |
ja | Japanese |
ja-JP | Japanese (Japan) |
ka | Georgian |
ka-GE | Georgian (Georgia) |
kk | Kazakh |
kk-KZ | Kazakh (Kazakhstan) |
kn | Kannada |
kn-IN | Kannada (India) |
ko | Korean |
ko-KR | Korean (Korea) |
kok | Konkani |
kok-IN | Konkani (India) |
ky | Kyrgyz |
ky-KG | Kyrgyz (Kyrgyzstan) |
lt | Lithuanian |
lt-LT | Lithuanian (Lithuania) |
lv | Latvian |
lv-LV | Latvian (Latvia) |
mi | Maori |
mi-NZ | Maori (New Zealand) |
mk | FYRO Macedonian |
mk-MK | FYRO Macedonian (Former Yugoslav Republic of Macedonia) |
mn | Mongolian |
mn-MN | Mongolian (Mongolia) |
mr | Marathi |
mr-IN | Marathi (India) |
ms | Malay |
ms-BN | Malay (Brunei Darussalam) |
ms-MY | Malay (Malaysia) |
mt | Maltese |
mt-MT | Maltese (Malta) |
nb | Norwegian (Bokm?l) |
nb-NO | Norwegian (Bokm?l) (Norway) |
nl | Dutch |
nl-BE | Dutch (Belgium) |
nl-NL | Dutch (Netherlands) |
nn-NO | Norwegian (Nynorsk) (Norway) |
ns | Northern Sotho |
ns-ZA | Northern Sotho (South Africa) |
pa | Punjabi |
pa-IN | Punjabi (India) |
pl | Polish |
pl-PL | Polish (Poland) |
ps | Pashto |
ps-AR | Pashto (Afghanistan) |
pt | Portuguese |
pt-BR | Portuguese (Brazil) |
pt-PT | Portuguese (Portugal) |
qu | Quechua |
qu-BO | Quechua (Bolivia) |
qu-EC | Quechua (Ecuador) |
qu-PE | Quechua (Peru) |
ro | Romanian |
ro-RO | Romanian (Romania) |
ru | Russian |
ru-RU | Russian (Russia) |
sa | Sanskrit |
sa-IN | Sanskrit (India) |
se | Sami (Northern) |
se-FI | Sami (Northern) (Finland) |
se-FI | Sami (Skolt) (Finland) |
se-FI | Sami (Inari) (Finland) |
se-NO | Sami (Northern) (Norway) |
se-NO | Sami (Lule) (Norway) |
se-NO | Sami (Southern) (Norway) |
se-SE | Sami (Northern) (Sweden) |
se-SE | Sami (Lule) (Sweden) |
se-SE | Sami (Southern) (Sweden) |
sk | Slovak |
sk-SK | Slovak (Slovakia) |
sl | Slovenian |
sl-SI | Slovenian (Slovenia) |
sq | Albanian |
sq-AL | Albanian (Albania) |
sr-BA | Serbian (Latin) (Bosnia and Herzegovina) |
sr-BA | Serbian (Cyrillic) (Bosnia and Herzegovina) |
sr-SP | Serbian (Latin) (Serbia and Montenegro) |
sr-SP | Serbian (Cyrillic) (Serbia and Montenegro) |
sv | Swedish |
sv-FI | Swedish (Finland) |
sv-SE | Swedish (Sweden) |
sw | Swahili |
sw-KE | Swahili (Kenya) |
syr | Syriac |
syr-SY | Syriac (Syria) |
ta | Tamil |
ta-IN | Tamil (India) |
te | Telugu |
te-IN | Telugu (India) |
th | Thai |
th-TH | Thai (Thailand) |
tl | Tagalog |
tl-PH | Tagalog (Philippines) |
tn | Tswana |
tn-ZA | Tswana (South Africa) |
tr | Turkish |
tr-TR | Turkish (Turkey) |
tt | Tatar |
tt-RU | Tatar (Russia) |
ts | Tsonga |
uk | Ukrainian |
uk-UA | Ukrainian (Ukraine) |
ur | Urdu |
ur-PK | Urdu (Islamic Republic of Pakistan) |
uz | Uzbek (Latin) |
uz-UZ | Uzbek (Latin) (Uzbekistan) |
uz-UZ | Uzbek (Cyrillic) (Uzbekistan) |
vi | Vietnamese |
vi-VN | Vietnamese (Viet Nam) |
xh | Xhosa |
xh-ZA | Xhosa (South Africa) |
zh | Chinese |
zh-CN | Chinese (S) |
zh-HK | Chinese (Hong Kong) |
zh-MO | Chinese (Macau) |
zh-SG | Chinese (Singapore) |
zh-TW | Chinese (T) |
zu | Zulu |
zu-ZA | Zulu (South Africa) |
우선 프로젝트에 "Localization"폴더를 생성하고 생성된 폴더에 리소스 "res.resx"파일을 추가합니다.
생성된 "res.resx"파일은 기본이 되는 파일로 기본값인 "en-US"라고 생각하시면 됩니다.
"res.resx"파일을 열어 액세스 한정자를 public으로 변경하고 영문 콘텐츠를 입력합니다.
이제 "Localization"폴더에 "res.ko-KR.resx"를 추가하고 액세스 한정자를 public으로 변경하고
콘텐츠를 입력합니다.
값 확인을 위해 "MainWindow.xaml"에 출력을 합시다.
우선 데이터 참조를 위해 Localization을 참조합니다.
xmlns:localization="clr-namespace:WPF_Multi_Language_Sample.Localization"
<Window x:Class="WPF_Multi_Language_Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:localization="clr-namespace:WPF_Multi_Language_Sample.Localization"
mc:Ignorable="d"
Title="MainWindow"
Height="450" Width="800">
<Grid>
<TextBox Text="{x:Static localization:res.apple}"/>
</Grid>
</Window>
여기까지만 설정한다면 PC 국가 설정에 따라 자동으로 언어가 변경됩니다.
언어 선택 및 변경하려면 아래 예제 참고.
국가 코드를 선택하면 프로그램이 다시 시작되며 선택한 언어로 재구성되는 예제
선택한 언어 코드가 저장될 공간 생성 ( 프로젝트 속성 - 설정 )
언어 코드가 선택가능한 UI 구성 ( MainWindow.xaml )
<Window x:Class="WPF_Multi_Language_Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:localization="clr-namespace:WPF_Multi_Language_Sample.Localization"
mc:Ignorable="d"
Title="MainWindow"
Height="450" Width="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="30"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<TextBox Text="{x:Static localization:res.apple}"/>
<ComboBox x:Name="cbLanguage"
Grid.Row="1"
SelectionChanged="cbLanguage_SelectionChanged">
<sys:String>ko_KR</sys:String>
<sys:String>en_US</sys:String>
</ComboBox>
</Grid>
</Window>
코드 ( MainWindow.xaml.cs )
using System.Windows;
namespace WPF_Multi_Language_Sample
{
/// <summary>
/// MainWindow.xaml에 대한 상호 작용 논리
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
//저장된 정보로 세팅 (저장된 값이 없으면 PC국가 설정값을 기본으로 함)
Localization.res.Culture = Properties.Settings.Default.language != string.Empty ?
new System.Globalization.CultureInfo(Properties.Settings.Default.language) : System.Globalization.CultureInfo.CurrentCulture;
InitializeComponent();
}
private void cbLanguage_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
//선택 정보 불러오기
string selected = (string)((System.Windows.Controls.ComboBox)sender).SelectedItem;
//선택 정보 저장하기
Properties.Settings.Default.language = selected;
Properties.Settings.Default.Save();
//새 프로그램 실행
System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
//현재 프로그램 종료
Application.Current.Shutdown();
}
}
}