我的问题:

如何在 source code 级别的Android手机中添加或删除"Settings" - > "Language & keyboard settings" - > "Select Locale"(或"Select Language")中的语言条目?

我会提供更多关于我想要什么以及我做了什么的细节 . Please excuse me 如果我提出任何愚蠢的理解或信息 . 我'm pretty new to Android development, starting to learn it several days ago. There is still a lot that I don't知道 .

关于我想要的更多信息:

我最近正在开展一项使用新语言本地化 entire phone 产品的任务(我的意思是,我是 not working on a specific application . 这就是为什么我需要在设置中添加新的语言环境) . 当我拿到开发电话时,我在"Select Locale"找到了 there are only 几个语言条目,例如"English","French"和"Spain" . 首先,我需要 add and display some new language entries 到这个列表,例如"Japanese","Chinese","Korean" .

我有Android平台的所有源代码和我自己的代码,所以我认为这个任务可以完成 by modifying the source code or the resource files somewhere . 不幸的是,我不知道代码和文件在哪里 .

运行时“Hello, L10N " tutorial shows a way to add a new locale from "自定义区域设置” . 但我想要的是 to add the new locales at build time 所以当手机启动时,新的语言环境将直接显示在"Select Locale"中而不做任何其他操作 .

我做了什么:

在我来之前,我在互联网上做了很多研究 . 这是我发现的:

_ Stack_flow中的Sinkiru问了一个关于我正在寻找什么的问题 . 看到它here . 然而,没有其他人回复他 . 他自己的回复只告诉我在哪里查询CURRENT语言设置,这就是我想要的 . 我亲自给他发了一封电子邮件,但没有得到他的答复 .

我在Stackoverflow中搜索了很多,关键字为"android locale","android language","android new locale"等 . 本网站的大部分问题都是询问如何更改应用的区域设置,如何为应用添加多语言支持等等 . 它们是 NOT 我想要的 .

我在Android平台谷歌组(http://groups.google.com/group/android-platform)搜索了很多 . 有些人在问我的问题,但在看完这些消息之后我仍然没有得到我的答案.. :-(这是我在小组中读到的帖子列表(我做了 not 从我们这里得到我想要的) :

“OS localization” - 我将在下面详细说明 .

返回上面列出的条目“(a)” . 在“操作系统本地化”消息主题中,Android框架工程师Dianne Hackborn说:

“设置应用程序只显示平台资源中可用的所有语言环境 . 为新语言环境添加字符串应自动在设置中显示 . 您可以告诉构建系统在构建时要包含哪些语言环境资源 . ..不幸的是,我无法帮助你,但也许其他人可以 . “

他粗体的话说明我的任务可以通过向源代码添加新的语言环境资源,以及通过在构建系统中设置或更改某些内容来自动完成 . I'm wondering if someone here has ever done the similar thing before? 明天我要试一试 .

最后但并非最不重要的是,我在官方Android开发者网站上搜索过 . 在“Hello, L10N " tutorial it says something about the available locales in the "设置”应用程序的"Run and Test the Localized Application"中,但这基本上是在模拟器中做什么,这应该不是我需要的 . 我想在真正的手机上完成它 .

我也潜入了试图发现一些东西的Android平台源代码 . 我从$(ANDR_SRC_ROOT)/ Packages / app / Settings / src /.../ LocalePicker.java开始 . 在LocalePicker :: onCreate()方法中,我注意到这行代码:

String [] locales = getAssets() . getLocales();

此行下面的代码尝试将所有获取的区域设置名称设置为ArrayAdapter,然后将适配器设置为要显示的列表视图 . 因此我认为“getLocales()”方法是解决方案的关键 .

然后我查看了getLocales()代码 . getLocales()是AssetManager的成员方法,并声明为native,因此我进入$(ANDR_SRC_ROOT)/frameworks/base/libs/utils/AssetManager.cpp,我 GUESS 应该是java getLocales()的实际实现方法 . C AssetManager :: getLocales()最终引导我进入C ResTable :: getConfigurations()方法,其中扫描成员变量“ mPackageGroups ”以检索所有可用的ResTable_config项 . Thus I think all the available locales should be added into this mPackageGroups during the system started up. 然而,我输了代码最后,无法找到将语言环境添加到mPackageGroups的位置 .