feat(i18n): 分流规则页静态标签接单源 + 修 mobile 设置行模式 pill 语言
路由页此前静态标签硬编码中文,EN 模式混语。全部接进 strings.json 单源: - 新增 26 个 routing* 产品 getter(6 语):代理模式/内置规则/国内直连/我的规则/ 添加规则/从文本导入/重置默认/最终/直连·走隧道·拒绝/域名后缀/GeoSite 规则集/返回设置… (复用 smartRoute;seg 三项 EN 取短词 Global/Smart/Direct 适配段宽)。 - app_text.dart +26 抽象声明;重生成 6 份 strings_*.dart;alias.json desktop +24 / mobile +19。 - markup 加 data-i18n;JS pill(直连/走隧道/拒绝、FINAL)统一改从生成的 I18N 单源取(_ri), 与静态 pill 同源。JS-owned 的模式说明 rtModeNote 保留 _t 双语(不加 data-i18n)。 - desktop LAN 行(此前未接)补接 rr.lan/rr.lanSub + 新 routingForcedPill。 - 修 mobile 设置行「Routing rules」的模式 pill:缺 data-i18n → EN 显中文,补 setSmartRoute (en=Smart routing,与 desktop 一致)。 验收:l10n 重生成+analyze 0 issue、原型 0 unresolved、生成器零 diff、244 测试全绿、无红线词。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A79VtQA1BwTuQN1ThpvYpo
This commit is contained in:
@@ -633,4 +633,28 @@ abstract class AppText {
|
||||
String get routingRulesSub; // 自定义直连 / 走隧道 / 拒绝
|
||||
String get routingLanDirect; // 局域网 / 私网直连 / LAN & private direct
|
||||
String get routingLanForced; // 强制,不可关 / Always on
|
||||
String get routingForcedPill; // 🔒 强制 / 🔒 Forced
|
||||
String get routingProxyMode; // 代理模式 / Proxy mode
|
||||
String get routingModeGlobal; // 全局代理 / Global
|
||||
String get routingModeSmart; // 智能分流 / Smart
|
||||
String get routingModeDirect; // 全部直连 / Direct
|
||||
String get routingBuiltin; // 内置规则 / Built-in rules
|
||||
String get routingCnDirect; // 国内直连 / China direct
|
||||
String get routingMyRulesOrdered; // 我的规则 · 有序,首命中生效 / My rules · ordered, first match wins
|
||||
String get routingMyRulesFirst; // 我的规则 · 首命中生效 / My rules · first match wins
|
||||
String get routingFinalLong; // 最终(未命中任何规则) / Final (no rule matched)
|
||||
String get routingFinalShort; // 最终(未命中) / Final (no match)
|
||||
String get routingFinalFallback; // FINAL 兜底 / FINAL fallback
|
||||
String get routingTypeDomainSuffix; // 域名后缀 / Domain suffix
|
||||
String get routingTypeDomainSuffixCi; // 域名后缀 · CI 源 / Domain suffix · CI source
|
||||
String get routingTypeDomainSuffixMirror; // 域名后缀 · 镜像 / Domain suffix · Mirror
|
||||
String get routingTypeGeosite; // GeoSite 规则集 / GeoSite rule-set
|
||||
String get routingActDirect; // 直连 / Direct
|
||||
String get routingActProxy; // 走隧道 / Tunnel
|
||||
String get routingActReject; // 拒绝 / Reject
|
||||
String get routingForcedRow; // ⚠ 该域名由系统强制走隧道,此规则不生效 / ⚠ Forced to tunnel by the system; this rule is inactive
|
||||
String get routingAddRule; // 添加规则 / Add rule
|
||||
String get routingImport; // 从文本导入 / Import from text
|
||||
String get routingReset; // 重置默认 / Reset defaults
|
||||
String get routingBack; // 返回设置 / Back to settings
|
||||
}
|
||||
|
||||
@@ -511,6 +511,54 @@ class StringsEn extends AppText {
|
||||
@override
|
||||
String get routingLanForced => 'Always on';
|
||||
@override
|
||||
String get routingForcedPill => '🔒 Forced';
|
||||
@override
|
||||
String get routingProxyMode => 'Proxy mode';
|
||||
@override
|
||||
String get routingModeGlobal => 'Global';
|
||||
@override
|
||||
String get routingModeSmart => 'Smart';
|
||||
@override
|
||||
String get routingModeDirect => 'Direct';
|
||||
@override
|
||||
String get routingBuiltin => 'Built-in rules';
|
||||
@override
|
||||
String get routingCnDirect => 'China direct';
|
||||
@override
|
||||
String get routingMyRulesOrdered => 'My rules · ordered, first match wins';
|
||||
@override
|
||||
String get routingMyRulesFirst => 'My rules · first match wins';
|
||||
@override
|
||||
String get routingFinalLong => 'Final (no rule matched)';
|
||||
@override
|
||||
String get routingFinalShort => 'Final (no match)';
|
||||
@override
|
||||
String get routingFinalFallback => 'FINAL fallback';
|
||||
@override
|
||||
String get routingTypeDomainSuffix => 'Domain suffix';
|
||||
@override
|
||||
String get routingTypeDomainSuffixCi => 'Domain suffix · CI source';
|
||||
@override
|
||||
String get routingTypeDomainSuffixMirror => 'Domain suffix · Mirror';
|
||||
@override
|
||||
String get routingTypeGeosite => 'GeoSite rule-set';
|
||||
@override
|
||||
String get routingActDirect => 'Direct';
|
||||
@override
|
||||
String get routingActProxy => 'Tunnel';
|
||||
@override
|
||||
String get routingActReject => 'Reject';
|
||||
@override
|
||||
String get routingForcedRow => '⚠ Forced to tunnel by the system; this rule is inactive';
|
||||
@override
|
||||
String get routingAddRule => 'Add rule';
|
||||
@override
|
||||
String get routingImport => 'Import from text';
|
||||
@override
|
||||
String get routingReset => 'Reset defaults';
|
||||
@override
|
||||
String get routingBack => 'Back to settings';
|
||||
@override
|
||||
List<String> get days7 => const ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
|
||||
@override
|
||||
List<String> get featsFree => const ['1 basic node only', '10 min per day', 'Watch an ad to start', '7-day free trial on sign-up'];
|
||||
|
||||
@@ -511,6 +511,54 @@ class StringsEs extends AppText {
|
||||
@override
|
||||
String get routingLanForced => 'Siempre activo';
|
||||
@override
|
||||
String get routingForcedPill => '🔒 Forzado';
|
||||
@override
|
||||
String get routingProxyMode => 'Modo de proxy';
|
||||
@override
|
||||
String get routingModeGlobal => 'Global';
|
||||
@override
|
||||
String get routingModeSmart => 'Inteligente';
|
||||
@override
|
||||
String get routingModeDirect => 'Directo';
|
||||
@override
|
||||
String get routingBuiltin => 'Reglas integradas';
|
||||
@override
|
||||
String get routingCnDirect => 'Directo nacional';
|
||||
@override
|
||||
String get routingMyRulesOrdered => 'Mis reglas · en orden, gana la primera coincidencia';
|
||||
@override
|
||||
String get routingMyRulesFirst => 'Mis reglas · gana la primera coincidencia';
|
||||
@override
|
||||
String get routingFinalLong => 'Final (ninguna regla coincide)';
|
||||
@override
|
||||
String get routingFinalShort => 'Final (sin coincidencia)';
|
||||
@override
|
||||
String get routingFinalFallback => 'FINAL — reserva';
|
||||
@override
|
||||
String get routingTypeDomainSuffix => 'Sufijo de dominio';
|
||||
@override
|
||||
String get routingTypeDomainSuffixCi => 'Sufijo de dominio · fuente CI';
|
||||
@override
|
||||
String get routingTypeDomainSuffixMirror => 'Sufijo de dominio · espejo';
|
||||
@override
|
||||
String get routingTypeGeosite => 'Conjunto de reglas GeoSite';
|
||||
@override
|
||||
String get routingActDirect => 'Directo';
|
||||
@override
|
||||
String get routingActProxy => 'Túnel';
|
||||
@override
|
||||
String get routingActReject => 'Rechazar';
|
||||
@override
|
||||
String get routingForcedRow => '⚠ El sistema fuerza el túnel para este dominio; esta regla no se aplica';
|
||||
@override
|
||||
String get routingAddRule => 'Añadir regla';
|
||||
@override
|
||||
String get routingImport => 'Importar desde texto';
|
||||
@override
|
||||
String get routingReset => 'Restablecer';
|
||||
@override
|
||||
String get routingBack => 'Volver a ajustes';
|
||||
@override
|
||||
List<String> get days7 => const ['L', 'M', 'X', 'J', 'V', 'S', 'D'];
|
||||
@override
|
||||
List<String> get featsFree => const ['Solo 1 nodo básico', '10 min al día', 'Mira un anuncio para empezar', 'Prueba gratis de 7 días al registrarte'];
|
||||
|
||||
@@ -511,6 +511,54 @@ class StringsJa extends AppText {
|
||||
@override
|
||||
String get routingLanForced => '常時オン';
|
||||
@override
|
||||
String get routingForcedPill => '🔒 強制';
|
||||
@override
|
||||
String get routingProxyMode => 'プロキシモード';
|
||||
@override
|
||||
String get routingModeGlobal => 'グローバル';
|
||||
@override
|
||||
String get routingModeSmart => 'スマート';
|
||||
@override
|
||||
String get routingModeDirect => '直接';
|
||||
@override
|
||||
String get routingBuiltin => '組み込みルール';
|
||||
@override
|
||||
String get routingCnDirect => '国内は直接接続';
|
||||
@override
|
||||
String get routingMyRulesOrdered => 'マイルール · 順序あり、最初の一致が有効';
|
||||
@override
|
||||
String get routingMyRulesFirst => 'マイルール · 最初の一致が有効';
|
||||
@override
|
||||
String get routingFinalLong => '最終(どのルールにも一致しない)';
|
||||
@override
|
||||
String get routingFinalShort => '最終(一致なし)';
|
||||
@override
|
||||
String get routingFinalFallback => 'FINAL フォールバック';
|
||||
@override
|
||||
String get routingTypeDomainSuffix => 'ドメインサフィックス';
|
||||
@override
|
||||
String get routingTypeDomainSuffixCi => 'ドメインサフィックス · CI ソース';
|
||||
@override
|
||||
String get routingTypeDomainSuffixMirror => 'ドメインサフィックス · ミラー';
|
||||
@override
|
||||
String get routingTypeGeosite => 'GeoSite ルールセット';
|
||||
@override
|
||||
String get routingActDirect => '直接接続';
|
||||
@override
|
||||
String get routingActProxy => 'トンネル';
|
||||
@override
|
||||
String get routingActReject => '拒否';
|
||||
@override
|
||||
String get routingForcedRow => '⚠ このドメインはシステムにより強制的にトンネル経由となり、このルールは無効です';
|
||||
@override
|
||||
String get routingAddRule => 'ルールを追加';
|
||||
@override
|
||||
String get routingImport => 'テキストから読み込み';
|
||||
@override
|
||||
String get routingReset => 'デフォルトに戻す';
|
||||
@override
|
||||
String get routingBack => '設定に戻る';
|
||||
@override
|
||||
List<String> get days7 => const ['月', '火', '水', '木', '金', '土', '日'];
|
||||
@override
|
||||
List<String> get featsFree => const ['基本ノード1つのみ', '1日10分', '広告を見て開始', '登録で7日間無料トライアル'];
|
||||
|
||||
@@ -511,6 +511,54 @@ class StringsKo extends AppText {
|
||||
@override
|
||||
String get routingLanForced => '항상 켜짐';
|
||||
@override
|
||||
String get routingForcedPill => '🔒 강제';
|
||||
@override
|
||||
String get routingProxyMode => '프록시 모드';
|
||||
@override
|
||||
String get routingModeGlobal => '전체';
|
||||
@override
|
||||
String get routingModeSmart => '스마트';
|
||||
@override
|
||||
String get routingModeDirect => '직접';
|
||||
@override
|
||||
String get routingBuiltin => '기본 규칙';
|
||||
@override
|
||||
String get routingCnDirect => '국내 직접 연결';
|
||||
@override
|
||||
String get routingMyRulesOrdered => '내 규칙 · 순서대로, 첫 일치 적용';
|
||||
@override
|
||||
String get routingMyRulesFirst => '내 규칙 · 첫 일치 적용';
|
||||
@override
|
||||
String get routingFinalLong => '최종(일치하는 규칙 없음)';
|
||||
@override
|
||||
String get routingFinalShort => '최종(일치 없음)';
|
||||
@override
|
||||
String get routingFinalFallback => 'FINAL 폴백';
|
||||
@override
|
||||
String get routingTypeDomainSuffix => '도메인 접미사';
|
||||
@override
|
||||
String get routingTypeDomainSuffixCi => '도메인 접미사 · CI 소스';
|
||||
@override
|
||||
String get routingTypeDomainSuffixMirror => '도메인 접미사 · 미러';
|
||||
@override
|
||||
String get routingTypeGeosite => 'GeoSite 규칙 세트';
|
||||
@override
|
||||
String get routingActDirect => '직접 연결';
|
||||
@override
|
||||
String get routingActProxy => '터널';
|
||||
@override
|
||||
String get routingActReject => '거부';
|
||||
@override
|
||||
String get routingForcedRow => '⚠ 이 도메인은 시스템에 의해 강제로 터널을 사용하며, 이 규칙은 적용되지 않습니다';
|
||||
@override
|
||||
String get routingAddRule => '규칙 추가';
|
||||
@override
|
||||
String get routingImport => '텍스트에서 가져오기';
|
||||
@override
|
||||
String get routingReset => '기본값 재설정';
|
||||
@override
|
||||
String get routingBack => '설정으로 돌아가기';
|
||||
@override
|
||||
List<String> get days7 => const ['월', '화', '수', '목', '금', '토', '일'];
|
||||
@override
|
||||
List<String> get featsFree => const ['기본 노드 1개', '하루 10분', '광고 시청 후 시작', '가입 시 7일 무료 체험'];
|
||||
|
||||
@@ -511,6 +511,54 @@ class StringsRu extends AppText {
|
||||
@override
|
||||
String get routingLanForced => 'Всегда включено';
|
||||
@override
|
||||
String get routingForcedPill => '🔒 Принудительно';
|
||||
@override
|
||||
String get routingProxyMode => 'Режим прокси';
|
||||
@override
|
||||
String get routingModeGlobal => 'Глобально';
|
||||
@override
|
||||
String get routingModeSmart => 'Умный';
|
||||
@override
|
||||
String get routingModeDirect => 'Напрямую';
|
||||
@override
|
||||
String get routingBuiltin => 'Встроенные правила';
|
||||
@override
|
||||
String get routingCnDirect => 'Прямой доступ внутри страны';
|
||||
@override
|
||||
String get routingMyRulesOrdered => 'Мои правила · по порядку, срабатывает первое совпадение';
|
||||
@override
|
||||
String get routingMyRulesFirst => 'Мои правила · срабатывает первое совпадение';
|
||||
@override
|
||||
String get routingFinalLong => 'Итог (ни одно правило не совпало)';
|
||||
@override
|
||||
String get routingFinalShort => 'Итог (нет совпадений)';
|
||||
@override
|
||||
String get routingFinalFallback => 'FINAL — резерв';
|
||||
@override
|
||||
String get routingTypeDomainSuffix => 'Суффикс домена';
|
||||
@override
|
||||
String get routingTypeDomainSuffixCi => 'Суффикс домена · CI-источник';
|
||||
@override
|
||||
String get routingTypeDomainSuffixMirror => 'Суффикс домена · зеркало';
|
||||
@override
|
||||
String get routingTypeGeosite => 'Набор правил GeoSite';
|
||||
@override
|
||||
String get routingActDirect => 'Напрямую';
|
||||
@override
|
||||
String get routingActProxy => 'Туннель';
|
||||
@override
|
||||
String get routingActReject => 'Отклонить';
|
||||
@override
|
||||
String get routingForcedRow => '⚠ Домен принудительно направлен через туннель системой; правило неактивно';
|
||||
@override
|
||||
String get routingAddRule => 'Добавить правило';
|
||||
@override
|
||||
String get routingImport => 'Импорт из текста';
|
||||
@override
|
||||
String get routingReset => 'Сбросить настройки';
|
||||
@override
|
||||
String get routingBack => 'Назад к настройкам';
|
||||
@override
|
||||
List<String> get days7 => const ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
|
||||
@override
|
||||
List<String> get featsFree => const ['Только 1 базовый узел', '10 минут в день', 'Смотрите рекламу, чтобы начать', '7 дней бесплатно при регистрации'];
|
||||
|
||||
@@ -511,6 +511,54 @@ class StringsZh extends AppText {
|
||||
@override
|
||||
String get routingLanForced => '强制,不可关';
|
||||
@override
|
||||
String get routingForcedPill => '🔒 强制';
|
||||
@override
|
||||
String get routingProxyMode => '代理模式';
|
||||
@override
|
||||
String get routingModeGlobal => '全局代理';
|
||||
@override
|
||||
String get routingModeSmart => '智能分流';
|
||||
@override
|
||||
String get routingModeDirect => '全部直连';
|
||||
@override
|
||||
String get routingBuiltin => '内置规则';
|
||||
@override
|
||||
String get routingCnDirect => '国内直连';
|
||||
@override
|
||||
String get routingMyRulesOrdered => '我的规则 · 有序,首命中生效';
|
||||
@override
|
||||
String get routingMyRulesFirst => '我的规则 · 首命中生效';
|
||||
@override
|
||||
String get routingFinalLong => '最终(未命中任何规则)';
|
||||
@override
|
||||
String get routingFinalShort => '最终(未命中)';
|
||||
@override
|
||||
String get routingFinalFallback => 'FINAL 兜底';
|
||||
@override
|
||||
String get routingTypeDomainSuffix => '域名后缀';
|
||||
@override
|
||||
String get routingTypeDomainSuffixCi => '域名后缀 · CI 源';
|
||||
@override
|
||||
String get routingTypeDomainSuffixMirror => '域名后缀 · 镜像';
|
||||
@override
|
||||
String get routingTypeGeosite => 'GeoSite 规则集';
|
||||
@override
|
||||
String get routingActDirect => '直连';
|
||||
@override
|
||||
String get routingActProxy => '走隧道';
|
||||
@override
|
||||
String get routingActReject => '拒绝';
|
||||
@override
|
||||
String get routingForcedRow => '⚠ 该域名由系统强制走隧道,此规则不生效';
|
||||
@override
|
||||
String get routingAddRule => '添加规则';
|
||||
@override
|
||||
String get routingImport => '从文本导入';
|
||||
@override
|
||||
String get routingReset => '重置默认';
|
||||
@override
|
||||
String get routingBack => '返回设置';
|
||||
@override
|
||||
List<String> get days7 => const ['一', '二', '三', '四', '五', '六', '日'];
|
||||
@override
|
||||
List<String> get featsFree => const ['仅 1 个基础节点', '每日 10 分钟时长', '使用前观看广告', '注册享 7 天免费试用'];
|
||||
|
||||
Reference in New Issue
Block a user