今年上半年疫情在家办公期间发现Emoji有了更新,于是进行了Emoji 13.0内容的更新和添加,而下半年9月份就有了Emoji 13.1版本推出,我们拖后了一段时间,11月份才进行补充和更新,现在把一些数据来源及更新工作进行记录,以便以后再有新版本出的时候能更顺利地进行补充和更新。
一、Emoji v13.1数据来源
主要数据来源无疑就是Unicode官方网站:
- Unicode® Emoji Charts v13.1(首页)
- Unicode Emoji 数据文件 v13.1 (emoji-sequences.txt, emoji-zwj-sequences.txt, emoji-test.txt, ReadMe.txt)
- 相关数据文件 (还是v13.0的,没有v13.1的,emoji-data.txt, emoji-variation-sequences.txt)
- Emoji 列表, v13.1 (不含肤色变体,1816个)
- 完整 Emoji 列表, v13.1 (包含肤色变体,1816个)
- 完整 Emoji 修饰符序列, v13.1 (1705个)
- Emoji 数量, v13.1 (全部3521个)
- Emoji 排序, v13.1 (1821个)
- Unicode® 技术标准 #51
- Emoji 版本, v13.1(新增117(emoji 13.0) + 217(emoji 13.1) = 334个)
- Emoji Versions & Sources
- Emoji Presentation Sequences
- Text vs Emoji
- Emoji Default Style (html)
- Emoji Default Style (text)
我主要处理的是3个数据文件,编写3个PHP程序来分别处理:
- 13.1.emoji-test.txt.php(处理emoji-test.txt,添加新Emoji,设置qualified_status,程序后面添加循环检查table_all中内容,删除不符合这个文件的属性数据)
- 13.1.emoji-zwj-sequences.txt.php(处理emoji-zwj-sequences.txt,处理5个分类下的零宽连接符序列,程序最后部分也加入循环对比table_all中内容的程序)
- 13.1.emoji-sequences.txt.php(处理emoji-sequences.txt,设置type_field,程序最后添加循环table_all中所有符号,检查 type_field 是否相同,不同的进行修改)
二、CLDR通用语言仓库翻译导入
这3个文件处理后就新增了几百个v13.1的Emoji,但只有英文名称,下一步就是添加翻译:
- 下载cldr common v38.0,解压上传annotations和annotationsDerived下的各种语言xml文件到服务器
- 修改annotations-import.php 来读取 cldr-common-38.0/annotations中的文件,对比short name和keywords,导入翻译内容
- 修改annotations-derived-import.php 来读取 cldr-common-38.0/annotationsDerived中的文件,对比short name和keywords,导入翻译内容
- 新建fill-more-emoji.php,整合以前的temp.php, temp2.php, temp3.php, temp4.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 v13.1下载的html文件到emoji/13.1/web/下,准备用程序来进行后续处理
- 重新排序,编写13.1.emoji-list-html-to-list-number.php,读取list.html,更新list_number,模拟可以运行了,但未实际执行,因为虽然数量上一个版本是1814,一个版本是1816,相差不大,但包含的emoji至少有几十个差异,顺序、分类也都变了,怕影响首页及各分类显示,准备14.0出来(13.1得到全面支持)的时候再更新到13.1
- 重新分类,也是因为与13.0相差好几十个,怕影响首页及各分类显示,准备14.0出来(13.1得到全面支持)的时候再更新到13.1
四、图片获取补充
- 运行 get-files-from-urls.php,下载html页面保存到文件
- 运行 get-images-from-files.php,获取各个平台各个版本的emoji图片,需要时间很长,持续很多个小时运行,如果有错误、失败的,重新运行几次,直到错误、失败数量减到最小
- 整理对比下载的各个平台目录,下属各种尺寸,再下属各个版本,找出n个平台有更新,复制到对应的网站图片显示目录中就可以,Linux下用\cp这样的命令复制(遇到同名的自动覆盖),以后可以考虑也编写一个php程序来进行复制和统计(2021-9-13补充,新增copy-images-to-web.php程序,专用于更新图片的复制、覆盖、统计等工作)
五、结果
217个Emoji v13.1的Emoji列表:https://www.emojiall.com/zh-hans/emoji-version/13.1,点击其中某个链接进入查看某个Emoji详情。
评论2
博主的PHP学的很好吧?这些功能基本都是自己写的吗?
博主的PHP学的很好吧?这些功能基本都是自己写的吗?不算很好,用Drupal后被迫自学的PHP
不算很好,用Drupal后被迫自学的PHP,简单的东西能自己编写,免得要找其他程序员帮忙也是麻烦