当前位置: 首页 > news >正文

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越南语(越南)

相关文章:

  • SASS模块化与组织文件
  • 5-Maven-setttings和pom.xml常用配置一览
  • c#vb代码互转工具
  • SpringBoot+Vue校园管理系统(前后端分离)
  • MySQL分页:ROW_NUMBER() vs LIMIT
  • 【JMeter接口测试工具】第一节.JMeter简介和安装【入门篇】
  • vue 文件预览mp4、txt、pptx、xls、xlsx、docx、pdf、html、xml
  • SAP Build引言
  • AI绘画工具
  • 暑期来临,AI智能视频分析方案筑牢防溺水安全屏障
  • Linux `free` 命令:深入解析系统内存使用情况**
  • C语言 | Leetcode C语言题解之第136题只出现一次的数字
  • Nvidia/算能 +FPGA+AI大算力边缘计算盒子:桥梁结构安全监测
  • C++实现图像的模拟运动模糊
  • 探索AIGC时代:全球大模型产品的评估与未来展望
  • CAP理论的例子讲解
  • ES10 特性的完整指南
  • Hibernate【inverse和cascade属性】知识要点
  • JavaScript HTML DOM
  • Javascript Math对象和Date对象常用方法详解
  • js 实现textarea输入字数提示
  • js对象的深浅拷贝
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 代理模式
  • 猴子数据域名防封接口降低小说被封的风险
  • 聊聊redis的数据结构的应用
  • 前端工程化(Gulp、Webpack)-webpack
  • 设计模式走一遍---观察者模式
  • 什么是Javascript函数节流?
  • 使用Gradle第一次构建Java程序
  • 微信公众号开发小记——5.python微信红包
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 主流的CSS水平和垂直居中技术大全
  • 【干货分享】dos命令大全
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 大数据全解:定义、价值及挑战
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • !$boo在php中什么意思,php前戏
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (30)数组元素和与数字和的绝对差
  • (LeetCode) T14. Longest Common Prefix
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Python第六天)文件处理
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (全注解开发)学习Spring-MVC的第三天
  • (一) springboot详细介绍
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (原)Matlab的svmtrain和svmclassify
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .bat批处理(二):%0 %1——给批处理脚本传递参数