应用内的区域设置更改无效

时间:2017-09-13 05:54:24

标签: java android locale

我正在尝试更改应用程序的语言,但它没有发生。我已尝试过几乎所有可用的解决方案,但都没有。有趣的是,大多数代码都能够更改Facebook Account Kit活动的语言,但其他活动的语言没有被更改.Below是我的应用程序类和清单文件。

public class MyApplication extends Application {


    private Locale locale = null;

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        if (locale != null)
        {
            newConfig.locale = locale;
            Locale.setDefault(locale);
            getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
        }
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        Configuration config = getBaseContext().getResources().getConfiguration();

        new SharedPrefManager(this).setLanguage("fr");
        String lang = new SharedPrefManager(this).getLanguage();

        locale = new Locale(lang);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
        AccountKit.initialize(getApplicationContext());
    }


}

的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.pullerr.pullerrdriver">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <meta-data android:name="com.facebook.accountkit.ApplicationName"
            android:value="@string/app_name" />
        <meta-data android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/FACEBOOK_APP_ID" />
        <meta-data android:name="com.facebook.accountkit.ClientToken"
            android:value="@string/ACCOUNT_KIT_CLIENT_TOKEN" />
        <meta-data android:name="com.facebook.accountkit.FacebookAppEventsEnabled"
            android:value="false"/>

        <activity
            android:name="com.facebook.accountkit.ui.AccountKitActivity"
            android:theme="@style/AppLoginTheme"
            tools:replace="android:theme"/>
        <activity
            android:configChanges="layoutDirection|locale"
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAINACTIVITY" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:configChanges="layoutDirection|locale"
            android:name=".LoadDetails"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.LOADDETAILS" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:configChanges="layoutDirection|locale"
            android:name=".Login"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:configChanges="layoutDirection|locale"
            android:name=".Register"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.REGISTER" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <service android:name="services.LocationService"/>
    </application>

</manifest>

Facebook AccountKit Language is Changed

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您可以更改语言(i18N),如下所示:

public static void changeLanguage(String language, Context context) {
    try {
        if ( null != language) {
            Locale locale = new Locale(language); 
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
        }

        Log.i(TAG, "Language changed to " + language);
    } catch (Exception e) {
        Log.e(TAG, "[changeLanguage]" + e.getMessage());
    }

}

我在GitHub上有一个开源项目。在https://github.com/configurer/easy-screen-lock/blob/master/EasyScreenLock/src/com/configurer/easyscreenlock/utils/LanguageUtils.java

开车