From d1ab2809975bdca09a012546a073655b5894f6e4 Mon Sep 17 00:00:00 2001 From: marco Date: Fri, 19 Dec 2025 18:23:06 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20melhorias=20em=20emails,=20tradu=C3=A7?= =?UTF-8?q?=C3=B5es=20e=20p=C3=A1gina=20de=20pricing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DKIM_DNS_ATUALIZADO.txt | 52 +++ .../Api/AccountDeletionController.php | 49 +-- .../Http/Controllers/Api/PlanController.php | 16 +- .../app/Mail/AccountDeletionConfirmation.php | 4 +- .../account-deletion-confirmation.blade.php | 321 +++++++++-------- .../cancellation-retention-offer.blade.php | 338 +++++++++--------- .../views/emails/welcome-new-user.blade.php | 6 +- frontend/src/i18n/locales/en.json | 22 ++ frontend/src/i18n/locales/es.json | 22 ++ frontend/src/i18n/locales/pt-BR.json | 22 ++ frontend/src/pages/Pricing.jsx | 6 +- 11 files changed, 503 insertions(+), 355 deletions(-) create mode 100644 DKIM_DNS_ATUALIZADO.txt 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 - - - -
-
-

⚠️ EXCLUSÃO PERMANENTE DE CONTA

-
+@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

+
+
+ {{ $code }} +
+
+

+ 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

+
+
+ {{ $code }} +
+
+

+ 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 - - - -
-
- 🎉 -

OFERTA EXCLUSIVA PARA VOCÊ!

-
+@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)}
  • ))}