Files
pangolin/client/lib/l10n/strings_ko.dart
T
wangjia 3aeb2a8680 feat(client/i18n): 新增 日/韩/俄/西 4 语,默认语种改英文
- 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
2026-07-07 13:20:16 +08:00

374 lines
12 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_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 => '종단 간 암호화. 브라우징 기록을 전혀 저장하지 않습니다.';
}