Files
pangolin/client/lib/l10n/strings_ja.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
13 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_ja.dart — 日本語の文言リソース(単一言語表示)
//
// 禁止ワード: VPN / 翻墙 / 科学上网 / 突破封锁 / 自由穿越 / Go anywhere。
// ポジショニング: ネットワーク高速化 / 体験最適化 + プライバシー。
// プラン番号は design/CLAUDE.md §7 に準拠。
import 'app_text.dart';
class StringsJa extends AppText {
const StringsJa();
@override
AppLang get lang => AppLang.ja;
@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 => 'Ping';
@override
String get quotaToday => '本日の残り';
@override
String get minutes => '';
@override
String get quotaFree => '無料 · 1日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 => '平均Ping';
@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 台まで利用できます。続けるには1台を削除してください。';
@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 => 'キルスイッチ';
@override
String get killSwitchSub => '接続が切れたら通信を遮断';
@override
String get checkUpdate => 'アップデートを確認';
@override
String get webUserCenter => 'ユーザーセンター (Web)';
@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つのみ',
'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 => 'エンドツーエンドで暗号化。閲覧ログは一切保持しません。';
}