Кіріспе

International Components for Unicode (ICU) бағдарламалық кітапханасы – Unicode қолдауын, бағдарламалық жасақтаманы халықаралық деңгейде бейімдеуді және бағдарламалық жасақтаманы жаһандықтандыруды қамтамасыз ететін жетілген C/C++ және Java кітапханаларының ашық кодты жобасы. ICU көптеген операциялық жүйелерге және орталарға оңай көшіріледі. Ол барлық платформаларда және C, C++ және Java бағдарламалық жасақтамаларында қолданбаларға бірдей нәтижелерді береді. ICU жобасы Unicode консорциумының техникалық комитеті болып табылады және IBM және көптеген басқа компаниялармен демеушілік етіліп, қолданылады. ICU Microsoft Windows жүйесінің стандартты құрамына Windows 10 нұсқасы 1703-тен бері енгізілген. ICU келесі қызметтерді ұсынады: Unicode мәтінімен жұмыс, толық таңба қасиеттері және таңба жиынтықтарын түрлендіру; Unicode тұрақты өрнектері; толық Unicode жиынтықтары; таңбалар, сөздер және жолдар шекараларын анықтау; тілге бейімделген жинақтау және іздеу; нормалау, әріптерді үлкен және кішкентайға түрлендіру, әріптерді транслитерациялау; Common Locale Data Repository (CLDR) арқылы кең ауқымды жергілікті деректер және ресурстар жиынтығының архитектурасы; бірнеше күнтізбелер мен уақыт белдеулері; күндерді, уақытты, сандарды, валюталарды және хабарламаларды ережелерге сәйкес пішімдеу және талдау. ICU бұрын араб, еврей, үнді және тай тілдері үшін күрделі мәтін макетін қамтамасыз еткен, бірақ бұл мүмкіндік 54-ші нұсқада ескірген, ал 58-ші нұсқада HarfBuzz пайдасына толығымен алынып тасталған. ICU C және C++ стандартты кітапханаларына қарағанда халықаралық деңгейде бейімдеудің кең мүмкіндіктерін ұсынады. 2024 жылдың сәуір айында күтілетін ICU 75 нұсқасы C++17 (C++11-ден жоғары) немесе C11 (C99-дан жоғары) талаптарын қояды, қолданылатын тілге байланысты. ICU тарихи түрде UTF-16 қолданған және қазір де Java үшін осы форматты қолданады; ал C/C++ үшін UTF-8 форматы қолдау табады, соның ішінде «жарамсыз UTF-8» дұрыс өңделеді. ICU 73.2 GB18030 2022 стандартына сәйкестік қолдауын жақсарту үшін маңызды өзгерістер енгізді, яғни қытай тілі үшін (жаңартылған қытай GB18030 Unicode Transformation Format стандарты толығымен үйлесімді емес); «өзгертілген таңбаларды түрлендіру кестесі бар, ол GB18030 2005-тен кейін кодталған кейбір GB18030 таңбаларын Unicode таңбаларымен сәйкестендіреді» және жапон және корей тілдеріндегі қысқа мәтіндік жолдарды бөлуді жақсарту сияқты басқа да өзгерістер бар, сондай-ақ «ағылшын тілінде ел атауы «Түркия» деп өзгертілді, бұрын «Turkey» деп қолданылатын еді (басқаша жазылу нұсқасы да деректерде қолжетімді)». ICU 74 «Unicode 15.1 жаңартуларын, жаңа таңбаларды, эмодзилерді, қауіпсіздік механизмдерін және тиісті API және іске асыруларды қамтиды. [ ] ICU 74 және CLDR 44 – Unicode-тің жаңа нұсқасын және жергілікті деректерді жақсартуды қамтитын маңызды жаңартпалар». Көптеген өзгерістер адам атының пішімделуіне немесе тілдік қолдауды жақсартуға, мысалы, Төменгі неміс тіліне бағытталған, сондай-ақ (соңғы нұсқа) Unicode 15.1.0 UTS #39: Unicode Security Mechanism стандартына сәйкес жаңа спамды тексеру API-ы бар.

Ескі нұсқаның егжей-тегжейі

ICU 72 Unicode 15-ке (және 73.2 соңғы 15.1-ге) жаңартылды. "Көптеген пішімдеу үлгілерінде ASCII бос орындары Unicode бос орындарымен алмастырылады (мысалы, "жіңішке бос орын"). ICU (ICU4J) енді Java 8 талап етеді, бірақ "ICU 72 кітапханасының көп бөлігі Java 7 / Android API деңгейі 21-де де жұмыс істеуі мүмкін, бірақ енді біз Java 7-де сынақтан өткізбейміз". ICU 71 жапон тілінде сөз тіркестеріне негізделген жол үзуді қосты (бұрынғы әдістер жапон тілінің қысқа мәтіні үшін, мысалы, тақырыптар мен атауларда жақсы жұмыс істемеді), сондай-ақ латын әріптерімен жазылған хинди тіліне (hi Latn) қолдауды, сонымен қатар "Hinglish" деп аталатын тілге қолдауды қосты. ICU 70, мысалы, жолдардың эмодзи қасиеттеріне қолдауды қосты және енді C++20 компиляторларымен құрастырылып, қолданылуы мүмкін (және "ICU операторы== және оператор!= функциялары енді UBool орнына bool мәнін қайтарады, бұл C++20-дағы үйлесімсіз өзгерістерге бейімделу үшін жасалды"), сондай-ақ осы нұсқадан бастап Windows-тың ең төменгі нұсқасы Windows 7 болып табылады. ICU 67 Ұлыбританияның Еуроодақтан шығуын қамтиды. ICU 64.2 Unicode 12.1 үшін қолдау қосты, яғни қазіргі жапондық Рейва дәуірінің жаңа символын (бірақ оған қолдау ICU 4.8.2 нұсқасына дейінгі ескі ICU нұсқаларында да бар). ICU 58 (Unicode 9.0 қолдауымен) Windows XP және Windows Vista сияқты ескі платформаларды қолдайтын соңғы нұсқа. AIX, Solaris және z/OS үшін қолдау кейінгі нұсқаларда шектеулі болуы мүмкін (яғни құрастыру компилятордың қолдауына байланысты).

Шығуы мен дамуы

1996 жылдың басында Taligent компаниясы IBM-нің құрамына енгеннен кейін Sun Microsystems жаңа Java тілінің халықаралық деңгейде қолдауын жақсарту қажет деп шешті. Taligent мұндай технологиялар бойынша тәжірибесі болғандықтан және географиялық тұрғыдан жақын болғандықтан, олардың мәтін және халықаралық топтарынан Java Development Kit-ке халықаралық сыныптарды JDK 1.1 халықаралық деңгейде қолдау API-лерінің бөлігі ретінде қосуды сұрады. Бұл кодтың көп бөлігі әлі де және пакеттерінде сақталып тұр. Java-ның әрбір келесі нұсқасында халықаралық деңгейде қолдау мүмкіндіктері кеңейтілді. Java халықаралық деңгейде қолдау сыныптары ICU4C ("ICU for C") деп аталатын кітапхананың құрамына C++ және C тілдеріне ауыстырылды. ICU жобасы сондай-ақ ICU4J ("ICU for Java") ұсынады, ол Java стандартты кітапханаларында жоқ мүмкіндіктерді қосады. ICU4C және ICU4J өте ұқсас, бірақ толықтай бірдей емес; мысалы, ICU4C тұрақты өрнектер API-ін қамтиды, ал ICU4J қамтымайды. Екі жүйе де уақыт өте келе Unicode және Ортақ жергілікті деректер қоймасының (CLDR) жаңа мүмкіндіктері мен ерекшеліктерін қолдау үшін жаңартылды. ICU 1999 жылы IBM Classes for Unicode деген атпен ашық кодты жоба ретінде жарияланды. Кейіннен ол International Components For Unicode деп қайта аталды. 2016 жылдың мамыр айында ICU жобасы Unicode консорциумына ICU TC техникалық комитеті ретінде қосылды, ал кітапхана кодтары енді Unicode лицензиясы бойынша таратылады.

Хабардың пішімі

ICU-ның бір бөлігі – MessageFormat класы, форматтау жүйесі. Ол кез келген сандағы аргументтерді пайдаланып, көпше түрін (, ) немесе грамматикалық жыныс сияқты жағдайлар үшін жалпы ауыстыру тізіміне қатысты таңдау жасауға мүмкіндік береді. Бұл мүмкіндіктер бір-біріне ішкілікпен орналастырылуы мүмкін. ICU MessageFormat, Java SE-дегі бірдей аталатын жүйеге көпше және таңдау функцияларын қосу арқылы жасалды.

Баламалар

ICU-ны C++ арқылы пайдаланудың немесе оны тікелей пайдаланудың баламасы Boost.Locale-ді пайдалану болып табылады, ол ICU үшін C++ қаптамасы (сонымен қатар басқа да артқы интерфейстерге мүмкіндік береді). Оны ICU-дан тікелей пайдаланудың орнына қолдану себебі, ICU "C++ әзірлеушілері үшін өте қолайсыз. Ол кең таралған C++ ерекшеліктерін (STL, RTTI, ерекше жағдайлар және т.б.) ескермейді, көбінесе Java API-ін қайталайды". Тағы бір мәлімдеме, ICU тек UTF-16-ны ғана қолдайды (сондықтан ICU-ды пайдаланудан қашуға болатын себеп) енді дұрыс емес, себебі ICU қазір C және C++ үшін UTF-8-ді де қолдайды.