diff --git a/DKIM_DNS_ATUALIZADO.txt b/DKIM_DNS_ATUALIZADO.txt
new file mode 100644
index 0000000..d4ee909
--- /dev/null
+++ b/DKIM_DNS_ATUALIZADO.txt
@@ -0,0 +1,52 @@
+═══════════════════════════════════════════════════════════════════════════
+ ⚠️ AÇÃO URGENTE: ATUALIZAR REGISTRO DKIM NO DNS
+═══════════════════════════════════════════════════════════════════════════
+
+O DKIM atual no DNS está DESATUALIZADO! Por isso emails vão para spam.
+
+REGISTRO ATUAL (ERRADO - remover):
+Nome: default._domainkey.cnxifly.com
+Valor: v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1A8I6ZHyZ0PYdOjB2BSQbH8q6WOJ2dO2zHiIn/bolAGl5ITo5hfn3Zv2fpHBMzcWbDITugSQFuQ3XJeF6oBNdWVvBqnEvI8pCJWzzhZ8Oj9rU+mEPOhIcmmDU6kHCTOFWFxgxbLd2es34rmts06xpF7nI4mWuJq8VVtkrqT0UkZNjjZrNO9KXfdTzV3pP0IEZA+KJlYqVDwnALL62z6GT9xAQi2eytoRSXbTzGDC4+kNXE3v2zMB5+CY9CbH3LZ7SFoJUQJCTf43zc4ea+nWsE/Y2DR5ky2hSwOh7FRJ2nXV07N2VlLu9LekZl08q9G49mwEY6ORT0aShL7RYsNTKQIDAQAB
+
+═══════════════════════════════════════════════════════════════════════════
+
+NOVO REGISTRO (CORRETO - adicionar):
+Nome: default._domainkey.cnxifly.com
+Tipo: TXT
+Valor (copiar em UMA ÚNICA LINHA):
+
+v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyeq8zM0lP2+9kPqH4E9B64rl1nhhga4aCgErcSLNpTWSOpYPxOzWAEsnwVGz/gJGyXiwix+RGN/jxks61nzmik4MslvdxmMABmZ1ERtAoqmO7noThf3LLJbMqYFaGKgYRCpetSZDpQZARlRdzmCTnNVgYsex4gMry4sJocIKbePec8kY3Ps1d4f0LZAp0jH0FufX3V842P8j/96VOdX2U1v8OrnqQWtqteajfMCa/lguHEyYM2ZtV+g4VZZKJgk3UoqwDV3JKwBoxxi17SoedjoXtsNEwaXFPTuOrNOQAqe2iHgMR9949YXbAHxoUA9TOaByOXp9ZmVzmUMfRLk5LwIDAQAB
+
+TTL: 3600
+
+═══════════════════════════════════════════════════════════════════════════
+
+PASSOS PARA ATUALIZAR:
+
+1. Acesse o painel DNS (UI-DNS ou onde gerencia cnxifly.com)
+2. Localize o registro: default._domainkey.cnxifly.com
+3. EDITE (não delete e crie novo) o valor para o novo acima
+4. Salve as alterações
+5. Aguarde 5-10 minutos para propagação
+
+TESTAR APÓS ATUALIZAÇÃO:
+opendkim-testkey -d cnxifly.com -s default -vvv
+
+Deve retornar: "key OK"
+
+═══════════════════════════════════════════════════════════════════════════
+
+CAUSA DO PROBLEMA:
+- Servidor foi reinstalado/reconfigurado em 7 de dezembro
+- Nova chave DKIM foi gerada, mas DNS não foi atualizado
+- Emails assinados com chave nova, mas DNS tem chave antiga
+- Servidores destinatários (iCloud, Gmail) rejeitam como spam
+
+IMPACTO:
+- Emails de ativação não chegam (vão para spam/lixeira)
+- Emails de notificação são bloqueados
+- Reputação do domínio está comprometida
+
+URGÊNCIA: ALTA - Atualizar imediatamente!
+
+═══════════════════════════════════════════════════════════════════════════
diff --git a/backend/app/Http/Controllers/Api/AccountDeletionController.php b/backend/app/Http/Controllers/Api/AccountDeletionController.php
index 07d51c4..d79a6d7 100644
--- a/backend/app/Http/Controllers/Api/AccountDeletionController.php
+++ b/backend/app/Http/Controllers/Api/AccountDeletionController.php
@@ -31,7 +31,11 @@ public function requestDeletionCode(Request $request)
Cache::put($cacheKey, $code, now()->addMinutes(10));
// Enviar email
- Mail::to($user->email)->send(new AccountDeletionConfirmation($code, $user->name));
+ Mail::to($user->email)->send(new AccountDeletionConfirmation(
+ $code,
+ $user->name,
+ $user->locale ?? $user->language ?? 'pt-BR'
+ ));
return response()->json([
'success' => true,
@@ -55,33 +59,20 @@ public function exportBackup(Request $request)
try {
$user = Auth::user();
- // Coletar todos os dados do usuário
+ // Coletar todos os dados do usuário (apenas relações existentes)
$backup = [
'version' => '1.0',
'exported_at' => now()->toISOString(),
'user' => [
'name' => $user->name,
'email' => $user->email,
+ 'locale' => $user->locale ?? $user->language ?? 'pt-BR',
],
- 'accounts' => $user->accounts()->with('currency')->get(),
- 'asset_accounts' => $user->assetAccounts()->with('assetType')->get(),
- 'categories' => $user->categories()->get(),
- 'cost_centers' => $user->costCenters()->with('keywords')->where('is_system', false)->get(),
- 'credit_cards' => $user->creditCards()->with('account')->get(),
- 'liability_accounts' => $user->liabilityAccounts()->get(),
- 'budgets' => $user->budgets()->with(['category', 'subcategory'])->get(),
- 'goals' => $user->goals()->get(),
- 'investments' => $user->investments()->with(['assetAccount', 'investmentType', 'priceHistories'])->get(),
- 'transactions' => $user->transactions()
- ->with([
- 'account',
- 'category',
- 'subcategory',
- 'costCenter',
- 'creditCard',
- 'liabilityAccount'
- ])
- ->get(),
+ 'accounts' => $user->accounts()->get()->makeHidden(['user']),
+ 'categories' => $user->categories()->get()->makeHidden(['user']),
+ 'budgets' => $user->budgets()->get()->makeHidden(['user']),
+ 'transactions' => $user->transactions()->get()->makeHidden(['user']),
+ 'goals' => $user->goals()->get()->makeHidden(['user']),
];
// Gerar nome do arquivo
@@ -89,7 +80,13 @@ public function exportBackup(Request $request)
// Salvar temporariamente
$filePath = 'backups/' . $fileName;
- Storage::disk('local')->put($filePath, json_encode($backup, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
+ $jsonData = json_encode($backup, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
+
+ if ($jsonData === false) {
+ throw new \Exception('Erro ao serializar dados: ' . json_last_error_msg());
+ }
+
+ Storage::disk('local')->put($filePath, $jsonData);
// Retornar URL para download
return response()->json([
@@ -100,10 +97,16 @@ public function exportBackup(Request $request)
'expires_in' => '24 horas'
]);
} catch (\Exception $e) {
+ \Log::error('Export backup error', [
+ 'user_id' => Auth::id(),
+ 'error' => $e->getMessage(),
+ 'trace' => $e->getTraceAsString()
+ ]);
+
return response()->json([
'success' => false,
'message' => 'Erro ao criar backup',
- 'error' => $e->getMessage()
+ 'error' => config('app.debug') ? $e->getMessage() : 'Erro interno'
], 500);
}
}
diff --git a/backend/app/Http/Controllers/Api/PlanController.php b/backend/app/Http/Controllers/Api/PlanController.php
index bd45d3a..87ff336 100755
--- a/backend/app/Http/Controllers/Api/PlanController.php
+++ b/backend/app/Http/Controllers/Api/PlanController.php
@@ -10,25 +10,17 @@
class PlanController extends Controller
{
/**
- * List all plans for pricing page (including coming soon)
+ * List all plans for pricing page
*/
public function index(): JsonResponse
{
- // Get active plans
- $activePlans = Plan::active()->ordered()->get();
-
- // Get coming soon plans (inactive but should be displayed)
- $comingSoonPlans = Plan::where('is_active', false)
- ->whereIn('slug', ['business'])
- ->ordered()
- ->get();
-
- $allPlans = $activePlans->merge($comingSoonPlans);
+ // Get only active plans
+ $plans = Plan::active()->ordered()->get();
return response()->json([
'success' => true,
'data' => [
- 'plans' => $allPlans->map(function ($plan) {
+ 'plans' => $plans->map(function ($plan) {
return [
'id' => $plan->id,
'slug' => $plan->slug,
diff --git a/backend/app/Mail/AccountDeletionConfirmation.php b/backend/app/Mail/AccountDeletionConfirmation.php
index 05eae5f..2ded45f 100644
--- a/backend/app/Mail/AccountDeletionConfirmation.php
+++ b/backend/app/Mail/AccountDeletionConfirmation.php
@@ -14,14 +14,16 @@ class AccountDeletionConfirmation extends Mailable
public $code;
public $userName;
+ public $userLocale;
/**
* Create a new message instance.
*/
- public function __construct($code, $userName)
+ public function __construct($code, $userName, $userLocale = 'pt-BR')
{
$this->code = $code;
$this->userName = $userName;
+ $this->userLocale = $userLocale;
}
/**
diff --git a/backend/resources/views/emails/account-deletion-confirmation.blade.php b/backend/resources/views/emails/account-deletion-confirmation.blade.php
index 39750a5..4223057 100644
--- a/backend/resources/views/emails/account-deletion-confirmation.blade.php
+++ b/backend/resources/views/emails/account-deletion-confirmation.blade.php
@@ -1,150 +1,185 @@
-
-
-
-
-
- Código de Confirmação
-
-
-
-
-
+@extends('emails.layouts.base')
+
+@php $locale = $userLocale ?? 'pt-BR'; @endphp
+
+@section('title')
+ @if($locale === 'pt-BR')
+ Confirmação de Eliminação de Conta
+ @elseif($locale === 'en')
+ Account Deletion Confirmation
+ @else
+ Confirmación de Eliminación de Cuenta
+ @endif
+@endsection
+
+@section('content')
+ @if($locale === 'pt-BR')
+ {{-- Portuguese (Brazil) --}}
+
Olá, {{ $userName }}
+
+
🔐
+
CÓDIGO DE CONFIRMAÇÃO
+
+
+ Válido por 10 minutos
+
+
+
+
+
⚠️ ATENÇÃO - AÇÃO IRREVERSÍVEL
+
+ Esta ação NÃO pode ser desfeita. Uma vez confirmada, todos os seus dados serão
+ permanentemente deletados dos nossos servidores sem possibilidade de recuperação.
+
+
+
-
Olá, {{ $userName }}
-
-
- Você solicitou a exclusão PERMANENTE E IRREVERSÍVEL de sua conta no WebMoney.
-
+
🗑️ Serão deletados permanentemente:
+
+ - Todas as transações
+ - Todas as contas bancárias e de ativos
+ - Todos os cartões de crédito e contas de passivos
+ - Orçamentos e categorias personalizadas
+ - Centros de custo e palavras-chave
+ - Objetivos financeiros
+ - Investimentos e histórico de preços
+ - Configurações e preferências
+ - Sua conta de usuário
+
+
-
- ⚠️ ATENÇÃO: Esta ação NÃO pode ser desfeita. Uma vez confirmada, todos os seus dados serão permanentemente deletados dos nossos servidores sem possibilidade de recuperação.
-
-
-
-
🗑️ Serão deletados permanentemente:
-
- - Todas as transações
- - Todas as contas bancárias e de ativos
- - Todos os cartões de crédito e contas de passivos
- - Orçamentos e categorias personalizadas
- - Centros de custo e palavras-chave
- - Objetivos financeiros
- - Investimentos e histórico de preços
- - Configurações e preferências
- - Sua conta de usuário
-
-
-
-
- Para confirmar esta ação, utilize o código abaixo:
-
-
-
-
- SEU CÓDIGO DE CONFIRMAÇÃO
-
-
{{ $code }}
-
- Válido por 10 minutos
-
-
-
-
- Não foi você? Se você não solicitou esta exclusão, ignore este email e sua conta permanecerá intacta. Recomendamos alterar sua senha imediatamente por segurança.
-
-
-
- Quer fazer backup? Antes de confirmar a exclusão, você pode exportar todos os seus dados para um arquivo JSON e importá-los posteriormente em uma nova conta.
+
+
🔒 Não foi você?
+
+ Se você não solicitou esta exclusão, ignore este email e sua conta permanecerá intacta.
+ Recomendamos alterar sua senha imediatamente por segurança.
+
+
+
💾 Quer fazer backup?
+
+ Antes de confirmar a exclusão, você pode exportar todos os seus dados para um arquivo JSON
+ e importá-los posteriormente em uma nova conta.
+
+
+
+ @elseif($locale === 'en')
+ {{-- English --}}
+
Hello, {{ $userName }}
-
-
-
+
+
+
⚠️ WARNING - IRREVERSIBLE ACTION
+
+ This action CANNOT be undone. Once confirmed, all your data will be
+ permanently deleted from our servers with no possibility of recovery.
+
+
+
+
+
🗑️ Will be permanently deleted:
+
+ - All transactions
+ - All bank accounts and asset accounts
+ - All credit cards and liability accounts
+ - Custom budgets and categories
+ - Cost centers and keywords
+ - Financial goals
+ - Investments and price history
+ - Settings and preferences
+ - Your user account
+
+
+
+
+
🔒 Wasn't you?
+
+ If you did not request this deletion, ignore this email and your account will remain intact.
+ We recommend changing your password immediately for security.
+
+
+
+
+
💾 Want to backup?
+
+ Before confirming the deletion, you can export all your data to a JSON file
+ and import it later into a new account.
+
+
+
+ @else
+ {{-- Spanish --}}
+
Hola, {{ $userName }}
+
+
+
🔐
+
CÓDIGO DE CONFIRMACIÓN
+
+
+ Válido por 10 minutos
+
+
+
+
+
⚠️ ATENCIÓN - ACCIÓN IRREVERSIBLE
+
+ Esta acción NO se puede deshacer. Una vez confirmada, todos tus datos serán
+ eliminados permanentemente de nuestros servidores sin posibilidad de recuperación.
+
+
+
+
+
🗑️ Serán eliminados permanentemente:
+
+ - Todas las transacciones
+ - Todas las cuentas bancarias y de activos
+ - Todas las tarjetas de crédito y cuentas de pasivos
+ - Presupuestos y categorías personalizadas
+ - Centros de costo y palabras clave
+ - Objetivos financieros
+ - Inversiones e historial de precios
+ - Configuraciones y preferencias
+ - Tu cuenta de usuario
+
+
+
+
+
🔒 ¿No fuiste tú?
+
+ Si no solicitaste esta eliminación, ignora este email y tu cuenta permanecerá intacta.
+ Recomendamos cambiar tu contraseña inmediatamente por seguridad.
+
+
+
+
+
💾 ¿Quieres hacer backup?
+
+ Antes de confirmar la eliminación, puedes exportar todos tus datos a un archivo JSON
+ e importarlos posteriormente en una nueva cuenta.
+
+
+ @endif
+@endsection
+
diff --git a/backend/resources/views/emails/cancellation-retention-offer.blade.php b/backend/resources/views/emails/cancellation-retention-offer.blade.php
index 924f4bd..94f1be8 100644
--- a/backend/resources/views/emails/cancellation-retention-offer.blade.php
+++ b/backend/resources/views/emails/cancellation-retention-offer.blade.php
@@ -1,160 +1,48 @@
-
-
-
-
-
-
Oferta Especial de Retenção
-
-
-
-
-
+@extends('emails.layouts.base')
+
+@php $locale = $userLocale ?? 'pt-BR'; @endphp
+
+@section('title')
+ @if($locale === 'pt-BR')
+ Oferta Especial de Retenção
+ @elseif($locale === 'en')
+ Special Retention Offer
+ @else
+ Oferta Especial de Retención
+ @endif
+@endsection
+
+@section('content')
+ @if($locale === 'pt-BR')
+ {{-- Portuguese (Brazil) --}}
+
Olá, {{ $user->name }} 🎉
-
- Olá, {{ $user->name }}
-
-
-
- Entendemos que o preço pode ser uma preocupação, e queremos mantê-lo conosco!
- Por isso, temos uma oferta especial só para você:
-
-
-
-
✨ OFERTA ÚNICA ✨
-
{{ $freeMonths }}
-
MESES GRÁTIS
-
- Sem custos, sem compromisso!
-
+
Entendemos que o preço pode ser uma preocupação, e queremos mantê-lo conosco! Por isso, temos uma oferta especial só para você:
+
+
+
✨ OFERTA ÚNICA ✨
+
{{ $freeMonths }}
+
MESES GRÁTIS
+
Sem custos, sem compromisso!
-
-
💙 Você é importante para nós!
-
+
+
💙 Você é importante para nós!
+
Sabemos que as coisas podem estar apertadas financeiramente. Esta oferta especial de
{{ $freeMonths }} meses grátis é nossa forma de dizer:
"Queremos você aqui com a gente!"
-
+
Durante este período, você terá acesso completo a todos os recursos premium do WebMoney,
sem pagar nada. É tempo suficiente para as coisas melhorarem! 🌟
-
-
O que você continua tendo GRÁTIS:
-
+
+
O que você continua tendo GRÁTIS:
+
- 📊 Controle completo de todas as suas contas
- 💳 Gestão ilimitada de cartões de crédito
- 📈 Orçamentos e metas financeiras
@@ -165,45 +53,153 @@
-
-
-
-
- ✅ Oferta Já Aplicada!
-
-
+
+
✅ Oferta Já Aplicada!
+
Sua assinatura foi estendida automaticamente por {{ $freeMonths }} meses.
Continue aproveitando todos os recursos premium sem custo!
-
+
Sua próxima cobrança será em:
- {{ \Carbon\Carbon::parse($offerEndDate)->format('d/m/Y') }}
-
+
{{ \Carbon\Carbon::parse($offerEndDate)->format('d/m/Y') }}
+
-
-
+
+
📌 Importante: Esta oferta é exclusiva e pode ser usada apenas uma vez.
Após os {{ $freeMonths }} meses, sua assinatura voltará ao valor normal. Você pode cancelar
a qualquer momento antes disso, sem nenhum custo.
-
- Muito obrigado por escolher o WebMoney! Estamos aqui para ajudá-lo a alcançar
- seus objetivos financeiros. 💚
-
+
Muito obrigado por escolher o WebMoney! Estamos aqui para ajudá-lo a alcançar seus objetivos financeiros. 💚
+
-
- Com carinho,
- Equipe WebMoney
-
-
+ @elseif($locale === 'en')
+ {{-- English --}}
+ Hello, {{ $user->name }} 🎉
-
-
-
+
+ @else
+ {{-- Spanish --}}
+ Hola, {{ $user->name }} 🎉
+
+
+
Entendemos que el precio puede ser una preocupación, y ¡queremos que sigas con nosotros! Por eso, tenemos una oferta especial solo para ti:
+
+
+
✨ OFERTA ÚNICA ✨
+
{{ $freeMonths }}
+
MESES GRATIS
+
¡Sin costos, sin compromiso!
+
+
+
+
💙 ¡Eres importante para nosotros!
+
+ Sabemos que las cosas pueden estar ajustadas financieramente. Esta oferta especial de
+ {{ $freeMonths }} meses gratis es nuestra forma de decir:
+ "¡Te queremos aquí con nosotros!"
+
+
+ Durante este período, tendrás acceso completo a todas las funciones premium de WebMoney,
+ sin pagar nada. ¡Es tiempo suficiente para que las cosas mejoren! 🌟
+
+
+
+
+
Lo que sigues teniendo GRATIS:
+
+ - 📊 Control completo de todas tus cuentas
+ - 💳 Gestión ilimitada de tarjetas de crédito
+ - 📈 Presupuestos y metas financieras
+ - 📱 Importación automática de extractos
+ - 🎯 Categorización inteligente de transacciones
+ - 📋 Reportes detallados e insights
+ - ☁️ Backup automático en la nube
+
+
+
+
+
✅ ¡Oferta Ya Aplicada!
+
+ Tu suscripción ha sido extendida automáticamente por {{ $freeMonths }} meses.
+ ¡Sigue disfrutando de todas las funciones premium sin costo!
+
+
+ Tu próximo cargo será el:
+ {{ \Carbon\Carbon::parse($offerEndDate)->format('d/m/Y') }}
+
+
+
+
+
+ 📌 Importante: Esta oferta es exclusiva y solo puede usarse una vez.
+ Después de los {{ $freeMonths }} meses, tu suscripción volverá al precio normal. Puedes cancelar
+ en cualquier momento antes de eso, sin ningún costo.
+
+
+
+
¡Muchas gracias por elegir WebMoney! Estamos aquí para ayudarte a alcanzar tus objetivos financieros. 💚
+
+ @endif
+@endsection
diff --git a/backend/resources/views/emails/welcome-new-user.blade.php b/backend/resources/views/emails/welcome-new-user.blade.php
index 8ea65c5..0d73fe2 100755
--- a/backend/resources/views/emails/welcome-new-user.blade.php
+++ b/backend/resources/views/emails/welcome-new-user.blade.php
@@ -33,7 +33,7 @@
Palavra-passe
- {{ $password }}
+ {{ $temporaryPassword }}
|
@@ -88,7 +88,7 @@
Password
- {{ $password }}
+ {{ $temporaryPassword }}
|
@@ -143,7 +143,7 @@
Contraseña
- {{ $password }}
+ {{ $temporaryPassword }}
|
diff --git a/frontend/src/i18n/locales/en.json b/frontend/src/i18n/locales/en.json
index 169b67c..de3662f 100755
--- a/frontend/src/i18n/locales/en.json
+++ b/frontend/src/i18n/locales/en.json
@@ -2228,6 +2228,28 @@
"paypalSecure": "Secure payment with PayPal",
"comingSoon": "Coming Soon",
"forPymes": "Tools for SMEs",
+ "planNames": {
+ "Básico": "Basic",
+ "Pro Mensual": "Pro Monthly",
+ "Pro Anual": "Pro Annual",
+ "Business": "Business"
+ },
+ "planFeatures": {
+ "1 cuenta bancaria": "1 bank account",
+ "10 categorías": "10 categories",
+ "100 subcategorías": "100 subcategories",
+ "1.000 transacciones": "1,000 transactions",
+ "Cuentas ilimitadas": "Unlimited accounts",
+ "Categorías ilimitadas": "Unlimited categories",
+ "Transacciones ilimitadas": "Unlimited transactions",
+ "Reportes avanzados": "Advanced reports",
+ "Múltiples usuarios": "Multiple users",
+ "Facturación integrada": "Integrated billing",
+ "Gestión de flujo de caja": "Cash flow management",
+ "Control de presupuesto": "Budget control",
+ "Módulo de negocios": "Business module",
+ "Soporte prioritario": "Priority support"
+ },
"features": {
"multiUsers": "Multiple users",
"integratedBilling": "Integrated billing",
diff --git a/frontend/src/i18n/locales/es.json b/frontend/src/i18n/locales/es.json
index a2d0ae8..d7f7a16 100755
--- a/frontend/src/i18n/locales/es.json
+++ b/frontend/src/i18n/locales/es.json
@@ -2220,6 +2220,28 @@
"paypalSecure": "Pago seguro con PayPal",
"comingSoon": "Próximamente",
"forPymes": "Herramientas para PyMEs",
+ "planNames": {
+ "Básico": "Básico",
+ "Pro Mensual": "Pro Mensual",
+ "Pro Anual": "Pro Anual",
+ "Business": "Business"
+ },
+ "planFeatures": {
+ "1 cuenta bancaria": "1 cuenta bancaria",
+ "10 categorías": "10 categorías",
+ "100 subcategorías": "100 subcategorías",
+ "1.000 transacciones": "1.000 transacciones",
+ "Cuentas ilimitadas": "Cuentas ilimitadas",
+ "Categorías ilimitadas": "Categorías ilimitadas",
+ "Transacciones ilimitadas": "Transacciones ilimitadas",
+ "Reportes avanzados": "Reportes avanzados",
+ "Múltiples usuarios": "Múltiples usuarios",
+ "Facturación integrada": "Facturación integrada",
+ "Gestión de flujo de caja": "Gestión de flujo de caja",
+ "Control de presupuesto": "Control de presupuesto",
+ "Módulo de negocios": "Módulo de negocios",
+ "Soporte prioritario": "Soporte prioritario"
+ },
"features": {
"multiUsers": "Múltiples usuarios",
"integratedBilling": "Facturación integrada",
diff --git a/frontend/src/i18n/locales/pt-BR.json b/frontend/src/i18n/locales/pt-BR.json
index 61b2bfe..22858de 100755
--- a/frontend/src/i18n/locales/pt-BR.json
+++ b/frontend/src/i18n/locales/pt-BR.json
@@ -2238,6 +2238,28 @@
"paypalSecure": "Pagamento seguro com PayPal",
"comingSoon": "Em Breve",
"forPymes": "Ferramentas para PMEs",
+ "planNames": {
+ "Básico": "Básico",
+ "Pro Mensual": "Pro Mensal",
+ "Pro Anual": "Pro Anual",
+ "Business": "Negócios"
+ },
+ "planFeatures": {
+ "1 cuenta bancaria": "1 conta bancária",
+ "10 categorías": "10 categorias",
+ "100 subcategorías": "100 subcategorias",
+ "1.000 transacciones": "1.000 transações",
+ "Cuentas ilimitadas": "Contas ilimitadas",
+ "Categorías ilimitadas": "Categorias ilimitadas",
+ "Transacciones ilimitadas": "Transações ilimitadas",
+ "Reportes avanzados": "Relatórios avançados",
+ "Múltiples usuarios": "Múltiplos usuários",
+ "Facturación integrada": "Faturamento integrado",
+ "Gestión de flujo de caja": "Gestão de fluxo de caixa",
+ "Control de presupuesto": "Controle de orçamento",
+ "Módulo de negocios": "Módulo de negócios",
+ "Soporte prioritario": "Suporte prioritário"
+ },
"features": {
"multiUsers": "Múltiplos usuários",
"integratedBilling": "Faturamento integrado",
diff --git a/frontend/src/pages/Pricing.jsx b/frontend/src/pages/Pricing.jsx
index f90e596..c656ef2 100755
--- a/frontend/src/pages/Pricing.jsx
+++ b/frontend/src/pages/Pricing.jsx
@@ -123,7 +123,9 @@ export default function Pricing() {
{/* Plan Name */}
-
{plan.name}
+
+ {t(`pricing.planNames.${plan.name}`, plan.name)}
+
{/* Price */}
@@ -170,7 +172,7 @@ export default function Pricing() {
{plan.features?.map((feature, idx) => (
-
- {feature}
+ {t(`pricing.planFeatures.${feature}`, feature)}
))}