Skip to content

[i18n] 迁移 slang 前的国际化缺陷清单(含英文界面回退中文复现) #173

Description

@clever-max

背景

flutter_i18n 配置了 fallbackFile: "zh_CN"lib/controller/theme_controller.dart),
en_US 缺失的键会静默回退中文;三语全缺的键直接显示原始键名

考虑到项目计划迁移到 slang 重构国际化,本 issue 不以 PR 形式提交(避免与迁移冲突、增加工作量),
仅整理缺陷清单,可作为 slang 迁移的验收清单

  • 「迁移时必须修正的既有错误」→ 迁移时直接抄正确键名,勿搬运 bug
  • 「建议迁移时纳入的新键」→ 现有 flutter_i18n 体系下不补键,迁移时一并建立
  • 「与框架无关的硬编码中文」→ 任何 i18n 体系都需修复,可独立处理

已复现(用户可见)

  1. 英文界面课表卡片显示「假期中」:代码引用 homepage.class_table_card.on_holiday
    lib/page/homepage/info_widget/classtable_card.dart:223),zh_CN/zh_TW 键名为 on_holiday
    assets/flutter_i18n/en_US.yaml:540 错写为 holiday → 英文界面回退中文。
  2. 图书馆高级搜索选项全中文(英文界面可见,fallback 与 UI label 硬编码):
    • lib/page/library/search_fields.dart:359-408:8 个下拉 label
      (资料类型/资源类型/校区/馆藏地/国别/语种/出版起始年/出版结束年)
    • 同文件 :293/298/303(精确/模糊/前方)、:424-456(仅看在架/清除/收起搜索选项/更多搜索选项)
    • lib/model/xidian_ids/library.dart:50-85 fallback 选项 23 条(任意词/题名/责任者/索书号/图书/馆藏资源/电子资源/雁塔校区/长安校区/中国/美国/汉语/英语/全部 等)、:314/321/328(未提供)

一、迁移时必须修正的既有错误(P0)

  • en_US.yaml:540holidayon_holiday(迁移时勿原样搬运)
  • en_US.yaml:1375easter_egg_others 键被上一行歌词合并成 For youeaster_egg_others(彩蛋歌词英文回退中文)
  • class_attendance_detail.dart:113:键名拼错 class_attndance.no_attendance_record(缺 e),三语全缺→显示键名
  • empty_classtable_page.dart:80,124content_classtable_page.dart:635:裸键 load_error,应为 homepage.load_errorclasstable.error_dialog_title

二、建议迁移时纳入的新键(P1,现有体系下不补)

  • ruisi.home.search(home_page.dart:51)、ruisi.forum_list.empty(forum_list_page.dart:79)
  • electricity.cache_hint_account_missing / cache_hint_account_parse_failed /
    cache_hint_captcha_failed / cache_hint_password_wrong(energy_session.dart:111-130,session 层动态键)

三、与框架无关的硬编码中文(P2,约 100 处,可独立小 PR)

  • lib/page/library/:search_book_window.dart:155(没有更多数据了)
  • lib/page/sport/punch_record_window.dart:7 处(目前没有记录/查看所有记录/失败/信息 等)
  • lib/page/experiment/experiment_info_card.dart:识别结果对话框 4 处
  • lib/page/score/score_state.dart:269-271:均分拼接(含中文标点)
  • lib/repository/ids_session/:异常消息 8 处(ids_auth_protocol.dart、ids_reauth_client.dart、exam_session.dart)——repository 层建议走 NonUII18n 等价物
  • lib/repository/system_calendar_sync_service.dart:5 处(课程名称/考试信息/待定/未知,用户日历可见)
  • lib/page/setting/notification_page/:调试页约 25 处
  • lib/external/ruisi_flutter/:11 处(加载失败/上传限制/签到完成 等)
  • class_attendance_detail.dart:106,122:硬编码英文 "More to come" / "That's all folks!"

四、原生组件硬编码中文(P3)

  • Android widget(Kotlin):ClassTableModels.kt:72-80 类型徽标(考/实/课/试/验/程)、
    ClassTableWidgetDataProvider.kt(未知教师/未安排教室/未知)、ClassTableWidget.kt 日期格式
  • iOS widget(Swift):ClasstableWidget.swift:32-35 徽标(课程/自定义/考试/实验)、
    :202-263(未知老师/未安排教室)、ExamModule.swift:49-52(期末考试/期中考试/结课考试/入学考试)

五、机制建议(P3)

  • missingTranslationHandler 仅 log.info(theme_controller.dart:38),建议提升至 warning,
    便于开发期/CI 发现缺失键(slang 迁移后该机制不适用,但迁移前有助于排雷)

环境

  • Flutter 3.44.0 stable / Dart 3.12
  • flutter_i18n 0.37.1(缺键行为:当前语言 → fallbackFile zh_CN → 返回键名字符串)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions