翼度科技»论坛 编程开发 .net 查看内容

WPF多语言支持:简单灵活的动态切换,让你的程序支持多国语言

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
 
概述:本示例演示了在WPF应用程序中实现多语言支持的详细步骤。通过资源字典和数据绑定,以及使用语言管理器类,应用程序能够在运行时动态切换语言。这种方法使得多语言支持更加灵活,便于维护,同时提供清晰的代码结构。
在WPF中实现多语言的一种常见方法是使用资源字典和数据绑定。以下是一个详细的步骤和示例源代码,演示如何在WPF应用程序中实现动态切换语言。文末提供代码下载。
先看效果:
 
步骤 1: 准备资源文件
首先,为每种语言创建一个资源文件。资源文件的命名约定为Resources.{语言代码}.xaml。例如,Resources.en-US.xaml表示英语(美国)的资源文件。
在每个资源文件中,添加键值对(本例的前缀为窗体名称,是为了避免不同窗体有相同命名的问题),表示不同控件或文本的本地化字符串。例如:
  1. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  2.                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=netstandard">
  3.     <system:String x:Key="MainWindow_name">Name</system:String>
  4.     <system:String x:Key="MainWindow_age">Age</system:String>
  5.     <system:String x:Key="MainWindow_Language">简体中文</system:String>
  6. </ResourceDictionary>
  7. <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  8.                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=netstandard">
  9.     <system:String x:Key="MainWindow_name" >姓名</system:String>
  10.     <system:String x:Key="MainWindow_age">年龄</system:String>
  11.     <system:String x:Key="MainWindow_Language">English</system:String>
  12. </ResourceDictionary>
复制代码
步骤 2: 创建语言管理器类
创建一个语言管理器类,用于切换当前应用程序的语言。这个类可能包含一个属性,表示当前的CultureInfo,以及一个方法来切换语言。
  1. using System;
  2. using System.Globalization;
  3. using System.Windows;
  4. public static class LanguageManager
  5. {
  6.     private static ResourceDictionary currentLanguage;
  7.     public static ResourceDictionary CurrentLanguage
  8.     {
  9.         get { return currentLanguage; }
  10.         set
  11.         {
  12.             if (currentLanguage != value)
  13.             {
  14.                 currentLanguage = value;
  15.                 UpdateLanguage();
  16.             }
  17.         }
  18.     }
  19.     private static void UpdateLanguage()
  20.     {
  21.         if (Application.Current.Resources.MergedDictionaries.Contains(currentLanguage))
  22.         {
  23.             Application.Current.Resources.MergedDictionaries.Remove(currentLanguage);
  24.             Application.Current.Resources.MergedDictionaries.Add(currentLanguage);
  25.         }
  26.         else
  27.         {
  28.             Application.Current.Resources.MergedDictionaries.Add(currentLanguage);
  29.         }
  30.     }
  31. }
复制代码
步骤 3: 在WPF应用程序中使用资源字典和数据绑定
在XAML文件中,使用Binding来绑定控件的内容或文本到资源字典中的相应键。例如:
  1. <Window x:
  2.         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5.         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6.         xmlns:local="clr-namespace:Sample_LanguageManager"
  7.         mc:Ignorable="d"
  8.         Title="MainWindow" Height="450" Width="800">
  9.     <Grid>
  10.         <Grid.Background>
  11.             <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
  12.                 <LinearGradientBrush.GradientStops>
  13.                     <GradientStop Color="#FF9DC5FD" Offset="0" />
  14.                     <GradientStop Color="#FF4242CF" Offset="1" />
  15.                 </LinearGradientBrush.GradientStops>
  16.             </LinearGradientBrush>
  17.         </Grid.Background>
  18.         <Grid.RowDefinitions>
  19.             <RowDefinition Height="90"/>
  20.             <RowDefinition Height="60"/>
  21.             <RowDefinition Height="60"/>
  22.         </Grid.RowDefinitions>
  23.         <Label Grid.Row="0"  Content="{DynamicResource MainWindow_name}" d:Content="姓名" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Foreground="White" />
  24.         <Label Grid.Row="1" Content="{DynamicResource MainWindow_age}" d:Content="年龄" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Foreground="White" />
  25.         <Button Grid.Row="2" Content="{DynamicResource MainWindow_Language}" d:Content="切换语言" Click="SwitchToFrench_Click" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="22"/>
  26.     </Grid>
  27. </Window>
复制代码
步骤 4: 在应用程序启动时设置语言
在应用程序启动时,设置LanguageManager的CurrentLanguage属性以选择初始语言。这可以在App.xaml.cs中的OnStartup方法中完成。
  1. public partial class App : Application
  2. {
  3.     protected override void OnStartup(StartupEventArgs e)
  4.     {
  5.         // 设置初始语言,例如英语
  6.         LanguageManager.CurrentLanguage = new ResourceDictionary { Source = new Uri("Resources.en-US.xaml", UriKind.Relative) };
  7.         // 其他启动逻辑...
  8.         base.OnStartup(e);
  9.     }
  10. }
复制代码
步骤 5: 实现语言切换
你可以在应用程序中的某个地方提供用户切换语言的选项。在语言切换事件中,更新LanguageManager的CurrentLanguage属性(因为是个简单的例子,所以只提供中英文切换,实际可提供更多语言字典来切换)。
  1.         private void SwitchToFrench_Click(object sender, RoutedEventArgs e)
  2.         {
  3.             if (LanguageManager.CurrentLanguage.Source.OriginalString.Contains("en-US"))
  4.             {
  5.                 LanguageManager.CurrentLanguage = new ResourceDictionary { Source = new Uri("Resources.zh-Hans.xaml", UriKind.Relative) };
  6.             }
  7.             else
  8.             {
  9.                 LanguageManager.CurrentLanguage = new ResourceDictionary { Source = new Uri("Resources.en-US.xaml", UriKind.Relative) };
  10.             }
  11.         }
复制代码
通过以上步骤,你的WPF应用程序就能够支持多语言,并且可以在运行时动态切换语言。这种方法具有灵活性,方便维护和管理多语言应用程序。
源代码获取:https://pan.baidu.com/s/1JBbd6F7vHMZ4bIL8nhzBEA?pwd=6666 
 



来源:https://www.cnblogs.com/hanbing81868164/p/18166976
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具