猿问

在Android中以编程方式更改应用语言

在Android中以编程方式更改应用语言

是否可以在使用Android资源的同时以编程方式更改应用程序的语言?

如果没有,是否可以请求特定语言的资源?

我想让用户从应用程序更改应用程序的语言。


月关宝盒
浏览 631回答 3
3回答

冉冉说

这真的很有效:fa =波斯语,en =英语在languageToLoad变量中输入您的语言代码:import android.app.Activity;import android.content.res.Configuration;import android.os.Bundle;public class Main extends Activity {   /** Called when the activity is first created. */   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     String languageToLoad  = "fa"; // your language     Locale locale = new Locale(languageToLoad);      Locale.setDefault(locale);     Configuration config = new Configuration();     config.locale = locale;     getBaseContext().getResources().updateConfiguration(config,        getBaseContext().getResources().getDisplayMetrics());     this.setContentView(R.layout.main);   }}

跃然一笑

我一直在寻找一种以编程方式更改系统语言的方法。虽然我完全理解正常的应用程序永远不应该这样做,而是:用户应该(通过意图)指向系统设置以手动更改它应用程序应该自己处理它的本地化,就像Alex的答案中所描述的那样有必要真正地改变系统的语言。这是未记录的API,因此不应用于市场/最终用户应用程序!无论如何,我找到了解决方案:  Locale locale = new Locale(targetLocaleAsString);   Class amnClass = Class.forName("android.app.ActivityManagerNative");   Object amn = null;   Configuration config = null;   // amn = ActivityManagerNative.getDefault();   Method methodGetDefault = amnClass.getMethod("getDefault");   methodGetDefault.setAccessible(true);   amn = methodGetDefault.invoke(amnClass);   // config = amn.getConfiguration();   Method methodGetConfiguration = amnClass.getMethod("getConfiguration");   methodGetConfiguration.setAccessible(true);   config = (Configuration) methodGetConfiguration.invoke(amn);   // config.userSetLocale = true;   Class configClass = config.getClass();   Field f = configClass.getField("userSetLocale");   f.setBoolean(config, true);   // set the locale to the new value   config.locale = locale;   // amn.updateConfiguration(config);   Method methodUpdateConfiguration = amnClass.getMethod("updateConfiguration", Configuration.class);   methodUpdateConfiguration.setAccessible(true);   methodUpdateConfiguration.invoke(amn, config);
随时随地看视频慕课网APP

相关分类

Android
Java
我要回答