// strings_es.dart — Recursos de texto en español (visualización monolingüe) // // Palabras prohibidas: términos de evasión de censura. Lista en design/CLAUDE.md §1 regla 13. // Posicionamiento: aceleración de red / optimización de la experiencia + privacidad. // La numeración de planes sigue design/CLAUDE.md §7. import 'app_text.dart'; class StringsEs extends AppText { const StringsEs(); @override AppLang get lang => AppLang.es; @override String get brand => 'Pangolin'; @override String get online => '● En línea'; @override String get offline => '○ Desconectado'; @override String get capOff => 'Toca para conectar'; @override String get capConnecting => 'Conectando…'; @override String get capOn => 'Conectado · Cifrado'; @override String get connectNow => 'CONECTAR'; @override String get secure => 'SEGURO'; @override String get tabConnect => 'Conectar'; @override String get tabServers => 'Servidores'; @override String get tabStats => 'Estadísticas'; @override String get tabMe => 'Cuenta'; @override String get currentNode => 'Nodo actual'; @override String get download => 'Bajada'; @override String get upload => 'Subida'; @override String get latency => 'Ping'; @override String get quotaToday => 'Restante hoy'; @override String get minutes => 'min'; @override String get quotaFree => 'Gratis · 10 min/día'; @override String get planFreeTag => 'Gratis'; @override String get watchAd => 'Mira un anuncio para empezar'; @override String get adUnlocked => 'Desbloqueado por hoy'; @override String get quotaLeftLabel => 'Restante'; @override String get quotaUsedUp => 'Tiempo gratis diario agotado'; @override String get watchAdMore => 'Mira un anuncio para más tiempo'; @override String get quotaExhaustedNotice => 'Tiempo gratis diario agotado. Mejora tu plan para seguir conectado.'; @override String get adPlaying => 'Reproduciendo anuncio…'; @override String adRewarded(int minutes) => '+$minutes min añadidos'; @override String get adFailed => 'No se pudo añadir tiempo, inténtalo de nuevo'; @override String get quotaDesktopTitle => 'Tiempo gratis diario agotado'; @override String get quotaDesktopBody => 'Mira anuncios en la app móvil para añadir tiempo, o mejora tu plan para acceso ilimitado.'; @override String get gotIt => 'Entendido'; @override String get chooseNode => 'Elegir servidor'; @override String get searchPh => 'Buscar país / ciudad'; @override String get smartSelect => 'Selección inteligente'; @override String nodeSwitchTitle(String name) => '¿Cambiar a $name?'; @override String get nodeSwitchBody => 'Esto desconecta el enlace actual y reconecta a este nodo.'; @override String get nodeSwitchConfirm => 'Cambiar'; @override String get nodeUnhealthySwitched => 'Nodo actual inaccesible: cambiado automáticamente'; @override String get nodeUnhealthyError => 'El nodo actual está inaccesible: reconecta o cambia de nodo'; @override String get nodeReconnecting => 'Red inestable, reconectando…'; @override String get smartSub => 'Elige el mejor nodo para tu red'; @override String get recommended => 'Recomendado'; @override String get statsTitle => 'Estadísticas'; @override String get trafficMonth => 'Tráfico'; @override String get avgPing => 'Ping medio'; @override String get durMonth => 'Tiempo'; @override String get weekTraffic => 'Esta semana (GB)'; @override List get days7 => const ['L', 'M', 'X', 'J', 'V', 'S', 'D']; @override String get byDevice => 'Por dispositivo'; @override String get noDeviceUsage => 'Aún no hay uso por dispositivo'; @override String get periodMonth => 'Este mes'; @override String get periodWeek => 'Esta semana'; @override String get periodToday => 'Hoy'; @override String get statDown => 'Descarga'; @override String get statUp => 'Subida'; @override String get statDuration => 'Duración'; @override String get chartTwoWeeks => 'Últimas 2 semanas'; @override String get allDevices => 'Todos los dispositivos'; @override String get meTitle => 'Cuenta'; @override String get proMember => 'Miembro PRO'; @override String get freePlanName => 'Gratis'; @override String get expires => 'Vence'; @override String get upgradeBtn => 'Renovar / Mejorar'; @override String get accInfoTitle => 'Información de la cuenta'; @override String get accEmail => 'Correo'; @override String get accPassword => 'Contraseña'; @override String get accChange => 'Cambiar'; @override String get deviceLimitTitle => 'Límite de dispositivos alcanzado'; @override String get deviceLimitDesc => 'Tu plan permite hasta %s dispositivos. Elimina uno para continuar.'; @override String get deviceLimitRemoveOldest => 'Eliminar el menos usado recientemente'; @override String get myDevices => 'Mis dispositivos'; @override String get devicesSub => 'Hasta 3 dispositivos en PRO'; @override String get thisDevice => 'Este dispositivo'; @override String get remove => 'Eliminar'; @override String get devOnline => 'En línea'; @override String get devOffline => 'Desconectado'; @override String get devLastOnline => 'Última conexión'; @override String get devNeverLogin => 'Nunca ha iniciado sesión'; @override String get devForceLogout => 'Forzar cierre de sesión'; @override String get devClearLogin => 'Borrar datos de sesión'; @override String get devRename => 'Renombrar'; @override String get devRenameHint => 'Nombre del dispositivo'; @override String get devSave => 'Guardar'; @override String get devForceLogoutConfirm => 'Esto revoca la sesión del dispositivo: será desconectado y deberá iniciar sesión de nuevo. El dispositivo permanece en la lista.'; @override String get devClearLoginConfirm => 'Esto elimina el dispositivo de la lista por completo y revoca su sesión y su credencial del plano de datos. El dispositivo deberá iniciar sesión de nuevo para poder usarse.'; @override String get devCancel => 'Cancelar'; @override String get sessionRevokedTitle => 'Se cerró la sesión de este dispositivo'; @override String get sessionRevokedBody => 'Tu cuenta cerró la sesión de este dispositivo desde otro dispositivo. Inicia sesión de nuevo.'; @override String get sessionRevokedOk => 'Iniciar sesión de nuevo'; @override String get redeemEntry => 'Canjear'; @override String get contactEntry => 'Contáctanos'; @override String get signOut => 'Cerrar sesión'; @override String get language => 'Idioma'; @override String get darkAppearance => 'Apariencia oscura'; @override String get stateOn => 'Activado'; @override String get followLight => 'Desactivado'; @override String get protocol => 'Protocolo'; @override String get settingsTitle => 'Ajustes'; @override String get autostart => 'Iniciar al arrancar'; @override String get autostartSub => 'Ejecutar automáticamente al iniciar el sistema'; @override String get autoConnect => 'Conexión automática'; @override String get autoConnectSub => 'Conectar automáticamente al abrir'; @override String autoConnectingTo(String name) => 'Conectando automáticamente a $name…'; @override String get smartRoute => 'Enrutamiento inteligente'; @override String get smartRouteSub => 'Acelera en el extranjero, directo en casa'; @override String get killSwitch => 'Kill Switch'; @override String get killSwitchSub => 'Bloquea el tráfico si se cae el enlace'; @override String get checkUpdate => 'Buscar actualizaciones'; @override String get webUserCenter => 'Centro de usuario (Web)'; @override String updateAvailableTitle(String version) => 'Nueva versión v$version disponible'; @override String get updateNotesFallback => 'Esta actualización incluye correcciones y mejoras de estabilidad.'; @override String get updateLater => 'Más tarde'; @override String get updateDownload => 'Descargar actualización'; @override String get updateUpToDate => 'Ya tienes la última versión'; @override String get updateCheckFailed => 'Falló la búsqueda de actualizaciones, inténtalo más tarde'; @override String get freePlan => 'Gratis'; @override String get proPlan => 'Pro'; @override String get teamPlan => 'Equipo'; @override String get perMonth => '/mes'; @override String get current => 'Actual'; @override String get upgrade => 'Mejorar'; @override String get choose => 'Elegir'; @override String get mostPopular => 'Popular'; @override List get featsFree => const [ 'Solo 1 nodo básico', '10 min al día', 'Mira un anuncio para empezar', 'Prueba gratis de 7 días al registrarte', ]; @override List get featsPro => const ['Más de 80 ubicaciones', 'Ilimitado · rápido', '5 dispositivos', 'Optimizado para streaming']; @override List get featsTeam => const ['Todo lo de Pro', '10 plazas', 'Facturación centralizada', 'Soporte prioritario']; @override String get redeemTitle => 'Canjear y comprar'; @override String get redeemCodeTitle => 'Canjear un código'; @override String get redeemPh => 'Introduce el código de activación'; @override String get redeemBtn => 'Canjear'; @override String get redeemOk => 'Activado · PRO desbloqueado'; @override String get buyTitle => 'Dónde comprar'; @override String get buySub => 'El pago dentro de la app no está disponible. Consigue un código mediante:'; @override String get chStore => 'Tienda autoservicio'; @override String get chEmail => 'Soporte por correo'; @override String get contactTitle => 'Contáctanos'; @override String get contactIntro => '¿Necesitas ayuda? Escríbenos por cualquiera de los canales de abajo: solemos responder en minutos.'; @override String get contactEmail => 'Soporte por correo'; @override String get contactStore => 'Tienda autoservicio'; @override String get contactWebsite => 'Sitio web'; @override String get contactHoursTitle => 'Horario de soporte'; @override String get contactHours => 'Todos los días 9:00 – 24:00 (GMT+8)'; @override String get authTagline => 'Rápido · Estable · Sin complicaciones'; @override String get tabLogin => 'Iniciar sesión'; @override String get tabRegister => 'Registrarse'; @override String get emailLabel => 'Correo'; @override String get emailPh => 'tu@correo.com'; @override String get pwLabel => 'Contraseña'; @override String get pwPh => 'Introduce la contraseña'; @override String get setPwPh => 'Crea una contraseña (para acceso multidispositivo)'; @override String get codeLabel => 'Código de verificación'; @override String codeSentTo(String email) => 'Código enviado a $email'; @override String get sendCode => 'Enviar código'; @override String get resend => 'Reenviar'; @override String get doLogin => 'Iniciar sesión'; @override String get doNext => 'Siguiente'; @override String get doCreate => 'Crear cuenta'; @override String get forgotPw => '¿Olvidaste la contraseña?'; @override String get tos => 'Al continuar aceptas nuestros Términos y Política de privacidad'; @override String get obSkip => 'Omitir'; @override String get obNext => 'Siguiente'; @override String get obAllow => 'Permitir y continuar'; @override String get obStart => 'Empezar'; @override String get ob1Title => 'Conéctate en todo el mundo'; @override String get ob1Sub => 'Más de 80 ubicaciones, enrutamiento al más rápido automático, sólido como una roca.'; @override String get ob2Title => 'Permite la configuración de red'; @override String get ob2Sub => 'El sistema te pedirá añadir un perfil de red para crear el túnel cifrado.'; @override String get ob3Title => 'Privado por diseño'; @override String get ob3Sub => 'Cifrado de extremo a extremo. No guardamos ningún registro de navegación.'; // ── 购买 / 支付 ── @override String get purchaseTitle => 'Comprar plan'; @override String get paymentTitle => 'Pago'; @override String get buyNow => 'Comprar ahora'; @override String get payMethodAlipay => 'Alipay'; @override String get payMethodCrypto => 'USDT (TRC20)'; @override String get choosePayMethod => 'Elige el método de pago'; @override String get proMonthly => 'Pro · Mensual'; @override String get proQuarterly => 'Pro · Trimestral'; @override String get proYearly => 'Pro · Anual'; @override String get perQuarter => '/trimestre'; @override String get perYear => '/año'; @override String get payAmountLabel => 'Importe a transferir'; @override String get payAddressLabel => 'Dirección de pago'; @override String get payNetworkLabel => 'Red'; @override String get payExactAmountHint => 'Envía el importe exacto; se activa automáticamente'; @override String get copied => 'Copiado'; @override String get openAlipay => 'Pagar con Alipay'; @override String get openAlipayHint => 'Vuelve tras pagar; esta página se actualiza automáticamente'; @override String get openAlipayFailed => 'No se pudo abrir Alipay; comprueba que esté instalado o inténtalo de nuevo'; @override String get awaitingPayment => 'Esperando el pago'; @override String get paySucceeded => 'Activado'; @override String get payExpiresAt => 'Válido hasta'; @override String get payDone => 'Listo'; @override String get payFailed => 'El pago falló'; @override String get payRetry => 'Reintentar'; @override String get switchPayMethod => 'Cambiar método de pago'; @override String get cancelOrder => 'Cancelar pedido'; @override String get qrNotSupported => 'Copia el contenido y ábrelo en Alipay'; // ── 支付渠道 switch + 订单 ── @override String get payChannel => 'Canal de pago'; @override String get payChannelUsdt => 'USDT · Cripto'; @override String get payChannelCny => 'CNY · Alipay'; @override String get perMonthSuffix => ' /mes'; @override String get ordersTitle => 'Mis pedidos'; @override String get orderDetailTitle => 'Detalles del pedido'; @override String get ordersEmpty => 'Aún no hay pedidos'; @override String get orderNoLabel => 'N.º de pedido'; @override String get orderPlanLabel => 'Plan'; @override String get orderMethodLabel => 'Método de pago'; @override String get orderAmountLabel => 'Importe'; @override String get orderCreatedLabel => 'Creado'; @override String get orderPaidLabel => 'Pagado'; @override String get orderStatusPaid => 'Activado'; @override String get orderStatusCanceled => 'Cancelado'; @override String get orderContinuePay => 'Continuar pago'; @override String get orderRefresh => 'Actualizar'; @override String get orderRebuy => 'Comprar de nuevo'; @override String get payMethodNezha => 'Nazhapay'; // ── 邀请 / 通知 / 设置分组 / 订单过期(Spec ②③占位) ── @override String get inviteEntry => 'Invita a amigos y gana membresía'; @override String get inviteEntrySub => 'El amigo se registra · ambos ganan días'; @override String get inviteTitle => 'Invitar amigos'; @override String get inviteCodeLabel => 'Código de invitación'; @override String get inviteLinkLabel => 'Enlace de invitación'; @override String get inviteCopyCode => 'Copiar código'; @override String get inviteCopyLink => 'Copiar enlace'; @override String get inviteRewardsTitle => 'Reglas de recompensas'; @override String get inviteRewardRegister => 'Registro de amigo · +3 días cada uno'; @override String get inviteRewardFirstBuy => 'Primera compra del amigo · +15 días cada uno'; @override String get inviteRewardJoinTg => 'Unirse al canal de TG · +3 días'; @override String get inviteProgressTitle => 'Mis recompensas'; @override String get notifTitle => 'Notificaciones'; @override String get notifEmpty => 'Aún no hay notificaciones'; @override String get notifTypeNews => 'Noticias'; @override String get notifTypeFeature => 'Función'; @override String get notifTypeImportant => 'Importante'; @override String get settingsGroupConn => 'Conexión'; @override String get settingsGroupAppearance => 'Apariencia'; @override String get settingsGroupAbout => 'Acerca de'; @override String get orderStatusExpired => 'Caducado'; @override String get promoBadge => 'Oferta especial'; @override String get promoOriginalPrice => 'Antes'; }