更改设备的语言设置(区域设置)
Posted
技术标签:
【中文标题】更改设备的语言设置(区域设置)【英文标题】: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语言) 输入是语言。 如何检索设备上当前使用的语言?
【问题讨论】:
【参考方案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)) 对于某些用例可能是更好的方法,因为它直接打开语言列表,也是官方定义的操作。以上是关于更改设备的语言设置(区域设置)的主要内容,如果未能解决你的问题,请参考以下文章
Swift:当我的设备设置为“de”并且我的方案设置为“系统语言”时,为啥 DateFormatter 使用区域设置“en”