`Intl.DisplayNames`
面向全球使用者的網頁應用需要以多種語言展示語言、地區、文字書寫系統和貨幣的名稱。這些名稱的翻譯需要數據,而這些數據可從 Unicode CLDR 獲取。將這些數據作為應用的一部分進行打包會增加開發成本。用戶傾向於一致的語言和地區名稱翻譯,並且隨著世界的地緣政治變化保持數據的最新需要不斷的維護。
面向全球使用者的網頁應用需要以多種語言展示語言、地區、文字書寫系統和貨幣的名稱。這些名稱的翻譯需要數據,而這些數據可從 Unicode CLDR 獲取。將這些數據作為應用的一部分進行打包會增加開發成本。用戶傾向於一致的語言和地區名稱翻譯,並且隨著世界的地緣政治變化保持數據的最新需要不斷的維護。
你可能已經熟悉 Intl.NumberFormat
API,因為它在現代環境中已被支援了一段時間。
在其最基本的形式中,Intl.NumberFormat
讓您可以建立一個可重用的格式器實例,支援語系感知的數字格式化。就像其他 Intl.*Format
API 一樣,格式器實例同時支持 format
與 formatToParts
方法:
現代的網絡應用通常使用包含動態數據的列表。例如,一個相片查看應用可能顯示如下內容:
此相片包括 Ada、Edith、和 Grace。
一款文字遊戲可能會顯示另一種類型的列表:
選擇你的超能力:隱形、心靈控制、或 共情能力。
由於每種語言的列表格式化習慣和詞語各不相同,實現一個本地化的列表格式化器並非易事。不僅需要獲取所有希望支持語言中的相關詞語(如上例中的 “and” 或 “or”),還需要對所有這些語言的格式化習慣進行編碼!Unicode CLDR 提供這些數據,但要在 JavaScript 中使用它,這些數據需嵌入並隨其他庫代碼一起傳遞。這樣不幸會增加庫的捆綁大小,進而對加載時間、解析/編譯成本及內存消耗造成負面影響。
Iñtërnâtiônàlizætiøn 很難。處理複數是許多看似簡單的問題之一,直到你意識到每種語言都有自己的複數規則。
對於英文複數規則,只有兩種可能的結果。讓我們以“cat”這個詞為例:
全新的 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')