【问题标题】:Change language settings (locale) for the device更改设备的语言设置(区域设置)
【发布时间】:2011-02-05 11:36:43
【问题描述】:

我知道通过 res/string 并取决于区域设置,可以在单个应用程序中使用多种语言。 这是一个案例 (ANDROID) controling the user language

现在如何更改手机中的语言? 就像我会做的那样 菜单 > 设置 > 语言和键盘 > 选择区域设置 > 语言

是否有一些真实的代码可以访问这些设置? 或者我应该为语言设置的快捷方式创建意图。 请贴一些代码

编辑: 使用语言环境类 developer.android.com/intl/fr/reference/java/util/Locale.html

构造函数至少是Locale(String语言) 输入是语言。 如何检索设备上当前使用的语言?

【问题讨论】:

    标签: android settings locale


    【解决方案1】:

    还有另一种方法可以打开系统设置更改语言:

    Intent i = new Intent( android.provider.Settings.ACTION_LOCALE_SETTINGS );
    startActivity( i );
    

    它只显示语言列表,当您选择一种时 - 它会更改设备上的语言。

    【讨论】:

    • 这种方法的缺点是,如果用户按下左上角的图标(旁边有“
    • @CJBS 真的!有没有办法处理这种状态?你找到什么了吗?
    • @Deepika 我没有:-(
    【解决方案2】:

    据我所知,在不使用 Intent 的情况下更改设备的 Locale 的唯一方法(其他解决方案建议的)是通过反射访问内部类(这意味着风险)。

    您可以在此处找到此用例的确切示例: http://www.tutorialforandroid.com/2010/07/access-internal-classes-in-android.html

    【讨论】:

      【解决方案3】:

      如果您将意图更改为,请扩展 Jim 的答案:

      intent.setClassName("com.android.settings", "com.android.settings.LocalePicker"); 
      

      它会将用户直接放到语言选择列表中,一旦选择了一种语言,它将返回到您的应用程序。

      它消除了一次点击,不会让用户考虑选择三个(语言、字典和键盘)选项中的哪一个,并在选择后立即返回到您的应用程序。

      【讨论】:

      • 在三星 Galaxy Tab 2 上不起作用(导致 ActivityNotFoundException:无法找到明确的活动类)。是否有可用的更新意图?
      • 我把它和一个 try catch 一起使用。使用 ACTION_LOCALE_SETTINGS 意图回退另一个尝试捕获。效果很好!
      【解决方案4】:

      我找到了我自己问题的另一个答案。 有一个开源代码项目code.google.com/p/languagepickerwidget 它正在重新创建一个 ListActivity 来显示和选择语言。

      Jim,您的解决方案非常简单,正是我所需要的。这是设置的捷径。你发布后,我立即在市场上上传了一个名为“raygional”的应用程序。如果可以(我只有 6 分),我会让您的回答有用。

      还有另一种查看流程和意图的方法。在模拟器上转到 Menu > Dev Tools > Development Settings > 然后点击 Show running processes

      【讨论】:

      • 有没有其他类似的项目,它展示了如何只更改操作系统的区域设置,但使用 Apache-license 或类似的东西?
      【解决方案5】:

      不确定是否直接从应用程序设置,但如果您想将用户发送到那里自行更改,请尝试以下操作:

      Intent intent = new Intent(Intent.ACTION_MAIN);
      intent.setClassName("com.android.settings", "com.android.settings.LanguageSettings");            
      startActivity(intent);
      

      【讨论】:

      • 嗨,吉姆,非常感谢。再问一个问题,你是怎么知道设置的包名和类名的?
      • 我所做的是在通过 USB 连接到我的 PC 时使用我的手机,然后查看 logcat 输出。每个启动的 Intent 都会记录到输出中。行读取 I/ActivityManager(1018): Starting activity: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.LanguageSettings } 预感我进入谷歌代码搜索并搜索“LanguageSettings Android意图”,并找到了一个这样做的人的例子。我自己测试了它并在此处简化了 sn-p 的代码。
      • 我为自己的问题找到了另一个答案。有一个开源代码项目code.google.com/p/languagepickerwidget 它正在重新创建一个 ListActivity 来显示和选择语言。吉姆,您的解决方案非常简单,正是我所需要的。这是设置的捷径。你发布后,我立即在市场上上传了一个名为“raygional”的应用程序。如果可以(我只有 6 分),我会让你的回答有用。还有另一种查看过程和意图的方法。在模拟器上转到 Menu > Dev Tools > Development Settings > 然后点击 Show running processes 。
      • startActivity(new Intent(Settings.ACTION_LOCALE_SETTINGS)) 对于某些用例可能是更好的方法,因为它直接打开语言列表,也是官方定义的操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多