去年上半年我们进行了Emoji 13.0内容的更新和添加,而下半年更新和添加Emoji 13.1版本内容,我们往往都拖后了一段时间,几个月后才进行补充和更新,而这次Unicode 14.0和Emoji 14.0的发布时间是在推出前我们就了解到的,并提前做了准备工作,在正式发布的前一天我们就基本上都做到位了。✌️
下面记录一下我们做的一些工作:
一、Unicode v14.0/Emoji v14.0数据来源
主要数据来源无疑就是Unicode官方网站:
- Unicode® 14.0.0(新增838个字符,其中37个Emoji)
- Unicode® Emoji Charts v14.0(首页)
- Emoji相关数据文件 v14.0 (emoji-sequences.txt, emoji-zwj-sequences.txt, emoji-test.txt, ReadMe.txt)
- Unicode相关数据文件 (emoji-data.txt, emoji-variation-sequences.txt, ReadMe.txt)
- Emoji 列表, v14.0 (不含肤色变体,1853个,13.1是1816个)
- 完整 Emoji 列表, v14.0 (包含肤色变体,1853个,13.1是1816个)
- 完整 Emoji 修饰符序列, v14.0 (1780个,13.1是1705个)
- Emoji 数量, v14.0 (全部3633个,13.1是3521个)
- Emoji 排序, v14.0 (1858个,13.1是1821个)
- Unicode® 技术标准 #51
- Emoji 版本, v14.0(新增37(Unicode 14.0) + 75(20个肤色组合、55个ZWJ组合) = 112个)
- Emoji Versions & Sources, v14.0
- Emoji Presentation Sequences, v14.0
- Text vs Emoji, v14.0
- Emoji Default Style (html), v14.0
- Emoji Default Style (text), v14.0
我主要处理的是5个数据文件,编写5个PHP程序来分别处理:
- 14.0.emoji-test.txt.php(处理emoji-test.txt,添加新Emoji,设置qualified_status,程序后面添加循环检查table_all中内容,删除不符合这个文件的属性数据)
- 14.0.emoji-zwj-sequences.txt.php(处理emoji-zwj-sequences.txt,处理5个分类下的零宽连接符序列,程序最后部分也加入循环对比table_all中内容的程序)
- 14.0.emoji-sequences.txt.php(处理emoji-sequences.txt,设置type_field,程序最后添加循环table_all中所有符号,检查 type_field 是否相同,不同的进行修改)
- 14.0.emoji-data.txt.php(处理emoji-data.txt,核对Property的6种属性)
- 14.0.emoji-variation-sequences.txt.php(处理emoji-variation-sequences.txt,处理text style、emoji style)
二、CLDR通用语言仓库翻译导入
这5个文件处理后就新增了一百多个v14.0的Emoji,但只有英文名称,下一步就是添加翻译:
- 下载cldr common v40.0(目前还没有正式推出,可以去github上下载最新的开发版本),解压上传annotations和annotationsDerived下的各种语言xml文件到服务器
- 修改annotations-import.php 来读取 cldr-common-40.0/annotations中的文件,对比short name和keywords,导入翻译内容
- 修改annotations-derived-import.php 来读取 cldr-common-40.0/annotationsDerived中的文件,对比short name和keywords,导入翻译内容
- 新建fill-more-emoji.php,批量补充更多缺少short name和keywords翻译的emoji(带有FE0F的Emoji没有short_name就尝试用不带FE0F的Emoji的short_name来补充、带有FE0F的Emoji没有keywords就尝试用不带FE0F的Emoji的keywords来补充)
- 其它杂项:人工检查缺少short name和keywords的Emoji、补充emoji_all表有而各语言表缺少一个emoji、keywords有超过256个字符的情况修改字段长度等
三、其它检查和处理:
- 编写check_emoji_all_update.php,检查emoji_all表中内容,符合设定条件的进行更新操作,用上述程序检查emoji version,主要是qualified_status不是fully-qualified和component的emoji_version设置为空,解决大部分问题,少部分问题逐个版本核对、人工修改,最后完全正确
- 修改上述程序,用于unicode version的核对,但发现无法核对匹配,因为有些非emoji字符只在我们网站(例如:多米诺骨牌、扑克牌、麻将、中国象棋、国际象棋等),有些非emoji字符只在其它emoji网站(例如:White Circle with Dot Right、Cross Pommee等),而且其它emoji网站的unicode version列表页面中的emoji有些是带有fe0f的,最后放弃核对,只纠正、补充了少量明显问题
- 上传emoji v14.0下载的html文件到emoji/14.0/web/下,准备用程序来进行后续处理
- 重新排序,编写14.0.emoji-list-html-to-list-number.php,读取list.html,更新list_number,模拟可以运行了,但未实际执行,因为虽然数量上一个版本v13.0是1814,新一个版本v14.0是1853,相差不大,但包含的emoji至少有几十个差异,顺序、分类也都变了,怕影响首页及各分类显示,准备15.0出来(14.0得到全面支持)的时候再更新到14.0
- 重新分类,也是因为与13.0相差好几十个,怕影响首页及各分类显示,准备15.0出来的时候再更新到14.0
四、图片获取补充
- 运行 get-files-from-urls.php,下载html页面保存到文件
- 运行 get-images-from-files.php,获取各个平台各个版本的emoji图片,需要时间很长,持续很多个小时运行,如果有错误、失败的,重新运行几次,直到错误、失败数量减到最小
- 整理对比下载的各个平台目录,下属各种尺寸,再下属各个版本,找出n个平台有更新,复制到对应的网站图片显示目录中就可以,2021-9-13新增copy-images-to-web.php程序,专用于更新图片的复制、覆盖、统计等工作
五、结果
112个Emoji v14.0的Emoji列表:https://www.emojiall.com/zh-hans/emoji-version/14.0,点击其中某个链接进入查看某个Emoji详情。
另外,这次14.0更新的时候,同事们也一起行动起来,编辑了几十个新Emoji的描述、举例、别名、相关Emoji等信息,进行了几十种语言的全部翻译工作。👍
六、后续
后续还有一部分工作需要去做:
- 各个新Emoji的提案进行了人工核对、更新;
- 从Unicode提案中截取了新Emoji的图片,加到我们网站中的Sample平台页;
- 分类、子分类按照最新进行调整;
- 顺序号重新采集、修改,菜单重新排列;
- CLDR 40正式版10月26日出了以后再次更新CLDR数据。
从2019年初我们开始做EmojiAll这个项目开始,经历了Emoji v12.0、12.1、13.0、13.1、14.0这几个版本,我们对Unicode标准的理解也很清晰了,更新做起来也很顺利,目前国内几个Emoji站基本都是学着我们做起来的,要跟上我们的更新步伐也是不容易的事情,国际上能迅速更上Unicode标准进行更新的网站也是很少数的。
几大操作系统(Google的Android、Microsoft的Windows、Apple的iOS和MacOS)和几大社交媒体平台和手机厂商(Twitter、Facebook、Samsung、LG等)对14.0新Emoji的图片支持也都是需要经过几个月到一年的时间。期待中......
评论