首页 文章

在Android手机的“设置” - >“选择区域设置”中添加/删除语言条目

提问于
浏览
30

我的问题:

如何在 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语言设置,这就是我想要的 . 我亲自给他发了一封电子邮件,但没有得到他的答复 .

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

他粗体的话说明我的任务可以通过向源代码添加新的语言环境资源,以及通过在构建系统中设置或更改某些内容来自动完成 . 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的位置 .

6 回答

  • 1

    在HTC手机上你还必须修改/system/customize/CID/default.xml ...这是他们用来在他们的股票roms上指定区域设置的文件 . 如果rom是一个WWE,据说编辑CID是所有人都需要做的,但这并不总是成立 .

  • 1

    我认为普通的应用程序不应该为手机添加位置 . 为此目的,有像MoreLocale 2这样的特殊包 . 如果您不仅要负责为您自己的应用程序提供本地化,而且要为整个系统提供本地化服务!

  • 0

    你必须在android的framework-res包的"res"文件夹中创建"values"文件夹 . 新文件夹的名称必须包含您需要的国家/地区代码,即 . 抛光语言的值-pl-rPL(rPL部分是必需的)(对于英国英语:en-rGB等),这应该足够 - 如果不是 - 在该文件夹中创建strings.xml文件,并在那里添加空的“资源” “节点 .

  • 2

    要为应用程序创建或添加多种语言,首先必须在values文件夹中的string.xml中定义所有字符串值,而不是在程序中对它们进行硬编码 . 然后,您还必须为不同的语言设置不同的值文件夹,例如西班牙语和法语 Value 的 Value . 这应该做的工作 . 我不认为应用程序可以默认更改区域设置 .

  • 0

    我想你必须编辑

    PRODUCT_LOCALES

    出现在build / target / product / languages_full.mk中,并添加和删除分配给它的字符串 .

    您可以定义自定义字符串,如zz_zz,并在每个res文件夹中添加文件夹values_zz_zz .

    没试过,但这可能有用 .

    注意:根据您的构建系统,PRODUCT_LOCALES可能会在其他位置被覆盖

  • 1

    要删除语言,如果我们从PRODUCT_LOCALES中删除语言环境字符串,它将起作用 .

    我也在寻找一种添加新语言的方法,但只是增加这个并没有用 . 我认为我们需要更新一些低级文件或库才能添加新语言 .

相关问题