diff --git a/README.md b/README.md index 6c7b50058..a4d9171da 100644 --- a/README.md +++ b/README.md @@ -220,7 +220,7 @@ doesn't write Affinity files. Current `.af` validation includes 33 pinned files, and every-board SVG/PDF/PSD export, with fixes for Affinity 3 artboards, source-backed JPEGs and text runs. [Scope and limits](crates/affinity/README.md); [source audit and remaining gaps](docs/affinity-validation.md). The interface -speaks English, German, Japanese, Korean, Vietnamese, Traditional and Simplified Chinese, Spanish, French, Hungarian, Italian, Polish, Russian and Ukrainian (and Czech and Brazilian Portuguese in the menus); +speaks English, German, Japanese, Korean, Vietnamese, Traditional and Simplified Chinese, Spanish, French, Hungarian, Italian, Polish, Brazilian Portuguese, Russian and Ukrainian (and Czech in the menus); [localization-parity.md](docs/localization-parity.md) has the details. The scores are self-assessed from our code against Illustrator's public documentation; [target-app-parity.md](docs/target-app-parity.md#how-this-was-measured-2026-10-10) explains how far to trust them. diff --git a/ROADMAP.md b/ROADMAP.md index 07f2f99a2..681bb9945 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -38,7 +38,7 @@ blocking it ([Alpha gate](docs/roadmap.md#alpha-gate)). | Audience | Ready % | Opus 5.5 agent hours to ~95% (one agent) | With 4–6 agents | Work that dominates | |---|---:|---:|---:|---| -| **Full Illustrator** (ready for real work; decides the stage) | **~62%** (57–67%) | **~340–560 h** | ~95–160 h | the mainstream work below, plus 3D (50–85 h), raster effects (23–39 h), advanced type (20–28 h), generative AI (30–60 h), localization (55–90 h) and ecosystem | +| **Full Illustrator** (ready for real work; decides the stage) | **~62%** (57–67%) | **~340–560 h** | ~95–160 h | the mainstream work below, plus 3D (50–85 h), raster effects (23–39 h), advanced type (20–28 h), generative AI (30–60 h), localization (50–85 h) and ecosystem | | **Mainstream illustrator** | **~65%** (60–70%) | **~230–380 h** | ~65–110 h | the interaction-fidelity pass (60–90 h), hardening and QA (30–50 h), stability (20–35 h), performance budgets (15–25 h), `.ai` exchange (10–20 h), the remaining depth of the everyday areas | | **Essentials user** | **~75%** (70–80%) | **~60–105 h** | ~25–45 h | launch and stability on Windows (20–35 h), in-app help and onboarding (8–15 h), basic QA (10–15 h), Shape Builder regions (4–8 h), UI polish | @@ -55,7 +55,7 @@ everything is measured from our code against Illustrator's public documentation. | UI/UX fidelity | 55% | 70–110 | [ui-parity.md](docs/ui-parity.md) | | File formats | 75% | 15–30 | [file-format-parity.md](docs/file-format-parity.md) | | Hardware (GPU, pen, touch, displays) | 35% | 25–45 | [hardware-parity.md](docs/hardware-parity.md) | -| Localization (12 key languages) | 71% (measured) | 55–90 | [localization-parity.md](docs/localization-parity.md) | +| Localization (12 key languages) | 74% (measured) | 50–85 | [localization-parity.md](docs/localization-parity.md) | | Performance | ~60% | 15–25 | [gaps.md › G15](docs/gaps.md#g15-performance-budgets-and-a-gpu-renderer) | | Stability | ~60% | 30–50 | [gaps.md › G10](docs/gaps.md#g10-launch-and-stability-on-real-machines) | | Platforms | 80% | 15–25 | [gaps.md › G8](docs/gaps.md#g8-hardening-at-scale) | @@ -105,7 +105,7 @@ Weights, evidence and the missing items per area: [target-app-parity.md](docs/ta | Hindi | `hi` | none | 0% | | Arabic | `ar` | none (no right-to-left interface) | 0% | | French | `fr` | full | 100% | -| Portuguese (Brazil) | `pt-br` | partial | 68% | +| Portuguese (Brazil) | `pt-br` | full | 100% | | Indonesian | `id` | none | 0% | | Japanese | `ja` | full | 100% | | German | `de` | full | 98% | @@ -134,6 +134,7 @@ Ranked; detail in [docs/roadmap.md](docs/roadmap.md) and [docs/gaps.md](docs/gap | Date | What landed | |---|---| +| 2026-10-14 | Brazilian Portuguese (`pt-br`) covers the whole interface and status/error messages under the completeness tests (#1914); Localization 71% → 74% (measured), hours 55–90 → 50–85. | | 2026-10-14 | Direct Selection: deleting an interior anchor of an open path leaves separate surviving runs. Delete/Backspace and history regressions cover the gap; explicit Remove Anchors remains connected. Headline numbers unchanged. | | 2026-10-14 | Corner Radius has a link button in Properties and Transform: unlinked, a live rectangle shows a radius field for each corner (#1682). With the Width tool, double-clicking a stroke opens Width Point Edit to create a width point there, and Shift-double-click on a width point opens it with Adjust Adjoining Width Points ticked (#1814, #1630). Holding Alt while dragging a guide out of a ruler switches it between horizontal and vertical (#1782), and a marquee with the Selection or Direct Selection tool also selects the unlocked ruler guides it crosses (#1836). The Transform panel's, Properties panel's and Control bar's X/Y/W/H show and edit only the anchor points selected with Direct Selection (#1839, fixes #1824). With Snap to Grid on, anchors and objects snap to the grid even when Snap to Pixel is also ticked (#1840; #1816 waits for the reporter). Artboards are deleted the same way from the Artboards panel, its menu, Properties and Delete/Backspace (#1631). The toolbar shows no group labels by default (a preference brings them back) and runs on in one or two columns; the All Tools drawer lists the tools by flyout group with their shortcuts, has a menu (Reset, Basic, Advanced) and a Show section for the Fill/Stroke, Coloring, Draw Mode and Screen Mode controls (#1751). An action clicked in the Actions panel stays selected, so Play Current Selection and Delete Selection act on it (#1853, part of #1629). Redo during a drag keeps the drag as a step (#1856, #1719). Preferences are written as soon as OK is pressed (#1857; #1747 waits for the reporter). Preferences › Appearance of Black › Printing / Exporting and Units › Identify Objects By act (#1750, #1809). The paragraph alignment buttons show none selected for paragraphs with different alignments (#1784); redefining a character style to Auto leading updates the text that uses it and keeps local overrides (#1633); New and Redefine Character Style take the format of the selected text range, also while typing (#1634). Type inside symbols, pattern tiles, graph designs and opacity masks gets its layout bounds back when a native file opens, so warped type in a symbol looks the same after save and reopen (#1833, #1738). Editing, renaming, deleting or merging a global swatch reaches the art of opacity masks (#1830, #1735). macOS: Save As, Save a Copy and the first Save show their sheet again; the sheet's Format menu (#866, reopened) is withdrawn until it can be set before the sheet opens (#1855). | | 2026-10-14 | Corner Radius has a link button in Properties and Transform: unlinked, a live rectangle shows a radius field for each corner (#1682). With the Width tool, double-clicking a stroke opens Width Point Edit to create a width point there, and Shift-double-click on a width point opens it with Adjust Adjoining Width Points ticked (#1814, #1630). Holding Alt while dragging a guide out of a ruler switches it between horizontal and vertical (#1782), and a marquee with the Selection or Direct Selection tool also selects the unlocked ruler guides it crosses (#1836). The Transform panel's, Properties panel's and Control bar's X/Y/W/H show and edit only the anchor points selected with Direct Selection (#1839, fixes #1824). With the Direct Selection tool, double-clicking type (including type nested inside a group) switches to the Type tool and puts the caret at the clicked character; pressing Escape finishes editing and returns to the selection tool used before double-clicking, and in isolation mode the first Escape exits editing while preserving isolation until a second Escape. With Snap to Grid on, anchors and objects snap to the grid even when Snap to Pixel is also ticked (#1840; #1816 waits for the reporter). Artboards are deleted the same way from the Artboards panel, its menu, Properties and Delete/Backspace (#1631). The toolbar shows no group labels by default (a preference brings them back) and runs on in one or two columns; the All Tools drawer lists the tools by flyout group with their shortcuts, has a menu (Reset, Basic, Advanced) and a Show section for the Fill/Stroke, Coloring, Draw Mode and Screen Mode controls (#1751). An action clicked in the Actions panel stays selected, so Play Current Selection and Delete Selection act on it (#1853, part of #1629). Redo during a drag keeps the drag as a step (#1856, #1719). Preferences are written as soon as OK is pressed (#1857; #1747 waits for the reporter). Preferences › Appearance of Black › Printing / Exporting and Units › Identify Objects By act (#1750, #1809). The paragraph alignment buttons show none selected for paragraphs with different alignments (#1784); redefining a character style to Auto leading updates the text that uses it and keeps local overrides (#1633); New and Redefine Character Style take the format of the selected text range, also while typing (#1634). Type inside symbols, pattern tiles, graph designs and opacity masks gets its layout bounds back when a native file opens, so warped type in a symbol looks the same after save and reopen (#1833, #1738). Editing, renaming, deleting or merging a global swatch reaches the art of opacity masks (#1830, #1735). macOS: Save As, Save a Copy and the first Save show their sheet again; the sheet's Format menu (#866, reopened) is withdrawn until it can be set before the sheet opens (#1855). | diff --git a/crates/ui-egui/src/i18n/mod.rs b/crates/ui-egui/src/i18n/mod.rs index 1ca04ce72..990de8568 100644 --- a/crates/ui-egui/src/i18n/mod.rs +++ b/crates/ui-egui/src/i18n/mod.rs @@ -182,15 +182,15 @@ pub static LANGUAGES: [LangInfo; 17] = [ // keeping the same names in English as Spanish; every `pl-*` locale (including `pl-PL`) // resolves here. LangInfo { code: "pl", name: "Polski", source: include_str!("pl.tsv"), plural: plural_polish, complete_menus: true, catalog: OnceLock::new() }, - // Brazilian Portuguese: every menu label (`menu_catalogs_translate_every_menu_label`), every - // `tl!` literal and the plural messages; left English on purpose are the `MENU_KEEP_AS_IS` - // strings (product name, language names, workspace names, perspective grid presets). + // Brazilian Portuguese: the whole interface and the status and error messages, keeping the + // same names in English as Spanish; every `pt-BR` / `pt_BR` locale resolves here (see + // `candidates`: `pt-br` then `pt`). LangInfo { code: "pt-br", name: "Português (Brasil)", source: include_str!("pt-br.tsv"), plural: plural_one_other, - complete_menus: false, + complete_menus: true, catalog: OnceLock::new(), }, // Traditional Chinese in the vocabulary used in Taiwan; `zh-TW`, `zh-HK`, `zh-MO` and `zh-Hant-*` diff --git a/crates/ui-egui/src/i18n/pt-br.tsv b/crates/ui-egui/src/i18n/pt-br.tsv index 23e036851..f0b2b0565 100644 --- a/crates/ui-egui/src/i18n/pt-br.tsv +++ b/crates/ui-egui/src/i18n/pt-br.tsv @@ -12,17 +12,18 @@ # # Clean-room: every entry was written from the plain meaning of the English label using ordinary # Brazilian Portuguese computing vocabulary (arquivo, camada, caminho, preenchimento, traçado, -# pincel, amostra, mesa de trabalho ...), following common desktop-software conventions (commands +# pincel, amostra, prancheta ...), following common desktop-software conventions (commands # in the infinitive, menus as nouns); no proprietary localisation resource, string table or product - Glowing Edges… Bordas brilhantes… # UI was consulted or copied; add entries the same way. Product and technology names (VectorCraft, # ArtCraft, SVG, OpenType, CMYK, Lab ...) stay in Latin letters; the trailing "…" of dialog # commands is kept. # -# Coverage: every `tl!` literal and menu string of the shell (tested: -# `partial_catalogs_only_translate_strings_the_ui_shows`); the plural messages too. Left in English -# on purpose (`MENU_KEEP_AS_IS` in the tests): the product name, language names, OpenType, the -# built-in workspace names and the bracketed perspective grid preset names. +# Coverage: the whole interface (every menu string and every `tl!` literal, `complete_menus`, +# tested) and the status and error messages (`@msg` rows, `COMPLETE_MESSAGES`, tested). Left in +# English on purpose (`MENU_KEEP_AS_IS` in the tests): the product name, language names, OpenType, +# the built-in workspace names and the bracketed perspective grid preset names. +# + Glowing Edges… Bordas brilhantes… — missing — falha — substituted by {style} — substituído por {style} — {n} characters from another font — {n} caracteres de outra fonte @@ -348,7 +349,6 @@ Character Style Options Opções de Estilo de Caractere Character Styles Estilos de Caractere Check Links Verificar Links -# Check Script (File › Scripts) and the report it shows on a script written for the reference app. Check Script Verificar Script Check Script… Verificar Script… Copy Report Copiar Relatório @@ -2769,8 +2769,6 @@ imageTrace Outline Contorno @plural {n} star|{n} stars {n} estrela|{n} estrelas @plural {n} step|{n} steps {n} passo|{n} passos @plural {n} stroke|{n} strokes {n} traçado|{n} traçados - -# About › Contributors / Models (credits.rs) About Sobre Contributors Colaboradores Models Modelos @@ -2807,8 +2805,6 @@ imageTrace Outline Contorno Float Panel Flutuar Painel Dock Panel Encaixar Painel Float Tool Group Flutuar Grupo de Ferramentas - -# The macOS menu bar (native_menu): the app and Window menus' system items, Settings pages. Services Serviços Hide VectorCraft Ocultar o VectorCraft Hide Others Ocultar Outros @@ -2830,8 +2826,6 @@ imageTrace Outline Contorno Constrain Restringir Free Transform Transformação Livre Perspective Distort Distorção de Perspectiva - -# Photoshop-style raster effects (Effect menu, their dialogs). Radial Blur… Desfoque Radial… Smart Blur… Desfoque Inteligente… Sharpen Nitidez @@ -2861,7 +2855,6 @@ imageTrace Outline Contorno Ocean Ripple… Ondulação oceânica… Rename Data Set Renomear conjunto de dados Rename Variable Renomear variável -# Shared panel docking Activate Panel Ativar Painel Change Panel Layout Alterar Layout dos Painéis Close Panel Fechar Painel @@ -2869,8 +2862,6 @@ imageTrace Outline Contorno Group with Agrupar com Resize panels Redimensionar painéis Resize panel window Redimensionar janela do painel - -# Interactive Revolve controls. Lighting Iluminação Revolve angle Ângulo de giro Axis side Lado do eixo @@ -3778,7 +3769,6 @@ axis Both Ambos @msg the file stopped being read (please report this bug) a leitura do arquivo foi interrompida (informe este erro) Concentric Dividers: Divisórias concêntricas: Radial Dividers: Divisórias radiais: -# Grid tool options (the Rectangular Grid and Polar Grid click dialogs). Skew: Inclinação: Inside Dentro Outside Fora @@ -3793,7 +3783,6 @@ axis Both Ambos Load EPS into Clipboard Carregar EPS na Área de Transferência Drawer menu Menu da gaveta Toolbar: Show Controls Barra de ferramentas: Mostrar controles -# Corner Radius: a field per corner of a live rectangle. Single Corner Radius Raio de Canto Único Top Left: Superior Esquerdo: Top Right: Superior Direito: @@ -3802,6 +3791,986 @@ axis Both Ambos Softness Suavidade Ambient Light Luz ambiente Light behind the object Luz atrás do objeto + +# Completeness follow-up (#1914): remaining UI strings and messages. + Glowing Edges Bordas Brilhantes + Edge Width Largura da Borda + Edge Brightness Brilho da Borda + Smoothness Suavização + Color Halftone Meio-Tom Colorido + Crystallize Cristalizar + Mezzotint Meia-Tinta + Pointillize Pontilhar + Max. Radius Raio Máx. + Channel 1 Canal 1 + Channel 2 Canal 2 + Channel 3 Canal 3 + Channel 4 Canal 4 + Cell Size Tamanho da Célula + Fine Dots Pontos Finos + Medium Dots Pontos Médios + Grainy Dots Pontos Granulados + Coarse Dots Pontos Grossos + Short Lines Linhas Curtas + Medium Lines Linhas Médias + Long Lines Linhas Longas + Short Strokes Traços Curtos + Medium Strokes Traços Médios + Long Strokes Traços Longos + Radial Blur Desfoque Radial + Smart Blur Desfoque Inteligente + Unsharp Mask Máscara de Nitidez + Gaussian Blur Desfoque Gaussiano + Method Método + Quality Qualidade + Radius Raio + Spin Giro + Draft Rascunho + Good Boa + Best Ótima + Action {n} Ação {n} + Add Swatches Adicionar Amostras + Align center Alinhar ao Centro + Align left Alinhar à Esquerda + Align right Alinhar à Direita + All colours are within the CMYK gamut Todas as cores estão dentro do gamut CMYK + Alt Alt + Amount Quantidade + Area Type Options Opções de Texto de Área + Art Arte + Ascender Ascendente + Auto Color Cor Automática + Axis: Eixo: + Backspace Backspace + Baseline Linha de Base + Basic Latin Latim Básico + Black and White Preto e Branco + Black and White Logo Logotipo em Preto e Branco + Bottom Inferior + Bottom in Front Inferior na Frente + Bounds Limites + Bounds (Fill Proportionally) Limites (Preencher Proporcionalmente) + Bounds (Fit Proportionally) Limites (Ajustar Proporcionalmente) + Brick by Column Tijolo por Coluna + Brick by Row Tijolo por Linha + Bristle Cerdas + Calligraphic Caligráfico + Cap Extremidade + Center on Artboard Centralizar na Prancheta + Center-Justified Tab Parada de Tabulação Centralizada + Change Screen Mode (F) Alterar Modo de Tela (F) + Character Style Estilo de Caractere + Classic Defaults Padrões Clássicos + Client-side (.html) Lado do Cliente (.html) + Cmd Cmd + Collect Links in a Separate Folder Reunir Links em uma Pasta Separada + Color (,) Cor (,) + Color bars Barras de cores + Color Group Grupo de Cores + Color Library Biblioteca de Cores + Color Management Gerenciamento de Cores + Color Mixer (Shift-click the chip) Misturador de Cores (clique com Shift no quadrado de cor) + Color Table ({n} color) Tabela de Cores ({n} cor) + Color Table ({n} colors) Tabela de Cores ({n} cores) + Color Theme Tema de Cores + Compression Compressão + Compression › Color › Above Ppi Compressão › Cor › Acima de Ppi + Contrast Contraste + Convert To Outlines Converter em Contornos + Copied the CSS of {rules} object(s) CSS de {rules} objeto(s) copiado + Copy All Objects Copiar Todos os Objetos + Copy Fonts Used in the Document Copiar Fontes Usadas no Documento + Copy Links Copiar Links + Descender Descendente + Flip Virar + Couldn't copy to the system clipboard: {e} Não foi possível copiar para a área de transferência do sistema: {e} + Couldn't paste from the clipboard: {e} Não foi possível colar da área de transferência: {e} + Couldn't save recovery data: {e} Não foi possível salvar os dados de recuperação: {e} + Couldn't {} {name}: {e} Não foi possível {} {name}: {e} + Create Report Criar Relatório + Ctrl Ctrl + Currency & Symbols Moedas e Símbolos + Cyan Ciano + Dash Pattern Padrão de Tracejado + Decimal-Justified Tab Parada de Tabulação Decimal + Default Actions Ações Padrão + Default Figure Numeral Padrão + Default Printer Impressora Padrão + Delete Layer Excluir Camada + Delete these {n} graphic styles? Excluir estes {n} estilos gráficos? + Delete this {n} graphic style? Excluir este {n} estilo gráfico? + Discarded {} recovered document(s) {} documento(s) recuperado(s) descartado(s) + Discord Discord + Do Not Move Não Mover + Document profile Perfil do documento + Document Swatches Amostras do Documento + Download Baixar + Downloaded {what} {what} baixado + Downloaded {} file(s) {} arquivo(s) baixado(s) + Draw Behind Desenhar Atrás + Draw Inside Desenhar Dentro + Draw Normal Desenhar Normal + Drop Shadow Sombra Projetada + Duplicate and Offset 10 pt Duplicar e Deslocar 10 pt + Duplicate Layer Duplicar Camada + Edit Toolbar Editar Barra de Ferramentas + Edit Views Editar Exibições + Embedded {n} image(s) {n} imagem(ns) incorporada(s) + Embedded {n} image(s); {missing} missing: relink them first {n} imagem(ns) incorporada(s); {missing} ausente(s): revincule-as primeiro + Entire Font Fonte Inteira + Export Asset Exportar Ativo + Exported {count} file(s) to {folder} {count} arquivo(s) exportado(s) para {folder} + Exported {path} {path} exportado + Exported {what} {what} exportado + Exported {what} with {} note(s): {first} {what} exportado com {} observação(ões): {first} + Exporting {} Exportando {} + File Dimensions Dimensões do Arquivo + Fill: click for swatches, Shift-click for the color mixer Preenchimento: clique para ver as amostras, clique com Shift para o misturador de cores + Spacing Espaçamento + Fit in View Ajustar à Janela + Flat Logo Logotipo Plano + Flattener presets Predefinidos de achatamento + Focal Fill Preenchimento Focal + Focal Stroke Traçado Focal + Fractional Widths Larguras Fracionárias + Free Livre + General › Placement › X Geral › Posicionamento › X + General › Thumbnails Geral › Miniaturas + Global Process Color, CMYK Cor de Processo Global, CMYK + Gradient (.) Gradiente (.) + Graph Data Dados do Gráfico + Graph Type Tipo de Gráfico + New Design Novo Design + Delete Design Excluir Design + Paste Design Colar Design + Select Unused Selecionar Não Utilizados + Import Data… Importar Dados… + Transpose Transpor + Switch x/y Alternar x/y + Number of Decimals: Número de Casas Decimais: + Column Width: Largura da Coluna: + No Legend Sem Legenda + Standard Legend Legenda Padrão + Legends in Wedges Legendas nas Fatias + Ratio Proporção + Even Igual + Stacked Empilhado + Graphic Style Libraries Menu Menu de Bibliotecas de Estilos Gráficos + Greek & Cyrillic Grego e Cirílico + Hex by Column Hexágono por Coluna + Hex by Row Hexágono por Linha + High Alto + High (300 ppi) Alta (300 ppi) + Horizontal % Horizontal % + Horizontal Distribute Center Distribuir Horizontalmente pelo Centro + Horizontal Distribute Left Distribuir Horizontalmente pela Esquerda + Horizontal Distribute Right Distribuir Horizontalmente pela Direita + Auto Grouping Agrupamento Automático + Enhanced Aprimorado + Ignore White Ignorar Branco + Image Imagem + Imported {what}: {} {what} importado: {} + Include Blacks with CMY: Incluir Pretos com CMY: + Include Cmy Blacks Incluir Pretos CMY + Input Black Preto de Entrada + Input White Branco de Entrada + Installed plug-in {} Plug-in {} instalado + Internal CSS CSS Interno + Justify all lines Justificar Todas as Linhas + Justify with last line aligned center Justificar com Última Linha Centralizada + Justify with last line aligned left Justificar com Última Linha à Esquerda + Justify with last line aligned right Justificar com Última Linha à Direita + Keep the pasted color as a new swatch with a numbered name. Mantém a cor colada como uma nova amostra com nome numerado. + Keep: Manter: + Import Shortcut Set Importar Conjunto de Atalhos + Import Shortcut Set… Importar Conjunto de Atalhos… + Each entry of the file is matched to a VectorCraft tool, command or panel. Check the matches and answer what is left. Cada entrada do arquivo é associada a uma ferramenta, comando ou painel do VectorCraft. Confira as correspondências e resolva o que sobrar. + Keys Teclas + The file writes keys and modifiers as codes. Check the proposed meanings and answer the codes that are not known yet. O arquivo grava teclas e modificadores como códigos. Confira os significados propostos e informe os códigos que ainda não são conhecidos. + Click, then press the key this code stands for (Esc cancels) Clique e depois pressione a tecla que este código representa (Esc cancela) + Press a key… Pressione uma tecla… + from your earlier imports das suas importações anteriores + from the format's public description da descrição pública do formato + not known yet ainda não conhecido + Shortcuts Atalhos + In the File No Arquivo + In VectorCraft No VectorCraft + Needs Attention Only Somente os que Precisam de Atenção + Ready Pronto + Needs a choice Precisa de uma escolha + Needs a key Precisa de uma tecla + No equivalent Sem equivalente + Tools take a single key (optionally with Shift) Ferramentas usam uma única tecla (opcionalmente com Shift) + A later row takes this shortcut Uma linha posterior usa este atalho + Same item as a later row Mesmo item de uma linha posterior + Start from VectorCraft Defaults Começar com os Padrões do VectorCraft + Add to the Current Shortcuts Adicionar aos Atalhos Atuais + Remember My Choices Lembrar Minhas Escolhas + {ready} of {total} ready {ready} de {total} prontos + The file is too large to read in full, so only its first part is listed. O arquivo é grande demais para ser lido por inteiro, então só a primeira parte é listada. + Report copied Relatório copiado + Line {line} Linha {line} + Line {line}: {name}: {status} Linha {line}: {name}: {status} + Read Shortcut Set File Ler Arquivo de Conjunto de Atalhos + Import Matches Importar Correspondências + Remember Import Matches Lembrar Correspondências de Importação + Forget Import Matches Esquecer Correspondências de Importação +@plural agrees with {n} default shortcut|agrees with {n} default shortcuts coincide com {n} atalho padrão|coincide com {n} atalhos padrão +@plural {n} part of the file wasn't read|{n} parts of the file weren't read {n} parte do arquivo não foi lida|{n} partes do arquivo não foram lidas + Lab Lab + Lab Values Valores Lab + Large List View Exibição em Lista Grande + Large Thumbnail View Exibição em Miniaturas Grandes + Large Thumbnails Miniaturas Grandes + Last Effect: {} Último Efeito: {} + Thai Tailandês + Latin Extended Latim Estendido + Latin-1 Supplement Suplemento Latim-1 + Layer Camada + Layer Names Nomes de Camadas + Left in Front Esquerda na Frente + Left-Justified Tab Parada de Tabulação à Esquerda + Letter Carta + Light Blue Azul Claro + Lightness Luminosidade + Link Vincular + Low Baixo + Mac Mac + Magenta Magenta + Make Envelope Criar Envelope + Marks and Bleed Marcas e Sangria + Marks and Bleeds Marcas e Sangrias + Matte Mate + Maximum Máximo + Medium (150 ppi) Média (150 ppi) + Medium Thumbnail View Exibição em Miniaturas Médias + Medium Thumbnails Miniaturas Médias + Minimal Mínimo + Miter Limit Limite da Ponta + Miter Limit: Limite da Ponta: + Mixed Objects Objetos Mistos + Mojikumi Mojikumi + Move All Objects Mover Todos os Objetos + N pt per N pt por + N slices …, evenly spaced N fatias …, com espaçamento uniforme + Name 40% Nome 40% + Name* @ 66.67 % (RGB/Preview) Nome* @ 66.67 % (RGB/Visualização) + Name* @ 66.67% (RGB/Preview) Nome* @ 66.67% (RGB/Visualização) + Roundness: Arredondamento: + Fixed Fixo + Pressure Pressão + Bristle Length: Comprimento das Cerdas: + Bristle Density: Densidade das Cerdas: + Bristle Thickness: Espessura das Cerdas: + Paint Opacity: Opacidade da Tinta: + Stiffness: Rigidez: + Round Point Ponta Redonda + Flat Point Ponta Plana + Round Blunt Redonda Romba + Flat Blunt Plana Romba + Round Curve Curva Redonda + Flat Curve Curva Plana + Round Angle Ângulo Redondo + Flat Angle Ângulo Plano + Round Fan Leque Redondo + Flat Fan Leque Plano + New View Nova Exibição + No Break Sem Quebra + No saved views (View → New View…) Nenhuma exibição salva (Exibir → Nova Exibição…) + No Thumbnails Sem Miniaturas + None (/) Nenhum (/) + None (keep transparency) Nenhum (manter transparência) + Offset X Deslocamento X + Opacity: 50% Multiply Opacidade: 50% Multiplicar + Opacity: Default Opacidade: Padrão + Opened with {} note(s): {} Aberto com {} observação(ões): {} + Other Libraries Outras Bibliotecas + Out of Gamut Warning Aviso de Fora do Gamut + Out of Web Color Warning Aviso de Cor Fora da Web + Output Saída + Output Black Preto de Saída + Output White Branco de Saída + Output › Mode Saída › Modo + Packaged {n} file(s) in {folder}{note} {n} arquivo(s) empacotado(s) em {folder}{note} + Packaged {n} file(s){note} {n} arquivo(s) empacotado(s){note} + Page information Informações da página + Paragraph Style Estilo de Parágrafo + Part of ArtCraft. MIT OR Apache-2.0. Fonts: Source Sans 3, Inter, JetBrains Mono (OFL). Icons: Lucide (ISC) + VectorCraft. Parte do ArtCraft. MIT OR Apache-2.0. Fontes: Source Sans 3, Inter, JetBrains Mono (OFL). Ícones: Lucide (ISC) + VectorCraft. + Perspective grid presets Predefinidos de grade de perspectiva + Phone 390×844 Celular 390×844 + Place onto a new locked, dimmed template layer below the current layer Colocar em uma nova camada de modelo bloqueada e esmaecida abaixo da camada atual + Point Sample Amostra de Pontos + Postcard Cartão-Postal + Presentation Attributes Atributos de Apresentação + Preset {} Predefinido {} + Preview in Browser needs the desktop app (the web downloads files instead) A visualização no navegador exige o aplicativo para desktop (na web, os arquivos são baixados) + Print presets Predefinidos de impressão + Proportional Oldstyle Antigo Proporcional + Punctuation Pontuação + Radius 1 Raio 1 + Radius 2 Raio 2 + Radius1 Raio1 + Radius2 Raio2 + Rasterize Rasterizar + Recent Recentes + Recent File Arquivo Recente + Recent Font Fonte Recente + Rectangle: Sunshine Retângulo: Luz do Sol + Horizontal Dividers: Divisores Horizontais: + Vertical Dividers: Divisores Verticais: + List Folder Listar Pasta + Begin Undo Group Iniciar Grupo de Desfazer + End Undo Group Encerrar Grupo de Desfazer + Redo {} Refazer {} + Reflect Horizontal Espelhar Horizontalmente + Registration marks Marcas de registro + Relink Linked Files to the Document Revincular Arquivos Vinculados ao Documento + Relinked {n} image(s) {n} imagem(ns) revinculada(s) + Relinked {n} image(s); not in that folder: {} {n} imagem(ns) revinculada(s); não estão nessa pasta: {} + Relinked {} image(s) {} imagem(ns) revinculada(s) + Find Linked Files Localizar Arquivos Vinculados + Find Linked Files in Folder… Localizar Arquivos Vinculados na Pasta… + Choose the file to relink each linked file to. Files with the size and contents saved with the link come first. Escolha o arquivo ao qual revincular cada arquivo vinculado. Arquivos com o tamanho e o conteúdo salvos com o link vêm primeiro. + Same file Mesmo arquivo + Same size Mesmo tamanho + Don't Relink Não Revincular + Copy into the document's folder Copiar para a pasta do documento + Repeat Options Opções de Repetição + Reset with Mesh Redefinir com Malha + Reset with Warp Redefinir com Distorção + Reset {} Redefinir {} + Restored {} recovered document(s): save them to keep them {} documento(s) recuperado(s) restaurado(s): salve-os para mantê-los + Right in Front Direita na Frente + Right-Justified Tab Parada de Tabulação à Direita + Rotate 90° CW Girar 90° no Sentido Horário + Same As Source Igual à Origem + Saved Salvo + Saved recovery data for {title} Dados de recuperação salvos para {title} + Saved to User Defined: {} Salvo em Definido pelo Usuário: {} + Saved {n} files beside {path} {n} arquivos salvos ao lado de {path} + Saved {path} {path} salvo + Saved {path} with {} note(s): {first} {path} salvo com {} observação(ões): {first} + Saving Salvando + Saving Poster.vectorcraft Salvando Poster.vectorcraft + Saving recovery data for {} Salvando dados de recuperação de {} + Saving {} Salvando {} + Scatter Dispersão + Screen (72 ppi) Tela (72 ppi) + Security Segurança + Select All Art on Layer Selecionar Toda a Arte na Camada + Select All Pins Selecionar Todos os Pinos + Select text or click into text with the Type tool to insert glyphs Selecione texto ou clique em um texto com a ferramenta Texto para inserir glifos + Server-side (.map) Lado do Servidor (.map) + Set 1 Conjunto 1 + Set base color Definir cor base + Settings… Configurações… + Show All Swatches Mostrar Todas as Amostras + Show and print from the Lab definition; PDF files carry it as the ink's alternate color. Exibe e imprime a partir da definição Lab; arquivos PDF a levam como a cor alternativa da tinta. + Show and separate through the working CMYK space, as in older documents. Exibe e separa pelo espaço CMYK de trabalho, como nos documentos antigos. + Show Color Groups Mostrar Grupos de Cores + Show Color Swatches Mostrar Amostras de Cor + Show Embedded Mostrar Incorporados + Show Gradient Swatches Mostrar Amostras de Gradiente + Show Mesh Mostrar Malha + Show Missing Mostrar Ausentes + Show Modified Mostrar Modificados + Show Pattern Swatches Mostrar Amostras de Padrão + Ridges per segment: Cristas por segmento: + Small List View Exibição em Lista Pequena + Small Thumbnail View Exibição em Miniaturas Pequenas + Small Thumbnails Miniaturas Pequenas + Corner Canto + Smooth Color Cor Suave + Social Square Post 1080×1080 Post Social Quadrado 1080×1080 + Sort by Status Ordenar por Status + Source Sans 3 Source Sans 3 + Specified Distance Distância Especificada + Specified Steps Passos Especificados + Total: Total: + Add Guides Adicionar Guias + Standard Vertical Roman Alignment Alinhamento Romano Vertical Padrão + Stroke: click for swatches, Shift-click for the color mixer Traçado: clique para ver as amostras, clique com Shift para o misturador de cores + Style Attributes Atributos de Estilo + Style Attributes (Entity References) Atributos de Estilo (Referências de Entidade) + Subscript Subscrito + Summary Resumo + Superscript Sobrescrito + Swap the selected object for the file, keeping its place and transform Troca o objeto selecionado pelo arquivo, mantendo sua posição e transformação + Swatch Libraries Menu Menu de Bibliotecas de Amostras + Create New Library… Criar Nova Biblioteca… + Rename Library… Renomear Biblioteca… + New Group… Novo Grupo… + No Group Sem Grupo + Rename Group… Renomear Grupo… + Delete Group Excluir Grupo + Import Library… Importar Biblioteca… + Export Library… Exportar Biblioteca… + Graphic Gráfico + System Layout Layout do Sistema + Tabular Lining Alinhado Tabular + Tabular Oldstyle Antigo Tabular + Tate-chu-yoko Tate-chu-yoko + Temperature Temperatura + Templates Modelos + Text Wrap Options Opções de Quebra de Texto + Tile Full Pages Dividir em Páginas Inteiras + Tint Tom + Tip extends past the end point A ponta se estende além do ponto final + Tip on the end point Ponta no ponto final + Toolbar: Add Tool Barra de Ferramentas: Adicionar Ferramenta + Toolbar: Remove Tool Barra de Ferramentas: Remover Ferramenta + Toolbar: Reset Barra de Ferramentas: Redefinir + Top Superior + Top in Front Superior na Frente + Transforms Transformações + Transparent (Default) Transparente (Padrão) + Trim marks Marcas de corte + Type on a Path Options Opções de Texto em um Caminho + Undo {} Desfazer {} + Unembedded to {} Desincorporado para {} + Unicode Unicode + Unicode (UTF-16) Unicode (UTF-16) + Unicode (UTF-8) Unicode (UTF-8) + Unique Único + Unite and Simplify Unir e Simplificar + Untitled Sem Título + Updated {} image(s) {} imagem(ns) atualizada(s) + Use the document's swatch: pasted colors take its color. Usa a amostra do documento: as cores coladas assumem a cor dela. + User Library Biblioteca do Usuário + User Preset Predefinido do Usuário + New Variable Nova Variável + New Data Set Novo Conjunto de Dados + Vertical % Vertical % + Vertical Distribute Bottom Distribuir Verticalmente por Baixo + Vertical Distribute Center Distribuir Verticalmente pelo Centro + Vertical Distribute Top Distribuir Verticalmente por Cima + Very High Muito Alto + View {n} Exibição {n} + Web 1920×1080 Web 1920×1080 + Web Safe RGB RGB Web Safe + Weight Espessura + Windows Windows + Working CMYK (don't tag) CMYK de Trabalho (não marcar) + Workspace {i} Espaço de Trabalho {i} + Yellow Amarelo + [Normal Character Style] [Estilo de Caractere Normal] + [Normal Paragraph Style] [Estilo de Parágrafo Normal] + Joins Junções + Axis Eixo +@msg Copied the script report Relatório do script copiado +@msg This shortcut file is in a form VectorCraft can't read. Este arquivo de atalhos está em um formato que o VectorCraft não consegue ler. +@msg axis must be "vertical", "horizontal" or an angle in degrees, not `{v}` axis deve ser "vertical", "horizontal" ou um ângulo em graus, não `{v}` +@msg give corners of the path: anchors where its sides meet at an angle informe os cantos do caminho: pontos de ancoragem onde os lados se encontram em ângulo +@msg give horizontal or vertical informe horizontal ou vertical +@msg not a shortcut set: the text doesn't start with a slash name and an opening brace não é um conjunto de atalhos: o texto não começa com um nome com barra e uma chave de abertura +@msg object {id} is not a selected top-level object o objeto {id} não é um objeto selecionado de nível superior +@msg {path}: not a file {path}: não é um arquivo +@msg linked pictures show the low-resolution preview saved in the file until their files are found: relink them in the Links panel as imagens vinculadas mostram a visualização de baixa resolução salva no arquivo até que seus arquivos sejam encontrados: revincule-as no painel Links +@msg area type in frames too short for a line of the font it shows in got taller frames ({_1}): their type wouldn't show otherwise o texto de área em molduras baixas demais para uma linha da fonte em que aparece recebeu molduras mais altas ({_1}): senão o texto não apareceria +@msg every numbered name for {name} is taken in the document's folder todos os nomes numerados para {name} já existem na pasta do documento +@msg No linked files to look for Nenhum arquivo vinculado para procurar +@msg Relinked {n} image(s); {name} couldn't be relinked: {reason} {n} imagem(ns) revinculada(s); não foi possível revincular {name}: {reason} + De-Interlace Desentrelaçar + Eliminate Eliminar + Create New Fields by Criar Novos Campos por + Odd Fields Campos Ímpares + Even Fields Campos Pares + Duplication Duplicação + Interpolation Interpolação + Craquelure Craquelê + Mosaic Tiles Ladrilhos de Mosaico + Patchwork Retalhos + Stained Glass Vitral + Texturizer Texturizador + Crack Spacing Espaçamento das Rachaduras + Crack Depth Profundidade das Rachaduras + Crack Brightness Brilho das Rachaduras + Grain Type Tipo de Grão + Tile Size Tamanho do Ladrilho + Grout Width Largura do Rejunte + Lighten Grout Clarear Rejunte + Square Size Tamanho do Quadrado + Relief Relevo + Border Thickness Espessura da Borda + Light Intensity Intensidade da Luz + Light Direction Direção da Luz + Sprinkles Granulado + Clumped Aglomerado + Contrasty Contrastado + Enlarged Ampliado + Stippled Pontilhado + Speckle Manchas + Brick Tijolo + Burlap Estopa + Canvas Tela + Sandstone Arenito + Bottom Left Inferior Esquerdo + Top Left Superior Esquerdo + Top Right Superior Direito + Bottom Right Inferior Direito + Edge Borda + Value Axis Eixo de Valores + On Left Side No Lado Esquerdo + On Right Side No Lado Direito + On Both Sides Nos Dois Lados + Short Curto + Full Width Largura Total + Diffuse Glow Brilho Difuso + Glass Vidro + Ocean Ripple Ondulação Oceânica + Graininess Granulosidade + Glow Amount Quantidade de Brilho + Clear Amount Quantidade de Clareza + Ripple Size Tamanho da Ondulação + Ripple Magnitude Magnitude da Ondulação + Blocks Blocos + Frosted Fosco + Tiny Lens Lente Minúscula + Variable Options Opções de Variável + Edit Data Set Editar Conjunto de Dados + Accented Edges Bordas Acentuadas + Angled Strokes Traços Angulares + Crosshatch Hachura Cruzada + Dark Strokes Traços Escuros + Ink Outlines Contornos a Tinta + Spatter Respingo + Sprayed Strokes Traços Borrifados + Sumi-e Sumi-e + Direction Balance Equilíbrio de Direção + Stroke Length Comprimento do Traço + Sharpness Nitidez + Strength Força + Balance Equilíbrio + Black Intensity Intensidade do Preto + White Intensity Intensidade do Branco + Dark Intensity Intensidade do Escuro + Spray Radius Raio do Borrifo + Stroke Direction Direção do Traço + Stroke Width Largura do Traço + Stroke Pressure Pressão do Traço + Right Diagonal Diagonal Direita + Left Diagonal Diagonal Esquerda + Linux Display Server Servidor de Exibição do Linux + X11 (XWayland) X11 (XWayland) +@id pathfinder.add Unir + 3 x 3 Average Média 3 x 3 + 5 x 5 Average Média 5 x 5 + PDF File Arquivo PDF + 1 Color Job Trabalho de 1 Cor + 2 Color Job Trabalho de 2 Cores + 3 Color Job Trabalho de 3 Cores + CMYK profile in effect Perfil CMYK em vigor + CMYK Equivalents Equivalentes CMYK +effect Soft Suave +effect Horizontal Horizontal +effect Vertical Vertical +theme Appearance Aparência +effect Points Pontos +effect Regular Regular + Phone 393×852 Celular 393×852 + Phone 430×932 Celular 430×932 + Phone 360×800 Celular 360×800 + Phone 412×915 Celular 412×915 + Phone 375×667 Celular 375×667 + Tablet 768×1024 Tablet 768×1024 + Tablet 820×1180 Tablet 820×1180 + Tablet 834×1194 Tablet 834×1194 + Tablet 1024×1366 Tablet 1024×1366 + Tablet 800×1280 Tablet 800×1280 + Watch 184×224 Relógio 184×224 + Watch 198×242 Relógio 198×242 + Web 1600×900 Web 1600×900 + Web 1440×900 Web 1440×900 + Web 1366×768 Web 1366×768 + Web 1280×800 Web 1280×800 + Web 1024×768 Web 1024×768 + Legal Legal + Tabloid Tabloide + A3 A3 + A4 A4 + A5 A5 + B4 B4 + B5 B5 + HDTV 1080p HDTV 1080p + HDTV 720p HDTV 720p + 4K UHD 4K UHD + 8K UHD 8K UHD + 2K Cinema Cinema 2K + 4K Cinema Cinema 4K + Greeting Card Cartão Comemorativo + Square 8 × 8 in Quadrado 8 × 8 pol + Poster 18 × 24 in Pôster 18 × 24 pol + Poster 24 × 36 in Pôster 24 × 36 pol + Logo 1000×1000 Logotipo 1000×1000 + Business Card 3.5 × 2 in Cartão de Visita 3.5 × 2 pol + Business Card 85 × 55 mm Cartão de Visita 85 × 55 mm + Letterhead Letter Papel Timbrado Carta + Letterhead A4 Papel Timbrado A4 + Envelope DL Envelope DL + Envelope #10 Envelope #10 + Social Portrait Post 1080×1350 Post Social Retrato 1080×1350 + Social Landscape Post 1200×630 Post Social Paisagem 1200×630 + Social Story 1080×1920 Story Social 1080×1920 + Social Tall Post 1000×1500 Post Social Alto 1000×1500 + Profile Cover 1500×500 Capa de Perfil 1500×500 + Page Cover 1640×624 Capa de Página 1640×624 + Video Banner 2560×1440 Banner de Vídeo 2560×1440 + Video Thumbnail 1280×720 Miniatura de Vídeo 1280×720 + Keyboard Shortcuts Atalhos de Teclado + Set: Conjunto: + Reset to Defaults Redefinir para os Padrões + Tool Ferramenta + Command Comando + Shortcut Atalho + Menu Commands Comandos de Menu + Press keys… Pressione as teclas… + Use Default Usar Padrão + Go to Conflict Ir para o Conflito + Remove the shortcut Remover o atalho + Click, then press the new shortcut (Esc cancels) Clique e depois pressione o novo atalho (Esc cancela) + All shortcuts reset to defaults. Todos os atalhos foram redefinidos para os padrões. + Imported. Press OK to keep the imported set. Importado. Pressione OK para manter o conjunto importado. + ⚠ {chord} was already used by {names} — it has been removed there. Atenção: {chord} já era usado por {names}; foi removido de lá. + VectorCraft Defaults Padrões do VectorCraft +@plural {n} shortcut is assigned more than once|{n} shortcuts are assigned more than once {n} atalho está atribuído mais de uma vez|{n} atalhos estão atribuídos mais de uma vez + Simulate prints overprints as Overprint Preview shows them; separations always keep them. A preset flattens transparency before printing (PostScript files always flatten it). Simular imprime as sobreimpressões como a Visualização de Sobreimpressão as mostra; as separações sempre as mantêm. Um predefinido achata a transparência antes de imprimir (arquivos PostScript sempre a achatam). + Preserve Preservar + Simulate Simular + Portrait (flipped) Retrato (invertido) + Landscape (flipped) Paisagem (invertida) + Visible & Printable Layers Camadas Visíveis e Imprimíveis + Visible Layers Camadas Visíveis + All Layers Todas as Camadas + Do Not Scale Não Dimensionar + Fit to Page Ajustar à Página + Custom Scale Escala Personalizada + Tile Imageable Areas Dividir Áreas Imprimíveis + Composite Composto + Separations Separações + Up (right reading) Para Cima (leitura correta) + Down (right reading) Para Baixo (leitura correta) + Positive Positivo + Negative Negativo + Subset Subconjunto + Complete Completa + [Custom] [Personalizado] + [Default] [Padrão] + No downsampling Sem redução de amostragem + Subsample Subamostra + Bicubic Bicúbica + Minimum Mínimo + Run Length Run Length + Roman Romano + No conversion Sem conversão + Convert to destination Converter para o destino + Convert to destination (preserve numbers) Converter para o destino (preservar números) + Don't include profiles Não incluir perfis + Include all profiles Incluir todos os perfis + Include destination profile Incluir perfil de destino + Include tagged source profiles Incluir perfis de origem marcados + Low resolution (150 ppi) Baixa resolução (150 ppi) + High resolution Alta resolução + Inserting, deleting and rotating pages Inserir, excluir e girar páginas + Filling in form fields and signing Preencher campos de formulário e assinar + Commenting, filling in form fields and signing Comentar, preencher campos de formulário e assinar + Any except extracting pages Qualquer uma, exceto extrair páginas + Bounding Box Caixa Delimitadora + Mobile Dispositivos Móveis + Film & Video Cinema e Vídeo + Art & Illustration Arte e Ilustração + Branding Identidade Visual + Social Redes Sociais + Triangle Triângulo + Triangle (open) Triângulo (aberto) + Circle (open) Círculo (aberto) + Square (open) Quadrado (aberto) + Bar Barra + Arrow Seta + Arrow (open) Seta (aberta) + Barbed Farpada + Half Arrow (left) Meia Seta (esquerda) + Half Arrow (right) Meia Seta (direita) + Concave Côncava + Double Bar Barra Dupla + Feather Pena + Dot on Bar Ponto na Barra + Chevron Chevron + Double Arrow Seta Dupla + Cross Cruz + Plus Mais + Hexagon Hexágono + Hexagon (open) Hexágono (aberto) + Tag Etiqueta + Tag (open) Etiqueta (aberta) + Half Circle Semicírculo + Drop Gota + Slash Barra Inclinada + Double Slash Barra Inclinada Dupla + Diamond (open) Losango (aberto) + Reverse Triangle Triângulo Invertido + Swallowtail Cauda de Andorinha + Bracket Colchete + Fork Garfo + Leaf Folha + Kite Pipa + Triangle to Bar Triângulo para Barra + Oval Oval + Complementary Complementar + Complementary 2 Complementar 2 + Split Complementary Complementar Dividida + Left Complement Complemento Esquerdo + Right Complement Complemento Direito + Analogous Análoga + Analogous 2 Análoga 2 + Monochromatic Monocromática + Shades Sombras + Triad Tríade + Triad 2 Tríade 2 + Triad 3 Tríade 3 + Tetrad Tétrade + Tetrad 2 Tétrade 2 + Tetrad 3 Tétrade 3 + Compound Composta + Compound 2 Composta 2 + High Contrast Alto Contraste + High Contrast 2 Alto Contraste 2 + High Contrast 3 Alto Contraste 3 + Pentagram Pentagrama + Perceptual Perceptual + Relative Colorimetric Colorimétrico Relativo + Absolute Colorimetric Colorimétrico Absoluto + Exact Exato + Preserve Tints Preservar Tons + Scale Tints Dimensionar Tons + Linear Linear + Freeform Forma Livre + 8 Colors 8 Cores + 16 Colors 16 Cores + 256 Colors 256 Cores + True Colors Cores Reais + Preserve Appearance Preservar Aparência + Maximize Editability Maximizar Editabilidade + Clip Group Grupo de Recorte + Guide Guia + Symbol Símbolo + Envelope Envelope + Mesh Malha + Placed Document Documento Colocado + Radial Repeat Repetição Radial + Grid Repeat Repetição em Grade + Mirror Repeat Repetição Espelhada + Auto Size Tamanho Automático + Shrink Text to Fit Reduzir Texto para Caber + Ascent Ascensão + Cap Height Altura das Maiúsculas + x Height Altura do x + Justify Justificar + First Baseline Primeira Linha de Base + Vertical Align Alinhamento Vertical + Save Selection Salvar Seleção + Twirl Redemoinho + Pucker Encolher + Bloat Estufar + Scallop Vieira + Wrinkle Rugas + Unknown Desconhecido + Copyrighted Com Direitos Autorais + Public Domain Domínio Público + None (Color Preview) Nenhum (Visualização de Cor) + Rasterized Complex Regions Regiões Complexas Rasterizadas + Transparent Objects Objetos Transparentes + All Affected Objects Todos os Objetos Afetados + Expanded Patterns Padrões Expandidos + Outlined Strokes Traçados em Contorno + Outlined Text Texto em Contornos + All Rasterized Regions Todas as Regiões Rasterizadas + High Resolution Alta Resolução + Medium Resolution Média Resolução + Low Resolution Baixa Resolução + Copyright and Contact Info Direitos Autorais e Informações de Contato + All Slices Todas as Fatias + Selected Slices Fatias Selecionadas + No Slices Nenhuma Fatia + Images Only Somente Imagens + HTML and Images HTML e Imagens + Selective Seletiva + Adaptive Adaptativa + Black & White Preto e Branco + No Dither Sem Dither + Diffusion Difusão + Unsorted Sem Ordenação + Sort by Hue Ordenar por Matiz + Sort by Luminance Ordenar por Luminância + Sort by Popularity Ordenar por Popularidade + Baseline (Standard) Linha de Base (Padrão) + Baseline Optimized Linha de Base Otimizada + Art Optimized Otimizado para Arte + Type Optimized Otimizado para Texto + Language Level 2 Nível de Linguagem 2 + Language Level 3 Nível de Linguagem 3 + TIFF (Black & White) TIFF (Preto e Branco) + TIFF (8-bit Color) TIFF (Cor de 8 bits) + 1 bit 1 bit + 4 bit 4 bits + 8 bit 8 bits + 16 bit 16 bits + 24 bit 24 bits + 32 bit 32 bits + 16 bits/pixel 16 bits/pixel + 24 bits/pixel 24 bits/pixel + 32 bits/pixel 32 bits/pixel + DWG (use DXF) DWG (use DXF) +file-filter All readable files Todos os arquivos legíveis +file-filter All placeable files Todos os arquivos que podem ser colocados +file-filter Swatch libraries Bibliotecas de amostras +file-filter Flattener presets Predefinidos de achatamento +file-filter PDF presets Predefinidos de PDF +file-filter Print presets Predefinidos de impressão +file-filter SVG Compressed SVG Compactado +file-filter PDF-compatible .ai .ai compatível com PDF +file-filter VectorCraft Template Modelo do VectorCraft +file-filter Templates Modelos +diagnostics render renderização +diagnostics ui interface + Preset {number} Predefinido {number} + PRs PRs + @{login}: {prs}, {commits}, +{added} / −{deleted} lines (Δ {delta}), +{binary_added} / −{binary_deleted} binary assets, {first} – {last} @{login}: {prs}, {commits}, +{added} / −{deleted} linhas (Δ {delta}), +{binary_added} / −{binary_deleted} ativos binários, {first} - {last} +@plural {n} PR|{n} PRs {n} PR|{n} PRs +@plural {n} commit|{n} commits {n} commit|{n} commits +gradient-kind Radial Radial +mark-style Japanese Japonesas + 2-Up 2-Up + 2up 2up + 3 Colors 3 Cores + 4-Up 4-Up + 4up 4up + 6 Colors 6 Cores + A6 A6 + Alt+Click Alt+Clique + Alt+Drag Alt+Arrastar + Anchors Pontos de Ancoragem + Area Type Texto de Área + Basic Básico + Black Outline Contorno Preto + Brown Marrom + Convert to Global Converter em Global + Cool Frias + CRLF (Windows) CRLF (Windows) + Current Colors Cores Atuais + Default Graphic Style Estilo Gráfico Padrão + Direct Selection Seleção Direta + Distance: Distância: + GIF, 128 colours GIF, 128 cores + Gray Cinza + Grey Cinza + Group Selection Seleção de Grupo + Hand Mão + Harmony Rules Regras de Harmonia + Heavy Ink Tinta Pesada + High Fidelity Photo Foto de Alta Fidelidade + Image Trace (Make and Expand) Rastreamento de Imagem (Criar e Expandir) + Joins: Junções: + Keeps the document editable: VectorCraft reopens the PDF with nothing lost. For files you'll edit again. Mantém o documento editável: o VectorCraft reabre o PDF sem perder nada. Para arquivos que você vai editar de novo. + Lab Spot Colors Cores Spot Lab + Lasso Laço + Length: Comprimento: + LF (macOS, Linux) LF (macOS, Linux) + Line Art Arte de Linha + Low Fidelity Photo Foto de Baixa Fidelidade + Make Text Wrap Criar Quebra de Texto + Measure Medir + Monochrome Monocromático + Muted Apagadas + of de + Orange Laranja + Pattern Swatches Amostras de Padrão + PDF 1.7 PDF 1.7 + Pen Caneta + Pink Rosa + Pixel Pixel + Points: Pontos: + Purple Roxo + Release Image Trace Liberar Rastreamento de Imagem + Release Text Wrap Liberar Quebra de Texto + RGB RGB + Rotate View Girar Exibição + Scissors Tesoura + Shades of Gray Tons de Cinza + Shear: Cisalhamento: + Shift+Click Shift+Clique + Shift+Drag Shift+Arrastar + Silhouettes Silhuetas + Sketched Art Arte Esboçada + Spectrum Espectro + sRGB IEC61966-2.1 sRGB IEC61966-2.1 + Sunshine Luz do Sol + SVG 1.1 SVG 1.1 + Technical Drawing Desenho Técnico + Text Displayed in Cell Texto Exibido na Célula + Touch Type Texto de Toque + UTF-16 (Unicode) UTF-16 (Unicode) + Variation Variação + VectorCraft Default Padrão do VectorCraft + VectorCraft Generic CMYK (SWOP-like) CMYK Genérico do VectorCraft (tipo SWOP) + VectorCraft Swatches (.vcswatches) Amostras do VectorCraft (.vcswatches) + Vertical Area Type Texto de Área Vertical + Vertical Type Texto Vertical + Vertical Type on a Path Texto Vertical em um Caminho + Vivid Vívidas + Warm Quentes + WebP WebP + Working RGB RGB de Trabalho + X: X: + Y: Y: +@id file.close Fechar Arquivo + Back Traseira + Both sides Ambos os Lados + Classic Clássico + Cove Côncavo + Depth Profundidade + Front Frente + Isometric Bottom Isométrico Inferior + Isometric Left Isométrico Esquerdo + Isometric Right Isométrico Direito + Isometric Top Isométrico Superior + Off-Axis Back Traseira Fora do Eixo + Off-Axis Bottom Inferior Fora do Eixo + Off-Axis Front Frontal Fora do Eixo + Off-Axis Left Esquerda Fora do Eixo + Off-Axis Right Direita Fora do Eixo + Off-Axis Top Superior Fora do Eixo + Ogee Gola + Reset all 3D settings to their defaults. Redefinir todas as configurações 3D para os padrões. + Step Degrau + Taper Afunilar + Twist Torcer + Volume Volume +3d Cap Tampa +3d Solid Sólido +3d Hollow Oco +3d Bevel Chanfro +3d Rounded Arredondado +3d Space Espaço + Bevel Shape Forma do Chanfro + Bevel Inside Chanfro Interno + Bevel both sides Chanfro nos Dois Lados + Presets Predefinidos +@msg An object takes one 3D effect. Edit the existing effect's options, or remove it first. Um objeto aceita apenas um efeito 3D. Edite as opções do efeito existente ou remova-o primeiro. +@msg {label} currently requires a path or compound path. Convert type, images and groups to paths first. {label} exige, por enquanto, um caminho ou caminho composto. Converta antes texto, imagens e grupos em caminhos. +@msg {label} requires a shape with at least two anchors {label} exige uma forma com pelo menos dois pontos de ancoragem +@msg The shape is too complex for a 3D effect A forma é complexa demais para um efeito 3D +@msg The 3D surface is too complex; simplify the shape A superfície 3D é complexa demais; simplifique a forma +@msg an image of {w} × {h} pixels is too large to draw uma imagem de {w} × {h} pixels é grande demais para ser desenhada + Fill and Stroke Controls Controles de Preenchimento e Traçado + Coloring Controls Controles de Coloração + Draw Mode Controls Controles de Modo de Desenho + Screen Mode Controls Controles de Modo de Tela +@msg control must be fillStroke, coloring, drawMode or screenMode control deve ser fillStroke, coloring, drawMode ou screenMode +@msg unknown control `{name}`: fillStroke, coloring, drawMode or screenMode controle desconhecido `{name}`: fillStroke, coloring, drawMode ou screenMode +@msg give a fraction `t` from 0 to 1 informe uma fração `t` de 0 a 1 +@msg give the path `id` informe o `id` do caminho +@msg invalid stroke widths larguras de traçado inválidas +@msg object has no weighted stroke o objeto não tem um traçado com espessura válida Automate Automatizar Batch… Lote… Source Folder: Pasta de origem: diff --git a/crates/ui-egui/src/i18n/tests.rs b/crates/ui-egui/src/i18n/tests.rs index 021cc829a..5eaab9dae 100644 --- a/crates/ui-egui/src/i18n/tests.rs +++ b/crates/ui-egui/src/i18n/tests.rs @@ -753,6 +753,41 @@ fn uk() -> Lang { Lang::from_code("uk").expect("uk registered") } +fn pt_br() -> Lang { + Lang::from_code("pt-br").expect("pt-br registered") +} + +/// Brazilian Portuguese covers the complete interface and messages, with two plural forms like +/// English (zero takes the plural). +#[test] +fn brazilian_portuguese_reads_as_portuguese() { + assert_eq!(pt_br().name(), "Português (Brasil)"); + assert!(pt_br().complete_menus()); + assert_eq!(Lang::from_pref("pt-br"), pt_br()); + assert_eq!(Lang::from_pref("pt-BR"), pt_br()); + for tag in ["pt-br", "pt_BR.UTF-8", "pt-BR", "pt_BR"] { + assert_eq!(lang_from_tag(tag), Some(pt_br()), "{tag}"); + } + for (en, want) in [ + ("Artboard Tool", "Ferramenta Mesa de Trabalho"), + ("Swatches", "Amostras"), + ("Pathfinder", "Localizador de Caminhos"), + ("Stroke", "Traçado"), + ("Fill", "Preenchimento"), + ("Direct Selection Tool", "Ferramenta Seleção Direta"), + ("Save As…", "Salvar Como…"), + ("Undo", "Desfazer"), + ("Close", "Fechar"), + ] { + assert_eq!(tr(pt_br(), en), want, "{en}"); + } + assert_eq!(trn(pt_br(), 1, "{n} Layer", "{n} Layers"), "1 Camada"); + assert_eq!(trn(pt_br(), 0, "{n} Layer", "{n} Layers"), "0 Camadas"); + assert_eq!(trn(pt_br(), 3, "{n} Layer", "{n} Layers"), "3 Camadas"); + let nested = "command `object.group` is not available right now: nothing selected"; + assert_eq!(message(pt_br(), nested), "o comando `object.group` não está disponível agora: nada selecionado"); +} + /// Spanish uses the vector-illustration vocabulary its users know, has two plural forms like /// English, and reads the same in the menus and in the panels. #[test] @@ -1161,7 +1196,7 @@ fn unknown_parameter_errors_are_translated() { for (cmd, p) in [("file.new", json!({"widht": 300})), ("select.all", json!({"zzz": 1})), ("shape.line", json!({"colour": "red"}))] { let e = vectorcraft_engine::check_params(cmd, &p).unwrap_err(); let vectorcraft_engine::EngineError::BadParams { msg, .. } = &e else { panic!("{cmd} {p}: {e}") }; - for code in COMPLETE_MESSAGES.iter().chain(&["pt-br"]) { + for code in COMPLETE_MESSAGES { let shown = message(Lang::from_code(code).unwrap(), &e.to_string()); assert!(!shown.contains("unknown parameter") && shown.contains(cmd), "{code}: {shown} ({msg})"); } @@ -1207,7 +1242,7 @@ fn select_key_param_error_is_translated() { } /// Languages whose catalogs cover every status and error message. -const COMPLETE_MESSAGES: &[&str] = &["cs", "de", "es", "fr", "hu", "it", "ja", "ko", "pl", "ru", "uk", "vi"]; +const COMPLETE_MESSAGES: &[&str] = &["cs", "de", "es", "fr", "hu", "it", "ja", "ko", "pl", "pt-br", "ru", "uk", "vi"]; /// Crates whose error and status messages reach the status bar. const MESSAGE_CRATES: &[&str] = &["ui-egui", "engine", "doc", "format", "svg", "pdf", "eps", "text", "plugins", "metafile", "cad", "trace"]; diff --git a/docs/development.md b/docs/development.md index 0265d2306..6bb770432 100644 --- a/docs/development.md +++ b/docs/development.md @@ -203,7 +203,7 @@ locale such as `ru-RU`, `ru-BY` or `ru-KZ` resolves to it), Ukrainian (`uk`, com `uk_UA.UTF-8` and every other `uk-*` locale resolve to it; integer plurals use one/few/many), Hungarian (`hu`, complete; `hu-HU` and every other `hu-*` locale resolve to it; a count takes the singular, so plurals have one form), Polish (`pl`, complete; `pl-PL` and every other `pl-*` locale resolve to it; plurals use one/few/many, with 21, 31 … taking many), Czech (`cs`, every menu label) and Brazilian Portuguese -(`pt-br`, every menu label and every `tl!` literal). Untranslated text falls back to English until its rows are added. +(`pt-br`, complete; `pt-BR`, `pt_BR.UTF-8` and other tags that resolve to `pt-br` through `candidates`). Untranslated text falls back to English until its rows are added. - `tl!("…")` translates a literal into the language the UI is drawn in; `i18n::t(s)` is the same for a `&str`. `tr(lang, s)` takes the language; `tr_ctx` when one English word needs different translations; @@ -230,7 +230,7 @@ locale resolve to it; plurals use one/few/many, with 21, 31 … taking many), Cz control channel, MCP and tests read them) and are translated only where the status bar draws them (`i18n::msg`). `@msg` catalog rows hold a whole message or a template such as `Couldn't open {name}: {e}`; `{_1}`, `{_2}` … stand for the format string's `{}`, and the values in the - placeholders are translated in turn (the reason after `: {e}` is often a message too). Czech, German, Spanish, French, Hungarian, Italian, Japanese, Korean, Polish, Russian, Ukrainian and Vietnamese cover every + placeholders are translated in turn (the reason after `: {e}` is often a message too). Czech, German, Spanish, French, Hungarian, Italian, Japanese, Korean, Polish, Brazilian Portuguese, Russian, Ukrainian and Vietnamese cover every message literal the test scan finds (`complete_languages_translate_every_message`, languages listed in `COMPLETE_MESSAGES`): a new `Err("…")`, `Other(…)`, `#[error(…)]` or `status(…)` message needs a row in each of those catalogs (`VECTORCRAFT_I18N_DUMP_MESSAGES=messages.txt cargo test -p vectorcraft-ui-egui complete_languages_translate_every_message` lists them all). Other languages show messages in English diff --git a/docs/gaps.md b/docs/gaps.md index 3c90413d0..4069660c4 100644 --- a/docs/gaps.md +++ b/docs/gaps.md @@ -1,6 +1,6 @@ # Gaps -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-15 · **Change:** minor (G6: image variables landed, estimate 8–14 → 6–12 h; Warp Options controls verified by focused checks and original-image review; estimates unchanged; existing-guide Escape cancellation validated 2026-10-14; scores and hours unchanged; open-path anchor Delete keeps surviving runs separate; estimates unchanged; Artboard tab-switch follow-up historically validated on `a0671777`; scores and hours unchanged; Artboard clean active-tab close/Delete follow-up validated 2026-10-15; G13: Object › Intertwine landed, #1763; no entry closed, estimates unchanged; MCP `add_text` exposes the existing `vertical` option for point, area and path type; horizontal remains the default; scores and hours unchanged; Vertical fullwidth question and exclamation marks keep their nominal glyph upright when the font has no vertical alternate; scores and hours unchanged.; G1: Curvature curve geometry, #1236 in part; Width-point finite-arithmetic follow-up validated; scores and hours unchanged; Image Trace adjustment discovery; G9: legacy `.ai` of version 7 saved with type as text and hidden objects kept, legacy type read, #868; estimate unchanged; Revolve: automatic smooth shading and default-on Cap with continuous rims; later 2026-10-14: G8 untrusted files, #1852, #1862–#1873; G11 anchor X/Y/W/H, #1824, Snap to Grid over Snap to Pixel, #1816, redo during a drag, #1719, Dim Images, #1683, failed-save dialog, #1685; gaps noted for reporters: G1 Warp Options for Effect › Warp, #1760, Color Picker Tab order, #1692, key anchor, #1636; G7 custom toolbars, #1759, workspace panel widths, #1753; G11 Shape Builder gaps between closed shapes, #1691, interior anchor delete; G13 Intertwine, #1763, gradient mesh from an image, #1676, Image Trace radial gradients, #1849; G12 duplicated line removed; no entry closed, estimates unchanged; verified PngSuite downloads, #1729; synthetic control-input budgets, #1709; 2026-10-14 fixes: G11 anchor Align and Distribute, #1636, Delete and selection, #1674, #1666, #1743, #1686, Roughen and Scribble, #1643, #1648; G8 file and input hardening, #1776–#1783, #1786, #1807; G10 Wayland cursors and the Windows title bar, unconfirmed, #1645, #1758; no entry closed, estimates unchanged; later 2026-10-13 fixes, #1570, #1578, #1590, #1613, #1615, #1616, #1620 in part, #1602 in part; no entry closed, estimates unchanged; TIFF is available in Export for Screens and Asset Export with shared format settings; scores and hours unchanged; G1/M11: Artboard deletion and history selection normalization; history regressions and full workspace CI pass; scores and hours unchanged; Character styles retain explicit Auto leading, propagate resets and preserve local leading overrides; scores and hours unchanged; Width Point Edit: Shift-double-click enables adjoining adjustment; plain double-click keeps it off; scores and hours unchanged; G12: Identify Objects By acts, #394; ~16 → ~15 prefs still inert; G12: Appearance of Black › Printing / Exporting acts, #394; ~16 → ~15 prefs still inert; control transport deadlines, #1726; G1: Average and Join in one step with a corner or smooth choice added as missing (it was listed as done in ui-parity.md); Join after Average, #1533; guide objects, #1534; Keyboard Shortcuts, #1539; G9 and G11 fixes, #1528, #1530, #1544, #1553, #1512, #1537; estimates unchanged; Direct Selection anchor precedence, #1508; dialog slider rails, #1483; template layers in Outline view, #1486; Tabs panel stop drags, #1458; type that does not fit its frame is reported, #1471; 3D on outlined type, #1481, Twist range, #1524, twisted walls, #1525; print-size images, #1517; French catalog, #1511; estimates unchanged; G1: Split Into Grid options, #1462, Transform Objects and Reflect's angle, #1448 and #1460, Pathfinder on a group, #1450, value fields, #1457 and #1465 in part; G9: grayscale TIFFs with alpha, #1466 in part; G6: unknown parameter keys refused, #1442; G10: window surfaces past 8192 px, #1459 in part; G15: many-object edits, #1429 in part; estimates unchanged; G16: Vietnamese catalog added, complete under the tests; three key languages remain, 60–100 → 55–90 h; G3: Extrude & Bevel, Inflate and Rotate added, 45–75 → 25–45 h; G9: `.ai` compound path paint, #1410, overprint kept on import, #1388, text-only PDF parts, #1387; G1: Transform dialogs preview, #1412, transforms of direct-selected anchors, #1408, corner drags, #1229; G11: strokes wider than their shape, #1396; estimates unchanged; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; G9: `.ai` gradient matrices and meshes from the editing data; estimate unchanged; G9: `.ai` art styles from the editing data; estimate unchanged; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; G9: `.ai` gradient matrices and meshes from the editing data; estimate unchanged; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; SVG knockout groups of opaque art export without masks; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; G9: `.ai` keeps its RGB numbers, PDF import keeps strokes apart from fills faded or masked by their group; estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-15 · **Change:** minor (G16: Brazilian Portuguese catalog complete under the tests, #1914; Localization 71% → 74%, hours 55–90 → 50–85; G6: image variables landed, estimate 8–14 → 6–12 h; Warp Options controls verified by focused checks and original-image review; estimates unchanged; existing-guide Escape cancellation validated 2026-10-14; scores and hours unchanged; open-path anchor Delete keeps surviving runs separate; estimates unchanged; Artboard tab-switch follow-up historically validated on `a0671777`; scores and hours unchanged; Artboard clean active-tab close/Delete follow-up validated 2026-10-15; G13: Object › Intertwine landed, #1763; no entry closed, estimates unchanged; MCP `add_text` exposes the existing `vertical` option for point, area and path type; horizontal remains the default; scores and hours unchanged; Vertical fullwidth question and exclamation marks keep their nominal glyph upright when the font has no vertical alternate; scores and hours unchanged.; G1: Curvature curve geometry, #1236 in part; Width-point finite-arithmetic follow-up validated; scores and hours unchanged; Image Trace adjustment discovery; G9: legacy `.ai` of version 7 saved with type as text and hidden objects kept, legacy type read, #868; estimate unchanged; Revolve: automatic smooth shading and default-on Cap with continuous rims; later 2026-10-14: G8 untrusted files, #1852, #1862–#1873; G11 anchor X/Y/W/H, #1824, Snap to Grid over Snap to Pixel, #1816, redo during a drag, #1719, Dim Images, #1683, failed-save dialog, #1685; gaps noted for reporters: G1 Warp Options for Effect › Warp, #1760, Color Picker Tab order, #1692, key anchor, #1636; G7 custom toolbars, #1759, workspace panel widths, #1753; G11 Shape Builder gaps between closed shapes, #1691, interior anchor delete; G13 Intertwine, #1763, gradient mesh from an image, #1676, Image Trace radial gradients, #1849; G12 duplicated line removed; no entry closed, estimates unchanged; verified PngSuite downloads, #1729; synthetic control-input budgets, #1709; 2026-10-14 fixes: G11 anchor Align and Distribute, #1636, Delete and selection, #1674, #1666, #1743, #1686, Roughen and Scribble, #1643, #1648; G8 file and input hardening, #1776–#1783, #1786, #1807; G10 Wayland cursors and the Windows title bar, unconfirmed, #1645, #1758; no entry closed, estimates unchanged; later 2026-10-13 fixes, #1570, #1578, #1590, #1613, #1615, #1616, #1620 in part, #1602 in part; no entry closed, estimates unchanged; TIFF is available in Export for Screens and Asset Export with shared format settings; scores and hours unchanged; G1/M11: Artboard deletion and history selection normalization; history regressions and full workspace CI pass; scores and hours unchanged; Character styles retain explicit Auto leading, propagate resets and preserve local leading overrides; scores and hours unchanged; Width Point Edit: Shift-double-click enables adjoining adjustment; plain double-click keeps it off; scores and hours unchanged; G12: Identify Objects By acts, #394; ~16 → ~15 prefs still inert; G12: Appearance of Black › Printing / Exporting acts, #394; ~16 → ~15 prefs still inert; control transport deadlines, #1726; G1: Average and Join in one step with a corner or smooth choice added as missing (it was listed as done in ui-parity.md); Join after Average, #1533; guide objects, #1534; Keyboard Shortcuts, #1539; G9 and G11 fixes, #1528, #1530, #1544, #1553, #1512, #1537; estimates unchanged; Direct Selection anchor precedence, #1508; dialog slider rails, #1483; template layers in Outline view, #1486; Tabs panel stop drags, #1458; type that does not fit its frame is reported, #1471; 3D on outlined type, #1481, Twist range, #1524, twisted walls, #1525; print-size images, #1517; French catalog, #1511; estimates unchanged; G1: Split Into Grid options, #1462, Transform Objects and Reflect's angle, #1448 and #1460, Pathfinder on a group, #1450, value fields, #1457 and #1465 in part; G9: grayscale TIFFs with alpha, #1466 in part; G6: unknown parameter keys refused, #1442; G10: window surfaces past 8192 px, #1459 in part; G15: many-object edits, #1429 in part; estimates unchanged; G16: Vietnamese catalog added, complete under the tests; three key languages remain, 60–100 → 55–90 h; G3: Extrude & Bevel, Inflate and Rotate added, 45–75 → 25–45 h; G9: `.ai` compound path paint, #1410, overprint kept on import, #1388, text-only PDF parts, #1387; G1: Transform dialogs preview, #1412, transforms of direct-selected anchors, #1408, corner drags, #1229; G11: strokes wider than their shape, #1396; estimates unchanged; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; G9: `.ai` gradient matrices and meshes from the editing data; estimate unchanged; G9: `.ai` art styles from the editing data; estimate unchanged; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; G9: `.ai` gradient matrices and meshes from the editing data; estimate unchanged; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; SVG knockout groups of opaque art export without masks; G9: `.ai` editing-data follow-ups (gradient stops, type placement, short area-type frames), #1390, #1391, #1392; G15: symbol instance art kept between frames, #1386; G1: dialog keyboard focus, #1367 and #1395; estimates unchanged; G9: placed (linked) files read from `.ai` editing data, #1264; G9: gradient shapes import as paths, #1304, and white constant alpha masks, #1286 in part; G15: linear deselect on hide or lock, #1353; estimates unchanged; G7: custom ruler origin done, #1212; G1: Artboard object clicks create a fitted artboard (#1227); remaining interaction pass and estimate unchanged; Pathfinder single-result source names and SVG IDs retained, #1293; DXF control-point SPLINE closure read, #1299 follow-up; G16: Korean catalog added, 70–110 → 60–100 h; Czech render-site localization follow-up; scores and estimates unchanged; Document Setup: Edit Artboards closes the modal after applying valid settings; pointer-click regressions; scores and hours unchanged; Artboards: Escape exits editing; an active drag cancels first; shortcut-routing regression; scores and hours unchanged; G11: valid selection after Simplify and Add Anchor Points (#1272); estimates unchanged; G2: Film Grain added; Photoshop effects 29/57; 28 filters remain; G10: RPM runtime dependency metadata (#1275); estimates unchanged; G15: texture-effect distance searches optimized (#1257); idle-machine/platform drag QA still pending; estimate unchanged; G1: Curvature point display improved (#1236, in part); estimates unchanged; G4: full-name font matching (#1258); Windows font-service QA pending; estimate unchanged; G11: no-op anchor Align keeps history and saved state (#1180 follow-up); estimates unchanged; G1: dedicated Eyedropper cursor and precise-cursor checks (#1269); estimates unchanged; G1: Eyedropper reads visible locked and outside-isolation sources (#1251); estimate unchanged; G11: Direct Selection segment Delete (#1278); estimates unchanged; G1: painted strokes regain the existing default after None/zero-width inheritance (#1253); estimate unchanged; G15: large-selection edits, cached live effects and faster Pathfinder, #1173; G4: proportional vertical metrics done, #966; G11: Shape Builder merge seams on grids of lines fixed, #893; scaled text controls corrected, #1034; group font-size preservation deferred; G9: `.ai` keeps its RGB numbers, PDF import keeps strokes apart from fills faded or masked by their group; estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x) Every known shortfall against Illustrator, one entry each, **ranked by how much it stops a professional from switching**. This is the work list: unless you were given a task, pick the highest-ranked gap you can make @@ -30,7 +30,7 @@ stage ([ROADMAP.md](../ROADMAP.md)). | 13 | [G7 Views and windows](#g7-views-and-windows) | 15–25 | no | [ui-parity.md](ui-parity.md) | | 14 | [G6 Automation and scripting](#g6-automation-and-scripting) | 4–8 | no | [target-app-parity.md](target-app-parity.md) | | 15 | [G15 Performance budgets and a GPU renderer](#g15-performance-budgets-and-a-gpu-renderer) | 15–25 | budgets only | [hardware-parity.md](hardware-parity.md) | -| 16 | [G16 Localization: the three missing key languages](#g16-localization-the-three-missing-key-languages) | 55–90 | no | [localization-parity.md](localization-parity.md) | +| 16 | [G16 Localization: the three missing key languages](#g16-localization-the-three-missing-key-languages) | 50–85 | no | [localization-parity.md](localization-parity.md) | | 17 | [G17 Ecosystem: third-party plug-ins](#g17-ecosystem-third-party-plug-ins) | 20–45 | no | — | | 18 | [G18 Generative AI features](#g18-generative-ai-features) | 30–60 | no | — | | 19 | [G19 Accessibility](#g19-accessibility) | 15–25 | no | [ui-parity.md](ui-parity.md) | @@ -295,12 +295,12 @@ from G14 and the budget run of G15: **~170–270 h** one agent, ~50–80 h wall ## G16 Localization: the three missing key languages -- **Evidence:** Vietnamese catalog complete under the tests (menus, literals, messages; one plural form). Czech render-site bypasses reduced in file dialogs, diagnostics, preset names and contributor tooltips; gradient grammar and printer-mark context corrected (see [localization-parity.md](localization-parity.md)). Native review and the remaining missing-language work remain. +- **Evidence:** Brazilian Portuguese catalog complete under the tests (menus, literals, messages; one|other plurals; #1914). Vietnamese catalog complete under the tests (menus, literals, messages; one plural form). Czech render-site bypasses reduced in file dialogs, diagnostics, preset names and contributor tooltips; gradient grammar and printer-mark context corrected (see [localization-parity.md](localization-parity.md)). Native review and the remaining missing-language work remain. - **Missing:** Hindi, Arabic, Indonesian catalogs; a Korean UI font for the web build; a right-to-left interface and interface - shaping for Arabic and Devanagari; messages for Simplified Chinese and Brazilian Portuguese; native review of + shaping for Arabic and Devanagari; messages for Simplified Chinese; native review of every catalog. Measured in [localization-parity.md](localization-parity.md). -- **Estimate:** 55–90 h plus human review (Vietnamese landed 2026-10-12). +- **Estimate:** 50–85 h plus human review (Brazilian Portuguese completed 2026-10-14). ## G17 Ecosystem: third-party plug-ins @@ -327,6 +327,7 @@ from G14 and the budget run of G15: **~170–270 h** one agent, ~50–80 h wall | Date | Change | Summary | |---|---|---| +| 2026-10-14 | minor | G16: Brazilian Portuguese (`pt-br`) catalog complete under the tests (#1914); three key languages remain (Hindi, Arabic, Indonesian), 55–90 → 50–85 h | | 2026-10-14 | minor | G6: dataset CSV import/export (`dataset.import` / `dataset.export`); remaining: scripting surface, Batch, graph variables; estimate 6–12 → 4–8 h | | 2026-10-14 | minor | G6: image variables (`VariableKind::Image`, `variable.makeImageDynamic`, path values on `dataset.select` keeping bounds); remaining: scripting surface, Batch, graph variables, dataset import/export; estimate 8–14 → 6–12 h | | 2026-10-14 | minor | Effect > Warp: style, orientation and percent controls; focused checks passed and original captures reviewed; scores and hours unchanged | diff --git a/docs/localization-parity.md b/docs/localization-parity.md index a81713b74..1a77c2136 100644 --- a/docs/localization-parity.md +++ b/docs/localization-parity.md @@ -1,6 +1,6 @@ # Localization parity -> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-13 · **Change:** minor (Polish: the rows added by the maintainers confirmed by the Polish translator, #1614; tool flyouts fit their translated names, #1616; scores and estimates unchanged; Polish: 4,510 rows counted in the catalog (the row said 4,492), #1498; French: 423 strings added since the catalog was measured and 188 entries reworded, #1511; Hungarian: one message in the informal address, #1474; scores and estimates unchanged; Vietnamese catalog added, complete under the tests; 12-language score 63% → 71%; Czech: 128 strings added since the catalog was completed are translated, #1461; scores and estimates unchanged; Korean catalog added, complete under the tests; 12-language score 54% → 63%; Hungarian catalog added; Czech render-site localization follow-up; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x) +> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-10-14 · **Change:** minor (Brazilian Portuguese (`pt-br`) catalog completed under the tests: menus, `tl!` literals and messages; 12-language score 71% → 74%; #1914) · **Target:** Adobe Illustrator 2026 (30.x) Per-language status of VectorCraft's interface. How the catalogs work and how to add a language: [`development.md` › Localisation](development.md#localisation). Part of @@ -29,15 +29,15 @@ Chinese by `imachus`). None is recorded as reviewed by a native speaker; the cat | Hindi | `hi` | 0 | none | Devanagari: the document's text shapes (HarfRust), untested for Devanagari, but the egui interface does no complex shaping | no | none | 20–30 | | Arabic | `ar` | 0 | none | document text: bidi layout and Paragraph Direction; interface: no right-to-left layout, no Arabic shaping in egui | no | none | 25–40 | | French | `fr` | 4,020 / 4,020 (100%) | all | Latin | no | full | — (review) | -| Portuguese | `pt-br` | 2,726 / 4,020 (68%): every menu label and `tl!` literal | messages in English | Latin | no | partial | 4–6 | +| Portuguese | `pt-br` | 4,707 catalog entries: menus, `tl!` literals and messages complete (tests); one|other plurals | all | Latin | contributor is a Brazilian Portuguese speaker; further native review welcome | full | — (review) | | Indonesian | `id` | 0 | none | Latin | no | none | 5–8 | | Japanese | `ja` | 4,004 / 4,020 (99.6%) | all | CJK UI font as above; Japanese IME; vertical type partial; Japanese crop marks and composition settings | no | full | — (review) | | German | `de` | 3,952 / 4,020 (98%; tests hold menus, literals and messages complete) | all (602 of 604 message rows; landed 2026-10-10) | Latin | contributor-written, not reviewed | full | — (review) | | Korean | `ko` | 4,151 rows: menus, `tl!` literals and messages complete (tests); one plural form | all | Hangul from an installed system font on the desktop (Apple SD Gothic Neo, Malgun Gothic, Noto Sans CJK KR…); the web build has no Korean UI font yet (craft-fonts); IME path exists | no (AI-drafted) | full | — (review; web font) | | Vietnamese | `vi` | 4,225 rows: menus, `tl!` literals and messages complete (tests); one plural form; 3,548 plain + 13 `@plural` + 12 contextual + 652 `@msg` | all | Latin with Vietnamese diacritics (precomposed forms; glyph tests pass) | contributor is a Vietnamese speaker; AI-assisted draft, further native review welcome | full | — (review) | -**12-language score: ~71%** (equal weights: 100 + 85 + 100 + 0 + 0 + 100 + 68 + 0 + 100 + 98 + 100 + 100, over 12). -**To `full` for all twelve: ~55–90 h**, most of it Arabic (right-to-left interface) and Hindi (interface +**12-language score: ~74%** (equal weights: 100 + 85 + 100 + 0 + 0 + 100 + 100 + 0 + 100 + 98 + 100 + 100, over 12). +**To `full` for all twelve: ~50–85 h**, most of it Arabic (right-to-left interface) and Hindi (interface shaping). Each new Latin-script catalog is ~4,000 rows; the existing ones were written in a few agent hours each plus review. Native-speaker review is human work and isn't in the hours. @@ -80,6 +80,7 @@ font for the web build. | Date | Change | Summary | |---|---|---| +| 2026-10-14 | minor | Brazilian Portuguese (`pt-br`, #1914): catalog completed under the tests (menus, literals, messages); 12-language score 71% → 74%, hours 55–90 → 50–85 | | 2026-10-13 | minor | The Polish translator confirmed the Polish rows the maintainers had added after the catalog was written (#1614); Tool flyouts are as wide as their longest translated name and shortcut need, so names no longer run into shortcuts in Spanish and other languages (#1650, fixes #1616); scores and estimates unchanged | | 2026-10-13 | minor | Polish (`pl`, #1498): the row count is corrected to the 4,510 rows in `pl.tsv` (it said 4,492), 654 of them `@msg` rows; AI-drafted, native review pending; scores and estimates unchanged | | 2026-10-13 | minor | French: the 423 strings added since the catalog was last complete are translated, and 188 entries are reworded to the feature names French users know (#1511); Hungarian: one message uses the informal address like the rest of the interface (#1474); the entry counts in the tables are the earlier measurements; native review still pending; scores and estimates unchanged | diff --git a/docs/target-app-parity.md b/docs/target-app-parity.md index 10da19937..b9b2cb17a 100644 --- a/docs/target-app-parity.md +++ b/docs/target-app-parity.md @@ -139,7 +139,7 @@ Values are from [By dimension](#by-dimension). | Performance | 8 | 60% | 4.8 | | Platforms | 5 | 80% | 4.0 | | Hardware | 4 | 35% | 1.4 | -| Localization | 4 | 71% | 2.8 | +| Localization | 4 | 74% | 3.0 | | Ecosystem and plug-ins | 4 | 15% | 0.6 | | AI features | 3 | 0% | 0.0 | | **Ready for real work** | **100** | | **~62%** | @@ -247,7 +247,7 @@ what keeps it from beta, not from alpha. | UI/UX fidelity (look ~80%, interaction ~45%) | 55% | 70–110 | estimated | [ui-parity.md](ui-parity.md) | | File formats | 75% | 15–30 | estimated | [file-format-parity.md](file-format-parity.md) | | Hardware (GPU, pen, touch, displays) | 35% | 25–45 | estimated | [hardware-parity.md](hardware-parity.md) | -| Localization (the 12 key languages, equally weighted) | 71% | 55–90 | measured from catalogs | [localization-parity.md](localization-parity.md) | +| Localization (the 12 key languages, equally weighted) | 74% | 50–85 | measured from catalogs | [localization-parity.md](localization-parity.md) | | Performance | ~60% | 15–25 | estimated (unverified budgets) | [gaps.md](gaps.md) | | Stability | ~60% | 30–50 | estimated | [gaps.md](gaps.md) | | Platforms (macOS, Windows x64/arm64, Linux, FreeBSD, web) | 80% | 15–25 | estimated | [gaps.md](gaps.md) | @@ -437,7 +437,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur - Panels undock (#495): a dock tab, a panel icon or a popped-out panel's title dragged out of the dock floats that panel inside the window, and the strip right of the dock's tabs floats the whole tabbed group. A floating group moves by its title bar, a tab dragged out of it floats on its own, and dropped on another group's title bar or tabs it stacks with that group; dropped on the dock, which lights up under the pointer, its panels go back where they live (the tabbed group or the icon column), as its × and the panel menus' Float Panel / Dock Panel do (`window.panel.float`, `window.panel.dock`). The Tools panel floats by its title bar and docks again on the window's left edge. Floating groups stack into sets: dropped on the upper or lower half of another group (a line shows where), a group joins it right above or below it, and the set's groups stack top to bottom, each showing one panel, moving together by the top group's title bar, whose × docks them all; a group dragged by its tab strip leaves the set (`window.panel.float {below, above}`). A double-click on a tab collapses a floating group to its tabs (`collapsed`). Sets dropped on the left edge of the icon column or of another dock column dock as dock columns (a multi-column dock, `window.panel.dock {column}`), whose groups stack, tab and tear out as a floating set's do, and whose top strip floats the column again. Floating panels, their sets and the Tools panel's position are kept with the preferences and in user workspaces, and clamped into a smaller window. Not done: panels in separate OS windows, docking a panel into the default tabbed group it doesn't belong to, reordering tabs by dragging, collapsing a set or dock column to icons, dock columns right of the default dock, resizing floating panels and the groups of a set. - The dock's double arrow collapses Properties, Layers and Libraries to icons at the top of the icon column, popping out like the other icon panels, and expands them again (`window.collapseDock`, kept with the preferences and in saved workspaces). The icon column's own arrow (expanding the icon panels into a full column) is not done. - Czech render-site labels: desktop/web file filters, diagnostics, suggested preset names and contributor tooltips/plurals now use catalog lookups; gradients have Czech adjective agreement and printer marks have a separate context (PDF/Print and Summary). Search, Home, toolbar/panel tooltips and Preferences already look up their labels; new variable keys fall back to English in other languages. Evidence: `i18n::tests::czech_render_site_follow_up`, `dialogs::tests_modal::printer_mark_labels_are_distinct_from_language_names`; see [localization-parity.md](localization-parity.md). - - Localised UI: menus (in-window and native), panels, dialogs, toolbar and Preferences read from per-language catalogs (`crates/ui-egui/src/i18n`, see `docs/development.md`); Traditional Chinese (Taiwan), Simplified Chinese (mainland), Japanese, Korean, Vietnamese, German, Spanish, French, Italian, Russian and Ukrainian ship complete, and Czech and Brazilian Portuguese cover every menu label (and more), with system-locale detection on macOS, Windows, Linux and the web (the browser's languages, or `?lang=`), a Language preference and, on macOS, a VectorCraft ▸ Language menu. Names are never translated (fonts and their styles, layers, artboards, saved presets, user libraries, custom workspaces, recent files, plug-ins). + - Localised UI: menus (in-window and native), panels, dialogs, toolbar and Preferences read from per-language catalogs (`crates/ui-egui/src/i18n`, see `docs/development.md`); Traditional Chinese (Taiwan), Simplified Chinese (mainland), Japanese, Korean, Vietnamese, German, Spanish, French, Italian, Polish, Brazilian Portuguese, Russian and Ukrainian ship complete, and Czech covers every menu label (and more), with system-locale detection on macOS, Windows, Linux and the web (the browser's languages, or `?lang=`), a Language preference and, on macOS, a VectorCraft ▸ Language menu. Names are never translated (fonts and their styles, layers, artboards, saved presets, user libraries, custom workspaces, recent files, plug-ins). - Native macOS menu bar, vector tool cursors, a ⌘K command palette, middle-button panning with any tool. Native menus explicitly end tracking on command selection, outside window presses and Escape; menu updates wait until tracking ends, and a dismissing press never starts a canvas gesture (M14.8). - The macOS menu bar is built from the in-window menus (one model, `native_menu`) and laid out as a Mac app's: the VectorCraft menu holds About, Settings ▸ (each Preferences page, General… ⌘K), Language ▸, Appearance ▸ (UI brightness), Services, Hide VectorCraft ⌃⌘H (⌘H stays Hide Edges), Hide Others, Show All and Quit; Window gains Minimize ⌃⌘M, Zoom and Bring All to Front, and Help the system's search field. Its key equivalents go back to egui as key presses, so user shortcuts, focused text fields and the Type tool's input method behave as in the window, and nothing fires twice; enabled, check marks and labels update in place. `--in-window-menus` or `VECTORCRAFT_IN_WINDOW_MENUS=1` keeps the menus in the window; `ui.inspect` reports `nativeMenuBar`. - macOS: Finder opens every format File › Open reads with VectorCraft (double-click, Open With, a drop on the Dock icon, `open -a`), at launch or while it runs; the release and `cargo xtask bundle` apps share one `Info.plist` that declares those document types, owning only VectorCraft's own formats. The DMG opens on a designed Finder window, VectorCraft.app beside the `Applications` link over a background with the app icon (#493). @@ -542,7 +542,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur - **Paragraph alignment:** the shared Paragraph/Properties alignment row leaves every button unselected when the paragraphs it acts on differ. Auto resolves per paragraph; choosing an alignment uses the existing command. Headless paragraph_mixed_alignment_* regressions exercise mixed → Center → Undo, caret/uniform states, Unicode range boundaries, Auto/direction, split runs and grouped text. These regressions and full integration CI pass. Original captures confirm mixed → Center → Undo in the existing alignment-button layout. The [public Paragraph panel guide](https://helpx.adobe.com/illustrator/desktop/design-with-text/edit-format-text/paragraph-panel-overview.html) lists the seven controls, but does not specify mixed-state rendering. Other paragraph fields remain outside this change; scores and hours unchanged. For Auto Size area type in columns, the bisection for the frame's height runs on the lines of the one-column layout, and its result is checked with at most two layouts of the columns. When the text wraps around objects or does not fit the one-column layout, or when the check fails, the columns are laid out at every step of the bisection, as before. Typing at the start of a story of 50,000 characters in 2 columns took 1,670 ms a keystroke and now takes 292 ms (release build, `auto_height_in_columns_typing_timing`). An edit copies a thread's story only when it changes one of the thread's frames: with a story of 50,000 characters threaded through 8 frames with a style change at every word, moving another object took 7.8 ms and now takes 0.013 ms, and a frame of a drag took 7.2 ms and now takes 0.012 ms (release build, `threaded_story_edit_timing`). -- **Interface languages, vertical type:** Preferences ▸ User Interface (or VectorCraft ▸ Language on macOS) picks Automatic (the system locale) or a registered language, persisted as `interfaceLanguage`. Translations come from per-language catalogs (`i18n/*.tsv`): Traditional and Simplified Chinese, Japanese, German (every `de-*` locale), Spanish (neutral international Spanish, for every `es-*` locale), French (every `fr-*` locale), Italian (every `it-*` locale) Russian (every `ru-*` locale) and Ukrainian (every `uk-*` locale) cover the whole interface, Czech and Brazilian Portuguese every menu label, Brazilian Portuguese the shell's `tl!` literals too (tested); German, Spanish, French, Italian, Japanese, Russian and Ukrainian also translate status-bar and error messages as they are shown (`@msg` templates, every message literal tested; the messages themselves stay English for agents); untranslated text stays English. Japanese and Chinese glyphs come from the craft-fonts build input (release builds) or the installed fonts, Czech, German, Spanish, French, Italian, Russian and Ukrainian ones from the bundled UI fonts. The web app follows the browser's languages (or `?lang=`). The Basic toolbar's Type button holds Vertical Type in its flyout. Vertical Type, Vertical Area Type and Vertical Type on a Path create vertical text (columns right to left, upright CJK glyphs and marks with `vert` alternates, Latin and longer numbers on their side, two- and three-digit numbers set as tate-chu-yoko in one em of the column (kept whole when justified), upright glyphs centred on the column (tracked or justified too), point type's anchor on the first column's centre line); kinsoku applies to horizontal and vertical Japanese (Paragraph panel › Kinsoku Set, `text.setFormat {kinsoku}`: Hard, the default, keeps closing marks, iteration marks, the prolonged sound mark and small kana off the line start and opening brackets off its end; Soft lets 々, ー and small kana start a line as JLREQ's level 3 rules do; None turns it off), and justified Japanese lines spread their room between characters (not inside Latin words); Paragraph panel › Mojikumi Set (shown with Preferences › Type › Show East Asian Options, `text.setFormat {mojikumi}`): None or Line-end Punctuation Half Width (new type's default, as in Illustrator; older documents and imported text keep None) shares one half-em space between consecutive punctuation, sets a closing mark ending a line half width and an opening bracket starting a line flush with its start (a paragraph's first line at its first-line indent, JIS X 4051's principle in JLREQ 3.1.5), and puts a quarter em between Japanese and Latin letters or digits; Paragraph panel menu › Top-to-Top / Bottom-to-Bottom Leading measures leading from em box top to top (area type's first line touches the frame) or from baseline to baseline (new type in a Japanese interface starts top to top, with em box centre character alignment, #432); Paragraph panel menu › Burasagari None / Regular / Force (`text.setFormat {burasagari: "none"|"standard"|"forced"}`) hangs an East Asian comma or full stop (、。,.、。) ending an area type line outside it, Regular (new type's default) when it doesn't fit and Force always (the rest of the line then fills the measure; closing brackets and Latin punctuation don't hang); Character panel menu › Character Alignment (with the East Asian options; `text.setFormat` or `text.setRangeStyle {charAlign}`) lines characters smaller than the largest on their line up on the Roman baseline, the em box top/right, centre or bottom/left, or the ICF (ideographic character face) top/right or bottom/left, from the font's BASE table or, without one, the average ink box of some ideographs and kana; Proportional Metrics (the same menu; `{proportionalMetrics}`) sets full-width glyphs on the font's proportional widths (OpenType `palt`) in horizontal type and upright glyphs on its proportional heights (`vpal`, shaped top to bottom; fonts without vertical metrics keep their cells) in vertical type, and Line-end Punctuation Half Width takes nothing more off the punctuation they re-spaced; Type ▸ Type Orientation switches existing text; caret, selection, hit testing and arrow keys follow the writing direction. Vertical text exports to PDF as real text and to SVG as outlines. The interface is available in Polish (`pl`): menus, panels, dialogs and messages, with one/few/many plurals; AI-drafted, native review pending (#1498). +- **Interface languages, vertical type:** Preferences ▸ User Interface (or VectorCraft ▸ Language on macOS) picks Automatic (the system locale) or a registered language, persisted as `interfaceLanguage`. Translations come from per-language catalogs (`i18n/*.tsv`): Traditional and Simplified Chinese, Japanese, German (every `de-*` locale), Spanish (neutral international Spanish, for every `es-*` locale), French (every `fr-*` locale), Italian (every `it-*` locale) Russian (every `ru-*` locale) and Ukrainian (every `uk-*` locale) cover the whole interface, Czech every menu label; German, Spanish, French, Italian, Japanese, Korean, Vietnamese, Polish, Brazilian Portuguese, Russian and Ukrainian also translate status-bar and error messages as they are shown (`@msg` templates, every message literal tested; the messages themselves stay English for agents); untranslated text stays English. Japanese and Chinese glyphs come from the craft-fonts build input (release builds) or the installed fonts, Czech, German, Spanish, French, Italian, Russian and Ukrainian ones from the bundled UI fonts. The web app follows the browser's languages (or `?lang=`). The Basic toolbar's Type button holds Vertical Type in its flyout. Vertical Type, Vertical Area Type and Vertical Type on a Path create vertical text (columns right to left, upright CJK glyphs and marks with `vert` alternates, Latin and longer numbers on their side, two- and three-digit numbers set as tate-chu-yoko in one em of the column (kept whole when justified), upright glyphs centred on the column (tracked or justified too), point type's anchor on the first column's centre line); kinsoku applies to horizontal and vertical Japanese (Paragraph panel › Kinsoku Set, `text.setFormat {kinsoku}`: Hard, the default, keeps closing marks, iteration marks, the prolonged sound mark and small kana off the line start and opening brackets off its end; Soft lets 々, ー and small kana start a line as JLREQ's level 3 rules do; None turns it off), and justified Japanese lines spread their room between characters (not inside Latin words); Paragraph panel › Mojikumi Set (shown with Preferences › Type › Show East Asian Options, `text.setFormat {mojikumi}`): None or Line-end Punctuation Half Width (new type's default, as in Illustrator; older documents and imported text keep None) shares one half-em space between consecutive punctuation, sets a closing mark ending a line half width and an opening bracket starting a line flush with its start (a paragraph's first line at its first-line indent, JIS X 4051's principle in JLREQ 3.1.5), and puts a quarter em between Japanese and Latin letters or digits; Paragraph panel menu › Top-to-Top / Bottom-to-Bottom Leading measures leading from em box top to top (area type's first line touches the frame) or from baseline to baseline (new type in a Japanese interface starts top to top, with em box centre character alignment, #432); Paragraph panel menu › Burasagari None / Regular / Force (`text.setFormat {burasagari: "none"|"standard"|"forced"}`) hangs an East Asian comma or full stop (、。,.、。) ending an area type line outside it, Regular (new type's default) when it doesn't fit and Force always (the rest of the line then fills the measure; closing brackets and Latin punctuation don't hang); Character panel menu › Character Alignment (with the East Asian options; `text.setFormat` or `text.setRangeStyle {charAlign}`) lines characters smaller than the largest on their line up on the Roman baseline, the em box top/right, centre or bottom/left, or the ICF (ideographic character face) top/right or bottom/left, from the font's BASE table or, without one, the average ink box of some ideographs and kana; Proportional Metrics (the same menu; `{proportionalMetrics}`) sets full-width glyphs on the font's proportional widths (OpenType `palt`) in horizontal type and upright glyphs on its proportional heights (`vpal`, shaped top to bottom; fonts without vertical metrics keep their cells) in vertical type, and Line-end Punctuation Half Width takes nothing more off the punctuation they re-spaced; Type ▸ Type Orientation switches existing text; caret, selection, hit testing and arrow keys follow the writing direction. Vertical text exports to PDF as real text and to SVG as outlines. The interface is available in Polish (`pl`): menus, panels, dialogs and messages, with one/few/many plurals; AI-drafted, native review pending (#1498). - **Transparency:** opacity masks (clip/invert/disable/link), exported as SVG `` and PDF soft masks. The constant alpha soft mask that PDF and `.ai` export draw a CMYK page with transparency through is white, so applications that read every soft mask by its luminosity show the page too (#1359, part of #1286). Disable, Enable, Unlink and Link Opacity Mask and Opacity Mask Options (`transparency.setOpacityMask`) record no undo step when every mask they act on already has the flags they set. - **Image Trace, thin closed outlines:** generated `fit::snap_area_tests` verify nonzero interiors after straightening, opposite closed-boundary winding and Noise controls; see [quality notes](image-trace-quality.md#thin-closed-outlines-with-snap-curves-to-lines). Scores and hours unchanged; open-piece fitting is unchanged. @@ -659,6 +659,7 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur | Date | Change | Summary | |---|---|---| +| 2026-10-14 | minor | Localization: Brazilian Portuguese (`pt-br`) catalog completed under the tests (#1914); Localization 71% → 74% (measured), hours 55–90 → 50–85; full readiness unchanged (~62%) | | 2026-10-14 | minor | Automation: dataset CSV import/export; headline Automation ~62% → ~65%, detail ~68% → ~72%, hours 6–12 → 4–8 / 5–9 → 4–7 (estimated) | | 2026-10-14 | minor | Automation: image variables (`kind: image`, `variable.makeImageDynamic`, path values on datasets that keep object bounds); headline Automation ~60% → ~62%, detail ~65% → ~68%, hours 8–14 → 6–12 / 6–10 → 5–9 (estimated) | | 2026-10-14 | minor | Effect > Warp: style, orientation and percent controls; focused checks passed and original captures reviewed; scores and hours unchanged |