18

「昨日」や「2 時間前」などの値を返す相対 APIの使用は非常に優れていることがわかりましandroid.text.format.DateUtilsたが、私のアプリは Android がサポートしているすべての言語をサポートしているわけではありません。したがって、私はデフォルトで英語を使用していますが、サポートしていないすべての言語について、相対文字列がデバイスの設定に表示されます。

たとえば、次のようにします。

Last attempt: hace 11 minutos.

サポートしていない言語については、API 呼び出しをデフォルトで英語にしたいと考えています。ただし、API 呼び出しのロケールを設定する場所がどこにもありません。どこかに欠けていることを願っています。

デバイス設定を無視して、API 呼び出しのためだけに Locale を設定する方法はありますか?

4

2 に答える 2

15

これは、Android 7まで機能しています

  void forceLocale(Locale locale) {
    Configuration conf = getBaseContext().getResources().getConfiguration();
    updateConfiguration(conf, locale);
    getBaseContext().getResources().updateConfiguration(conf, getResources().getDisplayMetrics());

    Configuration systemConf = Resources.getSystem().getConfiguration();
    updateConfiguration(systemConf, locale);
    Resources.getSystem().updateConfiguration(conf, getResources().getDisplayMetrics());

    Locale.setDefault(locale);
  }

  void updateConfiguration(Configuration conf, Locale locale) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
      conf.setLocale(locale);
    }else {
      //noinspection deprecation
      conf.locale = locale;
    }
  }
于 2014-11-11T11:55:06.907 に答える
12

DateUtilsクラスのソースコードによると、日付と時刻をフォーマットするためにResource.getSystem()とメソッドの両方を使用します。メソッドを使用しLocale.getDefault()てデフォルトを変更することはできますが、メソッドの戻り値を変更することはできないと思います。デフォルトのロケールをに変更してみることができますが、この場合、結果はさらに悪化するように思われます。LocaleLocale.setDefault()Resource.getSystem()Locale.US

于 2011-07-07T06:23:42.897 に答える