16

私は c++ でロケールと I18N をいじっており、実際の例を探しています。Josuttis の著書(2012 年 4 月にリリースされる C++11 の第 2 版) で I18N に関する Josuttis の章を読み、有用であることがわかりましたが、そこから引き出せる実際の例はありません。ベストプラクティスに従うことは、初歩的なミスを犯しています。StackOverflow は、C++ で I18N 処理を行うために、Web と印刷物の両方でどのようなリソースを教えてくれますか?

また、i18n を容易にする C++ 用のライブラリは何ですか? 必要な標準ライブラリにないものは何ですか? 一見すると、標準ライブラリには UTF8 サポートがないように見えます。

編集:

もう少し読んだ後、C と C++ はどちらも Unicode に「依存しない」ようです。また、Unicode/UTF8/16/32 でエンコードされたデータを処理するには、サードパーティのライブラリを使用する必要があるようです。これの核心は、標準ライブラリ自体が ISO 8859 と関連する文字ページのみを考慮していることです。これは、ロケールの設定に基づいて変更されます。つまり、文字列にはstd::stringorを使用するのではなく、ICU ライブラリを使用することをお勧めしますstd::wstring

4

6 に答える 6

12

GNU gettextを指摘されました。これにより、実行時にリテラル文字列をローカライズされたバージョンに置き換えることができます。これは、ローカライズの 1 つの側面です (これは、国際化を行った後に、誰かが実際に国際化されたコードを特定の場所で使用するときに発生します)。ロケール)。また、 Boost (特にBoost.Locale ) ライブラリも指摘されています。これは、通常、C++ に関連するものには適切な答えです。

もう 1 つの場所として、ICU (International Components for Unicode) プロジェクトがあります。また、データのソースとして、さまざまなロケールに関する情報のソースとしてCLDR (Common Locale Data Repository) を見ることができます。Unicode の Web サイトには、多くの言語を扱っているため、さまざまな文化の他の側面に関する情報もたくさんあります。

そして今のところ最後のリソースとして、かなり専門的なものとして、Olson Time Zone databaseがあります。これは毎年複数回更新され、さまざまな国が冬と夏の間でいつ変更するかに関するルールを変更する方法を追跡します (夏時間 (夏時間))。および標準)時間。

于 2008-10-12T14:14:27.947 に答える
2

国際化のwxWidgetsの例を見てみましょう。これには、 gettextで使用される変換メカニズムの非 gnu 実装があります(前述)。wxWidgets ライセンスで許可されているため、商用アプリケーションでも使用できます。

アプリケーションを国際化する方法を検討しているだけなら、gettext が出発点です。

于 2008-10-12T14:51:18.760 に答える
1

GNU gettextを見てください

一部の GUI ライブラリは既に i18n サポートを提供しているため、使用している C++ ライブラリを知ることは興味深いでしょう。

于 2008-10-12T13:42:12.940 に答える
1

2 番目の GNU gettext です。ただし、Qt を使用している場合 (C++ で GUI を実行したい場合は可能性が高い)、Qt には独自のバージョンの gettext と優れた翻訳ツール (Qt Linguist) が付属しており、作業が簡単になり、使用することもできます。オーバーヘッドなしで非 GUI アプリケーションから。サービスでもあります。

ただし、C ++に欠けているものに関して、私の頭に浮かぶのは次のとおりです。

  • 数字、日付、または通貨に関するロケールの完全サポート。また、ロケールの違いは、順序を含め、小数点記号だけではないことを思い出してください。
  • C++ 自体には、順序付けられた引数をサポートするフォーマット関数はありません (別の言語では、語順が自分の言語と異なる場合があるため)。これには boost::format を使用できます。もちろんQtもサポートしています。

また、これらのことがサポートされている場合でも、自分で何をしなければならなかったかを確認してください。たとえば、.NET には、すぐに使用できるロケールの包括的なリストが付属しています。

于 2008-10-12T13:52:37.630 に答える
0

UTF-8 サポートについては、UTF -8 CPPライブラリをご覧ください。

于 2008-10-12T15:06:10.633 に答える