用系統當下的語系自動選擇對應語系的資源檔
記錄如何在WPF中實作多語系的自動切換,廢話不多說直接上步驟(從我早先分享的文檔挖出來 XD)
1. 建立資源字典 ResourceDictionary
1.1. 在專案裡建立一個放字典檔的目錄,ex: Lang
1.2. 在這目錄下新增「資源字典(WPF)」的項目,檔名要依照CultureInfo規則命名,如:英文en-US.xaml / 繁中zh-TW.xaml / 簡中zh-CN.xaml
1.3. 要設定為預設語系要將該資源字典檔的屬性中「建置動作(BuildAction)」設定為Page
1.4. 在資源字典檔中新增字串標籤範例如下
<lang:String x:Key="OK">OK</lang:String>
字串標籤^^ ^^在此語系下顯示的文字
<lang:String x:Key="OK">確定</lang:String>
2. 登入資源字典
2.1. 在App.xaml增加資源字典的目錄與預設檔案,如下:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Lang\en-US.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
2.2. 在需要用到字典字串的.xaml檔案新增字典字串,範例如下:
<Button Content="{DynamicResource OK}" Click="btnOK_Click"/>
3. 啟動時載入本地語系
3.1. 若要自動偵測系統語系並載入對應資源字典,在App.xaml.cs中增加以下內容
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
LoadLanguage();
}
private void LoadLanguage()
{
CultureInfo currentCultureInfo = CultureInfo.CurrentCulture;
ResourceDictionary langRd = null;
try
{
langRd = Application.LoadComponent
(new Uri(@"Lang\" + currentCultureInfo.Name + ".xaml ", UriKind.Relative))
as ResourceDictionary;
}
catch
{
}
if (langRd != null)
{
if (this.Resources.MergedDictionaries.Count > 0)
{
this.Resources.MergedDictionaries.Clear();
}
this.Resources.MergedDictionaries.Add(langRd);
}
}
若要在code裡引用資源字典,有以下兩種引用方法
1. 靜態調用
lblTitle.Content = FindResource(“lblTitle”).ToString();
2. 動態調用
lblTitle.SetResourceReference(Label.ContentProperty, “lblTitle”);
參考: