今天我坚持交换语言。 我想单击按钮时立即更改我的应用的语言。更改语言buttonclick在Android应用程序
我有两个按钮,一个是FR,另一个是ENG。 我以为我可以在点击时使用另一个strings.xml,但在经过一些研究后,所有关于位置和内容的内容都是根据语言电话选择正确的语言。
有没有一种解决方案,只需通过使用另一个strings.xml文件来单击按钮时交换语言?
今天我坚持交换语言。 我想单击按钮时立即更改我的应用的语言。更改语言buttonclick在Android应用程序
我有两个按钮,一个是FR,另一个是ENG。 我以为我可以在点击时使用另一个strings.xml,但在经过一些研究后,所有关于位置和内容的内容都是根据语言电话选择正确的语言。
有没有一种解决方案,只需通过使用另一个strings.xml文件来单击按钮时交换语言?
复制下面的类到您的应用程序
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
并且您有两种语言的单独字符串资源。
我在值dir中有不同的strings.xml。我应该制作不同的文件夹还是只是不同的strings.xml可以吗? –
如果你的目录结构与Rohit Sharma提到的相同,那么它的确定 –
好吧,我会尝试这个,我认为有一个简单的方法,就像当我点击一个按钮时,它只是使用另一个strings.xml。 –
使用按钮点击此代码:
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);
要构建多语言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/
[程序在Android中更改语言(的可能的复制http://stackoverflow.com/questions/2900023/change-language-programmatically- in-android) – Zelldon
我知道,但我读了其他人问的问题,它并没有真正帮助我。 –