Skip to content

Commit

Permalink
support multi calendars(japanese|buddhist|chinese|persian|indian|isla…
Browse files Browse the repository at this point in the history
…mic|hebrew|coptic|ethiopic)
  • Loading branch information
zoghal committed Apr 3, 2015
1 parent eaa79b4 commit 52a0d3c
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 4 deletions.
6 changes: 6 additions & 0 deletions src/I18n/Time.php
Expand Up @@ -574,6 +574,12 @@ protected function _formatObject($date, $format, $locale)
$pattern = $format;
}

if (preg_match('/@calendar=(japanese|buddhist|chinese|persian|indian|islamic|hebrew|coptic|ethiopic)/', $locale)) {
$calendar = \IntlDateFormatter::TRADITIONAL;
} else {
$calendar = \IntlDateFormatter::GREGORIAN;
}

$timezone = $date->getTimezone()->getName();
$key = "{$locale}.{$dateFormat}.{$timeFormat}.{$timezone}.{$calendar}.{$pattern}";

Expand Down
75 changes: 71 additions & 4 deletions tests/TestCase/I18n/TimeTest.php
Expand Up @@ -527,6 +527,70 @@ public function testI18nFormat()
$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'es-ES');
$expected = 'jueves, 14 de enero de 2010, 13:59:28 (GMT)';
$this->assertTimeFormat($expected, $result, 'DEfault locale should not be used');

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'fa-AF');
$expected = 'پنجشنبه ۱۴ جنوری ۲۰۱۰، ساعت ۱۳:۵۹:۲۸ (GMT)';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'fa-SA');
$expected = 'پنجشنبه ۱۴ ژانویهٔ ۲۰۱۰، ساعت ۱۳:۵۹:۲۸ (GMT)';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'fa-IR');
$expected = 'پنجشنبه ۱۴ ژانویهٔ ۲۰۱۰ م.، ساعت ۱۳:۵۹:۲۸ (GMT)';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'ja-JP');
$expected = '2010年1月14日木曜日13時59分28秒 GMT';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'fa-IR@calendar=persian');
$expected = 'پنجشنبه ۲۴ دی ۱۳۸۸ ه‍.ش.، ساعت ۱۳:۵۹:۲۸ (GMT)';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'en-IR@calendar=persian');
$expected = 'Thursday, Dey 24, 1388 at 1:59:28 PM GMT';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'ar-IR@calendar=persian');
$expected = 'الخميس، ٢٤ دي، ١٣٨٨ جرينتش ١:٥٩:٢٨ م';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'ps-IR@calendar=persian');
$expected = 'پنجشنبه د ۱۳۸۸ د مرغومی ۲۴ ۱۳:۵۹:۲۸ (GMT)';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'fa-KW@calendar=islamic');
$expected = 'پنجشنبه ۲۹ محرم ۱۴۳۱ هجری قمری، ساعت ۱۳:۵۹:۲۸ (GMT)';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'en-KW@calendar=islamic');
$expected = 'Thursday, Muharram 29, 1431 at 1:59:28 PM GMT';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'ar-KW@calendar=islamic');
$expected = 'الخميس، ٢٩ محرم ١٤٣١ جرينتش ١:٥٩:٢٨ م';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'hi-IN@calendar=indian');
$expected = 'बृहस्पतिवार २४ पौष १९३१ १:५९:२८ अपराह्न GMT';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'en-IN@calendar=indian');
$expected = 'Thursday 24 Pausa 1931 SAKA 1:59:28 PM GMT';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, null, 'ar-IN@calendar=indian');
$expected = 'الخميس، ٢٤ Pausa، ١٩٣١ جرينتش ١:٥٩:٢٨ م';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, 'Asia/Tokyo', 'ja-JP@calendar=japanese');
$expected = '平成22年1月14日木曜日 22時59分28秒 日本標準時';
$this->assertTimeFormat($expected, $result);

$result = $time->i18nFormat(\IntlDateFormatter::FULL, 'Asia/Tokyo', 'ja-JP@calendar=japanese');
$expected = '平成22年1月14日木曜日 22時59分28秒 日本標準時';
$this->assertTimeFormat($expected, $result);
}

/**
Expand Down Expand Up @@ -757,9 +821,12 @@ public function testParseDateDifferentTimezone()
*/
public function assertTimeFormat($expected, $result)
{
return $this->assertEquals(
str_replace([',', '(', ')', ' at'], '', $expected),
str_replace([',', '(', ')', ' at'], '', $result)
);
$expected = str_replace([',', '(', ')', ' at', ' م.', ' ه‍.ش.', ' AP', ' AH', ' SAKA'], '', $expected);
$expected = str_replace([' '], ' ', $expected);

$result = str_replace([',', '(', ')', ' at', ' م.', ' ه‍.ش.', ' AP', ' AH', ' SAKA'], '', $result);
$result = str_replace([' '], ' ', $result);

return $this->assertEquals($expected, $result);
}
}

0 comments on commit 52a0d3c

Please sign in to comment.