更改应用程序内的语言时更改应用程序名称

时间:2017-03-05 22:15:28

标签: android localization

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

2 个答案:

答案 0 :(得分:1)

  

在app内,用户可以选择语言

关键词是“内部”。您所描述的是您的应用内部的内容。没有其他应用程序 - 包括主屏幕 - 对此有所了解。

  

问题是我想为不同的语言设置不同的名称(在应用程序抽屉中)

AFAIK,没有可靠的方法来做到这一点。

执行此操作的不可靠方法是在清单中有两个不同的活动,每个活动都包含MAIN / LAUNCHER <intent-filter>,其中一个活动的英文名称为android:labelandroid:label中有一个塞尔维亚名字。其中一个将设置为android:enabled="false",因此另一个将在开始时显示在主屏幕中。当用户更改应用内的语言时,您可以使用PackageManagersetComponentEnabledSetting()来切换这两项活动中的哪一项是启用的。

(您应该能够使用一个<activity>和一个<activity-alias>而不是两个活动完成同样的事情,但我没有那么多地使用<activity-alias>

这个问题有两个方面:

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

  2. 这只影响正在寻找启动器活动的主屏幕。这不会影响已安装的应用程序或通知列表,概述屏幕/最近任务列表以及依赖于应用程序名称的任何其他内容,您无法更改这些内容。

  3. 另一个选项是您创建主屏幕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"

或者另一种方法可能是将语言类型存储在首选项屏幕中,然后检查首选项是针对某种语言还是其他语言,并手动更改所需内容