mirror of
https://github.com/mivodev/plugin-lang-es.git
synced 2026-01-25 21:08:54 +07:00
Initial commit
This commit is contained in:
52
.github/workflows/release.yml
vendored
Normal file
52
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
name: Release Plugin
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*' # Trigger on version tags, e.g. v1.0.0
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Create Release
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write # Needed to create releases
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get Version
|
||||
id: get_version
|
||||
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create ZIP Archive
|
||||
run: |
|
||||
# Create a temporary directory for the zip
|
||||
mkdir temp_zip
|
||||
|
||||
# Copy files to temp directory, excluding unwanted files
|
||||
rsync -av --progress . temp_zip --exclude .git --exclude .github --exclude .gitignore --exclude LICENSE --exclude README.md --exclude temp_zip
|
||||
|
||||
# Create the zip file
|
||||
cd temp_zip
|
||||
zip -r ../plugin-lang-es.zip .
|
||||
cd ..
|
||||
|
||||
echo "Created plugin-lang-es.zip"
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: plugin-lang-es.zip
|
||||
name: Release ${{ steps.get_version.outputs.VERSION }}
|
||||
body: |
|
||||
Automatic release for version ${{ steps.get_version.outputs.VERSION }}
|
||||
|
||||
**Installation:**
|
||||
1. Download `plugin-lang-es.zip`
|
||||
2. Upload in Mivo > Settings > Plugins
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 DyzulkDev
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
22
README.md
Normal file
22
README.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Spanish Language Pack
|
||||
|
||||
**Category:** Language Pack
|
||||
**Author:** DyzulkDev
|
||||
**Version:** 1.0.0
|
||||
|
||||
The **Spanish Language Pack** provides full Spanish (Español) localization for the Mivo Hotspot Manager.
|
||||
|
||||
## Features
|
||||
- **Full Translation**: Covers Dashboard, Settings, Hotspot, and System menus.
|
||||
- **Flag Icon**: Adds the Spanish flag to the language switcher.
|
||||
- **Native Terminology**: Uses accurate networking and captive portal terms.
|
||||
|
||||
## Installation
|
||||
1. Download the plugin ZIP file.
|
||||
2. Go to **Mivo > Settings > Plugins**.
|
||||
3. Click **Upload Plugin** and select the ZIP file.
|
||||
4. The plugin will appear in your installed list.
|
||||
5. In the top navbar, click the language switcher and select **Español**.
|
||||
|
||||
## Usage
|
||||
Simply install and activate. The language option will be available immediately to all users.
|
||||
632
es.json
Normal file
632
es.json
Normal file
@@ -0,0 +1,632 @@
|
||||
{
|
||||
"_meta": {
|
||||
"name": "Español",
|
||||
"flag": "es"
|
||||
},
|
||||
"common": {
|
||||
"dashboard": "Tablero",
|
||||
"save": "Guardar",
|
||||
"cancel": "Cancelar",
|
||||
"delete": "Eliminar",
|
||||
"edit": "Editar",
|
||||
"add": "Añadir",
|
||||
"install": "Instalar",
|
||||
"back": "Atrás",
|
||||
"actions": "Acciones",
|
||||
"status": "Estado",
|
||||
"name": "Nombre",
|
||||
"description": "Descripción",
|
||||
"search": "Buscar",
|
||||
"previous": "Anterior",
|
||||
"next": "Siguiente",
|
||||
"confirm_delete": "¿Está seguro de que desea eliminar este elemento?",
|
||||
"page_of": "Página {current} de {total}",
|
||||
"all_topics": "Todos los temas",
|
||||
"open": "Abrir",
|
||||
"session": "Sesión",
|
||||
"table": {
|
||||
"entries_per_page": "entradas por página",
|
||||
"search_placeholder": "Buscar...",
|
||||
"all": "Todo",
|
||||
"showing": "Mostrando {start} a {end} de {total} entradas",
|
||||
"no_match": "No se encontraron registros coincidentes"
|
||||
},
|
||||
"char_length": "{n} Caracteres",
|
||||
"forms": {
|
||||
"general": "General",
|
||||
"required": "requerido",
|
||||
"save_changes": "Guardar Cambios",
|
||||
"please_wait": "Por favor espere...",
|
||||
"none": "ninguno",
|
||||
"enabled": "Habilitado",
|
||||
"disabled": "Deshabilitado"
|
||||
},
|
||||
"warning": "Advertencia"
|
||||
},
|
||||
"home": {
|
||||
"subtitle": "Un administrador de Hotspot para MikroTik moderno y ligero construido para rendimiento y simplicidad.",
|
||||
"manage_routers": "Gestionar Routers",
|
||||
"manage_routers_desc": "Configurar conexiones RouterOS y ver estado.",
|
||||
"source_code": "Código Fuente",
|
||||
"source_code_desc": "Ver el repositorio del proyecto y contribuir.",
|
||||
"quick_access": "Acceso Rápido",
|
||||
"session_name": "Nombre de Sesión",
|
||||
"hotspot_name": "Nombre de Hotspot",
|
||||
"ip_address": "Dirección IP"
|
||||
},
|
||||
"dashboard": {
|
||||
"system_info": "Info del Sistema",
|
||||
"model": "Modelo",
|
||||
"board_name": "Nombre de Placa",
|
||||
"router_os": "RouterOS",
|
||||
"architecture": "Arquitectura",
|
||||
"uptime": "Tiempo de actividad",
|
||||
"resources": "Recursos",
|
||||
"cpu_load": "Carga CPU",
|
||||
"memory": "Memoria",
|
||||
"free": "Libre",
|
||||
"hdd": "HDD",
|
||||
"income_today": "Ingresos Hoy",
|
||||
"traffic_monitor": "Monitor de Tráfico",
|
||||
"rx_download": "Rx (Descarga)",
|
||||
"tx_upload": "Tx (Subida)"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ajustes",
|
||||
"subtitle": "Gestione sus preferencias y configuraciones de la aplicación.",
|
||||
"system": "General",
|
||||
"system_desc": "Configuraciones del sistema y seguridad.",
|
||||
"admin_username": "Usuario Administrador",
|
||||
"admin_username_desc": "Por razones de seguridad, el nombre de usuario administrador no se puede cambiar.",
|
||||
"change_password": "Cambiar Contraseña",
|
||||
"new_password_placeholder": "Ingrese nueva contraseña",
|
||||
"update_password": "Actualizar Contraseña",
|
||||
"quick_print_mode": "Modo Impresión Rápida",
|
||||
"quick_print_mode_desc": "Habilitar impresión directa para generación de cupones.",
|
||||
"save_global": "Guardar Ajustes Globales",
|
||||
"data_management": "Gestión de Datos",
|
||||
"data_management_desc": "Respalde o restaure los datos de su aplicación.",
|
||||
"backup_data": "Respaldar Datos",
|
||||
"backup_data_desc": "Descargue un archivo de configuración (.mivo) que contiene su base de datos y ajustes.",
|
||||
"download_backup": "Descargar Respaldo",
|
||||
"restore_data": "Restaurar Datos",
|
||||
"restore_data_desc": "Suba un archivo de respaldo (.mivo). Sobrescribe o añade a los datos existentes.",
|
||||
"restore": "Restaurar",
|
||||
"warning_restore": "ADVERTENCIA: Esto restaurará la configuración desde el archivo y puede sobrescribir datos existentes. ¿Continuar?",
|
||||
"routers_title": "Routers",
|
||||
"routers_subtitle": "Gestione sus conexiones MikroTik RouterOS.",
|
||||
"add_router": "Añadir Router",
|
||||
"no_routers": "No se encontraron Routers",
|
||||
"connect_first": "Conecte su primer router MikroTik para comenzar a gestionar hotspots y cupones.",
|
||||
"delete_router_title": "¿Eliminar Sesión?",
|
||||
"delete_router_confirm": "¿Está seguro de que desea eliminar <strong>{name}</strong>? Esta acción no se puede deshacer.",
|
||||
"connect": "Conectar",
|
||||
"logos_title": "Logos",
|
||||
"logos_subtitle": "Suba y gestione logotipos para sus hotspots y cupones.",
|
||||
"upload_new_logo": "Subir Nuevo Logo",
|
||||
"drag_drop": "Arrastre y suelte o haga clic para seleccionar archivo",
|
||||
"supports_formats": "Soporta PNG, JPG, SVG, GIF",
|
||||
"no_logos": "No se han subido logotipos todavía.",
|
||||
"id_copied": "ID Copiado",
|
||||
"logo_id_copied_desc": "ID de Logo <strong>{id}</strong> copiado al portapapeles.",
|
||||
"delete_logo_title": "¿Eliminar Logo?",
|
||||
"delete_logo_confirm": "¿Está seguro de que desea eliminar el logo <strong>{id}</strong>?",
|
||||
"templates_title": "Plantillas de Cupones",
|
||||
"templates_subtitle": "Gestione y personalice sus diseños de impresión de cupones.",
|
||||
"new_template": "Nueva Plantilla",
|
||||
"edit_template": "Editar Plantilla",
|
||||
"default_template": "Plantilla Predeterminada",
|
||||
"system_label": "Sistema",
|
||||
"custom_label": "Personalizado",
|
||||
"built_in": "Incorporado",
|
||||
"default_template_desc": "Plantilla estándar amigable con impresoras térmicas.",
|
||||
"delete_template_title": "¿Eliminar Plantilla?",
|
||||
"delete_template_confirm": "¿Está seguro de que desea eliminar <strong>{name}</strong>?",
|
||||
"template_name": "Nombre de Plantilla",
|
||||
"html_source": "Fuente HTML",
|
||||
"docs": "Docs",
|
||||
"live_preview": "Vista Previa",
|
||||
"template_variables": "Variables de Plantilla",
|
||||
"variables_desc": "Use estas variables en su fuente HTML. Serán reemplazadas con datos reales del usuario durante la impresión.",
|
||||
"qr_code": "Código QR",
|
||||
"qr_desc": "Genera un Código QR que contiene la URL de inicio de sesión con usuario y contraseña.",
|
||||
"custom_attributes": "Atributos Personalizados",
|
||||
"examples": "Ejemplos",
|
||||
"api_cors_title": "API CORS",
|
||||
"api_cors_subtitle": "Gestione el Intercambio de Recursos de Origen Cruzado para acceso API.",
|
||||
"add_rule": "Añadir Regla CORS",
|
||||
"edit_rule": "Editar Regla CORS",
|
||||
"origin": "Origen",
|
||||
"methods": "Métodos Permitidos",
|
||||
"headers": "Encabezados Permitidos",
|
||||
"max_age": "Edad Máxima (segundos)",
|
||||
"cpu_warning": "Valores bajos (< 5s) pueden aumentar el uso de CPU en routers antiguos.",
|
||||
"back": "Volver a Ajustes",
|
||||
"editor_shortcuts": "Atajos del Editor & Emmet",
|
||||
"emmet_desc": "Use abreviaciones Emmet para codificar rápido. Busque el subrayado punteado, luego presione Tab.",
|
||||
"tip_emmet_html": "<strong>Plantilla HTML</strong>: Escriba <code>!</code> luego <code>Tab</code>.",
|
||||
"tip_emmet_tag": "<strong>Auto-Etiqueta</strong>: Escriba <code>.container</code> luego <code>Tab</code> para <code><div class=\"container\"></code>.",
|
||||
"tip_color_picker": "<strong>Selector de Color</strong>: Haga clic en el cuadro de color junto a los códigos hex (ej: #ff0000) para abrir el selector.",
|
||||
"tip_syntax_error": "<strong>Error de Sintaxis</strong>: Los garabatos rojos (y puntos en el margen) muestran errores de estructura como etiquetas no cerradas.",
|
||||
"plugins_title": "Plugins",
|
||||
"plugins": "Plugins",
|
||||
"plugins_desc": "Gestione y extienda la funcionalidad con plugins.",
|
||||
"upload_plugin": "Subir Plugin",
|
||||
"upload_plugin_desc": "Seleccione un archivo .zip de plugin para instalar.",
|
||||
"no_plugins": "No hay Plugins Instalados",
|
||||
"no_plugins_desc": "Suba un archivo .zip para comenzar.",
|
||||
"plugin_installed": "Plugin Instalado",
|
||||
"plugin_installed_desc": "El plugin \"{name}\" ha sido instalado exitosamente.",
|
||||
"delete_plugin": "¿Eliminar Plugin?",
|
||||
"delete_plugin_confirm": "¿Está seguro de que desea eliminar el plugin <strong>{name}</strong>? Esto no se puede deshacer.",
|
||||
"install_failed": "Instalación Fallida"
|
||||
},
|
||||
"routers": {
|
||||
"edit_router_title": "Editar Router",
|
||||
"add_router_title": "Añadir Router",
|
||||
"connect_desc": "Conecte Mivo a su dispositivo RouterOS.",
|
||||
"session_settings": "Ajustes de Sesión",
|
||||
"unique_id": "ID Único. Vista previa:",
|
||||
"show_quick_access": "Mostrar en Acceso Rápido (Inicio)",
|
||||
"connection_details": "Detalles de Conexión",
|
||||
"password_hint": "Dejar vacío para mantener la contraseña existente.",
|
||||
"hotspot_info": "Información de Hotspot",
|
||||
"dns_name": "Nombre DNS",
|
||||
"traffic_interface": "Interfaz de Tráfico",
|
||||
"check_btn": "Verificar",
|
||||
"currency": "Moneda",
|
||||
"auto_reload": "Recarga Auto (Seg)",
|
||||
"save_connect": "Guardar & Conectar"
|
||||
},
|
||||
"login": {
|
||||
"welcome": "Bienvenido, por favor inicie sesión para continuar.",
|
||||
"username": "Usuario",
|
||||
"password": "Contraseña",
|
||||
"sign_in": "Iniciar Sesión"
|
||||
},
|
||||
"quick_print": {
|
||||
"title": "Impresión Rápida",
|
||||
"subtitle": "Generación e impresión de cupones instantánea.",
|
||||
"manage": "Gestionar Paquetes",
|
||||
"manage_title": "Gestionar Paquetes",
|
||||
"manage_subtitle": "Configure sus paquetes de cupones de Impresión Rápida para:",
|
||||
"no_packages": "No se encontraron Paquetes",
|
||||
"no_packages_found": "No se encontraron paquetes.",
|
||||
"create_first": "Cree un paquete de Impresión Rápida para comenzar.",
|
||||
"create_package": "Crear Paquete",
|
||||
"add_package": "Añadir Paquete",
|
||||
"edit_package": "Editar Paquete",
|
||||
"save_package": "Guardar Paquete",
|
||||
"delete_package": "Eliminar Paquete",
|
||||
"print_voucher": "Imprimir Cupón",
|
||||
"name": "Nombre",
|
||||
"package_name": "Nombre del Paquete",
|
||||
"profile": "Perfil",
|
||||
"select_profile": "Seleccionar Perfil",
|
||||
"prefix": "Prefijo",
|
||||
"server": "Servidor",
|
||||
"price": "Precio",
|
||||
"selling_price": "Precio de Venta",
|
||||
"time_limit": "Límite de Tiempo",
|
||||
"data_limit": "Límite de Datos",
|
||||
"card_color": "Color de Tarjeta",
|
||||
"char_length": "Longitud de Carácteres",
|
||||
"vouchers_to_generate": "Cupones a Generar",
|
||||
"comment": "Comentario"
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Tablero",
|
||||
"quick_print": "Impresión Rápida",
|
||||
"hotspot": "Hotspot",
|
||||
"status": "Estado",
|
||||
"security": "Seguridad",
|
||||
"reports": "Reportes",
|
||||
"network": "Red",
|
||||
"system": "Sistema",
|
||||
"settings": "Ajustes",
|
||||
"templates": "Plantillas",
|
||||
"disconnect": "Desconectar",
|
||||
"logout": "Salir de Mivo"
|
||||
},
|
||||
"hotspot_active": {
|
||||
"title": "Usuarios Activos",
|
||||
"subtitle": "Monitorear sesiones de hotspot actualmente activas",
|
||||
"filter_server": "Todos los Servidores",
|
||||
"server": "Servidor",
|
||||
"user": "Usuario",
|
||||
"address": "Dirección / MAC",
|
||||
"uptime": "Tiempo activo / Restante",
|
||||
"bytes_in_out": "Bytes Ent/Sal",
|
||||
"time_left": "Queda",
|
||||
"remove": "¿Desconectar Usuario?"
|
||||
},
|
||||
"hotspot_hosts": {
|
||||
"title": "Hosts Hotspot",
|
||||
"subtitle": "Dispositivos conectados a la red hotspot para:",
|
||||
"mac": "Dirección MAC",
|
||||
"address": "Dirección",
|
||||
"to_address": "A Dirección",
|
||||
"server": "Servidor",
|
||||
"comment": "Comentario"
|
||||
},
|
||||
"hotspot_menu": {
|
||||
"users": "Usuarios",
|
||||
"profiles": "Perfiles de Usuario",
|
||||
"generate": "Generar",
|
||||
"cookies": "Cookies",
|
||||
"active": "Activos",
|
||||
"hosts": "Hosts",
|
||||
"bindings": "Enlaces IP",
|
||||
"walled_garden": "Walled Garden"
|
||||
},
|
||||
"reports_menu": {
|
||||
"resume": "Resumen",
|
||||
"selling": "Reporte de Ventas",
|
||||
"user_log": "Registro de Usuario"
|
||||
},
|
||||
"network_menu": {
|
||||
"dhcp": "Concesiones DHCP"
|
||||
},
|
||||
"system_menu": {
|
||||
"scheduler": "Programador",
|
||||
"reboot": "Reiniciar",
|
||||
"shutdown": "Apagar"
|
||||
},
|
||||
"dhcp": {
|
||||
"title": "Concesiones DHCP",
|
||||
"subtitle": "Concesiones DHCP activas para:",
|
||||
"all_servers": "Todos los Servidores",
|
||||
"address": "Dirección",
|
||||
"mac": "Dirección MAC",
|
||||
"server": "Servidor",
|
||||
"status": "Estado",
|
||||
"host": "Nombre de Host"
|
||||
},
|
||||
"cookies": {
|
||||
"title": "Usuarios Hotspot",
|
||||
"subtitle": "Gestione usuarios y cupones",
|
||||
"name": "Nombre",
|
||||
"mac": "Dirección MAC",
|
||||
"ip": "Dirección IP",
|
||||
"expires": "Expira En",
|
||||
"remove_cookie": "¿Eliminar Cookie?",
|
||||
"remove_confirm": "¿Está seguro de que desea eliminar la cookie para {user}?"
|
||||
},
|
||||
"reports": {
|
||||
"selling_title": "Reporte de Ventas",
|
||||
"selling_subtitle": "Resumen de ventas y detalles para:",
|
||||
"user_log_title": "Registro de Usuario",
|
||||
"user_log_subtitle": "Historial de inicio y cierre de sesión para:",
|
||||
"resume_title": "Reporte de Resumen",
|
||||
"resume_subtitle": "Visión general de ingresos agregados.",
|
||||
"total_income": "Ingreso Total",
|
||||
"total_vouchers": "Total Cupones Vendidos",
|
||||
"date_batch": "Fecha / Lote (Comentario)",
|
||||
"qty": "Cant",
|
||||
"total": "Total",
|
||||
"no_data": "No se encontraron datos de ventas.",
|
||||
"time": "Tiempo",
|
||||
"topics": "Temas",
|
||||
"message": "Mensaje",
|
||||
"daily": "Diario",
|
||||
"monthly": "Mensual",
|
||||
"yearly": "Anual",
|
||||
"date": "Fecha",
|
||||
"month": "Mes",
|
||||
"year": "Año",
|
||||
"refresh": "Actualizar",
|
||||
"print_report": "Imprimir Reporte"
|
||||
},
|
||||
"hotspot_profiles": {
|
||||
"title": "Perfiles de Usuario",
|
||||
"subtitle": "Gestione límites de velocidad y precios",
|
||||
"add_profile": "Añadir Perfil",
|
||||
"edit_profile": "Editar Perfil",
|
||||
"all_modes": "Todos los Modos Expirados",
|
||||
"name": "Nombre",
|
||||
"shared_users": "Usuarios Compartidos",
|
||||
"rate_limit": "Límite de Velocidad",
|
||||
"parent_queue": "Cola Padre",
|
||||
"expired_mode": "Modo Expirado",
|
||||
"validity": "Validez",
|
||||
"price": "Precio",
|
||||
"selling_price": "Precio de Venta",
|
||||
"lock_user": "Bloquear Usuario",
|
||||
"form": {
|
||||
"add_title": "Añadir Perfil",
|
||||
"edit_title": "Editar Perfil",
|
||||
"add_subtitle": "Crear un nuevo perfil de usuario hotspot para: {name}",
|
||||
"edit_subtitle": "Editar perfil de usuario hotspot: {name}",
|
||||
"settings": "Ajustes de Perfil",
|
||||
"general": "Ajustes Generales",
|
||||
"limits_queues": "Límites & Colas",
|
||||
"pricing_validity": "Precios & Validez",
|
||||
"address_pool": "Grupo de Direcciones",
|
||||
"rate_limit_help": "Rx/Tx (Subida/Descarga). Ejemplo: 512k/1M",
|
||||
"expired_mode_help": "Acción cuando expira la validez.",
|
||||
"validity_help": "Días / Horas / Minutos",
|
||||
"lock_user_help": "Bloquear usuario a una dirección MAC específica.",
|
||||
"save": "Guardar Perfil",
|
||||
"name_placeholder": "ej. Paquete-1Hora",
|
||||
"quick_tips": "Consejos Rápidos",
|
||||
"tip_rate_limit": "<strong>Límite de Velocidad</strong>: Rx/Tx (Subida/Descarga). Ejemplo: <code>512k/1M</code>",
|
||||
"tip_expired_mode": "<strong>Modo Expirado</strong>: Seleccione 'Eliminar' o 'Aviso' para habilitar Validez.",
|
||||
"tip_parent_queue": "<strong>Cola Padre</strong>: Asigna usuarios a una cola padre específica para gestión de ancho de banda."
|
||||
}
|
||||
},
|
||||
"hotspot_users": {
|
||||
"add_user": "Añadir Usuario",
|
||||
"edit_user": "Editar Usuario",
|
||||
"title": "Usuarios Hotspot",
|
||||
"subtitle": "Gestione usuarios y cupones",
|
||||
"name": "Nombre",
|
||||
"profile": "Perfil",
|
||||
"uptime_limit": "Tiempo activo / Límite",
|
||||
"bytes_in_out": "Bytes Ent/Sal",
|
||||
"comment": "Comentario",
|
||||
"no_users_selected": "No hay usuarios seleccionados.",
|
||||
"form": {
|
||||
"add_title": "Añadir Usuario",
|
||||
"edit_title": "Editar Usuario",
|
||||
"subtitle": "Cuenta de usuario hotspot",
|
||||
"edit_subtitle": "Actualizar detalles de usuario para: {name}",
|
||||
"username": "Usuario",
|
||||
"password": "Contraseña",
|
||||
"profile": "Perfil",
|
||||
"server": "Servidor",
|
||||
"time_limit": "Límite de Tiempo",
|
||||
"data_limit": "Límite de Datos",
|
||||
"comment": "Comentario",
|
||||
"save": "Guardar Usuario",
|
||||
"username_help": "Nombre de usuario único para inicio de sesión.",
|
||||
"password_help": "Contraseña segura.",
|
||||
"profile_help": "El perfil determina el límite de velocidad y política de compartición.",
|
||||
"time_limit_help": "Tiempo total permitido (Días, Horas, Minutos).",
|
||||
"data_limit_help": "Límite de uso de datos (0 para ilimitado).",
|
||||
"comment_help": "Notas adicionales o info de contacto.",
|
||||
"username_placeholder": "ej. cupón123",
|
||||
"password_placeholder": "ej. 123456",
|
||||
"comment_placeholder": "Nota opcional para este usuario",
|
||||
"quick_tips": "Consejos Rápidos",
|
||||
"tip_profiles": "<strong>Perfiles</strong> definen los límites de velocidad predeterminados, tiempo de sesión, y política de compartición.",
|
||||
"tip_time_limit": "<strong>Límite de Tiempo</strong> es el tiempo total acumulado permitido para este usuario.",
|
||||
"tip_data_limit": "<strong>Límite de Datos</strong> anulará la configuración del perfil si se especifica aquí. Ponga 0 para usar el del perfil."
|
||||
}
|
||||
},
|
||||
"hotspot_generate": {
|
||||
"title": "Generar Cupones",
|
||||
"form": {
|
||||
"qty": "Cantidad",
|
||||
"server": "Servidor",
|
||||
"user_mode": "Modo Usuario",
|
||||
"user_length": "Longitud Usuario",
|
||||
"prefix": "Prefijo",
|
||||
"characters": "Caracteres",
|
||||
"profile": "Perfil",
|
||||
"time_limit": "Límite de Tiempo",
|
||||
"data_limit": "Límite de Datos",
|
||||
"comment": "Comentario",
|
||||
"generate": "Generar Cupones",
|
||||
"subtitle": "Crear múltiples cupones hotspot en lote para: {name}",
|
||||
"batch_settings": "Ajustes de Generación por Lote",
|
||||
"core_config": "Configuración Núcleo",
|
||||
"qty_help": "Cantidad de cupones a generar.",
|
||||
"server_help": "Instancia Hotspot objetivo.",
|
||||
"user_mode_help": "Formato de credenciales.",
|
||||
"comment_help": "Nota para este lote.",
|
||||
"user_format": "Formato de Usuario",
|
||||
"name_length_help": "Longitud de usuario/contraseña.",
|
||||
"prefix_placeholder": "ej. VIP-",
|
||||
"prefix_help": "Prefijo para usuarios generados.",
|
||||
"characters_help": "Tipos de caracteres a incluir.",
|
||||
"limits_profile": "Límites & Perfil",
|
||||
"profile_help": "Aplicar límites de velocidad del perfil.",
|
||||
"time_limit_help": "Tiempo máx (ej. 1h, 30m).",
|
||||
"data_limit_help": "Transferencia máx (MB).",
|
||||
"quick_tips": "Consejos Rápidos",
|
||||
"tip_user_mode": "<strong>Modo Usuario</strong>: UP (separado), VC (mismo).",
|
||||
"tip_format_examples": "<strong>Ejemplos de Formato</strong>: abcd (minúsculas), 1234 (num), Mix (mayús/minús/num).",
|
||||
"tip_limits": "<strong>Límites</strong>: Tiempo (ej. 1h, 30m), Datos (ej. 100MB). Dejar vacío para usar predeterminado del perfil."
|
||||
}
|
||||
},
|
||||
"security": {
|
||||
"bindings": {
|
||||
"title": "Enlaces IP",
|
||||
"subtitle": "Gestione enlaces IP (bypass/bloqueado) para: {name}",
|
||||
"all_types": "Todos los Tipos",
|
||||
"regular": "Regular",
|
||||
"bypassed": "Bypassed",
|
||||
"blocked": "Bloqueado",
|
||||
"table": {
|
||||
"mac": "Dirección MAC",
|
||||
"address": "Dirección",
|
||||
"to_address": "A Dirección",
|
||||
"type": "Tipo",
|
||||
"comment": "Comentario"
|
||||
},
|
||||
"form": {
|
||||
"add_title": "Añadir Enlace",
|
||||
"mac_address": "Dirección MAC",
|
||||
"address": "Dirección",
|
||||
"to_address": "A Dirección",
|
||||
"type": "Tipo",
|
||||
"server": "Servidor",
|
||||
"comment": "Comentario",
|
||||
"mac_help": "Dirección MAC del dispositivo.",
|
||||
"address_help": "Dirección IP (opcional).",
|
||||
"to_address_help": "Traducir a esta IP (opcional).",
|
||||
"server_help": "Aplicar a servidor Hotspot específico.",
|
||||
"comment_help": "Nota para este enlace.",
|
||||
"save": "Guardar & Enlazar",
|
||||
"tip_bypassed": "<strong>Bypassed</strong>: Acceso sin login.",
|
||||
"tip_blocked": "<strong>Bloqueado</strong>: Denegar acceso completamente.",
|
||||
"tip_regular": "<strong>Regular</strong>: Cliente hotspot normal."
|
||||
}
|
||||
},
|
||||
"walled_garden": {
|
||||
"title": "Walled Garden",
|
||||
"subtitle": "Gestione destinos permitidos (bypass sin login) para: {name}",
|
||||
"all_actions": "Todas las Acciones",
|
||||
"allow": "Permitir",
|
||||
"deny": "Denegar",
|
||||
"table": {
|
||||
"host_ip": "Host / IP Dest",
|
||||
"proto_port": "Protocolo / Puerto",
|
||||
"action": "Acción",
|
||||
"comment": "Comentario"
|
||||
},
|
||||
"form": {
|
||||
"add_title": "Añadir Entrada",
|
||||
"action": "Acción",
|
||||
"dst_host": "Host Dest (Dominio)",
|
||||
"dst_address": "Dirección Dest (IP)",
|
||||
"protocol": "Protocolo",
|
||||
"dst_port": "Puerto Dest",
|
||||
"server": "Servidor",
|
||||
"comment": "Comentario",
|
||||
"host_help": "Dominio a permitir (comodín soportado).",
|
||||
"addr_help": "Dirección IP Destino.",
|
||||
"action_help": "Permitir (bypass) o Denegar acceso.",
|
||||
"server_help": "Aplicar a servidor Hotspot específico.",
|
||||
"comment_help": "Nota para esta regla.",
|
||||
"save": "Guardar Entrada",
|
||||
"tip_host": "<strong>Host Dest</strong>: Nombre de dominio (ej. <code>*.google.com</code>).",
|
||||
"tip_ip": "<strong>IP Dest</strong>: Dirección IP específica.",
|
||||
"tip_action": "<strong>Acción</strong>: Permitir para saltar autenticación."
|
||||
}
|
||||
}
|
||||
},
|
||||
"system_tools": {
|
||||
"scheduler_subtitle": "Gestione tareas automatizadas de RouterOS para:",
|
||||
"add_task": "Añadir Tarea",
|
||||
"add_title": "Añadir Tarea",
|
||||
"edit_title": "Editar Tarea",
|
||||
"save_task": "Guardar Tarea",
|
||||
"update_task": "Actualizar Tarea",
|
||||
"delete_task": "Eliminar Tarea",
|
||||
"table_name": "Nombre",
|
||||
"name": "Nombre",
|
||||
"interval": "Intervalo",
|
||||
"next_run": "Próxima Ejecución",
|
||||
"status": "Estado",
|
||||
"enabled": "Habilitado",
|
||||
"disabled": "Deshabilitado",
|
||||
"start_date": "Fecha Inicio",
|
||||
"start_time": "Hora Inicio",
|
||||
"on_event": "En Evento (Script)",
|
||||
"comment": "Comentario"
|
||||
},
|
||||
"toasts": {
|
||||
"profile_created": "Perfil Creado",
|
||||
"profile_created_desc": "El perfil de usuario \"{name}\" ha sido creado exitosamente.",
|
||||
"profile_updated": "Perfil Actualizado",
|
||||
"profile_updated_desc": "Cambios al perfil \"{name}\" han sido guardados.",
|
||||
"profile_deleted": "Perfil Eliminado",
|
||||
"profile_deleted_desc": "El perfil de usuario ha sido eliminado.",
|
||||
"user_added": "Usuario Añadido",
|
||||
"user_added_desc": "Usuario hotspot \"{name}\" ha sido creado.",
|
||||
"user_deleted": "Usuario(s) Eliminado(s)",
|
||||
"user_deleted_desc": "Los usuarios hotspot seleccionados han sido eliminados.",
|
||||
"user_updated": "Usuario Actualizado",
|
||||
"user_updated_desc": "Cambios al usuario \"{name}\" han sido guardados.",
|
||||
"session_removed": "Sesión Eliminada",
|
||||
"session_removed_desc": "La sesión hotspot activa ha sido terminada.",
|
||||
"binding_added": "Enlace Añadido",
|
||||
"binding_added_desc": "El enlace IP ha sido creado exitosamente.",
|
||||
"binding_removed": "Enlace Eliminado",
|
||||
"binding_removed_desc": "El enlace IP ha sido eliminado.",
|
||||
"rule_added": "Regla Añadida",
|
||||
"rule_added_desc": "La regla Walled Garden ha sido añadida.",
|
||||
"rule_removed": "Regla Eliminada",
|
||||
"rule_removed_desc": "La regla Walled Garden ha sido eliminada.",
|
||||
"cookie_removed": "Cookie Eliminada",
|
||||
"cookie_removed_desc": "La cookie hotspot ha sido borrada.",
|
||||
"package_saved": "Paquete Guardado",
|
||||
"package_saved_desc": "El paquete de impresión rápida ha sido actualizado.",
|
||||
"package_deleted": "Paquete Eliminado",
|
||||
"package_deleted_desc": "El paquete de impresión rápida ha sido eliminado.",
|
||||
"vouchers_generated": "Cupones Generados",
|
||||
"vouchers_generated_desc": "{qty} usuarios han sido creados exitosamente.",
|
||||
"schedule_added": "Programación Añadida",
|
||||
"schedule_added_desc": "La tarea ha sido programada.",
|
||||
"schedule_updated": "Programación Actualizada",
|
||||
"schedule_updated_desc": "Cambios a la tarea han sido guardados.",
|
||||
"schedule_deleted": "Programación Eliminada",
|
||||
"schedule_deleted_desc": "La tarea programada ha sido eliminada.",
|
||||
"router_added": "Router Añadido",
|
||||
"router_added_desc": "La sesión {name} ha sido creada.",
|
||||
"router_updated": "Router Actualizado",
|
||||
"router_updated_desc": "Ajustes para {name} han sido guardados.",
|
||||
"router_deleted": "Router Eliminado",
|
||||
"router_deleted_desc": "La sesión ha sido eliminada.",
|
||||
"password_updated": "Contraseña Actualizada",
|
||||
"password_updated_desc": "La contraseña de administrador ha sido cambiada.",
|
||||
"settings_saved": "Ajustes Guardados",
|
||||
"settings_saved_desc": "Preferencias globales han sido actualizadas.",
|
||||
"restore_success": "Restauración Exitosa",
|
||||
"restore_success_desc": "Sesiones y ajustes han sido restaurados desde el respaldo.",
|
||||
"restore_failed": "Restauración Fallida",
|
||||
"no_file_selected": "Ningún archivo de respaldo seleccionado.",
|
||||
"invalid_file_type": "Tipo de archivo inválido. Por favor suba un archivo .mivo o .json.",
|
||||
"invalid_file_type_mivo": "Tipo de archivo inválido. Por favor suba un archivo .mivo.",
|
||||
"file_empty": "El archivo subido está vacío.",
|
||||
"file_corrupted": "El archivo está corrupto o no es un respaldo Mivo válido.",
|
||||
"logo_uploaded": "Logo Subido",
|
||||
"logo_uploaded_desc": "Nuevo logo ha sido añadido exitosamente.",
|
||||
"logo_deleted": "Logo Eliminado",
|
||||
"logo_deleted_desc": "El logo ha sido eliminado.",
|
||||
"template_created": "Plantilla Creada",
|
||||
"template_created_desc": "Plantilla de cupón \"{name}\" ha sido añadida.",
|
||||
"template_updated": "Plantilla Actualizada",
|
||||
"template_updated_desc": "Cambios a \"{name}\" han sido guardados.",
|
||||
"template_deleted": "Plantilla Eliminada",
|
||||
"template_deleted_desc": "La plantilla ha sido eliminada.",
|
||||
"test_alert": "Prueba Alerta Mivo",
|
||||
"test_alert_desc": "Si ve esto, ¡el nuevo sistema de alertas funciona perfectamente! 🚀",
|
||||
"cors_rule_added": "Regla CORS Añadida",
|
||||
"cors_rule_added_desc": "La regla CORS para {origin} ha sido creada.",
|
||||
"cors_rule_updated": "Regla CORS Actualizada",
|
||||
"cors_rule_updated_desc": "Cambios a la regla CORS para {origin} han sido guardados.",
|
||||
"cors_rule_deleted": "Regla CORS Eliminada",
|
||||
"cors_rule_deleted_desc": "La regla CORS ha sido eliminada.",
|
||||
"plugin_deleted": "Plugin Eliminado",
|
||||
"plugin_deleted_desc": "El plugin ha sido eliminado exitosamente.",
|
||||
"upload_failed": "Fallo al Subir",
|
||||
"install_failed": "Instalación Fallida",
|
||||
"invalid_plugin_desc": "Estructura de plugin inválida: plugin.php no encontrado.",
|
||||
"zip_open_failed_desc": "Fallo al abrir el archivo zip subido."
|
||||
},
|
||||
"status": {
|
||||
"check_title": "Verificar Estado de Cupón",
|
||||
"check_desc": "Monitoree su uso de datos y validez de cupón en tiempo real sin necesidad de volver a iniciar sesión.",
|
||||
"voucher_code_label": "Código de Cupón",
|
||||
"voucher_code_placeholder": "Ej: QWASZX",
|
||||
"code_placeholder": "Ej: QWASZX",
|
||||
"check_now": "Verificar Ahora",
|
||||
"details_title": "Detalles del Cupón",
|
||||
"code": "Código de Cupón",
|
||||
"data_remaining": "Datos Restantes",
|
||||
"used": "Usado",
|
||||
"package": "Paquete",
|
||||
"validity": "Validez",
|
||||
"uptime": "Tiempo activo",
|
||||
"expires": "Expira",
|
||||
"not_found_title": "Cupón No Encontrado",
|
||||
"not_found_desc": "El código de cupón que ingresó no existe.",
|
||||
"try_again": "Intentar de Nuevo"
|
||||
},
|
||||
"errors": {
|
||||
"404_title": "Página No Encontrada",
|
||||
"404_desc": "La página que busca podría haber sido eliminada, cambiado de nombre, o no está disponible temporalmente.",
|
||||
"403_title": "Acceso Denegado",
|
||||
"403_desc": "Usted no tiene permiso para acceder a este recurso.",
|
||||
"500_title": "Error del Servidor",
|
||||
"500_desc": "Algo salió mal por nuestra parte. Por favor intente de nuevo más tarde.",
|
||||
"503_title": "Servicio No Disponible",
|
||||
"503_desc": "El servidor no puede manejar la solicitud actualmente debido a mantenimiento o sobrecarga.",
|
||||
"router_not_found_title": "Router No Encontrado",
|
||||
"router_not_found_desc": "La sesión de router que intenta acceder no existe o ha sido eliminada.",
|
||||
"return_home": "Volver a Inicio",
|
||||
"go_back": "Retroceder"
|
||||
}
|
||||
}
|
||||
38
plugin.php
Normal file
38
plugin.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* Plugin Name: Spanish Language Pack
|
||||
* Description: Adds Spanish (Español) language support to Mivo.
|
||||
* Version: 1.0.0
|
||||
* Author: DyzulkDev
|
||||
*
|
||||
* Category: Language Pack
|
||||
* Scope: Global
|
||||
* Tags: language, spanish, es, localization
|
||||
* Core Version: >= 1.2.0
|
||||
*/
|
||||
|
||||
use App\Core\Hooks;
|
||||
|
||||
Hooks::addFilter('get_available_languages', function($languages) {
|
||||
$languages[] = [
|
||||
'code' => 'es',
|
||||
'name' => 'Español',
|
||||
'flag' => 'es', // Correct ISO code
|
||||
'path' => '/lang/plugin/plugin-lang-es/es.json'
|
||||
];
|
||||
return $languages;
|
||||
});
|
||||
|
||||
// Register Route for Language File
|
||||
Hooks::addAction('router_init', function(\App\Core\Router $router) {
|
||||
$router->get('/lang/plugin/plugin-lang-es/es.json', function() {
|
||||
$path = __DIR__ . '/es.json';
|
||||
if (file_exists($path)) {
|
||||
header('Content-Type: application/json');
|
||||
readfile($path);
|
||||
exit;
|
||||
}
|
||||
http_response_code(404);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user