2017-09-13 93 views
1

我试图更改应用程序的语言,但它没有发生。我尝试了几乎所有在SO中可用的解决方案,但都没有工作。有趣的是,大部分代码都能够改变Facebook账户工具箱活动的语言,但其他活动的语言不会被改变。下面是我的应用程序类和清单文件。语言环境在应用程序内更改不起作用

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

+0

它不会自动更改语言环境,您需要在string.xml中添加您的单词 – Eazyz

+0

您能告诉我一个演示吗? –

+0

为要添加翻译的字符串文件的语言创建一个新的值文件夹,例如,如果您需要印地语在res中创建一个新文件夹(如“values-hi”)并在其中添加一个字符串文件,其中包含印地语的默认翻译 –

回答

1

你可以改变你的语言(国际化),如下:

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

+0

我使用类似的代码。在我的andrid-4.4上,只有在调用'super.onCreate()'之前调用'changeLanguage(..)'**之前** ** – k3b

+0

需要重启应用程序来实现区域设置更改。 – james

相关问题