feat(i18n): l10n codegen — strings.json 单源生成 6 份 strings_*.dart
② 单源 codegen 落地:
- strings.json 补全 lists 段(days7/featsFree/featsPro/featsTeam),
之前 extraction 漏了 4 个 List<String> getter;现 246 getter+4 list+5 method×6 语。
- design/codegen/gen_l10n_dart.mjs:strings.json → strings_{zh,en,ja,ko,ru,es}.dart,
getter 转义 \$、method 保留 $var 插值,dart format 定型(保证漂移闸零 diff)。
- app_text.dart 保持手写(enum/abstract 声明/AppLangMisc 逻辑),编译器强制 concrete⊆abstract 兜底。
- 往返无损:生成的 Dart 重新抽取 == strings.json 逐字节一致;flutter analyze 0 issue、flutter test 244 全绿。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
// strings_zh.dart — 中文文案资源(单显)
|
||||
// strings_zh.dart — 中文文案(自动生成 · 勿手改)
|
||||
//
|
||||
// 红线词禁用:审查规避/敏感定位词,清单见 design/CLAUDE.md §1 铁律 13。
|
||||
// 脱敏口径:网络加速 / 体验优化 + 隐私保护。套餐数字以 design/CLAUDE.md §7 为准。
|
||||
// GENERATED by design/codegen/gen_l10n_dart.mjs from design/i18n/strings.json.
|
||||
// 改文案:改 strings.json 后重跑 codegen;新增 key 需同步 app_text.dart 抽象声明。
|
||||
import 'app_text.dart';
|
||||
|
||||
class StringsZh extends AppText {
|
||||
@@ -26,7 +26,6 @@ class StringsZh extends AppText {
|
||||
String get connectNow => '点击连接';
|
||||
@override
|
||||
String get secure => '已加密';
|
||||
|
||||
@override
|
||||
String get tabConnect => '连接';
|
||||
@override
|
||||
@@ -35,7 +34,6 @@ class StringsZh extends AppText {
|
||||
String get tabStats => '统计';
|
||||
@override
|
||||
String get tabMe => '我的';
|
||||
|
||||
@override
|
||||
String get currentNode => '当前节点';
|
||||
@override
|
||||
@@ -44,7 +42,6 @@ class StringsZh extends AppText {
|
||||
String get upload => '上传';
|
||||
@override
|
||||
String get latency => '延迟';
|
||||
|
||||
@override
|
||||
String get quotaToday => '今日剩余';
|
||||
@override
|
||||
@@ -68,8 +65,6 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get adPlaying => '广告播放中…';
|
||||
@override
|
||||
String adRewarded(int minutes) => '已加 $minutes 分钟';
|
||||
@override
|
||||
String get adFailed => '加时失败,请重试';
|
||||
@override
|
||||
String get quotaDesktopTitle => '今日免费时长已用完';
|
||||
@@ -77,7 +72,6 @@ class StringsZh extends AppText {
|
||||
String get quotaDesktopBody => '前往移动端 App 看广告加时,或升级会员畅享无限时长。';
|
||||
@override
|
||||
String get gotIt => '知道了';
|
||||
|
||||
@override
|
||||
String get chooseNode => '选择节点';
|
||||
@override
|
||||
@@ -85,8 +79,6 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get smartSelect => '智能选择';
|
||||
@override
|
||||
String nodeSwitchTitle(String name) => '切换到「$name」?';
|
||||
@override
|
||||
String get nodeSwitchBody => '当前连接将断开并重连到该节点。';
|
||||
@override
|
||||
String get nodeSwitchConfirm => '切换';
|
||||
@@ -100,7 +92,6 @@ class StringsZh extends AppText {
|
||||
String get smartSub => '根据当前网络环境,自动选择最优节点';
|
||||
@override
|
||||
String get recommended => '推荐';
|
||||
|
||||
@override
|
||||
String get statsTitle => '使用统计';
|
||||
@override
|
||||
@@ -112,8 +103,6 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get weekTraffic => '本周流量 (GB)';
|
||||
@override
|
||||
List<String> get days7 => const ['一', '二', '三', '四', '五', '六', '日'];
|
||||
@override
|
||||
String get byDevice => '设备明细';
|
||||
@override
|
||||
String get noDeviceUsage => '暂无设备用量';
|
||||
@@ -133,7 +122,6 @@ class StringsZh extends AppText {
|
||||
String get chartTwoWeeks => '最近两周流量';
|
||||
@override
|
||||
String get allDevices => '全部设备';
|
||||
|
||||
@override
|
||||
String get meTitle => '我的';
|
||||
@override
|
||||
@@ -187,7 +175,8 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get devForceLogoutConfirm => '将吊销该设备的登录会话,它会被踢下线、需重新登录。设备仍保留在列表中。';
|
||||
@override
|
||||
String get devClearLoginConfirm => '将从设备列表彻底移除此设备,并吊销其登录会话与数据面凭证。该设备需重新登录才能再次使用。';
|
||||
String get devClearLoginConfirm =>
|
||||
'将从设备列表彻底移除此设备,并吊销其登录会话与数据面凭证。该设备需重新登录才能再次使用。';
|
||||
@override
|
||||
String get devCancel => '取消';
|
||||
@override
|
||||
@@ -223,8 +212,6 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get autoConnectSub => '启动时自动连接节点';
|
||||
@override
|
||||
String autoConnectingTo(String name) => '正在自动连接到 $name…';
|
||||
@override
|
||||
String get smartRoute => '智能分流';
|
||||
@override
|
||||
String get smartRouteSub => '海外应用走加速,国内直连';
|
||||
@@ -237,8 +224,6 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get webUserCenter => '用户中心(网页)';
|
||||
@override
|
||||
String updateAvailableTitle(String version) => '发现新版本 v$version';
|
||||
@override
|
||||
String get updateNotesFallback => '本次更新修复了一些问题并提升了稳定性,建议尽快更新。';
|
||||
@override
|
||||
String get updateLater => '稍后';
|
||||
@@ -248,7 +233,6 @@ class StringsZh extends AppText {
|
||||
String get updateUpToDate => '已是最新版本';
|
||||
@override
|
||||
String get updateCheckFailed => '检查更新失败,请稍后重试';
|
||||
|
||||
@override
|
||||
String get freePlan => '免费版';
|
||||
@override
|
||||
@@ -265,16 +249,6 @@ class StringsZh extends AppText {
|
||||
String get choose => '选择';
|
||||
@override
|
||||
String get mostPopular => '最受欢迎';
|
||||
@override
|
||||
List<String> get featsFree =>
|
||||
const ['仅 1 个基础节点', '每日 10 分钟时长', '使用前观看广告', '注册享 7 天免费试用'];
|
||||
@override
|
||||
List<String> get featsPro =>
|
||||
const ['80+ 全球节点', '无限流量 · 极速', '5 台设备同时在线', '流媒体优化'];
|
||||
@override
|
||||
List<String> get featsTeam =>
|
||||
const ['专业版全部功能', '10 个成员席位', '集中计费与管理', '优先客服'];
|
||||
|
||||
@override
|
||||
String get redeemTitle => '兑换 & 购买';
|
||||
@override
|
||||
@@ -293,7 +267,6 @@ class StringsZh extends AppText {
|
||||
String get chStore => '自助发卡商店';
|
||||
@override
|
||||
String get chEmail => '邮箱客服';
|
||||
|
||||
@override
|
||||
String get contactTitle => '联系我们';
|
||||
@override
|
||||
@@ -308,7 +281,6 @@ class StringsZh extends AppText {
|
||||
String get contactHoursTitle => '服务时间';
|
||||
@override
|
||||
String get contactHours => '每日 9:00 – 24:00 (GMT+8)';
|
||||
|
||||
@override
|
||||
String get authTagline => '极速 · 稳定 · 省心';
|
||||
@override
|
||||
@@ -328,8 +300,6 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get codeLabel => '邮箱验证码';
|
||||
@override
|
||||
String codeSentTo(String email) => '验证码已发送至 $email';
|
||||
@override
|
||||
String get sendCode => '发送验证码';
|
||||
@override
|
||||
String get resend => '重新发送';
|
||||
@@ -343,7 +313,6 @@ class StringsZh extends AppText {
|
||||
String get forgotPw => '忘记密码?';
|
||||
@override
|
||||
String get tos => '继续即代表同意《服务条款》与《隐私政策》';
|
||||
|
||||
@override
|
||||
String get obSkip => '跳过';
|
||||
@override
|
||||
@@ -364,7 +333,6 @@ class StringsZh extends AppText {
|
||||
String get ob3Title => '安全 · 无日志';
|
||||
@override
|
||||
String get ob3Sub => '端到端加密,我们不记录你的任何浏览数据。';
|
||||
|
||||
@override
|
||||
String get purchaseTitle => '购买套餐';
|
||||
@override
|
||||
@@ -427,8 +395,6 @@ class StringsZh extends AppText {
|
||||
String get payUnsupportedRenderType => '暂不支持,请换支付方式';
|
||||
@override
|
||||
String get payNoActiveOrder => '暂无进行中的订单';
|
||||
|
||||
// ── 支付渠道 switch + 订单 ──
|
||||
@override
|
||||
String get payChannel => '支付渠道';
|
||||
@override
|
||||
@@ -467,8 +433,6 @@ class StringsZh extends AppText {
|
||||
String get orderRebuy => '重新购买';
|
||||
@override
|
||||
String get payMethodNezha => '哪吒支付';
|
||||
|
||||
// ── 邀请 / 通知 / 设置分组 / 订单过期(Spec ②③占位) ──
|
||||
@override
|
||||
String get inviteEntry => '邀请好友得会员';
|
||||
@override
|
||||
@@ -539,4 +503,37 @@ class StringsZh extends AppText {
|
||||
String get promoBadge => '限时优惠';
|
||||
@override
|
||||
String get promoOriginalPrice => '原价';
|
||||
@override
|
||||
List<String> get days7 => const ['一', '二', '三', '四', '五', '六', '日'];
|
||||
@override
|
||||
List<String> get featsFree => const [
|
||||
'仅 1 个基础节点',
|
||||
'每日 10 分钟时长',
|
||||
'使用前观看广告',
|
||||
'注册享 7 天免费试用',
|
||||
];
|
||||
@override
|
||||
List<String> get featsPro => const [
|
||||
'80+ 全球节点',
|
||||
'无限流量 · 极速',
|
||||
'5 台设备同时在线',
|
||||
'流媒体优化',
|
||||
];
|
||||
@override
|
||||
List<String> get featsTeam => const [
|
||||
'专业版全部功能',
|
||||
'10 个成员席位',
|
||||
'集中计费与管理',
|
||||
'优先客服',
|
||||
];
|
||||
@override
|
||||
String adRewarded(int minutes) => '已加 $minutes 分钟';
|
||||
@override
|
||||
String nodeSwitchTitle(String name) => '切换到「$name」?';
|
||||
@override
|
||||
String autoConnectingTo(String name) => '正在自动连接到 $name…';
|
||||
@override
|
||||
String updateAvailableTitle(String version) => '发现新版本 v$version';
|
||||
@override
|
||||
String codeSentTo(String email) => '验证码已发送至 $email';
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user