f0d574bc44
- strings.ts: [zh,en] 二元组 → Record<Lang,string> 六语对象(157 条,ja/ko/ru/es 据英文翻译,无红线词,scan-redline 过);createT 回退英文;PRICES 补 4 语(复用 USD 价) - 路由:默认英文移到 /(原 zh);中文挪 /zh/;新增 /ja//ko//ru//es/;删冗余 /en/ - Site.astro:html lang / canonical / hreflang(6+x-default)/ og:locale 全部改 为按语言查表(HTML_LANG/OG_LOCALE/langPath) - Header.jsx:langseg 2 项 → 原生 select 6 语下拉(横排会挤);+ .langsel 样式 - astro build 通过,6 页生成;/ 英文、/zh/ 中文、/ja/ 日语标题均已本地化 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013nMthbVEmQquxBRKb9Fj8u
232 lines
43 KiB
TypeScript
232 lines
43 KiB
TypeScript
// strings.ts — 官网 i18n 字典(中 / EN / 日 / 韩 / 俄 / 西 六语)
|
||
// 文案逐字沿用 design/ui_kits/website/site.js 的 I18N(已脱敏,符合 design/CLAUDE.md 铁律 13)。
|
||
// zh/en 原样保留;ja/ko/ru/es 依据 English 自然本地化(营销官网口吻,非机翻)。
|
||
// 与原型不同的是:这里是「构建期」按路由整页单显,不在运行时 JS 切换文本。
|
||
|
||
export type Lang = 'zh' | 'en' | 'ja' | 'ko' | 'ru' | 'es';
|
||
|
||
// 每条 = { zh, en, ja, ko, ru, es }
|
||
export const STRINGS: Record<string, Record<Lang, string>> = {
|
||
'ann.txt': { zh: '新用户注册即享 7 天免费试用', en: 'New users get a 7-day free trial', ja: '新規登録で7日間の無料トライアル', ko: '신규 가입 시 7일 무료 체험', ru: 'Новым пользователям — 7 дней бесплатно', es: 'Los nuevos usuarios reciben 7 días de prueba gratis' },
|
||
'ann.cta': { zh: '立即注册 →', en: 'Sign up →', ja: '今すぐ登録 →', ko: '지금 가입 →', ru: 'Зарегистрироваться →', es: 'Registrarse →' },
|
||
|
||
'su.ph': { zh: '输入邮箱,免费注册', en: 'Enter email to sign up free', ja: 'メールアドレスで無料登録', ko: '이메일로 무료 가입', ru: 'Введите e-mail для бесплатной регистрации', es: 'Introduce tu correo para registrarte gratis' },
|
||
'su.btn': { zh: '免费注册', en: 'Sign up free', ja: '無料で登録', ko: '무료 가입', ru: 'Зарегистрироваться бесплатно', es: 'Registrarse gratis' },
|
||
'su.ok': { zh: '验证码已发送!下载 App 并用同一邮箱继续完成注册。', en: 'Code sent! Download the app and continue with the same email.', ja: '認証コードを送信しました!アプリをダウンロードし、同じメールアドレスで登録を続けてください。', ko: '인증 코드를 보냈습니다! 앱을 내려받아 같은 이메일로 가입을 이어가세요.', ru: 'Код отправлен! Скачайте приложение и продолжите с той же почтой.', es: '¡Código enviado! Descarga la app y continúa con el mismo correo.' },
|
||
'su.hint': { zh: '免费注册 · 无需付款 · 7 天免费试用', en: 'Free to join · no payment · 7-day free trial', ja: '登録無料 · 支払い不要 · 7日間無料トライアル', ko: '가입 무료 · 결제 불필요 · 7일 무료 체험', ru: 'Регистрация бесплатна · без оплаты · 7 дней бесплатно', es: 'Registro gratis · sin pago · 7 días de prueba' },
|
||
'su.dl': { zh: '或直接下载 App', en: 'or just download the app', ja: 'アプリを直接ダウンロード', ko: '또는 앱 바로 내려받기', ru: 'или просто скачайте приложение', es: 'o simplemente descarga la app' },
|
||
|
||
'why.eyebrow': { zh: '免费注册', en: 'Sign up', ja: '無料登録', ko: '가입하기', ru: 'Регистрация', es: 'Registrarse' },
|
||
'why.h': { zh: '注册一次,处处可用', en: 'One account, everywhere', ja: '一つのアカウントで、どこでも', ko: '하나의 계정으로 어디서나', ru: 'Один аккаунт — везде', es: 'Una cuenta, en todas partes' },
|
||
'why.sub': { zh: '一个邮箱就能开始。注册免费,不需要任何付款信息。', en: 'All you need is an email. Free to join — no payment details, ever.', ja: '必要なのはメールアドレスだけ。登録は無料、支払い情報は一切不要です。', ko: '필요한 건 이메일 하나뿐. 가입은 무료이며 결제 정보도 필요 없습니다.', ru: 'Нужна лишь почта. Регистрация бесплатна — платёжные данные не требуются.', es: 'Solo necesitas un correo. Registro gratis, sin datos de pago nunca.' },
|
||
'why.1t': { zh: '7 天免费试用', en: '7-day free trial', ja: '7日間無料トライアル', ko: '7일 무료 체험', ru: '7 дней бесплатно', es: '7 días de prueba gratis' },
|
||
'why.1d': { zh: '新用户注册即享 7 天免费使用,无需任何付款信息。', en: 'New accounts get 7 days of free, unrestricted use — no payment details.', ja: '新規アカウントは7日間、制限なしで無料利用。支払い情報は不要です。', ko: '신규 계정은 7일간 제한 없이 무료로 이용, 결제 정보도 필요 없습니다.', ru: 'Новые аккаунты — 7 дней свободного использования без ограничений и без платёжных данных.', es: 'Las cuentas nuevas disfrutan 7 días de uso libre y sin límites, sin datos de pago.' },
|
||
'why.2t': { zh: '多端同步', en: 'Multi-device sync', ja: 'マルチデバイス同期', ko: '여러 기기 동기화', ru: 'Синхронизация устройств', es: 'Sincronización multidispositivo' },
|
||
'why.2d': { zh: '手机、平板、电脑共用一个账户,套餐与设置随身走。', en: 'Phone, tablet and desktop share one account — your plan follows you.', ja: 'スマホ・タブレット・PCで一つのアカウントを共有。プランも設定も一緒に持ち運べます。', ko: '휴대폰, 태블릿, PC가 하나의 계정을 공유해 요금제와 설정이 따라다닙니다.', ru: 'Телефон, планшет и компьютер — один аккаунт, а тариф всегда с вами.', es: 'Teléfono, tableta y ordenador comparten una cuenta; tu plan te acompaña.' },
|
||
'why.3t': { zh: '无需付款信息', en: 'No payment details', ja: '支払い情報は不要', ko: '결제 정보 불필요', ru: 'Без платёжных данных', es: 'Sin datos de pago' },
|
||
'why.3d': { zh: '注册只要邮箱。想升级时,再通过外部渠道兑换激活码。', en: 'Just an email to join. Upgrade later with an activation code.', ja: '登録はメールだけ。アップグレードは後からアクティベーションコードで。', ko: '가입은 이메일만. 업그레이드는 나중에 활성화 코드로.', ru: 'Для входа нужна только почта. Обновиться можно позже кодом активации.', es: 'Solo un correo para unirte. Mejora luego con un código de activación.' },
|
||
'why.s1': { zh: '填写邮箱', en: 'Enter email', ja: 'メールを入力', ko: '이메일 입력', ru: 'Введите почту', es: 'Introduce el correo' },
|
||
'why.s2': { zh: '输入验证码', en: 'Verify code', ja: '認証コードを入力', ko: '인증 코드 입력', ru: 'Введите код', es: 'Verifica el código' },
|
||
'why.s3': { zh: '开始畅连', en: 'Start connecting', ja: '接続を開始', ko: '연결 시작', ru: 'Начните подключение', es: 'Empieza a conectar' },
|
||
'why.cta': { zh: '立即免费注册', en: 'Sign up free', ja: '今すぐ無料登録', ko: '지금 무료 가입', ru: 'Зарегистрироваться бесплатно', es: 'Registrarse gratis' },
|
||
|
||
'cta.btn2': { zh: '免费注册', en: 'Sign up free', ja: '無料で登録', ko: '무료 가입', ru: 'Зарегистрироваться бесплатно', es: 'Registrarse gratis' },
|
||
|
||
'nav.product': { zh: '产品', en: 'Product', ja: '製品', ko: '제품', ru: 'Продукт', es: 'Producto' },
|
||
'nav.pricing': { zh: '定价', en: 'Pricing', ja: '料金', ko: '요금제', ru: 'Цены', es: 'Precios' },
|
||
'nav.download': { zh: '下载', en: 'Download', ja: 'ダウンロード', ko: '다운로드', ru: 'Скачать', es: 'Descargar' },
|
||
'nav.docs': { zh: '文档', en: 'Docs', ja: 'ドキュメント', ko: '문서', ru: 'Документация', es: 'Documentación' },
|
||
'nav.blog': { zh: 'Blog', en: 'Blog', ja: 'ブログ', ko: '블로그', ru: 'Блог', es: 'Blog' },
|
||
'nav.login': { zh: '登录', en: 'Log in', ja: 'ログイン', ko: '로그인', ru: 'Войти', es: 'Iniciar sesión' },
|
||
'nav.get': { zh: '立即下载', en: 'Get the app', ja: 'アプリを入手', ko: '앱 받기', ru: 'Получить приложение', es: 'Obtener la app' },
|
||
|
||
'hero.eyebrow': { zh: '极速 · 稳定 · 省心', en: 'Fast · Stable · Effortless', ja: '高速 · 安定 · 快適', ko: '빠름 · 안정 · 간편', ru: 'Быстро · Стабильно · Без забот', es: 'Rápido · Estable · Sin complicaciones' },
|
||
'hero.h1': { zh: '极速畅连,\n网络如丝顺滑', en: 'Faster, smoother,\neverywhere', ja: 'もっと速く、もっと滑らかに、\nどこでも', ko: '더 빠르고 더 매끄럽게,\n어디서나', ru: 'Быстрее, плавнее,\nвезде', es: 'Más rápido, más fluido,\nen todas partes' },
|
||
'hero.lede': { zh: '轻盈、亲和、即开即用的跨平台网络加速应用。一键连接,智能选线,稳定不掉线。', en: 'A lightweight, friendly cross-platform network accelerator. One tap, smart routing, rock-solid.', ja: '軽快で使いやすい、クロスプラットフォームのネットワークアクセラレーター。ワンタップ接続、スマートルーティング、安定した通信。', ko: '가볍고 친근한 크로스플랫폼 네트워크 가속 앱. 원 탭 연결, 스마트 라우팅, 흔들림 없는 안정성.', ru: 'Лёгкий и удобный кроссплатформенный ускоритель сети. Одно касание, умная маршрутизация, надёжное соединение.', es: 'Un acelerador de red multiplataforma, ligero y fácil de usar. Un toque, enrutamiento inteligente, total estabilidad.' },
|
||
'hero.cta1': { zh: '免费下载', en: 'Download free', ja: '無料ダウンロード', ko: '무료 다운로드', ru: 'Скачать бесплатно', es: 'Descargar gratis' },
|
||
'hero.cta2': { zh: '查看定价', en: 'See pricing', ja: '料金を見る', ko: '요금 보기', ru: 'Посмотреть цены', es: 'Ver precios' },
|
||
'hero.t1': { zh: '全球加速线路', en: 'Global routes', ja: 'グローバル回線', ko: '글로벌 라우트', ru: 'Глобальные маршруты', es: 'Rutas globales' },
|
||
'hero.t2': { zh: '严格无日志', en: 'Strict no-logs', ja: '厳格なノーログ', ko: '엄격한 노로그', ru: 'Строго без логов', es: 'Sin registros, estricto' },
|
||
'hero.t3': { zh: '端到端加密', en: 'End-to-end encrypted', ja: 'エンドツーエンド暗号化', ko: '엔드투엔드 암호화', ru: 'Сквозное шифрование', es: 'Cifrado de extremo a extremo' },
|
||
'orb.cap': { zh: '已连接', en: 'CONNECTED', ja: '接続済み', ko: '연결됨', ru: 'ПОДКЛЮЧЕНО', es: 'CONECTADO' },
|
||
'orb.down': { zh: '下载', en: 'Down', ja: '下り', ko: '다운', ru: 'Приём', es: 'Bajada' },
|
||
'orb.up': { zh: '上传', en: 'Up', ja: '上り', ko: '업', ru: 'Отдача', es: 'Subida' },
|
||
'orb.node': { zh: '香港 · 流媒体', en: 'Hong Kong', ja: '香港', ko: '홍콩', ru: 'Гонконг', es: 'Hong Kong' },
|
||
'orb.nodesub': { zh: '延迟 18ms · 已连接', en: '18ms · Connected', ja: '18ms · 接続済み', ko: '18ms · 연결됨', ru: '18 мс · Подключено', es: '18 ms · Conectado' },
|
||
|
||
'strip.txt': { zh: '已支持', en: 'Available on', ja: '対応プラットフォーム', ko: '지원 플랫폼', ru: 'Доступно на', es: 'Disponible en' },
|
||
|
||
'feat.eyebrow': { zh: '产品', en: 'Product', ja: '製品', ko: '제품', ru: 'Продукт', es: 'Producto' },
|
||
'feat.h': { zh: '为日常而生的连接体验', en: 'Built for everyday connection', ja: '毎日の接続のために', ko: '일상을 위한 연결 경험', ru: 'Создан для повседневных подключений', es: 'Diseñado para la conexión de cada día' },
|
||
'feat.sub': { zh: '没有复杂配置,没有技术门槛。打开就用,把稳定与隐私留给我们。', en: 'No complex setup, no jargon. Just open and go — we handle speed and privacy.', ja: '複雑な設定も専門用語も不要。開いて使うだけ。速度とプライバシーはお任せください。', ko: '복잡한 설정도, 어려운 용어도 없습니다. 열면 바로 사용, 속도와 개인정보는 저희가 책임집니다.', ru: 'Никаких сложных настроек и жаргона. Просто откройте и пользуйтесь — скорость и приватность на нас.', es: 'Sin configuraciones complejas ni tecnicismos. Ábrelo y listo: la velocidad y la privacidad corren por nuestra cuenta.' },
|
||
'feat.1t': { zh: '一键连接', en: 'One-tap connect', ja: 'ワンタップ接続', ko: '원 탭 연결', ru: 'Подключение одним касанием', es: 'Conexión con un toque' },
|
||
'feat.1d': { zh: '一颗按钮,智能挑选最快线路。无需手动配置,也能秒连。', en: 'One button picks the fastest route. No manual setup, instant connect.', ja: 'ボタン一つで最速回線を自動選択。手動設定なしで瞬時に接続。', ko: '버튼 하나로 가장 빠른 라우트를 자동 선택. 수동 설정 없이 바로 연결.', ru: 'Одна кнопка выбирает самый быстрый маршрут. Без ручных настроек — мгновенное подключение.', es: 'Un botón elige la ruta más rápida. Sin ajustes manuales, conexión instantánea.' },
|
||
'feat.2t': { zh: '智能分流', en: 'Smart routing', ja: 'スマートルーティング', ko: '스마트 라우팅', ru: 'Умная маршрутизация', es: 'Enrutamiento inteligente' },
|
||
'feat.2d': { zh: '按规则智能分流,该加速的加速,本地服务直连,互不打扰。', en: 'Smart rule-based routing — accelerate what needs it, keep local traffic direct.', ja: 'ルールベースのスマートルーティングで、必要な通信は高速化、ローカル通信は直結。', ko: '규칙 기반 스마트 라우팅으로 필요한 트래픽은 가속하고 로컬 트래픽은 직접 연결.', ru: 'Умная маршрутизация по правилам: ускоряем нужное, локальный трафик идёт напрямую.', es: 'Enrutamiento inteligente por reglas: acelera lo que lo necesita y deja el tráfico local directo.' },
|
||
'feat.3t': { zh: '全球加速线路', en: 'Global routes', ja: 'グローバル回線', ko: '글로벌 라우트', ru: 'Глобальные маршруты', es: 'Rutas globales' },
|
||
'feat.3d': { zh: '覆盖多地优质线路,视频与游戏优化随心选。', en: 'Premium routes across regions, tuned for video & gaming.', ja: '各地の高品質回線を網羅、動画・ゲーム向けに最適化。', ko: '여러 지역의 프리미엄 라우트, 영상과 게임에 맞춰 최적화.', ru: 'Премиум-маршруты по регионам, настроенные для видео и игр.', es: 'Rutas premium en varias regiones, optimizadas para vídeo y juegos.' },
|
||
'feat.4t': { zh: '严格无日志', en: 'Strict no-logs', ja: '厳格なノーログ', ko: '엄격한 노로그', ru: 'Строго без логов', es: 'Sin registros, estricto' },
|
||
'feat.4d': { zh: '我们不记录你的浏览数据。隐私是底线,不是卖点。', en: 'We never log your browsing. Privacy is the baseline, not a feature.', ja: '閲覧データは一切記録しません。プライバシーは売り文句ではなく、当然の前提です。', ko: '고객의 브라우징 데이터를 절대 기록하지 않습니다. 개인정보 보호는 기본이지 특별 기능이 아닙니다.', ru: 'Мы не ведём журнал вашего трафика. Приватность — это база, а не опция.', es: 'Nunca registramos tu navegación. La privacidad es la base, no un extra.' },
|
||
'feat.5t': { zh: 'Kill Switch', en: 'Kill Switch', ja: 'キルスイッチ', ko: '킬 스위치', ru: 'Kill Switch', es: 'Kill Switch' },
|
||
'feat.5d': { zh: '一旦连接中断,立即阻断网络,杜绝真实 IP 泄露。', en: 'If the tunnel drops, traffic is blocked instantly — no IP leaks.', ja: '接続が切れた瞬間に通信を遮断し、実IPの漏洩を防ぎます。', ko: '터널이 끊기면 즉시 트래픽을 차단해 실제 IP 노출을 막습니다.', ru: 'Если соединение обрывается, трафик мгновенно блокируется — без утечек IP.', es: 'Si la conexión se cae, el tráfico se bloquea al instante: sin filtraciones de IP.' },
|
||
'feat.6t': { zh: '多端同步', en: 'Multi-device', ja: 'マルチデバイス', ko: '멀티 디바이스', ru: 'Много устройств', es: 'Multidispositivo' },
|
||
'feat.6d': { zh: '一个账户,手机、平板、电脑同时在线,最多 5 台设备。', en: 'One account across phone, tablet and desktop — up to 5 devices.', ja: '一つのアカウントでスマホ・タブレット・PCを同時に、最大5台まで。', ko: '하나의 계정으로 휴대폰, 태블릿, PC를 동시에, 최대 5대까지.', ru: 'Один аккаунт на телефоне, планшете и компьютере — до 5 устройств.', es: 'Una cuenta en teléfono, tableta y ordenador: hasta 5 dispositivos.' },
|
||
|
||
'price.eyebrow': { zh: '定价', en: 'Pricing', ja: '料金', ko: '요금제', ru: 'Цены', es: 'Precios' },
|
||
'price.h': { zh: '简单透明的价格', en: 'Simple, honest pricing', ja: 'シンプルで正直な料金', ko: '단순하고 정직한 가격', ru: 'Простые и честные цены', es: 'Precios simples y honestos' },
|
||
'price.sub': { zh: '随时升级或取消。所有套餐均含核心加密与无日志承诺。', en: 'Upgrade or cancel anytime. Every plan includes core encryption and our no-logs promise.', ja: 'いつでもアップグレード・解約可能。すべてのプランにコア暗号化とノーログの約束が含まれます。', ko: '언제든 업그레이드하거나 해지하세요. 모든 요금제에 핵심 암호화와 노로그 약속이 포함됩니다.', ru: 'Меняйте тариф или отменяйте в любой момент. В каждый план входит базовое шифрование и обещание не вести логи.', es: 'Mejora o cancela cuando quieras. Cada plan incluye cifrado esencial y nuestra promesa sin registros.' },
|
||
'price.monthly': { zh: '按月', en: 'Monthly', ja: '月払い', ko: '월간', ru: 'Помесячно', es: 'Mensual' },
|
||
'price.yearly': { zh: '按年', en: 'Yearly', ja: '年払い', ko: '연간', ru: 'Ежегодно', es: 'Anual' },
|
||
'price.save': { zh: '省 20%', en: 'Save 20%', ja: '20%お得', ko: '20% 절약', ru: 'Экономия 20%', es: 'Ahorra 20%' },
|
||
'price.permo': { zh: '/月', en: '/mo', ja: '/月', ko: '/월', ru: '/мес', es: '/mes' },
|
||
'price.free': { zh: '免费版', en: 'Free', ja: '無料版', ko: '무료', ru: 'Бесплатный', es: 'Gratis' },
|
||
'price.freedesc': { zh: '适合轻度使用与尝鲜', en: 'For light, casual use', ja: 'ライトなお試し利用に', ko: '가볍게 써보는 사용자에게', ru: 'Для лёгкого, эпизодического использования', es: 'Para un uso ligero y ocasional' },
|
||
'price.pro': { zh: '专业版', en: 'Pro', ja: 'プロ版', ko: '프로', ru: 'Pro', es: 'Pro' },
|
||
'price.prodesc': { zh: '个人用户的最佳选择', en: 'Best for individuals', ja: '個人ユーザーに最適', ko: '개인 사용자에게 최적', ru: 'Оптимально для одного пользователя', es: 'Ideal para uso individual' },
|
||
'price.team': { zh: '团队版', en: 'Team', ja: 'チーム版', ko: '팀', ru: 'Команда', es: 'Equipo' },
|
||
'price.teamdesc': { zh: '小团队集中管理', en: 'For small teams', ja: '小規模チームの一括管理に', ko: '소규모 팀 통합 관리', ru: 'Для небольших команд', es: 'Para equipos pequeños' },
|
||
'price.popular': { zh: '最受欢迎', en: 'Most popular', ja: '一番人気', ko: '가장 인기', ru: 'Самый популярный', es: 'El más popular' },
|
||
'price.cta_free': { zh: '免费下载', en: 'Download free', ja: '無料ダウンロード', ko: '무료 다운로드', ru: 'Скачать бесплатно', es: 'Descargar gratis' },
|
||
'price.cta_pro': { zh: '获取激活码', en: 'Get a code', ja: 'コードを入手', ko: '코드 받기', ru: 'Получить код', es: 'Obtener un código' },
|
||
'price.cta_team': { zh: '获取激活码', en: 'Get a code', ja: 'コードを入手', ko: '코드 받기', ru: 'Получить код', es: 'Obtener un código' },
|
||
'pf.free1': { zh: '每日 10 分钟时长', en: '10 min per day', ja: '1日10分', ko: '하루 10분', ru: '10 минут в день', es: '10 min al día' },
|
||
'pf.free2': { zh: '仅 1 个基础节点', en: '1 basic node only', ja: '基本ノード1つのみ', ko: '기본 노드 1개만', ru: 'Только 1 базовый узел', es: 'Solo 1 nodo básico' },
|
||
'pf.free3': { zh: '使用前观看广告', en: 'Watch an ad to start', ja: '利用前に広告を視聴', ko: '사용 전 광고 시청', ru: 'Просмотр рекламы перед запуском', es: 'Ver un anuncio para empezar' },
|
||
'pf.free4': { zh: '核心加密 · 无日志', en: 'Core encryption · no-logs', ja: 'コア暗号化 · ノーログ', ko: '핵심 암호화 · 노로그', ru: 'Базовое шифрование · без логов', es: 'Cifrado esencial · sin registros' },
|
||
'pf.pro1': { zh: '全球加速线路', en: 'Global routes', ja: 'グローバル回線', ko: '글로벌 라우트', ru: 'Глобальные маршруты', es: 'Rutas globales' },
|
||
'pf.pro2': { zh: '无限流量 · 极速', en: 'Unlimited · top speed', ja: '無制限 · 最高速度', ko: '무제한 · 최고 속도', ru: 'Без лимитов · максимальная скорость', es: 'Ilimitado · máxima velocidad' },
|
||
'pf.pro3': { zh: '5 台设备同时在线', en: '5 devices at once', ja: '5台同時接続', ko: '동시 5대', ru: '5 устройств одновременно', es: '5 dispositivos a la vez' },
|
||
'pf.pro4': { zh: '流媒体 & P2P 优化', en: 'Streaming & P2P routes', ja: 'ストリーミング & P2P最適化', ko: '스트리밍 & P2P 라우트', ru: 'Маршруты для стриминга и P2P', es: 'Rutas para streaming y P2P' },
|
||
'pf.pro5': { zh: 'Kill Switch · 智能分流', en: 'Kill Switch · smart routing', ja: 'キルスイッチ · スマートルーティング', ko: '킬 스위치 · 스마트 라우팅', ru: 'Kill Switch · умная маршрутизация', es: 'Kill Switch · enrutamiento inteligente' },
|
||
'pf.team1': { zh: '专业版全部功能', en: 'Everything in Pro', ja: 'プロ版の全機能', ko: '프로의 모든 기능', ru: 'Всё из тарифа Pro', es: 'Todo lo de Pro' },
|
||
'pf.team2': { zh: '10 个成员席位', en: '10 seats', ja: '10メンバー席', ko: '멤버 10석', ru: '10 мест для участников', es: '10 plazas' },
|
||
'pf.team3': { zh: '集中计费与管理', en: 'Central billing & admin', ja: '一括請求と管理', ko: '통합 결제 및 관리', ru: 'Единый биллинг и администрирование', es: 'Facturación y administración centralizadas' },
|
||
'pf.team4': { zh: '优先客服', en: 'Priority support', ja: '優先サポート', ko: '우선 지원', ru: 'Приоритетная поддержка', es: 'Soporte prioritario' },
|
||
|
||
'pay.title': { zh: '为什么网页上没有支付按钮?', en: 'Why no checkout on this page?', ja: 'なぜこのページに決済ボタンがないのですか?', ko: '이 페이지에 결제 버튼이 없는 이유는?', ru: 'Почему на этой странице нет оплаты?', es: '¿Por qué no hay pago en esta página?' },
|
||
'pay.body': { zh: '出于风控与隐私考虑,穿山甲不在网页或 App 内直接收款。你可以通过以下任一渠道获取激活码,在客户端内兑换即可开通。', en: 'For risk and privacy reasons, Pangolin never takes payment in the web or app. Get an activation code through any channel below, then redeem it in the client.', ja: 'リスク管理とプライバシーの観点から、Pangolinはウェブやアプリ内で直接決済を受け付けません。以下のいずれかの窓口でアクティベーションコードを入手し、クライアント内で引き換えてください。', ko: '리스크 관리와 개인정보 보호를 위해 Pangolin은 웹이나 앱에서 직접 결제를 받지 않습니다. 아래 채널에서 활성화 코드를 받아 클라이언트에서 등록하세요.', ru: 'В целях безопасности и приватности Pangolin не принимает оплату в вебе или приложении. Получите код активации по любому из каналов ниже и активируйте его в клиенте.', es: 'Por motivos de seguridad y privacidad, Pangolin nunca cobra en la web ni en la app. Consigue un código de activación por cualquiera de estos canales y canjéalo en el cliente.' },
|
||
'pay.store': { zh: '自助发卡商店', en: 'Self-serve store', ja: 'セルフサービスストア', ko: '셀프 발급 스토어', ru: 'Магазин самообслуживания', es: 'Tienda de autoservicio' },
|
||
'pay.usdt': { zh: 'USDT (TRC20) · 最隐私', en: 'USDT (TRC20) · most private', ja: 'USDT (TRC20) · 最もプライベート', ko: 'USDT (TRC20) · 가장 프라이빗', ru: 'USDT (TRC20) · максимум приватности', es: 'USDT (TRC20) · lo más privado' },
|
||
|
||
'cmp.h': { zh: '功能对比', en: 'Compare plans', ja: 'プラン比較', ko: '요금제 비교', ru: 'Сравнение тарифов', es: 'Comparar planes' },
|
||
'cmp.feature': { zh: '功能', en: 'Feature', ja: '機能', ko: '기능', ru: 'Функция', es: 'Función' },
|
||
'cmp.locations': { zh: '可用线路', en: 'Routes', ja: '利用可能な回線', ko: '이용 가능한 라우트', ru: 'Маршруты', es: 'Rutas' },
|
||
'cmp.data': { zh: '流量', en: 'Data', ja: 'データ量', ko: '데이터', ru: 'Трафик', es: 'Datos' },
|
||
'cmp.time': { zh: '每日时长', en: 'Daily time', ja: '1日の利用時間', ko: '하루 사용 시간', ru: 'Время в день', es: 'Tiempo diario' },
|
||
'cmp.time_free': { zh: '10 分钟/天(试用期不限)', en: '10 min/day (trial: unlimited)', ja: '10分/日(トライアル中は無制限)', ko: '10분/일 (체험 중 무제한)', ru: '10 мин/день (в пробный период — без лимита)', es: '10 min/día (prueba: ilimitado)' },
|
||
'cmp.devices': { zh: '设备数', en: 'Devices', ja: 'デバイス数', ko: '기기 수', ru: 'Устройства', es: 'Dispositivos' },
|
||
'cmp.speed': { zh: '极速线路', en: 'Top-speed routes', ja: '最高速回線', ko: '최고 속도 라우트', ru: 'Скоростные маршруты', es: 'Rutas de máxima velocidad' },
|
||
'cmp.stream': { zh: '视频优化', en: 'Video routes', ja: '動画向け回線', ko: '영상 라우트', ru: 'Маршруты для видео', es: 'Rutas para vídeo' },
|
||
'cmp.kill': { zh: 'Kill Switch', en: 'Kill Switch', ja: 'キルスイッチ', ko: '킬 스위치', ru: 'Kill Switch', es: 'Kill Switch' },
|
||
'cmp.support': { zh: '客服', en: 'Support', ja: 'サポート', ko: '고객 지원', ru: 'Поддержка', es: 'Soporte' },
|
||
'cmp.unlimited': { zh: '无限', en: 'Unlimited', ja: '無制限', ko: '무제한', ru: 'Без лимита', es: 'Ilimitado' },
|
||
'cmp.loc_all': { zh: '全球', en: 'Global', ja: 'グローバル', ko: '글로벌', ru: 'Глобально', es: 'Global' },
|
||
'cmp.daily': { zh: '不限', en: 'Unlimited', ja: '無制限', ko: '무제한', ru: 'Без лимита', es: 'Ilimitado' },
|
||
'cmp.basic': { zh: '标准', en: 'Standard', ja: '標準', ko: '표준', ru: 'Стандарт', es: 'Estándar' },
|
||
'cmp.priority': { zh: '优先', en: 'Priority', ja: '優先', ko: '우선', ru: 'Приоритет', es: 'Prioritario' },
|
||
|
||
'dl.eyebrow': { zh: '下载', en: 'Download', ja: 'ダウンロード', ko: '다운로드', ru: 'Скачать', es: 'Descargar' },
|
||
'dl.h': { zh: '全平台,随处可用', en: 'Every platform, everywhere', ja: 'すべてのプラットフォーム、どこでも', ko: '모든 플랫폼, 어디서나', ru: 'Все платформы, везде', es: 'Todas las plataformas, en todas partes' },
|
||
'dl.sub': { zh: '一个账户,所有设备同步。下载即用,无需配置。', en: 'One account syncs every device. Download and go.', ja: '一つのアカウントで全デバイスを同期。ダウンロードしてすぐ使えます。', ko: '하나의 계정으로 모든 기기를 동기화. 내려받아 바로 사용.', ru: 'Один аккаунт синхронизирует все устройства. Скачал — и в путь.', es: 'Una cuenta sincroniza todos tus dispositivos. Descarga y listo.' },
|
||
'dl.get': { zh: '下载', en: 'Download', ja: 'ダウンロード', ko: '다운로드', ru: 'Скачать', es: 'Descargar' },
|
||
'dl.soon': { zh: '敬请期待', en: 'Coming soon', ja: '近日公開', ko: '출시 예정', ru: 'Скоро', es: 'Próximamente' },
|
||
|
||
'docs.eyebrow': { zh: '文档', en: 'Docs', ja: 'ドキュメント', ko: '문서', ru: 'Документация', es: 'Documentación' },
|
||
'docs.h': { zh: '需要帮助?都在这里', en: 'Need help? It’s all here', ja: 'お困りですか?すべてここに', ko: '도움이 필요하세요? 모두 여기에', ru: 'Нужна помощь? Всё здесь', es: '¿Necesitas ayuda? Todo está aquí' },
|
||
'docs.sub': { zh: '从快速上手到协议细节,清晰直接。', en: 'From quickstart to protocol details — clear and direct.', ja: 'クイックスタートからプロトコルの詳細まで、明快に。', ko: '빠른 시작부터 프로토콜 세부까지, 명확하고 간결하게.', ru: 'От быстрого старта до деталей протокола — ясно и по делу.', es: 'Desde el inicio rápido hasta los detalles del protocolo, claro y directo.' },
|
||
'docs.1t': { zh: '快速开始', en: 'Quickstart', ja: 'クイックスタート', ko: '빠른 시작', ru: 'Быстрый старт', es: 'Inicio rápido' },
|
||
'docs.1d': { zh: '三分钟完成注册、下载与首次连接。', en: 'Sign up, download and connect in three minutes.', ja: '3分で登録・ダウンロード・初回接続まで完了。', ko: '3분 만에 가입, 다운로드, 첫 연결까지.', ru: 'Регистрация, загрузка и первое подключение за три минуты.', es: 'Regístrate, descarga y conéctate en tres minutos.' },
|
||
'docs.2t': { zh: '常见问题', en: 'FAQ', ja: 'よくある質問', ko: '자주 묻는 질문', ru: 'Вопросы и ответы', es: 'Preguntas frecuentes' },
|
||
'docs.2d': { zh: '连接、计费、设备与兑换码的常见疑问。', en: 'Connection, billing, devices and redeem codes.', ja: '接続・請求・デバイス・引き換えコードのよくある疑問。', ko: '연결, 결제, 기기, 등록 코드에 대한 궁금증.', ru: 'Подключение, оплата, устройства и коды активации.', es: 'Conexión, facturación, dispositivos y códigos de canje.' },
|
||
'docs.3t': { zh: '协议与安全', en: 'Protocol & security', ja: 'プロトコルとセキュリティ', ko: '프로토콜 & 보안', ru: 'Протокол и безопасность', es: 'Protocolo y seguridad' },
|
||
'docs.3d': { zh: 'WireGuard、加密方式与无日志架构说明。', en: 'WireGuard, encryption and our no-logs architecture.', ja: 'WireGuard、暗号化方式、ノーログ設計の解説。', ko: 'WireGuard, 암호화 방식, 노로그 아키텍처 설명.', ru: 'WireGuard, шифрование и наша архитектура без логов.', es: 'WireGuard, cifrado y nuestra arquitectura sin registros.' },
|
||
'docs.4t': { zh: '隐私政策', en: 'Privacy policy', ja: 'プライバシーポリシー', ko: '개인정보 처리방침', ru: 'Политика конфиденциальности', es: 'Política de privacidad' },
|
||
'docs.4d': { zh: '我们收集什么、不收集什么,一目了然。', en: 'Exactly what we collect — and what we never do.', ja: '収集するもの・しないものを明確に。', ko: '무엇을 수집하고 무엇을 수집하지 않는지 한눈에.', ru: 'Что мы собираем — и чего не собираем никогда.', es: 'Exactamente qué recopilamos y qué nunca hacemos.' },
|
||
'docs.read': { zh: '阅读', en: 'Read', ja: '読む', ko: '읽기', ru: 'Читать', es: 'Leer' },
|
||
|
||
'blog.eyebrow': { zh: 'Blog', en: 'Blog', ja: 'ブログ', ko: '블로그', ru: 'Блог', es: 'Blog' },
|
||
'blog.h': { zh: '来自团队的最新动态', en: 'Latest from the team', ja: 'チームからの最新情報', ko: '팀의 최신 소식', ru: 'Свежие новости команды', es: 'Lo último del equipo' },
|
||
'blog.sub': { zh: '产品更新、安全科普与节点公告。', en: 'Product updates, security explainers and node news.', ja: '製品アップデート、セキュリティ解説、ノード情報。', ko: '제품 업데이트, 보안 해설, 노드 소식.', ru: 'Обновления продукта, разборы по безопасности и новости об узлах.', es: 'Novedades del producto, explicaciones de seguridad y avisos de nodos.' },
|
||
'blog.1tag': { zh: '产品更新', en: 'Product', ja: '製品', ko: '제품', ru: 'Продукт', es: 'Producto' },
|
||
'blog.1t': { zh: 'v2.4:更快的智能分流与全新统计页', en: 'v2.4: faster smart routing & a new stats tab', ja: 'v2.4:より速いスマートルーティングと新しい統計タブ', ko: 'v2.4: 더 빨라진 스마트 라우팅과 새 통계 탭', ru: 'v2.4: быстрее умная маршрутизация и новая вкладка статистики', es: 'v2.4: enrutamiento inteligente más rápido y nueva pestaña de estadísticas' },
|
||
'blog.1d': { zh: '本次更新重写了分流引擎,连接建立速度提升约 40%。', en: 'We rewrote the routing engine — connections are ~40% faster.', ja: 'ルーティングエンジンを刷新し、接続の確立が約40%高速化しました。', ko: '라우팅 엔진을 새로 작성해 연결 속도가 약 40% 빨라졌습니다.', ru: 'Мы переписали движок маршрутизации — соединения устанавливаются на ~40% быстрее.', es: 'Reescribimos el motor de enrutamiento: las conexiones son ~40% más rápidas.' },
|
||
'blog.2tag': { zh: '安全', en: 'Security', ja: 'セキュリティ', ko: '보안', ru: 'Безопасность', es: 'Seguridad' },
|
||
'blog.2t': { zh: '无日志到底意味着什么?', en: 'What “no-logs” really means', ja: '「ノーログ」とは本当はどういう意味か', ko: '“노로그”가 정말 의미하는 것', ru: 'Что на самом деле значит «без логов»', es: 'Qué significa realmente “sin registros”' },
|
||
'blog.2d': { zh: '我们逐条拆解收集与不收集的数据,以及背后的架构。', en: 'A line-by-line look at what we keep — and what we never touch.', ja: '保存するデータとしないデータを一つずつ、その背後の設計とともに解説。', ko: '저장하는 데이터와 절대 건드리지 않는 데이터를 하나하나 살펴봅니다.', ru: 'Построчный разбор того, что мы храним — и чего не касаемся никогда.', es: 'Un repaso punto por punto de lo que guardamos y lo que nunca tocamos.' },
|
||
'blog.3tag': { zh: '公告', en: 'News', ja: 'お知らせ', ko: '소식', ru: 'Новости', es: 'Novedades' },
|
||
'blog.3t': { zh: '新增首尔与法兰克福高速节点', en: 'New high-speed nodes: Seoul & Frankfurt', ja: '高速ノードを新設:ソウルとフランクフルト', ko: '새 고속 노드: 서울과 프랑크푸르트', ru: 'Новые скоростные узлы: Сеул и Франкфурт', es: 'Nuevos nodos de alta velocidad: Seúl y Fráncfort' },
|
||
'blog.3d': { zh: '两条新线路已上线,为东北亚与欧洲用户带来更低延迟。', en: 'Two new routes are live, cutting latency for NE Asia and Europe.', ja: '2つの新回線が稼働開始、東北アジアと欧州のユーザーに低遅延を。', ko: '두 개의 새 라우트가 가동되어 동북아와 유럽 사용자의 지연이 줄었습니다.', ru: 'Запущены два новых маршрута, снижающих задержку для Северо-Восточной Азии и Европы.', es: 'Dos rutas nuevas ya activas reducen la latencia para el noreste de Asia y Europa.' },
|
||
'blog.readmore': { zh: '阅读全文', en: 'Read more', ja: '続きを読む', ko: '더 읽기', ru: 'Читать далее', es: 'Leer más' },
|
||
|
||
'cta.h': { zh: '准备好体验极速畅连了吗?', en: 'Ready for a faster connection?', ja: 'より速い接続を体験する準備はできましたか?', ko: '더 빠른 연결을 경험할 준비가 되셨나요?', ru: 'Готовы к более быстрому соединению?', es: '¿Listo para una conexión más rápida?' },
|
||
'cta.p': { zh: '免费下载,数分钟内开始你的第一次极速连接。', en: 'Download free and get connected in minutes.', ja: '無料でダウンロードして、数分で最初の高速接続を。', ko: '무료로 내려받아 몇 분 안에 연결하세요.', ru: 'Скачайте бесплатно и подключитесь за считанные минуты.', es: 'Descarga gratis y conéctate en minutos.' },
|
||
'cta.btn': { zh: '免费下载', en: 'Download free', ja: '無料ダウンロード', ko: '무료 다운로드', ru: 'Скачать бесплатно', es: 'Descargar gratis' },
|
||
|
||
'ft.tag': { zh: '极简、轻量、亲和的跨平台网络加速应用。守护你的每一次连接。', en: 'A minimal, friendly cross-platform network accelerator. Protecting every connection.', ja: 'ミニマルで軽快、使いやすいクロスプラットフォームのネットワークアクセラレーター。すべての接続を守ります。', ko: '미니멀하고 가벼우며 친근한 크로스플랫폼 네트워크 가속 앱. 모든 연결을 지킵니다.', ru: 'Минималистичный, лёгкий и удобный кроссплатформенный ускоритель сети. Защищает каждое соединение.', es: 'Un acelerador de red multiplataforma minimalista, ligero y amable. Protegiendo cada conexión.' },
|
||
'ft.product': { zh: '产品', en: 'Product', ja: '製品', ko: '제품', ru: 'Продукт', es: 'Producto' },
|
||
'ft.resources': { zh: '资源', en: 'Resources', ja: 'リソース', ko: '리소스', ru: 'Ресурсы', es: 'Recursos' },
|
||
'ft.contact': { zh: '联系与渠道', en: 'Contact', ja: 'お問い合わせ', ko: '문의 및 채널', ru: 'Контакты', es: 'Contacto' },
|
||
'ft.features': { zh: '功能', en: 'Features', ja: '機能', ko: '기능', ru: 'Возможности', es: 'Funciones' },
|
||
'ft.pricing': { zh: '定价', en: 'Pricing', ja: '料金', ko: '요금제', ru: 'Цены', es: 'Precios' },
|
||
'ft.download': { zh: '下载', en: 'Download', ja: 'ダウンロード', ko: '다운로드', ru: 'Скачать', es: 'Descargar' },
|
||
'ft.docs': { zh: '文档', en: 'Docs', ja: 'ドキュメント', ko: '문서', ru: 'Документация', es: 'Documentación' },
|
||
'ft.blog': { zh: 'Blog', en: 'Blog', ja: 'ブログ', ko: '블로그', ru: 'Блог', es: 'Blog' },
|
||
'ft.faq': { zh: '常见问题', en: 'FAQ', ja: 'よくある質問', ko: '자주 묻는 질문', ru: 'Вопросы и ответы', es: 'Preguntas frecuentes' },
|
||
'ft.privacy': { zh: '隐私政策', en: 'Privacy', ja: 'プライバシー', ko: '개인정보', ru: 'Конфиденциальность', es: 'Privacidad' },
|
||
'ft.status': { zh: '服务状态', en: 'Status', ja: 'サービス状況', ko: '서비스 상태', ru: 'Статус', es: 'Estado' },
|
||
'ft.hours': { zh: '服务时间 每日 9:00–24:00 (GMT+8)', en: 'Hours: Daily 9:00–24:00 (GMT+8)', ja: '営業時間 毎日 9:00–24:00 (GMT+8)', ko: '운영 시간 매일 9:00–24:00 (GMT+8)', ru: 'Часы работы: ежедневно 9:00–24:00 (GMT+8)', es: 'Horario: todos los días 9:00–24:00 (GMT+8)' },
|
||
'ft.copy': { zh: '© 2026 穿山甲 · Pangolin', en: '© 2026 Pangolin', ja: '© 2026 Pangolin', ko: '© 2026 Pangolin', ru: '© 2026 Pangolin', es: '© 2026 Pangolin' },
|
||
'ft.madenote': { zh: 'App 内不支持直接支付 · 资金流全走外部渠道', en: 'No in-app payment · all purchases via external channels', ja: 'アプリ内決済なし · すべての購入は外部窓口で', ko: '앱 내 결제 없음 · 모든 구매는 외부 채널로', ru: 'Без оплаты в приложении · все покупки через внешние каналы', es: 'Sin pago en la app · todas las compras por canales externos' },
|
||
|
||
// 页面 <title> / meta(六语)
|
||
'meta.title': { zh: '穿山甲 · Pangolin — 极速 · 稳定 · 省心', en: 'Pangolin — Fast · Stable · Effortless', ja: 'Pangolin — 高速 · 安定 · 快適', ko: 'Pangolin — 빠름 · 안정 · 간편', ru: 'Pangolin — Быстро · Стабильно · Без забот', es: 'Pangolin — Rápido · Estable · Sin complicaciones' },
|
||
'meta.desc': { zh: '轻盈、亲和、即开即用的跨平台网络加速应用。一键连接,智能选线,稳定不掉线。', en: 'A lightweight, friendly cross-platform network accelerator. One tap, smart routing, rock-solid.', ja: '軽快で使いやすい、クロスプラットフォームのネットワークアクセラレーター。ワンタップ接続、スマートルーティング、安定した通信。', ko: '가볍고 친근한 크로스플랫폼 네트워크 가속 앱. 원 탭 연결, 스마트 라우팅, 흔들림 없는 안정성.', ru: 'Лёгкий и удобный кроссплатформенный ускоритель сети. Одно касание, умная маршрутизация, надёжное соединение.', es: 'Un acelerador de red multiplataforma, ligero y fácil de usar. Un toque, enrutamiento inteligente, total estabilidad.' },
|
||
};
|
||
|
||
export type T = (key: string) => string;
|
||
|
||
/** 返回当前语言的取词函数;缺键回退英文,再回退键名本身(便于发现遗漏)。 */
|
||
export function createT(lang: Lang): T {
|
||
return (key: string) => {
|
||
const m = STRINGS[key];
|
||
if (!m) return key;
|
||
return m[lang] ?? m.en ?? key;
|
||
};
|
||
}
|
||
|
||
/** 价格表(月 / 年·按月),按语言分币种:zh=人民币、其余=美元。年付约 8 折。
|
||
* 对齐 design/CLAUDE.md §7;收款走客户端内兑换激活码,网页价仅为展示。
|
||
* ja/ko/ru/es 暂复用 en 的美元价,币种本地化为后续单独工作。 */
|
||
export const PRICES: Record<Lang, Record<'free' | 'pro' | 'team', [string, string]>> = {
|
||
zh: {
|
||
free: ['¥0', '¥0'],
|
||
pro: ['¥25', '¥20'],
|
||
team: ['¥99', '¥79'],
|
||
},
|
||
en: {
|
||
free: ['$0', '$0'],
|
||
pro: ['$3.99', '$3.19'],
|
||
team: ['$13.99', '$11.19'],
|
||
},
|
||
ja: {
|
||
free: ['$0', '$0'],
|
||
pro: ['$3.99', '$3.19'],
|
||
team: ['$13.99', '$11.19'],
|
||
},
|
||
ko: {
|
||
free: ['$0', '$0'],
|
||
pro: ['$3.99', '$3.19'],
|
||
team: ['$13.99', '$11.19'],
|
||
},
|
||
ru: {
|
||
free: ['$0', '$0'],
|
||
pro: ['$3.99', '$3.19'],
|
||
team: ['$13.99', '$11.19'],
|
||
},
|
||
es: {
|
||
free: ['$0', '$0'],
|
||
pro: ['$3.99', '$3.19'],
|
||
team: ['$13.99', '$11.19'],
|
||
},
|
||
};
|