Browse Source

[GENERIC] Zend_Locale:

- added support for dateitem

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15831 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 năm trước cách đây
mục cha
commit
8c691bf1cd

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

@@ -384,6 +384,10 @@ print Zend_Locale::getTranslation('de', 'language', 'zh');
                             for simplicity</entry>
                     </row>
                     <row>
+                        <entry><emphasis>DateItem</emphasis></entry>
+                        <entry>Returns a list of default formats for given date or time items</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
@@ -781,6 +785,10 @@ print Zend_Locale::getTranslation('de', 'language', 'zh');
                             <link linkend="zend.date.introduction">Zend_Date</link> for simplicity</entry>
                     </row>
                     <row>
+                        <entry><emphasis>DateItem</emphasis></entry>
+                        <entry>Returns the default format for a given date or time item</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

+ 31 - 3
library/Zend/Locale/Data.php

@@ -519,7 +519,20 @@ class Zend_Locale_Data
                 if (empty($value)) {
                     $value = "gregorian";
                 }
-                $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/availableFormats/dateFormatItem', 'id');
+                $temp  = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'full\']/dateTimeFormat/pattern', '', 'full');
+                $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'long\']/dateTimeFormat/pattern', '', 'long');
+                $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'medium\']/dateTimeFormat/pattern', '', 'medium');
+                $temp += self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'short\']/dateTimeFormat/pattern', '', 'short');
+                break;
+
+            case 'dateitem':
+                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=\'' . $key . '\']', '', $key);
+                }
                 break;
 
             case 'field':
@@ -1030,9 +1043,24 @@ class Zend_Locale_Data
 
             case 'datetime':
                 if (empty($value)) {
-                    $value = "gregorian";
+                    $value = array("gregorian", "medium");
+                }
+                if (!is_array($value)) {
+                    $temp = $value;
+                    $value = array("gregorian", $temp);
+                }
+                $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/dateTimeFormatLength[@type=\'' . $value[1] . '\']/dateTimeFormat/pattern', '', 'pattern');
+                break;
+
+            case 'dateitem':
+                if (empty($value)) {
+                    $value = array("gregorian", "yyMMdd");
+                }
+                if (!is_array($value)) {
+                    $temp = $value;
+                    $value = array("gregorian", $temp);
                 }
-                $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value . '\']/dateTimeFormats/dateTimeFormatLength/dateTimeFormat/pattern', '', 'pattern');
+                $temp = self::_getFile($locale, '/ldml/dates/calendars/calendar[@type=\'' . $value[0] . '\']/dateTimeFormats/availableFormats/dateFormatItem[@id=\'' . $value[1] . '\']', '');
                 break;
 
             case 'field':

+ 54 - 22
tests/Zend/Locale/DataTest.php

@@ -657,38 +657,26 @@ class Zend_Locale_DataTest extends PHPUnit_Framework_TestCase
     {
         $value = Zend_Locale_Data::getList('de_AT', 'datetime');
         $result = array(
-            "Ed"    => "E d.",     "H"      => "H",       "HHmm"   => "HH:mm",    "HHmmss"   => "HH:mm:ss",
-            "MMMEd" => "E d. MMM", "MMMMd"  => "d. MMMM", "MMMMdd" => "dd. MMMM", "MMd"      => "d.MM.",
-            "MMdd"  => "dd.MM.",  "Md"     => "d.M.",
-            'Hm' => 'H:mm', 'M' => 'L', 'MEd' => 'E, d.M.', "mmss"  => "mm:ss",   "yyMM"   => "MM.yy",
-            "yyMMM"  => "MMM yy",   "yyMMdd"   => "dd.MM.yy",
-            "yyQ"   => "Q yy",    "yyQQQQ" => "QQQQ yy", "yyyy"   => "y",     "yyyyMMMM" => "MMMM y",
-            'MMM' => 'LLL', 'MMMMEd' => 'E d. MMMM', 'MMMd' => 'd. MMM', 'd' => 'd', 'ms' => 'mm:ss',
-            'y' => 'y', 'yM' => 'yyyy-M', 'yMEd' => 'EEE, yyyy-M-d', 'yMMM' => 'MMM y',
-            'yMMMEd' => 'EEE, d. MMM y', 'yMMMM' => 'MMMM y', 'yQ' => 'Q yyyy', 'yQQQ' => 'QQQ y',
-            'hms' => 'h:mm:ss a', 'hm' => 'h:mm a', 'Hms' => 'H:mm:ss', 'EEEd' => 'd. EEE'
+            'full' => '{1} {0}',
+            'long' => '{1} {0}',
+            'medium' => '{1} {0}',
+            'short' => '{1} {0}'
         );
         $this->assertEquals($result, $value);
 
         $value = Zend_Locale_Data::getList('de_AT', 'datetime', 'gregorian');
         $result = array(
-            "Ed"    => "E d.",     "H"      => "H",       "HHmm"   => "HH:mm",
-            "MMMEd" => "E d. MMM", "MMMMd"  => "d. MMMM", "MMMMdd" => "dd. MMMM", "MMd"      => "d.MM.",
-            "MMdd"  => "dd.MM.",  "Md"     => "d.M.",  "HHmmss"   => "HH:mm:ss",
-            "mmss"  => "mm:ss",   "yyMM"   => "MM.yy",   "yyMMM"  => "MMM yy",   "yyMMdd"   => "dd.MM.yy",
-            "yyQ"   => "Q yy",    "yyQQQQ" => "QQQQ yy", "yyyy"   => "y",     "yyyyMMMM" => "MMMM y",
-            'Hm' => 'H:mm', 'M' => 'L', 'MEd' => 'E, d.M.', 'MMM' => 'LLL', 'MMMMEd' => 'E d. MMMM',
-            'MMMd' => 'd. MMM', 'd' => 'd', 'ms' => 'mm:ss', 'y' => 'y', 'yM' => 'yyyy-M',
-            'yMEd' => 'EEE, yyyy-M-d', 'yMMM' => 'MMM y', 'yMMMEd' => 'EEE, d. MMM y',
-            'yMMMM' => 'MMMM y', 'yQ' => 'Q yyyy', 'yQQQ' => 'QQQ y',
-            'hms' => 'h:mm:ss a', 'hm' => 'h:mm a', 'Hms' => 'H:mm:ss', 'EEEd' => 'd. EEE'
+            'full' => '{1} {0}',
+            'long' => '{1} {0}',
+            'medium' => '{1} {0}',
+            'short' => '{1} {0}'
         );
         $this->assertEquals($result, $value);
 
-        $value = Zend_Locale_Data::getContent('de_AT', 'datetime');
+        $value = Zend_Locale_Data::getContent('de_AT', 'datetime', 'full');
         $this->assertEquals("{1} {0}", $value);
 
-        $value = Zend_Locale_Data::getContent('de_AT', 'datetime', 'gregorian');
+        $value = Zend_Locale_Data::getContent('de_AT', 'datetime', array('gregorian', 'long'));
         $this->assertEquals("{1} {0}", $value);
     }
 
@@ -2538,4 +2526,48 @@ class Zend_Locale_DataTest extends PHPUnit_Framework_TestCase
         $value = Zend_Locale_Data::getContent('de_AT', 'localeupgrade', 'de');
         $this->assertEquals('de_Latn_DE', $value);
     }
+
+    /**
+     * test for reading datetime from locale
+     * expected array
+     */
+    public function testDateItem()
+    {
+        $value = Zend_Locale_Data::getList('de_AT', 'dateitem');
+        $result = array(
+            'EEEd' => 'd. EEE', 'Ed' => 'E d.', 'H' => 'H', 'HHmm' => 'HH:mm',
+            'HHmmss' => 'HH:mm:ss', 'Hm' => 'H:mm', 'M' => 'L', 'MEd' => 'E, d.M.',
+            'MMM' => 'LLL', 'MMMEd' => 'E d. MMM', 'MMMMEd' => 'E d. MMMM',
+            'MMMMd' => 'd. MMMM', 'MMMMdd' => 'dd. MMMM', 'MMMd' => 'd. MMM',
+            'MMd' => 'd.MM.', 'MMdd' => 'dd.MM.', 'Md' => 'd.M.', 'd' => 'd',
+            'mmss' => 'mm:ss', 'ms' => 'mm:ss', 'y' => 'y', 'yM' => 'yyyy-M',
+            'yMEd' => 'EEE, yyyy-M-d', 'yMMM' => 'MMM y', 'yMMMEd' => 'EEE, d. MMM y',
+            'yMMMM' => 'MMMM y', 'yQ' => 'Q yyyy', 'yQQQ' => 'QQQ y',
+            'yyMM' => 'MM.yy', 'yyMMM' => 'MMM yy', 'yyMMdd' => 'dd.MM.yy',
+            'yyQ' => 'Q yy', 'yyQQQQ' => 'QQQQ yy', 'yyyy' => 'y',
+            'yyyyMMMM' => 'MMMM y', 'Hms' => 'H:mm:ss', 'hm' => 'h:mm a',
+            'hms' => 'h:mm:ss a'
+        );
+        $this->assertEquals($result, $value);
+
+        $value = Zend_Locale_Data::getList('de_AT', 'dateitem', 'gregorian');
+        $result = array(
+            'EEEd' => 'd. EEE', 'Ed' => 'E d.', 'H' => 'H', 'HHmm' => 'HH:mm',
+            'HHmmss' => 'HH:mm:ss', 'Hm' => 'H:mm', 'M' => 'L', 'MEd' => 'E, d.M.',
+            'MMM' => 'LLL', 'MMMEd' => 'E d. MMM', 'MMMMEd' => 'E d. MMMM',
+            'MMMMd' => 'd. MMMM', 'MMMMdd' => 'dd. MMMM', 'MMMd' => 'd. MMM',
+            'MMd' => 'd.MM.', 'MMdd' => 'dd.MM.', 'Md' => 'd.M.', 'd' => 'd',
+            'mmss' => 'mm:ss', 'ms' => 'mm:ss', 'y' => 'y', 'yM' => 'yyyy-M',
+            'yMEd' => 'EEE, yyyy-M-d', 'yMMM' => 'MMM y', 'yMMMEd' => 'EEE, d. MMM y',
+            'yMMMM' => 'MMMM y', 'yQ' => 'Q yyyy', 'yQQQ' => 'QQQ y',
+            'yyMM' => 'MM.yy', 'yyMMM' => 'MMM yy', 'yyMMdd' => 'dd.MM.yy',
+            'yyQ' => 'Q yy', 'yyQQQQ' => 'QQQQ yy', 'yyyy' => 'y',
+            'yyyyMMMM' => 'MMMM y', 'Hms' => 'H:mm:ss', 'hm' => 'h:mm a',
+            'hms' => 'h:mm:ss a'
+        );
+        $this->assertEquals($result, $value);
+
+        $value = Zend_Locale_Data::getContent('de_AT', 'dateitem', 'MMMMd');
+        $this->assertEquals("d. MMMM", $value);
+    }
 }