Merge pull request #830 from WladmirJunior/i18n/pt-br-panels

pt-BR: translate the panels below the menu bar
This commit is contained in:
Brandon Thomas committed 2026-10-12 03:23:10 -04:00
commit a1516b11ad
1 file changed
+459 -3
+459 -3
View File
@@ -19,7 +19,7 @@ use std::fmt::Display;
use std::sync::OnceLock;
thread_local! {
/// The resolved interface language ("en", "ja", "zh-hans", "zh-hant", "uk"); "en" until the first
/// The resolved interface language ("en", "ja", "zh-hans", "zh-hant", "uk", "pt-br"); "en" until the first
/// frame sets it.
static CURRENT: Cell<&'static str> = const { Cell::new("en") };
}
@@ -44,11 +44,13 @@ fn catalog(language: &str) -> Option<&'static Index> {
static HANS: OnceLock<Index> = OnceLock::new();
static HANT: OnceLock<Index> = OnceLock::new();
static UK: OnceLock<Index> = OnceLock::new();
static PT_BR: OnceLock<Index> = OnceLock::new();
let (index, rows) = match language {
"ja" => (&JA, JAPANESE),
"zh-hans" => (&HANS, SIMPLIFIED_CHINESE),
"zh-hant" => (&HANT, TRADITIONAL_CHINESE),
"uk" => (&UK, UKRAINIAN),
"pt-br" => (&PT_BR, PORTUGUESE),
_ => return None,
};
Some(index.get_or_init(|| rows.iter().copied().collect()))
@@ -2144,6 +2146,440 @@ const UKRAINIAN: &[(&str, &str)] = &[
("Project", "Проєкт"),
];
// Brazilian Portuguese.
const PORTUGUESE: &[(&str, &str)] = &[
(" OK ", " OK "),
(" Delete ", " Excluir "),
(" Open Auto-Save ", " Abrir salvamento automático "),
("(missing)", "(ausente)"),
("360 View Orientation", "Orientação da vista 360°"),
("3:2 Pulldown: {}", "Pulldown 3:2: {}"),
(
"A clean-room, open-source compositor for motion graphics and visual effects: native on macOS, Windows and Linux, and in the browser. Part of the ArtCraft family of creative apps.",
"Um compositor de código aberto, desenvolvido em clean-room, para motion graphics e efeitos visuais: nativo no macOS, Windows e Linux, e no navegador. Parte da família de aplicativos criativos ArtCraft.",
),
("About EffectCraft", "Sobre o EffectCraft"),
("About...", "Sobre..."),
("Active Camera", "Câmera ativa"),
("Adapt Feature On Every Frame", "Adaptar o recurso em cada quadro"),
("Adaptive Sample Limit:", "Limite de amostras adaptativas:"),
("Add Animator", "Adicionar animador"),
("Add Comment", "Adicionar comentário"),
("Add Formatting", "Adicionar formatação"),
("Add Group", "Adicionar grupo"),
("Add Mirror", "Adicionar espelho"),
("Add Selected As", "Adicionar selecionados como"),
("Add a comment", "Adicionar um comentário"),
("Add a shape, fill, stroke or path operation", "Adicionar uma forma, preenchimento, traço ou operação de caminho"),
("Add to Composition", "Adicionar à composição"),
("Add to Favorites", "Adicionar aos favoritos"),
("Add:", "Adicionar:"),
("Adjust Exposure (stops)", "Ajustar exposição (stops)"),
("Adjust composition duration to the time span of the selected layers", "Ajustar a duração da composição ao intervalo de tempo das camadas selecionadas"),
("Advanced 3D", "3D avançado"),
("Align Layers to:", "Alinhar camadas a:"),
("All six face cameras turn together; the scene is not changed.", "As seis câmeras das faces giram juntas; a cena não é alterada."),
("Anchor:", "Âncora:"),
("Aperture", "Abertura"),
("Apply Dimensions:", "Aplicar dimensões:"),
("Apply Motion To:", "Aplicar movimento a:"),
("Arrange", "Organizar"),
("Assign", "Atribuir"),
("Auto", "Automático"),
("Auto-saves", "Salvamentos automáticos"),
("Back", "Voltar"),
("Background Color:", "Cor do plano de fundo:"),
("Blend Mode:", "Modo de mesclagem:"),
("Blending Mode", "Modo de mesclagem"),
("Blur", "Desfoque"),
("Blur Level", "Nível de desfoque"),
("Browser Storage", "Armazenamento do navegador"),
("Browse…", "Procurar…"),
("Brush Dynamics", "Dinâmica do pincel"),
("Caching frames…", "Armazenando quadros em cache…"),
("Cancel", "Cancelar"),
("Casts Shadows", "Projeta sombras"),
("Change Renderer…", "Alterar renderizador…"),
(
"Changing a shortcut creates a custom preset; the default stays as it is.",
"Alterar um atalho cria uma predefinição personalizada; a padrão permanece como está.",
),
("Channel", "Canal"),
("Channel:", "Canal:"),
("Chapter:", "Capítulo:"),
("Choose...", "Escolher..."),
("Classic 3D", "3D clássico"),
("Clear", "Limpar"),
("Clear list", "Limpar lista"),
("Click a key to see its commands.", "Clique em uma tecla para ver seus comandos."),
("Click adds a point (½ height = no change)", "Clique adiciona um ponto (½ altura = sem alteração)"),
("Click adds a point; drag one off to remove", "Clique adiciona um ponto; arraste um para fora para remover"),
("Click to make this viewer active", "Clique para tornar este visualizador ativo"),
("Click to reveal the expression in the timeline", "Clique para revelar a expressão na linha do tempo"),
("Click to show the active composition here", "Clique para mostrar a composição ativa aqui"),
("Click, then click in the Composition panel", "Clique e depois clique no painel Composição"),
("Clone Options", "Opções de clone"),
("Clone Source Overlay:", "Sobreposição da origem do clone:"),
("Close", "Fechar"),
("Close Panel", "Fechar painel"),
("Close tutorial", "Fechar tutorial"),
("Color", "Cor"),
("Color Depth: {}", "Profundidade de cor: {}"),
("Color:", "Cor:"),
("Colour map", "Mapa de cores"),
("Columns", "Colunas"),
("Comment:", "Comentário:"),
("Community", "Comunidade"),
("Composition", "Composição"),
("Composition Mini-Flowchart", "Minifluxograma da composição"),
("Composition Name:", "Nome da composição:"),
("Composition Settings ▸ 3D Renderer", "Configurações da composição ▸ Renderizador 3D"),
("Composition Settings…", "Configurações da composição…"),
("Composition marker bin: drag a marker to the time ruler", "Compartimento de marcadores da composição: arraste um marcador para a régua de tempo"),
("Cone Angle", "Ângulo do cone"),
("Cone Feather", "Suavização do cone"),
("Constrain Proportions", "Restringir proporções"),
("Continuous (Lock Outgoing to Incoming)", "Contínuo (travar saída na entrada)"),
("Cue Point", "Ponto de cue"),
("Current Render", "Renderização atual"),
("Darker", "Mais escuro"),
("Default Output:", "Saída padrão:"),
("Default: {}", "Padrão: {}"),
("Defaults", "Padrões"),
("Delete", "Excluir"),
("Delete Selected Points", "Excluir pontos selecionados"),
("Delete selected project items", "Excluir itens de projeto selecionados"),
("Delete this template", "Excluir este modelo"),
("Depth of Field", "Profundidade de campo"),
("Discord", "Discord"),
("Distribute Layers:", "Distribuir camadas:"),
("Don't Recover", "Não recuperar"),
("Don't Save", "Não salvar"),
("Double-click a layer to open it in the Layer panel", "Clique duas vezes em uma camada para abri-la no painel Camada"),
("Double-click footage in the Project panel to open it here", "Clique duas vezes em uma mídia no painel Projeto para abri-la aqui"),
("Double-click to edit the comment", "Clique duas vezes para editar o comentário"),
("Download", "Baixar"),
(
"Drag properties here from the timeline,\nor use Animation > Add Property to Essential Graphics.",
"Arraste propriedades da linha do tempo para cá,\nou use Animação > Adicionar propriedade aos Gráficos essenciais.",
),
("Drag to change", "Arraste para alterar"),
("Drag to create a guide", "Arraste para criar uma guia"),
("Drag to slip the source", "Arraste para deslizar a origem"),
("Drop Frame", "Drop frame"),
("Duplicate", "Duplicar"),
("Duration:", "Duração:"),
("Edit Gradient…", "Editar gradiente…"),
("Edit Target: {}", "Editar destino: {}"),
("Edit in the Timeline", "Editar na linha do tempo"),
("EffectCraft didn't quit normally last time.", "O EffectCraft não foi encerrado normalmente da última vez."),
("Effects & Presets options", "Opções de Efeitos e predefinições"),
("Effects: {}", "Efeitos: {}"),
("Empty folder", "Pasta vazia"),
("Enable Depth of Field", "Ativar profundidade de campo"),
("Enable Expression", "Ativar expressão"),
("Enhance", "Aprimorar"),
("Essential Properties — {}", "Propriedades essenciais: {}"),
("Event", "Evento"),
("Export Template…", "Exportar modelo…"),
("Export...", "Exportar..."),
("Expression Language Menu", "Menu de linguagem de expressão"),
("Expression pick whip: drag onto a property", "Pick whip de expressão: arraste até uma propriedade"),
("Expression:", "Expressão:"),
("Eyedropper: click, then click in the Composition panel", "Conta-gotas: clique e depois clique no painel Composição"),
("Falloff", "Atenuação"),
("Falloff Distance", "Distância de atenuação"),
("Favorites", "Favoritos"),
("Field Render: {}", "Renderização de campos: {}"),
("Figures", "Numerais"),
("Fill Target", "Destino do preenchimento"),
("Finished", "Concluído"),
("Flowchart: {}", "Fluxograma: {}"),
("Focus Distance", "Distância de foco"),
("Follow Feature Rotation and Scale", "Acompanhar rotação e escala do recurso"),
("Footage: {}", "Mídia: {}"),
("Format: {}", "Formato: {}"),
("Frame Aspect Ratio: {}", "Proporção do quadro: {}"),
("Frame Blending: {}", "Mesclagem de quadros: {}"),
("Frame Rate:", "Taxa de quadros:"),
("Frame Render Time {}ms", "Tempo de renderização do quadro {}ms"),
("Frame Target:", "Destino do quadro:"),
("Grab bag", "Lista"),
("Grid", "Grade"),
("Guide Layers: {}", "Camadas de guia: {}"),
("Guides", "Guias"),
("Height:", "Altura:"),
("Hide This", "Ocultar isto"),
("Histogram", "Histograma"),
("Hold In Place", "Manter no lugar"),
("Home", "Início"),
("If Confidence is Below", "Se a confiança for inferior a"),
("Import", "Importar"),
("Import and Add to Composition", "Importar e adicionar à composição"),
("Import...", "Importar..."),
("Imported media", "Mídia importada"),
("Influence:", "Influência:"),
("Install from File…", "Instalar a partir de arquivo…"),
("Intensity", "Intensidade"),
("Inverted", "Invertido"),
("Join the ArtCraft community on Discord", "Entre na comunidade ArtCraft no Discord"),
("Key: {}", "Tecla: {}"),
("LEARN", "APRENDER"),
("Label", "Rótulo"),
("Label Colors and Names:", "Cores e nomes dos rótulos:"),
("Label:", "Rótulo:"),
("Latest auto-save: {}", "Último salvamento automático: {}"),
("Layer", "Camada"),
("Layer controls", "Controles da camada"),
("Layer {}", "Camada {}"),
("Layer:", "Camada:"),
("Layer: {}", "Camada: {}"),
("Learn", "Aprender"),
("Leave all attributes in \"{}\"", "Manter todos os atributos em \"{}\""),
("Licence: {}", "Licença: {}"),
("Ligatures", "Ligaduras"),
("Light Type", "Tipo de luz"),
("Lighter", "Mais claro"),
("Link Selected Property", "Vincular propriedade selecionada"),
("Lock Aspect Ratio to {}", "Travar proporção em {}"),
("Lock to Zoom", "Travar no zoom"),
("Locked: {} — {}", "Travado: {} / {}"),
("Log:", "Registro:"),
("Loop (Trace Path)", "Laço (traçar caminho)"),
("MIT OR Apache-2.0 • Fonts: Inter, JetBrains Mono (OFL)", "MIT OU Apache-2.0 • Fontes: Inter, JetBrains Mono (OFL)"),
("Magnification ratio popup", "Menu de proporção de ampliação"),
("Make Comp Size", "Ajustar ao tamanho da composição"),
("Masks", "Máscaras"),
("Maximize Panel", "Maximizar painel"),
("Media Replacement", "Substituição de mídia"),
("Mesh:", "Malha:"),
("Diameter:", "Diâmetro:"),
("Method Used: {} Average Error: {} pixels", "Método usado: {} Erro médio: {} pixels"),
("Models folder: {}", "Pasta de modelos: {}"),
("Modifiers:", "Modificadores:"),
("More", "Mais"),
("More ArtCraft apps", "Mais aplicativos ArtCraft"),
("More tutorials", "Mais tutoriais"),
("Motion Blur", "Desfoque de movimento"),
("Motion Blur: {}", "Desfoque de movimento: {}"),
("Motion Sketch: drag to record", "Motion Sketch: arraste para gravar"),
("Move Down", "Mover para baixo"),
("Move Up", "Mover para cima"),
("Move to Project Root", "Mover para a raiz do projeto"),
("Name", "Nome"),
("Name:", "Nome:"),
("Navigation", "Navegação"),
("New", "Novo"),
("New Comp from Selection", "Nova composição a partir da seleção"),
("New Duration:", "Nova duração:"),
("New composition name:", "Nome da nova composição:"),
("New from Render Queue item:", "Novo a partir do item da fila de renderização:"),
("New from Template", "Novo a partir de modelo"),
("Next", "Próximo"),
("Nice work. Pick another tutorial on the Home screen's Learn tab.", "Bom trabalho. Escolha outro tutorial na guia Aprender da tela Início."),
(
"No VR environments yet. Create one with Composition ▸ VR ▸ Create VR Environment…",
"Nenhum ambiente de RV ainda. Crie um com Composição ▸ RV ▸ Criar ambiente de RV…",
),
("No audio layer selected", "Nenhuma camada de áudio selecionada"),
("No background jobs running", "Nenhuma tarefa em segundo plano em execução"),
("No composition markers", "Nenhum marcador de composição"),
("No contributor data was built into this copy.", "Nenhum dado de colaboradores foi incluído nesta cópia."),
("No device list from this host; the system default output is used.", "Este host não forneceu lista de dispositivos; a saída padrão do sistema é usada."),
("No layer selected", "Nenhuma camada selecionada"),
("No matching effects or presets", "Nenhum efeito ou predefinição correspondente"),
("No matching fonts", "Nenhuma fonte correspondente"),
("No model credits were built into this copy.", "Nenhum crédito de modelos foi incluído nesta cópia."),
("No nested compositions", "Nenhuma composição aninhada"),
("No shortcut", "Sem atalho"),
("No unlocked layer selected", "Nenhuma camada desbloqueada selecionada"),
("No video", "Sem vídeo"),
("None", "Nenhum"),
("Not applied: tick it in the list to add it.", "Não aplicado: marque-o na lista para adicioná-lo."),
("Not assigned", "Não atribuído"),
(
"Note: Shadows are only cast from layers with Cast Shadows enabled.",
"Observação: as sombras só são projetadas por camadas com Projetar sombras ativado.",
),
("Notify", "Notificar"),
("OK", "OK"),
("Offset:", "Deslocamento:"),
("On ({}) stop:", "Ao parar ({}):"),
("One-Node Camera", "Câmera de um nó"),
("Opacity:", "Opacidade:"),
("Open Composition", "Abrir composição"),
("Open Last Saved Project", "Abrir último projeto salvo"),
("Open New Composition", "Abrir nova composição"),
("Open Output", "Abrir saída"),
("Open a composition to build Essential Graphics", "Abra uma composição para criar Gráficos essenciais"),
("Open a composition to see its scopes", "Abra uma composição para ver seus scopes"),
("Open a composition to track motion.", "Abra uma composição para rastrear movimento."),
("Opus Tuning: {}", "Ajuste do Opus: {}"),
("Original Duration:", "Duração original:"),
("Output Cycle: {}", "Ciclo de saída: {}"),
("Output To:", "Saída para:"),
("Parameter Name:", "Nome do parâmetro:"),
("Parent pick whip: drag onto a layer", "Pick whip de pai: arraste até uma camada"),
("Pixel Aspect Ratio:", "Proporção de pixel:"),
("Playing on Video Preview", "Reproduzindo na visualização de vídeo"),
("Post-Render Action: {}", "Ação pós-renderização: {}"),
("Preserve frame rate when nested or in render queue", "Preservar a taxa de quadros quando aninhada ou na fila de renderização"),
("Preserve resolution when nested", "Preservar a resolução quando aninhada"),
("Preset", "Predefinição"),
("Preset:", "Predefinição:"),
("Presets", "Predefinições"),
("Previous", "Anterior"),
("Primary:", "Primário:"),
("Process Before Match", "Processar antes de corresponder"),
("Profile: {}", "Perfil: {}"),
(
"Project color depth: click to cycle 8/16/32 bpc, Alt-click for Project Settings",
"Profundidade de cor do projeto: clique para alternar entre 8/16/32 bpc, Alt+clique para Configurações do projeto",
),
("Project: {}", "Projeto: {}"),
("Projects", "Projetos"),
("Property pick whip: drag onto a property", "Pick whip de propriedade: arraste até uma propriedade"),
("Protected Region", "Região protegida"),
("Proxy Use: {}", "Uso de proxy: {}"),
("Push All to Comp", "Enviar tudo para a composição"),
("Radius", "Raio"),
("Rate Control: {}", "Controle de taxa: {}"),
("Recent", "Recentes"),
("Recording", "Gravando"),
("Remove", "Remover"),
("Rename", "Renomear"),
("Render: {} ms • UI {} fps{}", "Renderização: {} ms • IU {} fps{}"),
("Renderer:", "Renderizador:"),
("Request Persistent Storage", "Solicitar armazenamento persistente"),
("Reset", "Redefinir"),
("Reset Labels", "Redefinir rótulos"),
("Reset Preset", "Redefinir predefinição"),
("Reset to Default", "Redefinir para o padrão"),
("Reset to Saved Layout", "Redefinir para o layout salvo"),
("Resolution/Down Sample Factor Popup", "Menu de resolução/fator de redução de amostragem"),
("Restore Panel Size", "Restaurar tamanho do painel"),
("Reverse the order", "Inverter a ordem"),
("Revert All", "Reverter tudo"),
("Roman Hanging Punctuation", "Pontuação romana suspensa"),
("Roving:", "Roving:"),
("Ruler zero point (drag to move, double-click to reset)", "Ponto zero da régua (arraste para mover, clique duas vezes para redefinir)"),
("Rulers", "Réguas"),
("Run", "Executar"),
("Sample Format: {}", "Formato da amostra: {}"),
("Samples Per Frame:", "Amostras por quadro:"),
("Save from #{}", "Salvar a partir de #{}"),
("Saved {}", "{} salvo"),
("Script… (⌘/Ctrl+Enter runs)", "Script… (⌘/Ctrl+Enter executa)"),
("Search commands or shortcuts", "Pesquisar comandos ou atalhos"),
("Select", "Selecionar"),
("Select a command to change its shortcut.", "Selecione um comando para alterar seu atalho."),
("Select a layer to see its effects", "Selecione uma camada para ver seus efeitos"),
("Select a layer to see its properties", "Selecione uma camada para ver suas propriedades"),
("({}) Selected Objects", "({}) objetos selecionados"),
(
"Select a layer with a mask or shape path (or the path property), or Puppet pins.",
"Selecione uma camada com máscara ou caminho de forma (ou a propriedade de caminho), ou pinos de Puppet.",
),
("Select a text layer", "Selecione uma camada de texto"),
("Select an item in the Project panel", "Selecione um item no painel Projeto"),
("Select animated properties to show them in the Graph Editor", "Selecione propriedades animadas para exibi-las no Editor de gráficos"),
(
"Select the leader pin, then Shift-click the pins that should trail it (hair, cloth, tails)",
"Selecione o pino líder e depois Shift+clique nos pinos que devem segui-lo (cabelo, tecido, caudas)",
),
("Set Ground Plane and Origin", "Definir plano do solo e origem"),
("Set Paint Colors to Black and White (D)", "Definir cores de pintura como preto e branco (D)"),
("Settings", "Configurações"),
("Settings Name:", "Nome das configurações:"),
("Shadow Darkness", "Escuridão da sombra"),
("Shadow Diffusion", "Difusão da sombra"),
("Shadows", "Sombras"),
("Shape…", "Forma…"),
("Show", "Exibir"),
("Show Layer Name", "Exibir nome da camada"),
("Show Source Name", "Exibir nome da origem"),
("Show me", "Mostre-me"),
("Show:", "Exibir:"),
("Shutter Angle:", "Ângulo do obturador:"),
("Shutter Phase:", "Fase do obturador:"),
("Size", "Tamanho"),
("Skip", "Ignorar"),
("Snapping", "Ajuste magnético"),
("Snapping options", "Opções de ajuste magnético"),
("Snapshot", "Instantâneo"),
("Solo Supported Properties", "Solo de propriedades suportadas"),
("Solo Switches: {}", "Chaves de solo: {}"),
("Sort", "Ordenar"),
("Spacing:", "Espaçamento:"),
("Spatial Interpolation:", "Interpolação espacial:"),
("Speed:", "Velocidade:"),
("Start Timecode:", "Timecode inicial:"),
("Start: {} Duration: {}", "Início: {} Duração: {}"),
("Step {} of {}: {}", "Etapa {} de {}: {}"),
("Stop {} at {}°", "Parada {} em {}°"),
("Stored in: {}", "Armazenado em: {}"),
("Stretch", "Esticar"),
("Stretch Factor:", "Fator de esticamento:"),
("Stylistic Sets", "Conjuntos estilísticos"),
("Subpixel Positioning", "Posicionamento em subpixel"),
("Swap Paint Colors (X)", "Trocar cores de pintura (X)"),
("System Default", "Padrão do sistema"),
("Table", "Tabela"),
("Template name", "Nome do modelo"),
("Template: {}\n{}", "Modelo: {}\n{}"),
("Temporal Interpolation:", "Interpolação temporal:"),
("The Media Browser is not available here (use File ▸ Import)", "O Media Browser não está disponível aqui (use Arquivo ▸ Importar)"),
("The OpenEXR layer shown in red, green, blue and alpha", "A camada OpenEXR exibida em vermelho, verde, azul e alfa"),
("The render queue is empty.", "A fila de renderização está vazia."),
("This ScriptUI panel has closed", "Este painel ScriptUI foi fechado"),
("This change will create a new solid for this layer.", "Esta alteração criará um novo sólido para esta camada."),
("Time", "Tempo"),
("Time Stretch…", "Esticamento de tempo…"),
("Time:", "Tempo:"),
("Time: {}", "Tempo: {}"),
("Title/Action Safe", "Área segura de título/ação"),
("Title/action safe", "Área segura de título/ação"),
("Toggle Switches / Modes", "Alternar chaves / modos"),
("Track Name:", "Nome da faixa:"),
(
"Trained models are available in the desktop app; the browser uses the classic engine.",
"Os modelos treinados estão disponíveis no aplicativo para desktop; o navegador usa o mecanismo clássico.",
),
("Transform", "Transformar"),
("Transparency grid", "Grade de transparência"),
("Tutorial complete", "Tutorial concluído"),
("Two-Node Camera", "Câmera de dois nós"),
("Type", "Tipo"),
("Type a command or effect…", "Digite um comando ou efeito…"),
("URL:", "URL:"),
("Undock Panel", "Desencaixar painel"),
("Unlink {}", "Desvincular {}"),
(
"Use this option to place the currently selected layers together into a new intermediate composition.",
"Use esta opção para colocar as camadas selecionadas juntas em uma nova composição intermediária.",
),
("VR Environments", "Ambientes de RV"),
("Value:", "Valor:"),
("Variable Font Axes", "Eixos da fonte variável"),
("Video Codec: {}", "Codec de vídeo: {}"),
("View:", "Exibição:"),
("Welcome to EffectCraft", "Boas-vindas ao EffectCraft"),
("Width:", "Largura:"),
("You can undo this.", "Você pode desfazer isto."),
("Your changes will be lost if you don't save them.", "Suas alterações serão perdidas se você não as salvar."),
("Zoom", "Zoom"),
("built-in", "integrado"),
("frames per second", "quadros por segundo"),
("template name", "nome do modelo"),
("{} contributors · {} commits", "{} colaboradores · {} commits"),
("{} x {}, {}MB per 8bpc frame", "{} x {}, {}MB por quadro de 8 bpc"),
("{} — coming soon", "{} em breve"),
("{} — double-click to open, {}-click to reveal", "{}: clique duas vezes para abrir, {}+clique para revelar"),
("⌘/Ctrl-drag a pin to record its motion", "⌘/Ctrl+arraste um pino para gravar seu movimento"),
("▣ {}", "▣ {}"),
("⚠ {} is used by:", "⚠ {} é usado por:"),
];
#[cfg(test)]
mod tests {
use super::*;
@@ -2237,7 +2673,14 @@ mod tests {
const UNITS: &[&str] = &[" px", "%", "·", "s", "ms", "°", "fps", " bpc", " mm", " s", " %", " pixels"];
fn catalogs() -> Vec<(&'static str, &'static str)> {
JAPANESE.iter().copied().chain(SIMPLIFIED_CHINESE.iter().copied()).chain(TRADITIONAL_CHINESE.iter().copied()).chain(UKRAINIAN.iter().copied()).collect()
JAPANESE
.iter()
.copied()
.chain(SIMPLIFIED_CHINESE.iter().copied())
.chain(TRADITIONAL_CHINESE.iter().copied())
.chain(UKRAINIAN.iter().copied())
.chain(PORTUGUESE.iter().copied())
.collect()
}
/// A row that translates nothing, repeats a source string, or changes the number of values the
@@ -2248,7 +2691,7 @@ mod tests {
let hant: Vec<&str> = TRADITIONAL_CHINESE.iter().map(|(en, _)| *en).collect();
assert_eq!(hans, hant, "the two Chinese catalogs list different source strings");
// Japanese and Ukrainian may lag the Chinese catalogs: a missing row falls back to English.
for (name, cat) in [("Japanese", JAPANESE), ("Ukrainian", UKRAINIAN)] {
for (name, cat) in [("Japanese", JAPANESE), ("Ukrainian", UKRAINIAN), ("Brazilian Portuguese", PORTUGUESE)] {
let extra: Vec<&str> = cat.iter().map(|(en, _)| *en).filter(|en| !hans.contains(en)).collect();
assert!(extra.is_empty(), "the {name} catalog lists source strings the Chinese ones don't: {extra:?}");
}
@@ -2293,6 +2736,19 @@ mod tests {
assert_eq!(tr("Composition Name:"), "Composition Name:");
}
/// Brazilian Portuguese panels translate, fill values in order and keep project content.
#[test]
fn brazilian_portuguese_panels_translate_and_keep_project_content() {
set_current("pt-br");
assert_eq!(tr("Composition Name:"), "Nome da composição:");
assert_eq!(tr("Cancel"), "Cancelar");
assert_eq!(tr("my layer.mp4"), "my layer.mp4");
assert_eq!(tr_args("Step {} of {}: {}", &[&1, &3, &"Colour"]), "Etapa 1 de 3: Colour");
assert_eq!(tr(" OK "), " OK ");
set_current("en");
assert_eq!(tr("Cancel"), "Cancel");
}
/// Values fill the placeholders in order, and a missing value is dropped instead of panicking.
#[test]
fn tr_args_fills_values_in_order() {