当前位置: 首页 > 知识库问答 >
问题:

当用户选择语言时,如何更改应用程序的语言?

郭俊人
2023-03-14

我希望我的应用程序支持三种语言西班牙语,葡萄牙语

1)3个可绘制文件夹可绘制-es,可绘制-pt,可绘制。

2)3个值文件夹值-es,值-pt,值。根据语言更改String.xml值。

我有imageView来选择语言。当点击它时,菜单打开,包括选项英语、西班牙语、葡萄牙语。

我通过以下代码在选项选择上设置应用程序内部的区域设置

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.en:
             Locale locale = new Locale("en"); 
             Locale.setDefault(locale);
             Configuration config = new Configuration();
             config.locale = locale;
             getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
             Toast.makeText(this, "Locale in English !", Toast.LENGTH_LONG).show();
             break;

        case R.id.pt:
             Locale locale2 = new Locale("pt"); 
             Locale.setDefault(locale2);
             Configuration config2 = new Configuration();
             config2.locale = locale2;
             getBaseContext().getResources().updateConfiguration(config2, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Portugal !", Toast.LENGTH_LONG).show();
             break;

        case R.id.es:
             Locale locale3 = new Locale("es"); 
             Locale.setDefault(locale3);
             Configuration config3 = new Configuration();
             config3.locale = locale3;
             getBaseContext().getResources().updateConfiguration(config3, getBaseContext().getResources().getDisplayMetrics());

             Toast.makeText(this, "Locale in Spain !", Toast.LENGTH_LONG).show();
             break;     
    }
    return super.onOptionsItemSelected(item);
}

我已在清单中声明-android:configChanges=“locale”

它可以工作,但有一些问题。

问题:-

1) 当选择语言时,包含语言选择图像的屏幕不会更改,但其他屏幕会更改。

2)方向改变后,应用程序根据手机的语言环境恢复语言。

共有3个答案

陆文斌
2023-03-14

上面@Uday的所有代码都很完美,但只缺少一点(build.gradle中的默认配置)

public void setLocale(String lang) { 
Locale myLocale = new Locale(lang); 
Resources res = getResources(); 
DisplayMetrics dm = res.getDisplayMetrics(); 
Configuration conf = res.getConfiguration(); 
conf.locale = myLocale; 
res.updateConfiguration(conf, dm); 
Intent refresh = new Intent(this, AndroidLocalize.class); 
finish();
startActivity(refresh); 

}

我的不工作只是因为语言没有提到配置文件(build.gradle

 defaultConfig {
    resConfigs "en", "hi", "kn"
}

此后,所有语言都开始运行

皮景龙
2023-03-14

好的解决方案在这里解释得很好。但是这里还有一个。

创建自己的CustomContextWrapper类扩展ContextWrapper,并使用它更改整个应用程序的区域设置。下面是用法要点。

然后调用CustomContextWrapper,其中包含已保存的区域设置标识符,例如活动生命周期方法中印地语语言的hiattachBaseContext。这里的用法:

@Override
protected void attachBaseContext(Context newBase) {
    // fetch from shared preference also save the same when applying. Default here is en = English
    String language = MyPreferenceUtil.getInstance().getString("saved_locale", "en");
    super.attachBaseContext(MyContextWrapper.wrap(newBase, language));
}
郎言
2023-03-14

网页摘录:http://android.programmerguru.com/android-localization-at-runtime/

当用户从语言列表中选择应用程序时,很容易更改应用程序的语言。使用如下方法,将区域设置接受为字符串(如英语为“en”,印地语为“hi”),为应用程序配置区域设置,并刷新当前活动以反映语言的变化。在再次手动更改之前,不会更改您应用的区域设置。

public void setLocale(String lang) { 
    Locale myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, AndroidLocalize.class); 
    finish();
    startActivity(refresh); 
} 

确保导入了以下程序包:

import java.util.Locale; 
import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Configuration; 
import android.content.res.Resources; 
import android.util.DisplayMetrics; 

将清单添加到活动android:configChanges=“locale | orientation”

 类似资料:
  • 问题内容: 我正在使用FXML中描述的核心组件制作JavaFX桌面应用程序,我想为用户提供更改语言的选项。但是,一旦从FXML加载了组件,我还没有找到任何直接的方法来更改语言。 问题是,有什么标准方法可以处理JavaFX中的语言切换。 问题答案: 你可以做这样的事情。正如您在回答中一样,您可能希望将其实现为单例,或者使用DI框架在需要的地方注入单个实例: 现在,您可以执行以下操作: 而且任何时候您

  • 如果用户选择任何语言的应用程序更改,language.but我的应用程序内容是从json检索数据api.how改变它? 在此处输入图像描述 } } 在此处输入图像描述

  • 问题内容: 我想更改应用程序的语言,在API 26之前可以正常使用。 对于api> 25我放在了前面,但没有任何变化。 该文档不解释太多关于这一点。 问题答案: 我遇到了同样的问题:自Android 8.0+起,我的应用程序的某些部分不再更改其语言。更新应用程序和活动上下文对我有帮助。这是MainActivity函数的示例:

  • 为应用程序创建多语言支持,可以更改应用程序中的语言设置。 至于现在,一切都适用于英语、西班牙语、法语、俄语,但不适用于印地语和汉语。 1) 我以原始语言指定语言名称,但在应用程序中指定,而不是हिन्दी 我能看到“印地语”。 \res \ values hi \数组。xml 2) 选择“印地语”后结束-实际上选择了默认值(英语) \res\values hi\strings。xml .... 在

  • 使用一种语言比另外一种语言更流利?请为您的 Creative Cloud 应用程序选择其他语言。 选择您的操作系统筛选依据:所有系统较新的系统:Mac OS 10.7、Windows 7 或更高版本较旧的系统:Mac OS 10.6、Windows Vista 或更早版本 较新的系统:Mac OS 10.7、Windows 7 或更高版本 使用 Adobe Creative Cloud 桌面应用程

  • 我正在尝试更改下拉式适配器视图中的语言,该视图使用旋转adpater从字符串数组资源获取数据。我根据区域设置创建了两个不同的Strings.xml(一个用于法语,一个用于英语),但当我切换到法语并单击旋转器下拉菜单时,应用程序崩溃了。 下面是默认值目录中的Strings.xml 下面是values-fr-rFR目录中的strings.xml 这是自定义适配器中返回自定义视图的代码(视图是简单的文本