ç°¡åãªã¿ã¹ã¯ããå§ããŸããããããŒã«ã©ã€ãºãããæ¥ä»ã衚瀺ããŸãã1æ¥ããã±ãŒã«èšèªã®æã®ãã«ããŒã ãããã³1幎ãå¿
èŠã§ãã æè¿ã§ã¯ãéåžžã«ç°¡åã§ãã PHPã«ã¯ç¬èªã®
i18næ¡åŒµ
intl
ããããããŒãžã§ã³5.3以éãã«ãŒãã«ã«çµã¿èŸŒãŸããŠããŸãã ãããŠããã®
intl
ã«ã¯
IntlDateFormatter
ã¯ã©ã¹ãããããã®ã¯ã©ã¹ã«ã¯ããã€ãã®ãã©ãŒããããäºåã«å®çŸ©ãããŠããŸãã
LONG
圢åŒã䜿çšããŸãã
<?php foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) { $formatter = new IntlDateFormatter( $locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Europe/Moscow' ); echo $formatter->format(1455111783), PHP_EOL; }
çµæ ïŒ
February 10, 2016 10 2016 . 10 de febrero de 2016 Û±Û° ï»ï»ïºÛﻩ٠۲۰۱۶ ﻡ.
ãããŸã§ã®ãšããè¯ãã ãããŠãæ¡ä»¶ãå°ã倿ŽããŠã¿ãŸããããã
ããŒã«ã©ã€ãºãããæ¥ä»ã衚瀺ããŸã ã
ãã±ãŒã«èšèªã«ã¯æ¥ãšæã®ãã«ããŒã ãå¿
èŠã§ã ãã ã€ãŸãã幎ã衚瀺ããå¿
èŠã¯ãããŸããã
æãŸããçµæã¯æ¬¡ã®ããã«ãªããŸãã
February 10 10 10 de febrero Û±Û° ï»ï»ïºÛﻩ٠ﻡ.
å®éãã¿ã¹ã¯ã¯èŠãç®ã»ã©åçŽã§ã¯ãªããªããŸããã
æ£çŽãªãšããããã®æçš¿å
šäœã¯ãã®ã¿ã¹ã¯ã«ã€ããŠã®ã¿ãã€æä»çã«ãªããŸãã
ã¡ãã£ãšåŸ
ã£ãŠãã©ãããŠãããå¿
èŠãªã®ïŒ
ç¹ã«å¿
èŠãªãã©ãŒãããã«é©ã人ããããããããŸããã ããã¯ãã¿ã€ã ã¹ã¿ã³ãä»ãã®ã€ãã³ãããŒãã®åœ¢åŒã§è¡šç€ºãããäœããã®çš®é¡ã®ã·ã¹ãã ã§äœæ¥ããŠããå Žåãéåžžã«æçœã§ãã ããããããã§ãªãå Žåã¯ãTwitterãèŠãŠã¿ãŸãããã

ãã€ãŒããæè¿å
¬éãããå ŽåãTwitterã¯é©åã«ãã©ãŒããããããæéééã衚瀺ããŸãã ãã€ãŒããããªãåã«çºçããå Žåãé©åã«ãã©ãŒããããããæ¥ä»ã衚瀺ãããŸãã ããã«ããã€ãŒããä»å¹Žå
¬éãããå Žåããã®æ¥ã«ã¯å¹ŽããããŸããã ãããŠããã¯çŽ æŽãããããšã§ããããã¯è¯ãUXã®äžéšã§ãã
ããã¯ããŠãŒã¶ãŒãããããã€çºçãããããã°ããçè§£ãããšããèãæ¹ã§ãã äœåãªããŒã¿ã¯ãã€ãºã§ãã
ããã§çç±ãããããŸãã ã¿ã¹ã¯ã«æ»ããŸãããã
ããããŸãããã€ãŸããããã«ã¯å¥ã®åœ¢åŒïŒ LONG
ãªã©ïŒãå¿
èŠã§ããã幎ã¯ãããŸããããïŒ
ããã§ã¯ãããŸããã
IntlDateFormatter
ã
FULL
ã
LONG
ã
MEDIUM
ããã³
SHORT
4ã€ã®æšæºåœ¢åŒã®ã¿ããããããããã«å¹ŽããããŸãã
<?php $formats = [ IntlDateFormatter::FULL, IntlDateFormatter::LONG, IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT, ]; foreach ($formats as $format) { $formatter = new IntlDateFormatter( 'en_US', $format, IntlDateFormatter::NONE, 'Europe/Moscow' ); echo $formatter->format(1455111783), PHP_EOL; }
çµæ ïŒ
Wednesday, February 10, 2016 February 10, 2016 Feb 10, 2016 2/10/16
å°ãèããŠã¿ããšãéçºè
ãèšèšè
ããŸãã¯ãããŒãžã£ãŒã®é ã«æµ®ãã¶å¯èœæ§ã®ããã«ã¹ã¿ã 圢åŒããšã«å®æ°ãäºåã«å®çŸ©ããããšã¯äžå¯èœã§ããããšãæããã«ãªããŸãã
ããç§ã¯ã¡ããã©ç°¡åãªè§£æ±ºçãæãã€ããïŒ
ããïŒ æšæž¬ããŠã¿ãŸãããïŒ
LONG
ã§
æžåŒèšå®ããåŸã«äœãèµ·ããã®ãã1幎ã ãæžããããã§ããïŒ ããã ãšæããŸãã äŸããªããã°ãåé¡ãäœã§ããããçè§£ããããšã¯å°é£ã§ãã èŠãŠã¿ãŸãããã
ç§ãã¡ãæã£ãŠããããšãæãåºãããŠãã ããã
February 10, 2016 10 2016 . 10 de febrero de 2016 Û±Û° ï»ï»ïºÛﻩ٠۲۰۱۶ ﻡ.
幎ãåãåããŸãã
February 10, 10 . 10 de febrero de Û±Û° ï»ï»ïºÛﻩ٠ﻡ.
,
ããã³
.
ãš
de
ãããªããããã¹ãŠã®æ®çã¢ãŒãã£ãã¡ã¯ããšãééããªãæåŸã®è¡ã«ããä»ã®ãã®ãåç
§ããŠãã ããã
ãããã£ãŠãããããããã¯å³å¯ãªæ±ºå®ã§ãããããŸããã ã¡ãªã¿ã«ãããã«ã€ããŠæ¥ãã¹ãããšã¯äœããããŸãããããã¯ãç§ã®æåã®ãè¿
éãªæ±ºå®ãã§ããããŸããã
ããŠãããã«ã¯ãã¿ãŒã³ããããŸãããã¿ãŒã³ã䜿çšããŸãããïŒ
ã¯ãã
IntlDateFormatter
å®éã«ã¯å
éšçã«ãã¿ãŒã³ã§ã®ã¿æ©èœãïŒãã©ãŒããã宿°ã¯åã«å¯Ÿå¿ãããã¿ãŒã³ã«å€æãããŸãïŒãäœææã«ç¬èªã®ãã¿ãŒã³ãæå®ã§ããŸãã
ãã¿ãŒã³ã¯ãããã€ãã®
äºåå®çŸ©ãããæåã·ãŒã±ã³ã¹ã§æ§æãã
ãŸã ã
èŠãŠã¿ãŸããã...ãd MMMMããã¿ãŒã³ãå¿
èŠãªããã§ãã
<?php foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) { $formatter = new IntlDateFormatter( $locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, 'Europe/Moscow', null, "d MMMM" ); echo $formatter->format(1455111783), PHP_EOL; }
çµæ ïŒ
10 February 10 10 febrero Û±Û° ÙÙØ±ÛÙÙ
ããããïŒ ã¡ãã£ãšåŸ
ã£ãŠãããã¯äžäœäœã ïŒ ãã...
æãåºãããŠ
February 10 10 10 de febrero Û±Û° ï»ï»ïºÛﻩ٠ﻡ.
ããããæ°ã«ããªãã§ããã ã®å¶ç¶ã§ãã ããã¯ãæå®ãããã¿ãŒã³ãæ¥ä»ã®éšåïŒæ¥ãšæïŒã ãã§ãªããããããé²ãã¹ãé åºãšåºåãæåãæå®ããããã§ãã ãæ¥çªå·ãæåã«ãæ¬¡ã«æã®ãã«ããŒã ããããã®éã«ã¹ããŒã¹ãå
¥ããŠãã ããããšèšã£ãããã«ã ãã¹ãŠã®ãã±ãŒã«ã ããã¯ãŸã£ãããã³ã»ã³ã¹ã§ãã
çå®ã¯ã
ãã±ãŒã«ã¯èšèªã§ããã ãã§ãªããæ¥ä»ã®æžåŒèšå®ãã¿ãŒã³ã§ããããšããããšã§ã ã ãããŠããã¿ãŒã³ã¯çµæã«å«ãŸããã ãã§ãªãããã
ãã©ã®ãããªé åºã§é
眮ãããã§ãã
<?php foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) { $formatter = new IntlDateFormatter( $locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE, 'Europe/Moscow' ); echo $formatter->getPattern(), PHP_EOL; }
çµæ ïŒ
MMMM d, y d MMMM y ''. d 'de' MMMM 'de' y d MMMM y G
èŠãŠã圌ãã¯ãã¹ãŠç°ãªã£ãŠããŸãã
ããããæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ãå¿
èŠã§ãïŒ åœŒãããã§ã¯ãªããšããããšã¯ããããªãïŒ ãããšã...ïŒ
ããæ¯ã¯ããç§ã¯ãŸã£ããåããšæã£ãã PHPã§ãéçºããããšã³ã·ã¹ãã ãšæã匷åãªã³ãã¥ããã£ã®1ã€ãåããæäººèšèªã§ã¯ãåºæ¬çãªæ©èœããªãå¯èœæ§ããããŸããïŒ æ²ãããæ¬åœïŒå¯èœã
å°ãªããšã1ã€ã®éåžžã«éèŠãªããšã
intl
ãããŸãã
intl
ã®
DateTimePatternGenerator
ã¯ã©ã¹ã§ãã ããã¯ãç§ãã¡ã®å°ããªåé¡ãšãã®ãããªä»ã®ãã¹ãŠã解決ããããã«æ£ç¢ºã«äœãããŠããŸãã
åŸ
ã£ãŠãåŸ
ã£ãŠãã©ããªICUãªã®ïŒ
ICUã¯ãUnicodeã®åœéã³ã³ããŒãã³ããã§ããUnicodeã®åœéåã³ã³ããŒãã³ãã§ãã
ICU Webãµã€ãããã®åŒçšã
ICUã¯ããœãããŠã§ã¢ã¢ããªã±ãŒã·ã§ã³ã®Unicodeããã³ã°ããŒããªãŒãŒã·ã§ã³ãµããŒããæäŸãããæçãããåºã䜿çšãããŠããC / C ++ããã³Javaã©ã€ãã©ãªã®ã»ããã§ãã ICUã¯åºãç§»æ€å¯èœã§ããã¹ãŠã®ãã©ãããã©ãŒã äžã§ãC / C ++ãšJavaãœãããŠã§ã¢éã§åãçµæãã¢ããªã±ãŒã·ã§ã³ã«æäŸããŸãã
...
æžåŒèšå®ïŒéžæãããã±ãŒã«ã®èŠåã«åŸã£ãŠãæ°å€ãæ¥ä»ãæå»ãé貚é¡ãæžåŒèšå®ããŸãã ããã«ã¯ãæãšæ¥ã®ååã®éžæããèšèªãžã®ç¿»èš³ãé©åãªç¥èªã®éžæããã£ãŒã«ãã®æ£ããé åºä»ããªã©ãå«ãŸããŸãã ãã®ããŒã¿ã¯ãCommon Locale Data RepositoryãããååŸãããŸãã
èŠããã«ãããã¯ã©ã€ãã©ãªã®ãã®ãããªã¯ãŒã«ãªã»ããã§ãã
intl
æ¡åŒµæ©èœèªäœã¯ãéæ³ã®å®è¡æ¹æ³ãèªèããŠããŸããããããã®ã©ã€ãã©ãªã®ãããã·ã®ãããªãã®ã§ãã
$ php -i | grep intl -A5 intl Internationalization support => enabled version => 1.1.0 ICU version => 56.1 ICU Data version => 56.1
IntlDateFormatter
ã䜿çšããã«ã¯ãã·ã¹ãã ã«ICUãã€ã³ã¹ããŒã«ããå¿
èŠããããŸãïŒãŸãã¯ãæåã«ICUã§PHPããã«ãããå¿
èŠããããŸãïŒã ICUã®ããŒãžã§ã³ãç°ãªããšããã©ãŒãããçµæãç°ãªããŸãã
$ dpkg -S icu libicu52:amd64: /usr/lib/x86_64-linux-gnu/libicule.so.52.1 libicu52:amd64: /usr/lib/x86_64-linux-gnu/libicule.so.52 libicu52:amd64: /usr/lib/x86_64-linux-gnu/libicutest.so.52 ...
ïŒããŒãžã§ã³52.1ãã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŠãããäžèšã®ããã«PHPã¯56.1ãããã«ããããŠããŸããããã¯æ£åžžã§ããïŒ
ãªãã»ã©ã ããªãã¯ããã€ãã®DateTimePatternGenerator
ã«èšåããŸãããæããŠãã ãã
æ£ç¢ºã«ã¯ã
DateTimePatternGenerator
ã¯ãç§ã®æèŠã§ã¯ãæ¥æã®ãã©ãŒãããã«é¢ãããã®ã®äžã§ICUã§æãéæ³ã®ãããªãã®ã§ãã
ICUãŠã§ããµã€ãããã®å¥ã®åŒçšïŒ
ãã®ã¯ã©ã¹ã¯ããyy-MM-ddããªã©ã®æ¥ä»åœ¢åŒãã¿ãŒã³ã®æè»ãªçæãæäŸããŸãã
ãŠãŒã¶ãŒã¯ãé£ç¶ãããã¿ãŒã³ã远å ããŠãžã§ãã¬ãŒã¿ãŒãæ§ç¯ã§ããŸãã ãããå®äºãããšããã¹ã±ã«ãã³ãã䜿çšããŠã¯ãšãªãäœæã§ããŸããããã¯ãç®çã®ãã£ãŒã«ããšé·ãã ããå«ããã¿ãŒã³ã§ãã ãžã§ãã¬ãŒã¿ã¯ããã®ã¹ã±ã«ãã³ã«å¯Ÿå¿ãããæé©ãªããã¿ãŒã³ãè¿ããŸãã
éåžžããã®ã¯ã©ã¹ã¯ç¹å®ã®ãã±ãŒã«ã®ããŒã¿ã§äºåã«æ§ç¯ãããŠããããã人ã
ã䜿çšããäž»ãªã¡ãœããã¯getBestPatternïŒStringã¹ã±ã«ãã³ïŒã§ãã ãã ãããžã§ãã¬ãŒã¿ã¯ä»ã®ããŒã¿ããçŽæ¥æ§ç¯ããããšãã§ããŸãã
ããã¯ãŸãã«ç§ãã¡ãå¿
èŠãšãããã®ã§ãïŒ ãããããã¹ã±ã«ãã³ãïŒãã©ãŒãããçµæã«å«ãŸããæ¥ä»ã®éšåïŒã
getBestPattern
ã¡ãœããã«
getBestPattern
ãããšãæãé©åãªãã¿ãŒã³ãè¿ãããŸããããã§ãäœããã¹ããããã§ã«ããã£ãŠããŸããããã
IntlDateFormatter
æž¡ããŸãã
ã©ã®ããã«æ©èœãããã
$skeleton = "MMMMd"; foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) { $pgen = new IntlDateTimePatternGenerator($locale); $pattern = $pgen->getBestPattern($skeleton); $formatter = new IntlDateFormatter( $locale, IntlDateFormatter::NONE, IntlDateFormatter::NONE, 'Europe/Moscow', null, $pattern ); echo $formatter->format(1455111783), PHP_EOL; }
çµæïŒããããæ¬¡ã®ããã«ãªããŸãïŒïŒ
February 10 10 10 de febrero Û±Û° ï»ï»ïºÛﻩ٠ﻡ.
ãŠãïŒ ãããããç§ã¯æãã«ãæãŸããçµæããããã¯ãã³ããŒããŸããã å®éãäœãããã«ããã®ãããããŸãããããããªãããšãæã¿ãŸãã
ã§ã¯ãä»ããã«ã¹ã¿ã 圢åŒã䜿çšãããå Žåã¯ã©ãããã°ããã§ããïŒ
ãã®çµæã2çªç®ã®æç¢ºãªæ±ºå®ã«è³ããŸããããããžã§ã¯ãããµããŒãããåãã±ãŒã«ã®åã«ã¹ã¿ã ãã¿ãŒã³ãå«ãæ§æãçæããããšã§ãã ãããŠãæ°ãããã±ãŒã«ã衚瀺ããããã³ã«ãããè¡ããŸãã
ããã¯ç°¡åãªã¹ããããã§ãã
<?php // ... foreach ($locales as $locale) { $pattern = <<<CONFIG '%s' => [ 'medium_no_year' => "%s", // %s 'long_no_year' => "%s", // %s ], CONFIG; $mediumF = new IntlDateFormatter($locale, IntlDateFormatter::MEDIUM, IntlDateFormatter::NONE); $longF = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); printf( $pattern, $locale, $mediumF->getPattern(), $mediumF->format(1455111783), $longF->getPattern(), $longF->format(1455111783) ); }
ãã®çµæã次ã®ããã«ãªããŸã
'en_US' => [ 'medium_no_year' => "MMM d, y", // Feb 10, 2016 'long_no_year' => "MMMM d, y", // February 10, 2016 ], 'ru_RU' => [ 'medium_no_year' => "d MMM y ''.", // 10 . 2016 . 'long_no_year' => "d MMMM y ''.", // 10 2016 . ], 'es_ES' => [ 'medium_no_year' => "d MMM y", // 10 feb. 2016 'long_no_year' => "d 'de' MMMM 'de' y", // 10 de febrero de 2016 ], 'fa_IR' => [ 'medium_no_year' => "d MMM y G", // Û±Û° ÙÙØ±ÛÙÙ Û²Û°Û±Û¶ Ù
. 'long_no_year' => "d MMMM y G", // Û±Û° ÙÙØ±ÛÙÙ Û²Û°Û±Û¶ Ù
. ],
次ã«ãããããã¹ãŠã®è¡ã
æåã§èª¿ã¹ãŠã幎ã®è¡šç€ºãæ
åœããéšåãåé€ããå¿
èŠããããŸãã
'en_US' => [ 'medium_no_year' => "MMM d", // Feb 10 'long_no_year' => "MMMM d", // February 10 ], 'ru_RU' => [ 'medium_no_year' => "d MMM", // 10 . 'long_no_year' => "d MMMM", // 10 ], 'es_ES' => [ 'medium_no_year' => "d MMM", // 10 feb. 'long_no_year' => "d 'de' MMMM", // 10 de febrero ], 'fa_IR' => [ 'medium_no_year' => "d MMM", // Û±Û° ÙÙØ±ÛÙÙ Ù
. 'long_no_year' => "d MMMM", // Û±Û° ÙÙØ±ÛÙÙ Ù
. ],
ããããã®ãã±ãŒã«ããããšããããã¯å€§å€ãªä»äºã«ãªããŸããç§ãèŠããŠãããŠãã ããïŒ
éããªå«ã³å£°ãèãããŸã ïŒã
ããã ãã§ã¯ãããŸããã ãã®ãããªæ¥ä»ãæéãšãšãã«è¡šç€ºããå Žåã¯ã2åã®ãã¿ãŒã³ãçæããå¿
èŠããããŸãã å¥ã
ã«ãã©ãŒããããããæ¥ä»ãšæå»ãååŸããŠçµåããããšã¯ã§ããªãããã§ãã æ¥ä»ã®æåŸã«ãæåã«ããŸãã¯éäžã§æéã远å ããŸããïŒ
<?php foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) { $pattern = <<<CONFIG '%s' => [ 'medium_no_year-short' => "%s", // %s 'long_no_year-short' => "%s", // %s ], CONFIG; $mediumF = new IntlDateFormatter($locale, IntlDateFormatter::MEDIUM, IntlDateFormatter::SHORT); $longF = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::SHORT); printf( $pattern, $locale, $mediumF->getPattern(), $mediumF->format(1455111783), $longF->getPattern(), $longF->format(1455111783) ); }
çµæ ïŒ
'en_US' => [ 'medium_no_year-short' => "MMM d, y, h:mm a", // Feb 10, 2016, 2:43 PM 'long_no_year-short' => "MMMM d, y 'at' h:mm a", // February 10, 2016 at 2:43 PM ], 'ru_RU' => [ 'medium_no_year-short' => "d MMM y ''., H:mm", // 10 . 2016 ., 14:43 'long_no_year-short' => "d MMMM y ''., H:mm", // 10 2016 ., 14:43 ], 'es_ES' => [ 'medium_no_year-short' => "d MMM y H:mm", // 10 feb. 2016 14:43 'long_no_year-short' => "d 'de' MMMM 'de' y, H:mm", // 10 de febrero de 2016, 14:43 ], 'fa_IR' => [ 'medium_no_year-short' => "d MMM y GØâ H:mm", // Û±Û° ÙÙØ±ÛÙÙ Û²Û°Û±Û¶ Ù
.Øâ Û±ÛŽ:ÛŽÛ³ 'long_no_year-short' => "d MMMM y GØ Ø³Ø§Ø¹Øª H:mm", // Û±Û° ÙÙØ±ÛÙÙ Û²Û°Û±Û¶ Ù
.Ø Ø³Ø§Ø¹Øª Û±ÛŽ:ÛŽÛ³ ],
ã¯ãããã®å¹Žã®è²¬ä»»éšåãåé€ããŸãã
'en_US' => [ 'medium_no_year-short' => "MMM d, h:mm a", // Feb 10, 2:43 PM 'long_no_year-short' => "MMMM d, 'at' h:mm a", // February 10, at 2:43 PM ], 'ru_RU' => [ 'medium_no_year-short' => "d MMM, H:mm", // 10 ., 14:43 'long_no_year-short' => "d MMMM, H:mm", // 10 , 14:43 ], 'es_ES' => [ 'medium_no_year-short' => "d MMM H:mm", // 10 feb. 14:43 'long_no_year-short' => "d 'de' MMMM, H:mm", // 10 de febrero, 14:43 ], 'fa_IR' => [ 'medium_no_year-short' => "d MMMØâ H:mm", // Û±Û° ÙÙØ±ÛÙÙØâ Û±ÛŽ:ÛŽÛ³ 'long_no_year-short' => "d MMMMØ Ø³Ø§Ø¹Øª H:mm", // Û±Û° ÙÙØ±ÛÙÙØ ساعت Û±ÛŽ:ÛŽÛ³ ],
ã¯ããããªãã¯ãããèŠãã ãã§ãããã«ã·ã¢èªã®ã«ã³ãã§ããæ®éã®ãç§ãã¡ã®ãã³ã³ãã§ã¯ãããŸããããØãããªãã¯å¥ã
ã®æ¥ä»ãšæå»ããçµæãåéããæ¹æ³ãæ£ç¢ºã«æšæž¬ããããšã¯ã§ããŸããã
ããããPHPã®äžçã®èª°ãããããã©ã®ããã«è¡ãã®ã§ããããïŒ
ããã¯ä¿¡ããããããšã§ããã
圌ãã¯æ¥ä»ã®ããŒã«ã©ã€ãºã«ã€ããŠãŸã£ããå¿é
ããªãããééã£ãŠããŸãã
PHPã§äœæãããããã€ãã®CMSã®ãœãŒã¹ã³ãŒãã調ã¹ãŸããã
ããã¯ãã¬ãŒã ã¯ãŒã¯ã®ã¿ã¹ã¯ã§ã¯ãªããšèããŠããã®ã§ããã¬ãŒã ã¯ãŒã¯ãèŠãŸããã§ããã ãã ããäœããã®åºæ¬çãªãµããŒãããããããããŸãã... å®éãç§ã¯Yii2ã詊ããŠã¿ãŸãããã çŽç²ãªintl
䜿çšãæšå¥šããŠããŸãã ããã§ã¯ãããè¯ãCMSãå
¥æããŸãããã
Drupal
æåã®æ€çŽ¢ã§ãç§ã¯
èå³ããããã¿ã€ãã«ã®é©ãã¹ããã±ããã«åºããããŸãã-ãæ¥ä»ã®åœéãµããŒããå£ããŠããŸãããããåé€ããŠãã ãããã ãã«ã¹ãïŒïŒ ãããŠãããã¯åè«ã§ã¯ãããŸããã圌ãã¯æ¬åœã«ãããããŸããã

äžè¬ã«ããããã¯ã»ãŒåãæ¹æ³ã§æ¥ä»ããã©ãŒãããããåé¡ã解決ããŸãïŒã«ã¹ã¿ã æ§æã®ããã¯ïŒ
ããã ãããããïŒã¹ã¯ãªãŒã³ã·ã§ãããåç
§ïŒã®åã«ãããŒã«ã©ã€ãºãã¿ãŒã³å°çšã®
intl
ããŒããããŸããã ãããŠä»ã圌ãã¯æ°ã«ããŸããã
ãŸããæ£ããçè§£ããå ŽåïŒç§ã¯Drupalã®ã¢ã¯ãã£ããŠãŒã¶ãŒã§ã¯ãããŸããïŒãCMSãã€ã³ã¹ããŒã«ããåŸãåãŠãŒã¶ãŒã¯ããããã¹ãŠã®ãã¿ãŒã³ããã³ã§æåã§ç»é²ããå¿
èŠããããŸãã ãã±ãŒã«ããšã ãŸãããŸãã¯ããã«ç§ãç¥ããªãäœãããããŸãããããã¯ãã®ããã«èŠããŸãã
8.1ã§è¡ãããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
ããã
ãããŒãžã§ã³9.xã§ã¯
ïŒåœŒãã¯ãŸã ãã®ãã©ã³ããã
intl
ããŒãã«ããã§ããŠããªãããã§ãïŒ
äžè¬çã«ãããã¯ããã»ã©æªãããšã§ã¯ãããŸããããCMSãŠãŒã¶ãŒãšããŠãã©ã®ãããªçš®é¡ã®æ¥ä»ãã©ãŒãããæ¹æ³ã䜿çšãããŠããããç¥ãããã«ãèãããããã¹ãŠã®æåã調æ»ããããããŸããã ãã®ãã¹ãŠã®äœæ¥ã¯ãã§ã«
CLDRã§è¡ãããŠããŸãã ãã¡ãããã«ã¹ã¿ã ãã¿ãŒã³ãå¿
èŠãªå ŽåããããŸãããç§ãåæããã®ã¯ãçµæãšããŠè¡šç€ºããæ¥ä»ãšæå»ã®éšåãæ£ç¢ºã«ç€ºãããšã ãã§ãïŒãæ¥ãšæã®ã¿ããé¡ãããŸãããŸãã¯ã芪åã«ããŠãã ãããç§ãïŒã
ã¯ãŒããã¬ã¹
ç§ã¯WordPressãšã»ãŒåãé¢ä¿ãæã£ãŠããŸãããã¢ã¯ãã£ããŠãŒã¶ãŒã§ã¯ãªããããGithubã§æ€çŽ¢ã䜿çšããŸããã ããã§é¢å¿ã®ããäž»ãª
functions.php
ã¯ã
functions.php
date_i18n
ã®ãã
functions.php
ïŒãšããã§ãçãããwtfïŒ5.2kè¡ã®ã³ãŒãã®é¢æ°ãå«ããã¡ã€ã«ïŒçå£ã«ïŒæ¢ã«2016幎ããããŸãïŒã

ç§ã¯æ£çŽã«ããããã©ã®ããã«æ©èœããããçè§£ããããšããŠ30åãè²»ãããŸããã ããã...ããã...ã¯ãããããèŠãŠãã ããã

Goddamn ...èŠããã«ãããã¯ç¢ºãã«æ£ããå®è£
ãããæ¥ä»ã®ããŒã«ã©ã€ãºã®ããã«ã¯èŠããŸããããå°ãªããšã
date_format
ããã§ãã 圌ãã¯ãã¯ãæã𿿥ã®ååãããŒã«ã©ã€ãºããããšããŠããããã§ãã ç§ãééã£ãŠããå Žåãéå®å®¶ã¯ç§ãä¿®æ£ããŸãã
JoomlaïŒ
ãžã¥ã ã©ã«ã¯ãŸã£ããè§ŠããŸããã§ããã ãããã£ãŠãã¹ããŒã ã¯åãã§ãã
æçµçã«ã¯ãåãã±ãŒã«ã«èšå®ããå¿
èŠãããäºåå®çŸ©ããããã©ãŒãããã®æã§ããDrupalãšã»ãŒåãã§ãã
ããã©ã«ãã®ã€ã³ã¹ããŒã«ã®en-GB
ãããã®æçŽãèŠãŸããïŒ Jumlaã¯
date_format
ïŒä»ã®å€ãã®å Žåãšåæ§ã«ïŒäœ¿çšãã
intl
ã¯äœ¿çšããªãããšãæããŠãããŸãã ããã¯æ£åœåãããŸããïŒ ç§ã®æèŠã§ã¯ããããã ã«ãŒãã«ã«ã¯ããŒãžã§ã³5.3ã®
intl
ãå«ãŸããŠãããæ¢ã«ã€ãŒã7ã«PHP 7ããããææ°ã®ã³ãŒãã®æå°èŠä»¶ã¯5.5ã§ãã ã€ãŸãããã¬ãŒã ã¯ãŒã¯ããµãŒãããŒãã£ã®æ¡åŒµæ©èœãèšèªã®ææ°ããŒãžã§ã³ã®ãããã䜿çšããªãå Žåãã³ãŒããã¢ã€ãã³ã§ãåäœããã¯ãã§ããããã§ã«å€ãã¢ã€ãã³ã§ã³ãŒããå®è¡ãããŠãŒã¶ãŒããã§ã«å€ãããã®ã§ãç§ã¯å®å
šã«çè§£ããŠããŸãããŒãžã§ã³ã ããããããã¯æããã«ããã§ã¯ãããŸããã ç§ãã¡ã¯ããããã¬ã¬ã·ãŒããŸãã¯ãæè¡ç矩åããšåŒã³ãŸãããããªããã°äœãšãç¶ããŸãã
Modxé©åœ
transport.core.system_settings.php
get.class.php
modifier.date_format.php
strftime
ã¯
date_format
ïŒæ£ããããŒã«ãªãŒãŒã·ã§ã³ã®èª€ã£ãæèŠãäžãããã©ãŒãããããããŸãïŒãããå°ãè¯ãèãããŸãããããŒã«ã©ã€ãºã«ã€ããŠè©±ããšãã¯äœããããŸãããããã®é¢æ°ã¯å¿
èŠãªããšãããŸããã
Magento2
Magentoã¯åžžèçãªCMSã§ã¯ãªããeã³ããŒã¹ãã©ãããã©ãŒã ã§ãããåºãç¥ãããŠããã»ããç¬èªã®ãã¬ãŒã ã¯ãŒã¯ãåããŠããŸãã ãããã£ãŠãäœããã£ãŠãã
ãããŠããããç§ã®ã¬ãã¥ãŒã§æ¥ä»ã®ããŒã«ã©ã€ãºã
ã»ãŒæ£ããè¡ãããå¯äžã®ã³ãŒãããŒã¹ã§ãããšèšããããåŸ
ãŸããïŒ ããã¯
IntlDateFormatter
ã䜿çšããŠåºäŒã£ãå¯äžã®ã³ãŒãã§ãããããã«ãæžåŒèšå®ã³ã³ããŒãã³ãã®åºç€ãšããŠäœ¿çšãããŸãã

ãããã圌ãã®ã³ãŒãã¯å®ç§ã§ã¯ãããŸããã
Timezone.phpã調ã¹ãŸãã

幎ãªãã§æ¥ä»ããã©ãŒãããããããšããå ŽæãèŠã€ããããšãã§ããŸããã§ããã ãããã圌ãã¯å°ãåã«ãã£ãã®ãšåãééããç¯ããŠããããã«æããŸãããé·ãå¹Žã®æ¥ä»ãããã©ãŒããããããšãã«å¹Žã眮ãæããããšããŠããŸãã ãã©ããïŒ ç§ã¯éåžžã®ç¬¬äžäººè
ã§ã¯ãããŸããïŒå
èªã¿ãšåŸèªã¿ã«ç²ŸéããŠããŸããïŒã®ã§ã
getDateFormatWithLongYear
ããã³ãŒããå®è¡ããŠãäœãèµ·ãããã確èªãããã ãã§ãã
<?php foreach (['en_US', 'ru_RU', 'es_ES', 'fa_IR'] as $locale) { $dateFormat = (new \IntlDateFormatter( $locale, \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE ))->getPattern(); $formatWithLongYear = preg_replace( '/(?<!y)yy(?!y)/', 'Y', $dateFormat ); $formatter = new \IntlDateFormatter( $locale, \IntlDateFormatter::NONE, \IntlDateFormatter::NONE, null, null, $formatWithLongYear ); echo $formatter->format(1455111783), PHP_EOL; }
çµæ ïŒ
2/10/2016 10.02.2016 10/2/2016 Û²Û°Û±Û¶/Û²/Û±Û° Ù
.
æåã®ããã§ãïŒ ããŠãæã
ãã®ããªãã¯ãæ©èœããŸãã ããã§ã¯ã圌ãããã®ããã«åé¯ããŠãããšããäºå®ãããéèŠã§ãã ããã¯ãPHPã«ãŸã£ããåããã¿ãŒã³ãžã§ãã¬ãŒã¿ãŒããªãããšã®ãã1ã€ã®ç¢ºèªã§ãã
ãŸãã
getDateTimeFormat
ã¯æãããªééãã§ãã æ¥ä»ãšæå»ã®ãã¿ãŒã³ãé£çµããŸãã ãããããããæ¥ä»ãšæå»ã衚瀺ãããé åºã¯ãã¹ãŠã®ãã±ãŒã«ã§åãã§ã¯ãããŸãããããã¯ãã§ã«äžã§èŠãŸããã
ãã¡ãã
ã芧ãã ãã ã ãšã«ããçŽ æŽãããä»äºãMagentoïŒ
ããªããæåã«åé¡ã«æ°ã¥ãããšèšãããã§ããïŒ
ãŸã£ãããããŸããã HHVMã®é£äžã¯ãã®ãžã§ãã¬ãŒã¿ãŒãé·ãéç§»æ€ããŠããŸã-https
://github.com/facebook/hhvm/commit/bc84daf7816e4cd268da59d535dcadfc6cf01085 å°æ¬ããïŒ
ãŸããPHPãã©ãã«ãŒã«ãã°ããããŸã-https
: //bugs.php.net/bug.php?
id= 70377ãDateTimePatternGeneratorãintlã«è¿œå ããŠãã ãããã ãšããã§ãããªãããã®åé¡ã®åœ±é¿ãåããŠããå Žåã¯æç¥šããŠãã ããã çªç¶ããã®æç¥šã¯æ¬åœã«äœããæå³ããŸãã ããšããã§ãCSRFã«å¯Ÿããä¿è·ã¯ãããŸãããã
誰ã§ãæ¹å€ã§ããŸãã èªåã§åã£ãŠãããŸã
ãŸããäžè¬çã«ãã³ãã¥ããã£ã®æ³šæãåé¡ã«
intl
ãäžè¶³ããŠãããã®ã
intl
ã«è¿œå ããããã«éçºè
ã®1人ã«é Œãããšããããã€ãã®ããªãåããªè©Šã¿ã®åŸãç§ã¯ããããŸãã
intl
://github.com/ksimka/intl_dtpg æ¬è³ªçã«å¯äžã®é¢æ°ïŒé¢æ°ãŸãã¯ã¯ã©ã¹ã¡ãœããã®åœ¢åŒïŒãå®è£
ãããã®æ¡åŒµæ©èœã¯ãããã®æ¥ä»ãšæå»ã®éšåã®ã»ããã«æãé©ãããã¿ãŒã³ãèŠã€ããŸããã åã
DateTimePatternGenerator::getBestPattern
ïŒãã®ã¯ã©ã¹ã«ã¯ãŸã å€ãã®è峿·±ãããšããããŸãããå人çã«ã¯ãä»ã®ãšãããã®ã¡ãœããã®ã¿ãéåžžã«äžè¶³ããŠããŸãïŒã
ããããåé¡ã¯ãç§ãC ++ãŸãã¯Cã®ãããããæ¥ãã§ããªããšããããšã§ãããããã£ãŠãããªãèªèº«ã®å±éºãšãªã¹ã¯ã§ããã䜿çšããŠãã ããïŒå®è£
åŸããã¹ãŠãããã§ããŸããããã©ãããæããŸãïŒã æ¡åŒµæ©èœã¯ãexamples + google + stackoverflowã¡ãœããã䜿çšããŠãPHPCPPã«åºã¥ãC ++ã§èšè¿°ãããŠããŸãã ãããã£ãŠãã©ããªæ¹åã倧æè¿ã§ãã
äžè¬ã«ãçŸåšãPHPã³ã¢éçºããŒã ãportãplizã誰ãã
intl
ãããã®æ¬ èœéšåããŸãã¯å°ãªããšãzadolbat PHPéçºè
ããã®ãªã¯ãšã¹ãããããŸãã
go
ã匷å¶çã«èšç·Žãããšè
ããŠãç§ã¯ããªãã匷å¶ãããšèšãããšãã§ããŸãã
ããã ãã§ã æåŸãŸã§èªãã§ãããŠããããšãïŒ