Winform框架中多语言的处理

简介: Winform框架中多语言的处理

Winform界面中,有时候,需要对界面进行一些多语言的处理,以适应客户场景的使用,如有时候需要考虑英文、日文、韩文等客户的使用,那么在Winform界面如何实现这种多语言的正常处理呢,本篇基于Winform开发框架的基础上介绍使用多语言的处理过程。

1、多语言的处理思路

在国际化环境下,越来越多的程序需要做多语言版本,以适应各种业务需求的变化。在Winform应用程序中实现多语言也有常规的处理方式处理,不过需要针对每个语言版本,重新修改Winform界面的显示,对一些常规的辅助类,也需要引入一个统一的资源管理类来处理多语言的问题,相对比较繁琐。

我们的Winform开发框架,主要为了简化多语言的处理,编写了一些辅助的处理类库,读取对应的JSON多语言对键值对应文件,实现多语言的切换处理。

我们在开始编写程序的时候,使用我们熟悉的中文,然后在百度翻译(https://fanyi.baidu.com/)或者Google翻译对应的内容,存储在对应的目录中。

程序运行的时候,加载对应目录json文件即可实现多语言的处理。

首先我们开发系统的时候,需要创建一些多语言的对应目录,具体的目录我们遵循约定规则即可。

为了便于我们的处理,我们以中文为键,其中JSON里面对应的中文和其他语言的翻译结果,如下面是日文的参考内容。

我们记得把JSON文件,始终复制到目录上或者如果较新则复制,

这个目录就是会输出到debug或者Release的运行目录中,我们就是根据相对于运行目录进行资源读取即可,所有模块共用同一的多语言文件,我们可以把各个模块基础通用的多语言文件放在Basic.json文件中,也可以根据模块独立起名。

实际上目录名称是为了区分而已,程序加载的时候,会把目录下面所有的JSON文件进行加载,读取里面的键值作为资源的字典参照。

我们以我们常规的母语开发,即使我们不做多语言,也不影响代码的正常处理,我们只需要把窗体上和代码里面的中文提取出来,然后进行多语言处理(如变为英文/韩文/日文)即可。

2、多语言的处理效果

为了便于体验多语言的切换实际效果,我这里编写了一些测试的案例,并准备了中文、英文、日文、韩文的对照JSON文件,默认界面效果如下。

切换到英文的时候,界面如下所示。

控件英文界面效果

 

其他英文测试界面

切换韩文界面效果如下所示

其他视图界面效果

日文界面效果如下。

为了更好的测试其他控件的多语言处理,我们编写了一些控件的展示界面如下GridControl,TreeList等控件。

效果都没有问题,来回测试测试也是正常,符合要求。

3、多语言的代码处理

看完实际的效果,那么我们需要如何在代码中处理,才能实现多余的正常切换呢。

首先我们为了记住用户选择的语言区域信息,我们在配置文件中增加一个键值用来保存区域代码。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="CultureInfo" value="en-US" />
  </appSettings>

然后切换语言的时候,编写处理语言的切换和区域的存储即可,如下所示。

/// <summary>
        /// 改变界面的语言
        /// </summary>
        /// <param name="lang"></param>
        private void ChangeLang(string lang)
        {
            if (lang == "cn")
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-Hans");
                config.AppConfigSet("CultureInfo", "zh-Hans");
            }
            else if (lang == "kr")
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ko-KR");//韩文界面
                config.AppConfigSet("CultureInfo", "ko-KR");
            }
            else if (lang == "en")
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US");//英文界面
                config.AppConfigSet("CultureInfo", "en-US");
            }
            else if (lang == "jp")
            {
                System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ja-JP");//日文界面
                config.AppConfigSet("CultureInfo", "ja-JP");
            }
            LanguageHelper.Reload();//重新初始化JSON资源
            LanguageHelper.InitLanguage(this, true);//刷新界面控件    
        }

上面的LanguageHelper 辅助函数,主要就是用来对界面进行多语言处理的。

为了方便,我们的封装的基类窗体BaseForm、BaseEditForm、BaseDock等基础窗体,我们一般在界面初始化的时候,都会调用LanguageHelper 辅助函数来进行界面的多语言处理。

因此,如果是采用我们的基类窗口,那么默认就带有多语言的处理功能了,我们按照约定规则,处理好对应的多语言翻译文件JSON文件即可。

如果是对于一些自定义的窗体,或者继承默认的窗体类,那么在构造函数完成处理的时候,可以增加一行代码来处理多语言,如上面的规则所示即可。

这样也就能实现多语言的处理了

 

专注于代码生成工具、.Net/.NetCore 框架架构及软件开发,以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架等框架产品。
 转载请注明出处:撰写人:伍华聪  http://www.iqidi.com

相关文章
|
Java C#
C#学习系列相关之多线程(五)----线程池ThreadPool用法
C#学习系列相关之多线程(五)----线程池ThreadPool用法
694 0
|
NoSQL MongoDB 索引
Mongo优化——explain函数的基本使用
当数据量不大时,查询语句随便写,只要实现逻辑功能即可;但当数据量大到一定程度时,可能以前的方法就不可行了,因为一是查询数度变慢,更有甚者可能因数据量大而导致查询失败。解决这种问题最简单的方法是添加索引并利用好这些索引。可以通过explain函数来分析:1、在建索引前数据请求情况2、创建索引后数据请求是否有变好。现在就来看看explain相关知识。
4404 0
|
NoSQL API 数据库
【Cassandra】使用Docker部署Cassandra集群
Cassandra是一个开源分布式NoSQL数据库系统。
2548 0
|
存储 XML JSON
解锁Winform应用全球化:高效实现多语言处理的实战案例与技巧,让你的软件跨越语言障碍
【8月更文挑战第3天】随着全球化的推进,软件需支持多语言以满足国际用户需求。在Winform中,通过精心设计和工具辅助可简化多语言实现。本文以一个支持中、英、日、韩四语的应用为例,介绍如何使用JSON文件存储语言资源,并借助自定义类库动态加载和切换语言。通过准备不同语言的JSON文件、编写`LanguageHelper`类管理和更新UI文本,以及在配置文件中保存用户语言偏好等步骤,展示了实现多语言支持的有效途径。此方案不仅结构清晰,而且易于维护和扩展。
394 2
|
5月前
|
存储 算法
飞桨x昇腾生态适配方案:09_Paddle转ONNX
本节主要介绍如何将 PP-OCRv4 模型转化为 ONNX 模型,包括环境准备、模型下载、训练模型转 inference 模型及最终转为 ONNX 格式的过程。首先需安装 Paddle2ONNX 和 ONNXRuntime,接着下载并解压训练模型。通过 `export_model.py` 脚本将训练模型转化为 inference 模型,生成包含结构和参数的文件。最后使用 Paddle2ONNX 工具完成到 ONNX 格式的转换,并可选地使用 onnxslim 进行模型优化。各步骤均提供详细命令与参数说明,便于实际操作与部署。
224 9
|
11月前
|
开发工具 C++ git
利用VS Code提升开发效率的五大插件推荐
本文推荐了五款能显著提升开发效率的VS Code插件:ESLint用于代码质量和风格检查;Prettier自动格式化代码;GitLens增强Git功能;Live Server提供前端实时预览;Docker支持容器管理。
|
11月前
|
安全 Linux Shell
docker运行centos提示Operation not permitted
通过上述步骤,可以有效排查和解决在Docker中运行CentOS容器时遇到的"Operation not permitted"错误。这些措施涵盖了从权限配置、安全策略到容器运行参数的各个方面,确保在不同环境和使用场景下都能顺利运行容器。如果你需要进一步优化和管理你的Docker环境
938 3
|
C#
C#小知识之中英文转换、去空格
# 一、中英文转换 ## 1、安装NPinYin ![请在此添加图片描述](https://developer-private-1258344699.cos.ap-guangzhou.myqcloud.com/column/article/5877188/20231031-1f77b9b6.png?x-cos-security-token=kcWkaWALSQ5t0gKzZRkVwYOOBJMLQ8Ra8df6748cc017b8b22443671efb8aed172ct0qMmH-Si3jPfLmVc91udBHTdfdp2n1Qk-hBfLRQF5l22U2cHOMKfU7b0bWfl1t
353 0
C#小知识之中英文转换、去空格
|
12月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
621 0
|
开发框架 NoSQL 前端开发
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息
在Winform项目和Web API的.NetCore项目中使用Serilog 来记录日志信息