现在,我正在使用Kotlin构建一个Android应用程序。这个应用程序支持多种语言,我将字符串放入strings.xml中。我已经使用Locale开发了这个应用程序来更改语言。
这是我的资源树:
res
-values
--strings.xml
-values-ko-rKR
--strings.xml
我希望我的调试应用程序使用英文版,而我的发布应用程序使用韩文版。有什么方法可以在构建设置上做到这一点吗?如果我不能做到这一点,我在哪里可以轻松地设置我的默认区域设置?
要设置设备设置中设置的语言环境之外的其他语言环境,只需添加调试/发布检查:
public class LocaleUtil {
public static Context setForceLocale(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return updateResources(context);
} else {
return lockLocale(context);
}
}
public static Context lockLocale(Context context) {
Locale myLocale = new Locale("en-US");
Locale.setDefault(myLocale);
Resources res = context.getResources();
Configuration conf = res.getConfiguration();
conf.setLocale(myLocale);
return context.createConfigurationContext(conf);
}
private static Context updateResources(Context context) {
Locale locale = new Locale("en-US");
Locale.setDefault(locale);
Resources res = context.getResources();
Configuration config = new Configuration(res.getConfiguration());
config.setLocale(locale);
return context.createConfigurationContext(config);
}
}
应用程序类内部:
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(LocaleUtil.setForceLocale(base));
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
LocaleUtil.setForceLocale(this);
}
添加ParentActivity并使您的应用程序的所有活动都继承自这个
public abstract class ParentActivity extends AppCompatActivity {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(LocaleUtil.setForceLocale(base));
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
LocaleUtil.setForceLocale(this);
}
}
}
最后将这一行添加到所有活动标签中的AndroidManifest中:
android:configChanges="keyboardHidden|orientation|screenSize"