【问题标题】:How to check for a device language in android?如何在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 语句有什么问题吗?如果是,那又是什么?

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

【问题讨论】:

标签: java android string if-statement android-studio


【解决方案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 代码。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-01-31
                • 1970-01-01
                • 1970-01-01
                • 2014-01-11
                • 2013-03-15
                • 1970-01-01
                相关资源
                最近更新 更多