如何在android中检查设备语言?

Posted

技术标签:

【中文标题】如何在android中检查设备语言?【英文标题】:How to check for a device language in android? 【发布时间】:2014-12-14 13:06:52 【问题描述】:

我希望我的应用程序检查手机使用的是哪种语言。这个 if 语句应该这样做:

 if (Locale.getDefault().getLanguage().equals("en")) 
     yourYesResponse = "That is great " + usersName + "!";
 
 else if (Locale.getDefault().getLanguage().equals("fr")) 
     yourYesResponse = "C\'est bon " + usersName + "!";
 

但即使我的设备设置为法语,它仍会显示英语。这个 if 语句有什么问题吗?如果是,那又是什么?

编辑:感谢您的帮助。我很感激。

【问题讨论】:

你不能用Localizing with Resources吗? 对不起,我还在学习 Java 和 android 开发。但我会调查的。 【参考方案1】:

使用:

 Locale.getDefault().getLanguage().contentEquals("en")

String#equals() 不仅比较字符串的内容,还检查其他对象是否也是String 的实例。 String#contentEquals() methods 仅比较内容(字符序列)并且检查其他对象是否也是String 的实例。它可以是任何东西,只要它是CharSequence 的实现或StringBuffer 的实例。

【讨论】:

【参考方案2】:

为了得到设备语言,你可以这样:

Locale.getDefault().getDisplayLanguage();

或者,

Locale.getDefault().getLanguage(); //to get usual language code

【讨论】:

【参考方案3】:

对于有系统语言:

Locale.getDefault().getDisplayLanguage();

【讨论】:

【参考方案4】:

您可以通过为每种语言声明一个字符串资源文件来解决此问题。

创建名为 values-fr 和 values-en 的资源文件夹,并将名为 strings.xml 的文件添加到这两个文件夹。

values-en中的string.xml文件:

<resources>
<string name="good">That is great </string> 
</resources>

然后你像这样加载资源:

yourYesResponse = getResources().getText(R.string.good) + usersName + "!";

Niek 更快...

【讨论】:

【参考方案5】:

正如大家已经解释的那样,必须使用 i18N(不同语言的字符串 XML)来实现这个简单的事情,但如果您正在为其他目的寻找用户语言,那么请使用其中之一。

Locale.getDefault().getLanguage(); 

这将给出语言 iso 代码,即“de”、“ru”。

Resources.getSystem().getConfiguration().locale; 

这将返回全局共享资源对象,该对象仅提供对系统资源的访问。

【讨论】:

【参考方案6】:

通常使用以下格式 fr_FR 提供语言环境,其中第一个 fr 是语言代码,第二个是国家/地区代码,这就是您应该使用的原因

Locale.getDefault().getLanguage().startsWith("fr")

但Android方式是使用resources

getString(R.string.hello, userName);

已编辑:好吧,真不好意思,我没有注意到你调用了 getLanguage(),但第二部分是正确的。

【讨论】:

【参考方案7】:

Android 执行此操作的方式是使用 xml 资源,如 Localizing with Resources 中所述。

values/strings.xml

<resources>
    <string name="yes_response">That is great, %s!</string>
</resources>

values-fr/strings.xml

<resources>
    <string name="yes_response">C\'est bon, %s!</string>
</resources>

代码:

yourYesResponse = context.getString(R.string.yes_response, usersName);

动机:

使用Android资源框架分离是个好习惯 您的应用程序的本地化方面尽可能从 核心 Java 功能:

您可以将应用程序用户的大部分或全部内容 接口到资源文件,如本文档和 提供资源。 另一方面,用户界面的行为 手,是由您的 Java 代码驱动的。例如,如果用户输入数据 需要根据语言环境进行不同的格式化或排序, 那么您将使用 Java 以编程方式处理数据。这 文档不包括如何本地化您的 Java 代码。

【讨论】:

以上是关于如何在android中检查设备语言?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 中检查我的 android 设备是不是有互联网连接? [复制]

如果在android中打开了移动设备或wifi,如何检查互联网是不是可用[重复]

如何检查文件是不是存在于android设备的特定文件夹中

如何在Android中检查网络内的互联网连接(通过HOTSPOT使用其他设备的互联网)

如何在 iOS/Android 上获取当前设备语言?

如何检查android设备支持手电筒的`react-native`?