Angular 18+ 高階教程 – 國際化 Internationalization i18n (Draft)

兴杰發表於2024-09-16

介紹

先講講名詞。

Internationalization 的縮寫是 i18n,中文叫國際化。

Globalization 是 Internationalization 的同義詞,都是指國際化。

Localization 的縮寫是 l10n,中文叫本地化。

i18n vs l10n

一個國際化,一個本地化,它倆有什麼區別,又有什麼關係呢?

我們來看一個具體的例子

上圖是蘋果公司給美國人訪問的官網,內容是 iPhone 16 Pro 的售價。

文字使用的是美式英文 (en-US),價錢使用的是美金 (USD)。

好,我們再看另外兩張圖

圖一是蘋果公司給中國人看的官網,圖二則是給日本人看的官網

中國人看的是簡體中文 (zh-Hans-CN) 和人民幣 (CNY)。

日本人看的是日文 (ja-JP) 和日元 (JPY)。

三個網站銷售的都是 iPhone 16 Pro。網站設計、排版都一模一樣。

唯一的區別就是,網站會依據不同的國家,顯示對應的語言和貨幣。

像這樣一個網站,我們就可以說:蘋果公司的官網支援國際化,同時也落實了本地化。

所謂支援國際化,意思是,網站架構有能力 handle 不同的語言,貨幣,時區。(設計,功能全都一樣,就語言,貨幣,時區不同)

所謂落實本地化,意思是,網站不僅有能力 handle 不同語言,而且它確實做出來了。

國際化指的是一個方案 / preparation,本地化則是具體的實現。

Angular i18n

Angular 有 built-in 的 i18n 方案。我們使用 Angular 就能做出像蘋果公司那樣支援國際化的網站。

本篇會 step by step 教 i18n,但不會講解原理,也不會逛原始碼,開始吧 🚀。

參考

YouTube – Introduction to Internationalization in Angular

Docs – Angular Internationalization

Angular i18n step by step

建立一個新專案

ng new i18n --routing=false --ssr=false --skip-tests --style=scss

安裝 localize package

ng add @angular/localize

提醒:是 ng add 不是 yarn add 哦。

它會做好幾件事情:

  1. package.json


    安裝了 @angular/localize package。

    注意看,它是安裝到了 devDependencies 裡哦。

    這也意味著,Angular i18n 是在 compile 階段完成的,而不是在 runtime。

  2. angular.json

    多了一個 polyfill。上一 part 我們說 i18n 發生在 compile 階段,但也不完全。有一小部分還是要 runtime 配合來完成的。

    這個 polyfill 就用在這些地方。

  3. tsconfig

    main.ts


    還需要 TypeScript 配合,因為 runtime 會用到一些全域性變數。

目錄

上一篇 Angular 18+ 高階教程 – Memory leak, unsubscribe, onDestroy

下一篇 TODO

想檢視目錄,請移步 Angular 18+ 高階教程 – 目錄

喜歡請點推薦👍,若發現教程內容以新版脫節請評論通知我。happy coding 😊💻

相關文章