0

Android简繁体翻译到底该放哪儿?

 1 year ago
source link: https://aprildown.xyz/2022/12/25/android-chinese-strings/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Android开发有着和ISO 639-1BCP 47相似但不同的语言管理方案。

TL;DR

如果minSdk大于等于24(Android 7, Nougat),根据官方文档,简体中文放values-b+zh+Hans,繁体中文放values-b+zh+Hant

但没人会这么做吧!

如果minSdk小于等于23(Android 6, Marshmallow),经过个人测试,简体中文放values-rCN,繁体中文放values-rTW。如果要针对香港特殊翻译,再用values-rHK,澳门、新加坡同理。

官方文档有坑

讲解如何增加翻译的官方文档和前段时间的Android Dev Summit的一个视频中中,都推荐BCP 47格式(比如values-b+zh+Hans),但都不提示这是Android 7及之后才支持的格式

在之前的版本使用该格式时,应用并不会崩溃。但在缺少对应的翻译时,系统会发现新格式包含zh,进而先显示新格式的简体翻译,没有时显示新格式的繁体翻译。

以情况简单的英文为例,Android系统并没有单独的“英语”的语言选择,而有的是诸如“英语(美国)”、“英语(英国)”和“英语(印度)”等选择。这种情况下Locale.getDefault().toLanguageTag()将会是en-USen-GBen-IN等。

这里可以把英文翻译统一放到values-en,但通常英语是直接放到values中作为默认语言。

但简繁体中文并不能统一放到一个文件夹中。Android系统团队显然意识到了类似问题,但Android 7才支持为时已晚(要是AGP向前兼容就好了)

以情况复杂的繁体中文为例,虽然翻译放到了台湾(values-rTW),但是:

在Android 5和6中,只有“简体中文”和“繁体中文”两个语言选项。前者对应values-rCN,后者对应values-rTW。这里并没有之后系统中,可以选择地区的选项。

从Android 7开始,在选择语言的同时,也必须选择语言的地区。这时就出现了港澳台三地的繁体中文版本。

在个人测试中,以香港繁体中文为例,系统选择values-b+zh+Hantvalues-rTWvalues-rHK的优先级在不同手机上是不同的。但肯定是繁体中文。

系统也足够智能,如果没有values-rHK,它会选择values-rTW,即使这里的地区是台湾而不是用户设置的香港。

系统会选择和用户设置地区不同的文件夹,这里是最反直觉的地方。这是因为找不到地区对应的翻译时,系统会选择同语言的其他地区翻译,来确保至少是语言是正确的。

build.gradle中的指定语言的resConfigs是要和对应文件夹一致的。比如resConfigs 'en', 'zh-rCN', 'zh-rTW'

Per-app language preferences,Android依然沿用了反直觉的缩写。这里似乎和Locale.toLanguageTag()是一致的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK