Files
archived-stlTexturizer/js/i18n/pt.js
T
CNCKitchen ce5b040972 Merge PR #29: refactor(i18n): split translations into per-language files with lazy loading; add French
- Split monolithic i18n.js into per-language files under js/i18n/
- Lazy-load translations via dynamic import() with caching
- Add French (fr) language support
- Add error handling in _loadLang with English fallback
- Remove duplicated lang.name from per-language files (registry is single source of truth)
- Add dev-time key validation (warns on localhost when keys are missing vs en.js)
- Add missing alerts.fileTooLarge key from main to all language files
- Await async initLang() in main.js (supported by type=module)
2026-04-07 10:46:35 +02:00

144 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export default {
"theme.dark": "Tema Escuro",
"theme.light": "Tema Claro",
"theme.toggleTitle": "Alternar modo claro / escuro",
"theme.toggleAriaLabel": "Alternar modo claro/escuro",
"dropHint.text": "Arraste um arquivo <strong>.stl</strong>, <strong>.obj</strong> ou <strong>.3mf</strong> aqui<br/>ou <label for=\"stl-file-input\" class=\"link-label\">clique para procurar</label>",
"ui.wireframe": "Wireframe",
"ui.controlsHint": "Arrastar esq.: orbitar  ·  Arrastar dir.: deslocar  ·  Roda: zoom",
"ui.meshInfo": "{n} triângulos · {mb} MB · {sx} × {sy} × {sz} mm",
"ui.loadStl": "Carregar modelo…",
"sections.displacementMap": "Mapa de deslocamento",
"ui.uploadCustomMap": "Enviar mapa personalizado",
"ui.noMapSelected": "Nenhum mapa selecionado",
"sections.projection": "Projeção",
"labels.mode": "Modo",
"projection.triplanar": "Triplanar",
"projection.cubic": "Cúbica (Caixa)",
"projection.cylindrical": "Cilíndrica",
"projection.spherical": "Esférica",
"projection.planarXY": "Planar XY",
"projection.planarXZ": "Planar XZ",
"projection.planarYZ": "Planar YZ",
"sections.transform": "Transformação",
"labels.scaleU": "Escala U",
"labels.scaleV": "Escala V",
"labels.offsetU": "Deslocamento U",
"labels.offsetV": "Deslocamento V",
"labels.rotation": "Rotação",
"tooltips.proportionalScaling": "Escala proporcional (U = V)",
"tooltips.proportionalScalingAria": "Escala proporcional (U = V)",
"sections.displacement": "Profundidade da textura",
"labels.amplitude": "Amplitude",
"labels.seamBlend": "Fusão de costuras ⓘ",
"tooltips.seamBlend": "Suaviza a costura onde as faces de projeção se encontram. Eficaz para os modos Cúbico e Cilíndrico.",
"labels.transitionSmoothing": "Suavização de transição ⓘ",
"tooltips.transitionSmoothing": "Largura da zona de fusão perto das bordas da costura. Valores baixos mantêm as transições próximas à costura; valores altos suavizam uma faixa mais larga.",
"labels.textureSmoothing": "Suavização de textura ⓘ",
"tooltips.textureSmoothing": "Aplica um desfoque gaussiano ao mapa de deslocamento. Valores mais altos produzem detalhes de superfície mais suaves e graduais. 0 = desativado.",
"labels.capAngle": "Ângulo de cobertura ⓘ",
"tooltips.capAngle": "Ângulo (em graus) a partir da vertical no qual a projeção de cobertura superior/inferior é ativada. Valores menores limitam a projeção a faces quase planas.",
"sections.masking": "Mascaramento",
"sections.maskAngles": "Por ângulo ⓘ",
"tooltips.maskAngles": "0° = sem mascaramento. Superfícies dentro deste ângulo em relação à horizontal não serão texturizadas.",
"labels.bottomFaces": "Faces inferiores",
"tooltips.bottomFaces": "Suprimir textura em superfícies voltadas para baixo dentro deste ângulo em relação à horizontal",
"labels.topFaces": "Faces superiores",
"tooltips.topFaces": "Suprimir textura em superfícies voltadas para cima dentro deste ângulo em relação à horizontal",
"sections.surfaceMasking": "Por superfície ⓘ",
"sections.surfaceSelection": "Seleção de superfícies",
"tooltips.surfaceMasking": "Mascarar superfícies para controlar quais áreas recebem deslocamento.",
"tooltips.surfaceSelection": "As superfícies selecionadas aparecem em verde e serão as únicas a receber deslocamento durante a exportação.",
"excl.modeExclude": "Excluir",
"excl.modeExcludeTitle": "Modo Excluir: superfícies pintadas não receberão deslocamento de textura",
"excl.modeIncludeOnly": "Incluir apenas",
"excl.modeIncludeOnlyTitle": "Modo Incluir apenas: somente superfícies pintadas receberão deslocamento de textura",
"excl.toolBrush": "Pincel",
"excl.toolBrushTitle": "Pincel: pintar triângulos para excluir",
"excl.toolFill": "Preenchimento",
"excl.toolFillTitle": "Preenchimento: preencher superfície até um ângulo limite",
"excl.shiftHint": "Segure Shift para apagar",
"labels.type": "Tipo",
"brushType.single": "Individual",
"brushType.circle": "Círculo",
"labels.size": "Tamanho",
"labels.maxAngle": "Ângulo máx.",
"tooltips.maxAngle": "Ângulo diedral máximo entre triângulos adjacentes que o preenchimento pode cruzar",
"ui.clearAll": "Limpar tudo",
"excl.initExcluded": "0 faces mascaradas",
"excl.faceExcluded": "{n} face mascarada",
"excl.facesExcluded": "{n} faces mascaradas",
"excl.faceSelected": "{n} face selecionada",
"excl.facesSelected": "{n} faces selecionadas",
"excl.hintExclude": "Superfícies mascaradas aparecem em laranja e não receberão deslocamento durante a exportação.",
"excl.hintInclude": "Superfícies selecionadas aparecem em verde e serão as únicas a receber deslocamento durante a exportação.",
"precision.label": "Precisão (Beta) ⓘ",
"precision.labelTitle": "Subdivide a malha em segundo plano para que o pincel selecione com maior granularidade",
"precision.outdated": "⚠ Desatualizado",
"precision.refreshTitle": "Resubdividir a malha para ajustar ao tamanho atual do pincel",
"precision.triCount": "{n} △",
"precision.refining": "Refinando…",
"precision.warningBody": "Estimados ~{n} triângulos. Isso pode deixar o navegador lento. Continuar?",
"labels.boundaryFalloff": "Suavizar máscara ⓘ",
"tooltips.boundaryFalloff": "Reduz gradualmente o deslocamento a zero perto das bordas mascaradas, evitando sobreposição de triângulos entre zonas texturizadas e não texturizadas.",
"labels.symmetricDisplacement": "Deslocamento simétrico ⓘ",
"tooltips.symmetricDisplacement": "Quando ativado, cinza a 50% = sem deslocamento; branco empurra para fora, preto empurra para dentro. Mantém o volume da peça aproximadamente constante.",
"labels.displacementPreview": "Pré-visualização 3D ⓘ",
"tooltips.displacementPreview": "Subdivide a malha e desloca os vértices em tempo real para avaliar a profundidade real. Uso intensivo de GPU em modelos complexos.",
"ui.placeOnFace": "Posicionar na face",
"ui.placeOnFaceTitle": "Clique numa face para orientá-la para baixo sobre a mesa de impressão",
"progress.subdividingPreview": "Preparando pré-visualização…",
"warnings.amplitudeOverlap": "⚠ A amplitude excede 10% da menor dimensão do modelo — podem ocorrer sobreposições de geometria no STL exportado.",
"sections.export": "Exportar ⓘ",
"tooltips.export": "Menor comprimento de aresta = maior detalhe de deslocamento. A saída é então reduzida ao limite de triângulos.",
"labels.resolution": "Resolução",
"tooltips.resolution": "Arestas maiores que este valor serão subdivididas durante a exportação",
"labels.outputTriangles": "Triângulos de saída",
"tooltips.outputTriangles": "A malha é totalmente subdividida primeiro e depois reduzida a esta quantidade",
"warnings.safetyCapHit": "⚠ Limite de segurança de 20M de triângulos atingido durante a subdivisão — o resultado pode ser mais grosseiro que o comprimento de aresta solicitado.",
"ui.exportStl": "Exportar STL",
"progress.subdividing": "Subdividindo malha…",
"progress.refining": "Refinando: {cur} triângulos, aresta mais longa {edge}",
"progress.applyingDisplacement": "Aplicando deslocamento em {n} triângulos…",
"progress.displacingVertices": "Deslocando vértices…",
"progress.decimatingTo": "Simplificando {from} → {to} triângulos…",
"progress.decimating": "Simplificando: {cur} → {to} triângulos",
"progress.writingStl": "Escrevendo STL…",
"progress.done": "Pronto!",
"progress.processing": "Processando…",
"license.btn": "Licença e termos",
"license.title": "Licença e termos",
"license.item1": "Uso gratuito para qualquer finalidade, incluindo <strong>trabalho comercial</strong> (p. ex., texturização de STLs para clientes ou produtos).",
"license.item2": "A atribuição é <strong>apreciada</strong> mas <strong>não obrigatória</strong> ao usar esta ferramenta como está.",
"license.item3": "Quer apoiar esta ferramenta? Compre na <a href=\"https://geni.us/CNCStoreTexture\" target=\"_blank\" rel=\"noopener\">CNCKitchen.STORE</a> ou doe via <a href=\"https://www.paypal.me/CNCKitchen\" target=\"_blank\" rel=\"noopener\">PayPal</a>.",
"license.item4": "Esta ferramenta é fornecida <strong>como está</strong> sem <strong>nenhuma garantia</strong> de qualquer tipo. Use por sua conta e risco.",
"license.item5": "<strong>Nenhum suporte</strong> é fornecido. O autor não tem obrigação de corrigir bugs, responder perguntas ou atualizar esta ferramenta. Dito isso, relatórios de bugs e pedidos de funcionalidades são sempre bem-vindos em <a href=\"mailto:texturizer@cnckitchen.com\">texturizer@cnckitchen.com</a>.",
"license.item6": "O autor não será responsável por <strong>danos</strong>, perda de dados ou problemas decorrentes do uso desta ferramenta.",
"license.item7": "Quer licenciar ou incorporar esta ferramenta para o seu negócio ou site? Entre em contato em <a href=\"mailto:contact@cnckitchen.com\">contact@cnckitchen.com</a>.",
"license.item8": "Código-fonte disponível no <a href=\"https://github.com/CNCKitchen/stlTexturizer\" target=\"_blank\" rel=\"noopener\">GitHub</a>.",
"imprint.btn": "Aviso legal e privacidade",
"imprint.title": "Aviso legal e política de privacidade",
"imprint.sectionImprint": "Aviso legal (Impressum)",
"imprint.info": "CNC Kitchen<br>Stefan Hermann<br>Bahnhofstr. 2<br>88145 Hergatz<br>Alemanha",
"imprint.contact": "E-mail: <a href=\"mailto:contact@cnckitchen.com\">contact@cnckitchen.com</a><br>Telefone: +49 175 2011824<br><em>O número de telefone é exclusivamente para consultas legais/comerciais — não para suporte.</em>",
"imprint.odr": "Plataforma de resolução de litígios online da UE: <a href=\"https://ec.europa.eu/consumers/odr\" target=\"_blank\" rel=\"noopener\">https://ec.europa.eu/consumers/odr</a>",
"imprint.sectionPrivacy": "Política de privacidade (Datenschutzerklärung)",
"imprint.privacyIntro": "<strong>Responsável</strong> (Verantwortlicher gem. Art. 4 Abs. 7 DSGVO): Stefan Hermann, Bahnhofstr. 2, 88145 Hergatz, Alemanha.",
"imprint.privacyHosting": "Este site é hospedado no <strong>GitHub Pages</strong> (GitHub Inc. / Microsoft Corp., 88 Colin P Kelly Jr St, San Francisco, CA 94107, EUA). Ao visitar este site, o GitHub pode processar seu endereço IP nos logs do servidor. Base legal: Art. 6(1)(f) RGPD (interesse legítimo em fornecer o site). Veja a <a href=\"https://docs.github.com/en/site-policy/privacy-policies/github-general-privacy-statement\" target=\"_blank\" rel=\"noopener\">Declaração de privacidade do GitHub</a>.",
"imprint.privacyLocal": "Esta ferramenta armazena as preferências do usuário (idioma, tema) no <strong>localStorage</strong> do seu navegador. Esses dados nunca saem do seu dispositivo e não são transmitidos a nenhum servidor.",
"imprint.privacyNoCookies": "Este site <strong>não</strong> utiliza cookies, ferramentas de análise ou tecnologias de rastreamento.",
"imprint.privacyExternal": "Este site contém links para sites externos (p. ex., CNCKitchen.STORE, PayPal). Esses sites têm suas próprias políticas de privacidade, sobre as quais não temos controle.",
"imprint.privacyRights": "Nos termos do RGPD, você tem direito a <strong>acesso, retificação, eliminação, limitação do tratamento, portabilidade de dados</strong> e direito de <strong>apresentar uma reclamação</strong> junto a uma autoridade de supervisão.",
"sponsor.title": "Obrigado por usar o BumpMesh da CNC Kitchen!",
"sponsor.body": "Esta ferramenta é fornecida <strong>totalmente grátis</strong> pela CNC Kitchen.<br>Enquanto seu STL está sendo processado, que tal dar uma olhada na loja que nos ajuda a continuar criando coisas legais para você?",
"sponsor.visitStore": "🛒 Visitar CNCKitchen.STORE",
"sponsor.donate": "💙 Doar via PayPal",
"sponsor.dontShow": "Não mostrar novamente",
"sponsor.closeAndContinue": "Fechar e continuar",
"cta.store": "Quer apoiar esta ferramenta? Compre na <a href=\"https://geni.us/CNCStoreTexture\" target=\"_blank\" rel=\"noopener noreferrer\">CNCKitchen.STORE</a> ou doe via <a href=\"https://www.paypal.me/CNCKitchen\" target=\"_blank\" rel=\"noopener noreferrer\">PayPal</a>",
"cta.storeDismiss": "Fechar",
"alerts.loadFailed": "Não foi possível carregar o modelo: {msg}",
"alerts.exportFailed": "Falha na exportação: {msg}",
"alerts.fileTooLarge": "Arquivo muito grande ({size} MB). Máximo: {max} MB."
};