news 2026/8/27 16:59:04

MoeList多语言本地化揭秘:开源安卓应用Crowdin工作流与新语言翻译贡献指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MoeList多语言本地化揭秘:开源安卓应用Crowdin工作流与新语言翻译贡献指南

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

源文件里有一些值得注意的细节:

  1. translatable="false"标记:像app_name(MoeList)、各语言名称(如arabic_native)、数字 1~10 这类条目被标记为不可翻译,避免被 Crowdin 重复翻译 💪
  2. 复数形式<plurals>:例如num_episodes按"单数/复数"提供%d episode / %d episodes,不同语言的复数规则由翻译者按当地习惯处理
  3. 占位符:如Airing in %sairing_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%

它的含义是:

  1. 源文件:以values/strings.xml为唯一翻译源
  2. %android_code%占位符:Crowdin 会自动把每种语言的代码(如zhru-rRU)填入路径,与 Android 资源目录规范天然对齐
  3. 同步机制:开发者在仓库更新英文文案后,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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 16:57:32

python的图论工业场景模拟第二篇:车间设备通信网络清洗与邻接表构建,任务读取含脏数据的设备通信CSV,清洗自环与重复边,生成邻接表,图建模说明,无向无权图,节点=设备ID,边=物理通信链路。

车间设备通信网络清洗与邻接表构建&#xff1a;用图论给工厂网络“拍个X光”“某汽车零部件厂的网络管理员拿到一份从交换机 SNMP 日志导出的设备通信 CSV&#xff0c;里面有 200 台设备、近千条连接记录。他本想用这个做网络优化&#xff0c;结果发现数据里混着设备自己连自己…

作者头像 李华
网站建设 2026/8/27 16:54:52

windows常用命令

Windows 中的 MD5/SHA256 校验和certUtil -hashfile C:\file.img MD5 certUtil -hashfile C:\file.img SHA256使用powershell查看大文本get-content .\dmsql_GRP1_RT3_20251028_110407.log | out-gridviewEXCEL 隔行读取数值&#xff0c;选取要粘贴的范围后&#xff0c;用Ctrl…

作者头像 李华
网站建设 2026/8/27 16:50:38

Kafka 可视化管理平台完全实操:Kafka Console UI 从启动到多集群运维

Kafka 可视化管理平台完全实操&#xff1a;Kafka Console UI 从启动到多集群运维 【免费下载链接】kafka-console-ui 一款快捷易用的轻量级kafka可视化管理平台 项目地址: https://gitcode.com/gh_mirrors/ka/kafka-console-ui 如果你每天都在和命令行打交道——查分区、…

作者头像 李华