2016-07-20 27 views
0

私はXamarin.Androidのアプリを開発中で、英語とブルガリア語をサポートしています。ほとんどのテキストは、valuesフォルダのStrings.xmlに保存されています。 英語のテキストはデフォルトのvaluesフォルダにあり、ブルガリア語のテキストはvalues-bgです。 両方のファイル名はString.xmlであり、各文字列の名前は翻訳バージョンと同じです。 どうすればいいですか?ボタンを1つクリックすると文字列がvalues-bgから読み込まれ、別のボタンをクリックするともう一度デフォルトから読み込まれます。また、私はアプリ内のすべてのアクティビティにそういうことを望んでいます。Xamarin Androidボタンをクリックしたときの言語変更フォルダ

答えて

2

ロケールをプログラムで変更する方法をテストしていましたが、最終的には私のために働く解決策が見つかりました。

あなたが言われたように、デフォルトの値を持つstrings.xmlを含む値のフォルダが必要です。これは英語ですが、同じファイルを持ち、ブルガリアの変換された値を持つvalues-bgフォルダです。文字列の名前が同じであることが重要なので、正しい名前を付けました。

次に、あなたのクリックイベントに、あなたはこれを追加することができます。

var locale = new Java.Util.Locale ("bg"); 
Android.Content.Res.Configuration conf = Resources.Configuration; 
conf.Locale = locale; 
DisplayMetrics dm = Resources.DisplayMetrics; 
Resources.UpdateConfiguration (conf, dm); 
Recreate(); 

は、まず、そのコードは「BG」ロケールのロケール変数を宣言します。次に、デバイスの実際の構成を取得し、新しいロケールを適用します。 UpdateConfigurationを使用して、変更を保存します。再作成はオプションです。名前がすべて説明されているので、新しい設定を使用してロードされる現在のアクティビティを、デフォルトロケールが適用されたものではなくロケール "bg"で再作成します。これで、values-bgフォルダに文字列が取得されます。

注:私はin the comments of the accepted answer hereを読んだことがあります。一部のデバイスでは、設定がアプリでしばらくしてからデフォルトにリセットされています。なぜこのようなことが起こるのか分かりませんが、ロールバックを防ぐために、新しいアクティビティをロードするときにロケールが何らかの形で変更されているかどうかを確認したい場合があります。

+0

これはアプリ全体のロケールを変更するのか、現在のアクティビティだけを変更するのでしょうか? – Reaper9806

+0

私は確信していませんが、私はアプリ全体について言うでしょう。 1つのアクティビティでのみその動作をしたい場合は、私の答えに似たメソッドを作成することができますが、 "bg"属性を持つ新しいロケールの代わりにデフォルトのロケールを適用します。 – YumeYume

+0

それだけです、私はそれがアプリ全体のために働くことを望みます。私はまだ試してみる機会がありませんでしたが、もしうまくいけば、私はできるだけ早くご意見をお寄せください。 – Reaper9806

関連する問題