Files
pangolin/client/lib/l10n/strings_en.dart
T
wangjia 4886416e8b feat(client): settings 完整版(开关组) + 联系/设置整页 golden
- settings_page 补全对照 dapp.jsx DSettings: 功能开关组(开机自启/智能分流/
  Kill Switch, 本地演示态) + 配置组补检查更新行; 改 ConsumerStatefulWidget 持开关态
- l10n 新增 autostart/smartRoute/killSwitch(+Sub) + checkUpdate(中英)
- desktop 整页 golden 补 联系页 + 设置页(凑齐可截 5 页: 节点/统计/账户/联系/设置)

测试: flutter test 81 通过(+2 golden), analyze 0 error

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-16 12:22:28 +08:00

264 lines
7.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// strings_en.dart — English copy resources (single-language display)
//
// Red-line words forbidden: VPN / 翻墙 / 科学上网 / 突破封锁 / 自由穿越 / Go anywhere.
// Positioning: network acceleration / experience optimization + privacy.
// Plan numbers follow design/CLAUDE.md §7.
import 'app_text.dart';
class StringsEn extends AppText {
const StringsEn();
@override
AppLang get lang => AppLang.en;
@override
String get brand => 'Pangolin';
@override
String get online => '● Online';
@override
String get offline => '○ Offline';
@override
String get capOff => 'Tap to connect';
@override
String get capConnecting => 'Connecting…';
@override
String get capOn => 'Connected · Encrypted';
@override
String get connectNow => 'CONNECT';
@override
String get secure => 'SECURE';
@override
String get tabConnect => 'Connect';
@override
String get tabServers => 'Servers';
@override
String get tabStats => 'Stats';
@override
String get tabMe => 'Account';
@override
String get currentNode => 'Current node';
@override
String get download => 'Down';
@override
String get upload => 'Up';
@override
String get latency => 'Ping';
@override
String get quotaToday => 'Left today';
@override
String get minutes => 'min';
@override
String get quotaFree => 'Free · 10 min/day';
@override
String get watchAd => 'Watch ad to start';
@override
String get adUnlocked => 'Unlocked for today';
@override
String get chooseNode => 'Choose server';
@override
String get searchPh => 'Search country / city';
@override
String get smartSelect => 'Smart select';
@override
String get smartSub => 'Picks the best node for your network';
@override
String get recommended => 'Recommended';
@override
String get statsTitle => 'Statistics';
@override
String get trafficMonth => 'Traffic';
@override
String get avgPing => 'Avg ping';
@override
String get durMonth => 'Time';
@override
String get weekTraffic => 'This week (GB)';
@override
List<String> get days7 => const ['M', 'T', 'W', 'T', 'F', 'S', 'S'];
@override
String get meTitle => 'Account';
@override
String get proMember => 'PRO member';
@override
String get freePlanName => 'Free';
@override
String get expires => 'Expires';
@override
String get upgradeBtn => 'Renew / Upgrade';
@override
String get accInfoTitle => 'Account info';
@override
String get accEmail => 'Email';
@override
String get accPassword => 'Password';
@override
String get accChange => 'Change';
@override
String get myDevices => 'My devices';
@override
String get devicesSub => 'Up to 5 devices on PRO';
@override
String get thisDevice => 'This device';
@override
String get remove => 'Remove';
@override
String get redeemEntry => 'Redeem & buy';
@override
String get contactEntry => 'Contact us';
@override
String get signOut => 'Sign out';
@override
String get language => 'Language';
@override
String get darkAppearance => 'Dark appearance';
@override
String get stateOn => 'On';
@override
String get followLight => 'Off';
@override
String get protocol => 'Protocol';
@override
String get settingsTitle => 'Settings';
@override
String get autostart => 'Launch at startup';
@override
String get autostartSub => 'Run automatically on system start';
@override
String get smartRoute => 'Smart routing';
@override
String get smartRouteSub => 'Accelerate abroad, direct at home';
@override
String get killSwitch => 'Kill Switch';
@override
String get killSwitchSub => 'Block traffic if the link drops';
@override
String get checkUpdate => 'Check for updates';
@override
String get choosePlan => 'Choose plan';
@override
String get freePlan => 'Free';
@override
String get proPlan => 'Pro';
@override
String get teamPlan => 'Team';
@override
String get perMonth => '/mo';
@override
String get current => 'Current';
@override
String get upgrade => 'Upgrade';
@override
String get choose => 'Choose';
@override
String get mostPopular => 'Popular';
@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',
];
@override
List<String> get featsPro =>
const ['80+ locations', 'Unlimited · fast', '5 devices', 'Streaming optimized'];
@override
List<String> get featsTeam =>
const ['Everything in Pro', '10 seats', 'Central billing', 'Priority support'];
@override
String get redeemTitle => 'Redeem & buy';
@override
String get redeemCodeTitle => 'Redeem a code';
@override
String get redeemPh => 'Enter activation code';
@override
String get redeemBtn => 'Redeem';
@override
String get redeemOk => 'Activated · PRO unlocked';
@override
String get buyTitle => 'Where to buy';
@override
String get buySub => 'In-app payment is unavailable. Get a code via:';
@override
String get chStore => 'Self-serve store';
@override
String get chEmail => 'Email support';
@override
String get contactTitle => 'Contact us';
@override
String get contactIntro =>
'Need help? Reach us via any channel below — usually replies in minutes.';
@override
String get contactEmail => 'Email support';
@override
String get contactStore => 'Self-serve store';
@override
String get contactHoursTitle => 'Support hours';
@override
String get contactHours => 'Daily 9:00 24:00 (GMT+8)';
@override
String get authTagline => 'Fast · Stable · Effortless';
@override
String get tabLogin => 'Log in';
@override
String get tabRegister => 'Sign up';
@override
String get emailLabel => 'Email';
@override
String get emailPh => 'your@email.com';
@override
String get pwLabel => 'Password';
@override
String get pwPh => 'Enter password';
@override
String get setPwPh => 'Set a password (for multi-device login)';
@override
String get codeLabel => 'Verification code';
@override
String codeSentTo(String email) => 'Code sent to $email';
@override
String get sendCode => 'Send code';
@override
String get resend => 'Resend';
@override
String get doLogin => 'Log in';
@override
String get doNext => 'Next';
@override
String get doCreate => 'Create account';
@override
String get forgotPw => 'Forgot password?';
@override
String get tos => 'By continuing you agree to our Terms & Privacy Policy';
@override
String get obSkip => 'Skip';
@override
String get obNext => 'Next';
@override
String get obAllow => 'Allow & continue';
@override
String get obStart => 'Get started';
@override
String get ob1Title => 'Connect worldwide';
@override
String get ob1Sub => '80+ locations, auto-fastest routing, rock-solid.';
@override
String get ob2Title => 'Allow network setup';
@override
String get ob2Sub => 'The system will ask to add a network profile to build the encrypted tunnel.';
@override
String get ob3Title => 'Private by design';
@override
String get ob3Sub => 'End-to-end encrypted. We keep zero browsing logs.';
}