import type { SupportedLanguage, Translation } from '@avanzacast/shared-types'; const LANGUAGE_KEY = 'avanzacast_language'; // Traducciones por idioma const translations: Record = { es: { common: { login: 'Iniciar sesión', logout: 'Cerrar sesión', register: 'Registrarse', email: 'Correo electrónico', password: 'Contraseña', name: 'Nombre', save: 'Guardar', cancel: 'Cancelar', delete: 'Eliminar', edit: 'Editar', loading: 'Cargando...', error: 'Error', success: 'Éxito', }, nav: { home: 'Inicio', features: 'Características', pricing: 'Precios', contact: 'Contacto', dashboard: 'Panel', broadcasts: 'Transmisiones', studio: 'Estudio', settings: 'Configuración', }, landing: { hero_title: 'La manera más sencilla de transmitir en vivo y grabar', hero_subtitle: 'AvanzaCast es un estudio profesional para grabar y hacer transmisiones en vivo desde tu navegador', get_started: 'Empecemos', continue_google: 'Continuar con Google', features_title: 'Todo lo que necesitas para transmitir', testimonials_title: 'transmisiones realizadas', }, auth: { login_title: 'Inicia sesión en tu cuenta', register_title: 'Crea tu cuenta', forgot_password: '¿Olvidaste tu contraseña?', no_account: '¿No tienes cuenta?', already_account: '¿Ya tienes cuenta?', terms_accept: 'Al continuar, aceptas nuestros', terms_service: 'Términos de Servicio', privacy_policy: 'Política de Privacidad', }, }, en: { common: { login: 'Log in', logout: 'Log out', register: 'Sign up', email: 'Email', password: 'Password', name: 'Name', save: 'Save', cancel: 'Cancel', delete: 'Delete', edit: 'Edit', loading: 'Loading...', error: 'Error', success: 'Success', }, nav: { home: 'Home', features: 'Features', pricing: 'Pricing', contact: 'Contact', dashboard: 'Dashboard', broadcasts: 'Broadcasts', studio: 'Studio', settings: 'Settings', }, landing: { hero_title: 'The easiest way to live stream and record', hero_subtitle: 'AvanzaCast is a professional studio for recording and live streaming from your browser', get_started: 'Get started', continue_google: 'Continue with Google', features_title: 'Everything you need to broadcast', testimonials_title: 'streams created', }, auth: { login_title: 'Log in to your account', register_title: 'Create your account', forgot_password: 'Forgot password?', no_account: "Don't have an account?", already_account: 'Already have an account?', terms_accept: 'By continuing, you agree to our', terms_service: 'Terms of Service', privacy_policy: 'Privacy Policy', }, }, pt: { common: { login: 'Entrar', logout: 'Sair', register: 'Cadastrar', email: 'E-mail', password: 'Senha', name: 'Nome', save: 'Salvar', cancel: 'Cancelar', delete: 'Excluir', edit: 'Editar', loading: 'Carregando...', error: 'Erro', success: 'Sucesso', }, nav: { home: 'Início', features: 'Recursos', pricing: 'Preços', contact: 'Contato', dashboard: 'Painel', broadcasts: 'Transmissões', studio: 'Estúdio', settings: 'Configurações', }, landing: { hero_title: 'A maneira mais fácil de transmitir ao vivo e gravar', hero_subtitle: 'AvanzaCast é um estúdio profissional para gravar e fazer transmissões ao vivo do seu navegador', get_started: 'Começar', continue_google: 'Continuar com Google', features_title: 'Tudo que você precisa para transmitir', testimonials_title: 'transmissões realizadas', }, auth: { login_title: 'Entre na sua conta', register_title: 'Crie sua conta', forgot_password: 'Esqueceu a senha?', no_account: 'Não tem uma conta?', already_account: 'Já tem uma conta?', terms_accept: 'Ao continuar, você concorda com nossos', terms_service: 'Termos de Serviço', privacy_policy: 'Política de Privacidade', }, }, fr: { common: { login: 'Se connecter', logout: 'Se déconnecter', register: "S'inscrire", email: 'E-mail', password: 'Mot de passe', name: 'Nom', save: 'Enregistrer', cancel: 'Annuler', delete: 'Supprimer', edit: 'Modifier', loading: 'Chargement...', error: 'Erreur', success: 'Succès', }, nav: { home: 'Accueil', features: 'Fonctionnalités', pricing: 'Tarifs', contact: 'Contact', dashboard: 'Tableau de bord', broadcasts: 'Diffusions', studio: 'Studio', settings: 'Paramètres', }, landing: { hero_title: 'La façon la plus simple de diffuser en direct et enregistrer', hero_subtitle: 'AvanzaCast est un studio professionnel pour enregistrer et diffuser en direct depuis votre navigateur', get_started: 'Commencer', continue_google: 'Continuer avec Google', features_title: 'Tout ce dont vous avez besoin pour diffuser', testimonials_title: 'diffusions créées', }, auth: { login_title: 'Connectez-vous à votre compte', register_title: 'Créez votre compte', forgot_password: 'Mot de passe oublié?', no_account: "Vous n'avez pas de compte?", already_account: 'Vous avez déjà un compte?', terms_accept: 'En continuant, vous acceptez nos', terms_service: 'Conditions de service', privacy_policy: 'Politique de confidentialité', }, }, }; /** * Guarda el idioma seleccionado en localStorage */ export const saveLanguage = (language: SupportedLanguage): void => { if (typeof window === 'undefined') return; localStorage.setItem(LANGUAGE_KEY, language); }; /** * Obtiene el idioma guardado o detecta el del navegador */ export const getLanguage = (): SupportedLanguage => { if (typeof window === 'undefined') return 'es'; const saved = localStorage.getItem(LANGUAGE_KEY) as SupportedLanguage; if (saved && ['es', 'en', 'pt', 'fr'].includes(saved)) { return saved; } // Detectar idioma del navegador const browserLang = navigator.language.split('-')[0]; if (['es', 'en', 'pt', 'fr'].includes(browserLang)) { return browserLang as SupportedLanguage; } return 'es'; // Idioma por defecto }; /** * Obtiene una traducción específica */ export const translate = (key: string, language?: SupportedLanguage): string => { const lang = language || getLanguage(); const keys = key.split('.'); let value: any = translations[lang]; for (const k of keys) { if (value && typeof value === 'object') { value = value[k]; } else { return key; // Retorna la key si no encuentra traducción } } return typeof value === 'string' ? value : key; }; /** * Hook helper para obtener función de traducción */ export const useTranslate = (language: SupportedLanguage) => { return (key: string) => translate(key, language); }; /** * Obtiene todas las traducciones de un idioma */ export const getTranslations = (language: SupportedLanguage): Translation => { return translations[language]; }; /** * Lista de idiomas disponibles */ export const AVAILABLE_LANGUAGES: Array<{ code: SupportedLanguage; name: string; flag: string }> = [ { code: 'es', name: 'Español', flag: '🇪🇸' }, { code: 'en', name: 'English', flag: '🇺🇸' }, { code: 'pt', name: 'Português', flag: '🇧🇷' }, { code: 'fr', name: 'Français', flag: '🇫🇷' }, ];