國際化思考

so_easy發表於2022-03-15

支援國際化需要解決哪些問題呢?

  • 語言包
  • 時區
  • 貨幣

圍繞這些問題看看如何解決呢?

語言包

網路上很多關於解決國際化語言包的通用辦法,最簡單的就是透過讀取專案內的語言包配置。

|— locale_zh-CN.ini
|— locale_en-US.ini

JAVA, Go,PHP 都有支援讀取配置的方法。

對於少量的有限的語言包這麼支援完全OK,但是如果一個公司面向國際化不僅僅是支援網站的語言切換,還可能面向各個業務。這個時候就迫切的需要一個集中管理國際化語言包的部門。

於是我們現在的語言包流程是這樣的:
產品需求 》文案稽核 》文案推送 》獲取文案

產品需求整理出專案中用到的所有文案KEY,然後透過L10N提交所有文案KEY。翻譯中心(一批語言專家)將對應的文案翻譯成對應的語言。然後L10N會把所有的語言壓縮打包放到不同的伺服器下。

公司統一管理的伺服器,讀取的語言包路徑也都是統一的。然後透過提供好的SDK去獲取文案即可。

這麼做有什麼好處呢?

  • 解藕PRD和RD:RD無需關心文案是否翻譯完成,只需要有文案KEY即可繼續開發。提高RD開發效率。
  • 減少溝通成本:PRD只需要往文案中心增加文案KEY,RD只需要從文案中心獲取KEY。中間不需要任何溝通成本。
  • 擴充套件性強:新增國家語言時,不會對原來的專案產生任何影響。

不好的地方:

  • 成本變高:運營成本,翻譯成本。

這裡面涉及到的技術細節有哪些呢?

  • 如何保證文案推送服務成功且高效?
  • 文案替換後如何保證線上一致性和時效性?

時區

基本知識

更好的瞭解國際時間傳送門

預設的時間戳是從1970-01-01 00:00:00到現在的秒數。不同的國家對應的時區不同。

時區:為了不同地區的人能夠按行為習慣表述自己所在的時間,又能夠國際化通用。於是提出了時區概念。

GMT:確定時區規則後,會議還規定英國(格林尼治天文臺舊址)為零時區。這就誕生了第一個世界時(Universal Time,縮寫為UT):格林尼治標準時間(Greenwich Mean Time,縮寫為GMT,又稱格林尼治平時)。

GMT 12:00就是指格林尼治天文臺當地的中午12:00,而GMT+8 12:00,則是指的東八區的北京當地時間的12:00。

GMT稱之為UT0,由於GMT的計算方式存在秒差,後來制定新的標準UT1,UT2。

UTC:協調世界時(Universal Time Coordinated,縮寫為UTC。UTC是當前的世界標準時間。

CST (中國標準時間) 是UTC+8時區的知名名稱之一,比UTC(協調世界時)提前8個小時與UTC的時間偏差可寫為+08:00.

CST可以代表如下四個不同的時區:

  • Central Standard Time (USA) UT-6:00:美國標準時間
  • Central Standard Time (Australia) UT+9:30:澳大利亞標準時間
  • China Standard Time UT+8:00:中國標準時間
  • Cuba Standard Time UT-4:00:古巴標準時間

時區程式碼

當地時區參考

// 北京時間
ti := time.Now()
fmt.Println(ti)
fmt.Println(ti.Unix())
// 紐約時間
locale, _ := time.LoadLocation("America/New_York")
ti = time.Now().In(locale)
fmt.Println(ti)
fmt.Println(ti.Unix())

// 格式化成中國習慣性格式
// fmt.Println(ti.Format("2006-01-02 15:04:05"))

輸出:

2022-03-14 15:09:17.607935 +0800 CST m=+0.010896917
1647241757
2022-03-14 03:09:17.614962 -0400 EDT
1647241757

這麼做的麻煩之處在於我們需要知道時區才能夠轉換為當地時間。但是一般業務方只會提供國家或者城市ID。不同的國家展示時間格式也不同,對於一個公司來說為了避免每個開發人員都去了解這些,而且這個過程中出錯的機率極大。因此會統一提供SDK呼叫。如此每個呼叫方只要下載這個SDK並且透過國家或者城市ID呼叫其中的方法即可。

公司的做法是:將不同的國家下的城市,透過配置平臺以key:value的形式配置好。然後在獲取的時候透過拼好的key去獲取value。然後結合Go的工具包去處理。

key:國家,城市,版本
value:時區,偏移,省會,名稱

不同情況具體分析。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章