     'ang' => 'ਪੁਰਾਣੀ ਅੰਗਰੇਜ਼ੀ',
        'ann' => 'ਓਬੋਲੋ',
        'anp' => 'ਅੰਗਿਕਾ',
        'ar' => 'ਅਰਬੀ',
        'arn' => 'ਮਾਪੁਚੇ',
        'arp' => 'ਅਰਾਫਾਓ',
        'ars' => 'ਨਾਜਦੀ ਅਰਬੀ',
        'as' => 'ਅਸਾਮੀ',
        'asa' => 'ਅਸੂ',
        'ast' => 'ਅਸਤੂਰੀ',
        'atj' => 'ਅਤਿਕਾਮੇਕਵ',
        'av' => 'ਅਵਾਰਿਕ',
        'awa' => 'ਅਵਧੀ',
        'ay' => 'ਅਈਮਾਰਾ',
        'az' => 'ਅਜ਼ਰਬਾਈਜਾਨੀ',
        'ba' => 'ਬਸ਼ਕੀਰ',
        'bal' => 'ਬਲੋਚੀ',
        'ban' => 'ਬਾਲੀਨੀਜ਼',
        'bas' => 'ਬਾਸਾ

     'bin' => 'ਬਿਨੀ',
        'bla' => 'ਸਿਕਸਿਕਾ',
        'blo' => 'ਅਨੀ',
        'bm' => 'ਬੰਬਾਰਾ',
        'bn' => 'ਬੰਗਾਲੀ',
        'bo' => 'ਤਿੱਬਤੀ',
        'br' => 'ਬਰੇਟਨ',
        'brx' => 'ਬੋਡੋ',
        'bs' => 'ਬੋਸਨੀਆਈ',
        'bug' => 'ਬਗਨੀਜ਼',

',
        'be' => 'ਬੇਲਾਰੂਸੀ',
        'bem' => 'ਬੇਂਬਾ',
        'bez' => 'ਬੇਨਾ',
        'bg' => 'ਬੁਲਗਾਰੀਆਈ',
        'bgc' => 'ਹਰਿਆਣਵੀ',
        'bgn' => 'ਪੱਛਮੀ ਬਲੂਚੀ',
        'bho' => 'ਭੋਜਪੁਰੀ',
        'bi' => 'ਬਿਸਲਾਮਾ',


       'alt' => 'altai meridional',
        'am' => 'amárico',
        'an' => 'aragonês',
        'ang' => 'inglês arcaico',
        'ann' => 'obolo',
        'anp' => 'angika',
        'ar' => 'árabe',
        'arc' => 'aramaico',
        'arn' => 'mapudungun',
        'arp' => 'arapaho',
        'ars' => 'árabe négede',
        'arw' => 'arauaqui',
        'as' => 'assamês',
        'asa' => 'asu',
        'ast' => 'asturiano',
        'atj' => 'atikamekw',
        'av' => 'avárico',
        'awa' => 'aw

      'be' => 'bielorrusso',
        'bej' => 'beja',
        'bem' => 'bemba',
        'bez' => 'bena',
        'bfd' => 'bafut',
        'bg' => 'búlgaro',
        'bgc' => 'hariani',
        'bgn' => 'balúchi ocidental',
        'bho' => 'bhojpuri',

adhi',
        'ay' => 'aimará',
        'az' => 'azerbaijano',
        'ba' => 'bashkir',
        'bal' => 'balúchi',
        'ban' => 'balinês',
        'bas' => 'basa',
        'bax' => 'bamum',
        'bbj' => 'ghomala’',


o Simi',
        'anp' => 'Angika',
        'ar' => 'Arabe Simi',
        'arn' => 'Mapuche Simi',
        'arp' => 'Arapaho',
        'ars' => 'Árabe Najdi Simi',
        'as' => 'Asames Simi',
        'asa' => 'Asu Simi',
        'ast' => 'Asturiano Simi',
        'atj' => 'Atikamekw',
        'av' => 'Avaric',
        'awa' => 'Awadhi',
        'ay' => 'Aymara Simi',
        'az' => 'Azerbaiyano Simi',
        'ba' => 'Baskir Simi',
        'bal' => 'Baluchi Simi',
        'ban' => 'Balines Simi',

=> 'Bislama',
        'bin' => 'Bini',
        'bla' => 'Siksiká Simi',
        'blo' => 'Anii Simi',
        'bm' => 'Bambara Simi',
        'bn' => 'Bangla Simi',
        'bo' => 'Tibetano Simi',
        'br' => 'Breton Simi',
        'brx' => 'Bodo Simi

  'bas' => 'Basaa Simi',
        'be' => 'Bielorruso Simi',
        'bem' => 'Bemba Simi',
        'bez' => 'Bena Simi',
        'bg' => 'Bulgaro Simi',
        'bgc' => 'Haryanvi',
        'bho' => 'Bhojpuri Simi',
        'bi'


        'alt' => 'altaic dal sid',
        'am' => 'amaric',
        'an' => 'aragonais',
        'ang' => 'englais vegl',
        'anp' => 'angika',
        'ar' => 'arab',
        'arc' => 'arameic',
        'arn' => 'araucanic',
        'arp' => 'arapaho',
        'arw' => 'arawak',
        'as' => 'assami',
        'asa' => 'asu',
        'ast' => 'asturian',
        'av' => 'avaric',
        'awa' => 'awadhi',
        'ay' => 'aymara',
        'az' => 'lingua aserbaidschana',
        'ba' => 'baschkir'

        'bgc' => 'haryanvi',
        'bho' => 'bhojpuri',
        'bi' => 'bislama',
        'bik' => 'bikol',
        'bin' => 'bini',
        'bla' => 'siksika',
        'blo' => 'anii',
        'bm' => 'bambara',
        'bn' => 'lingua bengala',

,
        'bal' => 'belutschi',
        'ban' => 'balinais',
        'bas' => 'basaa',
        'be' => 'lingua bielorussa',
        'bej' => 'bedscha',
        'bem' => 'bemba',
        'bez' => 'bena',
        'bg' => 'bulgar',


ale' => 'алеутский',
        'alt' => 'южноалтайский',
        'am' => 'амхарский',
        'an' => 'арагонский',
        'ang' => 'староанглийский',
        'ann' => 'оболо',
        'anp' => 'ангика',
        'ar' => 'арабский',
        'arc' => 'арамейский',
        'arn' => 'мапуче',
        'arp' => 'арапахо',
        'ars' => 'недждийский арабский',
        'arw' => 'аравакский',
        'as' => 'ассамский',
        'asa' => 'асу',
        'ast' => 'астурийский',
        'atj' => 'атикамек',
        '

  'bax' => 'бамум',
        'bbj' => 'гомала',
        'be' => 'белорусский',
        'bej' => 'беджа',
        'bem' => 'бемба',
        'bez' => 'бена',
        'bfd' => 'бафут',
        'bg' => 'болгарский',
        'bgc' => 'харианви',
        'bgn' =>

av' => 'аварский',
        'awa' => 'авадхи',
        'ay' => 'аймара',
        'az' => 'азербайджанский',
        'ba' => 'башкирский',
        'bal' => 'белуджский',
        'ban' => 'балийский',
        'bas' => 'баса',


return [
    'Names' => [
        'ace' => 'अचिनीस्',
        'ach' => 'अचोलि',
        'anp' => 'अङ्गिक',
        'de' => 'जर्मनभाषा:',
        'en' => 'आङ्ग्लभाषा',
        'es' => 'स्पेनीय भाषा:',
        'fr' => 'फ़्रांसदेशीय भाषा:',
        'it' => 'इटलीदेशीय भाषा:',
        'ja' => 'सूर्यमूलीय भाषा:',
        'pt' => 'पुर्तगालदेशीय भाषा:',
        'ru' => 'रष्यदेशीय भाषा:',
        'sa' => 'संस्कृत भाषा',
        'zh' => 'चीनी',
    ],
    'LocalizedNames' => [
        'de_AT' => 'ऑस्ट्रियाई जर्मनभाष

ा:',
        'es_419' => 'लैटिन अमेरिकादेशीय स्पेनीय भाषा:',
        'es_ES' => 'फिरङ्गिन् स्पेनीय भाषा:',
        'es_MX' => 'मैक्सिकन स्पेनीय भाषा:',
        'fr_CA' => 'कनाडादेशः फ़्रांसदेशीय भाषा:',
        'fr_CH' => 'स्विस फ़्रांसदेशीय भाषा:',

ा:',
        'de_CH' => 'स्विस उच्च जर्मनभाषा:',
        'en_AU' => 'ऑस्ट्रेलियादेशः आङ्ग्लभाषा',
        'en_CA' => 'कनाडादेशः आङ्ग्लभाषा',
        'en_GB' => 'आङ्ग्लदेशीय आङ्ग्लभाषा:',
        'en_US' => 'अमेरिकादेशीय आङ्ग्लभाष


    'anp' => 'انجيڪا',
        'ar' => 'عربي',
        'arn' => 'ماپوچي',
        'arp' => 'اراپائو',
        'ars' => 'نجدي عربي',
        'as' => 'آسامي',
        'asa' => 'اسو',
        'ast' => 'اسٽورين',
        'atj' => 'اٽيڪاميڪو',
        'av' => 'اويرس',
        'awa' => 'اواڌي',
        'ay' => 'ایمارا',
        'az' => 'آزربائيجاني',
        'ba' => 'ڪينيڊا',
        'bal' => 'بلوچي',
        'ban' => 'بالينيس',
        'bas' => 'باسا',
        'be' => 'بيلاروسي',
        'bem' => 'بيمبا',

ا',
        'bn' => 'بنگلا',
        'bo' => 'تبيتائي',
        'br' => 'بريٽن',
        'brx' => 'بودو',
        'bs' => 'بوسنيائي',
        'bug' => 'بگنيز',
        'byn' => 'بلن',
        'ca' => 'ڪيٽالان',
        'cay' => 'ڪايوگا',
        'ccp' => '

  'bez' => 'بينا',
        'bg' => 'بلغاريائي',
        'bgc' => 'ھريانوي',
        'bho' => 'ڀوجپوري',
        'bi' => 'بسلاما',
        'bin' => 'بني',
        'bla' => 'سڪسڪا',
        'blo' => 'آنيائي',
        'bm' => 'بمبار


      'de' => 'जर्मन',
        'en' => 'अंगरेज़ी',
        'es' => 'स्पेनिश',
        'fr' => 'फ्रेंच',
        'it' => 'इटालियनु',
        'ja' => 'जापानी',
        'pt' => 'पुर्तगाली',
        'ru' => 'रशियनु',
        'sd' => 'सिन्धी',
        'zh' => 'चीनी (तर्जुमे जो द॒स :खास करे, मैन्डरिन चीनी)',
    ],
    'LocalizedNames' => [
        'de_AT' => 'आसट्रियन जर्मन',
        'de_CH' => 'स्विस हाई जर्मन',
        'en_AU' => 'ऑसटेलियन अंगरेज़ी',
        'en_CA' => 'केनेडियन अंगरेज़ी',
        'es_419' =>

स्पैनिश',
        'es_MX' => 'मेक्सिकन स्पैनिश',
        'fr_CA' => 'कैनेडियन फ्रेंच',
        'fr_CH' => 'स्विस फ्रेंच',
        'pt_BR' => 'ब्राज़ीलियन पुर्तगाली',
        'pt_PT' => 'यूरोपी पुर्तगाली',
        'zh_Hans' => 'सादी थियल चीनी',
        'zh_

'लैटिन अमेरिकन स्पैनिश',
        'es_ES' => 'यूरोपी


       'alt' => 'દક્ષિણ અલ્તાઇ',
        'am' => 'એમ્હારિક',
        'an' => 'અર્ગોનીઝ',
        'ang' => 'જુની અંગ્રેજી',
        'ann' => 'ઓબોલો',
        'anp' => 'અંગીકા',
        'ar' => 'અરબી',
        'arc' => 'એરમૈક',
        'arn' => 'મેપુચે',
        'arp' => 'અરાપાહો',
        'arq' => 'આલ્જેરિયન અરબી',
        'ars' => 'નજદી અરેબિક',
        'arw' => 'અરાવક',
        'ary' => 'મોરોક્કન અરબી',
        'arz' => 'ઈજિપ્શિયન અરબી',
        'as' => 'આસામી',
        'asa' => 'અસુ',
        'ast' => 'અસ

     'bas' => 'બસા',
        'bax' => 'બામન',
        'be' => 'બેલારુશિયન',
        'bej' => 'બેજા',
        'bem' => 'બેમ્બા',
        'bez' => 'બેના',
        'bg' => 'બલ્ગેરિયન',
        'bgc' => 'હરિયાણવી',
        'bgn' => 'પશ્ચિમી બાલોચી',
        'b

્તુરિયન',
        'atj' => 'એટીકામેકવ',
        'av' => 'અવેરિક',
        'awa' => 'અવધી',
        'ay' => 'આયમારા',
        'az' => 'અઝરબૈજાની',
        'ba' => 'બશ્કીર',
        'bal' => 'બલૂચી',
        'ban' => 'બાલિનીસ',


  'alt' => 'dél-altaji',
        'am' => 'amhara',
        'an' => 'aragonéz',
        'ang' => 'óangol',
        'ann' => 'obolo',
        'anp' => 'angika',
        'apc' => 'levantei arab',
        'ar' => 'arab',
        'arc' => 'arámi',
        'arn' => 'mapucse',
        'arp' => 'arapaho',
        'ars' => 'nedzsdi arab',
        'arw' => 'aravak',
        'as' => 'asszámi',
        'asa' => 'asu',
        'ast' => 'asztúr',
        'atj' => 'attikamek',
        'av' => 'avar',
        'awa' => 'awá

    'be' => 'belarusz',
        'bej' => 'bedzsa',
        'bem' => 'bemba',
        'bez' => 'bena',
        'bfd' => 'bafut',
        'bg' => 'bolgár',
        'bgc' => 'haryanvi',
        'bgn' => 'nyugati beludzs',
        'bho' => 'bodzspuri',

di',
        'ay' => 'ajmara',
        'az' => 'azerbajdzsáni',
        'ba' => 'baskír',
        'bal' => 'balucsi',
        'ban' => 'balinéz',
        'bas' => 'basza',
        'bax' => 'bamun',
        'bbj' => 'gomala',


 'ar' => 'Arabiffaa',
        'as' => 'Assamese',
        'ast' => 'Astuuriyaan',
        'az' => 'Afaan Azerbaijani',
        'be' => 'Afaan Belarusia',
        'bg' => 'Afaan Bulgariya',
        'bgc' => 'Haryanvi',
        'bho' => 'Bihoojpuurii',
        'blo' => 'Anii',
        'bn' => 'Afaan Baangladeshi',
        'br' => 'Bireetoon',
        'brx' => 'Bodo',
        'bs' => 'Afaan Bosniyaa',
        'ca' => 'Afaan Katalaa',
        'ceb' => 'Kubuwanoo',
        'chr' => 'Cherokee',
        'cs' => 'A

ii',
        'eo' => 'Afaan Esperantoo',
        'es' => 'Afaan Ispeen',
        'et' => 'Afaan Istooniya',
        'eu' => 'Afaan Baskuu',
        'fa' => 'Afaan Persia',
        'ff' => 'Fula',
        'fi' => 'Afaan Fiilaandi',
        'fil' => 'Afaan F

faan Czech',
        'cv' => 'Chuvash',
        'cy' => 'Welishiffaa',
        'da' => 'Afaan Deenmaark',
        'de' => 'Afaan Jarmanii',
        'doi' => 'Dogri',
        'el' => 'Afaan Giriiki',
        'en' => 'Afaan Ingiliz


        'arp' => 'arapaho',
        'arq' => 'algierski arabski',
        'ars' => 'arabski nadżdyjski',
        'arw' => 'arawak',
        'ary' => 'marokański arabski',
        'arz' => 'egipski arabski',
        'as' => 'asamski',
        'asa' => 'asu',
        'ase' => 'amerykański język migowy',
        'ast' => 'asturyjski',
        'atj' => 'atikamekw',
        'av' => 'awarski',
        'avk' => 'kotava',
        'awa' => 'awadhi',
        'ay' => 'ajmara',
        'az' => 'azerbejdżański',

'be' => 'białoruski',
        'bej' => 'bedża',
        'bem' => 'bemba',
        'bew' => 'betawi',
        'bez' => 'bena',
        'bfd' => 'bafut',
        'bfq' => 'badaga',
        'bg' => 'bułgarski',
        'bgc' => 'haryanvi',
        'bgn' => 'b

  'ba' => 'baszkirski',
        'bal' => 'beludżi',
        'ban' => 'balijski',
        'bar' => 'bawarski',
        'bas' => 'basaa',
        'bax' => 'bamum',
        'bbc' => 'batak toba',
        'bbj' => 'ghomala',


 'ang' => 'inglês antigo',
        'arn' => 'mapuche',
        'ars' => 'árabe do Négede',
        'av' => 'avar',
        'bax' => 'bamun',
        'bbj' => 'ghomala',
        'bn' => 'bengalês',
        'bua' => 'buriat',
        'ccp' => 'changma',
        'chk' => 'chuquês',
        'chn' => 'jargão chinook',
        'chr' => 'cherokee',
        'chy' => 'cheyenne',
        'co' => 'córsico',
        'crr' => 'algonquiano de Carolina',
        'crs' => 'francês crioulo seselwa',
        'cs' => 'checo',

frísico ocidental',
        'gez' => 'geʼez',
        'goh' => 'alemão alto antigo',
        'grc' => 'grego clássico',
        'gsw' => 'alemão suíço',
        'ha' => 'haúça',
        'hy' => 'arménio',
        'ikt' => 'inuktitut canadiano ocidental',

        'cv' => 'chuvash',
        'efi' => 'efik',
        'egy' => 'egípcio clássico',
        'et' => 'estónio',
        'fon' => 'fon',
        'fro' => 'francês antigo',
        'frs' => 'frísio oriental',
        'fy' => '


      'alt' => 'altaică meridională',
        'am' => 'amharică',
        'an' => 'aragoneză',
        'ang' => 'engleză veche',
        'ann' => 'obolo',
        'anp' => 'angika',
        'ar' => 'arabă',
        'arc' => 'aramaică',
        'arn' => 'mapuche',
        'arp' => 'arapaho',
        'ars' => 'arabă najdi',
        'arw' => 'arawak',
        'as' => 'asameză',
        'asa' => 'asu',
        'ast' => 'asturiană',
        'atj' => 'atikamekw',
        'av' => 'avară',
        'awa' => 'awadhi'

 => 'belarusă',
        'bej' => 'beja',
        'bem' => 'bemba',
        'bez' => 'bena',
        'bfd' => 'bafut',
        'bg' => 'bulgară',
        'bgc' => 'haryanvi',
        'bgn' => 'baluchi occidentală',
        'bho' => 'bhojpuri',
        'bi'

,
        'ay' => 'aymara',
        'az' => 'azeră',
        'ba' => 'bașkiră',
        'bal' => 'baluchi',
        'ban' => 'balineză',
        'bas' => 'basaa',
        'bax' => 'bamun',
        'bbj' => 'ghomala',
        'be'


> 'obolo',
        'anp' => 'angika',
        'apc' => 'àrabu levantinu',
        'ar' => 'àrabu',
        'arn' => 'mapudungun',
        'arp' => 'arapaho',
        'ars' => 'àrabu najdi',
        'as' => 'assamesu',
        'asa' => 'asu',
        'ast' => 'asturianu',
        'atj' => 'atikamekw',
        'av' => 'avaru',
        'awa' => 'awadhi',
        'ay' => 'aimara',
        'az' => 'azerbaigianu',
        'ba' => 'baschiru',
        'bal' => 'baluci',
        'ban' => 'balinesu',
        'bas' =>

 'bhojpuri',
        'bi' => 'bislama',
        'bin' => 'bini',
        'bla' => 'pees nieddos',
        'blo' => 'anii',
        'blt' => 'tai dam',
        'bm' => 'bambara',
        'bn' => 'bengalesu',
        'bo' => 'tibetanu',
        'bqi' => 'bak

 'basaa',
        'be' => 'bielorussu',
        'bem' => 'bemba',
        'bew' => 'betawi',
        'bez' => 'bena',
        'bg' => 'bùlgaru',
        'bgc' => 'haryanvi',
        'bgn' => 'baluci otzidentale',
        'bho' =>


'arp' => 'arapaho',
        'arq' => 'algerianarabia',
        'ars' => 'arabia – najd',
        'arw' => 'arawak',
        'ary' => 'marokonarabia',
        'arz' => 'egyptinarabia',
        'as' => 'assami',
        'asa' => 'asu',
        'ase' => 'amerikkalainen viittomakieli',
        'ast' => 'asturia',
        'atj' => 'atikamekw',
        'av' => 'avaari',
        'avk' => 'kotava',
        'awa' => 'awadhi',
        'ay' => 'aimara',
        'az' => 'azeri',
        'ba' => 'baškiiri',
        'bal

bedža',
        'bem' => 'bemba',
        'bew' => 'betawi',
        'bez' => 'bena',
        'bfd' => 'fut',
        'bfq' => 'badaga',
        'bg' => 'bulgaria',
        'bgc' => 'haryanvi',
        'bgn' => 'länsibelutši',
        'bho' => 'bhodžpuri',

' => 'belutši',
        'ban' => 'bali',
        'bar' => 'baijeri',
        'bas' => 'basaa',
        'bax' => 'bamum',
        'bbc' => 'batak-toba',
        'bbj' => 'ghomala',
        'be' => 'valkovenäjä',
        'bej' => '


        'akz' => 'Alabama',
        'ale' => 'Aleut',
        'alt' => 'Altai Selatan',
        'am' => 'Amharik',
        'an' => 'Aragon',
        'ang' => 'Inggris Kuno',
        'ann' => 'Obolo',
        'anp' => 'Angika',
        'ar' => 'Arab',
        'arc' => 'Aram',
        'arn' => 'Mapuche',
        'arp' => 'Arapaho',
        'arq' => 'Arab Aljazair',
        'ars' => 'Arab Najdi',
        'arw' => 'Arawak',
        'ary' => 'Arab Maroko',
        'arz' => 'Arab Mesir',
        'as' => 'Assam',

i',
        'ba' => 'Bashkir',
        'bal' => 'Baluchi',
        'ban' => 'Bali',
        'bar' => 'Bavaria',
        'bas' => 'Basa',
        'bax' => 'Bamun',
        'bbc' => 'Batak Toba',
        'bbj' => 'Ghomala',
        'be' => 'Belarusia',

        'asa' => 'Asu',
        'ase' => 'Bahasa Isyarat Amerika',
        'ast' => 'Asturia',
        'atj' => 'Atikamekw',
        'av' => 'Avar',
        'awa' => 'Awadhi',
        'ay' => 'Aymara',
        'az' => 'Azerbaijan


 'alt' => 'אלטאי דרומית',
        'am' => 'אמהרית',
        'an' => 'אראגונית',
        'ang' => 'אנגלית עתיקה',
        'ann' => 'אובולו',
        'anp' => 'אנג׳יקה',
        'ar' => 'ערבית',
        'arc' => 'ארמית',
        'arn' => 'אראוקנית',
        'arp' => 'אראפהו',
        'ars' => 'ערבית - נג׳ד',
        'arw' => 'ארוואק',
        'as' => 'אסאמית',
        'asa' => 'אסו',
        'ast' => 'אסטורית',
        'atj' => 'אטיקמק',
        'av' => 'אווארית',
        'awa' => 'אוואדית',
        'ay' => '

    'be' => 'בלארוסית',
        'bej' => 'בז׳ה',
        'bem' => 'במבה',
        'bez' => 'בנה',
        'bfd' => 'באפוט',
        'bg' => 'בולגרית',
        'bgc' => 'הריאנבי',
        'bgn' => 'באלוצ׳י מערבית',
        'bho' => 'בוג׳פורי',
        'bi'

איימארית',
        'az' => 'אזרית',
        'ba' => 'בשקירית',
        'bal' => 'באלוצ׳י',
        'ban' => 'באלינזית',
        'bar' => 'בווארית',
        'bas' => 'בסאא',
        'bax' => 'במום',
        'bbj' => 'גומאלה',


      'anp' => 'انگيکي',
        'ar' => 'عربي',
        'arn' => 'ماپوچه',
        'arp' => 'اراپاهوي',
        'ars' => 'نجدی عربی',
        'as' => 'اسامي',
        'asa' => 'اسويي',
        'ast' => 'استورياني',
        'atj' => 'اتیکامیکو',
        'av' => 'اواري',
        'awa' => 'اوادي',
        'ay' => 'ایماري',
        'az' => 'اذربایجاني',
        'ba' => 'باشکير',
        'bal' => 'بلوڅي',
        'ban' => 'بالنی',
        'bas' => 'باسا',
        'be' => 'بېلاروسي',
        'bem' => 'بيمبا',

را',
        'bn' => 'بنگالي',
        'bo' => 'تبتي',
        'br' => 'برېتون',
        'brx' => 'بودو',
        'bs' => 'بوسني',
        'bug' => 'بگنيايي',
        'byn' => 'بلین',
        'ca' => 'کټلاني',
        'cay' => 'Ca',
        'ccp' => 'چکما'

      'bez' => 'بينا',
        'bg' => 'بلغاري',
        'bgc' => 'هریانوی',
        'bho' => 'بهوجپوري',
        'bi' => 'بسلاما',
        'bin' => 'بینی',
        'bla' => 'سکسيکا',
        'blo' => 'انۍ',
        'bm' => 'بمبا


       'ar' => 'Icyarabu',
        'as' => 'Icyasamizi',
        'az' => 'Inyazeribayijani',
        'be' => 'Ikibelarusiya',
        'bg' => 'Urunyabuligariya',
        'bn' => 'Ikibengali',
        'br' => 'Inyebiritoni',
        'bs' => 'Inyebosiniya',
        'ca' => 'Igikatalani',
        'cs' => 'Igiceke',
        'cy' => 'Ikigaluwa',
        'da' => 'Ikidaninwa',
        'de' => 'Ikidage',
        'el' => 'Ikigereki',
        'en' => 'Icyongereza',
        'eo' => 'Icyesiperanto',
        'es' => 'Ic

sa',
        'fy' => 'Igifiriziyani',
        'ga' => 'Ikirilandi',
        'gd' => 'Ikigaluwa cy’Igisweduwa',
        'gl' => 'Ikigalisiya',
        'gn' => 'Inyaguwarani',
        'gu' => 'Inyegujarati',
        'he' => 'Igiheburayo',
        'hi' => 'Ig

yesipanyolo',
        'et' => 'Icyesitoniya',
        'eu' => 'Ikibasiki',
        'fa' => 'Inyeperisi',
        'fi' => 'Igifinilande',
        'fil' => 'Ikinyafilipine',
        'fo' => 'Inyefaroyizi',
        'fr' => 'Igifaran


p' => 'Angika',
        'ar' => 'Larabci',
        'arn' => 'Mapuche',
        'arp' => 'Arapaho',
        'ars' => 'Larabcin Najdi',
        'as' => 'Asamisanci',
        'asa' => 'Asu',
        'ast' => 'Asturia',
        'atj' => 'Atikamekw',
        'av' => 'Avaric',
        'awa' => 'Awadhi',
        'ay' => 'Aymaranci',
        'az' => 'Azerbaijanci',
        'ba' => 'Bashkir',
        'bal' => 'Baluchi',
        'ban' => 'Balenesanci',
        'bas' => 'Basaa',
        'be' => 'Belarusanci',

 'Anii',
        'bm' => 'Bambara',
        'bn' => 'Bengali',
        'bo' => 'Tibetan',
        'br' => 'Buretananci',
        'brx' => 'Bodo',
        'bs' => 'Bosniyanci',
        'bug' => 'Buginesanci',
        'byn' => 'Blin',
        'ca' => 'Katalo

'bem' => 'Bemba',
        'bez' => 'Bena',
        'bg' => 'Bulgariyanci',
        'bgc' => 'Haryanvi',
        'bho' => 'Bhojpuri',
        'bi' => 'Bislama',
        'bin' => 'Bini',
        'bla' => 'Siksiká',
        'blo' =>


hp

return [
    'Names' => [
        'ab' => 'افریکانس',
        'as' => 'اسامی',
        'ast' => 'اتریشی',
        'az' => 'آذربایجانی',
        'ckb' => 'کردی سورانی',
        'dv' => 'مالدیوی',
        'es' => 'هسپانوی',
        'fi' => 'فنلندی',
        'ga' => 'آیرلندی',
        'hr' => 'کروشیایی',
        'id' => 'اندونیزیایی',
        'is' => 'آیسلندی',
        'it' => 'ایتالوی',
        'ja' => 'جاپانی',
        'ko' => 'کوریایی',
        'ksh' => 'کلنی',
        'ky' => 'قرغزی',
        'lus' =>

     'pt' => 'پرتگالی',
        'sq' => 'البانیایی',
        'srn' => 'زبان سرانان',
        'sv' => 'سویدنی',
        'sw' => 'سواحلی',
        'tg' => 'تاجکی',
        'zza' => 'زازاکی',
    ],
    'LocalizedNames' => [
        'ar_001' => 'عربی فصیح',

'میزویی',
        'mai' => 'مایتیلی',
        'mn' => 'مغلی',
        'nb' => 'نروژی کتابی',
        'ne' => 'نیپالی',
        'nl' => 'هالندی',
        'nn' => 'نروژی نو',
        'no' => 'نارویژی',
        'pl' => 'پولندی',


ଇଟୁ',
        'alt' => 'ଦକ୍ଷିଣ ଆଲ୍ଟାଇ',
        'am' => 'ଆମହାରକି',
        'an' => 'ଆର୍ଗୋନୀ',
        'ang' => 'ପୁରୁଣା ଇଁରାଜୀ',
        'ann' => 'ଅବୋଲା',
        'anp' => 'ଅଁଗୀକା',
        'ar' => 'ଆରବିକ୍',
        'arc' => 'ଆରାମାଇକ୍',
        'arn' => 'ମାପୁଚେ',
        'arp' => 'ଆରାପାହୋ',
        'ars' => 'ନାଜଦି ଆରବିକ',
        'arw' => 'ଆରୱକ',
        'as' => 'ଆସାମୀୟ',
        'asa' => 'ଆସୁ',
        'ast' => 'ଆଷ୍ଟୁରିଆନ୍',
        'atj' => 'ଆଟିକାମେକ୍ୱ',
        'av' => 'ଆଭାରିକ୍',
        'awa' => 'ଆୱାଧି',

 'bem' => 'ବେମ୍ବା',
        'bez' => 'ବେନା',
        'bg' => 'ବୁଲଗେରିଆନ୍',
        'bgc' => 'ହରିୟାନଭି',
        'bho' => 'ଭୋଜପୁରୀ',
        'bi' => 'ବିସଲାମା',
        'bik' => 'ବିକୋଲ୍',
        'bin' => 'ବିନି',
        'bla' => 'ସିକସିକା',
        'blo' =>

        'ay' => 'ଆୟମାରା',
        'az' => 'ଆଜେରବାଇଜାନି',
        'ba' => 'ବାଶକିର୍',
        'bal' => 'ବାଲୁଚି',
        'ban' => 'ବାଲିନୀଜ୍',
        'bas' => 'ବାସା',
        'be' => 'ବେଲାରୁଷିଆନ୍',
        'bej' => 'ବେଜା',


  'anp' => 'angika',
        'ar' => 'arab',
        'arn' => 'mapuche',
        'arp' => 'arapaxo',
        'ars' => 'najd arab',
        'as' => 'assam',
        'asa' => 'asu',
        'ast' => 'asturiy',
        'atj' => 'atikamek',
        'av' => 'avar',
        'awa' => 'avadxi',
        'ay' => 'aymara',
        'az' => 'ozarbayjon',
        'ba' => 'boshqird',
        'bal' => 'baluj',
        'ban' => 'bali',
        'bas' => 'basa',
        'be' => 'belarus',
        'bem' => 'bemba',
        'be

'Anii',
        'bm' => 'bambara',
        'bn' => 'bengal',
        'bo' => 'tibet',
        'br' => 'breton',
        'brx' => 'bodo',
        'bs' => 'bosniy',
        'bug' => 'bugi',
        'byn' => 'blin',
        'ca' => 'katalan',
        'cay' =>

z' => 'bena',
        'bg' => 'bolgar',
        'bgc' => 'harianvi',
        'bgn' => 'g‘arbiy baluj',
        'bho' => 'bxojpuri',
        'bi' => 'bislama',
        'bin' => 'bini',
        'bla' => 'siksika',
        'blo' =>


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Bundle\Writer;

use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Bundle\Writer\JsonBundleWriter;

/**
 * @author Bernhard Schussek <bschusse

iter = new JsonBundleWriter();
        $this->directory = sys_get_temp_dir().'/JsonBundleWriterTest/'.random_int(1000, 9999);
        $this->filesystem = new Filesystem();

        $this->filesystem->mkdir($this->directory);
    }

    protected function t

k@gmail.com>
 */
class JsonBundleWriterTest extends TestCase
{
    private JsonBundleWriter $writer;
    private string $directory;
    private Filesystem $filesystem;

    protected function setUp(): void
    {
        $this->wr


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Bundle\Writer;

use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Bundle\Writer\PhpBundleWriter;

/**
 * @author Bernhard Schussek <bschussek

r = new PhpBundleWriter();
        $this->directory = sys_get_temp_dir().'/PhpBundleWriterTest/'.random_int(1000, 9999);
        $this->filesystem = new Filesystem();

        $this->filesystem->mkdir($this->directory);
    }

    protected function tearDo

@gmail.com>
 */
class PhpBundleWriterTest extends TestCase
{
    private PhpBundleWriter $writer;
    private string $directory;
    private Filesystem $filesystem;

    protected function setUp(): void
    {
        $this->write


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Bundle\Writer;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Bundle\Writer\TextBundleWriter;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @see http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt
 */
class TextBundleWriterTest exten

ectory = sys_get_temp_dir().'/TextBundleWriterTest/'.random_int(1000, 9999);
        $this->filesystem = new Filesystem();

        $this->filesystem->mkdir($this->directory);
    }

    protected function tearDown(): void
    {
        $this->filesystem->

ds TestCase
{
    private TextBundleWriter $writer;
    private string $directory;
    private Filesystem $filesystem;

    protected function setUp(): void
    {
        $this->writer = new TextBundleWriter();
        $this->dir


Bundle\Reader\BundleEntryReader;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Exception\MissingResourceException;
use Symfony\Component\Intl\Exception\ResourceBundleNotFoundException;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class BundleEntryReaderTest extends TestCase
{
    private const RES_DIR = '/res/dir';

    private const DATA = [
        'Entries' => [
            'Foo' => 'Bar',
            'Bar' => 'Baz',
        ],

,
    ];

    private const MERGED_DATA = [
        // no recursive merging -> too complicated
        'Entries' => [
            'Foo' => 'Bar',
            'Bar' => 'Baz',
        ],
        'Baz' => 'Foo',
        'Version' => '2.0',
        'Foo' => 'B

 'Foo' => 'Bar',
        'Version' => '2.0',
    ];

    private const FALLBACK_DATA = [
        'Entries' => [
            'Foo' => 'Foo',
            'Bam' => 'Lah',
        ],
        'Baz' => 'Foo',
        'Version' => '1.0'


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Bundle\Reader;

use PHPUnit\Framework\Attributes\RequiresPhpExtension;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Data\Bundle\Reader\IntlBundleReader;
use Symfony\Component\Intl\Exception\ResourceBundleNotFoundException;
use Symfony\Component\Intl\Exception\Runtime

{
        $this->reader = new IntlBundleReader();
    }

    public function testReadReturnsArrayAccess()
    {
        $data = $this->reader->read(__DIR__.'/Fixtures/res', 'ro');

        $this->assertInstanceOf(\ArrayAccess::class, $data);
        $this-

Exception;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
#[RequiresPhpExtension('intl')]
class IntlBundleReaderTest extends TestCase
{
    private IntlBundleReader $reader;

    protected function setUp(): void


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Bundle\Reader;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Data\Bundle\Reader\JsonBundleReader;
use Symfony\Component\Intl\Exception\ResourceBundleNotFoundException;
use Symfony\Component\Intl\Exception\RuntimeException;

/**
 * @author Be

public function testReadReturnsArray()
    {
        $data = $this->reader->read(__DIR__.'/Fixtures/json', 'en');

        $this->assertIsArray($data);
        $this->assertSame('Bar', $data['Foo']);
        $this->assertArrayNotHasKey('ExistsNot', $data);

rnhard Schussek <bschussek@gmail.com>
 */
class JsonBundleReaderTest extends TestCase
{
    private JsonBundleReader $reader;

    protected function setUp(): void
    {
        $this->reader = new JsonBundleReader();
    }


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Bundle\Reader;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Data\Bundle\Reader\PhpBundleReader;
use Symfony\Component\Intl\Exception\ResourceBundleNotFoundException;
use Symfony\Component\Intl\Exception\RuntimeException;

/**
 * @author Ber

ic function testReadReturnsArray()
    {
        $data = $this->reader->read(__DIR__.'/Fixtures/php', 'en');

        $this->assertIsArray($data);
        $this->assertSame('Bar', $data['Foo']);
        $this->assertArrayNotHasKey('ExistsNot', $data);

nhard Schussek <bschussek@gmail.com>
 */
class PhpBundleReaderTest extends TestCase
{
    private PhpBundleReader $reader;

    protected function setUp(): void
    {
        $this->reader = new PhpBundleReader();
    }

    publ


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Util;

use Symfony\Component\Intl\Exception\BadMethodCallException;

/**
 * Work-around for a bug in PHP's \ResourceBundle implementation.
 *
 * More information can be found on https://bugs.php.net/64356.
 * This class can be removed once that bug is fixed.
 *

e $bundleImpl,
    ) {
    }

    public function get(int|string $offset): mixed
    {
        $value = $this->bundleImpl->get($offset);

        return $value instanceof \ResourceBundle ? new static($value) : $value;
    }

    public function offsetExist

 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class ArrayAccessibleResourceBundle implements \ArrayAccess, \IteratorAggregate, \Countable
{
    public function __construct(
        private \ResourceBundl


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Util;

/**
 * Scans a directory with data files for locales.
 *
 * The name of each file with the extension ".txt" is considered, if it "looks"
 * like a locale:
 *
 *  - the name must start with two letters;
 *  - the two letters may optionally be followed by an underscore and any
 *

     * Returns all locales found in the given directory.
     *
     * @return array An array of locales. The result also contains locales that
     *               are in fact just aliases for other locales. Use
     *               {@link scanAliases()}

  sequence of other symbols.
 *
 * For example, "de" and "de_DE" are considered to be locales. "root" and "meta"
 * are not.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class LocaleScanner
{
    /**


/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Util;

use Symfony\Component\Intl\Exception\OutOfBoundsException;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class RecursiveArrayAccess
{
    public static function get(mixed $array, array $indices): mixed

y = $array[$index];
                    continue;
                }
            } elseif ($array instanceof \ArrayAccess) {
                if (isset($array[$index])) {
                    $array = $array[$index];
                    continue;

 {
        foreach ($indices as $index) {
            // Use array_key_exists() for arrays, isset() otherwise
            if (\is_array($array)) {
                if (\array_key_exists($index, $array)) {
                    $arra


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Util;

use Symfony\Component\Intl\Exception\OutOfBoundsException;

/**
 * Implements a ring buffer.
 *
 * A ring buffer is an array-like structure with a fixed size. If the buffer
 * is full, the next written element overwrites the first bucket in the buffer,

 \ArrayAccess
{
    /** @var array<int, TValue> */
    private array $values = [];
    /** @var array<TKey, int> */
    private array $indices = [];
    private int $cursor = 0;

    public function __construct(
        private int $size,
    ) {
    }

* then the second and so on.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @template TKey of array-key
 * @template TValue
 *
 * @implements \ArrayAccess<TKey, TValue>
 *
 * @internal
 */
class RingBuffer implements


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Generator;

use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Bundle\Compiler\BundleCompilerInterface;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReader;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Data\Bundle\Reader\IntlBundleReader;
use S

on __construct(
        private BundleCompilerInterface $compiler,
        private string $dirName,
    ) {
    }

    public function generateData(GeneratorConfig $config): void
    {
        $filesystem = new Filesystem();
        $localeScanner = new Lo

ymfony\Component\Intl\Data\Util\LocaleScanner;

/**
 * The rule for compiling the currency bundle.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
abstract class AbstractDataGenerator
{
    public functi


ndleEntryReaderInterface;
use Symfony\Component\Intl\Data\Util\ArrayAccessibleResourceBundle;
use Symfony\Component\Intl\Data\Util\LocaleScanner;

/**
 * The rule for compiling the currency bundle.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class CurrencyDataGenerator extends AbstractDataGenerator
{
    private const DENYLIST = [
        'XBA' => true, // European Composite Unit
        'XBB' => true, // European Monetary Unit
        'XBC' => true, // European Unit of Account

e, // Palladium
        'XSU' => true, // Sucre
        'XDR' => true, // Special Drawing Rights
        'XTS' => true, // Testing Currency Code
        'XXX' => true, // Unknown Currency
    ];

    /**
     * Collects all available currency codes.
     *

 (XBC)
        'XBD' => true, // European Unit of Account (XBD)
        'XUA' => true, // ADB Unit of Account
        'XAU' => true, // Gold
        'XAG' => true, // Silver
        'XPT' => true, // Platinum
        'XPD' => tru


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Generator;

use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Locale;

/**
 * @author Roland Franssen <franssen.roland@gmail.com>
 *
 * @internal
 */
trait FallbackTrait
{
    private array $fallbackCache = [];

 string $displayLocale): ?array;

    /**
     * @see AbstractDataGenerator::generateDataForRoot()
     */
    abstract protected function generateDataForRoot(BundleEntryReaderInterface $reader, string $tempDir): ?array;

    private function generateFallb

    private bool $generatingFallback = false;

    /**
     * @see AbstractDataGenerator::generateDataForLocale()
     */
    abstract protected function generateDataForLocale(BundleEntryReaderInterface $reader, string $tempDir,


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Generator;

use Symfony\Component\Intl\Data\Bundle\Writer\BundleWriterInterface;

/**
 * Stores contextual information for resource bundle generation.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class GeneratorConfig
{
    /**

o be used during the data conversion.
     */
    public function addBundleWriter(string $targetDir, BundleWriterInterface $writer): void
    {
        $this->bundleWriters[$targetDir] = $writer;
    }

    /**
     * Returns the writers indexed by their o

 * @var BundleWriterInterface[]
     */
    private array $bundleWriters = [];

    public function __construct(
        private string $sourceDir,
        private string $icuVersion,
    ) {
    }

    /**
     * Adds a writer t


buted with this source code.
 */

namespace Symfony\Component\Intl\Data\Generator;

use Symfony\Component\Intl\Data\Bundle\Compiler\BundleCompilerInterface;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Data\Util\ArrayAccessibleResourceBundle;
use Symfony\Component\Intl\Data\Util\LocaleScanner;
use Symfony\Component\Intl\Exception\RuntimeException;

/**
 * The rule for compiling the language bundle.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>

 *
 * @internal
 */
class LanguageDataGenerator extends AbstractDataGenerator
{
    /**
     * Source: https://iso639-3.sil.org/code_tables/639/data.
     */
    private const PREFERRED_ALPHA2_TO_ALPHA3_MAPPING = [
        'ak' =


buted with this source code.
 */

namespace Symfony\Component\Intl\Data\Generator;

use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Bundle\Compiler\BundleCompilerInterface;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Data\Util\LocaleScanner;
use Symfony\Component\Intl\Exception\MissingResourceException;
use Symfony\Component\VarExporter\VarExporter;

/**
 * The rule for compiling the locale bundle.
 *
 * @author Bernhard S

te array $localeAliases = [];
    private array $localeParents = [];

    protected function scanLocales(LocaleScanner $scanner, string $sourceDir): array
    {
        $this->locales = $scanner->scanLocales($sourceDir.'/locales');
        $this->localeAli

chussek <bschussek@gmail.com>
 * @author Roland Franssen <franssen.roland@gmail.com>
 *
 * @internal
 */
class LocaleDataGenerator extends AbstractDataGenerator
{
    use FallbackTrait;

    private array $locales = [];
    priva


ndleEntryReaderInterface;
use Symfony\Component\Intl\Data\Util\ArrayAccessibleResourceBundle;
use Symfony\Component\Intl\Data\Util\LocaleScanner;
use Symfony\Component\Intl\Exception\RuntimeException;

/**
 * The rule for compiling the region bundle.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @see http://source.icu-project.org/repos/icu/icu4j/trunk/main/classes/core/src/com/ibm/icu/util/Region.java
 *
 * @internal
 */
class RegionDataGenerator extends AbstractDataGenerator
{
    /**
     *

      'TL' => 'TLS',
        'YE' => 'YEM',
    ];

    private const DENYLIST = [
        // Exceptional reservations
        'AC' => true, // Ascension Island
        'CP' => true, // Clipperton Island
        'CQ' => true, // Island of Sark
        'DG'

Source: https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes.
     */
    private const PREFERRED_ALPHA2_TO_ALPHA3_MAPPING = [
        'CD' => 'COD',
        'DE' => 'DEU',
        'FR' => 'FRA',
        'MM' => 'MMR',


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
use Symfony\Component\Intl\Exception\MissingResourceException;
use Symfony\Component\Intl\Locales;
use Symfony\Component\Intl\Util\IntlTestHelper;

#[Group('intl-data')]
class LocalesTest extends ResourceBundleTestCase
{
    public function testGet

DataProvider('provideLocales')]
    public function testGetNames($displayLocale)
    {
        if ('en' !== $displayLocale) {
            IntlTestHelper::requireFullIntl($this);
        }

        $locales = array_keys(Locales::getNames($displayLocale));

Locales()
    {
        $this->assertSame(static::getLocales(), Locales::getLocales());
    }

    public function testGetAliases()
    {
        $this->assertSame(static::getLocaleAliases(), Locales::getAliases());
    }

    #[


buted with this source code.
 */

namespace Symfony\Component\Intl\Tests;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
use Symfony\Component\Intl\Exception\MissingResourceException;
use Symfony\Component\Intl\Scripts;
use Symfony\Component\Intl\Util\IntlTestHelper;

#[Group('intl-data')]
class ScriptsTest extends ResourceBundleTestCase
{
    // The below arrays document the state of the ICU data bundled with this package.

    protected static array $scripts = [

 'Berf',
        'Bhks',
        'Blis',
        'Bopo',
        'Brah',
        'Brai',
        'Bugi',
        'Buhd',
        'Cakm',
        'Cans',
        'Cari',
        'Cham',
        'Cher',
        'Chrs',
        'Cirt',
        'Copt',

      'Adlm',
        'Afak',
        'Aghb',
        'Ahom',
        'Arab',
        'Aran',
        'Armi',
        'Armn',
        'Avst',
        'Bali',
        'Bamu',
        'Bass',
        'Batk',
        'Beng',


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Util;

use PHPUnit\Framework\Attributes\After;
use PHPUnit\Framework\Attributes\Before;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Exception\RuntimeException;
use Symfony\Component\Intl

otected function cleanup()
    {
        $this->targetDir = sys_get_temp_dir().'/GitRepositoryTest/source';

        $fs = new Filesystem();
        $fs->remove($this->targetDir);
    }

    public function testItThrowsAnExceptionIfInitialisedWithNonGitDir

\Util\GitRepository;

#[Group('intl-data')]
class GitRepositoryTest extends TestCase
{
    private ?string $targetDir = null;

    private const REPO_URL = 'https://github.com/symfony/intl.git';

    #[Before]
    #[After]
    pr


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Util;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Util\IcuVersion;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class IcuVersionTest extends TestCase
{
    public static function normalizeProvider()
    {
        return [
            [null, '1', '10'],


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Util;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Data\Util\RingBuffer;
use Symfony\Component\Intl\Exception\OutOfBoundsException;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class RingBufferTest extends TestCase
{
    private RingBuffer $buffer;

>assertArrayHasKey(0, $this->buffer);
        $this->assertArrayHasKey('bar', $this->buffer);
        $this->assertSame('foo', $this->buffer[0]);
        $this->assertSame('baz', $this->buffer['bar']);
    }

    public function testWritePastBuffer()
    {

   protected function setUp(): void
    {
        $this->buffer = new RingBuffer(2);
    }

    public function testWriteWithinBuffer()
    {
        $this->buffer[0] = 'foo';
        $this->buffer['bar'] = 'baz';

        $this-


agq' => 'агемча',
        'ain' => 'айну',
        'ak' => 'аканча',
        'ale' => 'алеут',
        'am' => 'амхарча',
        'an' => 'арагон',
        'anp' => 'ангика',
        'ar' => 'арабча',
        'arn' => 'мапудунгун',
        'arp' => 'арапахо',
        'as' => 'ассомча',
        'asa' => 'асуча',
        'ast' => 'астурийча',
        'av' => 'аварча',
        'awa' => 'авадхи',
        'ay' => 'аймара',
        'az' => 'озарбайжонча',
        'ba' => 'бошқирдча',
        'ban' => 'балича',

> 'бамбарча',
        'bn' => 'бенгалча',
        'bo' => 'тибетча',
        'br' => 'бретонча',
        'brx' => 'бодоча',
        'bs' => 'боснийча',
        'bug' => 'бугийча',
        'byn' => 'блинча',
        'ca' => 'каталонча',
        'ce' => 'чеч

      'bas' => 'басаа',
        'be' => 'беларусча',
        'bem' => 'бемба',
        'bez' => 'бенача',
        'bg' => 'болгарча',
        'bho' => 'бхожпури',
        'bi' => 'бислама',
        'bin' => 'бини',
        'bm' =


' => 'Isi-Arabhu',
        'as' => 'IsiAssamese',
        'az' => 'Isi-Azerbaijani',
        'be' => 'Isi-Belarusian',
        'bg' => 'Isi-Bulgaria',
        'bn' => 'IsiBangla',
        'br' => 'IsiBreton',
        'bs' => 'Isi-Bosnia',
        'ca' => 'Isi-Calatan',
        'cs' => 'Isi-Czech',
        'cy' => 'Isi-Welsh',
        'da' => 'Isi-Danish',
        'de' => 'IsiJamani',
        'el' => 'Isi-Greek',
        'en' => 'IsiNgesi',
        'eo' => 'Isi-Esperanto',
        'es' => 'Isi-Spanish',

Isi-Frisian',
        'ga' => 'Isi-Irish',
        'gd' => 'Scots Gaelic',
        'gl' => 'Isi-Galician',
        'gu' => 'Isi-Gujarati',
        'he' => 'Isi-Hebrew',
        'hi' => 'IsiHindi',
        'hr' => 'Isi-Croatia',
        'hu' => 'Isi-Hungari

    'et' => 'Isi-Estonian',
        'eu' => 'Isi-Basque',
        'fa' => 'Isi-Persia',
        'fi' => 'Isi-Finnish',
        'fil' => 'Isi-Taglog',
        'fo' => 'Isi-Faroese',
        'fr' => 'IsiFrentshi',
        'fy' => '


=> 'Arabic',
        'as' => 'Asame',
        'az' => 'Aserbayjane',
        'ba' => 'Baskir',
        'ban' => 'Bali',
        'be' => 'Belaris',
        'bem' => 'Bemba',
        'bg' => 'Bilgaar',
        'bn' => 'Baŋla',
        'bo' => 'Tibetan',
        'br' => 'Breton',
        'bs' => 'Bosñak',
        'ca' => 'Katalan',
        'ceb' => 'Sibiyanoo',
        'chm' => 'Mari',
        'chr' => 'Ceroki',
        'ckb' => 'Kurdi gu Diggu',
        'co' => 'Kors',
        'cs' => 'Cek',
        'cy' => '

   'es' => 'Español',
        'et' => 'Estoñiye',
        'eu' => 'Bask',
        'fa' => 'Pers',
        'ff' => 'Pël',
        'fi' => 'Feylànde',
        'fil' => 'Filipiye',
        'fo' => 'Feroos',
        'fr' => 'Farañse',
        'ga' => 'Irlànde'

Wels',
        'da' => 'Danuwa',
        'de' => 'Almaa',
        'dsb' => 'Sorab-Suuf',
        'dv' => 'Diweyi',
        'dz' => 'Dsongkaa',
        'el' => 'Gereg',
        'en' => 'Àngale',
        'eo' => 'Esperantoo',


  'ann' => 'Èdè Obolo',
        'anp' => 'Èdè Angika',
        'ar' => 'Èdè Lárúbáwá',
        'arn' => 'Èdè Mapushe',
        'arp' => 'Èdè Arapaho',
        'ars' => 'Èdè Arabiki ti Najidi',
        'as' => 'Èdè Assam',
        'asa' => 'Èdè Asu',
        'ast' => 'Èdè Asturian',
        'atj' => 'Èdè Atikameki',
        'av' => 'Èdè Afariki',
        'awa' => 'Èdè Awadi',
        'ay' => 'Èdè Amara',
        'az' => 'Èdè Asabaijani',
        'ba' => 'Èdè Bashiri',
        'bal' => 'Èdè Belúṣì',
        '

 Bojuri',
        'bi' => 'Èdè Bisilama',
        'bin' => 'Èdè Bini',
        'bla' => 'Èdè Sikiska',
        'blo' => 'Anii',
        'bm' => 'Èdè Báḿbàrà',
        'bn' => 'Èdè Bengali',
        'bo' => 'Tibetán',
        'br' => 'Èdè Bretoni',

ban' => 'Èdè Balini',
        'bas' => 'Èdè Basaa',
        'be' => 'Èdè Belarusi',
        'bem' => 'Èdè Béḿbà',
        'bez' => 'Èdè Bẹ́nà',
        'bg' => 'Èdè Bugaria',
        'bgc' => 'Èdè Haryanvi',
        'bho' => 'Èdè


    'kri' => '克裡奧爾文',
        'lo' => '老撾文',
        'luo' => '盧歐文',
        'mfe' => '毛里裘斯克里奧爾文',
        'mg' => '馬拉加斯文',
        'ml' => '馬拉雅拉姆文',
        'mt' => '馬耳他文',
        'nqo' => '西非書面語言（N’ko）',
        'or' => '奧里雅文'


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

if ('cli' !== \PHP_SAPI) {
    throw new Exception('This script must be run from the command line.');
}

define('LINE_WIDTH', 75);

define('LINE', str_repeat('-', LINE_WIDTH)."\n");

function bailout(string $message): void
{
    echo wordwrap($message, LINE_WIDTH)." Aborting.\n";

    exit(1);
}

/**
 * @return string
 */
f

dding = (int) ((LINE_WIDTH - strlen($text)) / 2);

    return str_repeat(' ', $padding).$text;
}

function cd(string $dir): void
{
    if (false === chdir($dir)) {
        bailout("Could not switch to directory $dir.");
    }
}

function run(string $comman

unction strip_minor_versions(string $version)
{
    preg_match('/^(?P<version>[0-9]\.[0-9]|[0-9]{2,})/', $version, $matches);

    return $matches['version'];
}

/**
 * @return string
 */
function centered(string $text)
{
    $pa


ony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests;

use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Countries;

#[Group('intl-data')]
#[Group('intl-data-isolate')]
class CountriesEnvVarTest extends TestCase
{
    public function testWhenEnvVarNotSet()
    {
        $this->assertFalse(Countries::exists('XK'));
    }

    public

env('SYMFONY_INTL_WITH_USER_ASSIGNED=false');

        $this->assertFalse(Countries::exists('XK'));
    }

    public function testWhenEnvVarSetTrue()
    {
        putenv('SYMFONY_INTL_WITH_USER_ASSIGNED=true');

        $this->assertTrue(Countries::exist

 function testWhenEnvVarSetFalse()
    {
        put


       'ANG',
        'AOA',
        'AOK',
        'AON',
        'AOR',
        'ARA',
        'ARL',
        'ARM',
        'ARP',
        'ARS',
        'ATS',
        'AUD',
        'AWG',
        'AZM',
        'AZN',
        'BAD',
        'BAM',
        'BAN',
        'BBD',
        'BDT',
        'BEC',
        'BEF',
        'BEL',
        'BGL',
        'BGM',
        'BGN',
        'BGO',
        'BHD',
        'BIF',
        'BMD',
        'BND',
        'BOB',
        'BOL',
        'BOP',

 'BZD',
        'CAD',
        'CDF',
        'CHE',
        'CHF',
        'CHW',
        'CLE',
        'CLF',
        'CLP',
        'CNH',
        'CNX',
        'CNY',
        'COP',
        'COU',
        'CRC',
        'CSD',
        'CSK',

     'BOV',
        'BRB',
        'BRC',
        'BRE',
        'BRL',
        'BRN',
        'BRR',
        'BRZ',
        'BSD',
        'BTN',
        'BUK',
        'BWP',
        'BYB',
        'BYN',
        'BYR',


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\RequiresFunction;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Locale;

class LocaleTest extends TestCase
{
    public static function provideGetFallbackTests()
    {
        $tests = [

  ];

        if (\function_exists('locale_parse')) {
            $tests[] = ['sl_Latn_IT', 'sl-Latn-IT-nedis'];
            $tests[] = ['sl_Latn', 'sl-Latn_IT'];
        } else {
            $tests[] = ['sl-Latn-IT', 'sl-Latn-IT-nedis'];
            $test

        ['sl_Latn_IT', 'sl_Latn_IT_nedis'],
            ['sl_Latn', 'sl_Latn_IT'],
            ['fr', 'fr_FR'],
            ['fr', 'fr-FR'],
            ['en', 'fr'],
            ['root', 'en'],
            [null, 'root'],


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Util;

use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Intl\Util\Version;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class VersionTest extends TestCase
{
    public static function normalizeProvider()
    {
        r


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Tests\Data\Util;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Util\LocaleScanner;

/**
 * @author Bernhard Schussek <bschussek@gmail.com>
 */
class LocaleScannerTest extends TestCase
{
    private string $directory;
    private Filesystem $filesystem;
    private LocaleScanner

anner();

        $this->filesystem->mkdir($this->directory);

        $this->filesystem->touch($this->directory.'/en.txt');
        $this->filesystem->touch($this->directory.'/en_alias.txt');
        $this->filesystem->touch($this->directory.'/en_child.tx

$scanner;

    protected function setUp(): void
    {
        $this->directory = sys_get_temp_dir().'/LocaleScannerTest/'.random_int(1000, 9999);
        $this->filesystem = new Filesystem();
        $this->scanner = new LocaleSc


' => 'Tiếng Aramaic',
        'arn' => 'Tiếng Mapuche',
        'aro' => 'Tiếng Araona',
        'arp' => 'Tiếng Arapaho',
        'arq' => 'Tiếng Ả Rập Algeria',
        'ars' => 'Tiếng Ả Rập Najdi',
        'arw' => 'Tiếng Arawak',
        'arz' => 'Tiếng Ả Rập Ai Cập',
        'as' => 'Tiếng Assam',
        'asa' => 'Tiếng Asu',
        'ase' => 'Ngôn ngữ Ký hiệu Mỹ',
        'ast' => 'Tiếng Asturias',
        'atj' => 'Tiếng Atikamekw',
        'av' => 'Tiếng Avaric',
        'awa' => 'Tiếng Awadhi',

        'bax' => 'Tiếng Bamun',
        'bbc' => 'Tiếng Batak Toba',
        'bbj' => 'Tiếng Ghomala',
        'be' => 'Tiếng Belarus',
        'bej' => 'Tiếng Beja',
        'bem' => 'Tiếng Bemba',
        'bew' => 'Tiếng Betawi',
        'bez' => 'Tiếng

      'ay' => 'Tiếng Aymara',
        'az' => 'Tiếng Azerbaijan',
        'ba' => 'Tiếng Bashkir',
        'bal' => 'Tiếng Baloch',
        'ban' => 'Tiếng Bali',
        'bar' => 'Tiếng Bavaria',
        'bas' => 'Tiếng Basaa',


Èdè Ágɛ̀ɛ̀mù',
        'bal' => 'Èdè Belúshì',
        'bez' => 'Èdè Bɛ́nà',
        'chr' => 'Èdè Shɛ́rókiì',
        'cu' => 'Èdè Síláfííkì Ilé Ìjɔ́sìn',
        'cv' => 'Èdè Shufasi',
        'dje' => 'Shárúmà',
        'dsb' => 'Shóbíánù Apá Ìshàlɛ̀',
        'ebu' => 'Èdè Ɛmbù',
        'en' => 'Èdè Gɛ̀ɛ́sì',
        'es' => 'Èdè Sípáníìshì',
        'gez' => 'Ede Gɛ́sì',
        'id' => 'Èdè Indonéshíà',
        'ie' => 'Èdè àtɔwɔ́dá',
        'ii' => 'Shíkuán Yì',
        'jmc' => 'Máshámè',

ì',
        'nb' => 'Nɔ́ɔ́wè Bokímàl',
        'nds' => 'Jámánì ìpìlɛ̀',
        'nl' => 'Èdè Dɔ́ɔ̀shì',
        'nmg' => 'Kíwáshíò',
        'nn' => 'Nɔ́ɔ́wè Nínɔ̀sìkì',
        'nus' => 'Núɛ̀',
        'nyn' => 'Ńyákɔ́lè',
        'oc' => 'Èdè Ɔ̀kísítáàn

'khq' => 'Koira Shíínì',
        'kk' => 'Kashakì',
        'kln' => 'Kálɛnjín',
        'ks' => 'Kashímirì',
        'ksb' => 'Sháńbálà',
        'ku' => 'Kɔdishì',
        'kw' => 'Èdè Kɔ́nììshì',
        'lb' => 'Lùshɛ́mbɔ́ɔ̀g


      'am' => 'isi-Amharic',
        'an' => 'isi-Aragonese',
        'ann' => 'isi-Obolo',
        'anp' => 'isi-Angika',
        'ar' => 'isi-Arabic',
        'arn' => 'isi-Mapuche',
        'arp' => 'isi-Arapaho',
        'ars' => 'isi-Najdi Arabic',
        'as' => 'isi-Assamese',
        'asa' => 'isi-Asu',
        'ast' => 'isi-Asturian',
        'atj' => 'isi-Atikamekw',
        'av' => 'isi-Avaric',
        'awa' => 'isi-Awadhi',
        'ay' => 'isi-Aymara',
        'az' => 'isi-Azerbaijani',

'isi-Bulgari',
        'bgc' => 'isi-Haryanvi',
        'bgn' => 'isi-Western Balochi',
        'bho' => 'isi-Bhojpuri',
        'bi' => 'isi-Bislama',
        'bin' => 'isi-Bini',
        'bla' => 'isi-Siksika',
        'blo' => 'isi-Anii',
        'bm' =

   'ba' => 'isi-Bashkir',
        'bal' => 'IsiBaluchi',
        'ban' => 'isi-Balinese',
        'bas' => 'isi-Basaa',
        'be' => 'isi-Belarusian',
        'bem' => 'isi-Bemba',
        'bez' => 'isi-Bena',
        'bg' =>


buted with this source code.
 */

use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Intl\Data\Bundle\Compiler\GenrbCompiler;
use Symfony\Component\Intl\Data\Bundle\Writer\PhpBundleWriter;
use Symfony\Component\Intl\Data\Generator\CurrencyDataGenerator;
use Symfony\Component\Intl\Data\Generator\GeneratorConfig;
use Symfony\Component\Intl\Data\Generator\LanguageDataGenerator;
use Symfony\Component\Intl\Data\Generator\LocaleDataGenerator;
use Symfony\Component\Intl\Data\Generator\RegionDataGen

l\Util\GitRepository;

if ('cli' !== \PHP_SAPI) {
    throw new Exception('This script must be run from the command line.');
}

require_once __DIR__.'/common.php';
require_once __DIR__.'/autoload.php';

$argc = $_SERVER['argc'];
$argv = $_SERVER['argv'];

erator;
use Symfony\Component\Intl\Data\Generator\ScriptDataGenerator;
use Symfony\Component\Intl\Data\Generator\TimezoneDataGenerator;
use Symfony\Component\Intl\Intl;
use Symfony\Component\Intl\Locale;
use Symfony\Component\Int


/ Include the locales statically so that the data providers are decoupled
    // from the Intl class. Otherwise tests will fail if the intl extension is
    // not loaded, because it is NOT possible to skip the execution of data
    // providers.

    private const LOCALES = [
        'af',
        'af_NA',
        'af_ZA',
        'ak',
        'ak_GH',
        'am',
        'am_ET',
        'ar',
        'ar_001',
        'ar_AE',
        'ar_BH',
        'ar_DJ',
        'ar_DZ',
        'ar_EG',

,
        'ar_SA',
        'ar_SD',
        'ar_SO',
        'ar_SS',
        'ar_SY',
        'ar_TD',
        'ar_TN',
        'ar_YE',
        'as',
        'as_IN',
        'az',
        'az_AZ',
        'az_Cyrl',
        'az_Cyrl_AZ',
        'az_Lat

 'ar_EH',
        'ar_ER',
        'ar_IL',
        'ar_IQ',
        'ar_JO',
        'ar_KM',
        'ar_KW',
        'ar_LB',
        'ar_LY',
        'ar_MA',
        'ar_MR',
        'ar_OM',
        'ar_PS',
        'ar_QA'


n [
    'Names' => [
        'ak' => 'Igikani',
        'am' => 'Ikimuhariki',
        'ar' => 'Icarabu',
        'be' => 'Ikibelarusiya',
        'bg' => 'Ikinyabuligariya',
        'bn' => 'Ikibengali',
        'cs' => 'Igiceke',
        'de' => 'Ikidage',
        'el' => 'Ikigereki',
        'en' => 'Icongereza',
        'es' => 'Icesipanyolo',
        'fa' => 'Igiperisi',
        'fr' => 'Igifaransa',
        'ha' => 'Igihawusa',
        'hi' => 'Igihindi',
        'hu' => 'Ikinyahongiriya',
        'id

eziya',
        'my' => 'Ikinyabirimaniya',
        'ne' => 'Ikinepali',
        'nl' => 'Igiholandi',
        'pa' => 'Igipunjabi',
        'pl' => 'Ikinyapolonye',
        'pt' => 'Igiporutugari',
        'rn' => 'Ikirundi',
        'ro' => 'Ikinyarumani

' => 'Ikinyendoziya',
        'ig' => 'Ikigubo',
        'it' => 'Igitaliyani',
        'ja' => 'Ikiyapani',
        'jv' => 'Ikinyejava',
        'km' => 'Igikambodiya',
        'ko' => 'Ikinyakoreya',
        'ms' => 'Ikinyamal


      'am' => '阿姆哈拉语',
        'an' => '阿拉贡语',
        'ang' => '古英语',
        'ann' => '奥博洛语',
        'anp' => '昂加语',
        'ar' => '阿拉伯语',
        'arc' => '阿拉米语',
        'arn' => '马普切语',
        'arp' => '阿拉帕霍语',
        'ars' => '纳吉迪阿拉伯语',
        'arw' => '阿拉瓦克语',
        'as' => '阿萨姆语',
        'asa' => '帕雷语',
        'ast' => '阿斯图里亚斯语',
        'atj' => '阿提卡米克语',
        'av' => '阿瓦尔语',
        'awa' => '阿瓦德语',
        'ay' => '艾马拉语',
        'az' => '阿塞拜疆语',
        'ba' => '巴什基尔语',
        'bal

语',
        'bg' => '保加利亚语',
        'bgc' => '哈里亚纳语',
        'bgn' => '西俾路支语',
        'bho' => '博杰普尔语',
        'bi' => '比斯拉马语',
        'bik' => '比科尔语',
        'bin' => '比尼语',
        'bkm' => '科姆语',
        'bla' => '西克西卡语',
        'blo' => '阿尼语',


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Bundle\Compiler;

use Symfony\Component\Intl\Exception\RuntimeException;

/**
 * Compiles .txt resource bundles to binary .res files.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class GenrbCompiler implements BundleCompilerInterfac

ronment variables to be loaded when running "genrb".
     *
     * @throws RuntimeException if the "genrb" cannot be found
     */
    public function __construct(string $genrb = 'genrb', string $envVars = '')
    {
        exec('which '.$genrb, $output, $

e
{
    private string $genrb;

    /**
     * Creates a new compiler based on the "genrb" executable.
     *
     * @param string $genrb   Optional. The path to the "genrb" executable
     * @param string $envVars Optional. Envi


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Extension;

use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Exception\BadMethodCallException;
use Symfony\

ien@symfony.com>
 */
abstract class Extension implements ExtensionInterface, ConfigurationExtensionInterface
{
    private array $processedConfigs = [];

    /**
     * Returns the recommended alias to use in XML.
     *
     * This alias is also the manda

Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Exception\LogicException;

/**
 * Provides useful features shared by many extensions.
 *
 * @author Fabien Potencier <fab


<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Extension;

use Symfony\Component\DependencyInjection\ContainerBuilder;

/**
 * ExtensionInterface is the interface implemented by container extension classes.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
interface

public function load(array $configs, ContainerBuilder $container): void;

    /**
     * Returns the recommended alias to use in XML.
     *
     * This alias is also the mandatory prefix to use when using YAML.
     */
    public function getAlias(): stri

ExtensionInterface
{
    /**
     * Loads a specific configuration.
     *
     * @param array<array<mixed>> $configs
     *
     * @throws \InvalidArgumentException When provided tag is not defined in this extension
     */


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Extension;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Loader\DelegatingLoader;
use Symfony\Component\Config\Loader\LoaderResolver;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\ClosureL

mfony\Component\DependencyInjection\Loader\IniFileLoader;
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

/**
 * @author Yonel Ceruto <yonelceruto@gmail.com>
 */
trait Extens

oader;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\DependencyInjection\Loader\DirectoryLoader;
use Symfony\Component\DependencyInjection\Loader\GlobFileLoader;
use Sy


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Exception;

/**
 * Thrown when a definition cannot be autowired.
 */
class AutowiringFailedException extends RuntimeException
{
    private ?\Closure $messageCallback = null;

    public function __construct(
        private string $serviceId,

 = $message();
        }

        if (!$message instanceof \Closure) {
            parent::__construct($message, $code, $previous);

            return;
        }

        $this->messageCallback = $message;
        parent::__construct('', $code, $previous)

 string|\Closure $message = '',
        int $code = 0,
        ?\Throwable $previous = null,
    ) {
        if ($message instanceof \Closure && \function_exists('xdebug_is_enabled') && xdebug_is_enabled()) {
            $message


 This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Exception;

/**
 * Thrown when trying to inject a parameter into a constructor/method with an incompatible type.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 * @author Julien Maulny <jmaulny@darkmira.fr>
 */
class InvalidParameterTypeExc

e instanceof \ReflectionNamedType ? $acceptedType->getName() : (string) $acceptedType;
        $this->code = $type;

        $function = $parameter->getDeclaringFunction();
        $functionName = $function instanceof \ReflectionMethod
            ? \sprin

eption extends InvalidArgumentException
{
    public function __construct(string $serviceId, string $type, \ReflectionParameter $parameter)
    {
        $acceptedType = $parameter->getType();
        $acceptedType = $acceptedTyp


he Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Exception;

/**
 * This exception is thrown when a circular reference in a parameter is detected.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class ParameterCircularReferenceException extends RuntimeException
{
    public function __construct(

revious = null,
    ) {
        parent::__construct(\sprintf('Circular reference detected for parameter "%s" ("%s" > "%s").', $parameters[0], implode('" > "', $parameters), $parameters[0]), 0, $previous);
    }

    public function getParameters(): array

   private array $parameters,
        ?\Throwable $p


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Exception;

use Psr\Container\NotFoundExceptionInterface;

/**
 * This exception is thrown when a non-existent parameter is used.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class ParameterNotFoundException extends InvalidArgumentException implements NotFoundExceptionInterface
{
    /**
     * @param string

ey that references the non-existent parameter
     * @param \Throwable|null $previous             The previous exception
     * @param string[]        $alternatives         Some parameter name alternatives
     * @param string|null     $nonNestedAlternativ

  $key                  The requested parameter key
     * @param string|null     $sourceId             The service id that references the non-existent parameter
     * @param string|null     $sourceKey            The parameter k


n Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Exception;

/**
 * This exception is thrown when a circular reference is detected.
 *
 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 */
class ServiceCircularReferenceException extends RuntimeException
{
    public function __construct(
        private string $serviceId,
        private a

  ) {
        parent::__construct(\sprintf('Circular reference detected for service "%s", path: "%s".', $serviceId, implode(' -> ', $path)), 0, $previous);
    }

    public function getServiceId(): string
    {
        return $this->serviceId;
    }

rray $path,
        ?\Throwable $previous = null,


 part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Exception;

use Psr\Container\NotFoundExceptionInterface;

/**
 * This exception is thrown when a non-existent service is requested.
 *
 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 */
class ServiceNotFoundException extends InvalidArgumentExc

        ?string $msg = null,
    ) {
        if (null !== $msg) {
            // no-op
        } elseif (null === $sourceId) {
            $msg = \sprintf('You have requested a non-existent service "%s".', $id);
        } else {
            $msg = \sprint

eption implements NotFoundExceptionInterface
{
    public function __construct(
        private string $id,
        private ?string $sourceId = null,
        ?\Throwable $previous = null,
        private array $alternatives = [],


 This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

/**
 * An attribute to tell under which alias a service should be registered or to use the implemented interface if no parameter is given.
 *
 * @author Alan Poulain <contact@alanpoulain.eu>
 */
#[\Attribute(\Attribute::TARGET

public Whether to declare the alias public
     * @param string|list<string> $when   The environments under which the class will be registered as a service (i.e. "dev", "test", "prod")
     * @param string|null         $target The name of the target to bin

_CLASS | \Attribute::IS_REPEATABLE)]
class AsAlias
{
    /**
     * @var list<string>
     */
    public array $when = [];

    /**
     * @param string|null         $id     The id of the alias
     * @param bool                $


?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Declares a decorating service.
 */
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
class AsDecorator
{
    /**
     * @param

e decoration is invalid; must be one of the {@see ContainerInterface} constants
     */
    public function __construct(
        public string $decorates,
        public int $priority = 0,
        public int $onInvalid = ContainerInterface::EXCEPTION_ON_IN

string $decorates The service id to decorate
     * @param int    $priority  The priority of this decoration when multiple decorators are declared for the same service
     * @param int    $onInvalid The behavior to adopt when th


/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Declares a class as a decorator of all services with a specific tag.
 *
 * @author Mathias Arlaud <mathias.arlaud@gmail.com>
 */
#[\Attribute(\Attribu

tiple decorators are declared for the same tag
     * @param ContainerInterface::*_REFERENCE $onInvalid The behavior to adopt when no services have the tag; must be one of the {@see ContainerInterface} constants
     */
    public function __construct(

te::TARGET_CLASS)]
class AsTagDecorator
{
    /**
     * @param string                          $tag       The tag name to decorate
     * @param int                             $priority  The priority of this decoration when mul


n Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

/**
 * An attribute to tell under which index and priority a service class should be found in tagged iterators/locators.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 */
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
class AsTaggedItem
{
    /**
     * @param str

ll be found when consuming tagged iterators/locators
     * @param int|null    $priority The priority of the service in iterators/locators; the higher the number, the earlier it will
     */
    public function __construct(
        public ?string $index =

ing|null $index    The index at which the service wi


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

/**
 * An attribute to tell how a base type should be autoconfigured.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 */
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
class Autoconfigure
{
    /**
     * @param array<array<mixed>>|string[]|null

ings to declare for the service
     * @param bool|string|null                  $lazy         Whether the service is lazy-loaded
     * @param bool|null                         $public       Whether to declare the service as public
     * @param bool|null

$tags         The tags to add to the service
     * @param array<array<mixed>>|null          $calls        The calls to be made when instantiating the service
     * @param array<string, mixed>|null         $bind         The bind


 file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

/**
 * @author Nicolas Grekas <p@tchwork.com>
 */
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
class AutoconfigureResourceTag extends Autoconfigure
{
    /**
     * @param string|null  $name       The resourc

utes The attributes to attach to the resource tag
     */
    public function __construct(?string $name = null, array $attributes = [])
    {
        parent::__construct(
            resourceTags: [
                [$name ?? 0 => $attributes],

e tag name to add
     * @param array<mixed> $attrib


he Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

/**
 * An attribute to tell how a base type should be tagged.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 */
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::IS_REPEATABLE)]
class AutoconfigureTag extends Autoconfigure
{
    /**
     * @param s

param array<mixed> $attributes The attributes to attach to the tag
     */
    public function __construct(?string $name = null, array $attributes = [])
    {
        parent::__construct(
            tags: [
                [$name ?? 0 => $attributes],

tring|null  $name       The tag name to add
     * @


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Argument\ArgumentInterface;
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\ExpressionLanguage\Expression;

/**
 * Attribute to tell a parameter how to be autowired.
 *
 * @author

only bool|array $lazy;

    /**
     * Use only ONE of the following.
     *
     * @param string|array|ArgumentInterface|null $value      Value to inject (ie "%kernel.project_dir%/some/path")
     * @param string|null                         $service    S

 Kevin Bond <kevinbond@gmail.com>
 */
#[\Attribute(\Attribute::TARGET_PARAMETER | \Attribute::TARGET_PROPERTY)]
class Autowire
{
    public readonly string|array|Expression|Reference|ArgumentInterface|null $value;
    public read


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Reference;

/**
 * Attribute to tell which callable to give to an argument of type Closure.
 */
#[\At

e callable to autowire
     * @param string|null       $method   The method name that will be autowired
     * @param bool|class-string $lazy     Whether to use lazy-loading for this argument
     */
    public function __construct(
        string|array|nu

tribute(\Attribute::TARGET_PARAMETER)]
class AutowireCallable extends AutowireInline
{
    /**
     * @param string|array|null $callable The callable to autowire
     * @param string|null       $service  The service containing th


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

/**
 * Allows inline service definition for an argument.
 *
 * Using this att

ezguen.turan@dadadev.com>
 */
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class AutowireInline extends Autowire
{
    public function __construct(string|array|null $class = null, array $arguments = [], array $calls = [], array $properties = [], ?string $pa

ribute on a class autowires a new instance
 * which is not shared between different services.
 *
 * $class a FQCN, or an array to define a factory.
 * Use the "@" prefix to reference a service.
 *
 * @author Ismail Özgün Turan <o


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;

/**
 * Autowires an iterator of services based on a tag name.
 */
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class AutowireIterator extends Autowire
{
    /**
     * @see ServiceSubscriber

y referencing each service in the tagged collection
     * @param string|string[] $exclude        A service id or a list of service ids to exclude
     * @param bool            $excludeSelf    Whether to automatically exclude the referencing service from t

Interface::getSubscribedServices()
     *
     * @param string          $tag            A tag name to search for to populate the iterator
     * @param string|null     $indexAttribute The name of the attribute that defines the ke


 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument;
use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\Depe

ey => service-type pairs.
 */
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class AutowireLocator extends Autowire
{
    /**
     * @see ServiceSubscriberInterface::getSubscribedServices()
     *
     * @param string|array<string|Autowire|SubscribedService>

ndencyInjection\TypedReference;
use Symfony\Contracts\Service\Attribute\SubscribedService;
use Symfony\Contracts\Service\ServiceSubscriberInterface;

/**
 * Autowires a service locator based on a tag name or an explicit list of k


/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
 * Tells which method should be turned into a Closure based on the name of the parameter it's attached to.

    Whether to use lazy-loading for this argument
     */
    public function __construct(string $service, bool|string $lazy = false)
    {
        parent::__construct([new Reference($service)], lazy: $lazy);
    }

    public function buildDefinition(mixe

*/
#[\Attribute(\Attribute::TARGET_PARAMETER)]
class AutowireMethodOf extends AutowireCallable
{
    /**
     * @param string            $service The service containing the method to autowire
     * @param bool|class-string $lazy


 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument;
use Symfony\Component\DependencyInjection\Reference;

/**
 * Attribute to wrap a service in a closure that returns it.
 */
#[\Attribute(\Attribute::T

R)]
class AutowireServiceClosure extends Autowire
{
    /**
     * @param string $service The service id to wrap in the closure
     */
    public function __construct(string $service)
    {
        parent::__construct(new ServiceClosureArgument(new Refere


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Exception\LogicException;

/**
 * An attribute to tell how a dependency is used and hint named autowiring aliases.
 *
 * @author Nicolas Grekas <

ruct(public ?string $name = null)
    {
    }

    public function getParsedName(): string
    {
        if (null === $this->name) {
            throw new LogicException(\sprintf('Cannot parse the name of a #[Target] attribute that has not been resolved. D

p@tchwork.com>
 */
#[\Attribute(\Attribute::TARGET_PARAMETER | \Attribute::TARGET_PROPERTY)]
final class Target
{
    /**
     * @param string|null $name The name of the target autowiring alias
     */
    public function __const


php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Attribute;

/**
 * An attribute to tell under which environment this class should be registered as a service.
 *
 * @author Nicolas Grekas <p@tchwork.com>
 */
#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \

GET_FUNCTION | \Attribute::IS_REPEATABLE)]
class When
{
    /**
     * @param string $env The environment under which the class will be registered as a service (i.e. "dev", "test", "prod")
     */
    public function __construct(public string $env)
    {


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Kernel;

use Symfony\Component\Config\Definition\Configurator\DefinitionConfigurator;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Comp

 * A base class for DI-powered bundles with built-in configuration hooks.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
abstract class AbstractBundle implements BundleInterface, ConfigurableExtensionInterface
{
    protected string $name;
    pr

onent\DependencyInjection\Extension\ConfigurableExtensionInterface;
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;

/**


buted with this source code.
 */

namespace Symfony\Component\DependencyInjection\Kernel;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Base class for DI-powered applications.
 *
 * Provides properties, lifecycle orchestration and public API.
 * Pair with KernelTrait for the container building implementation.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
abstract class AbstractKernel implements KernelInterface
{

<string, bool> */
    protected static array $freshCache = [];

    private string $projectDir;

    public function __construct(
        protected string $environment,
        protected bool $debug,
    ) {
        if (!$environment) {
            throw n

   /** @var array<string, BundleInterface> */
    protected array $bundles = [];
    protected ?ContainerInterface $container = null;
    protected bool $booted = false;
    protected ?float $startTime = null;

    /** @var array


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Kernel;

use Symfony\Component\Config\Definition\Configuration;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\ConfigurableExtensionInterface;
use S

pendencyInjection\Loader\Configurator\ContainerConfigurator;

/**
 * @author Yonel Ceruto <yonelceruto@gmail.com>
 *
 * @internal
 */
class BundleExtension extends Extension implements PrependExtensionInterface
{
    use ExtensionTrait;

    public functio

ymfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Extension\ExtensionTrait;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\De


 This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Kernel;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;

/**
 * @author Fabien Potencier <f

lds the bundle.
     *
     * It is only ever called once when the cache is empty.
     */
    public function build(ContainerBuilder $container): void;

    /**
     * Returns the container extension that should be implicitly loaded.
     */
    public fu

abien@symfony.com>
 */
interface BundleInterface
{
    /**
     * Boots the Bundle.
     */
    public function boot(): void;

    /**
     * Shutdowns the Bundle.
     */
    public function shutdown(): void;

    /**
     * Bui


<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Kernel;

use Symfony\Component\Config\FileLocator as BaseFileLocator;

/**
 * FileLocator uses the KernelInterface to locate resources in bundles.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class FileLocator exten

): string|array
    {
        if (isset($file[0]) && '@' === $file[0]) {
            $resource = $this->kernel->locateResource($file);

            return $first ? $resource : [$resource];
        }

        return parent::locate($file, $currentPath, $firs

ds BaseFileLocator
{
    public function __construct(
        private KernelInterface $kernel,
    ) {
        parent::__construct();
    }

    public function locate(string $file, ?string $currentPath = null, bool $first = true


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection\Kernel;

use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * @author Fabien Potencier <fabien@symfony.com>
 */
interface KernelInterface
{
    public function boot(): void;

    public function shutdown(): void;

    /**
     * @return array<string, BundleInt

ns the file path for a given bundle resource.
     *
     * A Resource can be a file or a directory.
     *
     * The resource name must follow the following pattern:
     *
     *     "@BundleName/path/to/a/file.something"
     *
     * where BundleName

erface>
     */
    public function getBundles(): array;

    /**
     * @throws \InvalidArgumentException when the bundle is not enabled
     */
    public function getBundle(string $name): BundleInterface;

    /**
     * Retur


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\DependencyInjection;

use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Exception\OutOfBoundsException;

/**
 * This definition extends another definition.
 *
 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 */
class Chil

finition to inherit from.
     */
    public function getParent(): string
    {
        return $this->parent;
    }

    /**
     * Sets the Definition to inherit from.
     *
     * @return $this
     */
    public function setParent(string $parent): stat

dDefinition extends Definition
{
    /**
     * @param string $parent The id of Definition instance to decorate
     */
    public function __construct(
        private string $parent,
    ) {
    }

    /**
     * Returns the De


       'ale' => '阿留申文',
        'aln' => '蓋格阿爾巴尼亞文',
        'alt' => '南阿爾泰文',
        'am' => '阿姆哈拉文',
        'an' => '阿拉貢文',
        'ang' => '古英文',
        'ann' => '奧博洛語',
        'anp' => '昂加文',
        'ar' => '阿拉伯文',
        'arc' => '阿拉米文',
        'arn' => '馬普切文',
        'aro' => '阿拉奧納文',
        'arp' => '阿拉帕霍文',
        'arq' => '阿爾及利亞阿拉伯文',
        'ars' => '納吉迪阿拉伯文',
        'arw' => '阿拉瓦克文',
        'ary' => '摩洛哥阿拉伯文',
        'arz' => '埃及阿拉伯文',
        'as' => '阿薩姆文',
        'asa' => '阿蘇文'

       'bal' => '俾路支文',
        'ban' => '峇里文',
        'bar' => '巴伐利亞文',
        'bas' => '巴薩文',
        'bax' => '巴姆穆文',
        'bbc' => '巴塔克托巴文',
        'bbj' => '戈馬拉文',
        'be' => '白俄羅斯文',
        'bej' => '貝扎文',
        'bem' => '別姆巴文',

,
        'ase' => '美國手語',
        'ast' => '阿斯圖里亞文',
        'atj' => '阿提卡梅克語',
        'av' => '阿瓦爾文',
        'avk' => '科塔瓦文',
        'awa' => '阿瓦文',
        'ay' => '艾馬拉文',
        'az' => '亞塞拜然文',
        'ba' => '巴什喀爾文',


ge.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Generator;

use Symfony\Component\Intl\Data\Bundle\Compiler\BundleCompilerInterface;
use Symfony\Component\Intl\Data\Bundle\Reader\BundleEntryReaderInterface;
use Symfony\Component\Intl\Data\Util\LocaleScanner;

/**
 * The rule for compiling the script bundle.
 *
 * @author Bernhard Sch

uage codes.
     *
     * @var string[]
     */
    private array $scriptCodes = [];

    protected function scanLocales(LocaleScanner $scanner, string $sourceDir): array
    {
        return $scanner->scanLocales($sourceDir.'/lang');
    }

    protected

ussek <bschussek@gmail.com>
 *
 * @internal
 */
class ScriptDataGenerator extends AbstractDataGenerator
{
    private const DENYLIST = [
        'Zzzz' => true, // Unknown Script
    ];

    /**
     * Collects all available lang


<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Intl\Data\Bundle\Writer;

/**
 * Writes .json resource bundles.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @internal
 */
class JsonBundleWriter implements BundleWriterInterface
{
    public function write(string $path, string $lo

f \Traversable) {
                $value = iterator_to_array($value);
            }
        });

        $contents = json_encode($data, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE)."\n";

        file_put_contents($path.'/'.$locale.'.json', $contents);

cale, mixed $data): void
    {
        if ($data instanceof \Traversable) {
            $data = iterator_to_array($data);
        }

        array_walk_recursive($data, static function (&$value) {
            if ($value instanceo


buted with this source code.
 */

namespace Symfony\Component\Intl\Data\Bundle\Writer;

/**
 * Writes .txt resource bundles.
 *
 * The resulting files can be converted to binary .res files using a
 * {@link \Symfony\Component\Intl\ResourceBundle\Compiler\BundleCompilerInterface}
 * implementation.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @see http://source.icu-project.org/repos/icu/icuhtml/trunk/design/bnf_rb.txt
 *
 * @internal
 */
class TextBundleWriter implements BundleWriterInterface

;

        fclose($file);
    }

    /**
     * Writes a "resourceBundle" node.
     *
     * @param resource $file  The file handle to write to
     * @param mixed    $value The value of the node
     *
     * @see http://source.icu-project.org/repos/icu/

{
    public function write(string $path, string $locale, mixed $data, bool $fallback = true): void
    {
        $file = fopen($path.'/'.$locale.'.txt', 'w');

        $this->writeResourceBundle($file, $locale, $data, $fallback)


buted with this source code.
 */

namespace Symfony\Component\Intl\Data\Bundle\Reader;

use Symfony\Component\Intl\Data\Util\RecursiveArrayAccess;
use Symfony\Component\Intl\Exception\MissingResourceException;
use Symfony\Component\Intl\Exception\OutOfBoundsException;
use Symfony\Component\Intl\Exception\ResourceBundleNotFoundException;
use Symfony\Component\Intl\Locale;

/**
 * Default implementation of {@link BundleEntryReaderInterface}.
 *
 * @author Bernhard Schussek <bschussek@gmail.com>
 *
 * @see Bun

ates an entry reader based on the given resource bundle reader.
     */
    public function __construct(
        private BundleReaderInterface $reader,
    ) {
    }

    /**
     * Stores a mapping of locale aliases to locales.
     *
     * This mapping

dleEntryReaderInterface
 *
 * @internal
 */
class BundleEntryReader implements BundleEntryReaderInterface
{
    /**
     * A mapping of locale aliases to locales.
     */
    private array $localeAliases = [];

    /**
     * Cre