当应用程序内的语言发生变化时更改应用程序名称

问题描述:

我拥有使用塞尔维亚语和英语的应用程序。应用内用户可以选择语言。问题是我想为不同的语言使用不同的名称(在应用程序抽屉中)。如果手机为英文,应用程序名称将以英文显示,但如果用户更改语言,则该名称保持英文。是否可以更改语言更改的应用程序名称?当应用程序内的语言发生变化时更改应用程序名称

+0

“问题是我想要有不同的n ame(在应用程序抽屉中)不同的语言“ - 通过”应用程序抽屉“,你的意思是主屏幕和它的发射器? – CommonsWare

+0

是的,在启动器的应用程序抽屉和主屏幕上显示名称。 –

里面的应用程序,用户可以挑选语言

的关键词有“内部”。你所描述的是你的应用内部的东西。没有其他应用程序—包括主屏幕—知道这件事。

问题是,我想有一个不同的名称(在应用程序的抽屉)针对不同的语言

据我所知,有做这种没有可靠的方法。

不可靠的方法,这样做是为了在你的清单中两个不同的活动,每次在android:labelMAIN/LAUNCHER<intent-filter>,一个用的英文名和一个与android:label塞尔维亚名字。其中一个将被设置为android:enabled="false",所以另一个是在开始时显示在主屏幕上的那个。当用户更改应用程序中的语言时,可以使用PackageManagersetComponentEnabledSetting()来切换这两项活动中的哪一项是启用的。

(你应该能够完成同样的事情用一个<activity>和一个<activity-alias>而不是两个活动,但我没用过<activity-alias>所有的东西)

的问题,这是双重的:

  1. 并非所有的主屏幕都会检测到组件状态的这种变化。有些人会更新他们的启动器(“应用程序抽屉”)以反映变化。在设备重新启动之前,其他人不会。

  2. 这只会影响之类的东西都在寻找发射活动的主屏幕。这不会影响安装的应用程序列表或通知,总览屏幕/最近任务列表以及其他任何依赖于您不能更改的名称的应用程序名称。

另一种选择是,为您创建一个主屏幕app widget启动您的应用程序,因为您可以控制应用程序窗口小部件是否含有英文或塞尔维亚的文本。但是,用户必须将其添加到他们的主屏幕本身。

你只需要为期望的语言实现string.xml。 您只需要在values-es/strings.xml中添加另一个string.xml文件,而不是您想要的语言。 检查这个link它会自动使用你想要的。

编辑:

在此link

基本上你需要像下面它接受的语言环境字符串(如“en”代表英语,“喜”的印地文)的方法的指导,配置语言环境为您的应用程序和刷新您当前的活动,以反映语言的变化。您应用的区域设置在您再次手动更改之前不会更改。

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"

或者,也许另一种方式可能是存储在个人偏好屏幕的语言类型,然后检查首选项是否适用于某种语言或其他语言,并手动更改所需内容

+0

是的,但如果手机语言是例如英语和应用语言是塞尔维亚语。在这种情况下,我想在主屏幕上显示塞尔维亚语的应用程序名称,但它会是英语。 –

+0

编辑答案 –

+0

这仍然不会更改Android HomeScreen上的应用程序的名称。请首先回答一下。 –