6

ICU APIを使用するのはこれが初めてであり、非常に単純であると想定したものを見つけるのに非常に苦労しています。特定のロケール/言語名を(英語ではなく)母国語で取得することです。

例:

fr    -> Français
en    -> English
pt_BR -> Português Brasileiro, or "Português (Brasil)"
es_ES -> Español Iberico, or "Español (España)"

参考までに、私は任意のbabel言語で特定のロケール名を取得できます。デフォルトはネイティブです。

>>> import babel
>>> locale = babel.Locale.parse('pt_BR')
>>> locale.get_display_name()
português (Brasil)
>>> locale.get_display_name('fr')
portugais (Brésil)
>>> locale.get_display_name('en')
Portuguese (Brazil)

では、ICUで同じことを行う方法は?私はPyICUを使用しているので、Pythonでの例は大歓迎ですが、私の問題は言語ではなくAPIにあるので、Java / C /C++でも問題ありません。

ありがとう!

4

3 に答える 3

3

私はちょうど見つけました: 最良の方法は ですgetDisplayName()が、引数として文字列を渡す代わりに、渡す必要があります... Locale インスタンス!

完全なコードは次のようになります。

>>> import icu
>>> locale = icu.Locale("pt_BR")
>>> print icu.getDisplayName()
u'portuguese (Brazil)'
>>> print icu.getDisplayName(locale)
u'portugu\xeas (Brasil)'

そのため、babel とは異なり、Locale メソッドはデフォルトでユーザーの現在のロケールで名前を返します。母国語で名前を取得するには、インスタンス自体を渡す必要があります。したがって、自分の言語 (私の場合は英語) で名前が必要な場合は簡単ですが、たとえばフランス語で名前が必要な場合は、'fr_FR' の新しい Locale インスタンスを作成する必要があります。奇妙な API ですが、それでも...

于 2012-05-02T00:32:00.020 に答える
2
#include <unicode/locid.h>
#include <unicode/ustream.h>
#include <iostream>

int main()
{
  Locale l("pt_BR");
  UnicodeString result;
  std::cout <<   l.getDisplayName(l, result) << std::endl;
}

português (Brasil)

ICUAPIで問題が発生したことをお詫び申し上げます。明確にするための提案はありますか?

于 2012-07-25T20:33:32.597 に答える
2

getDisplayLanguageオプションで別のロケールの名前を取るfunction があります。C-api が Python にどのように変換されるかはわかりませんが、関連する C ドキュメントはこちらにあります。


PyICU-docs を一瞥すると、次のようになります。

locale = Locale("pt_BR")
name = locale.getDisplayLanguage("en")

ラッパーの sourceを見るとgetDisplayLanguage、ゼロ、1、または 2 タプルを取るように見えます。どうgetDisplayLanguage(("en",))ですか?私は PyICU コード ベースに詳しくないので、ここで推測しています。

于 2012-05-01T23:55:00.443 に答える