去年上半年我們進行了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的圖片支持也都是需要經過幾個月到一年的時間。期待中......
评论