Browse Source

[ZF-6701] Zend_Locale:

 - added support for IntervalFormat


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15855 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 years ago
parent
commit
717d0c1195

+ 20 - 0
documentation/manual/en/module_specs/Zend_Locale-Functions.xml

@@ -388,6 +388,15 @@ print Zend_Locale::getTranslation('de', 'language', 'zh');
                         <entry>Returns a list of default formats for given date or time items</entry>
                     </row>
                     <row>
+                        <entry><emphasis>DateInterval</emphasis></entry>
+                        <entry>
+                            Returns a list of date or time formats which are used when you want to
+                            display intervals. The list is a multidimentional array where the first
+                            dimension is the interval format, and the second dimension is the token
+                            with the greatest difference.
+                        </entry>
+                    </row>
+                    <row>
                         <entry><emphasis>Field</emphasis></entry>
                         <entry>Returns a localized list of date fields which can be used to display calendars
                             or date strings like 'month' or 'year' in a wished language. If you omit the value
@@ -789,6 +798,17 @@ print Zend_Locale::getTranslation('de', 'language', 'zh');
                         <entry>Returns the default format for a given date or time item</entry>
                     </row>
                     <row>
+                        <entry><emphasis>DateInterval</emphasis></entry>
+                        <entry>
+                            Returns the interval format for a given date or time format. The first
+                            value is the calendar format, normally 'gregorian'. The second value is
+                            the interval format and the third value the token with the greatest
+                            difference. For example: array('gregorian', 'yMMMM', 'y') returns the
+                            interval format for the date format 'yMMMM' where 'y' has the greatest
+                            difference.
+                        </entry>
+                    </row>
+                    <row>
                         <entry><emphasis>Field</emphasis></entry>
                         <entry>Returns a translated date field which can be used to display calendars or
                             date strings like 'month' or 'year' in a wished language. You must give the

+ 23 - 2
library/Zend/Locale/Data.php

@@ -529,12 +529,22 @@ class Zend_Locale_Data
                 if (empty($value)) {
                     $value = "gregorian";
                 }
-                $_temp  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/availableFormats/dateFormatItem', 'id');
-                foreach ($_temp as $key => $found) {
+                $_temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/availableFormats/dateFormatItem', 'id');
+                foreach($_temp as $key => $found) {
                     $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/availableFormats/dateFormatItem[@id=\'' . $key . '\']', '', $key);
                 }
                 break;
 
+            case 'dateinterval':
+                if (empty($value)) {
+                    $value = "gregorian";
+                }
+                $_temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/intervalFormats/intervalFormatItem', 'id');
+                foreach($_temp as $key => $found) {
+                    $temp[$key] = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/intervalFormats/intervalFormatItem[@id=\'' . $key . '\']/greatestDifference', 'id');
+                }
+                break;
+
             case 'field':
                 if (empty($value)) {
                     $value = "gregorian";
@@ -1063,6 +1073,17 @@ class Zend_Locale_Data
                 $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/availableFormats/dateFormatItem[@id=\'' . $value[1] . '\']', '');
                 break;
 
+            case 'dateinterval':
+                if (empty($value)) {
+                    $value = array("gregorian", "yMd", "y");
+                }
+                if (!is_array($value)) {
+                    $temp = $value;
+                    $value = array("gregorian", $temp, $temp[0]);
+                }
+                $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/intervalFormats/intervalFormatItem[@id=\'' . $value[1] . '\']/greatestDifference[@id=\'' . $value[2] . '\']', '');
+                break;
+
             case 'field':
                 if (!is_array($value)) {
                     $temp = $value;

+ 132 - 0
tests/Zend/Locale/DataTest.php

@@ -2570,4 +2570,136 @@ class Zend_Locale_DataTest extends PHPUnit_Framework_TestCase
         $value = Zend_Locale_Data::getContent('de_AT', 'dateitem', 'MMMMd');
         $this->assertEquals("d. MMMM", $value);
     }
+
+    /**
+     * test for reading intervalformat from locale
+     * expected array
+     */
+    public function testDateInterval()
+    {
+        $value = Zend_Locale_Data::getList('de_AT', 'dateinterval');
+        $result = array(
+            'M' => array('M' => 'M.-M.'),
+            'MEd' => array(
+                'M' => 'E, dd.MM. - E, dd.MM.',
+                'd' => 'E, dd.MM. - E, dd.MM.'),
+            'MMM' => array('M' => 'MMM-MMM'),
+            'MMMEd' => array(
+                'M' => 'E, dd. MMM - E, dd. MMM',
+                'd' => 'E, dd. - E, dd. MMM'),
+            'MMMM' => array('M' => 'LLLL-LLLL'),
+            'MMMd' => array(
+                'M' => 'dd. MMM - dd. MMM',
+                'd' => 'dd.-dd. MMM'),
+            'Md' => array(
+                'M' => 'dd.MM. - dd.MM.',
+                'd' => 'dd.MM. - dd.MM.'),
+            'd' => array('d' => 'd.-d.'),
+            'h' => array(
+                'a' => 'HH-HH',
+                'h' => 'HH-HH'),
+            'hm' => array(
+                'a' => 'HH:mm-HH:mm',
+                'h' => 'HH:mm-HH:mm',
+                'm' => 'HH:mm-HH:mm'),
+            'hmv' => array(
+                'a' => 'HH:mm-HH:mm v',
+                'h' => 'HH:mm-HH:mm v',
+                'm' => 'HH:mm-HH:mm v'),
+            'hv' => array(
+                'a' => 'HH-HH v',
+                'h' => 'HH-HH v'),
+            'y' => array('y' => 'y-y'),
+            'yM' => array(
+                'M' => 'MM.yy - MM.yy',
+                'y' => 'MM.yy - MM.yy'),
+            'yMEd' => array(
+                'M' => 'E, dd.MM.yy - E, dd.MM.yy',
+                'd' => 'E, dd.MM.yy - E, dd.MM.yy',
+                'y' => 'E, dd.MM.yy - E, dd.MM.yy'),
+            'yMMM' => array(
+                'M' => 'MMM-MMM y',
+                'y' => 'MMM y - MMM y'),
+            'yMMMEd' => array(
+                'M' => 'E, dd. MMM - E, dd. MMM y',
+                'd' => 'E, dd. - E, dd. MMM y',
+                'y' => 'E, dd. MMM y - E, dd. MMM y'),
+            'yMMMM' => array(
+                'M' => 'MM – MM.yyyy',
+                'y' => 'MM.yyyy – MM.yyyy'),
+            'yMMMd' => array(
+                'M' => 'dd. MMM - dd. MMM y',
+                'd' => 'dd.-dd. MMM y',
+                'y' => 'dd. MMM y - dd. MMM y'),
+            'yMd' => array(
+                'M' => 'dd.MM.yy - dd.MM.yy',
+                'd' => 'dd.MM.yy - dd.MM.yy',
+                'y' => 'dd.MM.yy - dd.MM.yy')
+        );
+        $this->assertEquals($result, $value);
+
+        $value = Zend_Locale_Data::getList('de_AT', 'dateinterval', 'gregorian');
+        $result = array(
+            'M' => array('M' => 'M.-M.'),
+            'MEd' => array(
+                'M' => 'E, dd.MM. - E, dd.MM.',
+                'd' => 'E, dd.MM. - E, dd.MM.'),
+            'MMM' => array('M' => 'MMM-MMM'),
+            'MMMEd' => array(
+                'M' => 'E, dd. MMM - E, dd. MMM',
+                'd' => 'E, dd. - E, dd. MMM'),
+            'MMMM' => array('M' => 'LLLL-LLLL'),
+            'MMMd' => array(
+                'M' => 'dd. MMM - dd. MMM',
+                'd' => 'dd.-dd. MMM'),
+            'Md' => array(
+                'M' => 'dd.MM. - dd.MM.',
+                'd' => 'dd.MM. - dd.MM.'),
+            'd' => array('d' => 'd.-d.'),
+            'h' => array(
+                'a' => 'HH-HH',
+                'h' => 'HH-HH'),
+            'hm' => array(
+                'a' => 'HH:mm-HH:mm',
+                'h' => 'HH:mm-HH:mm',
+                'm' => 'HH:mm-HH:mm'),
+            'hmv' => array(
+                'a' => 'HH:mm-HH:mm v',
+                'h' => 'HH:mm-HH:mm v',
+                'm' => 'HH:mm-HH:mm v'),
+            'hv' => array(
+                'a' => 'HH-HH v',
+                'h' => 'HH-HH v'),
+            'y' => array('y' => 'y-y'),
+            'yM' => array(
+                'M' => 'MM.yy - MM.yy',
+                'y' => 'MM.yy - MM.yy'),
+            'yMEd' => array(
+                'M' => 'E, dd.MM.yy - E, dd.MM.yy',
+                'd' => 'E, dd.MM.yy - E, dd.MM.yy',
+                'y' => 'E, dd.MM.yy - E, dd.MM.yy'),
+            'yMMM' => array(
+                'M' => 'MMM-MMM y',
+                'y' => 'MMM y - MMM y'),
+            'yMMMEd' => array(
+                'M' => 'E, dd. MMM - E, dd. MMM y',
+                'd' => 'E, dd. - E, dd. MMM y',
+                'y' => 'E, dd. MMM y - E, dd. MMM y'),
+            'yMMMM' => array(
+                'M' => 'MM – MM.yyyy',
+                'y' => 'MM.yyyy – MM.yyyy'),
+            'yMMMd' => array(
+                'M' => 'dd. MMM - dd. MMM y',
+                'd' => 'dd.-dd. MMM y',
+                'y' => 'dd. MMM y - dd. MMM y'),
+            'yMd' => array(
+                'M' => 'dd.MM.yy - dd.MM.yy',
+                'd' => 'dd.MM.yy - dd.MM.yy',
+                'y' => 'dd.MM.yy - dd.MM.yy')
+        );
+        $this->assertEquals($result, $value);
+
+        $value = Zend_Locale_Data::getContent('de_AT', 'dateinterval', array('gregorian', 'yMMMM', 'y'));
+        $this->assertEquals("MM.yyyy – MM.yyyy", $value);
+    }
 }