Android限制本地化

6

我正在尝试发布一个目前只配置了英文的应用。当我上传我的应用到Play商店时,它说本地化支持包括“默认+49种语言”?我该如何禁用除英文以外的语言?


另外,我只有默认值文件夹,没有-fr、-it等。 - BKW
3个回答

5

我刚注意到了同样的问题,并经过一些调查找到了解释。我认为除了已有的关于后果的答案,我还要分享一下:

只要你的应用程序包括支持其他语言的库(例如Google Play服务),你创建的apk将被标记为支持所有这些本地化!

顺便说一下,您可以检查apk的属性,即使不将其上传到Google Play商店。只需从Android Apk中的最新build-tools文件夹中运行以下命令。对于我来说,此时此刻在cd〜ANDROID_HOME/build-tools/19.0.1处

./aapt d badging <apk>

正如之前建议的那样,重要的是提供应用程序说明的语言是哪些,因为这是用户实际看到的。此外,一个人可以在这个描述中包含真正支持的语言列表。

如果你真的想摆脱额外的语言,你需要从所有库中删除特定语言的res文件夹。对于库的本地副本,这很容易。我猜使用gradle和maven也应该是可能的,但我目前不认为这值得做。


1
正如其他人指出的那样,问题在于如果您包含支持其他语言的库,则所有这些翻译都会被拉入您的应用程序,然后商店会认为您支持这些语言。为了阻止构建工具拉入不支持的语言,您可以在“aapt”打包工具上设置过滤器,以便它将忽略特定的文件/目录。筛选器的格式可以在sdk中的主ant 'build.xml'文件中找到。(搜索aapt.ignore.assets)

默认的排除列表如下:

!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~

我建议您保留此列表并将任何额外的筛选器附加到其末尾。
例如,如果您想要排除es-US(存储在带有扩展名-es-rUS的目录中),则应更改排除列表如下:
!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~:<dir>*-es-rUS

这将排除所有以-es-rUS结尾的目录(请注意,过滤器不区分大小写,因此<dir>*-eS-RuS同样有效)。

要在命令行中执行此操作:

aapt.exe <All of your normal commands for packaging>  --ignore-assets <exclude-list>

对于与Eclipse相关的Ant构建,请在项目的ant.properties文件中添加以下内容:

aapt.ignore.assets=<exclude-list>

1
当您发布应用时,如果您只使用英语编写它,那么它将仅以英语发布。 如果您想将应用程序限制在特定国家/地区,则可以这样做:在开发者控制台上,您有一个名为“定价和分销”的选项卡。您可以在那里选择国家/地区。以下是其外观:

enter image description here


感谢您的反馈。我能否将我的应用程序销售给所有国家,但是在市场上进行过滤,只安装英语设备?让我困惑的是当我进入APK->显示详细信息时,本地化字段被给定为默认值+49种语言。我计划最终添加翻译,但我想确保没有人会错误地下载,以为有他们语言的翻译。 - BKW
也许您应该添加一个本地语言检查:String locale = context.getResources().getConfiguration().locale.getDisplayName(); 如果您发现它不是英语,请添加一个对话框,说明应用程序将稍后进行翻译。 - Uriel Frankel
如果我找不到更简洁的解决方案,那基本上就是我的计划了。我只是在想,可能有类似于<compatible-screens>但针对语言的东西,我可以在清单、项目属性等中声明。我猜你没有听说过这样的功能? - BKW
我没有听说过这个功能。如果你发现了什么,请让我知道。 - Uriel Frankel
我也是这样。如果我发现了什么,我会更新的。目前的计划是在启动时警告用户,如果他们的语言不受支持。再次感谢您的帮助! - BKW

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接