【发布时间】:2017-09-13 15:44:45
【问题描述】:
我正在尝试更改应用程序的语言,但没有发生。我尝试了 SO 中几乎所有可用的解决方案,但没有一个奏效。有趣的事实是大多数代码都能够更改 Facebook Account Kit 活动的语言,但其他活动的语言没有改变。下面是我的应用程序类和清单文件。
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>
【问题讨论】:
-
它不会随着语言环境而自动更改,您需要在 string.xml 中添加您的单词
-
你能给我演示一下吗?
-
为您要添加翻译字符串文件的语言创建一个新的值文件夹,例如,如果您需要印地语在 res 中创建一个新文件夹,如“values-hi”并在其中添加一个字符串文件这是印地语的默认翻译
-
是的,我在 Github 上看到一个项目就是这样做的。字符串的名称应该是什么。我的意思是
My App 这意味着每个文本都必须在 strings.xml 文件中提及?可以在任何地方硬编码吗? -
检查你会理解的链接