尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Gopeed 贡献者开发指南:分支工作流、本地调试与 Flutter ARB 国际化实战

Gopeed 贡献者开发指南:分支工作流、本地调试与 Flutter ARB 国际化实战 Gopeed 贡献者开发指南分支工作流、本地调试与 Flutter ARB 国际化实战【免费下载链接】gopeedA fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter.项目地址: https://gitcode.com/GitHub_Trending/go/gopeed本指南基于 Gopeed 仓库的官方日文版贡献指南CONTRIBUTING_ja-JP.md整理扩充面向希望参与 Gopeed 开发的贡献者覆盖从 Fork/PR 分支工作流、Web 端本地调试环境搭建到 Flutter 国际化ARB文件翻译规范、代码格式化与代码生成工具链的完整实战流程。读完本文你将能够独立搭建 Gopeed 的开发调试环境并正确地为项目提交符合规范的多语言文案与代码。分支说明与贡献流程Gopeed 是一个使用 Golang 构建后端、Flutter 构建跨平台 UI 的下载工具项目源码中所有业务代码、协议实现HTTP/BitTorrent/ed2k与前端工程均在 go.mod 所标识的单一仓库中管理。该项目的开发采用单一主分支策略项目仅维护main一个主分支没有长期存在的 develop / release 分支参与开发时需要先Fork本项目在自己的 Fork 仓库中创建功能分支进行开发开发完成后向主项目提交Pull RequestPR由维护者审核后合并到main分支。这种Fork PR的模式保证了主分支始终处于可发布状态所有代码变更都经过 review 与 CI 校验尤其是国际化相关的 CI 检查见下文翻译一节。本地开发Web 端联调环境搭建指南推荐通过Web 端进行日常开发调试即Go 后端服务 Flutter Web 前端的组合具体分为两步1. 启动后端服务在仓库根目录执行go run cmd/api/main.go该命令启动 Gopeed 的本地开发用 API 服务默认监听9999端口。cmd/api/main.go 的源码清晰说明了这一点这是一个仅供本地开发使用源码注释// only for local development的入口它构造了StartConfig并调用 cmd/server.go 中的cmd.Start(cfg)Network: tcp、Address: 127.0.0.1:9999后端监听本机 9999 端口仅允许本地访问Storage: model.StorageBolt使用 Bolt 嵌入式数据库持久化任务与配置WebEnable: true开启 Web 前端资源托管使 Flutter Web 构建产物可以直接由后端服务访问。服务启动成功后会打印项目 banner并输出类似Server start success on http://127.0.0.1:9999的提示见 cmd/server.go 中的Start函数。该入口与正式发布入口如 cmd/gopeed/main.go相互独立正式构建不会携带开发配置。2. 以 debug 模式启动 Flutter 前端后端就绪后进入 Flutter 工程目录以debug模式启动前端cd ui/flutter flutter run -d chrome # 或选择你本机可用的 debug 设备debug 模式支持热重载Hot Reload修改 Dart 代码后可以即时看到效果配合后端的WebEnable配置即可在浏览器中完成全流程的下载任务创建、进度查看等功能的开发调试。Flutter 国际化ARB翻译规范Gopeed 前端支持 20 余种语言国际化文件全部位于ui/flutter/lib/l10n/目录采用 Flutter 官方推荐的ARBApplication Resource Bundle格式以 JSON 组织键值对。目录结构与模板约定文件/配置说明ui/flutter/lib/l10n/app_en.arb源模板template以英文为基准当前包含 600 条文案定义app_locale.arb如 app_zh.arb、app_zh_TW.arb、app_ja.arb等各语言翻译文件须与英文模板保持完全相同的 message key 集合ui/flutter/l10n.yamlFlutter 国际化生成配置指定模板文件、输出类名与目标语言ui/flutter/pubspec.yaml工程配置其中flutter: generate: true开启代码生成从 l10n.yaml 可以看到项目的国际化生成约定arb-dir: lib/l10n template-arb-file: app_en.arb output-localization-file: app_localizations.dart output-class: AppLocalizations nullable-getter: false preferred-supported-locales: - en - zh untranslated-messages-file: build/l10n_untranslated.json即ARB 源文件位于lib/l10n以app_en.arb为模板生成的 Dart 类为AppLocalizations且未翻译的 message 会被记录到build/l10n_untranslated.json供贡献者排查缺口。翻译时的三条硬性规则只翻译 message 的值value例如confirm: Confirm中只需翻译Confirm这个显示文本保留花括号变量名{count}、{name}等占位符是程序运行时传入的参数必须原样保留不得改动或翻译不翻译元数据 key以开头的 key如items及其placeholders描述是供生成器识别参数类型用的元数据不参与翻译。下面通过三个官方示例完整演示 ARB 中变量、复数与选择语法的用法。示例一在文案中插入变量ARB 定义welcomeUser: 你好{name}最终显示当程序传入name 小明时界面显示你好小明。翻译成其他语言时可以调整整句话的语序如日语こんにちは、{name}但必须保留{name}占位符。示例二根据数量显示不同文案plural 复数语法ARB 定义fileCount: {count, plural, 0{没有文件} 1{1 个文件} other{{count} 个文件}}最终显示count 0→ 没有文件count 1→ 1 个文件count 3→ 3 个文件其中0、1、other分别表示数量为 0、数量为 1 和其他数量是 ICU 复数语法中由程序匹配的分支条件不翻译只需翻译每个分支花括号{...}内显示给用户的文字。仓库中真实存在这类用法例如 app_en.arb 中的items: {count} items其配套的items元数据通过placeholders声明了count参数的类型为int。示例三根据变量值显示不同文案select 选择语法ARB 定义taskState: {state, select, running{运行中} paused{已暂停} other{未知状态}}最终显示state running→ 运行中state paused→ 已暂停其他值 → 未知状态running、paused、other是程序传入的分支值不能翻译只翻译它们后面花括号内的显示文字。这一语法特别适合 Gopeed 中任务状态运行中/已暂停/已完成/失败等这类枚举值文案的本地化。提交规范与 CI 校验提交时只提交修改过的 ARB 源文件.arb不要提交生成的app_localizations*.dart文件——这些是由 Flutter 工具链自动生成的产物PR 的CI 会自动校验所有语种检查各语言文件与英文模板的 key 是否一致、生成国际化代码并验证集成结果。因此即使本地未执行生成命令只要 ARB 源文件符合规范CI 也会给出最终校验结论。Flutter 开发规范与代码生成工具链提交前格式化每次提交前必须执行 Dart 官方格式化工具确保代码风格统一dart format ./ui/flutter该命令会递归格式化ui/flutter目录下所有 Dart 源码避免因格式问题在 review 阶段产生无意义 diff。编辑 api/models 时启用 build_runnerGopeed 前端的 API 数据模型位于ui/flutter/lib/api/model/通过json_serializable自动生成序列化代码生成的*.g.dart文件与源文件一一对应如create_task.dart与create_task.g.dart。相关依赖已在 ui/flutter/pubspec.yaml 的dev_dependencies中声明build_runner: ^2.15.1、json_serializable: ^6.14.1。如果需要修改 api/models请开启 build_runner 的监听模式让代码在保存时自动重新生成flutter pub run build_runner watch该命令会持续监听源文件变化并增量重建生成代码。若只想执行一次生成也可改用flutter pub run build_runner build。小结参与 Gopeed 开发的核心流程可以归纳为三条主线代码贡献Fork 仓库 → 基于main分支创建功能分支 → 本地以Go 后端go run cmd/api/main.go端口 9999 Flutter debug 前端进行联调 → 提交前执行dart format ./ui/flutter→ 提交 PR 合并回main国际化贡献以 app_en.arb 为模板修改或新增app_locale.arb严格遵守只翻译 value、保留变量名、不译元数据三条规则善用plural与select语法处理复数与枚举文案仅提交 ARB 源文件交由 CI 校验模型变更修改api/models后运行flutter pub run build_runner watch保持生成代码同步。遵循以上规范即可与项目维护者高效协作让每一次 PR 都能顺利通过 review 与 CI 检查。【免费下载链接】gopeedA fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter.项目地址: https://gitcode.com/GitHub_Trending/go/gopeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表