2016-11-08 4 views
0

src-> main-> res->値の下にあるstring.xmlファイルを完全に読みたいと思います。値のフォルダにあるファイルを読む方法

私のアプリケーションで発生する可能性のあるローカリゼーションの問題を処理するには、特定のファイルが必要です。選択されたデバイスの言語はフランス語ですが、依然としてメインの英語の文字列.xmlファイルは、特定のシナリオの場合にのみです。したがって、values/strings.xmlのすべてのリソースはvalues-fr/strings.xmlに存在し、値-frから削除してください。オプションはありません。明らかに

  • 我々はしていないvalues/strings.xmlから、values-fr/strings.xmlファイルからtext_nameの値を受け取りますから、 getString(R.string.text_name)の一種の解決策は受け入れられません。
  • これは、同様に助けにはなりません。

    getResources().getIdentifier("text_name", "string", getPackageName()); 
    
  • string.xmlを生の資産ではないので、これは、同様に助けにはなりません。 context.getResources().openRawResource(R.raw.test) context.getAssets().open("values/string.xml");

これは私が試したものですが、どれも私に私が探しているファイルを与えなかっ:URIを使用して

  1. 特定を使用して
    Uri.parse("android.resource://" + context.getPackageName() + resource_id_for_string_file); 
    
  2. をファイルパス:

    File file = new File("/src/res/values/strings.xml"); 
    File file = new File("/res/values/strings.xml"); 
    
  3. this postclass.getClass().getResourceAsStream(...))どちらも機能しませんでした。

私は正直言っても、それはかなり簡単ですが、この問題の解決策はどこにもありません。

+0

それを渡す必要がある場合、あなたはまだ英語の値を追加することができますフランス語ファイルの特定のキーについては? – Yazan

+0

あなたのアプローチが正しくありません。いくつかの値を 'values-fr/strings.xml'から読み込み、' values/strings.xml'から読み込む場合は、値/文字列から取り出す必要がある値を追加しないでください。 xml'を 'values-fr/strings.xml'に変換します。特定のロケールに値がない場合は、デフォルトのロケールが使用されます。 –

+0

ありがとう、しかし私は値 - frの文字列のすべてのリソースが必要(私は特定のシナリオがそのファイルにアクセスし、値/ strings.xmlファイルに移動しないようにしたいので)助けてくれません – Dus

答えて

1

英語のテキストをいくつか表示したい場合は、英語のテキストをフランス語string.xmlファイルでのみ記述することをお勧めします。フランス語のstring.xmlファイルからのみ自動的に英語に翻訳されます。明示的に読む必要はありません。または、値をフレンチstring.xmlファイルに追加しないでください。メインのstring.xmlファイルから直接参照します。

+1

それはそうではありません、私はいくつかのケースでは、すべてではないので、私はあなたが示唆していることをすることはできませんそれを制御することができるようにしたい。 – Dus

0

これを行う必要がある場合は、現在のロケールがUSのときにアプリケーションのロケールを(FR)に設定し、関連するファイルから値を取得してから元に戻すgetString()を呼び出します。 (一時ロケールを設定する前に)最初に選択したロケールロケールを/変更され

public String getString(int id, Locale fromLocale, Context ctx){ 
    final Locale oldDefaultLocale = Locale.getDefault(); 

    Locale.setDefault(fromLocale); 
    Configuration config = getBaseContext().getResources().getConfiguration(); 
    final Locale oldConfigLocale = config.locale; 
    config.locale = fromLocale; 
    ctx.getResources().updateConfiguration(config, 
      getBaseContext().getResources().getDisplayMetrics()); 
    final String result = ctx.getString(id); 

    Locale.setDefault(oldDefaultLocale); 
    config.locale = oldConfigLocale; 
    ctx.getResources().updateConfiguration(config, 
      getBaseContext().getResources().getDisplayMetrics()); 

    return result; 
} 

同じAPIメソッドを使用して何のひねりを維持していないこの方法は、それが他のビュー/リソースには影響しませんメソッドの実行 中に瞬時に戻りました...画面

にあなたが親アクティビティ/フラグメントでこれを配置する場合、あなたはContext ctxを渡す必要はありませんが、Utilのクラスか何かで、あなたは

関連する問題