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
13 KiB
Dart
374 lines
13 KiB
Dart
// 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 => 'エンドツーエンドで暗号化。閲覧ログは一切保持しません。';
|
||
}
|