2
0
Переглянути джерело

[ZF-6699] Zend_Locale:

 - added support for LikelySubtag
 - added support for locales with additional data tags like "en_Latn_US"

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@15819 44c647ce-9c0f-0410-b52a-842ac1e357ba
thomas 16 роки тому
батько
коміт
ab1af5087e

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

@@ -590,6 +590,13 @@ print Zend_Locale::getTranslation('de', 'language', 'zh');
                             This can be used to replace "(C)" with "©" for example
                         </entry>
                     </row>
+                    <row>
+                        <entry><emphasis>LocaleUpgrade</emphasis></entry>
+                        <entry>
+                            Returns a list of locale dependencies which can be used to upgrade a
+                            language to a full qualified locale
+                        </entry>
+                    </row>
                 </tbody>
             </tgroup>
         </table>
@@ -987,6 +994,13 @@ print Zend_Locale::getTranslation('de', 'language', 'zh');
                             This can be used to replace "(C)" with "©" for example
                         </entry>
                     </row>
+                    <row>
+                        <entry><emphasis>LocaleUpgrade</emphasis></entry>
+                        <entry>
+                            Returns a locale dependencies for a given language which can be used to
+                            upgrade this language to a full qualified locale
+                        </entry>
+                    </row>
                 </tbody>
             </tgroup>
         </table>

+ 8 - 0
library/Zend/Locale.php

@@ -958,6 +958,14 @@ class Zend_Locale
             $locale = strtr($locale, '-', '_');
         }
 
+        $parts = explode('_', $locale);
+        foreach($parts as $key => $value) {
+            if (strlen($value) != 2) {
+                unset($parts[$key]);
+            }
+        }
+
+        $locale = implode('_', $parts);
         return (string) $locale;
     }
 

+ 11 - 0
library/Zend/Locale/Data.php

@@ -840,6 +840,13 @@ class Zend_Locale_Data
                 }
                 break;
 
+            case 'localeupgrade':
+                $_temp = self::_getFile('likelySubtags', '/supplementalData/likelySubtags/likelySubtag', 'from');
+                foreach ($_temp as $key => $keyvalue) {
+                    $temp += self::_getFile('likelySubtags', '/supplementalData/likelySubtags/likelySubtag[@from=\'' . $key . '\']', 'to', $key);
+                }
+                break;
+
             default :
                 require_once 'Zend/Locale/Exception.php';
                 throw new Zend_Locale_Exception("Unknown list ($path) for parsing locale data.");
@@ -1302,6 +1309,10 @@ class Zend_Locale_Data
                 $temp = self::_getFile('characters', '/supplementalData/characters/character-fallback/character[@value=\'' . $value . '\']/substitute', '');
                 break;
 
+            case 'localeupgrade':
+                $temp = self::_getFile('likelySubtags', '/supplementalData/likelySubtags/likelySubtag[@from=\'' . $value . '\']', 'to', $value);
+                break;
+
             default :
                 require_once 'Zend/Locale/Exception.php';
                 throw new Zend_Locale_Exception("Unknown detail ($path) for parsing locale data.");

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

@@ -2523,4 +2523,19 @@ class Zend_Locale_DataTest extends PHPUnit_Framework_TestCase
         $value = Zend_Locale_Data::getContent('de_AT', 'fallbacktochar', '©');
         $this->assertEquals('(C)', $value);
     }
+
+    /**
+     * test for reading chartofallback from locale
+     * expected array
+     */
+    public function testLocaleUpgrade()
+    {
+        $value = Zend_Locale_Data::getList('de_AT', 'localeupgrade');
+        $this->assertEquals('en_Latn_US', $value['en']);
+        $this->assertEquals('de_Latn_DE', $value['de']);
+        $this->assertEquals('sk_Latn_SK', $value['sk']);
+
+        $value = Zend_Locale_Data::getContent('de_AT', 'localeupgrade', 'de');
+        $this->assertEquals('de_Latn_DE', $value);
+    }
 }

+ 14 - 0
tests/Zend/LocaleTest.php

@@ -761,6 +761,20 @@ class Zend_LocaleTest extends PHPUnit_Framework_TestCase
     }
 
     /**
+     * test MultiPartLocales
+     * expected boolean
+     */
+    public function testLongLocale()
+    {
+        $locale = new Zend_LocaleTestHelper('de_Latn_DE');
+        $this->assertEquals('de_DE', $locale->toString());
+        $this->assertTrue(Zend_LocaleTestHelper::isLocale('de_Latn_CAR_DE_sup3_win'));
+
+        $locale = new Zend_LocaleTestHelper('de_Latn_DE');
+        $this->assertEquals('de_DE', $locale->toString());
+    }
+
+    /**
      * Ignores a raised PHP error when in effect, but throws a flag to indicate an error occurred
      *
      * @param  integer $errno