diff --git a/app/[slug]/page.tsx b/app/[slug]/page.tsx
index be1cb3c..18f6ec5 100644
--- a/app/[slug]/page.tsx
+++ b/app/[slug]/page.tsx
@@ -70,14 +70,14 @@ export default function PublicWishlistPage() {
setClaimNote('');
fetchWishlist();
} catch (err: any) {
- setClaimError(err.message || 'Failed to claim item');
+ setClaimError(err.message || 'Erro ao reservar item');
} finally {
setIsClaiming(false);
}
};
const handleUnclaim = async (itemId: string) => {
- if (!confirm('Are you sure you want to unclaim this item?')) {
+ if (!confirm('Tem certeza que deseja cancelar a reserva deste item?')) {
return;
}
@@ -88,7 +88,7 @@ export default function PublicWishlistPage() {
await claimingApi.unclaim(itemId);
fetchWishlist();
} catch (err: any) {
- setUnclaimError(err.message || 'Failed to unclaim item');
+ setUnclaimError(err.message || 'Erro ao cancelar reserva');
} finally {
setIsUnclaiming(false);
}
@@ -100,16 +100,16 @@ export default function PublicWishlistPage() {
const formatPrice = (price: number | null, currency: string) => {
if (!price) return null;
- return new Intl.NumberFormat('en-US', {
+ return new Intl.NumberFormat('pt-BR', {
style: 'currency',
- currency: currency || 'USD',
+ currency: currency || 'BRL',
}).format(price);
};
if (isLoading) {
return (
-
Loading...
+
Carregando...
);
}
@@ -118,8 +118,8 @@ export default function PublicWishlistPage() {
return (
-
Wishlist Not Found
-
{error || 'This wishlist does not exist or is not public.'}
+
Lista não encontrada
+
{error || 'Esta lista não existe ou não é pública.'}
);
@@ -155,14 +155,14 @@ export default function PublicWishlistPage() {
d="M10 19l-7-7m0 0l7-7m-7 7h18"
/>
- Back to Home
+ Voltar ao início
{/* Preferences Section */}
{wishlist.preferences && (
- General Interests & Preferences
+ Interesses e Preferências
setShowClaimed(e.target.checked)}
className="h-4 w-4 text-blue-600 border-gray-300 rounded"
/>
- Show claimed items
+ Mostrar itens reservados
- {filteredItems.length} of {items.length} items
+ {filteredItems.length} de {items.length} itens
@@ -201,7 +201,7 @@ export default function PublicWishlistPage() {
{filteredItems.length === 0 ? (
- {showClaimed ? 'No items in this wishlist yet' : 'All items have been claimed!'}
+ {showClaimed ? 'Nenhum item nesta lista ainda' : 'Todos os itens já foram reservados!'}
) : (
@@ -272,30 +272,30 @@ export default function PublicWishlistPage() {
- Item Claimed!
+ Item reservado!
- The status is now locked.
+ O status está confirmado.
{justClaimedNote && (
- Your Note: "{justClaimedNote}"
+ Sua nota: "{justClaimedNote}"
)}
) : item.claimedAt ? (
- Claimed by {item.claimedByName}
+ Reservado por {item.claimedByName}
{item.claimedByNote && (
- Note: {item.claimedByNote}
+ Nota: {item.claimedByNote}
)}
{item.isPurchased && (
- ✓ Purchased
+ ✓ Comprado
)}
{showClaimed && (
@@ -304,7 +304,7 @@ export default function PublicWishlistPage() {
disabled={isUnclaiming}
className="mt-3 w-full px-4 py-2 bg-red-500 text-white rounded-md hover:bg-red-600 font-medium disabled:opacity-50 transition-colors cursor-pointer text-sm"
>
- {isUnclaiming ? 'Unclaiming...' : 'Unclaim Item'}
+ {isUnclaiming ? 'Cancelando...' : 'Cancelar reserva'}
)}
@@ -319,12 +319,12 @@ export default function PublicWishlistPage() {
- Add a Note (Optional):
+ Deixe uma nota (opcional):
@@ -345,7 +345,7 @@ export default function PublicWishlistPage() {
onClick={() => handleClaimItem(item.id)}
className="w-full px-4 py-2 bg-indigo-600 text-white rounded-md hover:bg-indigo-700 font-medium transition-colors cursor-pointer"
>
- Claim This Item
+ Vou dar este presente
)}
diff --git a/app/layout.tsx b/app/layout.tsx
index 54b231c..bbb006f 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -14,13 +14,13 @@ async function getSettings() {
}, {} as Record);
return {
- siteTitle: settingsObj.siteTitle || 'Wishlist',
- homepageSubtext: settingsObj.homepageSubtext || 'Browse and explore available wishlists',
+ siteTitle: settingsObj.siteTitle || 'Chá de Bebê',
+ homepageSubtext: settingsObj.homepageSubtext || 'Escolha um presente da lista!',
};
} catch (error) {
return {
- siteTitle: 'Wishlist',
- homepageSubtext: 'Browse and explore available wishlists',
+ siteTitle: 'Chá de Bebê',
+ homepageSubtext: 'Escolha um presente da lista!',
};
}
}
@@ -29,7 +29,7 @@ export async function generateMetadata(): Promise {
const settings = await getSettings();
return {
title: settings.siteTitle,
- description: "Self-hosted wishlist application for families",
+ description: "Lista de presentes para o chá de bebê",
icons: {
icon: '/icon.svg',
},
@@ -42,7 +42,7 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
-
+
{children}
diff --git a/app/lock/page.tsx b/app/lock/page.tsx
index 6e4bf4f..9ae1c4a 100644
--- a/app/lock/page.tsx
+++ b/app/lock/page.tsx
@@ -32,11 +32,11 @@ export default function LockPage() {
router.push('/');
router.refresh();
} else {
- setError(data.error || 'Incorrect password');
+ setError(data.error || 'Senha incorreta');
setPassword('');
}
} catch (err) {
- setError('Failed to verify password. Please try again.');
+ setError('Erro ao verificar senha. Tente novamente.');
console.error('Lock verification error:', err);
} finally {
setIsSubmitting(false);
@@ -46,8 +46,8 @@ export default function LockPage() {
return (
@@ -62,7 +62,7 @@ export default function LockPage() {
- Password
+ Senha
setPassword(e.target.value)}
- placeholder="Enter password"
+ placeholder="Digite a senha"
disabled={isSubmitting}
/>
@@ -82,7 +82,7 @@ export default function LockPage() {
disabled={isSubmitting}
className="w-full px-6 py-3 text-lg font-semibold text-white bg-indigo-600 hover:bg-indigo-700 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed"
>
- {isSubmitting ? 'Verifying...' : 'Submit'}
+ {isSubmitting ? 'Verificando...' : 'Entrar'}
diff --git a/app/not-found.tsx b/app/not-found.tsx
index a386aeb..4abfbe6 100644
--- a/app/not-found.tsx
+++ b/app/not-found.tsx
@@ -1,7 +1,6 @@
-// Root-level not-found page
export default function RootNotFound() {
return (
-
+
404
- Page Not Found
+ Página não encontrada
- The page you are looking for doesn't exist.
+ A página que você procura não existe.
- Go Home
+ Voltar ao início
diff --git a/app/page.tsx b/app/page.tsx
index 886ba5e..d05d107 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -11,7 +11,7 @@ import ShareButton from '@/components/share-button';
export default function Home() {
const [wishlists, setWishlists] = useState([]);
const [isLoading, setIsLoading] = useState(true);
- const [settings, setSettings] = useState({ siteTitle: 'Wishlist', homepageSubtext: 'Browse and explore available wishlists' });
+ const [settings, setSettings] = useState({ siteTitle: 'Chá de Bebê', homepageSubtext: 'Escolha um presente da lista!' });
useEffect(() => {
fetchWishlists();
@@ -47,8 +47,8 @@ export default function Home() {
subtitle={settings.homepageSubtext}
actions={
}
/>
@@ -58,11 +58,11 @@ export default function Home() {
{isLoading ? (
-
Loading...
+
Carregando...
) : wishlists.length === 0 ? (
-
No public wishlists available yet
+
Nenhuma lista disponível ainda
) : (
diff --git a/components/footer.tsx b/components/footer.tsx
index 1d2491d..48a8dea 100644
--- a/components/footer.tsx
+++ b/components/footer.tsx
@@ -1,55 +1,18 @@
'use client';
-import Link from 'next/link';
import { useTheme } from '@/components/theme-provider';
-import { useAuth } from '@/lib/auth-context';
export default function Footer() {
const { theme, toggleTheme } = useTheme();
- const { isAuthenticated } = useAuth();
return (
-
-
- Admin
-
- {isAuthenticated && (
- <>
-
•
-
-
-
-
-
- >
- )}
-
•
{theme === 'light' ? (
<>
@@ -66,7 +29,7 @@ export default function Footer() {
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"
/>
- Dark Mode
+ Modo escuro
>
) : (
<>
@@ -83,7 +46,7 @@ export default function Footer() {
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"
/>
- Light Mode
+ Modo claro
>
)}
diff --git a/components/header.tsx b/components/header.tsx
index 1af5916..93fb55c 100644
--- a/components/header.tsx
+++ b/components/header.tsx
@@ -20,7 +20,7 @@ export default function Header({ title, subtitle, imageUrl, actions, maxWidth =
- ⚠️ Warning: Viewing public wishlists may spoil surprises
+ ⚠️ Atenção: visualizar listas públicas pode estragar surpresas
diff --git a/components/share-button.tsx b/components/share-button.tsx
index 3467f98..8501f2c 100644
--- a/components/share-button.tsx
+++ b/components/share-button.tsx
@@ -10,8 +10,8 @@ interface ShareButtonProps {
}
export default function ShareButton({
- title = 'Check out this wishlist!',
- text = 'I thought you might be interested in this wishlist.',
+ title = 'Veja a lista do chá de bebê!',
+ text = 'Dê uma olhada na lista de presentes do chá de bebê.',
url,
className = ''
}: ShareButtonProps) {
@@ -27,10 +27,10 @@ export default function ShareButton({
// Fallback: copy to clipboard
try {
await navigator.clipboard.writeText(shareUrl);
- alert('Link copied to clipboard!');
+ alert('Link copiado!');
} catch (err) {
console.error('Failed to copy:', err);
- alert('Unable to share or copy link');
+ alert('Não foi possível compartilhar');
}
return;
}
@@ -58,7 +58,7 @@ export default function ShareButton({
- Share
+ Compartilhar
);
}