<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[国际化梦工厂]]></title><description><![CDATA[专注国际化开发和测试，只聊干货拒绝扯淡！]]></description><link>https://blog.youkuaiyun.com/spring1208</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; spring1208]]></copyright><item><title><![CDATA[Singleton之我见（六）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/126169526</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/126169526</guid><author>spring1208</author><pubDate>Fri, 05 Aug 2022 02:42:49 +0800</pubDate><description><![CDATA[新版本的Singleton中引入了I18nContext这一概念，旨在管理来自不同环境的变量，I18nContext本质上是对Local Storage的一层封装。它携带了pseudoEnabled, i18nEnabled, preferredLanguage和跨组件、跨模块（只要在一个domain下）共享的一系列基础信息，同时提供了一种在服务之间加载和共享这些值的方法，而不必显式地在服务中逐级的传递参数。来自localStorage的伪设置，决定是在调试阶段还是在开发阶段显示伪翻译。...]]></description><category></category></item><item><title><![CDATA[Singleton之我见（五）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/125815036</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/125815036</guid><author>spring1208</author><pubDate>Sat, 16 Jul 2022 04:40:40 +0800</pubDate><description><![CDATA[不卖关子啦，因为本例的背景着实非常小众和特殊，不便引发大家的种种推测，这里直接公布答案——本项目中很早就引入了Singleton作为i18n框架，而在随后的岁月中，Singleton本身经过了几次重要的升级，导致老版本和新版本在stringloading的处理上有着两套截然不同的逻辑体系。在产品的中文主页面上的点击导航栏，发现少量模块（如图中所示的Subscription）的内容回退为英文，而在之前的若干轮测试中，该模块已经可以完美的展示中文内容。...]]></description><category></category></item><item><title><![CDATA[Singleton之我见（四）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/125776083</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/125776083</guid><author>spring1208</author><pubDate>Thu, 14 Jul 2022 04:14:40 +0800</pubDate><description><![CDATA[在之前的文章中，已不止一次的给大家介绍了开源国际化开发框架——Singleton。对于企业级大型应用，其优势的确是肉眼可见的。然后，这是否意味着只要引入了Singleton框架，国际化问题或者说国际化中的三层问题就彻底被解决了么？答案是否定的。在接下来的几篇短文中，我想给大家分享的内容就是即便在import Singleton后，因为种种不规范、不推荐的写法和配置下，直接引发了多种奇葩的国际化问题。首先，让我们一起来关注一个字符串读取问题，现象如下：在产品的中文主页面上不断的点击导航栏，发现UI大部分内容都]]></description><category></category></item><item><title><![CDATA[Angular内置管道 vs Singleton（一）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/117141675</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/117141675</guid><author>spring1208</author><pubDate>Sat, 22 May 2021 03:38:35 +0800</pubDate><description><![CDATA[Angular中的内置管道典型作用就是用来格式化数据，举一个最简单的例子。


&lt;p&gt;My birthday is {{ birthday | date }}&lt;/p&gt;
&lt;p&gt;My birthday is {{ birthday | date:"MM/dd/yy" }} &lt;/p&gt;



export class AppComponent {
 birthday = new Date(2021, 4, 20);
 // 需要注意这里的月份要写4而不是5，因为月..]]></description><category></category></item><item><title><![CDATA[理想的Datepicker]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/112600979</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/112600979</guid><author>spring1208</author><pubDate>Thu, 14 Jan 2021 10:18:09 +0800</pubDate><description><![CDATA[山水盘桓，边草缠绵。苍茫一笑，愁在眉宇间。

去国怀乡，旧了红颜，追忆当初。心中已惘然。

……

这首《西风斩》无论词曲都着实让我惊艳，作为《大秦赋》插曲也分外贴合。尽管历朝历代的文人骚客都在对”暴秦“不遗余力的进行着口诛笔伐，尤以贾谊的《过秦论》为甚。然而在我眼中，这不过是六国那些被褫夺了昔日封地和特权后的王公贵族们的哀怨和私愤。且不谈其他，只说赵政的”书同文，车同轨“，仅此一点就足以让其在整个中华帝国的历史长河中屹立不倒，真可谓”千载谁堪伯仲间“！其意义如何？用今时今日的话来说就是——哥们制定了整个行]]></description><category></category></item><item><title><![CDATA[Singleton之我见（三）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/109240320</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/109240320</guid><author>spring1208</author><pubDate>Fri, 23 Oct 2020 12:55:13 +0800</pubDate><description><![CDATA[长久以来，所有软件几乎不约而同的对产品翻译资源文件均采用了作为代码一部分的方式统一发布并高度内聚。这样的方式自然有其显而易见的好处，例如不会因为产品本地化而引入任何新的安全问题，性能问题等。然而他带来的问题也不容小觑，作为资深的国际化开发或测试工程师来说，以下场景想必不会陌生。

客户：贵公司本地化产品中XX页面上的翻译存在歧义，甚至会严重误导用户。

工程师：谢谢您的反馈，我们已详细记录了该问题，将在下个版本中修复。

客户：那下个版本何时发布呢？

工程师：请再耐心等待半年。

客户：……



如果.]]></description><category></category></item><item><title><![CDATA[Singleton之我见（二）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/108289929</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/108289929</guid><author>spring1208</author><pubDate>Sat, 29 Aug 2020 07:37:20 +0800</pubDate><description><![CDATA[在国际化软件的时间日期格式方面，我们耳熟能详的有Moment，GlobalizeJS等，那么Singleton又是如何解决该问题呢？

宏观上看，Singleton并没有使用嵌入源码的lib模式，而是提供了两个service（目前共发布了两个版本的API，v1做出初始版本已基本被弃用，v2经过与多个产品磨合后，成为了包含类型最多并且较接近Restful API风格的一版，本文所有效果都基于后者）。

Singleton的格式API，已经覆盖的国际化关注点包括了日期时间、数字、货币、计量单位、单复数，主要AP]]></description><category></category></item><item><title><![CDATA[Singleton之我见（一）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/107679820</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/107679820</guid><author>spring1208</author><pubDate>Thu, 30 Jul 2020 01:22:54 +0800</pubDate><description><![CDATA[不知大家是否还记得两年前笔者曾贴出的一张照片（图片拍摄于Unicode Conference），期间列举了国际化前端生态圈中比较主流的框架，Globalize和Moment系数在列，笔者也曾花费不少笔墨对他们进行剖析。



本文开始，我准备和大家分享另外一个相对小众的国际化框架Singleton，相比于Globalize（GitHub 4.4k颗星）和Moment（GitHub 44.4k颗星），Singleton在GitHub上的星星目前仍不足百（https://github.com/vmware/si]]></description><category></category></item><item><title><![CDATA[国际化视角看Kubernetes]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/106011278</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/106011278</guid><author>spring1208</author><pubDate>Sat, 09 May 2020 08:33:16 +0800</pubDate><description><![CDATA[作为一个管理跨多台主机的集合体应用程序的开源系统，源自Google十年容器化基础架构Borg的Kubernetes（下文简称K8s）提供了部署、维护和扩展应用程序的基本机制。因为K8s具有的轻量级，消耗资源小，开源，弹性伸缩和负载均衡等特点，使其已经成为了业内的通用PaaS平台。

介绍K8s架构，功能以及应用的文章可谓汗牛充栋，而本文尝试用国际化视角（I18n）来解读和剖析K8s。先来关注K8s的各部分组件，其中包括etcd（一个可信赖的分布式键值对存储服务，能否为整个分布式集群存储一些关键数据，协助分布]]></description><category></category></item><item><title><![CDATA[Docker与国际化]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/104585662</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/104585662</guid><author>spring1208</author><pubDate>Sun, 01 Mar 2020 00:48:33 +0800</pubDate><description><![CDATA[也曾一度认为Docker跟国际化基本扯不上什么关系，直到近期发现了这个bug方体会到一叶障目，学海无涯。



问题如下，在使用Docker作为容器的系统中添加了一个名为非英文字符的组织名后，多处信息提示中都出现了该组织名的乱码形式，如下图所示。





看到该问题，我的第一反应是JsonEncoding出了问题，并果（wǔ）断提出了可行（miù wù）的解决方案。


JsonGenera...]]></description><category></category></item><item><title><![CDATA[Angular I18n 五部曲]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/103828756</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/103828756</guid><author>spring1208</author><pubDate>Sat, 04 Jan 2020 02:09:44 +0800</pubDate><description><![CDATA[细翻翻看历史文章，其实关于Angular的总结已经有了不少，然而实际开发和测试工作中发现关于Angular的i18n bug依然层出不穷。近日又碰到一个“页面未载入，请返回上一个页面或重新整理页面再试一次”的问题，而App本应该向用户展示一个带有date-picker的页面，如下图所示。



打开console会发现如下的错误信息。



个人看来，凡是在某个问题上不断犯错，正如“大师兄，师傅和......]]></description><category></category></item><item><title><![CDATA[本地化软件UI部分不显示的一种可能]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/103559090</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/103559090</guid><author>spring1208</author><pubDate>Mon, 16 Dec 2019 11:10:13 +0800</pubDate><description><![CDATA[你是否也曾遇到过这样的情况，经过了本地化的软件UI部分不显示抑或完全不能现实？你是否也曾因此和本地化人员互相传球高达250余脚，但皮球依然还在本方半场，遑论攻门次数。造成这样现象的根本原因可谓千差万别，本文仅针对在部分UI无法正常显示的情况下，一种大概率root cause的预判。



现象如下，当用户进入到Prompt for Device Ownership Type页面的时候，本该出现的...]]></description><category></category></item><item><title><![CDATA[NLP之我见]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/86679929</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/86679929</guid><author>spring1208</author><pubDate>Mon, 28 Jan 2019 17:00:48 +0800</pubDate><description><![CDATA[ 

简介

NLP（自然语言处理）作为CS, AI和Linguistics的交叉学科，目的是让计算机能够处理和理解人类的自然语言，以执行语言翻译或回答问题等任务。随着语音接口和聊天机器人的兴起，NLP成为了AI技术最重要的研究内容之一，但想要充分理解和表达语言含义其实是一个极其困难的目标，因为人类的语言相当晦涩并充满了歧义。说到这儿，一定会有人跳将出来大吼：不对啊，我早就看过新闻，我们中国的科大...]]></description><category></category></item><item><title><![CDATA[幸福的烦恼—当本地化客户端遇上本地化服务器]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/85248566</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/85248566</guid><author>spring1208</author><pubDate>Tue, 25 Dec 2018 15:23:49 +0800</pubDate><description><![CDATA[在国际化开发过程中，遇到过需要校验的地方，你会如何选择？用string value本身进行compare？一旦出现翻译后的内容跟标的mismatch又将如何呢？我们是幸福的，因为身处一个国际化底蕴深厚的团队，无论服务器抑或客户端；我们又是不幸的，源自客户端和服务器进行通信时，数据包括了本地化后的字符串，判断逻辑为我们平添烦恼。近日偶遇一则这样的真实案例，为该情况提供了完美注脚。

故事背景

在A...]]></description><category></category></item><item><title><![CDATA[再读笑傲]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/84389590</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/84389590</guid><author>spring1208</author><pubDate>Fri, 23 Nov 2018 14:28:25 +0800</pubDate><description><![CDATA[飞雪连天射白鹿，笑书神侠倚碧鸳……慕然间查大侠竟就这么离开了，对于一个从小便伴随着“狭义江湖”长大的人来说，唏嘘感叹，黯然神伤着实难免。相信不光是在下，全球华人对金庸先生构建起的武侠世界大抵都不会太陌生——六脉神剑、辟邪剑法、独孤九剑、太极剑、七伤拳、太极拳、乾坤大挪移、凌波微步、金刚指、拈花指、一阳指、天山折梅手、小无相功、降龙十八掌、打狗棒法、九阴真经，九阳神功、紫霞神功、葵花宝典.....但...]]></description><category></category></item><item><title><![CDATA[42th Unicode Conference随笔（二）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/83030112</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/83030112</guid><author>spring1208</author><pubDate>Fri, 12 Oct 2018 17:19:11 +0800</pubDate><description><![CDATA[ 

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

国际化





Locale

默认情况下会设置为en_US，l...]]></description><category></category></item><item><title><![CDATA[42th Unicode Conference随笔（一）]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/82843031</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/82843031</guid><author>spring1208</author><pubDate>Tue, 25 Sep 2018 18:23:22 +0800</pubDate><description><![CDATA[三国曹丕的《典论·论文》中说：“文人相轻，自古而然。”这话其实还有后句的，叫“武人相重”。而我辈应当算作文人？抑或武人呢？窃以为还是偏武多一些，毕竟IT圈儿的主流依然是“夜里挑灯看剑，梦回吹角连营”，吟风弄月的怀橘陆郎多半难成气候。然而面对业内充斥着的各种不厌其烦发明着的轮子，倒也不禁难掩大家平实外表下文人骚客的风骨。毕竟“文无第一，武无第二”，别人提供的框架、代码库怎么都觉得差点儿意思，还是得老...]]></description><category></category></item><item><title><![CDATA[Base64与国际化]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/81948722</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/81948722</guid><author>spring1208</author><pubDate>Wed, 22 Aug 2018 18:10:03 +0800</pubDate><description><![CDATA[ 

背景介绍

抛个问题，什么是base64？何时会用到他？与我们熟知的charset又是怎样的关系呢？跟国际化又有何恩怨呢？先看看wikipedia对其定义吧。

“ Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于 26=64，所以每6个比特为一个单元，对应某个可打印字符。3个字节有24个比特，对应于4个Base64单元，即3个字节可由4个可打印字符来表示。它可用来作为...]]></description><category></category></item><item><title><![CDATA[path的锅？]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/81740352</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/81740352</guid><author>spring1208</author><pubDate>Thu, 16 Aug 2018 14:13:01 +0800</pubDate><description><![CDATA[用Python进行国际化编码的兄弟对这个错误大抵应该是不陌生的——“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”。根据业内“公认”的鄙视链，恭喜老铁们，大家应该都稳稳的占据了第三顺位……不过窃以为这张插图还未画完 ，悬揣接下来的应该是遇到了U...]]></description><category></category></item><item><title><![CDATA[为moment.js正名]]></title><link>https://blog.youkuaiyun.com/spring1208/article/details/81143408</link><guid>https://blog.youkuaiyun.com/spring1208/article/details/81143408</guid><author>spring1208</author><pubDate>Sat, 21 Jul 2018 12:34:22 +0800</pubDate><description><![CDATA[说来也奇怪，总有人在耳边说moment.js对国际化日期支持不好，坚决不要使用，会带来很多问题之类的话。但就我个人经验来看，还从未见到过任何一个反例，恰好我又是个不信邪的人，并坚持认为检验真理的唯一标准就是小马过河，所以今儿我就准备趟趟水，是骡子是马，咱们拉出来溜溜呗，走起来。

 

首先，部署方式有如下几种：


npm install moment --save   # npm
yarn a...]]></description><category></category></item></channel></rss>