2011-03-18 113 views
5

我必须用3种语言制作Android应用程序,例如德语,英语和荷兰语。我已经在res目录中的Android应用程序名称values-devalues-nl中创建了三个文件夹。 现在当用户选择一个特定的语言,我执行以下代码:多语言android应用程序?

Resources res = getResources(); 
Configuration newConfig = new Configuration(res.getConfiguration()); 
newConfig.locale = Locale.ENGLISH; 
res.updateConfiguration(newConfig, null); 

都在不同价值观的文件夹名称相同的字符串,即与中值的文件夹名称add_site一个字符串有相同的名称the values-de文件夹但具有不同的值。 当我将语言环境设置为德语时,我的应用程序未加载德语值?可能是什么问题呢?

谢谢你的帮助。

+0

我的理解是locales是根据系统偏好由Android自动处理的。是否有任何理由需要用户能够从您的应用程序中设置区域设置? – KPthunder 2011-03-18 06:02:40

+0

是的。这是因为只是为了查看我的应用程序,用户将不得不改变系统配置,这将导致所有应用程序被设置为该语言....我认为这是不必要的。虽然现在当我改变系统配置代码工作正常,这意味着德国文本正在显示时,我已经设置系统区域设置为德国...我想实现从应用程序内相同 – user590849 2011-03-18 06:07:33

+0

在某种程度上,这是一个作为一个功能不错的想法,但请记住,它是针对Android上的所有其他应用程序(包括股票应用程序)如何工作。它们都会自动检测您的区域设置,并在无需用户干预的情况下即时加载正确的资源。除非有很好的理由,否则我不会打破这种默认行为。 – 2011-03-18 15:38:03

回答

5

尝试把这个在onCreate()刚,来电后super.onCreate

Locale locale = new Locale("de"); 
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config, 
     getBaseContext().getResources().getDisplayMetrics()); 

编辑:Here's another approach。它似乎非常灵活,但在评论中似乎存在一些分歧,它是否适用于所有Android版本。

+0

我只想在用户需要时更改区域设置。即有一个languages.java文件,通过复选框,我让用户选择语言,并有另一个活动sitelisting.java我想看到的变化.... – user590849 2011-03-18 06:19:16

0

如果您还支持具有不同布局方向LTR或RTL的语言,那么设置配置语言环境是不够的。

 Resources res = getResources(); 
     Configuration newConfig = new Configuration(res.getConfiguration()); 
     Locale locale = new Locale(appLanguage); 
     newConfig.locale = locale; 
     newConfig.setLayoutDirection(locale); 
     res.updateConfiguration(newConfig, null);