前言
你目前的產(chǎn)品國際化計劃是什么?今天的早讀文章由@梁天培_Tim翻譯授權(quán)分享。
@蒂姆·梁(Tim Liang)目前是Shopee的一名高級前端工程師,他曾在JD.COM保險杠實驗室工作,該實驗室是芋頭塊手冊的編纂者之一
Intl是一個全局對象,它的主要目的是顯示國際信息,它可以將字符串、數(shù)字、日期和時間轉(zhuǎn)換成指定地區(qū)的格式。
國際化是應(yīng)用程序無需編碼就能適應(yīng)各種語言和地區(qū)的一種方式。
Java開發(fā)人員不需要向代碼包中添加幾千字節(jié)的翻譯文件。Intl有各種以locale為參數(shù)的構(gòu)造函數(shù)和方法,可以根據(jù)你的需要格式化數(shù)據(jù)。以下是Intl的構(gòu)成:
全局變量Intl
排序器、日期時間格式、列表格式、數(shù)字格式、復(fù)數(shù)規(guī)則和相對時間格式是在空之間命名的Intl中的構(gòu)造函數(shù)。他們接受兩個參數(shù)——地區(qū)和選項。區(qū)域設(shè)置必須是符合BCP 47語言標(biāo)記規(guī)范的字符串或數(shù)組。如果您有興趣了解更多關(guān)于BCP 47語言標(biāo)簽的信息,請參考以下摘自《市場營銷網(wǎng)絡(luò):
BCP 47語言標(biāo)簽用于定義一種語言,其中包含了該語言的主要信息。一般情況下,依次包括語言代碼、腳本代碼、國家代碼,用連字符隔開。雖然這些標(biāo)簽不區(qū)分大小寫,但建議以大寫形式編寫標(biāo)題大小寫的腳本代碼,以小寫形式編寫國家和地區(qū)代碼,其他內(nèi)容。
區(qū)域設(shè)置參數(shù)的默認(rèn)值是運行時區(qū)域設(shè)置。語言環(huán)境一般寫成-en(英語)、hi(印地語)、ta-in(泰米爾語-印度)。Options參數(shù)是可選的,其結(jié)構(gòu)隨不同的構(gòu)造函數(shù)而變化,主要用于提供格式化的自定義參數(shù)。
在本文中,我們將介紹一些在命名空之間的Intl中添加的新API。這些新的API已經(jīng)在Google I/O '19上發(fā)布。讓我們仔細(xì)看看這些API。
國際號碼。RelativeTimeFormat
RelativeTimeFormat構(gòu)造函數(shù)用于將時間戳轉(zhuǎn)換成人性化的短語。它將一個不可讀的日期對象轉(zhuǎn)換為其相對的當(dāng)前時間字符串。我們來看看下面的栗子:
國際號碼。相對時間格式將時間轉(zhuǎn)換成英語短語
在上面的栗子中,Intl的第一個參數(shù)。RelativeTimeFormat構(gòu)造函數(shù)為en。配置項目選項中的數(shù)字可以是“始終”或“自動”,其中“始終”不會將數(shù)字格式化為短語,例如,rtf.format(-1,“月”)將被格式化為1個月前的格式。
如果您想將它們格式化為泰語,可以傳遞如下圖所示的參數(shù):
國際號碼。帶有ta-in區(qū)域設(shè)置的RelativeTimeFormat構(gòu)造函數(shù)
像昨天、今天、明天這樣的短語可以給用戶提供更好的可讀性!相關(guān)功能可以在Chrome 71和FireFox 65或更高版本中體驗。
國際號碼。列表格式
ListFormat構(gòu)造函數(shù)用于將字符串連接成有意義的短語。
國際號碼。列表格式用默認(rèn)配置格式化為英文
format方法可以很好地連接字符數(shù)組中的字符串。如果我們不使用列表格式應(yīng)用編程接口,我們必須編寫函數(shù)將、、和插入適當(dāng)?shù)奈恢谩?/p>
我們可以通過更改選項中的配置項來自定義格式化的內(nèi)容:
國際號碼。列表格式是用英語格式化的,帶有析取參數(shù)
將類型設(shè)置為析取使用或來連接字符串。以下是選項某些屬性的可選值:
類型:可選值有連接、析取、單位,其中連接為默認(rèn)值,不需要連接詞時使用單位類型,如下圖所示:
國際號碼。列表格式是用單位參數(shù)用英語格式化的
樣式:可選值為長和短(或窄)
在Chrome 72及以上可以體驗到ListFormat API。
國際號碼。NumberFormat
與其他高級語言不同,Java為變量的數(shù)據(jù)類型提供了靈活性。Int、float、string或object都用var聲明(let和const用于塊級范圍)。
但是怎么才能確定一個數(shù)有多大呢?
123456789123456789 * 11 // Prints 1358024680358024700上述運算結(jié)果的單位不應(yīng)為0!似乎我們需要為大數(shù)做些額外的事情。好消息是,我們已經(jīng)有了BigInt來處理大量數(shù)據(jù)。讓我們用BigInt再試一次:
123456789123456789n * 11n // Prints 1358024680358024679n現(xiàn)在看起來正常多了!
大數(shù)字可讀性普遍較差。在這種情況下,我們可能需要使用國際號碼。NumberFormat API!它通過添加特定于地區(qū)的數(shù)字分隔符來格式化數(shù)字。讓我們看看它的效果:
國際號碼。NumberFormat構(gòu)造函數(shù)
數(shù)字格式將根據(jù)您的地區(qū)設(shè)置而有所不同。設(shè)置為en時使用逗號分隔符,設(shè)置為fr時使用空。
我們可以通過更改選項對象中的配置項來自定義格式化的內(nèi)容。選項中某些參數(shù)的可選值如下:樣式:可選值為十進(jìn)制、貨幣和百分比,默認(rèn)值為十進(jìn)制
貨幣:用于指定貨幣樣式。例如:美元,印度盧比
當(dāng)前顯示:可選值為符號和代碼,默認(rèn)值為符號
您可以單擊此處查看所有可配置的項目。
國際號碼。數(shù)字格式現(xiàn)在在Chrome、FireFox和Safari中可用。
列表中還有一個更刺激的API:intl。日期時間格式
國際號碼。日期時間格式
國際號碼。日期時間格式應(yīng)用編程接口用于將日期和時間格式化為指定的語言。此應(yīng)用編程接口上的新方法格式化范圍可以如下使用:
const df = new Intl.DateTimeFormat('en', {year: 'numeric',month: 'short',day: 'numeric'})const startDate = new Date('01-06-2019')const endDate = new Date('10-06-2019')df.formatRange(startDate, endDate) // Prints Jun 1-10 2019注意:formatRange函數(shù)將顯示同一個月的日期。
使用此API后,您可以從代碼中刪除僅用于格式化日期范圍的方法!
選項中有許多配置項,如時區(qū)、紀(jì)元、年、月、日、小時、分鐘、秒等。
標(biāo)簽
本文介紹了一些新的API Intl內(nèi)容:
Intl.RelativeTimeFormat API可用于為時間戳生成相對于當(dāng)前時間的人性化短語。Intl.ListFormat API可用于使用 conjunction,disjunction和unit 參數(shù)把數(shù)組元素連接成短語。Intl.NumberFormat可用于使用將大數(shù)格式化為指定的語言格式。Intl.DateTimeFormat API上的 formatRange 方法可用于生成時間范圍的字符串。關(guān)于本文譯者:@梁天培_蒂姆翻譯:https://juejin.im/post/5d58bf496fb9a06ace524da8作者:@安基塔·馬桑原文:https://blog.bitsrc.io/new-intl-apis-in-java-c50dc89d2cf3
Ta已經(jīng)分享了
【1658號】Chrome專家調(diào)試法——介紹Chrome開發(fā)者工具的最佳用法
1.《intl 【第1718期】前端國際化利器 - Intl》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《intl 【第1718期】前端國際化利器 - Intl》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/fangchan/1160242.html