升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

我在业余时间开发维护了一款免费开源的升讯威在线客服系统,也收获了许多用户。对我来说,只要能获得用户的认可,就是我最大的动力。

最近收到来自巴西客户的需求,希望为 客服端增加 英文界面。

好,那就满足这个需求吧!本文重点从技术角度介绍了客服端多国语言界面的实现方法。

在线客服 客服端,支持中英文双语界面:

升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

在线客服 访客端,支持中文、英文、日文、韩文、葡文、印尼文、土耳其文、俄文等:

升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com

视频实拍:演示升讯威在线客服系统在网络中断,直接禁用网卡,拔掉网线的情况下,也不丢消息,不出异常。
https://blog.shengxunwei.com/Home/Post/fe432a51-337c-4558-b9e8-347b58cbcd53

WPF 多语言界面实现方案

对 WPF 应用程序进行本地化时,有多种选择。 例如,可以将应用程序中的可本地化资源绑定到 XML 文件,在 resx 表中存储可本地化文本,或者让本地化人员使用 Extensible Application Markup Language (XAML) 文件。 本部分介绍使用 XAML 的 BAML 形式的本地化工作流,这种工作流提供以下几个好处:

  • 可以在生成之后进行本地化。
  • 可以从较旧版本 XAML 的 BAML 形式更新到本地化的较新版本 XAML 的 BAML 形式,以便在开发的同时进行本地化。
  • 因为 XAML 的 BAML 形式是 XAML 的已编译形式,所以可以在编译时验证原始源元素和语义。

本地化生成过程

开发 WPF 应用程序时,本地化的生成过程如下:

  • 开发人员创建 WPF 应用程序并将其全球化。 在项目文件中,开发人员设置 en-US,以便在编译应用程序时生成一个中性语言的主程序集。 此程序集具有一个附属 .resources.dll 文件,其中包含所有可本地化的资源。 因为本地化 API 支持从主程序集进行提取,所以可选择在主程序集中保留源语言。
  • 将文件编译到生成中时,会将 XAML 转换为 XAML 的 BAML 形式。 将向说英语的客户发布非特定区域性的 MyDialog.exe 和区域性相关的(英语)MyDialog.resources.dll 文件。

本地化工作流

本地化过程在生成未本地化的 MyDialog.resources.dll 文件之后开始。 使用 System.Windows.Markup.Localizer 下的 API 将原始 XAML 中的 UI 元素和属性从 XAML 的 BAML 形式提取为键值对。 本地化人员使用键/值对来对应用程序进行本地化。 在本地化完成之后,可以从新值生成一个新的 .resource.dll。

键值对的键是在本地化人员开始进行本地化之后,开发人员放置在原始 UI 中的 x:Uid 值,你可以将开发更改与已完成的本地化工作进行合并,使损失的翻译工作降至最少。

下图显示了一个基于 XAML 的 BAML 形式的典型本地化工作流。 此关系图假设开发人员用英语编写应用程序。 开发人员创建 WPF 应用程序并将其全球化。 在项目文件中,开发人员设置 en-US,以便在生成时会生成一个中性语言的主程序集,该程序集具有一个包含所有可本地化资源的附属 .resources.dll。 或者,因为 WPF 本地化 API 支持从主程序集进行提取,所以还可以保留主程序集中的源语言。 生成过程结束之后,XAML 会编译为 BAML。 将向说英语的客户提供非特定区域性的 MyDialog.exe.resources.dll。

升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

自动布局

在 Window1.xaml 中:

以前的 Window 属性会根据内容大小自动调整窗口大小。 此属性可以防止窗口切断在本地化之后大小增加的内容;它还可以在内容由于本地化而大小减小时删除不必要的空格。

<grid x:uid="Grid_1">
</grid>

为了使 WPF 本地化 API 正确运行,需要使用 Uid 属性。

它们由具有较旧的 UI 本地化的 UI 使用。 通过在命令行界面中运行 msbuild -t:updateuid RunDialog.csproj,可以添加 Uid 属性。 因为手动添加 Uid 属性通常比较费时并且准确性较差,所以建议使用此方法来添加这些属性。 可以通过运行 msbuild -t:checkuid RunDialog.csproj 来检查是否正确设置了 Uid 属性。

使用 Grid 控件可以构造 UI,这是一个有用的控件,它可以利用位于每个单元格中的 UI 元素中的自动布局,适应本地化过程中大小的增加和减小。

<grid.columndefinitions>
  <columndefinition x:uid="ColumnDefinition_1">
  <columndefinition x:uid="ColumnDefinition_2">
</columndefinition></columndefinition></grid.columndefinitions>

放置 Open: 标签和 ComboBox 的前两列占据 UI 总宽度的 10%。

<columndefinition x:uid="ColumnDefinition_3" sharedsizegroup="Buttons">
  <columndefinition x:uid="ColumnDefinition_4" sharedsizegroup="Buttons">
  <columndefinition x:uid="ColumnDefinition_5" sharedsizegroup="Buttons">

</columndefinition></columndefinition></columndefinition>

使用 Grid 的共享调整大小功能。 最后三列通过将自身放置在相同的 SharedSizeGroup 中利用此功能。 正如属性名称所示,此属性允许不同的列采用相同大小。 因此,在将”Browse…”本地化为更长的字符串”Durchsuchen…”时,所有按钮的宽度都会增加,而不是显示一个小的”OK”按钮和一个大得不相称的”Durchsuchen…”按钮。

放置在 UI 根元素中的 XAML 中的 xml:lang 处理。 此属性描述给定元素及其子元素的区域性。 WPF 中的多项功能都使用此值,在本地化过程中应对此值进行相应的更改。 此值会更改在断字以及对字词进行拼写检查时所使用的字典。 它还会影响数字的显示以及字体回退系统选择所用字体的方式。 最后,该属性会影响数值的显示方式,形成在复杂脚本中编写文本的方式。 默认值为”en-US”。

此时多语言设置基本完成,剩下的就是翻译工作了。

免费在线使用 & 免费私有化部署:https://kf.shengxunwei.com

视频实拍:演示升讯威在线客服系统在网络中断,直接禁用网卡,拔掉网线的情况下,也不丢消息,不出异常。
https://blog.shengxunwei.com/Home/Post/fe432a51-337c-4558-b9e8-347b58cbcd53

结束~

希望对你有用,支持请点个赞吧~ 谢谢!

Original: https://www.cnblogs.com/sheng_chao/p/16847072.html
Author: 曹旭升(sheng.c)
Title: 升讯威在线客服系统客服端英文界面的技术实现方法,客户落地巴西圣保罗

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/799666/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Arduino驱动OLED显示屏

    使用Arduino驱动SSD1306 OLED 显示屏工作 1、准备工作 1.1)Arduino中库的载入 include ; 1.2)接线 在这里使用的是arduino UNO开…

    Python 2023年11月8日
    037
  • python flask获取微信用户信息报404,nginx问题

    在学习flask与微信公众号时问题,发现测试自动回复/wechat8008时正常,而测试获取微信用户信息/wechat8008/index时出现404。查询资料后收发是nginx配…

    Python 2023年6月3日
    062
  • 卡塔尔世界杯-诸神黄昏

    世界杯 世界杯概述:国际足联世界杯(FIFA World Cup)简称”世界杯”,是世界上最高荣誉、最高规格、最高竞技水平、最高知名度的足球比赛,与奥运会并…

    Python 2023年9月30日
    080
  • python及pygame雷霆战机游戏项目实战10 爆炸效果

    在这个系列中,将制作一个雷霆战机游戏。 ; 自动开火 首先,让对玩家射击方式做一点改动。只要空格键被按下,让自动发射子弹。 为此,将向Player添加两个新属性: self.sho…

    Python 2023年9月21日
    043
  • Scrapy翻页爬取示例——列表页、详情页

    Scrapy翻页爬取示例——列表页、详情页 引言: 本人最近在帮助同事们爬取一批英—泰双语数据,顺带复习了一下scrapy爬虫相关的知识。下面以简单的小项目为例,一起来开始吧! 示…

    Python 2023年10月2日
    045
  • 爬虫Scrapy命令行 命令介绍

    全局命令有7个: startproject:创建项目settings:查看设置信息runspider:运行爬虫shell:打开Shell调试fetch:下载网页信息view:使用浏…

    Python 2023年10月4日
    068
  • 全网最牛自动化测试框架系列之pytest(13)-多线程、多进程执行用例

    【文章末尾给大家留下了大量的福利】 有些项目的测试用例较多,测试用例时需要分布式执行,缩短运行时间。 pytest框架中提供可用于分布式执行测试用例的插件:pytest-paral…

    Python 2023年9月10日
    038
  • 函数的递归

    1.函数的递归的定义 函数的递归调用:是函数嵌套调用的一种特殊形式 具体是指:在调用一个函数的过程中又直接或者间接的调用到本身,是一个死循环,最大递归是1000次,超出之后报错。 …

    Python 2023年11月1日
    059
  • 采用scrapy框架爬取大型网站的个人记录

    1、爬取过程中使用嵌套爬取 一般来说,一个parse方法是不够用的。我目前而言是不会用start_urls默认发送请求的列表,感觉有点呆。因为当你请求的列表是整个网站的页面数据的时…

    Python 2023年10月1日
    041
  • MySQL面试常问问题(锁 + 事务) —— 赶快收藏

    目录 1.MySQL中有哪几种锁,列举一下? 2.说说InnoDB里的行锁实现? 3.意向锁是什么知道吗? 4.MySQL的乐观锁和悲观锁了解吗? 5.MySQL 遇到过死锁问题吗…

    Python 2023年10月24日
    039
  • python中碰撞的代码_python中的碰撞形状

    我的计划是创建一个”简单的”2人迷你游戏(例如相扑和比赛)。在 我的目标是用正方形、圆形(和三角形?)高效地实现碰撞(我当前的代码只能处理简单的墙物理和对象…

    Python 2023年9月22日
    073
  • 一文读懂内存管理

    1 野指针 野猫 野狗 野孩子 熊孩子 NULL地址-狗链子 野孩子:没人要,没人管的孩子;行为动作不守规矩,调皮捣蛋的孩子。 野狗:没有主人的狗,没有链子锁着的狗,喜欢四处咬人。…

    Python 2023年9月30日
    046
  • scrapy基础(中间件)

    中间件/管道的使用都先要在setting里启动代理操作必须使用中间件才能实现: process_exception(): request.meta[‘proxy’] = ‘http…

    Python 2023年10月7日
    045
  • Kafka学习(三) 主题、分区与副本

    主题、分区与副本 基本概念 主题、分区和副本的关系 主题是一个逻辑概念,代表了一类消息,实际工作中我们使用主题来区分业务,而主题之下并不是消息,而是分区,分区是一个物理概念,它是磁…

    Python 2023年5月23日
    072
  • 如何使用Python制作画图软件(1)

    哈啰,大家好,我是 新人创作者:QWQ_chinese 。 今天我们来谈一谈,如何在 Python中用 纯pygame模块制作一个简简单单的画图软件~ 大家看完这篇文章,觉得对自己…

    Python 2023年9月19日
    050
  • Python 测试框架之 pytest框架详解

    前言Python测试框架之前一直用的是unittest+HTMLTestRunner,听到有人说pytest很好用,所以这段时间就看了看pytest文档,在这里做个记录。 官方文档…

    Python 2023年9月11日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球