問題タブ [boost-locale]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost.Locale - C++ の Unicode 文字列
アプリケーションのすべての std::string が Boost.Locale で Unicode をサポートするようにすることはできますか? ドキュメントを読んだ後、私はそう言うことができます。しかし、私はそれがどのように機能するのか理解していません。主な質問は、ブースト文字列アルゴリズム ライブラリまたは Boost.Lexical_Cast ライブラリを引き続き使用できるかということです。はいの場合、boost::locale::to_upperおよび同様の形式のメソッドが必要な理由は、これらのメソッドがブースト文字列アルゴリズム ライブラリにある場合です。
c++ - std :: isalphaは、boost::localeで使用するとbad_castをスローします
Debian 7 GNU/Linuxでboost::locale(1.49)を使用する際に問題が発生しました(GCCのバージョンは4.6.3-1です)。コードはcp1251に保存されます。「isalpha」(または「boost :: alarmithm :: is_alpha」)などの関数を使用すると、例外(bad_cast)が発生します。このチェックには適切なファセットがないようです。コードは次のとおりです。
Visual Studio2008を搭載したWindows7でも例外なく実行されます。ただし、問題が1つあります。この場合、「debug500」がfalseに設定されています。ロケールが次のように生成された場合にのみ正常に機能しますstd::locale loc(".1251")
。ただし、ブーストによってロケールが生成される場合にも同じ問題が発生しますstd::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
。誰かがコードの何が問題なのか、および/またはcp1251ロケールでboostとstdを使用して同様のチェック(isalpha)を行う方法を説明できれば幸いです。
c++ - 文字列エンコーディング用のboost::locale to_utf関数、スローするのが好き
ブーストを使用して異なる文字列エンコーディング間で変換するのに問題があります。 これを読んだ後、私はこれをやってみました:
ただし、to_utf内でuse_facet()を試行すると、常にstd::bad_castで失敗します。
これは、生成されているロケールでブーストlocale::infoファセットが使用できないことを示しています。しかし、私は運が悪かったいくつかの異なる世代を試しました、そして私はシステムのデフォルトが常に機能することを期待しているので、私はどこか他の場所で何か間違ったことをしているに違いありません。
何か案は?
c++ - boost::locale で複数のメッセージ ドメインを使用できますか?
多くの一般的なライブラリを共有する多くのアプリケーションがあります。boost::locale を使用してアプリケーションを国際化しようとしています。一般的なライブラリごと、および特定のアプリケーションごとに個別の .mo ファイルを作成するのは簡単です。次のように複数のメッセージ ドメインを同時に使用できるかどうか、私は迷っていました。
boost::locale が lib1.mo と lib2.mo の両方を検索することを期待していましたが、うまくいかないようです。追加された最初のドメイン (この場合は lib1.mo) からのメッセージのみが検出されます。lib1 の前に lib2 を追加すると、lib2 からのメッセージのみが検出されます。
次のように、呼び出しで明示的にドメインを使用できることを知っています。
これは機能しますが、呼び出しごとにドメインを指定することは避けたいと思います。また、これが xgettext を使用して文字列を抽出する場合にうまく機能するかどうかもわかりません。
私がやろうとしていることは可能ですか?何か不足していますか?
代替案をご存知でしたら教えてください。
msvc 9.0 (2008) とブースト 1.48 を使用しています。
c++ - ブースト ロケールでのロケール固有の to_lower 問題
boost::locale::to_upper を試して、boost-locale ページhttp://www.boost.org/doc/libs/1_50_0/libs/locale/doc/htmlに従って、ロケール固有の大文字を使用しています。 /conversions.html
テキストは、「grüßEN」でboost::locale::to_upperを使用して結果「GRÜSSEN」を取得できる必要があることを示しています-これは正しいロケール固有の大文字バージョンです(だから私は信じています)。
テスト バージョンでは、「GRÜSSEN」ではなく「GRÜßEN」が表示されます。
テスト コードは次のようになります (文字列が実際に utf8 であることを確認するために utf8cpp を使用しています)。
これは、Xcode (4.1) を使用した OSX (10.7.4) 上にあります。-DU_USING_ICU_NAMESPACE=0 -DU_CHARSET_IS_UTF8=1 の推奨オプションで ICU (49_1_2) をインストールしました。ICU は /usr/local/include/unicode にあり、ライブラリは /usr/local/lib/libicu*.* にあります。
次のように 1_48 キットから boost::locale を構築しました。
ビルド時に次のように報告します。
https://svn.boost.org/trac/boost/ticket/6424によると、警告は無視できます (または、誰かよく知っていますか?) ビルドしたライブラリを stage/libs から /usr/local/libs にコピーします。
私が知る限り、それは ICU に対して正しく構築されています。私のテスト コードでは、libiconv にリンクする必要があります。
何が起こっているのか/何が間違っているのか、なぜ文書化されているように期待される動作が得られないのか、または少なくとも試してみるべきことについて、誰かが私に洞察を提供できますか?
乾杯
クリス
c++ - ロケール固有の方法で不完全な日付と時刻をフォーマットする方法
ロケール固有の方法で不完全な日付や時刻をフォーマットするにはどうすればよいですか?
私は7つの文字列のセットに日付/時刻を保存しています:
dayOfWeek
- 曜日。([1,7])dayOfMonth
- 月の日。([1,31])monthOfYear
- 月。([0,11])year
- 年。([-∞,∞])hourOfDay
- その日の時間。([0,11])minuteOfHour
- 時間の分。([0,59])meridianOfDay
- その日の子午線。([0,1])
さまざまな理由から、これらのほとんどは Web データで IR を使用して取得され、これらの文字列の一部は空である可能性があります。問題は、そのような不完全な日付/時刻をロケール固有の方法でフォーマットする方法です。
私が現在していることは、boost.localeを使用して作成し、date_time
完成したさまざまな日付/時刻コンポーネントをそれに追加してからdate_time
、ロケール固有の方法で文字列に保存することです。このようなもの:
これはある程度機能します。フォーマットされたロケールがありますdate_time
。ただし、 I start withにより、不完全なフィールドにはnowの日付/時刻が入力されます。date_time
の書式設定に含まれないように、不完全なフィールドにフラグを立てることができれば完璧ですdate_time
。
PS :ロケールごとに127 (2 7 -1) の書式設定文字列を維持できることはわかっていますが、そのような文字列を作成/検索して維持するのは狂気のレシピのようです!
c++ - ブーストロケール - 数値を変換するための基本的な使用法?
これは「奇妙」ですが、boost::locale (Microsoft Visual Studio 2010 の下) とブースト字句キャストを使用して数値を文字列に変換できないようです。
ドイツ語ロケールでは、「,」記号を 10 進数の識別子として使用する必要があります。したがって、上記は「1.253」と読む必要があります。ただし、動作しません (lexical_cast では例外が発生します) - 使用std::locale::global(std::locale("German_Germany.1252"));
しても動作しますが、Microsoft の命名/コードページに「制限」せずに、ポータブル システムを使用したいと考えています。
boost::locale を使用する方法、または std::locale よりも移植性の高いローカリゼーションを使用する方法を教えてください。
firebreath - Firebreathと一緒にブーストロケールを使用する
私はFirebreathを使用してChrome拡張機能を作成します:http ://slimtext.org そして私は問題に遭遇します:拡張機能はWindowsで漢字をうまくサポートしていません。多くの調査の結果、私はこれを見つけました:http ://www.boost.org/doc/libs/1_50_0/libs/locale/doc/html/default_encoding_under_windows.html
解決策はブースト/ロケールを使用することだと思います。しかし、https://github.com/firebreath/firebreath-boostプロジェクトにはboost/localeが含まれていないようです。1.50.0ブランチには、マスターブランチよりも新しいブーストが含まれていますが、どちらにもブースト/ロケールは含まれていません。
外部ブーストを使用するか、外部ブーストからロケールコードをコピーしようとしましたが、失敗しました(makeを実行するとロケールにリンクできませんでした)
あなたの提案は何ですか?Firebreathと一緒にブーストロケールを使用するにはどうすればよいですか?
c++ - Boost.Localeを使用して、いつケースを折り畳み、いつ照合するのですか?
Boost.Localeは、大文字と小文字を区別しない 2 つの文字列の比較を実行するためのさまざまなオプションを提供します。
boost::locale::collator
ファセットを介して照合を使用することにより、次のようになります。
boost::locale::fold_case
または、関数でケース フォールディングを使用します。
両方の関数の中間結果を保存することができ、そうすることを選択した場合、両方を最適化することができます。
documentationによると、大文字と小文字の折り畳みは一般にロケールに依存しない操作ですが、照合は高度にロケールに依存する操作です。
- ケース フォールディング アプローチで誤った結果が得られる場合はありますか?
(私を怖がらせるのは「一般的に」という言葉です。) - どちらかが優先される場合はありますか?
c++ - boost::locale::to_lower が bad_cast 例外をスローする
Win 7 64 ビットおよび VS2010 で 1.54 x64 をブーストします。「Release x64」としてコンパイルし、次のコードを実行します。
例外をスローしstd::bad_cast
ます。追加しても何も変わりません(他の場所で提案されているように):
環境内で LANGの代わりに使用するか、LANG を設定しto_lower(y)
ます。to_lower(y, mylocale)
std::string
std::wstring
目標は、小文字のイタリア語 UTF-8 単語に変換することです。私はこのような問題を回避していないので、マシン固有の問題かブースト ライブラリの問題であると推測します。ところで、sourceforge からプリコンパイル済みブースト ライブラリ (boost_1_54_0-msvc-10.0-64.exe) をダウンロードしました。何か案が?ありがとう!マリオ