feat(i18n): add Spanish language support and update language selector components

This commit is contained in:
Manu 2025-04-29 17:31:24 +02:00
parent a67ea284a7
commit 645a1e796f
9 changed files with 228 additions and 4 deletions

View File

@ -71,7 +71,7 @@ export async function generateMetadata(
// export async function generateStaticParams() { // export async function generateStaticParams() {
// const posts = await getPosts(); // const posts = await getPosts();
// const locales = ["en", "fr", "zh-Hans"]; // const locales = ["en", "fr", "es", "zh-Hans"];
// return posts.flatMap((post) => // return posts.flatMap((post) =>
// locales.map((locale) => ({ // locales.map((locale) => ({

View File

@ -92,7 +92,7 @@ export function Footer() {
<Select <Select
onValueChange={(locale) => { onValueChange={(locale) => {
router.replace("/", { router.replace("/", {
locale: locale as "en" | "zh-Hans", locale: locale as "en" | "zh-Hans" | "fr" | "es",
}); });
}} }}
value={locale} value={locale}
@ -109,6 +109,7 @@ export function Footer() {
<SelectContent> <SelectContent>
<SelectItem value="en">{t("navigation.i18nEn")}</SelectItem> <SelectItem value="en">{t("navigation.i18nEn")}</SelectItem>
<SelectItem value="fr">{t("navigation.i18nFr")}</SelectItem> <SelectItem value="fr">{t("navigation.i18nFr")}</SelectItem>
<SelectItem value="es">{t("navigation.i18nEs")}</SelectItem>
<SelectItem value="zh-Hans"> <SelectItem value="zh-Hans">
{t("navigation.i18nZh-Hans")} {t("navigation.i18nZh-Hans")}
</SelectItem> </SelectItem>

View File

@ -3,7 +3,7 @@ import { defineRouting } from "next-intl/routing";
export const routing = defineRouting({ export const routing = defineRouting({
// A list of all locales that are supported // A list of all locales that are supported
locales: ["en", "fr", "zh-Hans"], locales: ["en", "fr", "es", "zh-Hans"],
// Used when no locale matches // Used when no locale matches
defaultLocale: "en", defaultLocale: "en",

View File

@ -11,6 +11,7 @@
"i18nButtonPlaceholder": "Language", "i18nButtonPlaceholder": "Language",
"i18nFr": "Français", "i18nFr": "Français",
"i18nEn": "English", "i18nEn": "English",
"i18nEs": "Español",
"i18nZh-Hans": "简体中文", "i18nZh-Hans": "简体中文",
"blog": "Blog", "blog": "Blog",
"home": "Home", "home": "Home",

View File

@ -0,0 +1,219 @@
{
"HomePage": {
"navigation": {
"features": "Características",
"faqs": "Preguntas frecuentes",
"docs": "Documentación",
"pricing": "Precios",
"support": "Soporte",
"dashboard": "Acceder",
"discord": "Discord",
"i18nButtonPlaceholder": "Lenguaje",
"i18nFr": "Français",
"i18nEn": "English",
"i18nEs": "Español",
"i18nZh-Hans": "简体中文",
"blog": "Blog",
"home": "Inicio",
"login": "Iniciar sesión",
"register": "Registro"
},
"hero": {
"cloud": "Introduciendo Dokploy Cloud",
"deploy": "Despliegue",
"anywhere": "en Cualquier lugar",
"with": "con Total Libertad y Facilidad.",
"des": "Simplifique sus operaciones con nuestra plataforma en un solo lugar — perfecta para gestionar proyectos, datos y salud del sistema con simplicidad y eficiencia.",
"featuredIn": "Destacado en",
"sponsors": {
"title": "Patrocinadores",
"description": "Dokploy es un proyecto de código abierto que es mantenido por una comunidad de voluntarios. Gracias a nuestros patrocinadores por su apoyo y contribuciones al proyecto, esto nos ayuda a continuar desarrollando y mejorando Dokploy.",
"level": {
"hero": "Patrocinadores Hero",
"premium": "Patrocinadores Premium",
"supporting": "Miembros de Apoyo",
"community": "Comunidad",
"organizations": "Organizaciones",
"individuals": "Individuos"
}
}
},
"primaryFeatures": {
"title": "Control integral para tu ecosistema digital.",
"des": "Simplifica la gestión de tus proyectos y datos, garantiza una supervisión robusta y asegura tus copias de seguridad, todo sin complicaciones ni preocuparte por los mínimos detalles.",
"projects": "Proyectos",
"templates": "Plantillas",
"templatesDes": "En un solo clic puedes desplegar plantillas de código abierto.",
"logs": "Registros",
"logsDes": "Supervisa y gestiona los registros de tus aplicaciones con facilidad, garantizando una resolución de problemas eficiente y un rendimiento óptimo.",
"projectsDes": "Gestiona y organiza todos tus proyectos en un solo lugar, manteniendo un seguimiento detallado del progreso y la asignación de recursos.",
"applications": "Aplicaciones & Bases de datos",
"applicationsDes": "Centraliza el control de tus aplicaciones y bases de datos para mejorar la seguridad y la eficiencia, simplificando el acceso y la gestión en toda tu infraestructura.",
"compose": "Docker Compose",
"composeDes": "Centraliza el control de tus aplicaciones y bases de datos para mejorar la seguridad y la eficiencia, simplificando el acceso y la gestión en toda tu infraestructura.",
"multiserver": "Multiservidor",
"multiserverDes": "Despliega aplicaciones en múltiples servidores sin esfuerzo.",
"monitoring": "Supervisión",
"monitoringDes": "Supervisa el rendimiento y la salud de tus sistemas en tiempo real, garantizando una operación continua e ininterrumpida.",
"backups": "Copias de seguridad",
"backupsDes": "Implementa soluciones de copia de seguridad automáticas y seguras para proteger tus datos críticos y restaurarlos rápidamente cuando sea necesario.",
"traefik": "Traefik",
"traefikDes": "Gestiona Traefik mediante el Editor de Archivos para configurar tus propios nombres de dominio, certificados y mucho más."
},
"secondaryFeatures": {
"title": "Herramientas de Gestión Avanzadas",
"des": "Eleva tu infraestructura con herramientas que ofrecen control preciso, supervisión detallada y mayor seguridad, garantizando una gestión fluida y un rendimiento sólido.",
"templates": "Plantillas de Código Abierto",
"templatesSummary": "En un solo clic puedes desplegar plantillas de código abierto.",
"templatesDes": "Despliega plantillas de código abierto con un solo clic, impulsadas por Docker Compose (Plausible, Calcom, Pocketbase, etc.).",
"traefik": "Configuración de Traefik en Tiempo Real",
"traefikSummary": "Modifica la configuración de Traefik al instante mediante una interfaz gráfica o una API.",
"traefikDes": "Los usuarios pueden ajustar la configuración de Traefik, incluyendo middleware, reglas de reenvío y certificados SSL, a través de una interfaz intuitiva o una API. Esta funcionalidad permite realizar ajustes en el enrutamiento del tráfico y la seguridad sin necesidad de reiniciar los servicios.",
"users": "Gestión de Permisos de Usuario",
"usersSummary": "Control detallado sobre los permisos de usuario para acceder y gestionar proyectos y servicios.",
"usersDes": "Permite a los administradores definir roles y permisos específicos para cada usuario, incluyendo la capacidad de crear, modificar o eliminar aplicaciones y bases de datos. Esta funcionalidad garantiza una gestión segura y eficiente de equipos grandes y diversos.",
"terminal": "Acceso a la Terminal",
"terminalSummary": "Acceso directo a la terminal de cada contenedor y servidor para una gestión avanzada.",
"terminalDes": "Proporciona una interfaz para acceder a la línea de comandos de cualquier contenedor activo, permitiendo a los desarrolladores ejecutar comandos, gestionar servicios y solucionar problemas directamente desde el panel de control."
},
"callToAction": {
"title": "Desbloquea tu potencial de despliegue con Dokploy Cloud.",
"des": "Despídete de las complicaciones de infraestructura—Dokploy Cloud lo gestiona todo. Despliega y gestiona contenedores Docker sin esfuerzo y asegura tu tráfico con Traefik. Tú céntrate en construir, nosotros nos encargamos del resto.",
"button": "Comenzar Ahora"
},
"faq": {
"title": "Preguntas frecuentes",
"des": "Si no encuentras lo que estás buscando, por favor envía un problema a través de nuestro repositorio de GitHub o haz tus preguntas en nuestro Discord.",
"q1": "¿Qué es Dokploy?",
"a1": "Dokploy es una solución de despliegue estable y fácil de usar, diseñada para simplificar el proceso de gestión de aplicaciones. Piensa en Dokploy como una alternativa gratuita y autohospedable a plataformas como Heroku, Vercel y Netlify.",
"q2": "¿Por qué usar Dokploy?",
"a2": "Dokploy ofrece simplicidad, flexibilidad y rapidez en el despliegue y la gestión de aplicaciones.",
"q4": "¿Dokploy es de código abierto?",
"a4": "Sí, Dokploy es de código abierto y gratuito.",
"q5": "¿Qué tipos de lenguajes puedo desplegar con Dokploy?",
"a5": "Dokploy no restringe lenguajes de programación. Puedes elegir el lenguaje y el framework que prefieras.",
"q6": "¿Cómo puedo solicitar una característica o reportar un error?",
"a6": "Para solicitar una característica o reportar un error, por favor crea un problema en nuestro repositorio de GitHub o haz preguntas en nuestro Discord.",
"q7": "¿Se rastrea el uso de Dokploy?",
"a7": "No, no rastreamos ningún dato de uso.",
"q8": "¿Hay foros o comunidades donde pueda interactuar con otros usuarios?",
"a8": "Sí, tenemos discusiones activas en GitHub y Discord donde puedes compartir ideas, solicitar ayuda y conectarte con otros usuarios.",
"q9": "¿Qué tipos de aplicaciones puedo desplegar con Dokploy?",
"a9": "Puedes desplegar cualquier aplicación que pueda ser Dockerizada, sin limites. Dokploy soporta builds desde repositorios Git, Dockerfiles, Nixpacks y Buildpacks como Heroku y Paketo.",
"q10": "¿Cómo gestiona Dokploy el manejo de bases de datos?",
"a10": "Dokploy soporta múltiples sistemas de base de datos, incluyendo Postgres, MySQL, MariaDB, MongoDB y Redis, proporcionando herramientas para despliegue, gestión y copias de seguridad directamente desde el panel de control.",
"q11": "¿Cómo funciona el plan de código abierto de Dokploy?",
"a11": "Puedes hospedar la UI de Dokploy en tu propia infraestructura, tu serás responsable del mantenimiento y las actualizaciones.",
"q12": "¿Necesito proporcionar mi propio servidor para el plan gestionado?",
"a12": "Sí, en el plan gestionado, proporcionas tu propio servidor, por ejemplo: (Hetzner, Hostinger, AWS, ETC.) VPS, y gestionamos la infraestructura de la UI de Dokploy para ti.",
"q13": "¿Qué sucede si necesito más de un servidor?",
"a13": "El primer servidor cuesta $4.50/mes, si compras más de uno, será $3.50/mes por servidor.",
"q14": "¿Hay un límite en el número de despliegues?",
"a14": "No, no hay límite en el número de despliegues en ningún plan.",
"q15": "¿Qué sucede si excedo el límite de servidor comprado?",
"a15": "Los servidores recientemente agregados se desactivarán. No podrás crear servicios en servidores inactivos hasta que se reactiven.",
"q16": "¿Ofrecen reembolsos?",
"a16": "No, no ofrecemos reembolsos. Sin embargo, puedes cancelar tu suscripción en cualquier momento. ¡Sienteté libre de probar nuestra versión de código abierto antes de hacer un pedido!",
"q17": "¿Qué tipo de soporte ofrecéis?",
"a17": "Ofrecemos soporte comunitario para la versión de código abierto y soporte de prioridad para los planes de pago (a través de Discord o Email a support@dokploy.com).",
"q18": "¿Qué sucede con el plan de pago?",
"a18": "Nada, solo vinculas tu servidor(VPS) a tu cuenta y puedes desplegar aplicaciones, bases de datos y usuarios ilimitados y obtienes actualizaciones, despliegues, copias de seguridad y más."
},
"footer": {
"copyright": "Copyright © {year} Dokploy. Todos los derechos reservados."
}
},
"404": {
"title": "Oops! Parece que te has perdido.",
"des": "Vamos a ponerte de nuevo en el camino",
"action": "home"
},
"Link": {
"docs": {
"intro": "https://docs.dokploy.com/docs/core",
"install": "https://docs.dokploy.com/docs/core/installation"
}
},
"Pricing": {
"swirlyDoodleTitle": "Simple & Asequible,",
"restTitle": "Precios.",
"description": "Despliegue Inteligente, Escalado Rápido Sin Arruinarse",
"billingCycle": {
"monthly": "Mensual",
"annual": "Anual"
},
"plan": {
"free": {
"title": "Gratis",
"subTitle": "Código Abierto",
"section": {
"title": "Dokploy es de Código Abierto",
"description": "Gestiona tu propia infraestructura, instalando Dokploy UI en tu propio servidor."
},
"features": {
"f1": "Flexibilidad Total: Instala Dokploy UI en tu propia infraestructura",
"f2": "Infraestructura autohospedada",
"f3": "Soporte comunitario",
"f4": "Acceso a características básicas",
"f5": "Acceso a todas las actualizaciones",
"f9": "Servidores ilimitados"
},
"go": "Instalación"
},
"cloud": {
"title": "Recomendado",
"section": {
"title": "Dokploy Plan",
"description": "Gestionamos la infraestructura de la UI de Dokploy por ti."
},
"servers": "{serverQuantity} Servidores (Tienes que proporcionar los servidores)",
"features": {
"f1": "Gestión de Hosting: No tienes que preocuparte por la gestión de los servidores",
"f2": "Despliegues ilimitados",
"f3": "Bases de datos ilimitadas",
"f4": "Aplicaciones ilimitadas",
"f5": "Usuarios ilimitados",
"f6": "Monitoreo de servidores remotos",
"f7": "Soporte prioritario",
"f8": "Nuevas actualizaciones"
},
"go": "Suscribirme"
}
},
"faq": {
"title": "Preguntas Frecuentes",
"description": "Si no encuentras lo que estás buscando, por favor envía un problema a través de nuestro repositorio de GitHub o haz preguntas en nuestro Discord.",
"q1": "¿Cómo funciona el plan de código abierto de Dokploy?",
"a1": "Puedes hospedar la UI de Dokploy en tu propia infraestructura, tu serás responsable del mantenimiento y las actualizaciones.",
"q2": "¿Necesito proporcionar mi propio servidor para el plan gestionado?",
"a2": "Sí, en el plan gestionado, proporcionas tu propio servidor, por ejemplo: (Hetzner, Hostinger, AWS, ETC.) VPS, y gestionamos la infraestructura de la UI de Dokploy para ti.",
"q3": "¿Qué sucede si necesito más de un servidor?",
"a3": "El primer servidor cuesta $4.50/mes, si compras más de uno, será $3.50/mes por servidor.",
"q4": "¿Hay un límite en el número de despliegues?",
"a4": "No, no hay límite en el número de despliegues en ningún plan.",
"q5": "¿Qué sucede si excedo el límite de servidor comprado?",
"a5": "Los servidores recientemente agregados se desactivarán. No podrás crear servicios en servidores inactivos hasta que se reactiven.",
"q6": "¿Ofrecen reembolsos?",
"a6": "No, no ofrecemos reembolsos. Sin embargo, puedes cancelar tu suscripción en cualquier momento. ¡Sienteté libre de probar nuestra versión de código abierto antes de hacer un pedido!",
"q7": "¿Qué tipo de soporte ofrecéis?",
"a7": "Ofrecemos soporte comunitario para la versión de código abierto y soporte de prioridad para los planes de pago (a través de Discord o Email a support@dokploy.com).",
"q8": "¿Qué sucede con el plan de pago?",
"a8": "Nada, solo vinculas tu servidor(VPS) a tu cuenta y puedes desplegar aplicaciones, bases de datos y usuarios ilimitados y obtienes actualizaciones, despliegues, copias de seguridad y más."
}
},
"blog": {
"title": "Blog",
"description": "Noticias, actualizaciones y artículos de Dokploy",
"noPosts": "No hay publicaciones disponibles",
"noResults": "No se encontraron publicaciones que coincidan con tus criterios",
"searchPlaceholder": "Buscar publicaciones...",
"allTags": "Todas las etiquetas",
"relatedPosts": "Publicaciones Relacionadas",
"tagDescription": "Publicaciones etiquetadas con",
"foundPosts": "{count, plural, =0 {No posts found} one {# post found} other {# posts found}}",
"tagTitle": "Publicaciones etiquetadas con {tag}",
"backToBlog": "Volver al Blog",
"tags": "Etiquetas",
"postsTaggedWith": "Publicaciones etiquetadas con"
}
}

View File

@ -11,6 +11,7 @@
"i18nButtonPlaceholder": "Langue", "i18nButtonPlaceholder": "Langue",
"i18nFr": "Français", "i18nFr": "Français",
"i18nEn": "English", "i18nEn": "English",
"i18nEs": "Español",
"i18nZh-Hans": "简体中文", "i18nZh-Hans": "简体中文",
"blog": "Blog", "blog": "Blog",
"home": "Accueil", "home": "Accueil",

View File

@ -11,6 +11,7 @@
"i18nButtonPlaceholder": "语言", "i18nButtonPlaceholder": "语言",
"i18nFr": "Français", "i18nFr": "Français",
"i18nEn": "English", "i18nEn": "English",
"i18nEs": "Español",
"i18nZh-Hans": "简体中文", "i18nZh-Hans": "简体中文",
"blog": "博客", "blog": "博客",
"home": "首页", "home": "首页",

View File

@ -1,7 +1,7 @@
import createMiddleware from "next-intl/middleware"; import createMiddleware from "next-intl/middleware";
export default createMiddleware({ export default createMiddleware({
locales: ["en", "fr", "zh-Hans"], locales: ["en", "fr", "es", "zh-Hans"],
// Used when no locale matches // Used when no locale matches
defaultLocale: "en", defaultLocale: "en",

View File

@ -467,6 +467,7 @@
|-- locales |-- locales
|-- en.json |-- en.json
|-- fr.json |-- fr.json
|-- es.json
|-- zh-Hans.json |-- zh-Hans.json
|-- middleware.ts |-- middleware.ts
|-- next-env.d.ts |-- next-env.d.ts