3aeb2a8680
- AppLang enum 扩为 zh/en/ja/ko/ru/es;新增 strings_{ja,ko,ru,es}.dart
(各 161 条,照 strings_en.dart 结构逐条翻译,无红线词,scan-redline 过)
- app_providers: localeProvider 默认 AppLang.en(国际化默认);appTextProvider
三元改 switch 全覆盖 6 语
- AppLang.nativeLabel 扩展(各语言本地名);settings/account 两处 _LangSwitch
段控改下拉(6 语横排会挤)
- flutter analyze lib 仅剩 2 个既有 withOpacity deprecation info
注:节点/套餐名、错误消息等 ~11 处数据驱动的 zh/en 三元暂回退 en(非崩溃,
后续可扩多语字段)。localeProvider 暂无持久化(沿用原设计,后续可加)。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
374 lines
12 KiB
Dart
374 lines
12 KiB
Dart
// strings_ko.dart — 한국어 문구 리소스 (단일 언어 표시)
|
||
//
|
||
// 금지어: VPN / 翻墙 / 科学上网 / 突破封锁 / 自由穿越 / Go anywhere.
|
||
// 포지셔닝: 네트워크 가속 / 경험 최적화 + 프라이버시.
|
||
// 요금제 번호는 design/CLAUDE.md §7 을 따름.
|
||
import 'app_text.dart';
|
||
|
||
class StringsKo extends AppText {
|
||
const StringsKo();
|
||
|
||
@override
|
||
AppLang get lang => AppLang.ko;
|
||
|
||
@override
|
||
String get brand => 'Pangolin';
|
||
@override
|
||
String get online => '● 온라인';
|
||
@override
|
||
String get offline => '○ 오프라인';
|
||
@override
|
||
String get capOff => '탭하여 연결';
|
||
@override
|
||
String get capConnecting => '연결 중…';
|
||
@override
|
||
String get capOn => '연결됨 · 암호화';
|
||
@override
|
||
String get connectNow => '연결';
|
||
@override
|
||
String get secure => '보안';
|
||
|
||
@override
|
||
String get tabConnect => '연결';
|
||
@override
|
||
String get tabServers => '서버';
|
||
@override
|
||
String get tabStats => '통계';
|
||
@override
|
||
String get tabMe => '계정';
|
||
|
||
@override
|
||
String get currentNode => '현재 노드';
|
||
@override
|
||
String get download => '다운';
|
||
@override
|
||
String get upload => '업';
|
||
@override
|
||
String get latency => '지연';
|
||
|
||
@override
|
||
String get quotaToday => '오늘 남은 시간';
|
||
@override
|
||
String get minutes => '분';
|
||
@override
|
||
String get quotaFree => '무료 · 하루 10분';
|
||
@override
|
||
String get planFreeTag => '무료';
|
||
@override
|
||
String get watchAd => '광고 시청 후 시작';
|
||
@override
|
||
String get adUnlocked => '오늘 사용 가능';
|
||
@override
|
||
String get quotaLeftLabel => '남음';
|
||
@override
|
||
String get quotaUsedUp => '오늘 무료 시간을 모두 사용함';
|
||
@override
|
||
String get watchAdMore => '광고 시청으로 시간 추가';
|
||
@override
|
||
String get quotaExhaustedNotice => '오늘 무료 시간을 모두 사용했습니다. 광고를 시청해 시간을 추가하거나 업그레이드하세요.';
|
||
@override
|
||
String get adPlaying => '광고 재생 중…';
|
||
@override
|
||
String adRewarded(int minutes) => '+$minutes분 추가됨';
|
||
@override
|
||
String get adFailed => '시간 추가에 실패했습니다. 다시 시도하세요';
|
||
@override
|
||
String get quotaDesktopTitle => '오늘 무료 시간을 모두 사용함';
|
||
@override
|
||
String get quotaDesktopBody => '모바일 앱에서 광고를 시청해 시간을 추가하거나, 업그레이드하여 무제한으로 이용하세요.';
|
||
@override
|
||
String get gotIt => '확인';
|
||
|
||
@override
|
||
String get chooseNode => '서버 선택';
|
||
@override
|
||
String get searchPh => '국가 / 도시 검색';
|
||
@override
|
||
String get smartSelect => '스마트 선택';
|
||
@override
|
||
String nodeSwitchTitle(String name) => '$name(으)로 전환할까요?';
|
||
@override
|
||
String get nodeSwitchBody => '현재 연결을 끊고 이 노드로 다시 연결합니다.';
|
||
@override
|
||
String get nodeSwitchConfirm => '전환';
|
||
@override
|
||
String get nodeUnhealthySwitched => '현재 노드에 연결할 수 없어 자동으로 전환했습니다';
|
||
@override
|
||
String get nodeUnhealthyError => '현재 노드에 연결할 수 없습니다 — 재연결하거나 노드를 전환하세요';
|
||
@override
|
||
String get nodeReconnecting => '네트워크가 불안정하여 다시 연결 중…';
|
||
@override
|
||
String get smartSub => '네트워크에 가장 적합한 노드를 선택합니다';
|
||
@override
|
||
String get recommended => '추천';
|
||
|
||
@override
|
||
String get statsTitle => '통계';
|
||
@override
|
||
String get trafficMonth => '트래픽';
|
||
@override
|
||
String get avgPing => '평균 지연';
|
||
@override
|
||
String get durMonth => '시간';
|
||
@override
|
||
String get weekTraffic => '이번 주 (GB)';
|
||
@override
|
||
List<String> get days7 => const ['월', '화', '수', '목', '금', '토', '일'];
|
||
@override
|
||
String get byDevice => '기기별';
|
||
@override
|
||
String get noDeviceUsage => '아직 기기 사용 기록이 없습니다';
|
||
@override
|
||
String get periodMonth => '이번 달';
|
||
@override
|
||
String get periodWeek => '이번 주';
|
||
@override
|
||
String get periodToday => '오늘';
|
||
@override
|
||
String get statDown => '다운로드';
|
||
@override
|
||
String get statUp => '업로드';
|
||
@override
|
||
String get statDuration => '사용 시간';
|
||
@override
|
||
String get chartTwoWeeks => '최근 2주';
|
||
@override
|
||
String get allDevices => '모든 기기';
|
||
|
||
@override
|
||
String get meTitle => '계정';
|
||
@override
|
||
String get proMember => 'PRO 회원';
|
||
@override
|
||
String get freePlanName => '무료';
|
||
@override
|
||
String get expires => '만료일';
|
||
@override
|
||
String get upgradeBtn => '갱신 / 업그레이드';
|
||
@override
|
||
String get accInfoTitle => '계정 정보';
|
||
@override
|
||
String get accEmail => '이메일';
|
||
@override
|
||
String get accPassword => '비밀번호';
|
||
@override
|
||
String get accChange => '변경';
|
||
@override
|
||
String get deviceLimitTitle => '기기 한도에 도달함';
|
||
@override
|
||
String get deviceLimitDesc => '현재 요금제는 최대 %s대의 기기를 허용합니다. 계속하려면 한 대를 삭제하세요.';
|
||
@override
|
||
String get deviceLimitRemoveOldest => '가장 오래 사용하지 않은 기기 삭제';
|
||
@override
|
||
String get myDevices => '내 기기';
|
||
@override
|
||
String get devicesSub => 'PRO는 최대 3대';
|
||
@override
|
||
String get thisDevice => '이 기기';
|
||
@override
|
||
String get remove => '삭제';
|
||
@override
|
||
String get devOnline => '온라인';
|
||
@override
|
||
String get devOffline => '오프라인';
|
||
@override
|
||
String get devLastOnline => '마지막 접속';
|
||
@override
|
||
String get devNeverLogin => '로그인한 적 없음';
|
||
@override
|
||
String get devForceLogout => '강제 로그아웃';
|
||
@override
|
||
String get devClearLogin => '로그인 정보 삭제';
|
||
@override
|
||
String get devRename => '이름 변경';
|
||
@override
|
||
String get devRenameHint => '기기 이름';
|
||
@override
|
||
String get devSave => '저장';
|
||
@override
|
||
String get devForceLogoutConfirm => '이 기기의 로그인 세션을 무효화합니다 — 오프라인으로 강제 종료되며 다시 로그인해야 합니다. 기기는 목록에 남아 있습니다.';
|
||
@override
|
||
String get devClearLoginConfirm => '이 기기를 목록에서 완전히 삭제하고 로그인 세션과 데이터 전송 자격 증명을 무효화합니다. 다시 사용하려면 재로그인해야 합니다.';
|
||
@override
|
||
String get devCancel => '취소';
|
||
@override
|
||
String get sessionRevokedTitle => '이 기기에서 로그아웃되었습니다';
|
||
@override
|
||
String get sessionRevokedBody => '다른 기기에서 이 기기를 로그아웃했습니다. 다시 로그인하세요.';
|
||
@override
|
||
String get sessionRevokedOk => '다시 로그인';
|
||
@override
|
||
String get redeemEntry => '코드 등록 및 구매';
|
||
@override
|
||
String get contactEntry => '문의하기';
|
||
@override
|
||
String get signOut => '로그아웃';
|
||
@override
|
||
String get language => '언어';
|
||
@override
|
||
String get darkAppearance => '다크 모드';
|
||
@override
|
||
String get stateOn => '켜짐';
|
||
@override
|
||
String get followLight => '꺼짐';
|
||
@override
|
||
String get protocol => '프로토콜';
|
||
@override
|
||
String get settingsTitle => '설정';
|
||
@override
|
||
String get autostart => '시작 시 실행';
|
||
@override
|
||
String get autostartSub => '시스템 시작 시 자동으로 실행';
|
||
@override
|
||
String get autoConnect => '자동 연결';
|
||
@override
|
||
String get autoConnectSub => '실행 시 자동으로 연결';
|
||
@override
|
||
String autoConnectingTo(String name) => '$name(으)로 자동 연결 중…';
|
||
@override
|
||
String get smartRoute => '스마트 라우팅';
|
||
@override
|
||
String get smartRouteSub => '해외는 가속, 국내는 직접 연결';
|
||
@override
|
||
String get killSwitch => 'Kill Switch';
|
||
@override
|
||
String get killSwitchSub => '연결이 끊기면 트래픽 차단';
|
||
@override
|
||
String get checkUpdate => '업데이트 확인';
|
||
@override
|
||
String get webUserCenter => '사용자 센터 (웹)';
|
||
@override
|
||
String updateAvailableTitle(String version) => '새 버전 v$version 사용 가능';
|
||
@override
|
||
String get updateNotesFallback => '이번 업데이트에는 버그 수정과 안정성 개선이 포함되어 있습니다.';
|
||
@override
|
||
String get updateLater => '나중에';
|
||
@override
|
||
String get updateDownload => '업데이트 다운로드';
|
||
@override
|
||
String get updateUpToDate => '최신 버전입니다';
|
||
@override
|
||
String get updateCheckFailed => '업데이트 확인에 실패했습니다. 잠시 후 다시 시도하세요';
|
||
|
||
@override
|
||
String get choosePlan => '요금제 선택';
|
||
@override
|
||
String get freePlan => '무료';
|
||
@override
|
||
String get proPlan => 'Pro';
|
||
@override
|
||
String get teamPlan => 'Team';
|
||
@override
|
||
String get perMonth => '/월';
|
||
@override
|
||
String get current => '현재';
|
||
@override
|
||
String get upgrade => '업그레이드';
|
||
@override
|
||
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 ['Pro의 모든 기능', '10인 좌석', '통합 결제', '우선 지원'];
|
||
|
||
@override
|
||
String get redeemTitle => '코드 등록 및 구매';
|
||
@override
|
||
String get redeemCodeTitle => '코드 등록';
|
||
@override
|
||
String get redeemPh => '활성화 코드 입력';
|
||
@override
|
||
String get redeemBtn => '등록';
|
||
@override
|
||
String get redeemOk => '활성화됨 · PRO 잠금 해제';
|
||
@override
|
||
String get buyTitle => '구매처';
|
||
@override
|
||
String get buySub => '앱 내 결제는 지원되지 않습니다. 다음 경로로 코드를 받으세요:';
|
||
@override
|
||
String get chStore => '셀프 스토어';
|
||
@override
|
||
String get chEmail => '이메일 지원';
|
||
|
||
@override
|
||
String get contactTitle => '문의하기';
|
||
@override
|
||
String get contactIntro =>
|
||
'도움이 필요하신가요? 아래 채널로 문의하세요 — 보통 몇 분 안에 답변드립니다.';
|
||
@override
|
||
String get contactEmail => '이메일 지원';
|
||
@override
|
||
String get contactStore => '셀프 스토어';
|
||
@override
|
||
String get contactHoursTitle => '지원 시간';
|
||
@override
|
||
String get contactHours => '매일 9:00 – 24:00 (GMT+8)';
|
||
|
||
@override
|
||
String get authTagline => '빠르게 · 안정적으로 · 손쉽게';
|
||
@override
|
||
String get tabLogin => '로그인';
|
||
@override
|
||
String get tabRegister => '회원가입';
|
||
@override
|
||
String get emailLabel => '이메일';
|
||
@override
|
||
String get emailPh => 'your@email.com';
|
||
@override
|
||
String get pwLabel => '비밀번호';
|
||
@override
|
||
String get pwPh => '비밀번호 입력';
|
||
@override
|
||
String get setPwPh => '비밀번호 설정 (다중 기기 로그인용)';
|
||
@override
|
||
String get codeLabel => '인증 코드';
|
||
@override
|
||
String codeSentTo(String email) => '$email(으)로 코드를 보냈습니다';
|
||
@override
|
||
String get sendCode => '코드 전송';
|
||
@override
|
||
String get resend => '재전송';
|
||
@override
|
||
String get doLogin => '로그인';
|
||
@override
|
||
String get doNext => '다음';
|
||
@override
|
||
String get doCreate => '계정 만들기';
|
||
@override
|
||
String get forgotPw => '비밀번호를 잊으셨나요?';
|
||
@override
|
||
String get tos => '계속하면 이용약관 및 개인정보 처리방침에 동의하는 것입니다';
|
||
|
||
@override
|
||
String get obSkip => '건너뛰기';
|
||
@override
|
||
String get obNext => '다음';
|
||
@override
|
||
String get obAllow => '허용하고 계속';
|
||
@override
|
||
String get obStart => '시작하기';
|
||
@override
|
||
String get ob1Title => '전 세계로 연결';
|
||
@override
|
||
String get ob1Sub => '80개 이상의 지역, 자동 최적 경로, 안정적인 연결.';
|
||
@override
|
||
String get ob2Title => '네트워크 설정 허용';
|
||
@override
|
||
String get ob2Sub => '암호화된 터널을 구성하기 위해 시스템이 네트워크 프로필 추가를 요청합니다.';
|
||
@override
|
||
String get ob3Title => '설계부터 프라이버시';
|
||
@override
|
||
String get ob3Sub => '종단 간 암호화. 브라우징 기록을 전혀 저장하지 않습니다.';
|
||
}
|