2016-12-12 48 views
-3

今天我坚持交换语言。 我想单击按钮时立即更改我的应用的语言。更改语言buttonclick在Android应用程序

我有两个按钮,一个是FR,另一个是ENG。 我以为我可以在点击时使用另一个strings.xml,但在经过一些研究后,所有关于位置和内容的内容都是根据语言电话选择正确的语言。

有没有一种解决方案,只需通过使用另一个strings.xml文件来单击按钮时交换语言?

+1

[程序在Android中更改语言(的可能的复制http://stackoverflow.com/questions/2900023/change-language-programmatically- in-android) – Zelldon

+1

我知道,但我读了其他人问的问题,它并没有真正帮助我。 –

回答

1

复制下面的类到您的应用程序

public class LocaleHelper { 

    private static final String SELECTED_LANGUAGE = "Locale.Helper.Selected.Language"; 

    public static void onCreate(Context context) { 

     String lang; 
     if(getLanguage(context).isEmpty()){ 
      lang = getPersistedData(context, Locale.getDefault().getLanguage()); 
     }else { 
      lang = getLanguage(context); 
     } 

     setLocale(context, lang); 
    } 

    public static void onCreate(Context context, String defaultLanguage) { 
     String lang = getPersistedData(context, defaultLanguage); 
     setLocale(context, lang); 
    } 

    public static String getLanguage(Context context) { 
     return getPersistedData(context, Locale.getDefault().getLanguage()); 
    } 

    public static void setLocale(Context context, String language) { 
     persist(context, language); 
     updateResources(context, language); 
    } 

    private static String getPersistedData(Context context, String defaultLanguage) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     return preferences.getString(SELECTED_LANGUAGE, defaultLanguage); 
    } 

    private static void persist(Context context, String language) { 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 
     SharedPreferences.Editor editor = preferences.edit(); 

     editor.putString(SELECTED_LANGUAGE, language); 
     editor.apply(); 
    } 

    private static void updateResources(Context context, String language) { 
     Locale locale = new Locale(language); 
     Locale.setDefault(locale); 

     Resources resources = context.getResources(); 

     Configuration configuration = resources.getConfiguration(); 
     configuration.locale = locale; 

     resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 


    } 
} 

这时如果你想改变的语言,然后改变它像这样

LocaleHelper.setLocale(this,"fr") //for french; 

LocaleHelper.setLocale(this,"en") //for english; 

请确保您有独立的values文件夹像法国values-fr并且您有两种语言的单独字符串资源。

+0

我在值dir中有不同的strings.xml。我应该制作不同的文件夹还是只是不同的strings.xml可以吗? –

+0

如果你的目录结构与Rohit Sharma提到的相同,那么它的确定 –

+0

好吧,我会尝试这个,我认为有一个简单的方法,就像当我点击一个按钮时,它只是使用另一个strings.xml。 –

0

使用按钮点击此代码:

String languageToLoad = "fr"; 
     Locale locale = new Locale(languageToLoad); 
     Locale.setDefault(locale); 
     Configuration config = new Configuration(); 
     config.locale = locale; 
     context.getResources().updateConfiguration(config,context.getResources().getDisplayMetrics()); 

    Intent intent = new Intent(XYZ.this, XYZ.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
0

要构建多语言Android应用程序,你需要收集的文本翻译成资源文件和翻译。

提供翻译后,Android操作系统将选择与用户语言环境匹配的资源。如果您的应用程序有多种语言版本,则Android会选择该设备使用的语言。

应用本地化流程

的Android负载文本和媒体从项目的“资源”目录资源。此外,Android可以根据当前的设备配置和区域设置从不同目录中选择和加载资源。

例如,如果代码加载一个名为“R.string.title”字符串,Android将通过从匹配“RES /值加载相应的strings.xml文件,选择该字符串在运行时正确的值' 目录。

为了拥有一个多语言的Android应用程序,您需要为Android提供本地化的资源文件。

如果区域设置为“EN-US”,Android将寻找“R.string.title”的值按下列顺序搜索文件:

‘res/values-en-rUS/strings.xml’ 
‘res/values-en/strings.xml’ 
‘res/values/strings.xml’ 

当它管理找到资源文件中的字符串,它使用该值并停止搜索。这意味着默认语言可作为后备选项,并且在存在翻译时,它将用于替代。这也意味着你应该将所有内容本地化或者没有任何内容,因为看到一半翻译的应用程序通常比根本不翻译的应用程序更糟糕。

请点击此链接以获得更多关于它:

https://www.icanlocalize.com/site/tutorials/android-application-localization-tutorial/

相关问题