Android携帯電話の[設定]-> [言語とキーボードの設定]-> [ロケールの選択](または[言語の選択])で言語エントリを追加または削除するにはどうすればよいですか。 ソースコードレベル?
私が何をしたいか、そして何をしたかについての詳細を提供します。 すみません私が愚かな理解や情報を提示した場合。私はAndroid=開発にかなり慣れており、数日前にそれを学び始めました。まだ知らないことがたくさんあります。
最近、電話全体製品を新しい言語にローカライズするタスクに取り組んでいます(つまり、特定のアプリケーションでは動作していません。これが必要な理由です。設定で新しいロケールを追加します)。開発用電話を入手したところ、[there are only]と表示され、「Select Locale」で「English」、「French」、「Spain」などのいくつかの言語エントリを使用できます。したがって、まず、このリストに「日本語」、「中国語」、「韓国語」のように新しい言語エントリをいくつか追加して表示する必要があります。
私はAndroidプラットフォームと自分のコードのすべてのソースコードを持っているので、このタスクは実行できると思いますソースコードまたはリソースファイルをどこかで変更することによって。残念ながら、 、コードとファイルの場所がわかりません。
" Hello、L10N "チュートリアルは、実行時に「カスタムロケール」から新しいロケールを追加する方法を示しています。しかし、私が欲しいのはビルド時に新しいロケールを追加するなので、電話が起動すると、新しいロケールは「ロケールの選択」に他のアクションなしで直接表示されます。
ここに来る前にインターネットでたくさんの研究をしました。これが私が見つけたものです:
StackoverflowのSinkiruが、私が正確に何を探しているのか質問しました。ご覧ください こちら 。しかし、誰も彼に答えなかった。彼自身の返答は、現在の言語設定を問い合わせる場所を示しているだけです。つまり、notが欲しいものです。私は個人的に彼にこの質問のメールを送りましたが、彼の返事はまだありません。
Stackoverflowで「Androidロケール」、「Android言語」、「Android新しいロケール」などのキーワードを使用して、たくさん検索しました。このサイトの質問のほとんどは、アプリのロケールを変更する方法、アプリに多言語サポートを追加する方法などを尋ねています。これらは[〜#〜]ではありません[〜#〜]私が欲しいもの。
私はAndroidプラットフォームのGoogleグループ( http://groups.google.com/group/Android-platform )でたくさん検索しました。一部の人々は私の質問をしているが、メッセージを読んでもまだ私の答えが得られない.. : これは私がグループで読んだ投稿のリストです(そして私はそうしますnot彼らから私が欲しいものを手に入れてください):
"---(OS localization "-以下で詳しく説明します。
" 新しいロケールとそれに関連付けられたフォントをAndroidソース "に追加する方法
" 新しいL0caleを追加する方法 "
" Android Phone "からの言語の追加と削除
" 追加の言語サポート "
上記の「(a)」に戻ります。 「OSローカリゼーション」メッセージスレッドで、Androidフレームワークエンジニアのダイアンハックボーンは次のように述べています。
「設定アプリは、プラットフォームリソースで利用可能なすべてのロケールを表示するだけです。新しいロケールの文字列を追加すると、設定に表示されるロケールが自動的に表示されます。ビルドシステムビルドを行うときに含めるロケールリソース ...残念ながら、その部分についてはお役に立てませんが、他の誰かがお役に立てるかもしれません。」
彼の太字の単語は、新しいロケールリソースをソースコードに追加し、ビルドシステムで何かを設定または変更することにより、私のタスクが自動的に実行されることを示唆しています。 ここで誰かが以前に同じようなことをしたことがあるかどうか疑問に思いますか?明日試してみるつもりです。
最後に重要なこととして、私は公式のAndroid開発者サイトで検索しました。 " Hello、L10N "チュートリアルの "ローカライズされたアプリケーションの実行とテスト"では、 「設定」アプリケーションで利用可能なロケールについて何かが、それは基本的にエミュレータで何をすべきかについて話している、これは私が必要とするものではないはずです。
また、Androidプラットフォームのソースコードで何かを発見しようとしています。$(ANDR_SRC_ROOT)/ Packages/app/Settings/src /.../ LocalePicker.Java。 LocalePicker :: onCreate()メソッド、私はこのコード行に気づきました:
String [] locales = getAssets()。getLocales();
この行の下のコードは、取得したすべてのロケール名をArrayAdapterに設定し、次に表示するリストビューにアダプターを設定しようとします。したがって、「getLocales()」メソッドがソリューションの鍵であると思います。
次に、getLocales()コードを調べました。 getLocales()はAssetManagerのメンバーメソッドであり、ネイティブとして宣言されているため、$(ANDR_SRC_ROOT)/frameworks/base/libs/utils/AssetManager.cppにステップインしました[〜#〜] guess [〜 #〜]は、Java getLocales()メソッドの実際の実装である必要があります。C++ AssetManager :: getLocales()は、最終的にC++ ResTable :: getConfigurations()メソッドに私を導きますどのメンバー変数 "mPackageGroups"がスキャンされて、使用可能なすべてのResTable_config項目が取得されますしたがって、システムの起動時に、使用可能なすべてのロケールをこのmPackageGroupsに追加する必要があります。 =しかし、私はついにコードを紛失し、ロケールがmPackageGroupsに追加される場所を見つけることができませんでした。
hTC電話では、/ system/customize/CID/default.xmlも変更する必要があります...これは、彼らがストックromのロケールを指定するために使用するファイルです。 romがWWEの場合、CIDを編集するだけで十分ですが、常にそうであるとは限りません。
androidのframework-resパッケージの「res」フォルダーに「values」フォルダーを作成する必要があります。新しいフォルダの名前には、必要な国コードを含める必要があります。 values-pl-rPL(rPLの部分は必須です)ポーランド語(イギリス英語の場合:en-rGBなど)では、十分である-そうでない場合-そのフォルダーにstrings.xmlファイルを作成し、そこに空の "resources"ノードを追加します。
通常のアプリケーションでは、場所を電話に追加する必要はないと思います。そのために MoreLocale 2 のような特別なパッケージがあります。ロケールを追加する場合は、独自のアプリケーションだけでなくシステム全体のローカリゼーションを提供する必要があります。
アプリケーションに複数の言語を作成または追加するには、プログラムでハードコーディングするのではなく、最初に、valuesフォルダーのstring.xmlですべての文字列値を定義する必要があります。次に、言語ごとに異なるValueフォルダも必要です。スペイン語はValue-es、フランス語はValue-fr。これでうまくいくはずです。アプリケーションがデフォルトでロケールを変更できるとは思いません。
言語を削除する場合、PRODUCT_LOCALESからロケール文字列を削除すると機能します。
新しい言語を追加する方法も探していますが、これを追加するだけでは役に立ちません。新しい言語を追加するには、いくつかの低レベルのファイルまたはライブラリを更新する必要があると思います。
編集する必要があると思います
PRODUCT_LOCALES
Build/target/product/languages_full.mkに存在し、これに割り当てられた文字列を追加および削除します。
Zz_zzのようなカスタム文字列を定義し、各resフォルダーにフォルダーvalues_zz_zzを追加できます。
これを試したことはありませんが、うまくいくかもしれません。
注:ビルドシステムによっては、PRODUCT_LOCALESが別の場所でオーバーライドされる場合があります