WPF国际化的最佳实践
WPF国际化的最佳实践
1.创建项目资源文件
如果你的项目没有Properties文件夹和Resources.resx文件,可以通过右键项目-资源-常规-添加创建或打开程序集资源

2.添加国际化字符串
打开Resources.resx文件,添加需要翻译的文本字符,并将访问修饰符修改为public,才能在xaml中访问到此字符

3.添加其他国家地区资源文件
- 在Properties文件夹下添加新的资源文件项
- 注意一定要将新的文件名称格式命名为
Resources.xx-xx.resx这里一定要注意Resources是有s的,很多同事都命名错误导致无法国际化 - 更多国家和地区的编码见文末

3.1 翻译文本
- 将需要翻译的文本复制到新的地区资源文件中翻译

4.在代码中使用国际化文本
-
在xaml中使用国际化文本
<Button Width="40" Content="{x:Static prop:Resources.Confirm}" /> -
引入Properties命名空间
xmlns:prop="clr-namespace:WpfLanguage.Properties"
-
在代码中使用国际化文本
label.Content = Properties.Resources.Confirm;
5.在程序启动切换到对应国际的资源文件
protected override void OnStartup(StartupEventArgs e)
{// 切换到英语资源文件var info = new CultureInfo("en-US");Thread.CurrentThread.CurrentUICulture = info;base.OnStartup(e);
}

6.常见的国家和地区码
| CultureInfo | 地区 |
|---|---|
| af-ZA | 南非荷兰语(南非) |
| sq | 阿尔巴尼亚语 |
| sq-AL | 阿尔巴尼亚语(阿尔巴尼亚) |
| ar | 阿拉伯语 |
| ar-DZ | 阿拉伯语(阿尔及利亚) |
| ar-BH | 阿拉伯语(巴林) |
| ar-EG | 阿拉伯语(埃及) |
| ar-IQ | 阿拉伯语(伊拉克) |
| ar-JO | 阿拉伯语(约旦) |
| ar-KW | 阿拉伯语(科威特) |
| ar-LB | 阿拉伯语(黎巴嫩) |
| ar-LY | 阿拉伯语(利比亚) |
| ar-MA | 阿拉伯语(摩洛哥) |
| ar-OM | 阿拉伯语(阿曼) |
| ar-QA | 阿拉伯语(卡塔尔) |
| ar-SA | 阿拉伯语(沙特阿拉伯) |
| ar-SY | 阿拉伯语(叙利亚) |
| ar-TN | 阿拉伯语(突尼斯) |
| ar-AE | 阿拉伯语(阿联酋) |
| ar-YE | 阿拉伯语(也门) |
| hy | 亚美尼亚语 |
| hy-AM | 亚美尼亚语(亚美尼亚) |
| az | 阿泽里语 |
| az-Cyrl-AZ | 阿泽里语(阿塞拜疆,西里尔语) |
| az-Latn-AZ | 阿泽里语(阿塞拜疆,拉丁语) |
| eu | 巴斯克语 |
| eu-ES | 巴斯克语(巴斯克地区) |
| be | 白俄罗斯语 |
| be-BY | 白俄罗斯语(白俄罗斯) |
| bg | 保加利亚语 |
| bg-BG | 保加利亚语(保加利亚) |
| ca | 加泰罗尼亚语 |
| ca-ES | 加泰罗尼亚语(加泰罗尼亚地区) |
| zh-HK | 中文(中国香港特别行政区) |
| zh-MO | 中文(中国澳门特别行政区) |
| zh-CN | 中文(中国) |
| zh-Hans | 中文(简体) |
| zh-SG | 中文(新加坡) |
| zh-TW | 中文(台湾) |
| zh-Hant | 中文(繁体) |
| hr | 克罗地亚语 |
| hr-BA | 克罗地亚语(波斯尼亚和黑塞哥维那) |
| hr-HR | 克罗地亚语(克罗地亚) |
| cs | 捷克语 |
| cs-CZ | 捷克语(捷克共和国) |
| da | 丹麦语 |
| da-DK | 丹麦语(丹麦) |
| dv | 迪维希语 |
| dv-MV | 迪维希语(马尔代夫) |
| nl | 荷兰语 |
| nl-BE | 荷兰语(比利时) |
| nl-NL | 荷兰语(荷兰) |
| en | 英语 |
| en-AU | 英语(澳大利亚) |
| en-BZ | 英语(伯利兹) |
| en-CA | 英语(加拿大) |
| en-029 | 英语(加勒比) |
| en-IE | 英语(爱尔兰) |
| en-JM | 英语(牙买加) |
| en-NZ | 英语(新西兰) |
| en-PH | 英语(菲律宾) |
| en-ZA | 英语(南非) |
| en-TT | 英语(特立尼达和多巴哥) |
| en-GB | 英语(英国) |
| en-US | 英语(美国) |
| en-ZW | 英语(津巴布韦) |
| et | 爱沙尼亚语 |
| et-EE | 爱沙尼亚语(爱沙尼亚) |
| fo | 法罗语 |
| fo-FO | 法罗语(法罗群岛) |
| fa | 波斯语 |
| fa-IR | 波斯语(伊朗) |
| fi | 芬兰语 |
| fi-FI | 芬兰语(芬兰) |
| fr | 法语 |
| fr-BE | 法语(比利时) |
| fr-CA | 法语(加拿大) |
| fr-FR | 法语(法国) |
| fr-LU | 法语(卢森堡) |
| fr-MC | 法语(摩纳哥) |
| fr-CH | 法语(瑞士) |
| gl | 加利西亚语 |
| gl-ES | 加利西亚语(西班牙) |
| ka | 格鲁吉亚语 |
| ka-GE | 格鲁吉亚语(格鲁吉亚) |
| de | 德语 |
| de-AT | 德语(奥地利) |
| de-DE | 德语(德国) |
| de-DE_phoneb | 德语(德国,电话簿排序) |
| de-LI | 德语(列支敦士登) |
| de-LU | 德语(卢森堡) |
| de-CH | 德语(瑞士) |
| el | 希腊语 |
| el-GR | 希腊语(希腊) |
| gu | 古吉拉特语 |
| gu-IN | 古吉拉特语(印度) |
| he | 希伯来语 |
| he-IL | 希伯来语(以色列) |
| hi | 印地语 |
| hi-IN | 印地语(印度) |
| hu | 匈牙利语 |
| hu-HU | 匈牙利语(匈牙利) |
| is | 冰岛语 |
| is-IS | 冰岛语(冰岛) |
| id | 印度尼西亚语 |
| id-ID | 印度尼西亚语(印度尼西亚) |
| it | 意大利语 |
| it-IT | 意大利语(意大利) |
| it-CH | 意大利语(瑞士) |
| ja | 日语 |
| ja-JP | 日语(日本) |
| kn | 卡纳达语 |
| kn-IN | 卡纳达语(印度) |
| kk | 哈萨克语 |
| kk-KZ | 哈萨克语(哈萨克斯坦) |
| kok | 贡根语 |
| kok-IN | 贡根语(印度) |
| ko | 朝鲜语 |
| ko-KR | 朝鲜语(韩国) |
| ky | 吉尔吉斯语 |
| ky-KG | 吉尔吉斯语(吉尔吉斯坦) |
| lv | 拉脱维亚语 |
| lv-LV | 拉脱维亚语(拉脱维亚) |
| lt | 立陶宛语 |
| lt-LT | 立陶宛语(立陶宛) |
| mk | 马其顿语 |
| mk-MK | 马其顿语(马其顿,FYROM) |
| ms | 马来语 |
| ms-BN | 马来语(文莱达鲁萨兰) |
| ms-MY | 马来语(马来西亚) |
| mr | 马拉地语 |
| mr-IN | 马拉地语(印度) |
| mn | 蒙古语 |
| mn-MN | 蒙古语(蒙古) |
| 没有 | 挪威语 |
| nb-NO | 挪威语(伯克梅尔,挪威) |
| nn-NO | 挪威语(尼诺斯克,挪威) |
| pl | 波兰语 |
| pl-PL | 波兰语(波兰) |
| pt | 葡萄牙语 |
| pt-BR | 葡萄牙语(巴西) |
| pt-PT | 葡萄牙语(葡萄牙) |
| pa | 旁遮普语 |
| pa-IN | 旁遮普语(印度) |
| ro | 罗马尼亚语 |
| ro-RO | 罗马尼亚语(罗马尼亚) |
| ru | 俄语 |
| ru-RU | 俄语(俄罗斯) |
| sa | 梵语 |
| sa-IN | 梵语(印度) |
| sr-Cyrl-CS | 塞尔维亚语(塞尔维亚,西里尔语) |
| sr-Latn-CS | 塞尔维亚语(塞尔维亚,拉丁语) |
| sk | 斯洛伐克语 |
| sk-SK | 斯洛伐克语(斯洛伐克) |
| sl | 斯洛文尼亚语 |
| sl-SI | 斯洛文尼亚语(斯洛文尼亚) |
| es | 西班牙语 |
| es-AR | 西班牙语(阿根廷) |
| es-BO | 西班牙语(玻利维亚) |
| es-CL | 西班牙语(智利) |
| es-CO | 西班牙语(哥伦比亚) |
| es-CR | 西班牙语(哥斯达黎加) |
| es-DO | 西班牙语(多米尼加共和国) |
| es-EC | 西班牙语(厄瓜多尔) |
| es-SV | 西班牙语(萨尔瓦多) |
| es-GT | 西班牙语(危地马拉) |
| es-HN | 西班牙语(洪都拉斯) |
| es-MX | 西班牙语(墨西哥) |
| es-NI | 西班牙语(尼加拉瓜) |
| es-PA | 西班牙语(巴拿马) |
| es-PY | 西班牙语(巴拉圭) |
| es-PE | 西班牙语(秘鲁) |
| es-PR | 西班牙语(波多黎各) |
| es-ES | 西班牙语(西班牙) |
| es-ES_tradnl | 西班牙语(西班牙,传统排序) |
| es-UY | 西班牙语(乌拉圭) |
| es-VE | 西班牙语(委内瑞拉) |
| sw | 斯瓦希里语 |
| sw-KE | 斯瓦希里语(肯尼亚) |
| sv | 瑞典语 |
| sv-FI | 瑞典语(芬兰) |
| sv-SE | 瑞典语(瑞典) |
| syr | 叙利亚语 |
| syr-SY | 叙利亚语(叙利亚) |
| ta | 泰米尔语 |
| ta-IN | 泰米尔语(印度) |
| tt | 鞑靼语 |
| tt-RU | 鞑靼语(俄罗斯) |
| te | 泰卢固语 |
| te-IN | 泰卢固语(印度) |
| th | 泰语 |
| th-TH | 泰语(泰国) |
| tr | 土耳其语 |
| tr-TR | 土耳其语(土耳其) |
| uk | 乌克兰语 |
| uk-UA | 乌克兰语(乌克兰) |
| ur | 乌尔都语 |
| ur-PK | 乌尔都语(巴基斯坦) |
| uz | 乌兹别克语 |
| uz-Cyrl-UZ | 乌兹别克语(乌兹别克斯坦,西里尔语) |
| uz-Latn-UZ | 乌兹别克语(乌兹别克斯坦,拉丁语) |
| vi | 越南语 |
| vi-VN | 越南语(越南) |
相关文章:
WPF国际化的最佳实践
WPF国际化的最佳实践 1.创建项目资源文件 如果你的项目没有Properties文件夹和Resources.resx文件,可以通过右键项目-资源-常规-添加创建或打开程序集资源 2.添加国际化字符串 打开Resources.resx文件,添加需要翻译的文本字符,并将访问修…...
ctfshow web
【nl】难了 <?php show_source(__FILE__); error_reporting(0); if(strlen($_GET[1])<4){echo shell_exec($_GET[1]); } else{echo "hack!!!"; } ?> //by Firebasky //by Firebasky ?1>nl //先写个文件 ?1*>b //这样子会把所有文件名写在b里…...
【力扣】矩阵中的最长递增路径
一、题目描述 二、解题思路 1、先求出以矩阵中的每个单元格为起点的最长递增路径 题目中说,对于每个单元格,你可以往上,下,左,右四个方向移动。那么以一个单元格为起点的最长递增路径就是:从该单元格往上…...
语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(二)音频数据预处理及去噪算法+Python源码应用
前言 深度学习技术在当今技术市场上面尚有余力和开发空间的,主流落地领域主要有:视觉,听觉,AIGC这三大板块。 目前视觉板块的框架和主流技术在我上一篇基于Yolov7-LPRNet的动态车牌目标识别算法模型已有较为详细的解说。与AIGC相…...
网络原理——http/https ---http(1)
T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 网络原理 HTTP/HTTPS HTTP,全称为"超文本传输协议" HTTP 诞⽣与1991年. ⽬前已经发展为最主流使⽤的⼀种应⽤层协议. 实际上,HTTP最新已经发展到 3.0 但是当前行业中主要使用的HT…...
Docker安装、使用,容器化部署springboot项目
目录 一、使用官方安装脚本自动安装 二、Docker离线安装 1. 下载安装包 2. 解压 3.创建docker.service文件 4. 启动docker 三、docker常用命令 1. docker常用命令 2. docker镜像命令 3. docker镜像下载 4.docker镜像push到仓库 5. docker操作容器 6.docker …...
USB主机模式——Android
理论 摘自:USB 主机和配件概览 | Connectivity | Android Developers (google.cn) Android 通过 USB 配件和 USB 主机两种模式支持各种 USB 外围设备和 Android USB 配件(实现 Android 配件协议的硬件)。 在 USB 主机模式下࿰…...
240520Scala笔记
240520Scala笔记 第 7 章 集合 7.1 集合1 数组Array 集合(Test01_ImmutableArray): package chapter07 object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](5)// 另一种创建方式val arr2 Array(…...
【React】封装一个好用方便的消息框(Hooks Bootstrap 实践)
引言 以 Bootstrap 为例,使用模态框编写一个简单的消息框: import { useState } from "react"; import { Modal } from "react-bootstrap"; import Button from "react-bootstrap/Button"; import bootstrap/dist/css/b…...
tomcat10部署踩坑记录-公网IP和服务器系统IP搞混
1. 服务器基本条件 使用的阿里云服务器,镜像系统是Ubuntu16.04java version “17.0.11” 2024-04-16 LTS装的是tomcat10.1.24阿里云服务器安全组放行了:8080端口 服务器防火墙关闭: 监听情况和下图一样: tomcat正常启动ÿ…...
探索Sass:Web开发的强大工具
在现代Web开发中,CSS(层叠样式表)作为前端样式设计的核心技术,已经发展得非常成熟。然而,随着Web应用的复杂性不断增加,传统的CSS书写方式逐渐暴露出一些不足之处,如代码冗长、难以维护、缺乏编程功能等。为了解决这些问题,Sass(Syntactically Awesome Stylesheets)应…...
vue组件之间的通信方式有哪些
在开发过程中,数据传输是一个核心的知识点,掌握了数据传输,相当于掌握了80%的内容。 Vue.js 提供了多种组件间的通信方式,这些方式适应不同的场景和需求。下面是4种常见的通信方式: 1. Props & Events (父子组件通…...
111、二叉树的最小深度
给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 题解:找出最小深度也就是找出根节点相对所有叶子结点的最小高度,在这也表明了根节点的高度是变化的,相对不同的叶子结点有不同的高度。…...
SpringBoot3依赖管理,自动配置
文章目录 1. 项目新建2. 相关pom依赖3. 依赖管理机制导入 starter 所有相关依赖都会导入进来为什么版本号都不用写?如何自定义版本号第三方的jar包 4. 自动配置机制5. 核心注解 1. 项目新建 直接建Maven项目通过官方提供的Spring Initializr项目创建 2. 相关pom依…...
音视频开发17 FFmpeg 音频解码- 将 aac 解码成 pcm
这一节,接 音视频开发12 FFmpeg 解复用详情分析,前面我们已经对一个 MP4文件,或者 FLV文件,或者TS文件进行了 解复用,解出来的 视频是H264,音频是AAC,那么接下来就要对H264和AAC进行处理,这一节…...
vue2中封装图片上传获取方法类(针对后端返回的数据不是图片链接,只是图片编号)
在Vue 2中实现商品列表中带有图片编号,并将返回的图片插入到商品列表中,可以通过以下步骤完成: 在Vue组件的data函数中定义商品列表和图片URL数组。 创建一个方法来获取每个商品的图片URL。 使用v-for指令在模板中遍历商品列表,并…...
【C++面向对象编程】(二)this指针和静态成员
文章目录 this指针和静态成员this指针静态成员 this指针和静态成员 this指针 C中类的成员变量和成员函数的存储方式有所不同: 成员变量:对象的成员变量直接作为对象的一部分存储在内存中。成员函数:成员函数(非静态成员函数&am…...
最大矩形问题
柱状图中最大的矩形 题目 分析 矩形的面积等于宽乘以高,因此只要能确定每个矩形的宽和高,就能计算它的面积。如果直方图中一个矩形从下标为 i 的柱子开始,到下标为 j 的柱子结束,那么这两根柱子之间的矩形(含两端的柱…...
LeetCode62不同路径
题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径? …...
GNU Radio实现OFDM Radar
文章目录 前言一、GNU Radio Radar Toolbox编译及安装二、ofdm radar 原理讲解三、GNU Radio 实现 OFDM Radar1、官方提供的 grc①、grc 图②、运行结果 2、修改后的便于后续可实现探测和通信的 grc①、grc 图②、运行结果 四、资源自取 前言 本文使用 GNU Radio 搭建 OFDM Ra…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章 摘要: 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言,受限于 C 语言本身的内存安全和并发安全问题,开发复杂模块极易引入难以…...
表单设计器拖拽对象时添加属性
背景:因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...
