2017-12-13 24 views
0

デフォルトでは英語が使用されており、Googleのアプリでは他のいくつかの言語の翻訳が行われています。 ユーザーがアプリを起動すると、Locale.setDefault()がGoogle翻訳のロケールに設定されます。たとえば、電話はスペイン語で実行されていますが、スペイン語の翻訳はありません。電話番号はLocale.setDefault(Locale.US)です。 libsはLocale.getDefault()を使っているので、これは時間の書式設定に必要です。 Android 24まで完璧に動作します。Android 24は「Locale.setDefault()」を無視します。すべての日付はデバイス言語でフォーマットされますが、アプリ言語ではフォーマットされません。 API 24でデフォルトロケールを設定する

答えて

0

使用oficial docksことだから、解決策だけではなく、ロケール、だけでなく、ロケール内の構成を変更することでした。アプリケーションクラスで

@Override 
protected void attachBaseContext(Context base) { 
    LocaleUtil.getInstance().invalidateCurrentLocale(base); 
    super.attachBaseContext(base); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    LocaleUtil.getInstance().invalidateCurrentLocale(this); 
} 

そして、これはLocaleUtil方法

public void invalidateCurrentLocale(Context context) { 
    updateResources(context, 
        getLocaleOrDefault(getConfigLocale(context.getResources().getConfiguration()))); 
} 

public Locale getConfigLocale(Configuration configuration) { 
    if (Build.VERSION.SDK_INT < 24) { 
     return configuration.locale; 
    } else { 
     return configuration.getLocales().get(0); 
    } 
} 

private Locale getLocaleOrDefault(Locale locale) { 
    if (AVAILABLE_LOCALES.contains(locale)) { 
     return locale; 
    } 
    return DEFAULT_LOCALE; 
} 

private void updateResources(Context context, Locale locale) { 
    Locale.setDefault(locale); 

    Resources res = context.getResources(); 
    Configuration config = new Configuration(res.getConfiguration()); 
    config.setLocale(locale); 
    res.updateConfiguration(config, res.getDisplayMetrics()); 
} 
1

は、新しいメソッドを追加しましたsetDefault (Locale.Category category,Locale newLocale)

+0

である。しかし、 'は、SetDefault(ロケールnewLocale)は'非推奨されませんでしたし、ボンネットの下に、それは 'は、SetDefault(Locale.Categoryカテゴリを、使用していますロケールnewLocale) 'を使用してロケールを両方のカテゴリに設定します。 – Ufkoku

関連する問題