MediaWiki
REL1_24
|
00001 <?php 00006 class WfBCP47Test extends MediaWikiTestCase { 00017 public function testBCP47( $code, $expected ) { 00018 $code = strtolower( $code ); 00019 $this->assertEquals( $expected, wfBCP47( $code ), 00020 "Applying BCP47 standard to lower case '$code'" 00021 ); 00022 00023 $code = strtoupper( $code ); 00024 $this->assertEquals( $expected, wfBCP47( $code ), 00025 "Applying BCP47 standard to upper case '$code'" 00026 ); 00027 } 00028 00032 public static function provideLanguageCodes() { 00033 return array( 00034 // Extracted from BCP47 (list not exhaustive) 00035 # 2.1.1 00036 array( 'en-ca-x-ca', 'en-CA-x-ca' ), 00037 array( 'sgn-be-fr', 'sgn-BE-FR' ), 00038 array( 'az-latn-x-latn', 'az-Latn-x-latn' ), 00039 # 2.2 00040 array( 'sr-Latn-RS', 'sr-Latn-RS' ), 00041 array( 'az-arab-ir', 'az-Arab-IR' ), 00042 00043 # 2.2.5 00044 array( 'sl-nedis', 'sl-nedis' ), 00045 array( 'de-ch-1996', 'de-CH-1996' ), 00046 00047 # 2.2.6 00048 array( 00049 'en-latn-gb-boont-r-extended-sequence-x-private', 00050 'en-Latn-GB-boont-r-extended-sequence-x-private' 00051 ), 00052 00053 // Examples from BCP47 Appendix A 00054 # Simple language subtag: 00055 array( 'DE', 'de' ), 00056 array( 'fR', 'fr' ), 00057 array( 'ja', 'ja' ), 00058 00059 # Language subtag plus script subtag: 00060 array( 'zh-hans', 'zh-Hans' ), 00061 array( 'sr-cyrl', 'sr-Cyrl' ), 00062 array( 'sr-latn', 'sr-Latn' ), 00063 00064 # Extended language subtags and their primary language subtag 00065 # counterparts: 00066 array( 'zh-cmn-hans-cn', 'zh-cmn-Hans-CN' ), 00067 array( 'cmn-hans-cn', 'cmn-Hans-CN' ), 00068 array( 'zh-yue-hk', 'zh-yue-HK' ), 00069 array( 'yue-hk', 'yue-HK' ), 00070 00071 # Language-Script-Region: 00072 array( 'zh-hans-cn', 'zh-Hans-CN' ), 00073 array( 'sr-latn-RS', 'sr-Latn-RS' ), 00074 00075 # Language-Variant: 00076 array( 'sl-rozaj', 'sl-rozaj' ), 00077 array( 'sl-rozaj-biske', 'sl-rozaj-biske' ), 00078 array( 'sl-nedis', 'sl-nedis' ), 00079 00080 # Language-Region-Variant: 00081 array( 'de-ch-1901', 'de-CH-1901' ), 00082 array( 'sl-it-nedis', 'sl-IT-nedis' ), 00083 00084 # Language-Script-Region-Variant: 00085 array( 'hy-latn-it-arevela', 'hy-Latn-IT-arevela' ), 00086 00087 # Language-Region: 00088 array( 'de-de', 'de-DE' ), 00089 array( 'en-us', 'en-US' ), 00090 array( 'es-419', 'es-419' ), 00091 00092 # Private use subtags: 00093 array( 'de-ch-x-phonebk', 'de-CH-x-phonebk' ), 00094 array( 'az-arab-x-aze-derbend', 'az-Arab-x-aze-derbend' ), 00103 # Private use registry values: 00104 array( 'x-whatever', 'x-whatever' ), 00105 array( 'qaa-qaaa-qm-x-southern', 'qaa-Qaaa-QM-x-southern' ), 00106 array( 'de-qaaa', 'de-Qaaa' ), 00107 array( 'sr-latn-qm', 'sr-Latn-QM' ), 00108 array( 'sr-qaaa-rs', 'sr-Qaaa-RS' ), 00109 00110 # Tags that use extensions 00111 array( 'en-us-u-islamcal', 'en-US-u-islamcal' ), 00112 array( 'zh-cn-a-myext-x-private', 'zh-CN-a-myext-x-private' ), 00113 array( 'en-a-myext-b-another', 'en-a-myext-b-another' ), 00114 00115 # Invalid: 00116 // de-419-DE 00117 // a-DE 00118 // ar-a-aaa-b-bbb-a-ccc 00119 ); 00120 } 00121 }