feat: Simplificar sistema de traducao com LibreTranslate

- Remover traducoes manuais do LanguageContext
- Adicionar componente T para auto-traducao
- Usar useTranslatedContent para conteudo do banco
- Atualizar todas as paginas publicas
- Integrar LibreTranslate para traducao automatica
This commit is contained in:
Erik
2025-11-26 21:33:35 -03:00
parent 6044a437f8
commit ea0c4ac5a6
9 changed files with 313 additions and 703 deletions

View File

@@ -4,6 +4,7 @@ import Link from 'next/link';
import { useState, useEffect } from 'react';
import { useTheme } from "next-themes";
import { useLanguage } from '@/contexts/LanguageContext';
import { T } from '@/components/TranslatedText';
export default function Header() {
const [isSearchOpen, setIsSearchOpen] = useState(false);
@@ -68,23 +69,23 @@ export default function Header() {
<nav className="flex items-center gap-6 mr-4">
<Link href="/" className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-primary dark:hover:text-primary font-medium transition-colors group">
<i className="ri-home-4-line text-lg group-hover:scale-110 transition-transform"></i>
<span className="hidden lg:inline">{t('nav.home')}</span>
<span className="hidden lg:inline"><T>{t('nav.home')}</T></span>
</Link>
<Link href="/servicos" className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-primary dark:hover:text-primary font-medium transition-colors group">
<i className="ri-tools-line text-lg group-hover:scale-110 transition-transform"></i>
<span className="hidden lg:inline">{t('nav.services')}</span>
<span className="hidden lg:inline"><T>{t('nav.services')}</T></span>
</Link>
<Link href="/projetos" className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-primary dark:hover:text-primary font-medium transition-colors group">
<i className="ri-briefcase-line text-lg group-hover:scale-110 transition-transform"></i>
<span className="hidden lg:inline">{t('nav.projects')}</span>
<span className="hidden lg:inline"><T>{t('nav.projects')}</T></span>
</Link>
<Link href="/contato" className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-primary dark:hover:text-primary font-medium transition-colors group">
<i className="ri-mail-send-line text-lg group-hover:scale-110 transition-transform"></i>
<span className="hidden lg:inline">{t('nav.contact')}</span>
<span className="hidden lg:inline"><T>{t('nav.contact')}</T></span>
</Link>
<Link href="/sobre" className="flex items-center gap-2 text-gray-600 dark:text-gray-300 hover:text-primary dark:hover:text-primary font-medium transition-colors group">
<i className="ri-user-line text-lg group-hover:scale-110 transition-transform"></i>
<span className="hidden lg:inline">{t('nav.about')}</span>
<span className="hidden lg:inline"><T>{t('nav.about')}</T></span>
</Link>
</nav>
@@ -94,7 +95,7 @@ export default function Header() {
className="px-6 py-2.5 bg-primary text-white rounded-lg font-bold hover-primary transition-colors flex items-center gap-2"
>
<i className="ri-whatsapp-line"></i>
<span className="hidden xl:inline">{t('nav.contact_us')}</span>
<span className="hidden xl:inline"><T>{t('nav.contact_us')}</T></span>
</Link>
</div>
@@ -168,23 +169,23 @@ export default function Header() {
<nav className="flex flex-col gap-4 text-base font-medium">
<Link href="/" onClick={() => setIsMobileMenuOpen(false)} className="flex items-center gap-3 py-2 border-b border-gray-100 dark:border-white/10 text-secondary dark:text-white">
<i className="ri-home-4-line text-primary text-lg"></i>
{t('nav.home')}
<T>{t('nav.home')}</T>
</Link>
<Link href="/servicos" onClick={() => setIsMobileMenuOpen(false)} className="flex items-center gap-3 py-2 border-b border-gray-100 dark:border-white/10 text-secondary dark:text-white">
<i className="ri-tools-line text-primary text-lg"></i>
{t('nav.services')}
<T>{t('nav.services')}</T>
</Link>
<Link href="/projetos" onClick={() => setIsMobileMenuOpen(false)} className="flex items-center gap-3 py-2 border-b border-gray-100 dark:border-white/10 text-secondary dark:text-white">
<i className="ri-briefcase-line text-primary text-lg"></i>
{t('nav.projects')}
<T>{t('nav.projects')}</T>
</Link>
<Link href="/contato" onClick={() => setIsMobileMenuOpen(false)} className="flex items-center gap-3 py-2 border-b border-gray-100 dark:border-white/10 text-secondary dark:text-white">
<i className="ri-mail-send-line text-primary text-lg"></i>
{t('nav.contact')}
<T>{t('nav.contact')}</T>
</Link>
<Link href="/sobre" onClick={() => setIsMobileMenuOpen(false)} className="flex items-center gap-3 py-2 border-b border-gray-100 dark:border-white/10 text-secondary dark:text-white">
<i className="ri-user-line text-primary text-lg"></i>
{t('nav.about')}
<T>{t('nav.about')}</T>
</Link>
</nav>
@@ -195,14 +196,14 @@ export default function Header() {
className="w-full py-4 bg-primary text-white rounded-xl font-bold text-center flex items-center justify-center gap-2 shadow-lg shadow-primary/20"
>
<i className="ri-whatsapp-line text-xl"></i>
{t('nav.contact_us')}
<T>{t('nav.contact_us')}</T>
</Link>
<div
className="flex items-center justify-between p-4 bg-gray-50 dark:bg-white/5 rounded-xl cursor-pointer hover:bg-gray-100 dark:hover:bg-white/10 transition-colors"
onClick={toggleTheme}
>
<span className="text-sm font-bold text-gray-500 dark:text-gray-400">{t('nav.theme')}</span>
<span className="text-sm font-bold text-gray-500 dark:text-gray-400"><T>{t('nav.theme')}</T></span>
<button
className="w-10 h-10 rounded-full bg-white dark:bg-white/10 flex items-center justify-center text-gray-600 dark:text-yellow-400 shadow-sm transition-colors"
>
@@ -215,7 +216,7 @@ export default function Header() {
</div>
<div className="flex items-center justify-between p-4 bg-gray-50 dark:bg-white/5 rounded-xl">
<span className="text-sm font-bold text-gray-500 dark:text-gray-400">{t('nav.language')}</span>
<span className="text-sm font-bold text-gray-500 dark:text-gray-400"><T>{t('nav.language')}</T></span>
<div className="flex gap-2">
<button onClick={() => setLanguage('PT')} className={`w-10 h-10 rounded-lg flex items-center justify-center text-xl cursor-pointer transition-all ${language === 'PT' ? 'bg-white dark:bg-white/10 shadow-sm scale-110' : 'opacity-50 hover:opacity-100'}`}>🇧🇷</button>
<button onClick={() => setLanguage('EN')} className={`w-10 h-10 rounded-lg flex items-center justify-center text-xl cursor-pointer transition-all ${language === 'EN' ? 'bg-white dark:bg-white/10 shadow-sm scale-110' : 'opacity-50 hover:opacity-100'}`}>🇺🇸</button>