私のAndroidアプリケーションで伝統的かつ簡略化された中国語のサポートを実装するプロセスで、これがどのように機能するかについて混乱しました。
ドキュメント と this や this のような議論を読むことで、簡体字中国語を
そして伝統的な中国語に
それはすべてうまくいきますが、どういうわけか私には意味がありません(中国語の簡体字と従来の使い方について十分に理解していない場合は申し訳ありません)。
エミュレーターとルート化された電話のロケール設定ダイアログを確認することで理解したことから、ユーザーはロケールを簡体字中国語または繁体字中国語に変更できます。
ここで質問です。システムは、簡体字中国語または伝統的な中国語のstrings.xmlを取得する場所をどのように知るのですか。簡体字中国語を表示することになっている場合、values-zhから取得し、values-zh-rTWから伝統的に取得するという、ある種の仮定が焼き付けられていますか?
しかし、ユーザーが香港にいて、簡体字中国語を表示するようにデバイスを設定するとどうなりますか?または、世界のどこか他の移民が自分のデバイスを繁体字中国語に設定しても、彼の地域がたとえば米国かCAか?
ユーザーがロケールを設定し、アプリが正しいロケールで表示されるようにするには、どうすればよいですか?
更新:
さらなる調査から、Android電話ユーザーは国を言語とは別に設定できません。UIでロケールと呼ばれるものしか設定できません。言語と国で構成されていますが、リストは限られているため、多くの組み合わせは不可能です。
例えば。米国に住んでいる繁体字中国語を使用したい中国人は、言語を繁体字中国語に設定して(少なくともルート化された電話では)、ロケールはzh-rTWになります。彼は決して自分の国を米国にすることはできませんでした。同様に、どのような種類の移民も、現在住んでいる国に母国語を設定できません。
基本的には、言語と国の組み合わせのみがサポートされることを意味します。今、質問は彼らがどれであるかを見つける方法です?
ですから、さらなる調査を行い、マークスの回答を得て、自分で答えを提供するつもりです。ここにあります:
すぐに使用できるAndroidには、簡体字中国語であるzh_rCNと繁体字中国語であるzh_rTWの2つのロケールのみがあります。設定アプリからわかるように、これらのロケールのみが提供されます:
https://Android.googlesource.com/platform/packages/apps/Settings/+/master/res/
ただし、他のAndroidシステムなど、中国で販売されている携帯電話などのシステムは、追加する内容を変更する可能性があります。理論的にサポートされるセット全体は、 icu4cアプリ:
https://Android.googlesource.com/platform/external/icu4c.git/+/master/data/locales/ 中国語でわかるように
Hantは、繁体字中国語のISOコード、簡体字中国語のHansです。理論的には、これは次のことを意味します
ただし、ロケールのさまざまな選択を行うには、設定アプリを変更する必要があることに注意してください。したがって、この段階では、簡体字中国語はzh_rCNおよび従来のzh_rTWに変換され、他のロケールをサポートするようなAndroid画像が変更されたユーザーのために離れている必要があります。
いずれにしても、保存側にいる場合は、Configurationクラスを使用してロケールを取得できます。アプリケーションクラスでgetResources()。getConfiguration()。localeを使用します。
あなたは例えばそれを記録してデータを追跡システムに送信します(使用するものは何でも)、またはサポートされているものを確認し、メッセージのロケール設定で例外をスローすると、市場インターフェースに表示されます...アプリの最低1回のクラッシュ(ボールに乗っている場合は、数分後に公開および更新できます..)
要約すると、最小設定は、設定アプリで行われていることをミラーリングすることです(zh-rCNとzh-rTWのみ)。ただし、シンガポール、香港、マカオのデフォルトロケールを提供する場合は、中国語をデフォルトとして提供します。あなたもそれを行うことができ、それは動作するはずです。しかし、そのような構成がどこでも使用されているという証拠はありません。
お役に立てば幸いです。
質問と以前の回答はかなり古いです。それらがどれだけ正しいかを伝えるのは難しいです。この回答は、アプリで繁体字中国語と簡体字中国語の両方をサポートしたいだけで、地域の詳細についてはあまり気にしない、ここに来た他の人向けです。
string.xml
ファイルを追加しますAndroid Studioでres
フォルダーを右クリックし、New> Android resource file。ファイル名にstrings
を入力し、Localeリストから。
その言語のzhまでスクロールします。 CN:China(簡易)に1つのstrings
ファイルを追加し、TW:Taiwan(従来)。 1つだけを使用している場合は、Any Regionを選択します。
documentation を理解しているので、ルックアップは最初に言語と地域に完全に一致するものがあるかどうかをチェックします(例:中国語-繁体字-台湾)。その後、より広範なチェックにフォールバックします。 (このシステムはAndroid 7.0の時点です。)
1. zh-Hant-TW // Chinese - Traditional - Taiwan
2. zh-Hant // Chinese - Traditional
3. zh // Chinese
私はこれがすべてどのように機能するのか完全にはわからないので、 this と this のドキュメントを読んでください。
私自身のアプリでこの方法に従って、システム設定を従来と簡体字の間で切り替えると、アプリの表示も変更されました。
既にトラディショナルまたは簡体字のいずれかで翻訳が1つある場合は、テキストをオンラインで自動変換できます。 Google翻訳から始めて、もう一方に変換します(strings.xml
ファイルに貼り付けてください)。すでにかなり良い仕事をしています。その後、多くのオンラインコンバーターのいずれかを使用して、それを数回繰り返します。テキスト比較ツールまたはサイトを使用して( text-compare.com が適切)、変換の結果を比較します。これは、Googleが犯した間違いを見つけるのに役立ちます。
https://developer.Android.com/guide/topics/resources/providing-resources.html#AlternativeResources
Android 7.0(APIレベル24)は、BCP 47言語タグのサポートを導入しました。これを使用して、言語および地域固有のリソースを修飾できます。言語タグは、1つまたは複数のサブタグのシーケンスから構成されます。各サブタグは、タグ全体で識別される言語の範囲を絞り込みまたは絞り込みます。
bCP 47タグを使用して、従来型または簡易型を定義できるようになりました。 (BCP 47言語タグを使用するには、b +と2文字のISO 639-1言語コードを連結し、オプションで+で区切られた追加のサブタグが続きます。)
すなわち: -
簡体字:
values-b+zh (defaults to simplified)
values-b+zh+Hans or
values-b+zh+Hans+CN (if you want to include regions)
伝統的:
values-b+zh+Hant or
values-b+zh+TW (defaults to traditional)
values-b+zh+Hant+TW (if you want to include regions)
https://tools.ietf.org/html/bcp47 で他の興味深い組み合わせを確認できます。含む:-
zh-cmn-Hans-CN (Chinese, Mandarin, Simplified script, as used in
China)
cmn-Hans-CN (Mandarin Chinese, Simplified script, as used in
China)
zh-yue-HK (Chinese, Cantonese, as used in Hong Kong SAR)
yue-HK (Cantonese Chinese, as used in Hong Kong SAR)
zh-nan-TW (min nan Chinese, as used in Taiwan)
zh-hak-CN (Chinese, Hakka, China).
-bを追加し、各タグの-を+に置き換えてください。