首页 > 其他分享 >WPF实现语言切换

WPF实现语言切换

时间:2023-10-08 16:34:51浏览次数:35  
标签:语言 res App System 切换 key using WPF public

本示例实现的是中英文语言切换。

开发环境:VS2022、WIN10

 

一、新建中英文两个key-value对照文件。

 

二、添加到App.xaml文件。

 

三、在App.xaml代码文件中创建切换语言和根据key获取value值的方法。

using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Windows;

namespace LangSwitch
{
    /// <summary>
    /// App.xaml 的交互逻辑
    /// </summary>
    public partial class App : Application
    {
        public static ResourceDictionary resourceDictionary;

        public App()
        {

        }

        //更换语言
        public static bool UpdateLanguage(string lan)
        {
            bool res = false;

            // 获取配置
            string requestedLanguage = $"{lan}.xaml";
            resourceDictionary = Application.Current.Resources.MergedDictionaries.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedLanguage));

            if (resourceDictionary != null)
            {
                Current.Resources.MergedDictionaries.Remove(resourceDictionary);
                Current.Resources.MergedDictionaries.Add(resourceDictionary);

                // 保存配置
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                ConfigurationManager.AppSettings["Language"] = lan;
                config.Save(ConfigurationSaveMode.Modified);
                //刷新
                ConfigurationManager.RefreshSection("appSettings");

                res = true;
            }

            return res;
        }

        public static string GetText(string key)
        {
            string res = string.Empty;

            if (resourceDictionary != null)
            {
                var dictionary = resourceDictionary.Cast<DictionaryEntry>();
                var item = dictionary.FirstOrDefault(r => r.Key.ToString() == key);
                if (item.Value != null)
                {
                    res = item.Value.ToString();
                }
                else
                {
                    res = "key搞错了";
                }
            }

            return res;
        }

        
    }
}

 

四、为中英文key-value对照文件添加一些数据。

 

 

五、在主界面MainWindow.xaml添加语言切换的应用。

<Window x:Class="LangSwitch.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:local="clr-namespace:LangSwitch"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
    <Grid>
        <StackPanel Orientation="Vertical">
            <Button Height="25" Content="{DynamicResource 确定}" Click="Button_OkClick"></Button>
            <Button Height="25" Content="{DynamicResource 取消}" Click="Button_CancelClick"></Button>
            <ComboBox Height="25" Name="LangList" SelectionChanged="LangList_SelectionChanged"></ComboBox>
        </StackPanel>
    </Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;

namespace LangSwitch
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var langList = new List<string>();
            langList.Add("中文");
            langList.Add("English");
            LangList.ItemsSource = langList;
            LangList.SelectedIndex = 0;

        }

        private void LangList_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (LangList.SelectedItem != null)
            {
                if (LangList.SelectedItem.ToString() == "中文")
                {
                    App.UpdateLanguage("Lang-zh-cn");
                }
                else
                {
                    App.UpdateLanguage("Lang-en-us");
                }

            }
        }

        private void Button_OkClick(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(App.GetText("你点了确定按钮"));
        }

        private void Button_CancelClick(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(App.GetText("你点了取消按钮"));
        }
    }
}

 

到这里,WPF实现中英文切换的功能就完成了!如果需要添加其他国家语言也是同理的,添加一个key-value对照文件即可。

 

标签:语言,res,App,System,切换,key,using,WPF,public
From: https://www.cnblogs.com/resplendent/p/17749520.html

相关文章

  • 《社会工程 卷2:解读肢体语言》高清高质量电子书PDF
    “本书结合了我多年来在人以及人际互动领域的工作成果、前美国特勤局专家保罗•凯利在安全领域的丰富经验和深刻见解以及Chirstopher在社会工程领域的渊博学识。我们的组合振奋人心、独一无二,希望你能从中受益。”——保罗•艾克曼博士,加州大学旧金山分校心理学名誉教授,保罗•艾克......
  • 02_go语言的变量和常量
    1.内置类型和内置函数1.1内置类型总体上分为四类:其中数字类型主要包括如下,uint8就是byte、int16相当于C语言的short型、int64相当于C语言的long型也可以总体分为值类型、引用类型1.2内置函数1.3值类型和引用类型funcmain(){vara*int*a=100......
  • 学习C语言心得-do...while循环
    do....while(上来就干!)习题:打印1-10数字#include<stdio.h>//打印1-10intmain(){ inti=1; do { printf("%d",i); i++; } while(i<11); return0;}运行结果:continue中i++放置位置区别:1,i++在continue后方:#include<stdio.h>//打印1-10intmain()......
  • 04_go语言io流
    1.基本IO接口1.1Reader接口//Reader接口定义typeReaderinterface{Read(p[]byte)(nint,errerror)}Read将len(p)个字节读取到p中。它返回读取的字节数n(0<=n<=len(p))以及遇到的任何错误。即使Read返回的n<len(p),它也会在调用过程中占用le......
  • c语言代码练习(与“&”)26
    需求:求一个整数存储在内存中二进制中的1的数量#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){intnum=0;intinput=0;printf("请输入你想要统计的数字:");scanf("%d",&input);inti=0;for(i=0;i<32;i+......
  • GO语言基础之基本运算符
    GO语言基础之基本运算符目录GO语言基础之基本运算符一、运算符内置运算符:二、算术运算符三、关系运算符四、逻辑运算符五、位运算符六、赋值运算符一、运算符作用:运算符用于在程序运行时执行数学或逻辑运算。内置运算符:Go语言内置的运算符有:算术运算符关系运算符逻辑运......
  • C语言练习--拿球小游戏
    题目:一共100个球,两人轮流拿,每人每次最多拿5个,最后一个拿的人赢;如果我先拿,怎么拿一定会赢?#include<stdio.h>#include<stdlib.h>#include<time.h>intsc();intmain(){//设置随机数生成器的种子为当前时间srand(time(NULL));intbal=100;......
  • 数据结构——C语言知识补充
    学数据结构发现代码看不懂:(参考资料:C语言--指针详解-tongye-博客园C语言结构体详解,C语言struct用法详解指针C语言的一大难点,如何理解指针和运用指针。从一个简单的应用说起:inta=1;这是一个简单的变量声明和初始化,定义了一个整型变量a,并赋值为1。而对于计算机内部,在栈......
  • Linux怎么切换目录
    目录切换cd命令:cd目录cd/           切换到根目录cd/usr        切换到根目录下的usr目录cd../          切换到上一级目录或者cd..cd~           切换到home目录cd-       ......
  • YAML标记语言格式备忘
    简介YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC2822)中获得灵感。ClarkEvans在2001年首次发表了这种语言,另外IngydötNet与OrenBen-Kiki也是这语言的共同设计者......