我的应用程序是塞尔维亚语和英语。在app内部,用户可以选择语言。问题是我想为不同的语言使用不同的名称(在app抽屉中)。如果手机是英文,应用程序名称将以英文显示,但如果用户更改语言,则该名称将保留为英文。是否可以在语言更改时更改应用名称?
答案 0 :(得分:1)
在app内,用户可以选择语言
关键词是“内部”。您所描述的是您的应用内部的内容。没有其他应用程序 - 包括主屏幕 - 对此有所了解。
问题是我想为不同的语言设置不同的名称(在应用程序抽屉中)
AFAIK,没有可靠的方法来做到这一点。
执行此操作的不可靠方法是在清单中有两个不同的活动,每个活动都包含MAIN
/ LAUNCHER
<intent-filter>
,其中一个活动的英文名称为android:label
在android:label
中有一个塞尔维亚名字。其中一个将设置为android:enabled="false"
,因此另一个将在开始时显示在主屏幕中。当用户更改应用内的语言时,您可以使用PackageManager
和setComponentEnabledSetting()
来切换这两项活动中的哪一项是启用的。
(您应该能够使用一个<activity>
和一个<activity-alias>
而不是两个活动完成同样的事情,但我没有那么多地使用<activity-alias>
这个问题有两个方面:
并非所有主屏幕都会检测到组件状态的这种变化。有些人会更新他们的启动器(“app抽屉”)以反映更改。其他人不会,直到设备重新启动。
这只影响正在寻找启动器活动的主屏幕。这不会影响已安装的应用程序或通知列表,概述屏幕/最近任务列表以及依赖于应用程序名称的任何其他内容,您无法更改这些内容。
另一个选项是您创建主屏幕app widget以启动您的应用,因为您可以控制该应用小部件是否包含英语或塞尔维亚语文本。但是,用户必须自己将其添加到主屏幕。
答案 1 :(得分:-1)
您只需要为欲望语言实现string.xml。
您只需要在values-es/strings.xml
中添加另一个string.xml文件,而不是您想要的语言。
检查此link,它会自动使用您想要的内容。
编辑:
此link
中的指南基本上你需要一个像下面这样的方法接受locale作为String(比如英语的'en',hindi的'hi'),为你的App配置语言环境并刷新你当前的活动以反映语言的变化。在您再次手动更改之前,您应用的区域设置不会更改。
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);
startActivity(refresh);
finish();
}
确保导入以下包裹:
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"
或者另一种方法可能是将语言类型存储在首选项屏幕中,然后检查首选项是针对某种语言还是其他语言,并手动更改所需内容