了解如何使用JavaScript進行國際化
Intl
是一個強大的對象,它暴露了JavaScript國際化API。
它公開了以下屬性:
Intl.Collator
:使您可以訪問對語言敏感的字符串比較Intl.DateTimeFormat
:使您可以訪問對語言敏感的日期和時間格式Intl.NumberFormat
:使您可以訪問對語言敏感的數字格式Intl.PluralRules
:使您可以訪問對語言敏感的複數格式和復數語言規則Intl.RelativeTimeFormat
:使您可以訪問語言敏感的相對時間格式
它還提供了一種方法:Intl.getCanonicalLocales()
。
Intl.getCanonicalLocales()
使您可以檢查語言環境是否有效,並為其返回正確的格式。它可以接受字符串或數組:
Intl.getCanonicalLocales('it-it') //[ 'it-IT' ]
Intl.getCanonicalLocales(['en-us', 'en-gb']) //[ 'en-US', 'en-GB' ]
並在語言環境無效的情況下引發錯誤
Intl.getCanonicalLocales('it_it') //RangeError: Invalid language tag: it_it
您可以使用try / catch塊來捕獲。
不同類型可以根據其特定需求與Intl API接口。特別是,我們可以提及:
String.prototype.localeCompare()
Number.prototype.toLocaleString()
Date.prototype.toLocaleString()
Date.prototype.toLocaleDateString()
Date.prototype.toLocaleTimeString()
讓我們來看一下如何使用以上Intl屬性:
國際整理者
此屬性使您可以訪問對語言敏感的字符串比較
您使用以下方法初始化Collator對象new Intl.Collator()
,將其傳遞給語言環境,然後您就可以使用它了compare()
如果第一個參數在第二個參數之後,則返回一個正值的方法。如果為負數,則為負數;如果為相同值,則為零:
const collator = new Intl.Collator('it-IT')
collator.compare('a', 'c') //a negative value
collator.compare('c', 'b') //a positive value
例如,我們可以使用它來排序字符數組。
國際日期時間格式
此屬性使您可以訪問對語言敏感的日期和時間格式。
您使用初始化一個DateTimeFormat對象new Intl.DateTimeFormat()
,將其傳遞給一個語言環境,然後為它傳遞一個日期以按照該語言環境的要求對其進行格式化:
const date = new Date()
let dateTimeFormatter = new Intl.DateTimeFormat('it-IT')
dateTimeFormatter.format(date) //27/1/2019
dateTimeFormatter = new Intl.DateTimeFormat('en-GB')
dateTimeFormatter.format(date) //27/01/2019
dateTimeFormatter = new Intl.DateTimeFormat('en-US')
dateTimeFormatter.format(date) //1/27/2019
formatToParts()方法返回一個包含所有日期部分的數組:
const date = new Date()
const dateTimeFormatter = new Intl.DateTimeFormat('en-US')
dateTimeFormatter.formatToParts(date)
/*
[ { type: 'month', value: '1' },
{ type: 'literal', value: '/' },
{ type: 'day', value: '27' },
{ type: 'literal', value: '/' },
{ type: 'year', value: '2019' } ]
*/
您也可以打印時間。選中您可以使用的所有選項在MDN上。
國際編號格式
此屬性使您可以訪問對語言敏感的數字格式。您可以使用它來格式化數字作為貨幣值。
假設您有一個類似10
,它代表某物的價格。
您想將其轉換為$10,00
。
如果數字多於3位,則應該以不同的方式顯示,例如,1000
應該顯示為$1.000,00
但是,這是美元。
不同的國家有不同的慣例來顯示價值。
JavaScript使我們很容易ECMAScript國際化API,這是一種相對較新的瀏覽器API,可提供許多國際化功能,例如日期和時間格式。
它得到很好的支持:
const formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
minimumFractionDigits: 2
})
formatter.format(1000) // “$1,000.00”
formatter.format(10) // “$10.00”
formatter.format(123233000) // “$123,233,000.00”
這minimumFractionDigits
屬性將小數部分始終設置為至少2位數字。您可以檢查可以在哪些其他參數中使用NumberFormat MDN頁面。
本示例為意大利國家/地區為歐元創建數字格式器:
const formatter = new Intl.NumberFormat('it-IT', {
style: 'currency',
currency: 'EUR'
})
國際規則
此屬性使您可以訪問對語言敏感的複數格式和復數語言規則。我發現Mathias Bynens在Google Developers門戶上的示例我唯一可以涉及到的實際用法是:給有序數字加上後綴:0th,1st,2nd,3rd,4th,5th。
const pr = new Intl.PluralRules('en-US', {
type: 'ordinal'
})
pr.select(0) //other
pr.select(1) //one
pr.select(2) //two
pr.select(3) //few
pr.select(4) //other
pr.select(10) //other
pr.select(22) //two
每次我們得到other
,我們將其翻譯為th
。如果我們有one
, 我們用st
。為了two
我們用nd
。few
得到rd
。
我們可以使用一個對象來創建一個關聯數組:
const suffixes = {
'one': 'st',
'two': 'nd',
'few': 'rd',
'other': 'th'
}
然後我們執行格式化函數以引用對像中的值,然後返回包含原始數字及其後綴的字符串:
const format = (number) => `${number}${suffixes[pr.select(number)]}`
現在我們可以像這樣使用它:
format(0) //0th
format(1) //1st
format(2) //2nd
format(3) //3rd
format(4) //4th
format(21) //21st
format(22) //22nd
請注意,Intl即將推出許多不錯的功能,例如Intl.RelativeTimeFormat
和Intl.ListFormat
,僅在撰寫本文時才在Chrome和Opera中提供。
免費下載我的JavaScript初學者手冊
更多js教程:
- JavaScript中應避免的事情(不良部分)
- JavaScript中的延遲和承諾(+ Ember.js示例)
- 如何使用JavaScript將文件上傳到服務器
- JavaScript編碼風格
- JavaScript數組簡介
- JavaScript編程語言簡介
- 完整的ECMAScript 2015-2019指南
- 了解JavaScript承諾
- JavaScript的詞彙結構
- JavaScript類型
- JavaScript變數
- 示例Web應用程序提示列表
- JavaScript函數式編程簡介
- 具有Async和Await的現代異步JavaScript
- JavaScript循環和範圍
- Map JavaScript數據結構
- 設置JavaScript數據結構
- JavaScript模板文字指南
- 學習JavaScript的路線圖
- JavaScript表達式
- 發現JavaScript計時器
- JavaScript事件說明
- JavaScript循環
- 使用map,filter,reduce和find編寫JavaScript循環
- JavaScript事件循環
- JavaScript函數
- JavaScript詞彙表
- JavaScript閉包說明
- JavaScript Arrow函數教程
- JavaScript正則表達式指南
- 如何在JavaScript中檢查字符串是否包含子字符串
- 如何從JavaScript中的數組中刪除項目
- 如何深度克隆JavaScript對象
- Introduction to Unicode and UTF-8
- JavaScript中的Unicode
- 如何在JavaScript中大寫字符串的第一個字母
- 如何在JavaScript中將數字格式化為貨幣值
- 如何在JavaScript中將字符串轉換為數字
- 這在JavaScript中
- 如何在JavaScript中獲取當前時間戳
- JavaScript嚴格模式
- JavaScript立即調用函數表達式(IIFE)
- 如何使用JavaScript重定向到另一個網頁
- 如何從JavaScript對像中刪除屬性
- 如何在JavaScript中將項目追加到數組
- 如何檢查JavaScript對象屬性是否未定義
- ES模塊簡介
- CommonJS簡介
- JavaScript異步編程和回調
- 如何替換JavaScript中所有出現的字符串
- 現代JavaScript語法快速參考指南
- 如何在JavaScript中修剪數字中的前導零
- 如何檢查JavaScript對象
- 關於JavaScript日期的權威指南
- Moment.js教程
- JavaScript中的分號
- JavaScript算術運算符
- JavaScript Math對象
- 在JavaScript中生成隨機且唯一的字符串
- 如何使您的JavaScript函數進入睡眠狀態
- JavaScript原型繼承
- JavaScript例外
- 如何使用JavaScript類
- JavaScript食譜
- JavaScript中的引號
- 如何在JavaScript中驗證電子郵件地址
- 如何獲取JavaScript數組中一組對象的唯一屬性
- 如何在JavaScript中檢查字符串是否以另一個字符串開頭
- 如何在JavaScript中創建多行字符串
- ES6指南
- 如何在JavaScript中獲取當前URL
- ES2016指南
- 如何使用JavaScript中的值初始化新數組
- ES2017指南
- ES2018指南
- 如何在Array.prototype.map()中使用Async和Await
- 異步與同步代碼
- 如何在JavaScript中生成兩個數字之間的隨機數
- HTML Canvas API教程
- 如何在JavaScript中的for-of循環中獲取迭代的索引
- 什麼是單頁應用程序?
- WebAssembly簡介
- JSON簡介
- JSONP指南
- Should you use or learn jQuery in 2020?
- 如何使用純JavaScript隱藏DOM元素
- 如何在JavaScript中合併兩個對象
- 如何清空JavaScript數組
- 如何使用JavaScript編碼URL
- 如何在JavaScript中設置默認參數值
- 如何在JavaScript中按屬性值對對像數組進行排序
- 如何計算JavaScript對像中的屬性數量
- JavaScript中的call()和apply()
- WebRTC庫PeerJS簡介
- 使用Rest和Spread處理對象和數組
- 用JavaScript分解對象和數組
- 調試JavaScript的權威指南
- TypeScript指南
- 在JavaScript中動態選擇對象的方法
- 將undefined傳遞給JavaScript立即調用的函數表達式
- 鬆散類型與強類型語言
- 如何使用JavaScript設置DOM元素的樣式
- 用JavaScript投放
- JavaScript生成器教程
- node_modules文件夾的大小不是問題。這是一種特權
- 在JavaScript中導入模塊時如何解決意外的標識符錯誤
- 如何在JavaScript中列出對象的所有方法
- 字符串replace()方法
- 字符串search()方法
- 我如何運行一些JavaScript代碼段
- ES2019指南
- 字符串charAt()方法
- 字符串charCodeAt()方法
- 字符串codePointAt()方法
- 字符串concat()方法
- 字符串endsWith()方法
- 字符串include()方法
- 字符串indexOf()方法
- 字符串lastIndexOf()方法
- 字符串localeCompare()方法
- 字符串match()方法
- 字符串normalize()方法
- 字符串padEnd()方法
- 字符串padStart()方法
- 字符串repeat()方法
- 字符串slice()方法
- 字符串split()方法
- 字符串startsWith()方法
- String substring()方法
- 字符串toLocaleLowerCase()方法
- 字符串toLocaleUpperCase()方法
- String toLowerCase()方法
- 字符串toString()方法
- String toUpperCase()方法
- 字符串trim()方法
- String trimEnd()方法
- String trimStart()方法
- JavaScript的記憶化
- 字符串valueOf()方法
- JavaScript參考:字符串
- Number isInteger()方法
- Number isNaN()方法
- Number isSafeInteger()方法
- Number parseFloat()方法
- Number parseInt()方法
- Number toString()方法
- Number valueOf()方法
- Number toPrecision()方法
- Number toExponential()方法
- Number toLocaleString()方法
- Number toFixed()方法
- Number isFinite()方法
- JavaScript參考:編號
- JavaScript屬性描述符
- 對象的assign()方法
- 對象的create()方法
- Object defineProperties()方法
- Object defineProperty()方法
- 對象entry()方法
- 對象Frozen()方法
- Object getOwnPropertyDescriptor()方法
- Object getOwnPropertyDescriptors()方法
- Object getOwnPropertyNames()方法
- Object getOwnPropertySymbols()方法
- Object getPrototypeOf()方法
- Object is()方法
- Object isExtensible()方法
- Object isFrozen()方法
- Object isSealed()方法
- 對象keys()方法
- 對象的preventExtensions()方法
- 對象seal()方法
- Object setPrototypeOf()方法
- Object values()方法
- 對象的hasOwnProperty()方法
- Object isPrototypeOf()方法
- 對象的propertyIsEnumerable()方法
- Object toLocaleString()方法
- Object toString()方法
- Object valueOf()方法
- JavaScript參考:對象
- JavaScript賦值運算符
- JavaScript國際化
- JavaScript typeof運算子
- JavaScript新運算符
- JavaScript比較運算符
- JavaScript運算符優先級規則
- JavaScript instanceof運算符
- JavaScript陳述式
- JavaScript範圍
- JavaScript類型轉換(廣播)
- JavaScript相等運算符
- JavaScript if / else條件
- JavaScript切換條件
- JavaScript刪除運算符
- JavaScript函數參數
- JavaScript Spread運算符
- JavaScript返回值
- JavaScript邏輯運算符
- JavaScript三元運算符
- JavaScript遞歸
- JavaScript對象屬性
- JavaScript錯誤對象
- JavaScript全局對象
- JavaScript filter()函數
- JavaScript map()函數
- JavaScript reduce()函數
- JavaScript`in`運算子
- JavaScript運算子
- 如何在JavaScript中獲取CSS屬性的值
- 如何將事件偵聽器添加到JavaScript中的多個元素
- JavaScript私有類字段
- 如何在JavaScript中按日期值對數組排序
- JavaScript公共類字段
- JavaScript符號
- 如何使用JavaScript bcrypt庫
- 使用對象解構時如何重命名字段
- 如何在不使用TypeScript的情況下檢查JavaScript中的類型
- 如何檢查JavaScript數組是否包含特定值
- 雙重否定運算符是什麼!用JavaScript做嗎?
- JavaScript比較中應使用哪個等號運算符? == vs ===
- JavaScript仍然值得學習嗎?
- 如何在JavaScript中返回異步函數的結果
- 如何在JavaScript中檢查對像是否為空
- 如何突破JavaScript中的for循環
- 如何在JavaScript中的特定索引處將項目添加到數組
- 為什麼不應該修改JavaScript對象原型
- 在JavaScript中使用let和var有什麼區別?
- 用於激活JavaScript功能的鏈接
- 如何在JavaScript中連接兩個字符串
- 如何在JavaScript中連接兩個數組
- 如何檢查JavaScript值是否為數組?
- 如何在JavaScript中獲取數組的最後一個元素?
- 如何使用Axios發送urlencoded數據
- 如何使用JavaScript獲取明天的日期
- 如何使用JavaScript獲取昨天的日期
- 如何從JavaScript日期獲取月份名稱
- 如何檢查兩個日期是否在JavaScript中是同一天
- 如何在JavaScript中檢查日期是否指向過去的一天
- 標有JavaScript的語句
- 如何等待2個或更多的Promise在JavaScript中解析
- 如何在JavaScript中獲取兩個日期之間的日期
- 如何使用提取上傳文件
- 如何在JavaScript中格式化日期
- 如何遍歷JavaScript中的對象屬性
- 如何在JavaScript中計算兩個日期之間的天數
- 如何在ES模塊中使用頂級等待
- JavaScript動態導入
- JavaScript可選鏈接
- 如何在JavaScript中替換字符串內的空格
- JavaScript空合併
- 如何在JavaScript中展平數組
- JavaScript的十年
- 如何使用Axios發送授權標頭
- JavaScript中的關鍵字和保留字列表
- 如何在JavaScript中將數組轉換為字符串
- 如何刪除所有的node_modules文件夾內容
- 如何從JavaScript數組中刪除重複項
- 在JavaScript中讓vs const
- 各種JavaScript庫中的相同POST API調用
- 如何在JS中獲取數組中的前n個項目
- 如何在JS中將數組劃分為多個相等的部分
- 如何減慢JavaScript中的循環
- 如何在HTML畫布中加載圖像
- 如何在JavaScript中將字符串切成單詞
- 如何在JavaScript中將數組分成兩半
- 如何將文本寫入HTML畫布
- 如何在JavaScript中刪除字符串的最後一個字符
- 如何在JavaScript中刪除字符串的第一個字符
- 如何修復TypeError:無法分配為只讀對象“#< Object>”的屬性“ exports”錯誤
- 如何創建退出意圖彈出窗口
- 如何檢查一個元素是否是另一個元素的後代
- 如何對每個Axios請求強制使用憑據
- 如何解決JavaScript中的“不是函數”錯誤
- 蓋茨比,如何更改圖標
- 使用Gatsby加載外部JS文件
- 如何使用JavaScript檢測暗模式
- 包裹,如何修復“ regeneratorRuntime未定義”錯誤
- 如何檢測Adblocker是否與JavaScript一起使用
- 使用TypeScript中的類型進行對象分解
- Deno手冊:Deno的簡要介紹🦕
- 如何使用JavaScript獲取路徑或URL的最後一段
- 如何隨機播放JavaScript數組中的元素
- 如何檢查JavaScript對像中是否存在密鑰
- 事件冒泡和事件捕獲
- event.stopPropagation與event.preventDefault()與在DOM事件中返回false
- JavaScript中的原始類型與對象
- 在JavaScript中,如何判斷值的類型?
- 如何從JavaScript中的函數返回多個值
- JavaScript中的箭頭函數與常規函數
- 我們可以通過哪些方式訪問對象屬性的值?
- JavaScript中的null和undefined有什麼區別?
- 方法和函數有什麼區別?
- 我們可以通過哪些方法擺脫JavaScript循環?
- JavaScript for..of循環
- 什麼是JavaScript中的對象解構?
- JavaScript吊起了什麼?
- 如何使用JavaScript將逗號更改為點
- 使用DOM時計時的重要性
- 如何反轉JavaScript數組
- 如何在JavaScript中檢查值是否為數字
- 如何在JavaScript函數中接受無限的參數
- JavaScript代理對象
- 使用香草JavaScript在瀏覽器中進行事件委託
- JavaScript super關鍵字
- XState簡介
- 值是通過引用傳遞還是通過JavaScript中的值傳遞?
- JavaScript中的自定義事件
- JavaScript中的自定義錯誤
- JavaScript中的命名空間
- JavaScript中逗號的奇怪用法
- JavaScript中的鏈接方法調用
- 如何處理承諾拒絕
- 如何在JavaScript中交換兩個數組元素
- 如何在使用Gitbook時解決“ cb.apply不是函數”錯誤
- 如何在JavaScript中的數組開頭添加項目
- Gatsby,修復“找不到模塊gatsby-cli / lib / reporter”錯誤
- 如何獲取JavaScript數組中項目的索引
- 如何在JavaScript中測試空對象
- 如何將對象解構為JavaScript中的現有變量
- 數組JavaScript數據結構
- 堆棧JavaScript數據結構
- JavaScript數據結構:隊列
- JavaScript數據結構:集
- JavaScript數據結構:字典
- JavaScript數據結構:鏈接列表
- JavaScript,如何導出函數
- JavaScript,如何導出多個功能
- JavaScript,如何退出功能
- JavaScript,如何在字符串中查找字符
- JavaScript,如何過濾數組
- JavaScript,如何擴展類
- JavaScript,如何在數組中查找重複項
- JavaScript,如何替換數組的項
- JavaScript算法:線性搜索
- JavaScript算法:二進制搜索
- JavaScript算法:選擇排序
- JavaScript算法:Quicksort
- JavaScript算法:合併排序
- JavaScript算法:冒泡排序