自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

国际化梦工厂

专注国际化开发和测试,只聊干货拒绝扯淡!

  • 博客(83)
  • 收藏
  • 关注

原创 Singleton之我见(六)

新版本的Singleton中引入了I18nContext这一概念,旨在管理来自不同环境的变量,I18nContext本质上是对Local Storage的一层封装。它携带了pseudoEnabled, i18nEnabled, preferredLanguage和跨组件、跨模块(只要在一个domain下)共享的一系列基础信息,同时提供了一种在服务之间加载和共享这些值的方法,而不必显式地在服务中逐级的传递参数。来自localStorage的伪设置,决定是在调试阶段还是在开发阶段显示伪翻译。...

2022-08-05 02:42:49 2853 1

原创 Singleton之我见(五)

不卖关子啦,因为本例的背景着实非常小众和特殊,不便引发大家的种种推测,这里直接公布答案——本项目中很早就引入了Singleton作为i18n框架,而在随后的岁月中,Singleton本身经过了几次重要的升级,导致老版本和新版本在stringloading的处理上有着两套截然不同的逻辑体系。在产品的中文主页面上的点击导航栏,发现少量模块(如图中所示的Subscription)的内容回退为英文,而在之前的若干轮测试中,该模块已经可以完美的展示中文内容。...

2022-07-16 04:40:40 3402

原创 Singleton之我见(四)

在之前的文章中,已不止一次的给大家介绍了开源国际化开发框架——Singleton。对于企业级大型应用,其优势的确是肉眼可见的。然后,这是否意味着只要引入了Singleton框架,国际化问题或者说国际化中的三层问题就彻底被解决了么?答案是否定的。在接下来的几篇短文中,我想给大家分享的内容就是即便在import Singleton后,因为种种不规范、不推荐的写法和配置下,直接引发了多种奇葩的国际化问题。首先,让我们一起来关注一个字符串读取问题,现象如下:在产品的中文主页面上不断的点击导航栏,发现UI大部分内容都

2022-07-14 04:14:40 3842

原创 Angular内置管道 vs Singleton(一)

Angular中的内置管道典型作用就是用来格式化数据,举一个最简单的例子。<p>My birthday is {{ birthday | date }}</p><p>My birthday is {{ birthday | date:"MM/dd/yy" }} </p>export class AppComponent { birthday = new Date(2021, 4, 20); // 需要注意这里的月份要写4而不是5,因为月..

2021-05-22 03:38:35 3552

原创 理想的Datepicker

山水盘桓,边草缠绵。苍茫一笑,愁在眉宇间。去国怀乡,旧了红颜,追忆当初。心中已惘然。……这首《西风斩》无论词曲都着实让我惊艳,作为《大秦赋》插曲也分外贴合。尽管历朝历代的文人骚客都在对”暴秦“不遗余力的进行着口诛笔伐,尤以贾谊的《过秦论》为甚。然而在我眼中,这不过是六国那些被褫夺了昔日封地和特权后的王公贵族们的哀怨和私愤。且不谈其他,只说赵政的”书同文,车同轨“,仅此一点就足以让其在整个中华帝国的历史长河中屹立不倒,真可谓”千载谁堪伯仲间“!其意义如何?用今时今日的话来说就是——哥们制定了整个行

2021-01-14 10:18:09 4454

原创 Singleton之我见(三)

长久以来,所有软件几乎不约而同的对产品翻译资源文件均采用了作为代码一部分的方式统一发布并高度内聚。这样的方式自然有其显而易见的好处,例如不会因为产品本地化而引入任何新的安全问题,性能问题等。然而他带来的问题也不容小觑,作为资深的国际化开发或测试工程师来说,以下场景想必不会陌生。客户:贵公司本地化产品中XX页面上的翻译存在歧义,甚至会严重误导用户。工程师:谢谢您的反馈,我们已详细记录了该问题,将在下个版本中修复。客户:那下个版本何时发布呢?工程师:请再耐心等待半年。客户:……如果.

2020-10-23 12:55:13 4497

原创 Singleton之我见(二)

在国际化软件的时间日期格式方面,我们耳熟能详的有Moment,GlobalizeJS等,那么Singleton又是如何解决该问题呢?宏观上看,Singleton并没有使用嵌入源码的lib模式,而是提供了两个service(目前共发布了两个版本的API,v1做出初始版本已基本被弃用,v2经过与多个产品磨合后,成为了包含类型最多并且较接近Restful API风格的一版,本文所有效果都基于后者)。Singleton的格式API,已经覆盖的国际化关注点包括了日期时间、数字、货币、计量单位、单复数,主要AP

2020-08-29 07:37:20 4669

原创 Singleton之我见(一)

不知大家是否还记得两年前笔者曾贴出的一张照片(图片拍摄于Unicode Conference),期间列举了国际化前端生态圈中比较主流的框架,Globalize和Moment系数在列,笔者也曾花费不少笔墨对他们进行剖析。本文开始,我准备和大家分享另外一个相对小众的国际化框架Singleton,相比于Globalize(GitHub 4.4k颗星)和Moment(GitHub 44.4k颗星),Singleton在GitHub上的星星目前仍不足百(https://github.com/vmware/si

2020-07-30 01:22:54 4825

原创 国际化视角看Kubernetes

作为一个管理跨多台主机的集合体应用程序的开源系统,源自Google十年容器化基础架构Borg的Kubernetes(下文简称K8s)提供了部署、维护和扩展应用程序的基本机制。因为K8s具有的轻量级,消耗资源小,开源,弹性伸缩和负载均衡等特点,使其已经成为了业内的通用PaaS平台。介绍K8s架构,功能以及应用的文章可谓汗牛充栋,而本文尝试用国际化视角(I18n)来解读和剖析K8s。先来关注K8s的各部分组件,其中包括etcd(一个可信赖的分布式键值对存储服务,能否为整个分布式集群存储一些关键数据,协助分布

2020-05-09 08:33:16 5487

原创 Docker与国际化

也曾一度认为Docker跟国际化基本扯不上什么关系,直到近期发现了这个bug方体会到一叶障目,学海无涯。问题如下,在使用Docker作为容器的系统中添加了一个名为非英文字符的组织名后,多处信息提示中都出现了该组织名的乱码形式,如下图所示。看到该问题,我的第一反应是JsonEncoding出了问题,并果(wǔ)断提出了可行(miù wù)的解决方案。JsonGenera...

2020-03-01 00:48:33 5798

原创 Angular I18n 五部曲

细翻翻看历史文章,其实关于Angular的总结已经有了不少,然而实际开发和测试工作中发现关于Angular的i18n bug依然层出不穷。近日又碰到一个“页面未载入,请返回上一个页面或重新整理页面再试一次”的问题,而App本应该向用户展示一个带有date-picker的页面,如下图所示。打开console会发现如下的错误信息。个人看来,凡是在某个问题上不断犯错,正如“大师兄,师傅和......

2020-01-04 02:09:44 7656

原创 本地化软件UI部分不显示的一种可能

你是否也曾遇到过这样的情况,经过了本地化的软件UI部分不显示抑或完全不能现实?你是否也曾因此和本地化人员互相传球高达250余脚,但皮球依然还在本方半场,遑论攻门次数。造成这样现象的根本原因可谓千差万别,本文仅针对在部分UI无法正常显示的情况下,一种大概率root cause的预判。现象如下,当用户进入到Prompt for Device Ownership Type页面的时候,本该出现的...

2019-12-16 11:10:13 6713

原创 NLP之我见

 简介NLP(自然语言处理)作为CS, AI和Linguistics的交叉学科,目的是让计算机能够处理和理解人类的自然语言,以执行语言翻译或回答问题等任务。随着语音接口和聊天机器人的兴起,NLP成为了AI技术最重要的研究内容之一,但想要充分理解和表达语言含义其实是一个极其困难的目标,因为人类的语言相当晦涩并充满了歧义。说到这儿,一定会有人跳将出来大吼:不对啊,我早就看过新闻,我们中国的科大...

2019-01-28 17:00:48 8501

原创 幸福的烦恼—当本地化客户端遇上本地化服务器

在国际化开发过程中,遇到过需要校验的地方,你会如何选择?用string value本身进行compare?一旦出现翻译后的内容跟标的mismatch又将如何呢?我们是幸福的,因为身处一个国际化底蕴深厚的团队,无论服务器抑或客户端;我们又是不幸的,源自客户端和服务器进行通信时,数据包括了本地化后的字符串,判断逻辑为我们平添烦恼。近日偶遇一则这样的真实案例,为该情况提供了完美注脚。故事背景在A...

2018-12-25 15:23:49 8377

原创 再读笑傲

飞雪连天射白鹿,笑书神侠倚碧鸳……慕然间查大侠竟就这么离开了,对于一个从小便伴随着“狭义江湖”长大的人来说,唏嘘感叹,黯然神伤着实难免。相信不光是在下,全球华人对金庸先生构建起的武侠世界大抵都不会太陌生——六脉神剑、辟邪剑法、独孤九剑、太极剑、七伤拳、太极拳、乾坤大挪移、凌波微步、金刚指、拈花指、一阳指、天山折梅手、小无相功、降龙十八掌、打狗棒法、九阴真经,九阳神功、紫霞神功、葵花宝典.....但...

2018-11-23 14:28:25 15595 1

原创 42th Unicode Conference随笔(二)

 这次会议上有幸听到了来自Apple Xcode团队三位工程师(Trevor Cortez, Vivian Robison, Fredrik Stenshamn)的经验分享,着实印象深刻,为了开发适应全球化,高可用的,并且是为了开发普通终端用户使用的app而并非企业级产品,Xcode需要考虑并完善的工作需要包含如下两个部分。国际化Locale默认情况下会设置为en_US,l...

2018-10-12 17:19:11 13570

原创 42th Unicode Conference随笔(一)

三国曹丕的《典论·论文》中说:“文人相轻,自古而然。”这话其实还有后句的,叫“武人相重”。而我辈应当算作文人?抑或武人呢?窃以为还是偏武多一些,毕竟IT圈儿的主流依然是“夜里挑灯看剑,梦回吹角连营”,吟风弄月的怀橘陆郎多半难成气候。然而面对业内充斥着的各种不厌其烦发明着的轮子,倒也不禁难掩大家平实外表下文人骚客的风骨。毕竟“文无第一,武无第二”,别人提供的框架、代码库怎么都觉得差点儿意思,还是得老...

2018-09-25 18:23:22 13989

原创 Base64与国际化

 背景介绍抛个问题,什么是base64?何时会用到他?与我们熟知的charset又是怎样的关系呢?跟国际化又有何恩怨呢?先看看wikipedia对其定义吧。“ Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于 26=64,所以每6个比特为一个单元,对应某个可打印字符。3个字节有24个比特,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。它可用来作为...

2018-08-22 18:10:03 14470

原创 path的锅?

用Python进行国际化编码的兄弟对这个错误大抵应该是不陌生的——“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”。根据业内“公认”的鄙视链,恭喜老铁们,大家应该都稳稳的占据了第三顺位……不过窃以为这张插图还未画完 ,悬揣接下来的应该是遇到了U...

2018-08-16 14:13:01 14506

原创 为moment.js正名

说来也奇怪,总有人在耳边说moment.js对国际化日期支持不好,坚决不要使用,会带来很多问题之类的话。但就我个人经验来看,还从未见到过任何一个反例,恰好我又是个不信邪的人,并坚持认为检验真理的唯一标准就是小马过河,所以今儿我就准备趟趟水,是骡子是马,咱们拉出来溜溜呗,走起来。 首先,部署方式有如下几种:npm install moment --save   # npmyarn a...

2018-07-21 12:34:22 19206

原创 国际化与多线程—续

正所谓“说曹操曹操到”吧,这世间的很多事儿着实架不住念叨。上文书我们刚提到一个“活久见”bug,如今又和他的表妹不期而遇了。相遇过程如下:在已经被本地化的产品中选择Preview,Schedules等tab,日文UI无任何异常。紧接着点击Downloads tab,注意!这里的页面发生了局部刷新,然后我们就猝不及防的看到这样日文和英文夹杂着的怪咖。对于该问题,测试和开发的确...

2018-06-07 18:15:15 17837 1

原创 国际化与多线程

提到开发中的多线程问题,我想大部分人并不陌生,其中有不少兄弟还能津津乐道于生产者,消费者模型,做烤鸭吃烤鸭的案例也烂熟于心。不过要是谈到多线程跟国际化有啥关系时,相信多数人还是会语塞,其实我也一样,从未认为国际化问题跟多线程能扯上什么关系。直到最近碰到了这样的几个bug,算是“活久见”系吧。在一个产品的UI上,慕然发现大部分内容显示中文字符(这是期望结果),但就在同一页面上某几个label还有零星...

2018-05-25 17:34:23 18232

原创 ExtJS中的maxLength

时至今日,ExtJS已然不再流行,基本上已经从前端的世界销声匿迹了。但不可否认的是它依然在诸多legacy代码中发挥着重要作用,一旦有了问题,同样让人难受。今天我们就来聊一个还算是一个比较常见的(至少对我来说如此)国际化问题吧,它起源于maxLength。首先我们来创建一个textfield,相信在所有控件中,它的出现率应该当仁不让。随后对其maxLength进行限制,这里为了显示效果,设置成较小...

2018-05-16 18:03:07 17613

原创 都是ß惹的祸

收到一个客户报来的bug,说自己在创建某个component时,一旦命名中包含了ß(例如UEMENß),该创建功能会导致失败,删除掉ß后该功能正常运行。不少资深的测试和开发留言说—— ß是一个非常tricky的字符,很多第三方库对其支持都不好,其他产品也有类似问题吗,在release notes务必加上一句告知用户。 ß当真如此神秘?怎么就引得无数英雄尽折腰呢?为何那么多第三方库对其支持都不好呢?...

2018-04-27 18:17:01 10085

原创 “多余”的双引号

说起遇到过的奇葩国际化bug,相信各位的经验不会在我之下,甚至用一个seminar的时间也只能管中规豹。近日笔者就又遇到了一个,分享出来以飨读者吧。首先,让我们来看看我是怎样偶遇该奇葩的,复现的过程倒也简单——登陆产品界面,进入dashboard的overviewpage,当设置browser为en,de,it之类的locale时,没任何异常。然后,一旦设置成zh_CN, ja时,异常

2018-01-14 17:06:37 10493

原创 导出CSV文件中的乱码

问题概述如今的AUT导出csv文件的功能已经相当的常见,而打开文件后内容显示为乱码的现象也着实屡见不鲜,即便编码时候特意指定了码表为UTF-8,如下所示。public void exportCSV(){ OutputStreamWriter fwriter = new OutputStreamWriter( new FileOutputStream(new File("csv/exp

2017-07-03 22:15:06 19145

原创 GemFire/Geode中的国际化(二)

代码走读商业产品的代码我们是看不到啦,这里我们就以开源的Geode为例,一起看看哪些区域涉及到了国际化实现。(这里笔者使用了内部研发的代码语法感知工具)首先,我们的目光投在了DataSerializer.java中的writeString和readString方法。public staticvoid writeString(String value, DataOutput out) thr

2017-06-14 14:25:50 7477

原创 GemFire/Geode中的国际化(一)

背景GemFire 作为一款分布式NoSql内存数据库,用来完成分布式缓存,数据持久化,分布式事物、动态扩展等功能。Geode是其开源版本,于2015年4月发布, 该项目是为了将GemFire改造为依托Apache软件基金会、社区自治、多元化的一个社区项目。github的地址是https://github.com/apache/geode 也许大家对GemFire的名字还是有些陌生

2017-06-13 19:43:59 8517

原创 Redis缓存中的国际化(二)

用Jedis操作存在的问题和根源上文书我们得知用cli操作Redis是不存在国际化问题的,那为何实际项目中时常会出现因为引入Redis导致大范围非英文字符显示为问号呢?本文我们将使用Java客户端Jedis来操作Redis,进一步分析产生问号现象的可能原因。首先来模拟并测试下Jedis的序列化和反序列化过程吧,通常情况下,这里都是国际化问题的重灾区。//序列化public staticb

2017-05-29 14:54:06 8030

原创 Redis缓存中的国际化(一)

NoSQL随着WEB2.0的兴起,任何新闻、视频、朋友圈都不再是一个个孤立的推送行为,大量的互动行为往往会喧宾夺主的成为主角,相当一部分吃瓜群众再也不是去关注新闻本身,而是“来看评论的”,捎带脚也常常会推波助澜的“火钳刘明”一把。面对这样超大规模和高并发的SNS类型业务需求,传统的关系型数据就玩儿不转了。为了解决大规模数据集合多重数据种类带来的挑战,尤其是海量数据应用,以及高可扩展性及高可用性

2017-05-29 01:39:53 8321

原创 从json到gson

眼下JSON(JavaScriptObject Notation)已经成为业内使用最为广泛的数据传输格式了,似乎不用JSON来存点儿东西,出门都不好意思跟人到招呼。这种与开发语言无关,轻量级的数据格式,之所以能够发展的如此迅猛,优点一定是显而易见的,例如:·        易于人类阅读和编写,格式都是压缩的,占用带宽小·        易于程序解析与生产,客户端JavaScript可以简单

2017-05-19 21:31:36 8346

原创 本地化测试的执行

本地化测试的bug大抵可以分为几类呢?笔者总结如下。1.   因为翻译文件check-in导致原有的功能失效2.   软件本地化之后UI layout异常或截断3.   硬编码4.   翻译内容不正确 溯游从之,先说功能点异常或缺失,这可是我们测试的重中之重。我曾多次设想过利用伪翻译之后的build提前引入测试,从而无须等到真实本地化版本的生成就可以完成对其主要功能的验证。

2017-05-12 17:57:59 6077

原创 HtmlUnit在本地化测试中的使用

最近在review l10n测试用例时发现大量如下场景。1. 打开xx page,验证该页面被localize,同时没有layout问题2. 配置一堆前置条件,目的不过是驱动某些error message,同时验证message body + header被localize,同时没有layout问题 面对这样的情形,不禁唏嘘,这样的毫无技术含量的重复性工作真的有意义么?即便对于业务

2017-04-29 01:51:35 7564

原创 Angular 2 原生国际化支持(二)

AngularJS 2 国际化支持内容回顾在之前的文章里面,我们探讨过 AngularJS 2 本地化支持上面的改变:通过在需要翻译的内容上添加 i18n HTML 属性利用ng - xi18n 工具抽取字符串到标准的交互格式XLIFF文件中在翻译完成后,Angular compiler 导入翻译的文件,编译生成Application 可以直接调用的Json 字符串。...

2017-04-24 00:25:36 17032

原创 JS中的国际化排序

说到国际化中的排序问题,大部分人都会选择利用后台数据库collation 进行orderby,随后再将排列好的data set一并返回给前端展示。在这个过程中,前端除了渲染外没有任何的工作量,这种模式其实未尝不可。但在前端已经愈发强大的今日,浏览器其实已经可以处理越来越复杂的事物,甚至可以替代操作系统与硬件进行交互,所以业内的新风向也从之前的thinclient快马扬鞭的朝着所谓native

2017-04-21 16:53:12 7469

原创 HTML5中的新国际化标签及属性

H5问世其实也有很长一段时间了,时至今日,大部分浏览器都号称对其进行了支持,但效果如何呢?随便找个前端问问,标准答案一般会是——呵呵~~~虽然H5对视频、音频、图象、动画,以及同电脑的交互都已经标准化,但要论及完美,不得不说H5还有很长的路要走。 闲言少叙,本文就来谈谈HTML5 + CSS3中的新国际化标签及其使用情况,以及可能带来的风险分析吧。一定会有人惊呼,lang一直都有啊

2017-04-14 17:20:39 14925

原创 国际化测试中的边界值

说起边界值测试,大家应该都是如数家珍了。作为一种常用的黑盒测试方法,他通常会和等价类划分一起配合,帮助测试人员有效地进行测试用例设计。而编写边界值测试用例的基本步骤通常可以分为如下两点。1. 根据设计文档或输入输出框提示信息确定边界值2. 选取等于、略大于、略小于边界的值作为测试数据边界值测试分类按照是否有效以及变量个数,边界值可以严格的分为如下四种。

2017-03-30 17:40:25 7760

原创 Clarity国际化分析

前端的世界永远是那么的日新月异,在过去的几年中,笔者就亲身经历了从原生JS/DOM/Ajax时代,到YUI/jQuery/ExtJS时代,再到Ember/Backbone/Bootstrap时代 ,转而至今日的Angular,React/Redux,Vue,Sass,Less,Node,ES6/7。古圣人尝曰:“江山代有框架出,更领风骚几个月”,诚不吾欺也。然而对所有framework来说,其命运

2017-03-23 23:14:15 9713

原创 ET那些事儿

时至今日,业内已存在多种ET方法了,也都各有优劣。这其中有一些只适用于特定领域,例如bug bash ET和freestyle ET等。笔者在这里介绍由JamesBach先生创建的一种结构化的ET,其中包括以下几个概念。·        Session一个session就是分配给一个ET的时间段,在特定的session内,测试人员可以使用类似于ET Reporter的工具对测试脚印进行记录

2017-03-17 17:49:42 4109

原创 ET Reporter

上文书提到面对ET的几大问题,包括如何进行记录?一单记录下来,跟ST的区别又是什么?以及即便面对ET的结果,如何判断feature是否被充分覆盖等。先来说说结果记录,这可是一定要有的,但用什么工具呢?小贴纸,notepad之类原则上其实都是ok的,目的不都是记录下自己探索过的足迹和脚印嘛。但同时考虑到还需要给日后的自己和其他同事作reference,那么简单的贴纸和txt由于不易于

2017-03-07 16:51:54 5449

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除