Intl
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2017å¹´9æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
Intl ã¯åå空éãªãã¸ã§ã¯ãã§ãå½éåã³ã³ã¹ãã©ã¯ã¿ã¼ããã®ä»ã®è¨èªä¾å颿°ã«å
±éããæ©è½ãªã©ã®è¤æ°ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ãå«ã¿ã¾ãããããã¯å
¨ä½ã§ ECMAScript å½éå API ãæ§æããè¨èªä¾åã®æå忝è¼ãæ°å¤ã®æ¸å¼è¨å®ãæ¥ä»ã¨æå»ã®æ¸å¼è¨å®ãªã©ãæä¾ãã¾ãã
解説
ã»ã¨ãã©ã®ã°ãã¼ãã«ãªãã¸ã§ã¯ãã¨ã¯ç°ãªããIntl ã¯ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ã¯ããã¾ãããnew æ¼ç®åã¨çµã¿åããã¦ä½¿ç¨ããããIntl ãªãã¸ã§ã¯ãã颿°ã¨ãã¦å¼ã³åºããããããã¨ã¯ã§ãã¾ãããIntl ã®ãã¹ã¦ã®ããããã£ã¨ã¡ã½ããã¯éçï¼Math ãªãã¸ã§ã¯ãã¨åæ§ï¼ã§ãã
å½éåã³ã³ã¹ãã©ã¯ã¿ã¼ãä»ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã®è¨èªãæèããã¡ã½ãã (é¢é£æ
å ±ã«è¨è¼) ã¯ããã±ã¼ã«ãèå¥ãã¦å®éã«ä½¿ç¨ãããã®ã決å®ããããã«å
±éã®ãã¿ã¼ã³ã使ç¨ãã¦ãã¾ãããããã¯ãã¹ã¦ã locales 㨠options ã®å¼æ°ãåãåãã options.localeMatcher ããããã£ã§æå®ããã¢ã«ã´ãªãºã ã使ç¨ãã¦ è¦æ±ããããã±ã¼ã«ã¨å¯¾å¿ãã¦ãããã±ã¼ã«ã¨ã®ãã´ã·ã¨ã¼ã·ã§ã³ãè¡ãã¾ãã
locales 弿°
locales 弿°ã¯ãæå®ãããæä½ã«ä½¿ç¨ãããã±ã¼ã«ãç¹å®ããããã«ä½¿ç¨ããã¾ãã JavaScript ã®å®è£
ã§ã¯ locales ã調ã¹ã¦ã表ç¾ãããæå®ãæºãããã®ã«æãè¿ããçè§£å¯è½ãªãã±ã¼ã«ãè¨ç®ãã¾ãã locales ã¯æ¬¡ã®ãã®ãåããã¨ãã§ãã¾ãã
undefinedï¼ã¾ãã¯çç¥ï¼ï¼ãã®å®è£ ã®æ¢å®ã®ãã±ã¼ã«ã使ç¨ããã¾ãã- ãã±ã¼ã«ï¼ãã±ã¼ã«èå¥åã¾ãã¯ãã±ã¼ã«èå¥åãæã¤
Intl.Localeãªãã¸ã§ã¯ãã§ãã - ãã±ã¼ã«ã®ãªã¹ãï¼ä½ããã®ä»ã®å¤ã§ããªãã¸ã§ã¯ãã«å¤æããããã±ã¼ã«ã®é åã¨ãã¦æ±ããã¾ãã
å¾ 2 è
ã§ã¯ãå®éã«ä½¿ç¨ããããã±ã¼ã«ã¯ããã±ã¼ã«ãã´ã·ã¨ã¼ã·ã§ã³ã«ãã£ã¦æ±ºå®ããããæãè¯ã対å¿ãã¦ãããã±ã¼ã«ã«ãªãã¾ãããã±ã¼ã«èå¥åãæååã¾ãã¯ãªãã¸ã§ã¯ãã§ãªãå ´åãTypeError ãçºçãã¾ãããã±ã¼ã«èå¥åãæ§æçã«ç¡å¹ãªæååã§ããå ´åãRangeError ãçºçãã¾ãããã±ã¼ã«èå¥åãæ£ããæ§æããã¦ããã«ãããããããå®è£
ããããèªèããªãå ´åããã®èå¥åã¯ç¡è¦ããããªã¹ãå
ã®æ¬¡ã®ãã±ã¼ã«ãèæ
®ããã¾ããæçµçã«ã¯ã·ã¹ãã ã®ãã±ã¼ã«ã«ãã©ã¼ã«ããã¯ãã¾ãããã ããç¹å®ã®ãã±ã¼ã«åãç¡è¦ãããã¨ã¯éããªããããå®è£
ãå°æ¥çã«ä»»æã®ãã±ã¼ã«ç¨ã®ãã¼ã¿ã追å ããå¯è½æ§ãããç¹ã«æ³¨æãå¿
è¦ã§ãã ä¾ãã°ã new Intl.DateTimeFormat("default") ã¯ã "default" ãæ§æçã«æå¹ã§ãããããããªããã±ã¼ã«ã¨ãã¦ãèªèãããªããããå®è£
ã®æ¢å®ã®ãã±ã¼ã«ã®ã¿ã使ç¨ãã¾ãã
ãã±ã¼ã«èå¥åã¯ã以ä¸ã®è¦ç´ ã§æ§æãããæååã§ãã
- è¨èªãµãã¿ã°ï¼2â3 æåã¾ã㯠5â8 æåï¼
- æåä½ç³»ãµãã¿ã°ï¼4 æåï¼ çç¥å¯
- å°åãµãã¿ã°ï¼2 æåã¾ã㯠3 æ¡ã®æ°åï¼ çç¥å¯
- 1 ã¤ä»¥ä¸ã®å¤åå½¢ãµãã¿ã°ï¼ãã¹ã¦åºæã§ãªããã°ãªããªãï¼ããããã㯠5â8 æåã®è±æ°åã¾ãã¯æ°åã« 3 æ¡ã®è±æ°åãç¶ããã® çç¥å¯
- 1 ã¤ä»¥ä¸ã® BCP 47 æ¡å¼µã·ã¼ã±ã³ã¹ çç¥å¯
- ç§çç¨éã®æ¡å¼µã·ã¼ã±ã³ã¹ çç¥å¯
ããããã®ãµãã¿ã°ãã·ã¼ã±ã³ã¹ã¯ãã¹ã¦ããã¤ãã³ã§åºåãã¾ãããã±ã¼ã«èå¥åã¯å¤§æåå°æåã®åºå¥ã®ãªã ASCII ã§ããããããæåä½ç³»ãµãã¿ã°ã§ã¯ã¿ã¤ãã«ã±ã¼ã¹ï¼æåã®æåã大æåã§ã以éã®æåã¯å°æåï¼ããå°åãµãã¿ã°ã¯å¤§æåããã以å¤ã¯ãã¹ã¦å°æåã使ãç¿æ £ãããã¾ãã
"hi": ãã³ãã£ã¼èªï¼è¨èªï¼"de-AT": ãªã¼ã¹ããªã¢ï¼å°åï¼ã§ä½¿ç¨ããã¦ãããã¤ãèªï¼è¨èªï¼"zh-Hans-CN": ä¸å½ï¼å°åï¼ã§ä½¿ç¨ããã¦ããç°¡ä½åï¼æåä½ç³»ï¼ã§æ¸ããã¦ããä¸å½èªï¼è¨èªï¼ã"en-emodeng": è±èªï¼è¨èªï¼ã® "Early modern English" æ¹è¨ï¼å¤åå½¢ï¼
è¨èªãæåä½ç³»ãå°åï¼å½ãå«ãï¼ãï¼ç¨ã«ä½¿ç¨ãããï¼å¤åå½¢ãèå¥ãããµãã¿ã°ã¯ã IANA è¨èªãµãã¿ã°ã¬ã¸ã¹ããªã¼ã«ç»é²ããã¦ãã¾ãããã®ã¬ã¸ã¹ããªã¼ã¯é·æã«ããã£ã¦å®æçã«æ´æ°ããã¦ãããå®è£ ã¯å¸¸ã«ææ°ã§ããã¨ã¯éããªãããããµãã¿ã°ãåºã対å¿ããã¦ãããã¨ãé ¼ããããªãããã«ãã¦ãã ããã
BCP 47 æ¡å¼µã·ã¼ã±ã³ã¹ã¯ãåä¸ã®æ°åã¾ãã¯æå ("x" 以å¤) ã¨ããã¤ãã³ã§åºåããã 1 ã¤ä»¥ä¸ã® 2 ãã 8 æåã®æåã¾ãã¯æ°åã«ãããµãã¿ã°ã§æ§æããã¦ãã¾ããããããã®æ°åã¾ãã¯æåã«å¯¾ã㦠1 ã¤ã®ã·ã¼ã±ã³ã¹ã®ã¿ã許å¯ããã¦ãã¾ãã®ã§ã "de-a-foo-a-foo" ã¯ç¡å¹ã§ãã BCP 47 æ¡å¼µãµãã¿ã°ã¯ Unicode CLDR Project ã§å®ç¾©ããã¦ãã¾ããç¾å¨ã¯ 2 ã¤ã®æ¡å¼µæ©è½ã®æå³ã®ã¿ãå®ç¾©ããã¦ãã¾ãã
-
"u"(Unicode) æ¡å¼µã¯ãIntlã® API ãªãã¸ã§ã¯ãã®è¿½å ã«ã¹ã¿ãã¤ãºãè¦æ±ããããã«ä½¿ç¨ãããã¨ãã§ãã¾ããä¾ãã°æ¬¡ã®ãããªãã®ã§ãã"de-DE-u-co-phonebk": ãã¤ãèªã®ã½ã¼ãé ã®é»è©±å¸³å¤åå½¢ã使ç¨ãã¾ãããã®ã½ã¼ãé ã§ã¯ãã¦ã ã©ã¦ãä»ãã®æ¯é³ãã ä â ae, ö â oe, ü â ue ã®ããã«ãã¦ã ã©ã¦ãã®ä»ããªãæ¯é³äºæåã«å±éãããã®ã¨è¦ãªããé ã§ä¸¦ã¹æ¿ããã¾ãã"th-TH-u-nu-thai": æ°å¤æ¸å¼ã§ãã¿ã¤ã®æ°å (à¹, à¹, à¹, à¹, à¹, à¹, à¹, à¹, à¹, à¹) ã使ç¨ãã¾ãã"ja-JP-u-ca-japanese": æ¥ææ¸å¼ã§åæ¦ã使ç¨ãã¾ããããªãã¡ã 2013 å¹´ã¯å¹³æ 25 å¹´ã¨ãã¦è¡¨ç¾ããã¾ãã"en-GB-u-ca-islamic-umalqura": ã¤ã®ãªã¹è±èªã§ã¤ã¹ã©ã æ¦ (Hijri) ã使ç¨ãã¾ããã°ã¬ã´ãªãªæ¦ã§ 2017 å¹´ 10 æ 14 æ¥ã¯ã Hijri æ¦ã§ 24 Muharram, 1439 ã§ãã
-
"t"(transformed) æ¡å¼µã¯ãä»ã®ãã±ã¼ã«ãã翻訳ãããããã¹ããªã©ã夿ãããã³ã³ãã³ãã示ãã¾ããç¾å¨ã®ã¨ãããIntlã®æ©è½ã§"t"æ¡å¼µãèæ ®ãããã®ã¯ããã¾ããããããããã®æ¡å¼µã¯ãã¹ãããããã±ã¼ã«ãå«ããã¨ãããã¾ãããã¨ãã°ã"de-t-en"ã«ã¯è±èªã®ãã±ã¼ã«èå¥åãå«ã¾ãã¦ãã¾ããå ¥ãåã®ãã±ã¼ã«ãåå¨ããå ´åãããã¯æå¹ãªãã±ã¼ã«èå¥åã§ãªããã°ãªãã¾ãããä¾ãã°ã"en-emodeng-emodeng"ã¯ï¼emodengã®å¤åå½¢ãµãã¿ã°ãéè¤ãã¦ããããï¼ç¡å¹ãªã®ã§ã"de-t-en-emodeng-emodeng"ãç¡å¹ã§ãã
æå¾ã«ã"x" ã¨ããæåã使ã£ãç§çç¨éã®æ¡å¼µã·ã¼ã±ã³ã¹ãããããã®å¾ã«ãã¤ãã³ã§åºåããã 1 ï½ 8 æåã¾ãã¯æ°åã®ãµãã¿ã°ã 1 ã¤ä»¥ä¸ç¶ãã¾ããããã«ãããã¢ããªã±ã¼ã·ã§ã³ãç¬èªã«ä½¿ç¨ããæ
å ±ãã¨ã³ã³ã¼ããããã¨ãã§ãã¾ããããã¹ã¦ã® Intl ã®æä½ã§ã¯ç¡è¦ããã¾ãã
options 弿°
options 弿°ã¯ãã³ã³ã¹ãã©ã¯ã¿ã¼ã颿°ãã¨ã«ç°ãªãããããã£ããã¤ãªãã¸ã§ã¯ãã§ããå¿
è¦ãããã¾ãã options 弿°ãä¸ããããªãã£ãå ´åãã¾ãã¯ãæªå®ç¾©ã®å ´åããã¹ã¦ã®ããããã£ã«å¯¾ãã¦ããã©ã«ãå¤ã使ç¨ããã¾ãã
è¨èªãæèãããã¹ã¦ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã颿°ã対å¿ãã¦ããããããã£ãä¸ã¤ããã¾ãã localeMatcher ããããã£ã§ããã®å¤ã¯ "lookup" ã¾ã㯠"best fit" ã®æååã§ããå¿
è¦ããããä¸è¨ã®ãã±ã¼ã«ç
§åã¢ã«ã´ãªãºã ã®ãã¡ããä¸ã¤ã鏿ãã¾ãã
ãã±ã¼ã«ã®èå¥ã¨ãã´ã·ã¨ã¼ã·ã§ã³
locales 弿°ã¯ããã¹ã¦ã® Unicode æ¡å¼µãé¤å»ããå¾ãã¢ããªã±ã¼ã·ã§ã³ããã®åªå
é ä½ä»ãè¦æ±ã¨ãã¦è§£éããã¾ããã©ã³ã¿ã¤ã ã¯ãå©ç¨å¯è½ãªãã±ã¼ã«ã¨æ¯è¼ããå©ç¨å¯è½ãªãã±ã¼ã«ã®ãã¡æé©ãªãã®ãé¸ã³ã¾ãããããã³ã°ã¢ã«ã´ãªãºã ã¯äºç¨®é¡ããã¾ãã "lookup" ãããã£ã¼ã¯ãBCP 47 ã§æå®ããã Lookup ã¢ã«ã´ãªãºã ã«å¾ãã¾ãã "best fit" ãããã£ã¼ã§ã¯ãã©ã³ã¿ã¤ã ãå°ãªãã¨ãããããã¯å ´åã«ãã£ã¦ã¯ã Lookup ã¢ã«ã´ãªãºã ã®çµæããããªã¯ã¨ã¹ãã«é©åãããã±ã¼ã«ãæä¾ãã¾ããã¢ããªã±ã¼ã·ã§ã³ã locales 弿°ãæä¾ããªãã£ãå ´åãããªã¯ã¨ã¹ãã«ä¸è´ãããã±ã¼ã«ãã©ã³ã¿ã¤ã ãæã£ã¦ããªãã£ãå ´åã¯ãã©ã³ã¿ã¤ã ã®æ¢å®ã®ãã±ã¼ã«ã使ç¨ããã¾ãããããã£ã¼ã¯ã options 弿°ã®ããããã£ã使ã£ã¦é¸æãããã¨ãã§ãã¾ãï¼ä¸è¨åç
§ï¼ã
ãã´ã·ã¨ã¼ã·ã§ã³ã«ãã鏿ãããè¨èªã¿ã°ã Unicode æ¡å¼µã®é¨åæååãæã£ã¦ããã¨ãããã®æ¡å¼µã¯ããã§ãæ§ç¯ããããªãã¸ã§ã¯ãã颿°ã®æ¯ãèããã«ã¹ã¿ãã¤ãºããããã«ä½¿ããã¾ããããããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã颿°ã¯ã Unicode æ¡å¼µç¨ã®ãã¼ã®ããä¸é¨åã®ã¿å¯¾å¿ãã¦ãããã¾ãã対å¿ããå¤ã¯ãå¤ãã®å ´åè¨èªã¿ã°ã«ä¾åãã¾ããä¾ãã°ã "co" ãã¼ï¼ç
§åé åºï¼ã¯ã Intl.Collator ã ãã対å¿ãã¦ããããã®ãã¼ã«å¯¾ãã "phonebk" ã®å¤ã¯ãã¤ãèªã ãã対å¿ãã¦ãã¾ãã
éçããããã£
Intl.Collator-
è¨èªåºæã®æååã®æ¯è¼ãå¯è½ã«ãããªãã¸ã§ã¯ãã§ãã collator ã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.DateTimeFormat-
è¨èªåºæã®æ¥æã®æ¸å¼åãå¯è½ã«ãããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.DisplayNames-
è¨èªãå°åãæåä½ç³»ã®è¡¨ç¤ºåã®ä¸è²«ãã翻訳ãå¯è½ã«ãããªãã¸ã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.DurationFormat-
ãã±ã¼ã«åºæã®æéã®æ¸å¼åãã§ãããªãã¸ã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.ListFormat-
è¨èªåºæã®ãªã¹ãã®æ¸å¼åãå¯è½ã«ãããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.Locale-
Unicode ãã±ã¼ã«èå¥åã表ããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.NumberFormat-
è¨èªåºæã®æ°å¤ã®æ¸å¼åãå¯è½ã«ãããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.PluralRules-
è¤æ°å½¢ãæèããæ¸å¼åãè¤æ°å½¢ã®è¨èªè¦åãå¯è½ã«ãããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.RelativeTimeFormat-
è¨èªãæèããç¸å¯¾æå»ã®æ¸å¼åãå¯è½ã«ãããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl.Segmenter-
ãã±ã¼ã«ãæèããããã¹ãåºåããå¯è½ã«ãããªãã¸ã§ã¯ãã®ããã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã§ãã
Intl[Symbol.toStringTag]-
[Symbol.toStringTag]ããããã£ã®åæå¤ã¯æåå"Intl"ã§ãããã®ããããã£ã¯Object.prototype.toString()ã§ä½¿ç¨ããã¾ãã
éçã¡ã½ãã
Intl.getCanonicalLocales()-
æ£è¦ã®ãã±ã¼ã«åãè¿ãã¡ã½ããã
Intl.supportedValuesOf()-
ãã®å®è£ ã対å¿ãã¦ãã䏿ã®ã«ã¬ã³ãã¼ãç §åé åºãé貨ãè¨æ°æ³ãåä½å¤ãå«ããã½ã¼ããããé åãè¿ãã¾ãã
ä¾
>æ¥ä»ã¨æ°å¤ã®æ¸å¼å
Intl ã使ç¨ãã¦ãç¹å®ã®è¨èªãå°åã§ä¸è¬çãªå½¢ã§æ¥ä»ãæ°å¤ãæ¸å¼åãããã¨ãã§ãã¾ãã
const count = 26254.39;
const date = new Date("2012-05-24");
function log(locale) {
console.log(
`${new Intl.DateTimeFormat(locale).format(date)} ${new Intl.NumberFormat(
locale,
).format(count)}`,
);
}
log("en-US"); // 5/24/2012 26,254.39
log("de-DE"); // 24.5.2012 26.254,39
ãã©ã¦ã¶ã¼ã®æ¨å¥¨è¨èªã®ä½¿ç¨
Intl ã¡ã½ããã«ãã¼ãã³ã¼ãããããã±ã¼ã«åãæ¸¡ã代ããã«ã navigator.language ã§æä¾ãããã¦ã¼ã¶ã¼ã®åªå
è¨èªã使ç¨ã§ãã¾ãã
const date = new Date("2012-05-24");
const formattedDate = new Intl.DateTimeFormat(navigator.language).format(date);
ãããã¯ãnavigator.languages ããããã£ã¯ã¦ã¼ã¶ã¼ã®åªå
è¨èªãã½ã¼ãæ¸ã¿ã§æä¾ãã¾ãããã®ãªã¹ãã Intl ã®ã³ã³ã¹ãã©ã¯ã¿ã¼ã«ç´æ¥æ¸¡ããã¨ã§ãåªå
度ã«åºã¥ããã±ã¼ã«ã®ãã©ã¼ã«ããã¯é¸æãå®è£
ã§ãã¾ããå©ç¨å¯è½ãªæãé©åãªãã±ã¼ã«ã鏿ããã«ã¯ããã±ã¼ã«ãã´ã·ã¨ã¼ã·ã§ã³ããã»ã¹ã使ç¨ããã¾ãã
const count = 26254.39;
const formattedCount = new Intl.NumberFormat(navigator.languages).format(count);
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Internationalization API Specification > # intl-object > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
Keyboard.getLayoutMap()navigator.languagenavigator.languages- The ECMAScript Internationalization API (Norbert Lindenberg, 2012)