@object-ui/i18n 16.1.0 → 17.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,15 @@
1
1
  const pt = {
2
2
  // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
3
  capability: {
4
+ label: {
5
+ manage_users: "Gerenciar usuários",
6
+ manage_org_users: "Gerenciar usuários da organização",
7
+ manage_metadata: "Gerenciar metadados",
8
+ manage_platform_settings: "Gerenciar configurações da plataforma",
9
+ setup_access: "Acesso à configuração",
10
+ setup_write: "Gravação de configurações",
11
+ studio_access: "Acesso ao Studio",
12
+ },
4
13
  group: {
5
14
  platform: 'Plataforma',
6
15
  org: 'Organização',
@@ -74,6 +83,10 @@ const pt = {
74
83
  package: "Pacote",
75
84
  },
76
85
  actions: {
86
+ decisionOutput: {
87
+ help: 'Entregue ao fluxo como saída da decisão.',
88
+ helpMultiValue: 'Entregue ao fluxo como saída da decisão. Separe vários valores por vírgulas.',
89
+ },
77
90
  resultDialog: {
78
91
  defaultTitle: 'Guarde este valor agora',
79
92
  acknowledge: 'Eu o salvei',
@@ -94,6 +107,16 @@ const pt = {
94
107
  type: "{{field}} deve ser um {{type}} válido",
95
108
  },
96
109
  form: {
110
+ noPermissionToSave: "Você não tem permissão para salvar este registro.",
111
+ submitFailed: "Não foi possível salvar. Tente novamente.",
112
+ discardTitle: "Descartar as alterações?",
113
+ discardMessage: "Você tem alterações não salvas. Se fechar este formulário agora, suas edições serão perdidas.",
114
+ keepEditing: "Continuar editando",
115
+ discard: "Descartar",
116
+ conflictTitle: "Conflito ao salvar",
117
+ conflictMessage: "Outra pessoa alterou este registro enquanto você editava. Sobrescrever substituirá as alterações dela pelas suas.",
118
+ conflictLatestVersion: "Salvamento dela: {{time}}",
119
+ conflictOverwrite: "Sobrescrever",
97
120
  addItem: "Adicionar item",
98
121
  removeItem: "Remover item",
99
122
  fieldRequired: "Este campo é obrigatório",
@@ -104,8 +127,6 @@ const pt = {
104
127
  stepOf: "Etapa {{current}} de {{total}}",
105
128
  createTitle: "Criar {{object}}",
106
129
  editTitle: "Editar {{object}}",
107
- createDescription: "Adicionar um novo {{object}} ao seu banco de dados.",
108
- editDescription: "Atualizar detalhes de {{object}}",
109
130
  saveRecord: "Salvar registro",
110
131
  create: "Criar",
111
132
  update: "Atualizar",
@@ -114,14 +135,70 @@ const pt = {
114
135
  deleteSuccess: "{{object}} excluído",
115
136
  },
116
137
  fields: {
138
+ image: {
139
+ upload: "Enviar imagem",
140
+ addMore: "Adicionar mais imagens",
141
+ uploading: "Enviando…",
142
+ imageAlt: "Imagem {{index}}",
143
+ crop: "Recortar a imagem {{index}}",
144
+ remove: "Remover a imagem {{index}}",
145
+ enlarge: "Ampliar {{name}}",
146
+ preview: "Pré-visualização da imagem",
147
+ previous: "Imagem anterior",
148
+ next: "Próxima imagem",
149
+ counter: "{{current}} / {{total}}",
150
+ },
117
151
  relativeDate: {
118
152
  overdue: "Atrasado {{count}} d",
119
153
  },
154
+ file: {
155
+ dragDropHere: 'Arraste e solte arquivos aqui',
156
+ dropFilesHere: 'Solte os arquivos aqui',
157
+ browseHint: 'ou clique para procurar',
158
+ browseHintCamera: 'ou clique para procurar • use o botão da câmera abaixo',
159
+ takePhoto: 'Tirar foto',
160
+ takeSelfie: 'Tirar selfie',
161
+ cameraCapture: 'Captura da câmera',
162
+ uploading: 'Enviando…',
163
+ uploadingPct: 'Enviando… ({{pct}} %)',
164
+ fileFallback: 'Arquivo',
165
+ upload: 'Enviar',
166
+ remove: 'Remover {{name}}',
167
+ exceedsMaxSize: '"{{name}}" excede o tamanho máximo ({{max}} MB)',
168
+ uploadFailed: 'Falha ao enviar "{{name}}": {{error}}',
169
+ },
120
170
  richText: {
121
171
  format: "Formato: {{format}}",
122
172
  basicEditorHint: "Editor de texto rico (básico)",
123
173
  placeholder: "Digite algo...",
124
174
  },
175
+ objectRef: {
176
+ loading: "Carregando objetos…",
177
+ placeholder: "Selecionar um objeto",
178
+ search: "Pesquisar objetos…",
179
+ empty: "Nenhum objeto encontrado",
180
+ },
181
+ recipient: {
182
+ selectTypeFirst: "Selecione primeiro um tipo de destinatário.",
183
+ loading: "Carregando…",
184
+ search: "Pesquisar…",
185
+ empty: "Nenhuma correspondência",
186
+ select: "Selecionar um destinatário",
187
+ selectUser: "Selecionar um usuário",
188
+ selectTeam: "Selecionar uma equipe",
189
+ selectBusinessUnit: "Selecionar uma unidade de negócio",
190
+ selectPosition: "Selecionar um cargo",
191
+ selectUnitAndSubordinates: "Selecionar uma unidade de negócio",
192
+ },
193
+ filterCondition: {
194
+ selectObjectFirst: "Selecione primeiro um objeto.",
195
+ noCriteria: "Sem critérios — esta regra não compartilha nada",
196
+ criteriaRequired: "Adicione pelo menos uma condição. Uma regra sem critérios compartilharia todos os registros, portanto não pode ser salva.",
197
+ invalidJson: "JSON inválido — a regra não corresponderá a nenhum registro até ser corrigida.",
198
+ jsonOnly: "Este critério só pode ser editado como JSON",
199
+ editAsJson: "Editar como JSON",
200
+ useVisualBuilder: "Usar o construtor visual",
201
+ },
125
202
  },
126
203
  table: {
127
204
  rowsPerPage: "Linhas por página",
@@ -156,6 +233,37 @@ const pt = {
156
233
  delete: "Excluir",
157
234
  },
158
235
  grid: {
236
+ bulkSelected: "{{count}} selecionados",
237
+ bulkSelectedAllMatches: "{{count}} selecionados (todas as correspondências)",
238
+ bulkClear: "Limpar seleção",
239
+ bulkAllOnPage: "Os {{count}} desta página estão selecionados.",
240
+ bulkSelectAllMatching: "Selecionar todas as {{count}} correspondências",
241
+ bulkAllMatchingSelected: "Todos os {{count}} registros correspondentes estão selecionados.",
242
+ bulk: {
243
+ confirmDefault: "Isto será aplicado a {{count}} registro(s).",
244
+ overLimit: "A seleção ({{count}}) excede o limite da ação ({{limit}}). Reduza a seleção para prosseguir.",
245
+ affectedRecords: "Registros afetados ({{count}}):",
246
+ skippedIneligible: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
247
+ rowFallback: "Linha {{index}}",
248
+ andMore: "… e mais {{count}}",
249
+ processed: "{{count}} / {{total}} processados",
250
+ processedFailed: " · {{count}} com falha",
251
+ undonePrefix: "Desfeito — ",
252
+ succeeded: "Concluídos {{count}} / {{total}}",
253
+ resultFailed: " · Falhas {{count}}",
254
+ retry: "Tentar novamente",
255
+ downloadErrorCsv: "Baixar CSV de erros",
256
+ cancel: "Cancelar",
257
+ back: "Voltar",
258
+ next: "Avançar",
259
+ run: "Executar",
260
+ running: "Executando…",
261
+ undo: "Desfazer",
262
+ undoing: "Desfazendo…",
263
+ done: "Concluído",
264
+ selectPlaceholder: "Selecionar…",
265
+ loading: "Carregando…",
266
+ },
159
267
  actions: "Ações",
160
268
  edit: "Editar",
161
269
  delete: "Excluir",
@@ -181,7 +289,88 @@ const pt = {
181
289
  densityCycleShortHint: "Clique para alterar",
182
290
  },
183
291
  import: {
292
+ downloadTemplate: "Baixar modelo",
293
+ downloadTemplateHint: "Obtenha um CSV com as colunas corretas (campos obrigatórios marcados com *).",
294
+ templateFileName: "{{object}}-import-template",
295
+ autoMatched: "Correspondência automática",
296
+ autoMatchedSummary: "{{count}} coluna(s) com correspondência automática — revise e ajuste abaixo.",
297
+ confidence: {
298
+ high: "Confiança alta",
299
+ medium: "Confiança média",
300
+ low: "Confiança baixa",
301
+ },
302
+ asyncQueued: "Na fila — preparando a importação…",
303
+ asyncProcessing: "Importando {{processed}} de {{total}} linhas… {{progress}}%",
304
+ asyncLargeHint: "Este arquivo é grande, portanto será importado em segundo plano.",
305
+ largeSampleNotice: "Pré-visualizando as primeiras {{shown}} de {{total}} linhas.",
306
+ cancelImport: "Cancelar a importação",
307
+ importCancelled: "Importação cancelada",
308
+ resultsTruncated: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
309
+ createdCount: "{{count}} criados",
310
+ updatedCount: "{{count}} atualizados",
311
+ downloadFailed: "Baixar as linhas com falha",
312
+ options: "Opções de importação",
313
+ writeMode: "Quando uma linha corresponde a um registro existente",
314
+ writeModeOpt: {
315
+ insert: "Sempre criar novo",
316
+ update: "Atualizar o existente (ignorar se não houver correspondência)",
317
+ upsert: "Atualizar se corresponder, senão criar",
318
+ },
319
+ matchFields: "Corresponder por",
320
+ matchFieldsPlaceholder: "Escolha o(s) campo(s) de correspondência…",
321
+ matchFieldsHint: "As linhas são associadas a registros existentes por estes campos.",
322
+ needMatchFields: "Selecione pelo menos um campo de correspondência.",
323
+ matchOnlyField: "(somente correspondência)",
324
+ optCreateOptions: "Manter valores de opção desconhecidos",
325
+ optRunAutomations: "Executar automações e gatilhos",
326
+ optTreatHistorical: "Importar como dados históricos",
327
+ optTreatHistoricalHint: "(importa registros concluídos como estão — ignora as verificações da máquina de estados e mantém os carimbos de data/hora e o autor originais em vez de carimbar agora)",
328
+ optSkipBlankKey: "Ignorar linhas com valor de correspondência em branco",
329
+ optBackground: "Importar em segundo plano",
330
+ optBackgroundHint: "(executa como um trabalho reversível)",
331
+ validate: "Validar os dados",
332
+ validating: "Validando…",
333
+ validateHint: "Verificar cada linha no servidor antes de importar.",
334
+ validatePassed: "Todas as {{ok}} linhas são válidas.",
335
+ validateFailed: "{{ok}} válidas, {{errors}} com erros.",
336
+ errorRowPrefix: "Linha {{row}}: ",
337
+ referenceNotFound: "Nenhum registro corresponde a \"{{value}}\"",
338
+ referenceAmbiguous: "\"{{value}}\" corresponde a mais de um registro — use um valor único ou o id do registro",
339
+ invalidBoolean: "\"{{value}}\" não é um valor verdadeiro/falso válido",
340
+ invalidNumber: "\"{{value}}\" não é um número válido",
341
+ invalidDate: "\"{{value}}\" não é uma data válida",
342
+ invalidOption: "\"{{value}}\" não está entre as opções permitidas",
343
+ requiredValue: "Este campo é obrigatório",
344
+ matchAmbiguous: "Corresponde a mais de um registro existente — use um valor único ou o id do registro",
345
+ history: "Histórico",
346
+ historyBack: "Voltar para a importação",
347
+ historyDescription: "Importações recentes deste objeto.",
348
+ historyHint: "Trabalhos de importação em segundo plano, dos mais recentes aos mais antigos.",
349
+ historyRefresh: "Atualizar",
350
+ historyLoading: "Carregando…",
351
+ historyEmpty: "Ainda não há importações.",
352
+ historyUnsupported: "O histórico de importações não está disponível para esta fonte de dados.",
353
+ historyColStatus: "Status",
354
+ historyColRows: "Linhas",
355
+ historyColResult: "Resultado",
356
+ historyColTime: "Quando",
357
+ errorCount: "{{count}} erros",
358
+ undoImport: "Desfazer a importação",
359
+ undoing: "Desfazendo…",
360
+ undoConfirm: "Desfazer esta importação? Os registros criados serão excluídos e os registros atualizados voltarão aos valores anteriores.",
361
+ reverted: "Desfeita",
362
+ jobStatus: {
363
+ pending: "Pendente",
364
+ running: "Em execução",
365
+ succeeded: "Concluída",
366
+ failed: "Falhou",
367
+ cancelled: "Cancelada",
368
+ },
369
+ legacyReferenceBlocked: "Importação bloqueada: {{fields}} são campos de relação que precisam da rota de importação do servidor para converter nomes em IDs de registro, e esta conexão não oferece suporte a isso. Importá-los como texto simples corromperia os dados. Atualize o backend/cliente, ou desfaça o mapeamento dessas colunas e importe-as separadamente.",
370
+ missingRequiredHint: "Não é possível continuar — campos obrigatórios não mapeados: {{fields}}. Adicione uma coluna correspondente ao seu arquivo, ou volte e envie um arquivo que a inclua.",
371
+ legacyFallbackNotice: "Importado por um modo de compatibilidade: esta conexão não oferece suporte à rota de importação do servidor, então os valores foram salvos como texto sem conversão de tipos no servidor. Atualize o backend/cliente para ter a importação completa (conversão de tipos e busca de relações).",
184
372
  title: "Importar {{object}}",
373
+ notAllowed: "Este objeto não está aberto para importação.",
185
374
  stepUpload: "Enviar",
186
375
  stepMapping: "Mapeamento",
187
376
  stepPreview: "Pré-visualização",
@@ -257,6 +446,42 @@ const pt = {
257
446
  moreEvents: "+{{count}} mais",
258
447
  },
259
448
  list: {
449
+ firstRunTitle: "Ainda não há nada aqui",
450
+ firstRunMessage: "Crie seu primeiro registro para começar.",
451
+ noMatches: "Nenhum registro correspondente",
452
+ noMatchesMessage: "Nenhum registro corresponde aos seus filtros ou à sua busca atuais. Tente ajustá-los ou limpá-los.",
453
+ loadErrorTitle: "Não foi possível carregar os registros",
454
+ loadErrorMessage: "Algo deu errado ao carregar estes dados. Verifique sua conexão e tente novamente.",
455
+ loadErrorForbiddenTitle: "Você não tem acesso",
456
+ loadErrorForbiddenMessage: "Você não tem permissão para ver estes registros. Contate seu administrador se acha que deveria ter acesso.",
457
+ loadErrorUnauthorizedTitle: "É necessário entrar",
458
+ loadErrorUnauthorizedMessage: "Sua sessão expirou ou você saiu. Entre novamente para ver estes registros.",
459
+ loadErrorRejectedTitle: "A consulta desta visualização foi rejeitada",
460
+ loadErrorRejectedMessage: "O servidor não conseguiu processar o filtro ou as opções de consulta desta visualização. Limpar os filtros costuma resolver; se a visualização estiver salva assim, um administrador precisa corrigi-la.",
461
+ retry: "Tentar novamente",
462
+ managedBy: {
463
+ system: {
464
+ title: "Ainda não há nada aqui",
465
+ message: "As entradas aparecem automaticamente quando a ação de origem é executada (por exemplo, Enviar para aprovação, Compartilhar, Convidar). Acione uma delas em um registro de origem para criar uma linha.",
466
+ },
467
+ appendOnly: {
468
+ title: "Nenhum evento registrado",
469
+ message: "Este é um log de auditoria imutável. As linhas são gravadas pela plataforma quando ocorrem eventos — você pode exportar o histórico, mas não criar entradas aqui.",
470
+ },
471
+ betterAuth: {
472
+ title: "Nenhum registro de identidade",
473
+ message: "Estes registros são criados pelo provedor de autenticação — por meio de login, provisionamento e fluxos de segurança — e não adicionados manualmente aqui.",
474
+ },
475
+ betterAuthUser: {
476
+ title: "Ainda não há usuários",
477
+ message: "As contas de usuário são provisionadas pelo provedor de autenticação, não criadas aqui. Convide colegas para sua organização e eles aparecerão automaticamente no primeiro login (provisionamento SSO just-in-time). Os usuários finais do app chegam quando se cadastram por meio dele.",
478
+ },
479
+ betterAuthTeam: {
480
+ title: "Ainda não há equipes",
481
+ message: "As equipes agrupam membros dentro de uma organização. Crie uma com \"Criar equipe\", ou elas surgem pelos fluxos de provisionamento de organização e SSO do seu provedor de autenticação.",
482
+ },
483
+ },
484
+ refresh: "Atualizar",
260
485
  loading: 'Loading records...',
261
486
  recordCount: "{{count}} registros",
262
487
  recordCountOne: "{{count}} registro",
@@ -268,6 +493,8 @@ const pt = {
268
493
  filterRecords: "Filtrar registros",
269
494
  sort: "Ordenar",
270
495
  sortRecords: "Ordenar registros",
496
+ sortByIdSuffix: "(por ID)",
497
+ sortRelationalHint: "As colunas que apontam para outro registro não são listadas: elas só podem ser ordenadas pelo ID armazenado, não pelo nome exibido na célula. Para ordenar por esse nome, adicione um campo de fórmula que o contenha.",
271
498
  group: "Agrupar",
272
499
  groupBy: "Agrupar por",
273
500
  export: "Exportar",
@@ -297,6 +524,11 @@ const pt = {
297
524
  recordEditingTitle: "Edição de registros",
298
525
  },
299
526
  managedByBadge: {
527
+ systemWritable: {
528
+ short: "Esquema da plataforma",
529
+ title: "Definido pela plataforma, gravável pelo administrador",
530
+ body: "O esquema deste objeto é definido pela plataforma, mas as linhas são suas para criar e editar aqui. Quem pode gravar é determinado pela administração delegada e pela segurança em nível de registro, não por este selo.",
531
+ },
300
532
  config: {
301
533
  short: "Config. de admin",
302
534
  title: "Configuração do administrador",
@@ -319,6 +551,7 @@ const pt = {
319
551
  },
320
552
  },
321
553
  kanban: {
554
+ uncategorized: "Sem categoria",
322
555
  addCard: "Adicionar cartão",
323
556
  addColumn: "Adicionar coluna",
324
557
  moveCard: "Mover cartão",
@@ -340,12 +573,92 @@ const pt = {
340
573
  },
341
574
  },
342
575
  gantt: {
576
+ viewMode: {
577
+ day: "Dia",
578
+ week: "Semana",
579
+ month: "Mês",
580
+ quarter: "Trimestre",
581
+ year: "Ano",
582
+ },
583
+ row: {
584
+ expand: "Expandir",
585
+ collapse: "Recolher",
586
+ open: "Abrir detalhes",
587
+ },
588
+ aria: {
589
+ taskList: "Lista de tarefas",
590
+ },
591
+ tooltip: {
592
+ days: "d",
593
+ },
594
+ menu: {
595
+ view: "Ver detalhes",
596
+ edit: "Editar em linha",
597
+ delete: "Excluir",
598
+ addPredecessor: "Adicionar predecessora…",
599
+ addSuccessor: "Adicionar sucessora…",
600
+ removeDependency: "Remover a dependência",
601
+ noCandidates: "Nenhuma tarefa disponível",
602
+ searchTasks: "Pesquisar tarefas…",
603
+ },
604
+ delete: {
605
+ title: "Excluir esta tarefa?",
606
+ body: "\"{{title}}\" será removida permanentemente. Esta ação não pode ser desfeita.",
607
+ cancel: "Cancelar",
608
+ confirm: "Excluir",
609
+ deleting: "Excluindo…",
610
+ },
611
+ drawer: {
612
+ fallbackTitle: "Detalhes da tarefa",
613
+ },
614
+ linkType: {
615
+ fs: "Término → Início",
616
+ ss: "Início → Início",
617
+ ff: "Término → Término",
618
+ sf: "Início → Término",
619
+ },
620
+ conflict: {
621
+ title: "Conflito de agendamento",
622
+ body: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa(s) afetada(s)?",
623
+ confirm: "Reagendar automaticamente",
624
+ cancel: "Manter como está",
625
+ },
626
+ autoScheduleDlg: {
627
+ title: "Agendamento automático",
628
+ body: "Adiar {count} tarefa(s) para atender aos vínculos de dependência?",
629
+ skipped: "{count} tarefa(s) bloqueada(s) também violam os vínculos e foram ignoradas.",
630
+ confirm: "Aplicar",
631
+ cancel: "Cancelar",
632
+ none: "Todas as dependências foram atendidas — nada a reagendar.",
633
+ },
634
+ resource: {
635
+ header: "Recurso",
636
+ peak: "Pico",
637
+ over: "sobrecarregado",
638
+ empty: "Nenhuma tarefa para alocar.",
639
+ },
640
+ readOnly: "Somente leitura",
641
+ readOnlyHint: "A edição está desativada nesta visão.",
642
+ lockedHint: "Sem permissão de edição",
643
+ writeFailed: "Falha ao salvar — a alteração foi revertida",
343
644
  column: {
344
645
  taskName: "Nome da tarefa",
345
646
  start: "Início",
346
647
  end: "Fim",
347
648
  },
348
649
  toolbar: {
650
+ thisWeek: "Esta semana",
651
+ thisMonth: "Este mês",
652
+ viewMode: "Granularidade da linha do tempo",
653
+ enterFullscreen: "Entrar em tela cheia",
654
+ exitFullscreen: "Sair da tela cheia",
655
+ criticalPath: "Destacar o caminho crítico",
656
+ autoSchedule: "Agendar dependências automaticamente",
657
+ exportPng: "Exportar como PNG",
658
+ exportPdf: "Exportar PDF",
659
+ saveLayout: "Salvar o layout",
660
+ undo: "Desfazer",
661
+ redo: "Refazer",
349
662
  prevPeriod: "Período anterior",
350
663
  nextPeriod: "Próximo período",
351
664
  zoomIn: "Ampliar",
@@ -391,6 +704,11 @@ const pt = {
391
704
  redo: 'Redo',
392
705
  },
393
706
  detail: {
707
+ editInlineHint: "Clique duas vezes para editar",
708
+ systemActor: "Sistema",
709
+ unknownUser: "Desconhecido",
710
+ created: "Criado",
711
+ updated: "Atualizado",
394
712
  back: "Voltar",
395
713
  edit: "Editar",
396
714
  editInline: "Editar",
@@ -440,6 +758,18 @@ const pt = {
440
758
  attachmentCount: "{{count}} anexo",
441
759
  attachmentCountPlural: "{{count}} anexos",
442
760
  removeAttachment: "Remover anexo",
761
+ // Record Attachments panel (enable.files, objectstack#4358)
762
+ attachments: "Anexos",
763
+ uploadAttachment: "Enviar",
764
+ loadingAttachments: "Carregando anexos…",
765
+ noAttachments: "Ainda não há anexos. Envie um arquivo para começar.",
766
+ downloadAttachment: "Baixar",
767
+ deleteAttachment: "Excluir anexo",
768
+ attachmentDeleteDenied: "Somente quem enviou ou alguém que pode editar este registro pode excluir este anexo.",
769
+ attachmentParentAccessDenied: "Você não tem acesso para anexar arquivos a este registro.",
770
+ attachmentDownloadDenied: "Você não tem acesso para baixar este anexo.",
771
+ attachmentAuthRequired: "Faça login para baixar este anexo.",
772
+ attachmentPermissionDenied: "Você não tem permissão para fazer isso.",
443
773
  unifiedDiff: "Visualização unificada",
444
774
  sideBySideDiff: "Visualização lado a lado",
445
775
  noChanges: "Sem alterações",
@@ -487,9 +817,18 @@ const pt = {
487
817
  saving: "Salvando…",
488
818
  lockedByApproval: "Bloqueado para aprovação",
489
819
  lockedTooltip: "Este registro tem uma solicitação de aprovação pendente; a edição está bloqueada",
820
+ writeStrippedTitle: "Alguns campos não foram salvos",
821
+ writeStrippedReadonly: "Somente leitura, portanto não foi salvo: {{fields}}",
822
+ writeStrippedByState: "Não editável no estado atual deste registro, portanto não foi salvo: {{fields}}",
823
+ approvalPendingEditable: "Em aprovação · editável",
824
+ approvalPendingTooltip: "Este registro tem uma solicitação de aprovação pendente; esta etapa ainda permite a edição",
825
+ approvalProgress: "Aprovações — {{got}} de {{need}}",
826
+ approvalProgressGroups: "Assinaturas — {{got}} de {{need}} grupos",
827
+ approvalProgressLabel: "Progresso da aprovação",
490
828
  cancelApproval: "Cancelar aprovação",
491
829
  cancelApprovalInFlight: "Cancelando…",
492
830
  cancelApprovalTooltip: "Cancelar a solicitação de aprovação pendente para desbloquear o registro",
831
+ cancelApprovalTooltipUnlocked: "Cancelar a solicitação de aprovação pendente",
493
832
  cancelApprovalFailed: "Falha ao cancelar aprovação",
494
833
  cancelApprovalUnavailable: "O cancelamento de aprovações não é suportado por esta fonte de dados",
495
834
  linkCopied: "Link copiado para a área de transferência",
@@ -603,6 +942,35 @@ const pt = {
603
942
  resetZoom: "Redefinir zoom",
604
943
  },
605
944
  dashboard: {
945
+ noRows: "Sem linhas",
946
+ pickMeasures: "Escolha medidas (valores) para este widget de dataset.",
947
+ datasetUnsupported: "Esta fonte de dados não oferece suporte a consultas de dataset.",
948
+ details: "Detalhes",
949
+ exportCsv: "Exportar CSV",
950
+ openInList: "Abrir na lista",
951
+ filters: {
952
+ label: "Filtros do painel",
953
+ dateRange: "Período",
954
+ allTime: "Todo o período",
955
+ custom: "Personalizado…",
956
+ all: "Tudo",
957
+ reset: "Redefinir",
958
+ range: {
959
+ today: "Hoje",
960
+ yesterday: "Ontem",
961
+ this_week: "Esta semana",
962
+ last_week: "Semana passada",
963
+ this_month: "Este mês",
964
+ last_month: "Mês passado",
965
+ this_quarter: "Este trimestre",
966
+ last_quarter: "Trimestre passado",
967
+ this_year: "Este ano",
968
+ last_year: "Ano passado",
969
+ last_7_days: "Últimos 7 dias",
970
+ last_30_days: "Últimos 30 dias",
971
+ last_90_days: "Últimos 90 dias",
972
+ },
973
+ },
606
974
  addWidget: "Adicionar widget",
607
975
  removeWidget: "Remover widget",
608
976
  editLayout: "Editar layout",
@@ -730,6 +1098,7 @@ const pt = {
730
1098
  navTypeGroup: "Grupo",
731
1099
  navTypeSeparator: "Separador",
732
1100
  navTypeAction: "Ação",
1101
+ navTypeComponent: "Componente",
733
1102
  navEditIcon: "Editar ícone",
734
1103
  navToggleVisible: "Alternar visibilidade",
735
1104
  navHidden: "Oculto",
@@ -831,8 +1200,199 @@ const pt = {
831
1200
  },
832
1201
  },
833
1202
  console: {
1203
+ settingsHub: {
1204
+ title: "Configurações",
1205
+ subtitle: "Configure seu workspace, integrações e sinalizadores de recursos.",
1206
+ loadError: "Falha ao carregar as configurações",
1207
+ empty: "Nenhuma configuração registrada. Os plugins podem registrar manifestos de configuração pelo SettingsService.",
1208
+ settingsCount: "{{n}} configurações",
1209
+ beta: "Beta",
1210
+ categories: {
1211
+ Workspace: "Workspace",
1212
+ Communication: "Comunicação",
1213
+ Security: "Segurança",
1214
+ Infrastructure: "Infraestrutura",
1215
+ Beta: "Beta",
1216
+ Other: "Outros",
1217
+ },
1218
+ },
1219
+ objectData: {
1220
+ badge: "Dados",
1221
+ description: "Recorte de dados definido pela URL — não vinculado a nenhuma visão salva.",
1222
+ filteredBy: "Filtrado por",
1223
+ removeFilter: "Remover o filtro {{field}}",
1224
+ saveAsView: "Salvar como visão",
1225
+ noAccessTitle: "Acesso negado",
1226
+ noAccess: "Você não tem permissão para ver estes dados.",
1227
+ },
1228
+ identityImport: {
1229
+ policyTitle: "Configuração de acesso para usuários importados",
1230
+ policy: {
1231
+ auto: "Automático (recomendado)",
1232
+ invite: "Enviar convites",
1233
+ temporary: "Senhas temporárias",
1234
+ none: "Sem senha (apenas identidade)",
1235
+ },
1236
+ policyHint: {
1237
+ auto: "Usuários acessíveis recebem um convite (e-mail ou SMS); quem não puder ser contatado recebe uma senha de uso único, exibida UMA ÚNICA VEZ na tela de resultados. Funciona com ou sem serviço de e-mail/SMS.",
1238
+ invite: "Cada usuário criado recebe um e-mail para definir a senha (ou um SMS de convite nas linhas apenas com telefone). Requer um serviço de e-mail/SMS configurado — linhas inacessíveis falham.",
1239
+ temporary: "Para implantações sem e-mail/SMS: cada usuário criado recebe uma senha de uso único, exibida UMA ÚNICA VEZ na tela de resultados. O primeiro acesso exige a troca.",
1240
+ none: "Os usuários entram primeiro com um OTP por telefone, um link mágico ou um link de redefinição, e depois definem a própria senha.",
1241
+ },
1242
+ passwordsNote: "Senhas temporárias — exibidas uma única vez, nunca armazenadas. Salve-as agora; cada usuário deve trocar a sua no primeiro acesso.",
1243
+ passwordsMore: "Demais entradas omitidas — use o download.",
1244
+ passwordsDownload: "Baixar CSV",
1245
+ },
1246
+ ai: {
1247
+ usage: {
1248
+ title: "Uso de IA",
1249
+ meterBuild: "Criar",
1250
+ meterAsk: "Perguntar",
1251
+ statusOk: "Ainda há bastante",
1252
+ statusLow: "Está acabando",
1253
+ statusFull: "Limite atingido",
1254
+ resetsDaily: "Redefine hoje à noite",
1255
+ resetsMonthly: "Redefine no próximo ciclo",
1256
+ ctaUpgrade: "Faça upgrade para continuar",
1257
+ ctaTopUp: "Adicione créditos para continuar",
1258
+ ariaLabel: "Uso de IA: {{status}}",
1259
+ },
1260
+ workspaceTitle: "Workspace de IA",
1261
+ workspaceSubtitle: "Pergunte, inspecione e retome conversas",
1262
+ openChats: "Abrir conversas",
1263
+ chats: "Conversas",
1264
+ chatsDescription: "Navegue e gerencie as conversas com a IA.",
1265
+ share: "Compartilhar",
1266
+ shareTitle: "Compartilhar esta conversa",
1267
+ shareDisabledTitle: "Comece a conversar para habilitar o compartilhamento",
1268
+ newChat: "Nova",
1269
+ searchChats: "Pesquisar conversas...",
1270
+ noChatsYet: "Ainda não há conversas",
1271
+ noChatsDescription: "Inicie uma nova conversa para vê-la aqui.",
1272
+ noMatchingChats: "Nenhuma conversa correspondente.",
1273
+ newConversation: "Nova conversa",
1274
+ renameConversation: "Renomear conversa",
1275
+ deleteConversation: "Excluir conversa",
1276
+ saveRename: "Salvar novo nome",
1277
+ cancelRename: "Cancelar renomeação",
1278
+ loadingHistory: "Carregando o histórico da conversa...",
1279
+ conversationReady: "Conversa pronta",
1280
+ preparingConversation: "Preparando uma nova conversa",
1281
+ offlineDemoMode: "Modo de demonstração off-line — lista de agentes indisponível",
1282
+ sendFailedRateLimited: "Você está enviando mensagens rápido demais. Sua mensagem foi mantida abaixo — aguarde um momento e tente novamente.",
1283
+ sendFailedGeneric: "Não foi possível enviar sua mensagem. Ela foi mantida abaixo — tente novamente.",
1284
+ askAgent: "Pergunte a {{agent}}...",
1285
+ assistant: "Assistente",
1286
+ liveCanvas: "Pré-visualização ao vivo — {{app}} (rascunho)",
1287
+ liveCanvasUnlisted: "Aplicativo ao vivo — {{app}} (não listado até ser publicado)",
1288
+ loadingAgents: "Carregando agentes...",
1289
+ askAnything: "Pergunte qualquer coisa...",
1290
+ emptyTitle: "Iniciar uma conversa",
1291
+ emptyDescription: "Pergunte qualquer coisa — o assistente tem acesso ao contexto do seu aplicativo atual.",
1292
+ switchAssistant: "Trocar de assistente",
1293
+ chooseAgent: "Escolher assistente…",
1294
+ empty: {
1295
+ build: {
1296
+ title: "Criar com IA",
1297
+ description: "Descreva um aplicativo ou fluxo de trabalho em linguagem simples — eu rascunho os objetos, telas e automações, e então você revisa e publica.",
1298
+ },
1299
+ ask: {
1300
+ title: "Pergunte aos seus dados",
1301
+ description: "Faça perguntas sobre seus registros — contagens, listas e resumos dos dados a que você tem acesso.",
1302
+ },
1303
+ editApp: {
1304
+ title: "Editando “{{app}}”",
1305
+ titleGeneric: "Editar este aplicativo",
1306
+ description: "O que você quer mudar? Eu altero este aplicativo no lugar — adicionar um campo, objeto, visão ou automação, ou ajustar o que já existe.",
1307
+ },
1308
+ },
1309
+ clearConversation: "Limpar",
1310
+ sendHint: "para enviar",
1311
+ agentActivity: "Atividade do agente",
1312
+ toolCompleted: "Concluído",
1313
+ toolRunning: "Em execução",
1314
+ toolAwaitingApproval: "Aguardando aprovação",
1315
+ toolFailed: "Falhou",
1316
+ toolDetailsHidden: "As entradas das ferramentas e os resultados brutos estão ocultos nesta visão.",
1317
+ copy: "Copiar",
1318
+ copied: "Copiado",
1319
+ regenerate: "Gerar novamente",
1320
+ model: "Modelo",
1321
+ submit: "Enviar",
1322
+ uploadFiles: "Enviar arquivos",
1323
+ stopResponse: "Parar a resposta",
1324
+ trace: "rastro",
1325
+ viewTrace: "Ver o rastro",
1326
+ nextSteps: "Próximos passos",
1327
+ publishDrafts: "Publicar",
1328
+ publishOk: "Publicado — os objetos já estão ativos.",
1329
+ seedWarn: "Publicado, mas alguns dados de exemplo não puderam ser carregados.",
1330
+ openBuiltApp: "Abrir o aplicativo",
1331
+ designBuiltApp: "Projetar no Studio",
1332
+ previewDraft: "Pré-visualizar",
1333
+ previewApp: "Pré-visualizar o aplicativo",
1334
+ resizeSplit: "Redimensionar a conversa e a pré-visualização",
1335
+ hideChats: "Ocultar conversas",
1336
+ showChats: "Mostrar conversas",
1337
+ planTitle: "Plano proposto",
1338
+ planQuestions: "Confirmar antes de criar",
1339
+ planAssumptions: "Suposições",
1340
+ planApproveHint: "Responda para aprovar ou ajustar este plano.",
1341
+ planApprove: "Criar",
1342
+ planAdjust: "Ajustar",
1343
+ justNow: "agora mesmo",
1344
+ minutesAgo: "há {{count}} min",
1345
+ hoursAgo: "há {{count}} h",
1346
+ daysAgo: "há {{count}} d",
1347
+ agentLabels: {
1348
+ ask: "Perguntar",
1349
+ build: "Criar",
1350
+ dataChat: "Assistente",
1351
+ metadataAssistant: "Assistente de metadados",
1352
+ },
1353
+ suggestions: {
1354
+ dataChat: {
1355
+ userCount: "Quantos usuários existem no sistema? Liste os e-mails deles.",
1356
+ recentRecords: "Liste os 5 registros criados mais recentemente.",
1357
+ recordCounts: "Conte os registros de cada objeto.",
1358
+ },
1359
+ metadataAssistant: {
1360
+ buildCrm: "Crie um CRM de vendas — clientes, contatos e um funil de negócios que eu possa totalizar por etapa.",
1361
+ buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, e um quadro por status.",
1362
+ buildFlow: "Projete uma central de suporte — chamados com prioridade, um fluxo de status e vínculos com clientes.",
1363
+ buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e visibilidade de estoque baixo.",
1364
+ buildRecruiting: "Crie um controle de candidaturas — candidatos, vagas abertas, etapas de entrevista e anotações.",
1365
+ },
1366
+ generic: {
1367
+ help: "Com o que você pode me ajudar?",
1368
+ availableObjects: "Liste os objetos de dados disponíveis.",
1369
+ recentActivity: "Resuma minha atividade recente.",
1370
+ },
1371
+ editApp: {
1372
+ addField: "Adicione um campo a um dos objetos.",
1373
+ addObject: "Adicione um novo objeto e relacione-o a um existente.",
1374
+ addDashboard: "Adicione um painel para as métricas principais.",
1375
+ addAutomation: "Adicione uma automação — uma aprovação, um fluxo de status ou uma notificação.",
1376
+ },
1377
+ },
1378
+ changesTitle: "Confirmar alterações",
1379
+ changesConfirmed: "Confirmado",
1380
+ changesConfirm: "Confirmar",
1381
+ changesConfirmHint: "Responda para confirmar ou ajustar esta alteração.",
1382
+ changeVerb: {
1383
+ createObject: "Criar objeto",
1384
+ addField: "Adicionar campo",
1385
+ modifyField: "Modificar campo",
1386
+ deleteField: "Excluir campo",
1387
+ createMetadata: "Criar",
1388
+ updateMetadata: "Modificar",
1389
+ createSeed: "Gerar dados de exemplo",
1390
+ createPackage: "Criar pacote de aplicativo",
1391
+ },
1392
+ },
834
1393
  title: "Console ObjectStack",
835
1394
  initializing: "Inicializando aplicação...",
1395
+ loadingHint: "Configurar um novo ambiente pode levar alguns instantes.",
836
1396
  breadcrumb: {
837
1397
  dashboards: "Painéis",
838
1398
  pages: "Páginas",
@@ -874,6 +1434,7 @@ const pt = {
874
1434
  toggleDarkMode: "Alternar modo escuro",
875
1435
  },
876
1436
  commandPalette: {
1437
+ title: "Paleta de comandos",
877
1438
  placeholder: "Digite um comando ou pesquise...",
878
1439
  noResults: "Nenhum resultado encontrado.",
879
1440
  objects: "Objetos",
@@ -907,6 +1468,14 @@ const pt = {
907
1468
  system: "Sistema",
908
1469
  },
909
1470
  objectView: {
1471
+ viewTypeTree: "Árvore",
1472
+ viewTypeTreeDesc: "Aninha registros autorreferenciados em uma hierarquia por um campo pai.",
1473
+ parentField: "Campo pai",
1474
+ parentFieldHelp: "O campo que aponta para o registro pai (mesmo objeto) e define a hierarquia. Apenas campos autorreferenciados são válidos.",
1475
+ viewName: "Nome",
1476
+ viewNameHelp: "Chave técnica (snake_case). Preenchida automaticamente a partir do título — edite se quiser.",
1477
+ viewNameRequired: "Informe uma chave (letras minúsculas, números, sublinhado). Não é preenchida automaticamente para títulos não latinos.",
1478
+ viewNameInvalid: "Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.",
910
1479
  systemViewReadonly: 'System view defined in code - duplicate to customize.',
911
1480
  expandToPage: 'Open as full page',
912
1481
  objectNotFound: "Objeto não encontrado",
@@ -1120,7 +1689,28 @@ const pt = {
1120
1689
  },
1121
1690
  },
1122
1691
  auth: {
1692
+ setPassword: {
1693
+ title: "Definir uma senha de recuperação",
1694
+ description: "Você entrou por logon único. Defina uma senha local para continuar conseguindo acessar este ambiente diretamente caso o SSO fique indisponível.",
1695
+ email: "E-mail",
1696
+ newPassword: "Nova senha",
1697
+ confirmPassword: "Confirmar a senha",
1698
+ submit: "Definir a senha",
1699
+ submitting: "Salvando…",
1700
+ success: "Senha local definida",
1701
+ failed: "Não foi possível definir a senha",
1702
+ passwordsMismatch: "As senhas não coincidem",
1703
+ noSession: "Sua sessão expirou.",
1704
+ backToSignIn: "Entrar novamente",
1705
+ },
1123
1706
  login: {
1707
+ signingIn: "Entrando…",
1708
+ ssoHandoff: "Continuar para {{target}}",
1709
+ devAdminHint: {
1710
+ title: "Instância de desenvolvimento",
1711
+ body: "Entre com o administrador de desenvolvimento pré-configurado:",
1712
+ dismiss: "Dispensar",
1713
+ },
1124
1714
  title: "Entre na sua conta",
1125
1715
  description: "Digite seu e-mail e senha para continuar",
1126
1716
  emailLabel: "E-mail",
@@ -1133,6 +1723,7 @@ const pt = {
1133
1723
  noAccountText: "Não tem uma conta?",
1134
1724
  signUpText: "Cadastre-se",
1135
1725
  errors: {
1726
+ oauthCallbackFailed: "Não foi possível concluir o logon único — o link de acesso expirou ou já foi utilizado. Tente novamente.",
1136
1727
  invalidCredentials: "E-mail ou senha inválidos. Por favor, tente novamente.",
1137
1728
  emailNotVerified: "Por favor, verifique seu e-mail antes de fazer login.",
1138
1729
  },
@@ -1258,6 +1849,40 @@ const pt = {
1258
1849
  shell: {
1259
1850
  tenantHostHint: "Você está fazendo login neste espaço de trabalho",
1260
1851
  },
1852
+ layout: {
1853
+ headline: "Crie aplicativos de negócios poderosos, com mais rapidez.",
1854
+ subhead: "A plataforma universal para gestão de dados corporativos, fluxos de trabalho e analytics.",
1855
+ },
1856
+ remediation: {
1857
+ signOut: "Sair da conta",
1858
+ password: {
1859
+ title: "Sua senha expirou",
1860
+ fallbackMessage: "Defina uma nova senha para continuar.",
1861
+ current: "Senha atual",
1862
+ next: "Nova senha",
1863
+ confirm: "Confirmar nova senha",
1864
+ submit: "Alterar senha e continuar",
1865
+ submitting: "Atualizando…",
1866
+ mismatch: "As novas senhas não coincidem.",
1867
+ failed: "Não foi possível alterar a senha.",
1868
+ },
1869
+ mfa: {
1870
+ title: "Configurar a autenticação em duas etapas",
1871
+ fallbackMessage: "Sua organização exige um aplicativo autenticador para continuar.",
1872
+ confirmPassword: "Confirme sua senha",
1873
+ continue: "Continuar",
1874
+ preparing: "Preparando…",
1875
+ enrollFailed: "Não foi possível iniciar o registro.",
1876
+ scanTitle: "Escaneie com seu aplicativo autenticador",
1877
+ scanBody: "Escaneie este QR code com o Google Authenticator, 1Password, Authy etc. e digite o código de 6 dígitos.",
1878
+ backupTitle: "Salve seus códigos de backup",
1879
+ backupBody: "Guarde-os em local seguro — cada um pode ser usado uma vez se você perder seu dispositivo.",
1880
+ codeLabel: "Código de 6 dígitos",
1881
+ verify: "Verificar e continuar",
1882
+ verifying: "Verificando…",
1883
+ invalidCode: "Código inválido. Tente novamente.",
1884
+ },
1885
+ },
1261
1886
  },
1262
1887
  profile: {
1263
1888
  title: "Perfil",
@@ -1322,11 +1947,15 @@ const pt = {
1322
1947
  settings: "Configurações do espaço de trabalho",
1323
1948
  },
1324
1949
  help: {
1950
+ onThisPage: "Nesta página",
1951
+ keyboardShortcuts: "Atalhos de teclado",
1325
1952
  appDocs: 'Documentação deste app',
1326
1953
  allDocs: 'Toda a documentação',
1327
1954
  onlineDocs: 'Documentação online',
1328
1955
  },
1329
1956
  sidebar: {
1957
+ packageManagement: "Gerenciamento de pacotes",
1958
+ searchNavigation: "Pesquisar na navegação...",
1330
1959
  settings: "Configurações",
1331
1960
  help: "Ajuda",
1332
1961
  helpTooltip: "Ajuda e documentação",
@@ -1343,14 +1972,66 @@ const pt = {
1343
1972
  removeFromFavorites: "Remover {{name}} dos favoritos",
1344
1973
  },
1345
1974
  topbar: {
1975
+ openAssistant: "Abrir o assistente {{name}}",
1976
+ offline: "Off-line",
1977
+ usersOnline: "Usuários on-line no momento",
1978
+ switchView: "Trocar de visão",
1979
+ switchObject: "Trocar de objeto",
1980
+ connection: {
1981
+ connected: "Conectado",
1982
+ connecting: "Conectando...",
1983
+ reconnecting: "Reconectando...",
1984
+ disconnected: "Desconectado",
1985
+ error: "Erro de conexão",
1986
+ },
1987
+ stage: {
1988
+ preview: "Pré-visualização",
1989
+ beta: "Beta",
1990
+ tooltip: "Esta plataforma está em pré-visualização — os recursos podem mudar.",
1991
+ },
1346
1992
  aiAssistant: "Assistente de IA",
1347
1993
  designInStudio: "Projetar no Studio",
1348
1994
  },
1349
1995
  home: {
1996
+ build: {
1997
+ title: "Criar um aplicativo",
1998
+ subtitle: "Comece do zero — projete objetos, formulários, automações e interfaces.",
1999
+ },
2000
+ template: {
2001
+ title: "Comece com um modelo",
2002
+ subtitle: "Instale um aplicativo modelo do marketplace e personalize-o.",
2003
+ },
2004
+ welcomeAdminDescription: "Descreva seu negócio em uma frase — a IA gera os objetos, as telas, as APIs e as ferramentas do agente. Ou configure você mesmo pelo menu à esquerda.",
2005
+ welcomeAdminDescriptionNoBuild: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda. Quando houver dados, o assistente de IA poderá ajudar a explorá-los.",
2006
+ welcomeAdminDescriptionNoAi: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda.",
2007
+ noAppsTitle: "Ainda não há aplicativos",
2008
+ noAppsDescription: "Seu workspace está sendo preparado — os aplicativos que seu administrador compartilhar aparecerão aqui.",
2009
+ buildWithAI: "Criar com IA",
2010
+ askAI: "Perguntar à IA",
2011
+ recoveryReminder: {
2012
+ message: "Defina uma senha de recuperação para conseguir entrar mesmo que o logon único fique indisponível.",
2013
+ cta: "Definir senha",
2014
+ dismiss: "Dispensar",
2015
+ },
2016
+ pendingDrafts: {
2017
+ message: "Você tem {{count}} alteração(ões) não publicada(s) — publique para ativá-las.",
2018
+ cta: "Publicar",
2019
+ publishing: "Publicando…",
2020
+ published: "Publicado! Suas alterações estão ativas.",
2021
+ publishFailed: "Falha ao publicar",
2022
+ },
1350
2023
  title: "Início",
1351
2024
  subtitle: "Painel do seu espaço de trabalho",
1352
2025
  nav: "Início",
1353
2026
  allApps: "Todas as aplicações",
2027
+ yourApps: "As suas aplicações",
2028
+ showMoreApps: "Mais",
2029
+ showLess: "Mostrar menos",
2030
+ continueEmpty: "Os itens que abrir aparecerão aqui.",
2031
+ actionCenter: {
2032
+ title: "Requer a sua atenção",
2033
+ empty: "Está tudo em dia",
2034
+ },
1354
2035
  loading: "Carregando espaço de trabalho...",
1355
2036
  recent: "Recentes",
1356
2037
  starred: "Favoritos",
@@ -1402,7 +2083,21 @@ const pt = {
1402
2083
  },
1403
2084
  },
1404
2085
  layout: {
2086
+ systemNav: {
2087
+ systemSettings: "Configurações do sistema",
2088
+ applications: "Aplicativos",
2089
+ appMarketplace: "Marketplace de aplicativos",
2090
+ objectManager: "Gerenciador de objetos",
2091
+ users: "Usuários",
2092
+ organizations: "Organizações",
2093
+ roles: "Perfis",
2094
+ configuration: "Configuração",
2095
+ createApp: "Criar aplicativo",
2096
+ },
1405
2097
  appSwitcher: {
2098
+ switchApplication: "Trocar de aplicativo",
2099
+ appsAvailable: "{{count}} aplicativos disponíveis",
2100
+ editNavigation: "Editar a navegação",
1406
2101
  home: "Início",
1407
2102
  addApp: "Adicionar aplicativo",
1408
2103
  editApp: "Editar aplicativo",
@@ -1495,8 +2190,8 @@ const pt = {
1495
2190
  uploading: "Enviando…",
1496
2191
  defaultActionTitle: "Ação",
1497
2192
  ok: "OK",
1498
- lookupPlaceholder: "Colar ID do registro (UUID) para {{label}}",
1499
- lookupHelpText: "Insira o ID do registro do objeto referenciado. Um seletor será adicionado em breve.",
2193
+ lookupPlaceholder: "ID do registro para {{label}}",
2194
+ lookupHelpText: "Este parâmetro não tem um objeto de referência configurado, portanto o seletor de registros não está disponível. Insira um ID de registro ou peça a um administrador para corrigir o parâmetro da ação.",
1500
2195
  },
1501
2196
  actionConfirm: {
1502
2197
  title: "Confirmar ação",
@@ -1521,6 +2216,8 @@ const pt = {
1521
2216
  updateFailed: "Não foi possível atualizar a navegação",
1522
2217
  },
1523
2218
  objectActions: {
2219
+ resetPackageSetConfirm: "Este conjunto de permissões acompanha um pacote instalado e não pode ser removido. Excluí-lo o redefine para a versão original do pacote e descarta suas personalizações neste ambiente. Continuar?",
2220
+ resetPackageSetSuccess: "Conjunto de permissões redefinido para a versão original do pacote",
1524
2221
  deleteSuccess: "{{label}} excluído com sucesso",
1525
2222
  deleteFailed: "Não foi possível excluir {{label}}",
1526
2223
  noRecordId: "Nenhum ID de registro fornecido",
@@ -1685,6 +2382,7 @@ const pt = {
1685
2382
  },
1686
2383
  },
1687
2384
  organizations: {
2385
+ create: "Criar workspace",
1688
2386
  mine: "Minhas organizações",
1689
2387
  title: "Organizações",
1690
2388
  heading: "Suas organizações",
@@ -1698,6 +2396,11 @@ const pt = {
1698
2396
  noMatches: "Nenhuma organização corresponde à sua pesquisa.",
1699
2397
  },
1700
2398
  notifications: {
2399
+ regionLabel: "Notificações",
2400
+ groupCount: "{{count}} notificações",
2401
+ groupUnread: "{{count}} não lidas",
2402
+ groupMarkRead: "Marcar como lidas",
2403
+ groupMarkReadTitle: "Marcar todas deste tipo como lidas",
1701
2404
  empty: "Sem notificações",
1702
2405
  markAllRead: "Marcar tudo como lido",
1703
2406
  viewAll: "Ver todas as notificações",
@@ -1816,7 +2519,117 @@ const pt = {
1816
2519
  done: 'Concluído — ocultar',
1817
2520
  },
1818
2521
  },
2522
+ excelImport: {
2523
+ noImportableFields: "Esse objeto não tem campos importáveis.",
2524
+ schemaReadFailed: "Não foi possível ler o esquema do objeto.",
2525
+ imported: "{{count}} linha(s) importada(s) para {{object}}.",
2526
+ importFrom: "Importar as linhas reais de",
2527
+ into: "para",
2528
+ opening: "Abrindo…",
2529
+ importAction: "Importar",
2530
+ dismiss: "Dispensar",
2531
+ },
2532
+ cloudOnboarding: {
2533
+ hintCreate: "Crie seu primeiro ambiente — um espaço de trabalho privado com URL, banco de dados e plano próprios. A construção acontece dentro dele.",
2534
+ hintReady: "Seu ambiente de produção está pronto. Abra-o para criar e executar seus aplicativos — tudo acontece dentro do ambiente.",
2535
+ createEnvironment: "Crie seu ambiente",
2536
+ openProduction: "Abrir produção",
2537
+ manageEnvironments: "Gerenciar ambientes",
2538
+ },
2539
+ aiModelStatus: {
2540
+ summary: "Criar / Perguntar usa {{conversational}} ({{conversationalSource}}); estruturado usa {{structured}} ({{structuredSource}}).",
2541
+ summaryRouting: "Política de roteamento: planos gratuitos → {{free}}, planos pagos → {{paid}}.",
2542
+ modelUnknown: "desconhecido",
2543
+ sourceUnknown: "não informado pelo adaptador",
2544
+ rowConversational: "Modelo Build / Ask",
2545
+ rowStructured: "Estruturado (blueprint / seed)",
2546
+ rowReasoning: "Esforço de raciocínio",
2547
+ readFailed: "Não foi possível ler o modelo de IA efetivo. Este ambiente pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.",
2548
+ readFailedWithStatus: "Não foi possível ler o modelo de IA efetivo (HTTP {{status}}). Este ambiente pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.",
2549
+ overridesInEffect: "Substituições em vigor: ",
2550
+ noOverrides: "nenhuma — usando os padrões do código implantado.",
2551
+ adapter: "Adaptador: ",
2552
+ sourceCodeDefault: "padrão do código (sem substituição env)",
2553
+ sourceInherits: "igual a build/ask",
2554
+ sourcePinned: "fixado por {{source}}",
2555
+ },
2556
+ chatbotError: {
2557
+ title: "Falha na resposta",
2558
+ fallbackDetail: "Algo deu errado. Tente novamente.",
2559
+ details: "Detalhes",
2560
+ hide: "Ocultar",
2561
+ retry: "Tentar novamente",
2562
+ },
2563
+ chatbotQuota: {
2564
+ title: "Upgrade necessário",
2565
+ fallbackMessage: "Você atingiu sua cota de IA.",
2566
+ buyCredits: "Comprar um pacote de créditos",
2567
+ upgradePlan: "Fazer upgrade do plano",
2568
+ },
2569
+ environment: {
2570
+ addEnvironment: "Adicionar ambiente",
2571
+ setUpProduction: "Configure seu ambiente de produção",
2572
+ addDevelopment: "Adicionar ambiente de desenvolvimento",
2573
+ // Plan/capacity dialog (EnvironmentEntitlementDialog) — cloud#959.
2574
+ entitlement: {
2575
+ productionLimitTitle: "Você já tem seu ambiente de produção",
2576
+ productionLimitBody: "Cada organização inclui exatamente um ambiente de produção. Crie uma organização separada para ter outro, ou fale conosco sobre um acordo Enterprise.",
2577
+ planLockedTitle: "Ambientes de desenvolvimento são um recurso pago",
2578
+ planLockedBody: "Seu {{plan}} inclui um ambiente de produção. Faça upgrade para adicionar ambientes de desenvolvimento — construa em desenvolvimento e depois publique em produção.",
2579
+ limitTitle: "Limite de ambientes de desenvolvimento atingido",
2580
+ limitBody: "A capacidade cresce com os assentos de IA. Adicione um assento de IA, ou arquive um ambiente de desenvolvimento sem uso para liberar espaço.",
2581
+ limitBodyWithCount: "Você está usando {{used}} de {{limit}} ambientes de desenvolvimento. A capacidade cresce com os assentos de IA — adicione um assento de IA, ou arquive um ambiente de desenvolvimento sem uso.",
2582
+ freePlan: "plano gratuito",
2583
+ namedPlan: "plano {{plan}}",
2584
+ upgradeCta: "Fazer upgrade do plano",
2585
+ contactSalesCta: "Falar com vendas",
2586
+ },
2587
+ },
2588
+ cloudConnection: {
2589
+ checking: "Verificando a conexão…",
2590
+ retry: "Tentar novamente",
2591
+ errors: {
2592
+ expired: "A solicitação expirou antes de ser aprovada. Comece novamente.",
2593
+ bindFailed: "Falha ao vincular.",
2594
+ deviceCodeFailed: "Falha na solicitação do código do dispositivo.",
2595
+ },
2596
+ waiting: {
2597
+ popupOpened: "Aprove a conexão na janela que acabou de abrir — esta página se atualiza sozinha.",
2598
+ polling: "Aguardando a aprovação no console da nuvem…",
2599
+ openApproval: "Abrir a página de aprovação",
2600
+ copy: "Copiar",
2601
+ copied: "Copiado",
2602
+ codePrefilled: "O código já vem preenchido na página de aprovação.",
2603
+ openItHere: "A janela não apareceu? Abra aqui",
2604
+ cancel: "Cancelar",
2605
+ },
2606
+ bound: {
2607
+ title: "Conectado ao ObjectStack Cloud",
2608
+ runtime: "Runtime",
2609
+ organization: "Organização",
2610
+ approvedBy: "Aprovado por",
2611
+ runtimeId: "ID do runtime",
2612
+ environment: "Ambiente",
2613
+ since: "Desde",
2614
+ privatePackages: "Os pacotes privados da sua organização agora aparecem no Marketplace em “Sua organização”.",
2615
+ disconnect: "Desconectar",
2616
+ },
2617
+ unbound: {
2618
+ title: "Não conectado",
2619
+ body: "Conecte este runtime a um plano de controle do ObjectStack para explorar os pacotes privados da sua organização e instalá-los aqui. A aprovação é um único clique na sua conta da nuvem — nenhum id ou credencial é digitado nesta página.",
2620
+ connect: "Conectar",
2621
+ },
2622
+ },
1819
2623
  marketplace: {
2624
+ suggestedBindings: {
2625
+ promptEveryone: "Este app sugere conceder \"{{set}}\" a todos os usuários autenticados (a posição Everyone).",
2626
+ promptGuest: "Este app sugere conceder \"{{set}}\" a visitantes não autenticados (a posição Guest).",
2627
+ confirm: "Conceder",
2628
+ confirming: "Concedendo…",
2629
+ dismiss: "Dispensar",
2630
+ confirmedToast: "\"{{set}}\" agora está concedido a {{anchor}}.",
2631
+ dismissedToast: "Sugestão de \"{{set}}\" dispensada.",
2632
+ },
1820
2633
  title: "Marketplace de aplicativos",
1821
2634
  subtitle: "Explore aplicativos aprovados publicados no catálogo ObjectStack. Clique em um aplicativo para ver os detalhes e instalá-lo em um de seus ambientes.",
1822
2635
  searchPlaceholder: "Pesquisar aplicativos por nome ou ID de manifesto…",
@@ -1868,6 +2681,7 @@ const pt = {
1868
2681
  updateAvailable: 'Atualização disponível',
1869
2682
  },
1870
2683
  action: {
2684
+ installed: "Instalado",
1871
2685
  install: "Instalar",
1872
2686
  reinstall: "Reinstalar",
1873
2687
  working: "Processando…",
@@ -1938,6 +2752,14 @@ const pt = {
1938
2752
  yearsAgo: "há {{count}} anos",
1939
2753
  },
1940
2754
  },
2755
+ approvals: {
2756
+ approve: 'Aprovar',
2757
+ reject: 'Rejeitar',
2758
+ comment: 'Comentário (opcional)',
2759
+ approveSuccess: 'Aprovado',
2760
+ rejectSuccess: 'Rejeitado',
2761
+ rejectConfirm: 'Rejeitar esta solicitação de aprovação?',
2762
+ },
1941
2763
  approvalsInbox: {
1942
2764
  loadMore: 'Carregar mais',
1943
2765
  loadingMore: 'Carregando…',
@@ -1962,13 +2784,28 @@ const pt = {
1962
2784
  slaRemaining: 'SLA: faltam {{dur}}',
1963
2785
  slaOverdue: 'SLA vencido há {{dur}}',
1964
2786
  actReassign: 'Reatribuída',
2787
+ reassignFromTo: 'de {{from}} para {{to}}',
1965
2788
  actRemind: 'Lembrete',
1966
2789
  actRequestInfo: 'Pediu mais informações',
1967
2790
  actComment: 'Comentou',
1968
2791
  stepProgress: 'Etapas de aprovação',
1969
2792
  prevRequest: 'Anterior',
1970
2793
  nextRequest: 'Próxima',
1971
- positionOf: '{{index}} de {{total}}',
2794
+ positionOf: 'Solicitação {{index}} de {{total}}',
2795
+ progressApprovals: 'Aprovações — {{got}} de {{need}}',
2796
+ progressGroups: 'Progresso de assinaturas — {{got}} de {{need}} grupos',
2797
+ progressEligible: '{{count}} aprovador(es) elegível(eis)',
2798
+ progressBar: 'Progresso da decisão',
2799
+ declaredActions: 'Ações',
2800
+ attachmentChip: 'Anexo',
2801
+ attachmentOpenFailed: 'Não foi possível abrir o anexo — tente novamente',
2802
+ approveOneTitle: 'Aprovar "{{title}}"?',
2803
+ approveOneBody: 'Isso aprova a solicitação com a sua identidade. Para adicionar um comentário ou anexo, abra a solicitação.',
2804
+ flowOrigin: 'Iniciada por fluxo',
2805
+ sortBy: 'Ordenar',
2806
+ sortRecent: 'Mais recentes primeiro',
2807
+ sortOldest: 'Mais antigas primeiro',
2808
+ sortAmount: 'Valor (maior→menor)',
1972
2809
  quickPhrase1: 'Aprovada — atende aos requisitos.',
1973
2810
  quickPhrase2: 'Aprovada com condições — acompanhe a execução.',
1974
2811
  quickPhrase3: 'Adicione material de apoio e reenvie.',
@@ -2097,6 +2934,10 @@ const pt = {
2097
2934
  retry: 'Tentar novamente',
2098
2935
  },
2099
2936
  draftBar: {
2937
+ messageClean: "Pré-visualização do rascunho — não há alterações não publicadas; tudo aqui já está no ar.",
2938
+ sampleDataTitle: "Os dados de exemplo aparecem depois que você publicar",
2939
+ sampleDataBody: "Você está pré-visualizando a estrutura do seu app. Publique para carregar registros de exemplo e colocá-lo no ar.",
2940
+ publishCta: "Publicar para ver no ar",
2100
2941
  message: 'Pré-visualização de rascunho — você está vendo alterações não publicadas. Nada entra no ar até você publicar.',
2101
2942
  publish: 'Publicar',
2102
2943
  publishing: 'Publicando…',