跳至主要内容

5 篇文章 含有標籤「Intl」

檢視所有標籤

`Intl.DisplayNames`

· 閱讀時間約 4 分鐘
Shu-yu Guo ([@_shu](https://twitter.com/_shu)) 和 Frank Yung-Fong Tang

面向全球使用者的網頁應用需要以多種語言展示語言、地區、文字書寫系統和貨幣的名稱。這些名稱的翻譯需要數據,而這些數據可從 Unicode CLDR 獲取。將這些數據作為應用的一部分進行打包會增加開發成本。用戶傾向於一致的語言和地區名稱翻譯,並且隨著世界的地緣政治變化保持數據的最新需要不斷的維護。

`Intl.NumberFormat`

· 閱讀時間約 4 分鐘
Mathias Bynens ([@mathias](https://twitter.com/mathias)) 與 Shane F. Carr

你可能已經熟悉 Intl.NumberFormat API,因為它在現代環境中已被支援了一段時間。

在其最基本的形式中,Intl.NumberFormat 讓您可以建立一個可重用的格式器實例,支援語系感知的數字格式化。就像其他 Intl.*Format API 一樣,格式器實例同時支持 formatformatToParts 方法:

`Intl.ListFormat`

· 閱讀時間約 3 分鐘
Mathias Bynens ([@mathias](https://twitter.com/mathias)) 和 Frank Yung-Fong Tang

現代的網絡應用通常使用包含動態數據的列表。例如,一個相片查看應用可能顯示如下內容:

此相片包括 Ada、Edith、 Grace

一款文字遊戲可能會顯示另一種類型的列表:

選擇你的超能力:隱形、心靈控制、 共情能力

由於每種語言的列表格式化習慣和詞語各不相同,實現一個本地化的列表格式化器並非易事。不僅需要獲取所有希望支持語言中的相關詞語(如上例中的 “and” 或 “or”),還需要對所有這些語言的格式化習慣進行編碼!Unicode CLDR 提供這些數據,但要在 JavaScript 中使用它,這些數據需嵌入並隨其他庫代碼一起傳遞。這樣不幸會增加庫的捆綁大小,進而對加載時間、解析/編譯成本及內存消耗造成負面影響。

`Intl.RelativeTimeFormat`

· 閱讀時間約 5 分鐘
Mathias Bynens ([@mathias](https://twitter.com/mathias))

現代的網頁應用程式通常會使用「昨天」、「42秒前」或「3個月後」此類短語,而不是完整的日期和時間戳。這些 相對時間格式化值 已變得如此常見,以至於許多流行的函式庫都實作了能夠以本地化方式格式化它們的工具函數。(例子包括 Moment.jsGlobalizedate-fns。)

`Intl.PluralRules`

· 閱讀時間約 4 分鐘
Mathias Bynens ([@mathias](https://twitter.com/mathias))

Iñtërnâtiônàlizætiøn 很難。處理複數是許多看似簡單的問題之一,直到你意識到每種語言都有自己的複數規則。

對於英文複數規則,只有兩種可能的結果。讓我們以“cat”這個詞為例:

  • 1 cat,也就是 'one' 形式,英文中稱為單數
  • 2 cats,但也包括 42 cats、0.5 cats 等,也就是 'other' 形式(唯一的另一種),英文中稱為複數。

全新的 Intl.PluralRules API 告訴你根據給定的數字,某種語言應使用哪種形式。

const pr = new Intl.PluralRules('en-US');
pr.select(0); // 'other' (例如 '0 cats')
pr.select(0.5); // 'other' (例如 '0.5 cats')
pr.select(1); // 'one' (例如 '1 cat')
pr.select(1.5); // 'other' (例如 '0.5 cats')
pr.select(2); // 'other' (例如 '0.5 cats')