最近接到乙個海外專案業務需求,專案最終會被來自不同國家的客戶所使用,期望能讓客戶有乙個良好的使用者體驗,因此前端需要適配國際化。
乍一聽,這個海外專案需求並沒有什麼特別的地方,似乎就多了乙個國際化適配。但細細一想,事情可沒這麼簡單,前端開發面臨了很多新的問題。下面梳理一下國際化開發中通常會面臨的挑戰:
文案樣式需要特別注意,不同語言的文字,可能會有不同的表現。例如下面兩張圖所示:
頁面上展示日期或數量的地方,也是需要做國際化適配。
很多中東國家的語言習慣都是 rtl,可以嘗試使用 direction 和 transform 來解決。
如果你想把國際化做的足夠精細,那麼國際化也是需要考慮的。
如果使用了第三方 ui 元件,如:elementui、ant design ui 等,這些 ui 框架通常都宣稱支援國際化,但支援的國際化語言數量有限,並不一定能滿足業務需求。
大量的文案需要被提取出來,被提取出來的文案最終會被合併到乙個檔案中去,如:en-us.json。這些工作如果通過手工完成,那麼工作量會是非常巨大的。
以上列舉出了很多挑戰,但實際上「頁面文案處理」才是最主要的矛盾,因為它直接導致前端開發工作量和維護成本的激增。下面我們重點來討**案處理思路,其實從實現國際化的角度來看,jquery、vue、react 等都只是載體而已,實現思路都是相通的,因此國際化文案處理與具體的技術框架並不耦合。接下來將會丟擲幾種國際化文案處理思路,每種思路對生產力和生產關係的要求有高有低,姑且將其分別對應為石器時期、青銅時期、**時期。
傳統的國際化開發流程:前端開發到一定階段,將文案提取到資源檔案(通常為 en-us.json),然後將資源檔案傳送給翻譯團隊,翻譯團隊翻譯出各國語言版本的文案,每種語言對應乙個資源檔案,最後將這些資源檔案發回給前端開發人員,前端開發人員更新到自己本地。如下圖所示:
這是國際化開發的基本流程,「前端開發」和「翻譯團隊」是必不可少的兩個節點,但它們相互之間依賴的太重。「提取文案」的過程本質上是在重複勞動,因此可以考慮由程式來完成。
import react, from 'react';
import from 'react-intl';
import qs from 'querystring';
import logo from './logo.svg';
import default_messages from './i18n/en-us.json';
const default_locale = 'en-us';
state = ;
componentwillmount() .json`);
debugger;
this.setstate();
} render() = this.state;
return (
id="welcome"
defaultmessage=
/>
zh-cn
en-us
);}}
前面分析了「提取文案」的過程本質上是在重複勞動,那我們看看有沒有辦法進行改進。我們可以先對比一下「無國際化需求」和「有國際化需求」時的前端開發流程。如圖所示:
可以看出右邊多了三個過程:
將文案提取為變數
為變數命名,要合乎其場景
將變數和文案資訊存到資源檔案
這裡我們提出乙個期望或願景:希望能像開發普通業務一樣去開發有國際化需求的業務!
為了達成這一願景,我們需要有乙個工具:它能夠掃瞄指定的檔案,並能識別出檔案中的字串,然後能根據字串的含義生成變數名,並用變數表示式替換掉原來的字串,最後能夠將提取出來的變數自動追加到資源檔案中。
如何實現這樣的工具?我們可以用 babel 將js檔案解析為一顆語法樹,然後遍歷並找出字串節點,接下來呼叫 google cloud translation api 將字串翻譯為英文,並以此作為變數名得到變數表示式,最後用變數表示式替換掉原來的文字即可。如下圖所示:
幸運的是,i18n-pick 已經有那麼點味道了~
這是站在開發層面,對前端開發體驗和開發效率提出的改進辦法,將重複的事情交給程式去完成。
有了石器時期的生產方式作為鋪墊,我們可以在此基礎上繼續做改進。既然「前端開發」和「翻譯團隊」之間依賴的太重,那我們可以在中間加乙個節點「文案配置平台」。前端將提取的文案直接上傳到「文案配置平台」,翻譯團隊直接在「文案配置平台」上進行文案翻譯,前端直接從「文案配置平台」獲取翻譯後的最新文案。
這是從架構層面對國際化開發方式進行優化和提效,一般大的網際網路公司因為其自身業務的複雜度,都早已沉澱出很多的通用能力平台。
以上每種思路都有各自適用的場景,實際生產中需要從開發成本、開發體驗、後期維護、能力沉澱等多維度進行考慮。這篇文章旨在拋磚引玉開啟思路,各位看官可以將自己的思路丟擲來一起討論。
非常歡迎有激情的你加入 es2049 studio,簡歷請傳送至 caijun.hcj(at)alibaba-inc.com 。
聊聊前端國際化文案該如何處理
最近接到乙個海外專案業務需求,專案最終會被來自不同國家的客戶所使用,期望能讓客戶有乙個良好的使用者體驗,因此前端需要適配國際化。乍一聽,這個海外專案需求並沒有什麼特別的地方,似乎就多了乙個國際化適配。但細細一想,事情可沒這麼簡單,前端開發面臨了很多新的問題。下面梳理一下國際化開發中通常會面臨的挑戰 ...
聊聊前端國際化文案該如何處理
最近接到乙個海外專案業務需求,專案最終會被來自不同國家的客戶所使用,期望能讓客戶有乙個良好的使用者體驗,因此前端需要適配國際化。乍一聽,這個海外專案需求並沒有什麼特別的地方,似乎就多了乙個國際化適配。但細細一想,事情可沒這麼簡單,前端開發面臨了很多新的問題。下面梳理一下國際化開發中通常會面臨的挑戰 ...
Android 國際化文案判斷
判斷是否存在映象 public static boolean isrtl 判斷字串開頭是不是映象語言字元 public static boolean stringstartisrtlcharacter string string char charac string.charat 0 charact...