MoeList多语言本地化揭秘:开源安卓应用Crowdin工作流与新语言翻译贡献指南
【免费下载链接】MoeListAnother unofficial Android MAL client项目地址: https://gitcode.com/gh_mirrors/mo/MoeList
MoeList 是一款开源的非官方 Android MyAnimeList 客户端,通过 Crowdin 平台实现了 19 种语言的多语言本地化。本文带你快速看懂 MoeList 的本地化架构、Crowdin 翻译工作流,并手把手教你如何贡献新语言翻译。无论你是想切换界面语言的新手,还是想参与开源翻译的爱好者,都能在这里找到答案 ✨
一、MoeList 支持哪些语言?
MoeList 的语言列表由 app/src/main/java/com/axiel7/moelist/ui/base/AppLanguage.kt 中的AppLanguage枚举统一管理,并同步声明在 app/src/main/res/xml/locales_config.xml 中。目前已上线的语言包括:
| 语言 | 代码 | 语言 | 代码 |
|---|---|---|---|
| 英语 | en | 俄语 | ru-RU |
| 简体中文 / 繁体中文 | zh-Hans / zh-Hant | 乌克兰语 | uk-UA |
| 日语 | ja | 土耳其语 | tr |
| 德语 / 法语 / 西班牙语 | de / fr / es | 波兰语 / 斯洛伐克语 | pl-PL / sk |
| 葡萄牙语(巴西/欧洲) | pt-BR / pt-PT | 阿拉伯语 / 保加利亚语 / 捷克语 / 印尼语 / 意大利语 | ar-SA 等 |
💡 语言切换入口在「设置 → 语言」,默认跟随系统(
FOLLOW_SYSTEM)。选择日语时,还会自动把作品标题切换为日显语言,这个细节写在 SettingsViewModel.kt 的setLanguage()里。
二、本地化资源是如何组织的?
Android 应用的多语言本地化遵循"资源目录按语言分文件夹"的经典结构:
- 源语言(英文):
app/src/main/res/values/strings.xml - 各语言译文:
app/src/main/res/values-<语言代码>/strings.xml,例如:- 中文 →
app/src/main/res/values-zh/strings.xml - 日语 →
app/src/main/res/values-ja/strings.xml - 俄语 →
app/src/main/res/values-ru-rRU/strings.xml
- 中文 →
源文件里有一些值得注意的细节:
translatable="false"标记:像app_name(MoeList)、各语言名称(如arabic_native)、数字 1~10 这类条目被标记为不可翻译,避免被 Crowdin 重复翻译 💪- 复数形式
<plurals>:例如num_episodes按"单数/复数"提供%d episode / %d episodes,不同语言的复数规则由翻译者按当地习惯处理 - 占位符:如
Airing in %s(airing_in),翻译时必须保留%s,否则界面会显示异常
上图为 MoeList 追番小组件界面,其文本同样来自本地化字符串资源
三、Crowdin 工作流揭秘:译文如何进入仓库?
MoeList 根目录下的 crowdin.yml 只有两行核心配置,却定义了整个本地化管线:
files: - source: /app/src/main/res/values/strings.xml translation: /app/src/main/res/values-%android_code%/%original_file_name%它的含义是:
- 源文件:以
values/strings.xml为唯一翻译源 %android_code%占位符:Crowdin 会自动把每种语言的代码(如zh、ru-rRU)填入路径,与 Android 资源目录规范天然对齐- 同步机制:开发者在仓库更新英文文案后,Crowdin 自动拉取新条目推给译者;译者完成并提交后,译文再同步回仓库对应目录,随下一次发版触达所有用户
也就是说,翻译者全程不碰代码,只需在 Crowdin 网页上翻译,工作流闭环如下:
英文 strings.xml(仓库)→ Crowdin 同步 → 译者翻译 + 审核 → 同步回
values-<语言>/strings.xml→ 打包发布
README 顶部的 Crowdin 徽章(badges.crowdin.net/moelist/localized.svg)会实时显示各语言的翻译进度,方便大家"认领"缺口语言。
四、新语言翻译贡献指南 🌏
想为 MoeList 添加自己母语?按下面 4 步走:
第 1 步:在 Crowdin 上申请语言前往 MoeList 的 Crowdin 项目页,如果目标语言不在列表中,联系项目维护者添加语言,或申请为该语言的翻译者/审阅者。
第 2 步:开始翻译
- 以英文源文为基准,注意术语统一(如 Airing=连载中、Seasonal Chart=季度榜单)
- 保留所有
%s、%d等占位符 - 专有名词如 "MoeList"、"Discord"、"Doujinshi" 标记了
translatable="false",请勿改动
第 3 步:提交并等待审核Crowdin 支持多人协作与投票机制,你的译案会经过社区审阅后合并。
第 4 步:同步进应用语言上线后,还需在代码中登记两处(可提 PR 完成):
- 在
AppLanguage.kt枚举中新增语言项 - 在
locales_config.xml中声明<locale> - 在
strings.xml中添加对应的*_native语言名条目(标记translatable="false")
这样设置页的语言下拉框(SettingsView.kt 中AppLanguage.entriesLocalized)就会自动展示新语言。
五、小结
| 要点 | 说明 |
|---|---|
| 本地化架构 | Android 标准values-*资源目录 +locales_config.xml声明 |
| 协作平台 | Crowdin,配置见crowdin.yml,译文自动同步仓库 |
| 语言数量 | 19 种语言,含简繁中文 |
| 贡献门槛 | 无需代码基础,网页端即可翻译 |
MoeList 的多语言本地化是"标准 Android 资源规范 + Crowdin 自动化同步"的典型范例。如果你正在使用这款开源安卓应用,不妨把界面切到母语;如果你会翻译,欢迎加入 Crowdin 社区,让 MoeList 出现在更多人的语言里! 🚀
【免费下载链接】MoeListAnother unofficial Android MAL client项目地址: https://gitcode.com/gh_mirrors/mo/MoeList
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考