This commit is contained in:
2026-08-17 21:20:45 +02:00
parent 321f11e817
commit 6fcdc74843
157 changed files with 2895 additions and 7544 deletions
+28 -19
View File
@@ -78,7 +78,7 @@ export const pt: MessageDict = {
"auth.login.failed": "Falha no início de sessão",
"auth.login.passwordNotSet": "Esta conta ainda precisa de uma palavra-passe. Abra o link do convite ou peça a um administrador para emitir um novo.",
"auth.login.setPasswordFirstTitle": "Defina primeiro a palavra-passe:",
"auth.login.setPasswordFirstBody": "utilize o link do convite do seu e-mail. Se o link foi para um endereço antigo (desvio de e-mail), peça a um administrador da empresa para emitir um novo convite de definição de palavra-passe para {email}.",
"auth.login.setPasswordFirstBody": "utilize o link do convite do seu e-mail. Se precisar de um novo link, peça a um administrador da empresa para reemitir um link de definição de palavra-passe para {email}.",
"auth.login.yourEmail": "o seu e-mail",
"auth.login.platformAdminsReissue": "Os administradores da plataforma podem reemitir a partir de",
"auth.login.adminUsersLink": "Admin → Utilizadores",
@@ -144,9 +144,9 @@ export const pt: MessageDict = {
"auth.invite.acceptFailed": "Não foi possível aceitar o convite",
"auth.invite.setPasswordFailed": "Não foi possível definir a palavra-passe",
"auth.invite.expired": "Este convite é inválido ou expirou. Peça ao administrador da empresa para enviar um novo convite e abra o novo link (ou cole o novo token abaixo).",
"auth.invite.setPasswordExpired": "Este link de definição de palavra-passe é inválido ou expirou. Peça a um administrador da empresa ou da plataforma para o reemitir e abra o novo link (ou cole o novo token abaixo).",
"auth.invite.setPasswordExpired": "Este link de definição de palavra-passe é inválido ou expirou. Peça a um administrador da empresa para reemitir um link de definição de palavra-passe para este e-mail e abra o novo link (ou cole o novo token abaixo).",
"auth.invite.emailMismatchDefault": "Tem sessão iniciada com um e-mail diferente deste convite.",
"auth.invite.expiredFooter": "Link expirado? Peça a um administrador para o reemitir — não há API de reenvio self-service. Administradores da plataforma:",
"auth.invite.expiredFooter": "Link expirado? Peça a um administrador da empresa para o reemitir — não há API de reenvio self-service.",
"auth.invite.adminUsersLink": "Admin → Utilizadores",
"auth.invite.doneTitle": "Já faz parte da equipa",
"auth.invite.doneSetPasswordTitle": "Palavra-passe guardada",
@@ -163,7 +163,7 @@ export const pt: MessageDict = {
"auth.invite.switchAccountTitle": "Mudar de conta:",
"auth.invite.switchAccountBody": "termine a sessão e conclua este formulário com o e-mail convidado{emailSuffix}.",
"auth.invite.reissueTitle": "Caminho de reemissão:",
"auth.invite.reissueBody": "se o seu e-mail real de início de sessão mudou (desvio de e-mail), peça a um administrador da empresa para revogar este convite e enviar um novo para o e-mail que utiliza para iniciar sessão. Os administradores da plataforma também podem reemitir links de definição de palavra-passe em Admin → Utilizadores.",
"auth.invite.reissueBody": "peça a um administrador da empresa para reemitir um link de definição de palavra-passe para este e-mail, ou para revogar este convite e enviar um novo para o e-mail que utiliza para iniciar sessão.",
"locale.switcher": "Idioma da interface",
"locale.menu": "Escolher idioma da interface",
"locale.label": "Idioma do painel",
@@ -276,7 +276,7 @@ export const pt: MessageDict = {
"settings.table.lastUsed": "Última utilização",
"dashboard.demoSandbox": "Sandbox de demonstração",
"dashboard.demoEmptyTitle": "A sandbox de demonstração está vazia",
"dashboard.demoEmptyHint": "A sandbox de demonstração está vazia — mude para A1 ou ligue um feed para ver estatísticas reais do catálogo.",
"dashboard.demoEmptyHint": "A sandbox de demonstração está vazia ligue um feed para ver estatísticas reais do catálogo.",
"dashboard.overviewTitle": "Visão geral",
"dashboard.quickLinks": "Ligações rápidas",
"dashboard.whatsNew": "Novidades",
@@ -319,7 +319,7 @@ export const pt: MessageDict = {
"dashboard.workflow.exportMap": "Mapear e exportar",
"dashboard.workflowHint": "Catálogo a entrar → enriquecer / processar → exportar ou enviar para lojas. Salte para o passo seguinte para {name}.",
"dashboard.overviewHint": "Totais em direto para {name}",
"dashboard.demoEmptyMessage": "Mude para A1 (ou outra empresa com dados) no cabeçalho, ou ligue um feed aqui para preencher esta sandbox.",
"dashboard.demoEmptyMessage": "Ligue um feed aqui para preencher esta sandbox, ou mude para outra empresa no cabeçalho.",
"dashboard.emptyTitle": "Importe um catálogo",
"dashboard.emptyMessage": "Catálogo a entrar → enriquecer / processar → exportar ou enviar para lojas. Comece com Primeiros passos abaixo (ou ligue um feed / carregue um CSV).",
"dashboard.connectFeedAnyway": "Ligar feed mesmo assim",
@@ -367,29 +367,29 @@ export const pt: MessageDict = {
"activation.focus.sync": "Seguinte: sincronize uma amostra depois de guardar o mapeamento. Use Sync num feed mapeado — evite origens sem mapa.",
"activation.focus.dismiss": "Fechar dica",
"activation.dismiss": "Dispensar lista",
"hypercare.report.title": "Hypercare de cutover",
"hypercare.report.title": "Precisa de ajuda após a mudança?",
"hypercare.report.message": "Dados em falta ou incorretos após a migração? Reporte para podermos corrigir o seu espaço de trabalho.",
"hypercare.report.cta": "Reportar dados em falta ou incorretos",
"hypercare.report.dismiss": "Dispensar",
"hypercare.report.adminTriage": "Abrir fila de hypercare",
"etl.gaps.title": "What did not migrate",
"etl.gaps.message": "These areas were intentionally left empty or partial after the Descrybe platform cutover. Nothing is “broken” — recreate or reconnect as needed.",
"etl.gaps.title": "What still needs setup",
"etl.gaps.message": "Some items weren't copied when we moved your workspace. Nothing is broken — recreate or reconnect as needed.",
"etl.gaps.dismiss": "Dismiss",
"etl.gaps.apiKeys.title": "API keys",
"etl.gaps.apiKeys.body": "Legacy API key secrets were not migrated. Create a new key to restore API access — the secret is shown only once.",
"etl.gaps.apiKeys.body": "Previous API keys weren't copied. Create a new key to restore API access the secret is shown only once.",
"etl.gaps.apiKeys.cta": "Open API keys",
"etl.gaps.blobs.title": "File contents (blobs)",
"etl.gaps.blobs.body": "Upload records may exist as metadata only. File bytes were not copied — re-upload CSVs or resync object storage if you need the originals.",
"etl.gaps.blobs.countHint": "{count} file records are metadata-only (bytes were not migrated).",
"etl.gaps.blobs.title": "Uploaded files",
"etl.gaps.blobs.body": "File names may appear even when the file itself wasn't copied. Re-upload CSVs if you need the originals.",
"etl.gaps.blobs.countHint": "{count} files are listed without their contents (they weren't copied).",
"etl.gaps.blobs.cta": "Open Files",
"etl.gaps.jobs.title": "Processing history",
"etl.gaps.jobs.body": "Legacy job and task history was not backfilled for cutover. New jobs you start here will appear normally.",
"etl.gaps.jobs.emptyHint": "Optional jobs domain was not run — empty history is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were tagged migrated from an optional backfill.",
"etl.gaps.jobs.body": "Earlier job history wasn't imported. New jobs you start here will appear normally.",
"etl.gaps.jobs.emptyHint": "Processing history wasn't imported — an empty list is expected.",
"etl.gaps.jobs.migratedHint": "{count} jobs were imported from the previous workspace.",
"etl.gaps.jobs.cta": "Open Processing",
"etl.gaps.woo.title": "Store credentials",
"etl.gaps.woo.body": "WooCommerce and Shopify secrets may need to be re-entered after cutover — that is a reconnect step, not a broken sync.",
"etl.gaps.woo.body": "WooCommerce and Shopify passwords may need to be re-entered after the move — reconnect your store; sync is not broken.",
"etl.gaps.woo.cta": "Open Stores",
"etl.gaps.settings.title": "Company settings",
"etl.gaps.settings.body": "Only language and merge-products settings were imported. Re-check other company preferences in Settings.",
@@ -3690,6 +3690,7 @@ export const pt: MessageDict = {
"processing.receipt.cancelledDesc": "O trabalho recém-iniciado foi cancelado.",
"processing.receipt.cancelFailed": "Não foi possível cancelar o trabalho de processamento",
"unsubscribe.title": "Cancelar subscrição",
"unsubscribe.useEmailLink": "Use a ligacao de cancelamento no email que lhe enviamos. Abrir esta pagina sem essa ligacao nao pode alterar as suas preferencias de email.",
"unsubscribe.me": "Cancelar a minha subscrição",
"unsubscribe.invalidLink": "Ligação inválida",
"unsubscribe.failedShort": "Falha ao cancelar a subscrição",
@@ -4727,6 +4728,10 @@ export const pt: MessageDict = {
"seo.terms.description": "Termos de utilização da Descrybe: importação de feeds, enriquecimento de catálogo, conteúdo assistido por IA, exportações e sincronização com WooCommerce para o seu negócio.",
"seo.features.title": "Funcionalidades — Feeds, enriquecimento e exportação | Descrybe",
"seo.features.description": "Descubra como a Descrybe importa feeds de fornecedores, mapeia campos para a sua taxonomia, enriquece dados de produto e envia catálogos através de feeds de exportação, WooCommerce ou API.",
"seo.contactSales.title": "Contactar vendas | Descrybe",
"seo.contactSales.description": "Fale-nos do seu catalogo e necessidades de capacidade: prepararemos um plano personalizado que pode pagar online.",
"seo.unsubscribe.title": "Cancelar subscricao | Descrybe",
"seo.unsubscribe.description": "Pare os emails de marketing da Descrybe usando a ligacao de cancelamento na mensagem que lhe enviamos.",
"pricing.page.eyebrow": "Preços",
"pricing.page.title": "Planos simples para catálogos em crescimento",
"pricing.page.lead": "Comece grátis com mapeamento de feeds e limpeza básica. Faça upgrade quando precisar de títulos e descrições com IA, mais produtos, feeds de exportação ou sync WooCommerce — de Starter a Enterprise.",
@@ -4734,6 +4739,8 @@ export const pt: MessageDict = {
"pricing.page.subscribedMid": "ou comparar planos em",
"pricing.page.plansLink": "Planos",
"pricing.page.subscribedAfter": ".",
"pricing.page.guestSubscribedBefore": "Ja e subscritor?",
"pricing.page.guestSubscribedAfter": "para gerir a faturacao e comparar planos.",
"legal.lastUpdated": "Última atualização: {date}",
"legal.backHome": "← Voltar ao início",
"legal.emailLabel": "E-mail:",
@@ -5065,7 +5072,7 @@ export const pt: MessageDict = {
"brand.uploadLogo": "Carregar logótipo",
"brand.clear": "Limpar",
"brand.field.logoUrl": "URL do logótipo",
"brand.placeholder.logoUrl": "https://… ou carregado /api/brand/logo/files/…",
"brand.placeholder.logoUrl": "https://",
"brand.logoAlt": "Pré-visualização do logótipo da marca",
"brand.tipsTitle": "Dicas de fórmula / pré-visualização",
"brand.saving": "A guardar…",
@@ -5226,6 +5233,8 @@ export const pt: MessageDict = {
"pricing.section.publicBefore": "Planos públicos: Free, Starter, Growth, Business e Enterprise. Crie uma conta Free e depois faça upgrade em",
"pricing.section.publicOr": "ou",
"pricing.section.publicAfter": "via Stripe Checkout. O Enterprise continua a ser gerido pelas vendas.",
"pricing.section.guestPublicBefore": "Planos publicos: Free, Starter, Plus, Growth, Business, Scale e Enterprise. Crie uma conta Free e depois",
"pricing.section.guestPublicAfter": "para fazer upgrade via Stripe Checkout. O Enterprise continua a ser gerido pelas vendas.",
"pricing.section.plansLink": "Planos",
"pricing.section.billingLink": "Faturação",
"pricing.section.capabilitiesTitle": "Para que está pensado cada plano",
@@ -5291,7 +5300,7 @@ export const pt: MessageDict = {
"pricing.calc.enterpriseTitle": "Sounds like Enterprise",
"pricing.calc.enterpriseBody": "Your feeds or catalog size exceed self-serve caps. Talk to sales for unlimited capacity and a managed AI grant or BYOK.",
"pricing.calc.ctaPlan": "Choose {name}",
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. A1 and other client deals stay admin-only.",
"pricing.calc.disclaimer": "Estimates use list prices and ~2 credits per AI product enhance. Checkout prices come from Stripe. Custom client deals stay admin-only.",
"pricing.card.mostPopular": "Mais popular",
"pricing.card.custom": "Personalizado",
"pricing.card.forever": "para sempre",