【发布时间】:2015-08-27 12:15:55
【问题描述】:
我正在做一个多语言的应用程序。我理解 string.xml 的概念,用于将应用语言设置为手机的默认语言。有什么方法可以覆盖这个吗?例如,如果我有一部在西班牙使用的西班牙手机,但我仍然想拥有英文版的应用程序?
【问题讨论】:
标签: java android android-activity locale
我正在做一个多语言的应用程序。我理解 string.xml 的概念,用于将应用语言设置为手机的默认语言。有什么方法可以覆盖这个吗?例如,如果我有一部在西班牙使用的西班牙手机,但我仍然想拥有英文版的应用程序?
【问题讨论】:
标签: java android android-activity locale
您可以通过一个简单的函数以编程方式更改应用的语言(区域设置)。您只需要实现一种类似于下面的方法,该方法接收一个字符串作为参数(例如英语的“en”,西班牙语的“es”),您可以在其中为您的应用程序配置语言环境并刷新您当前的活动来反映变化。在您再次手动更改之前,您应用的语言环境不会更改。
public void setLocale(String lang) {
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.util.DisplayMetrics;
import android.content.res.Resources;
import android.content.res.Configuration;
在你的活动标签内的清单中添加android:configChanges="locale|orientation"
【讨论】:
EDIT 正如正确提到的,这不是 OP 所要求的,但我仍将其留在这里,以防万一有人在这里试图解决我的回答。
来自 Android 开发者页面:
如何创建替代资源
本地化应用程序的很大一部分是提供替代方案 不同语言的文本。在某些情况下,您还将提供 替代图形、声音、布局和其他特定于语言环境的 资源。
一个应用程序可以指定许多 res// 目录,每个目录 具有不同的限定符。为一个替代资源创建一个 不同的语言环境,您使用指定语言或 语言-地区组合。 (资源目录的名称必须 符合提供备选方案中描述的命名方案 资源,否则无法编译。)
例子:
假设您的应用程序的默认语言是英语。认为 您还希望将应用程序中的所有文本本地化为 法语,以及应用程序中的大部分文本(除 应用程序的标题)到日语。在这种情况下,您可以创建 三个可选的 strings.xml 文件,每个文件都存储在特定于语言环境的文件中 资源目录:
res/values/strings.xml Contains English text for all the strings that the application uses, including text for a string named title. res/values-fr/strings.xml Contain French text for all the strings, including title. res/values-ja/strings.xml Contain Japanese text for all the strings except title.如果您的 Java 代码引用 R.string.title,将会发生以下情况 在运行时:
If the device is set to any language other than French, Android will load title from the res/values/strings.xml file. If the device is set to French, Android will load title from the res/values-fr/strings.xml file.请注意,如果设备设置为日语,Android 将查找 res/values-ja/strings.xml 文件中的标题。但因为没有这样 字符串包含在该文件中,Android 将回退到 默认,并且会从 res/values/strings.xml 文件。
这里还有原始链接供参考:http://developer.android.com/guide/topics/resources/localization.html
【讨论】: