| 開発者 | ユニコードコンソーシアム |
|---|---|
| 初回リリース | 1999 |
| 安定リリース | 75.1 [1]
/ 2024年4月16日 |
| リポジトリ |
|
| 書かれた | C / C++ ( C++11 ) およびJava 8+ |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | Unicodeと国際化のためのライブラリ |
| ライセンス | Unicodeライセンス |
| Webサイト | icu.unicode.org |
International Components for Unicode ( ICU ) は、Unicodeサポート、ソフトウェアの国際化、ソフトウェアのグローバリゼーションのための成熟したC / C++およびJavaライブラリのオープンソースプロジェクトです。ICU は、多くのオペレーティング システムや環境に広く移植可能です。すべてのプラットフォームで、また C、C++、Java ソフトウェア間で、アプリケーションに同じ結果をもたらします。ICU プロジェクトは、Unicode コンソーシアムの技術委員会であり、 IBMおよび他の多くの企業によって後援、サポート、使用されています。[2] ICU は、 Windows 10バージョン 1703以降、Microsoft Windowsの標準コンポーネントとして含まれています。 [3]
ICU は、以下のサービスを提供します: Unicodeテキスト処理、完全な文字プロパティ、および文字セット変換。Unicode正規表現。完全な Unicode セット。文字、単語、および行の境界。言語に依存した照合と検索。正規化、大文字と小文字の変換、およびスクリプトの音訳。Common Locale Data Repository (CLDR)による包括的なロケールデータとリソース バンドル アーキテクチャ。複数のカレンダーとタイム ゾーン。日付、時刻、数値、通貨、およびメッセージのルールベースの書式設定と解析。ICU は歴史的にアラビア語、ヘブライ語、インド語、およびタイ語の複雑なテキスト レイアウトサービスを提供していましたが、これはバージョン 54 で非推奨となり、バージョン 58 でHarfBuzzに取って代わられて完全に削除されました。[4]
ICUは、CおよびC++の標準ライブラリよりも広範な国際化機能を提供します。2024年4月に予定されている将来のICU 75では、使用される言語に応じて、 C++17 (C ++11からアップグレード)またはC11 (C99からアップグレード)が必要になります。ICUは歴史的にUTF-16を使用してきましたが、現在でもJavaでのみ使用されています。一方、C/C++ではUTF-8がサポートされており、[5] [6]これには「不正なUTF-8」の正しい処理が含まれます。[7]
ICU 73.2では、 GB18030 -2022 準拠サポート、つまり中国語 (更新された中国語 GB18030 Unicode 変換形式標準は若干互換性がない) に関する重要な変更が改善されました。また、「一部の GB18030 文字を GB18030-2005 以降にエンコードされた Unicode 文字にマッピングする文字変換テーブルが変更されました」。また、日本語と韓国語の短いテキストの改行の改善など、他の多くの変更も行われ、「英語では、国名として「トルコ」ではなく「Türkiye」が使用されるようになりました (データには代替スペルも含まれています)」。[8]
ICU 74は「Unicode 15.1へのアップデートで、新しい文字、絵文字、セキュリティメカニズム、対応するAPIと実装が含まれています。[..] ICU 74とCLDR 44はメジャーリリースで、Unicodeの新バージョンと主要なロケールデータの改善が含まれています。」[9]多くの変更点の中には、人名のフォーマットや、低地ドイツ語などの言語サポートの改善などがあり、最新バージョンのUnicode 15 .1.0 UTS #39: Unicodeセキュリティメカニズムに準拠した新しいスプーフィングチェッカーAPIなどがあります。
旧バージョンの詳細
ICU 72 はUnicode 15に更新されました(73.2 は最新の 15.1 に更新されました)。「多くの書式設定パターンでは、ASCIIスペースはUnicode スペースに置き換えられます (例: 「細いスペース」)。」ICU (ICU4J) では Java 8 が必要になりましたが、「ICU 72 ライブラリ コードのほとんどは Java 7 / Android API レベル 21 でも動作するはずですが、Java 7 ではテストしていません。」[10] ICU 71 では、たとえば日本語のフレーズベースの改行 (以前の方法はタイトルや見出しなどの短い日本語テキストではうまく機能しませんでした) や、ラテン文字で書かれたヒンディー語 (hi_Latn) (「 Hinglish 」とも呼ばれます) のサポートが追加されました。 ICU 70 では、例えば文字列の絵文字プロパティのサポートが追加され、 C++20コンパイラでビルドして使用できるようになりました (また、「ICU の operator==() および operator!=() 関数は、C++20 での互換性のない変更に対する調整として、UBool ではなく bool を返すようになりました」)。 [11]このバージョンでは、Windows の最小バージョンはWindows 7です。ICU 67では、英国の EU 離脱が処理されます。ICU 64.2 では、現在の日本の令和元号を表す単一の新しい記号である Unicode 12.1 のサポートが追加されました(ただし、このサポートは ICU 4.8.2 までの古い ICU バージョンにもバックポートされています)。ICU 58 (Unicode 9.0 をサポート) は、Windows XP や Windows Vista などの古いプラットフォームをサポートする最後のバージョンです。AIX、Solaris 、 z / OSのサポートも、後続のバージョンでは制限される可能性があります (つまり、ビルドはコンパイラのサポートに依存します)。[12]
起源と発展
1996年初頭にTaligentがIBMの傘下に入った後、Sun Microsystemsは新しいJava言語に国際化のサポートを強化する必要があると判断しました。Taligentはそのような技術の経験があり、地理的にも近かったため、同社のTextおよびInternationalグループは、JDK 1.1国際化APIの一部としてJava Development Kitに国際化クラスを提供するよう依頼されました。[13]このコードの大部分は、現在でもおよびパッケージに残っています。Javaのその後のリリースごとに、さらなる国際化機能が追加されました。
java.textjava.util
Java 国際化クラスはその後、ICU4C ("ICU for C") と呼ばれるライブラリの一部として C++ と C [14]に移植されました。ICU プロジェクトは、標準 Java ライブラリにはない機能を追加する ICU4J ("ICU for Java") も提供しています。ICU4C と ICU4J は非常に似ていますが、同一ではありません。たとえば、ICU4C には正規表現 API が含まれていますが、ICU4J には含まれていません。両方のフレームワークは、Unicode とCommon Locale Data Repository (CLDR) の新しい機能をサポートするために、時間の経過とともに強化されてきました。
ICUは1999年にIBM Classes for Unicodeという名前でオープンソースプロジェクトとしてリリースされました。後にInternational Components For Unicodeに改名されました。[15] 2016年5月、ICUプロジェクトは技術委員会ICU-TCとしてUnicodeコンソーシアムに加わり、ライブラリソースは現在Unicodeライセンスの下で配布されています。[16]
メッセージフォーマット
ICUの一部であるMessageFormatクラスは、複数形(plural、 )や、文法上の性別などに対するselectordinalより一般的なswitch-caseスタイルの選択( )を制御するための任意の数の引数を許可する書式設定システムです。これらのステートメントはネストできます。[17] ICU MessageFormatは、 Java SEの同名のシステムに複数形と選択システムを追加することによって作成されました。
select
代替案
ICU をC++で使用する、または直接使用する代わりに、Boost.Locale を使用する方法があります。これは ICU の C++ ラッパーです (他のバックエンドも使用できます[18] )。ICU を直接使用するのではなく、これを使用する理由は、「C++ 開発者にとってまったく使いにくい。一般的な C++ のイディオム (STL、RTTI、例外など) を無視し、代わりに主に Java API を模倣している」ためです。[19] [20] ICU は UTF-16 のみをサポートしている (したがって ICU の使用を避けるべき) という別の主張は、ICU が C および C++ で UTF-8 もサポートするようになったため、もはや当てはまりません。[5]
参照
- Apple の高度なタイポグラフィ
- Unicode イメージング用の Apple タイプ サービス
- テキスト取得
- グラファイト(スマートフォントテクノロジー)
- NetRexx (ICU ライセンス)
- オープンタイプ
- パンゴ
- ユーコンヴ
- ユニスクライブ
参考文献
- ^ 「リリース ICU 75.1 · unicode-org/icu」。2024年4月21日閲覧。
- ^ 「ICU - International Components for Unicode」. site.icu-project.org . 2021年8月27日時点のオリジナルよりアーカイブ。2011年11月14日閲覧。
- ^ Chen, Raymond (2021 年 5 月 27 日)。「IANA タイム ゾーンと Windows レジストリ ベースのタイム ゾーンを変換するにはどうすればよいですか?」。The Old New Thing。Microsoft。
- ^ 「レイアウト エンジン - ICU ユーザー ガイド」。userguide.icu-project.org。
- ^ ab "UTF-8". ICU ドキュメント. 2022-05-24閲覧。
- ^ 「UTF-8 - ICU ユーザーガイド」。userguide.icu-project.org 。 2018年4月3日閲覧。
- ^ 「#13311 (不正な UTF-8 処理を Unicode の「ベスト プラクティス」に変更)」。bugs.icu-project.org。2018年 4 月 3 日閲覧。
- ^ 「ICU - International Components for Unicode - ICU 73」. icu.unicode.org . 2023年9月24日閲覧。
- ^ 「ICU - International Components for Unicode - ICU 74」. icu.unicode.org . 2023年11月29日閲覧。
- ^ 「ICU - International Components for Unicode - ICU 72」. icu.unicode.org . 2023年1月24日閲覧。
- ^ 「ICU - International Components for Unicode - ICU 70」. icu.unicode.org . 2023年1月24日閲覧。
- ^ 「ICU 64 - ICU - International Components for Unicode をダウンロード」。site.icu-project.org 。 2019年10月20日閲覧。
- ^ Laura Werner (1999). 「Java を世界に向けて準備する: IBM と Sun の国際化への取り組みの簡単な歴史」。2021 年 11 月 17 日時点のオリジナルよりアーカイブ。2007年 5 月 23 日閲覧。
- ^ 「ICU ユーザーガイド」。userguide.icu-project.org。
- ^ “ICUプロジェクト管理委員会”. 2021年8月28日時点のオリジナルよりアーカイブ。2012年8月17日閲覧。
- ^ 「ICU が Unicode コンソーシアムに参加」。Unicode , Inc. 2016 年 5 月 16 日。2016年 8 月 1 日閲覧。
- ^ 「メッセージのフォーマット」。ICU ユーザー ガイド。
- ^ 「Boost.Locale: ローカリゼーションバックエンドの使用」www.boost.org . 2022年5月24日閲覧。
- ^ 「Boost.Locale: 設計の根拠」www.boost.org . 2022年5月24日閲覧。
- ^ 「C++ での ICU と Boost Locale」。Stack Overflow。2022年 5 月 24 日閲覧。
外部リンク
- 公式サイト
- Unicode 音訳サービスのための国際コンポーネント
- オンラインICUエディター
