@object-ui/i18n 16.1.0 → 17.1.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,15 @@ 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",
490
825
  cancelApproval: "Cancelar aprovação",
491
826
  cancelApprovalInFlight: "Cancelando…",
492
827
  cancelApprovalTooltip: "Cancelar a solicitação de aprovação pendente para desbloquear o registro",
828
+ cancelApprovalTooltipUnlocked: "Cancelar a solicitação de aprovação pendente",
493
829
  cancelApprovalFailed: "Falha ao cancelar aprovação",
494
830
  cancelApprovalUnavailable: "O cancelamento de aprovações não é suportado por esta fonte de dados",
495
831
  linkCopied: "Link copiado para a área de transferência",
@@ -603,6 +939,35 @@ const pt = {
603
939
  resetZoom: "Redefinir zoom",
604
940
  },
605
941
  dashboard: {
942
+ noRows: "Sem linhas",
943
+ pickMeasures: "Escolha medidas (valores) para este widget de dataset.",
944
+ datasetUnsupported: "Esta fonte de dados não oferece suporte a consultas de dataset.",
945
+ details: "Detalhes",
946
+ exportCsv: "Exportar CSV",
947
+ openInList: "Abrir na lista",
948
+ filters: {
949
+ label: "Filtros do painel",
950
+ dateRange: "Período",
951
+ allTime: "Todo o período",
952
+ custom: "Personalizado…",
953
+ all: "Tudo",
954
+ reset: "Redefinir",
955
+ range: {
956
+ today: "Hoje",
957
+ yesterday: "Ontem",
958
+ this_week: "Esta semana",
959
+ last_week: "Semana passada",
960
+ this_month: "Este mês",
961
+ last_month: "Mês passado",
962
+ this_quarter: "Este trimestre",
963
+ last_quarter: "Trimestre passado",
964
+ this_year: "Este ano",
965
+ last_year: "Ano passado",
966
+ last_7_days: "Últimos 7 dias",
967
+ last_30_days: "Últimos 30 dias",
968
+ last_90_days: "Últimos 90 dias",
969
+ },
970
+ },
606
971
  addWidget: "Adicionar widget",
607
972
  removeWidget: "Remover widget",
608
973
  editLayout: "Editar layout",
@@ -730,6 +1095,7 @@ const pt = {
730
1095
  navTypeGroup: "Grupo",
731
1096
  navTypeSeparator: "Separador",
732
1097
  navTypeAction: "Ação",
1098
+ navTypeComponent: "Componente",
733
1099
  navEditIcon: "Editar ícone",
734
1100
  navToggleVisible: "Alternar visibilidade",
735
1101
  navHidden: "Oculto",
@@ -831,8 +1197,199 @@ const pt = {
831
1197
  },
832
1198
  },
833
1199
  console: {
1200
+ settingsHub: {
1201
+ title: "Configurações",
1202
+ subtitle: "Configure seu workspace, integrações e sinalizadores de recursos.",
1203
+ loadError: "Falha ao carregar as configurações",
1204
+ empty: "Nenhuma configuração registrada. Os plugins podem registrar manifestos de configuração pelo SettingsService.",
1205
+ settingsCount: "{{n}} configurações",
1206
+ beta: "Beta",
1207
+ categories: {
1208
+ Workspace: "Workspace",
1209
+ Communication: "Comunicação",
1210
+ Security: "Segurança",
1211
+ Infrastructure: "Infraestrutura",
1212
+ Beta: "Beta",
1213
+ Other: "Outros",
1214
+ },
1215
+ },
1216
+ objectData: {
1217
+ badge: "Dados",
1218
+ description: "Recorte de dados definido pela URL — não vinculado a nenhuma visão salva.",
1219
+ filteredBy: "Filtrado por",
1220
+ removeFilter: "Remover o filtro {{field}}",
1221
+ saveAsView: "Salvar como visão",
1222
+ noAccessTitle: "Acesso negado",
1223
+ noAccess: "Você não tem permissão para ver estes dados.",
1224
+ },
1225
+ identityImport: {
1226
+ policyTitle: "Configuração de acesso para usuários importados",
1227
+ policy: {
1228
+ auto: "Automático (recomendado)",
1229
+ invite: "Enviar convites",
1230
+ temporary: "Senhas temporárias",
1231
+ none: "Sem senha (apenas identidade)",
1232
+ },
1233
+ policyHint: {
1234
+ 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.",
1235
+ 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.",
1236
+ 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.",
1237
+ 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.",
1238
+ },
1239
+ passwordsNote: "Senhas temporárias — exibidas uma única vez, nunca armazenadas. Salve-as agora; cada usuário deve trocar a sua no primeiro acesso.",
1240
+ passwordsMore: "Demais entradas omitidas — use o download.",
1241
+ passwordsDownload: "Baixar CSV",
1242
+ },
1243
+ ai: {
1244
+ usage: {
1245
+ title: "Uso de IA",
1246
+ meterBuild: "Criar",
1247
+ meterAsk: "Perguntar",
1248
+ statusOk: "Ainda há bastante",
1249
+ statusLow: "Está acabando",
1250
+ statusFull: "Limite atingido",
1251
+ resetsDaily: "Redefine hoje à noite",
1252
+ resetsMonthly: "Redefine no próximo ciclo",
1253
+ ctaUpgrade: "Faça upgrade para continuar",
1254
+ ctaTopUp: "Adicione créditos para continuar",
1255
+ ariaLabel: "Uso de IA: {{status}}",
1256
+ },
1257
+ workspaceTitle: "Workspace de IA",
1258
+ workspaceSubtitle: "Pergunte, inspecione e retome conversas",
1259
+ openChats: "Abrir conversas",
1260
+ chats: "Conversas",
1261
+ chatsDescription: "Navegue e gerencie as conversas com a IA.",
1262
+ share: "Compartilhar",
1263
+ shareTitle: "Compartilhar esta conversa",
1264
+ shareDisabledTitle: "Comece a conversar para habilitar o compartilhamento",
1265
+ newChat: "Nova",
1266
+ searchChats: "Pesquisar conversas...",
1267
+ noChatsYet: "Ainda não há conversas",
1268
+ noChatsDescription: "Inicie uma nova conversa para vê-la aqui.",
1269
+ noMatchingChats: "Nenhuma conversa correspondente.",
1270
+ newConversation: "Nova conversa",
1271
+ renameConversation: "Renomear conversa",
1272
+ deleteConversation: "Excluir conversa",
1273
+ saveRename: "Salvar novo nome",
1274
+ cancelRename: "Cancelar renomeação",
1275
+ loadingHistory: "Carregando o histórico da conversa...",
1276
+ conversationReady: "Conversa pronta",
1277
+ preparingConversation: "Preparando uma nova conversa",
1278
+ offlineDemoMode: "Modo de demonstração off-line — lista de agentes indisponível",
1279
+ sendFailedRateLimited: "Você está enviando mensagens rápido demais. Sua mensagem foi mantida abaixo — aguarde um momento e tente novamente.",
1280
+ sendFailedGeneric: "Não foi possível enviar sua mensagem. Ela foi mantida abaixo — tente novamente.",
1281
+ askAgent: "Pergunte a {{agent}}...",
1282
+ assistant: "Assistente",
1283
+ liveCanvas: "Pré-visualização ao vivo — {{app}} (rascunho)",
1284
+ liveCanvasUnlisted: "Aplicativo ao vivo — {{app}} (não listado até ser publicado)",
1285
+ loadingAgents: "Carregando agentes...",
1286
+ askAnything: "Pergunte qualquer coisa...",
1287
+ emptyTitle: "Iniciar uma conversa",
1288
+ emptyDescription: "Pergunte qualquer coisa — o assistente tem acesso ao contexto do seu aplicativo atual.",
1289
+ switchAssistant: "Trocar de assistente",
1290
+ chooseAgent: "Escolher assistente…",
1291
+ empty: {
1292
+ build: {
1293
+ title: "Criar com IA",
1294
+ 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.",
1295
+ },
1296
+ ask: {
1297
+ title: "Pergunte aos seus dados",
1298
+ description: "Faça perguntas sobre seus registros — contagens, listas e resumos dos dados a que você tem acesso.",
1299
+ },
1300
+ editApp: {
1301
+ title: "Editando “{{app}}”",
1302
+ titleGeneric: "Editar este aplicativo",
1303
+ 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.",
1304
+ },
1305
+ },
1306
+ clearConversation: "Limpar",
1307
+ sendHint: "para enviar",
1308
+ agentActivity: "Atividade do agente",
1309
+ toolCompleted: "Concluído",
1310
+ toolRunning: "Em execução",
1311
+ toolAwaitingApproval: "Aguardando aprovação",
1312
+ toolFailed: "Falhou",
1313
+ toolDetailsHidden: "As entradas das ferramentas e os resultados brutos estão ocultos nesta visão.",
1314
+ copy: "Copiar",
1315
+ copied: "Copiado",
1316
+ regenerate: "Gerar novamente",
1317
+ model: "Modelo",
1318
+ submit: "Enviar",
1319
+ uploadFiles: "Enviar arquivos",
1320
+ stopResponse: "Parar a resposta",
1321
+ trace: "rastro",
1322
+ viewTrace: "Ver o rastro",
1323
+ nextSteps: "Próximos passos",
1324
+ publishDrafts: "Publicar",
1325
+ publishOk: "Publicado — os objetos já estão ativos.",
1326
+ seedWarn: "Publicado, mas alguns dados de exemplo não puderam ser carregados.",
1327
+ openBuiltApp: "Abrir o aplicativo",
1328
+ designBuiltApp: "Projetar no Studio",
1329
+ previewDraft: "Pré-visualizar",
1330
+ previewApp: "Pré-visualizar o aplicativo",
1331
+ resizeSplit: "Redimensionar a conversa e a pré-visualização",
1332
+ hideChats: "Ocultar conversas",
1333
+ showChats: "Mostrar conversas",
1334
+ planTitle: "Plano proposto",
1335
+ planQuestions: "Confirmar antes de criar",
1336
+ planAssumptions: "Suposições",
1337
+ planApproveHint: "Responda para aprovar ou ajustar este plano.",
1338
+ planApprove: "Criar",
1339
+ planAdjust: "Ajustar",
1340
+ justNow: "agora mesmo",
1341
+ minutesAgo: "há {{count}} min",
1342
+ hoursAgo: "há {{count}} h",
1343
+ daysAgo: "há {{count}} d",
1344
+ agentLabels: {
1345
+ ask: "Perguntar",
1346
+ build: "Criar",
1347
+ dataChat: "Assistente",
1348
+ metadataAssistant: "Assistente de metadados",
1349
+ },
1350
+ suggestions: {
1351
+ dataChat: {
1352
+ userCount: "Quantos usuários existem no sistema? Liste os e-mails deles.",
1353
+ recentRecords: "Liste os 5 registros criados mais recentemente.",
1354
+ recordCounts: "Conte os registros de cada objeto.",
1355
+ },
1356
+ metadataAssistant: {
1357
+ buildCrm: "Crie um CRM de vendas — clientes, contatos e um funil de negócios que eu possa totalizar por etapa.",
1358
+ buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, e um quadro por status.",
1359
+ buildFlow: "Projete uma central de suporte — chamados com prioridade, um fluxo de status e vínculos com clientes.",
1360
+ buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e visibilidade de estoque baixo.",
1361
+ buildRecruiting: "Crie um controle de candidaturas — candidatos, vagas abertas, etapas de entrevista e anotações.",
1362
+ },
1363
+ generic: {
1364
+ help: "Com o que você pode me ajudar?",
1365
+ availableObjects: "Liste os objetos de dados disponíveis.",
1366
+ recentActivity: "Resuma minha atividade recente.",
1367
+ },
1368
+ editApp: {
1369
+ addField: "Adicione um campo a um dos objetos.",
1370
+ addObject: "Adicione um novo objeto e relacione-o a um existente.",
1371
+ addDashboard: "Adicione um painel para as métricas principais.",
1372
+ addAutomation: "Adicione uma automação — uma aprovação, um fluxo de status ou uma notificação.",
1373
+ },
1374
+ },
1375
+ changesTitle: "Confirmar alterações",
1376
+ changesConfirmed: "Confirmado",
1377
+ changesConfirm: "Confirmar",
1378
+ changesConfirmHint: "Responda para confirmar ou ajustar esta alteração.",
1379
+ changeVerb: {
1380
+ createObject: "Criar objeto",
1381
+ addField: "Adicionar campo",
1382
+ modifyField: "Modificar campo",
1383
+ deleteField: "Excluir campo",
1384
+ createMetadata: "Criar",
1385
+ updateMetadata: "Modificar",
1386
+ createSeed: "Gerar dados de exemplo",
1387
+ createPackage: "Criar pacote de aplicativo",
1388
+ },
1389
+ },
834
1390
  title: "Console ObjectStack",
835
1391
  initializing: "Inicializando aplicação...",
1392
+ loadingHint: "Configurar um novo ambiente pode levar alguns instantes.",
836
1393
  breadcrumb: {
837
1394
  dashboards: "Painéis",
838
1395
  pages: "Páginas",
@@ -874,6 +1431,7 @@ const pt = {
874
1431
  toggleDarkMode: "Alternar modo escuro",
875
1432
  },
876
1433
  commandPalette: {
1434
+ title: "Paleta de comandos",
877
1435
  placeholder: "Digite um comando ou pesquise...",
878
1436
  noResults: "Nenhum resultado encontrado.",
879
1437
  objects: "Objetos",
@@ -907,6 +1465,14 @@ const pt = {
907
1465
  system: "Sistema",
908
1466
  },
909
1467
  objectView: {
1468
+ viewTypeTree: "Árvore",
1469
+ viewTypeTreeDesc: "Aninha registros autorreferenciados em uma hierarquia por um campo pai.",
1470
+ parentField: "Campo pai",
1471
+ parentFieldHelp: "O campo que aponta para o registro pai (mesmo objeto) e define a hierarquia. Apenas campos autorreferenciados são válidos.",
1472
+ viewName: "Nome",
1473
+ viewNameHelp: "Chave técnica (snake_case). Preenchida automaticamente a partir do título — edite se quiser.",
1474
+ viewNameRequired: "Informe uma chave (letras minúsculas, números, sublinhado). Não é preenchida automaticamente para títulos não latinos.",
1475
+ viewNameInvalid: "Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.",
910
1476
  systemViewReadonly: 'System view defined in code - duplicate to customize.',
911
1477
  expandToPage: 'Open as full page',
912
1478
  objectNotFound: "Objeto não encontrado",
@@ -1120,7 +1686,28 @@ const pt = {
1120
1686
  },
1121
1687
  },
1122
1688
  auth: {
1689
+ setPassword: {
1690
+ title: "Definir uma senha de recuperação",
1691
+ description: "Você entrou por logon único. Defina uma senha local para continuar conseguindo acessar este ambiente diretamente caso o SSO fique indisponível.",
1692
+ email: "E-mail",
1693
+ newPassword: "Nova senha",
1694
+ confirmPassword: "Confirmar a senha",
1695
+ submit: "Definir a senha",
1696
+ submitting: "Salvando…",
1697
+ success: "Senha local definida",
1698
+ failed: "Não foi possível definir a senha",
1699
+ passwordsMismatch: "As senhas não coincidem",
1700
+ noSession: "Sua sessão expirou.",
1701
+ backToSignIn: "Entrar novamente",
1702
+ },
1123
1703
  login: {
1704
+ signingIn: "Entrando…",
1705
+ ssoHandoff: "Continuar para {{target}}",
1706
+ devAdminHint: {
1707
+ title: "Instância de desenvolvimento",
1708
+ body: "Entre com o administrador de desenvolvimento pré-configurado:",
1709
+ dismiss: "Dispensar",
1710
+ },
1124
1711
  title: "Entre na sua conta",
1125
1712
  description: "Digite seu e-mail e senha para continuar",
1126
1713
  emailLabel: "E-mail",
@@ -1133,6 +1720,7 @@ const pt = {
1133
1720
  noAccountText: "Não tem uma conta?",
1134
1721
  signUpText: "Cadastre-se",
1135
1722
  errors: {
1723
+ oauthCallbackFailed: "Não foi possível concluir o logon único — o link de acesso expirou ou já foi utilizado. Tente novamente.",
1136
1724
  invalidCredentials: "E-mail ou senha inválidos. Por favor, tente novamente.",
1137
1725
  emailNotVerified: "Por favor, verifique seu e-mail antes de fazer login.",
1138
1726
  },
@@ -1258,6 +1846,40 @@ const pt = {
1258
1846
  shell: {
1259
1847
  tenantHostHint: "Você está fazendo login neste espaço de trabalho",
1260
1848
  },
1849
+ layout: {
1850
+ headline: "Crie aplicativos de negócios poderosos, com mais rapidez.",
1851
+ subhead: "A plataforma universal para gestão de dados corporativos, fluxos de trabalho e analytics.",
1852
+ },
1853
+ remediation: {
1854
+ signOut: "Sair da conta",
1855
+ password: {
1856
+ title: "Sua senha expirou",
1857
+ fallbackMessage: "Defina uma nova senha para continuar.",
1858
+ current: "Senha atual",
1859
+ next: "Nova senha",
1860
+ confirm: "Confirmar nova senha",
1861
+ submit: "Alterar senha e continuar",
1862
+ submitting: "Atualizando…",
1863
+ mismatch: "As novas senhas não coincidem.",
1864
+ failed: "Não foi possível alterar a senha.",
1865
+ },
1866
+ mfa: {
1867
+ title: "Configurar a autenticação em duas etapas",
1868
+ fallbackMessage: "Sua organização exige um aplicativo autenticador para continuar.",
1869
+ confirmPassword: "Confirme sua senha",
1870
+ continue: "Continuar",
1871
+ preparing: "Preparando…",
1872
+ enrollFailed: "Não foi possível iniciar o registro.",
1873
+ scanTitle: "Escaneie com seu aplicativo autenticador",
1874
+ scanBody: "Escaneie este QR code com o Google Authenticator, 1Password, Authy etc. e digite o código de 6 dígitos.",
1875
+ backupTitle: "Salve seus códigos de backup",
1876
+ backupBody: "Guarde-os em local seguro — cada um pode ser usado uma vez se você perder seu dispositivo.",
1877
+ codeLabel: "Código de 6 dígitos",
1878
+ verify: "Verificar e continuar",
1879
+ verifying: "Verificando…",
1880
+ invalidCode: "Código inválido. Tente novamente.",
1881
+ },
1882
+ },
1261
1883
  },
1262
1884
  profile: {
1263
1885
  title: "Perfil",
@@ -1322,11 +1944,15 @@ const pt = {
1322
1944
  settings: "Configurações do espaço de trabalho",
1323
1945
  },
1324
1946
  help: {
1947
+ onThisPage: "Nesta página",
1948
+ keyboardShortcuts: "Atalhos de teclado",
1325
1949
  appDocs: 'Documentação deste app',
1326
1950
  allDocs: 'Toda a documentação',
1327
1951
  onlineDocs: 'Documentação online',
1328
1952
  },
1329
1953
  sidebar: {
1954
+ packageManagement: "Gerenciamento de pacotes",
1955
+ searchNavigation: "Pesquisar na navegação...",
1330
1956
  settings: "Configurações",
1331
1957
  help: "Ajuda",
1332
1958
  helpTooltip: "Ajuda e documentação",
@@ -1343,14 +1969,66 @@ const pt = {
1343
1969
  removeFromFavorites: "Remover {{name}} dos favoritos",
1344
1970
  },
1345
1971
  topbar: {
1972
+ openAssistant: "Abrir o assistente {{name}}",
1973
+ offline: "Off-line",
1974
+ usersOnline: "Usuários on-line no momento",
1975
+ switchView: "Trocar de visão",
1976
+ switchObject: "Trocar de objeto",
1977
+ connection: {
1978
+ connected: "Conectado",
1979
+ connecting: "Conectando...",
1980
+ reconnecting: "Reconectando...",
1981
+ disconnected: "Desconectado",
1982
+ error: "Erro de conexão",
1983
+ },
1984
+ stage: {
1985
+ preview: "Pré-visualização",
1986
+ beta: "Beta",
1987
+ tooltip: "Esta plataforma está em pré-visualização — os recursos podem mudar.",
1988
+ },
1346
1989
  aiAssistant: "Assistente de IA",
1347
1990
  designInStudio: "Projetar no Studio",
1348
1991
  },
1349
1992
  home: {
1993
+ build: {
1994
+ title: "Criar um aplicativo",
1995
+ subtitle: "Comece do zero — projete objetos, formulários, automações e interfaces.",
1996
+ },
1997
+ template: {
1998
+ title: "Comece com um modelo",
1999
+ subtitle: "Instale um aplicativo modelo do marketplace e personalize-o.",
2000
+ },
2001
+ 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.",
2002
+ welcomeAdminDescriptionNoBuild: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda. Quando houver dados, o assistente de IA poderá ajudar a explorá-los.",
2003
+ welcomeAdminDescriptionNoAi: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda.",
2004
+ noAppsTitle: "Ainda não há aplicativos",
2005
+ noAppsDescription: "Seu workspace está sendo preparado — os aplicativos que seu administrador compartilhar aparecerão aqui.",
2006
+ buildWithAI: "Criar com IA",
2007
+ askAI: "Perguntar à IA",
2008
+ recoveryReminder: {
2009
+ message: "Defina uma senha de recuperação para conseguir entrar mesmo que o logon único fique indisponível.",
2010
+ cta: "Definir senha",
2011
+ dismiss: "Dispensar",
2012
+ },
2013
+ pendingDrafts: {
2014
+ message: "Você tem {{count}} alteração(ões) não publicada(s) — publique para ativá-las.",
2015
+ cta: "Publicar",
2016
+ publishing: "Publicando…",
2017
+ published: "Publicado! Suas alterações estão ativas.",
2018
+ publishFailed: "Falha ao publicar",
2019
+ },
1350
2020
  title: "Início",
1351
2021
  subtitle: "Painel do seu espaço de trabalho",
1352
2022
  nav: "Início",
1353
2023
  allApps: "Todas as aplicações",
2024
+ yourApps: "As suas aplicações",
2025
+ showMoreApps: "Mais",
2026
+ showLess: "Mostrar menos",
2027
+ continueEmpty: "Os itens que abrir aparecerão aqui.",
2028
+ actionCenter: {
2029
+ title: "Requer a sua atenção",
2030
+ empty: "Está tudo em dia",
2031
+ },
1354
2032
  loading: "Carregando espaço de trabalho...",
1355
2033
  recent: "Recentes",
1356
2034
  starred: "Favoritos",
@@ -1402,7 +2080,21 @@ const pt = {
1402
2080
  },
1403
2081
  },
1404
2082
  layout: {
2083
+ systemNav: {
2084
+ systemSettings: "Configurações do sistema",
2085
+ applications: "Aplicativos",
2086
+ appMarketplace: "Marketplace de aplicativos",
2087
+ objectManager: "Gerenciador de objetos",
2088
+ users: "Usuários",
2089
+ organizations: "Organizações",
2090
+ roles: "Perfis",
2091
+ configuration: "Configuração",
2092
+ createApp: "Criar aplicativo",
2093
+ },
1405
2094
  appSwitcher: {
2095
+ switchApplication: "Trocar de aplicativo",
2096
+ appsAvailable: "{{count}} aplicativos disponíveis",
2097
+ editNavigation: "Editar a navegação",
1406
2098
  home: "Início",
1407
2099
  addApp: "Adicionar aplicativo",
1408
2100
  editApp: "Editar aplicativo",
@@ -1495,8 +2187,8 @@ const pt = {
1495
2187
  uploading: "Enviando…",
1496
2188
  defaultActionTitle: "Ação",
1497
2189
  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.",
2190
+ lookupPlaceholder: "ID do registro para {{label}}",
2191
+ 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
2192
  },
1501
2193
  actionConfirm: {
1502
2194
  title: "Confirmar ação",
@@ -1521,6 +2213,8 @@ const pt = {
1521
2213
  updateFailed: "Não foi possível atualizar a navegação",
1522
2214
  },
1523
2215
  objectActions: {
2216
+ 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?",
2217
+ resetPackageSetSuccess: "Conjunto de permissões redefinido para a versão original do pacote",
1524
2218
  deleteSuccess: "{{label}} excluído com sucesso",
1525
2219
  deleteFailed: "Não foi possível excluir {{label}}",
1526
2220
  noRecordId: "Nenhum ID de registro fornecido",
@@ -1685,6 +2379,7 @@ const pt = {
1685
2379
  },
1686
2380
  },
1687
2381
  organizations: {
2382
+ create: "Criar workspace",
1688
2383
  mine: "Minhas organizações",
1689
2384
  title: "Organizações",
1690
2385
  heading: "Suas organizações",
@@ -1698,6 +2393,11 @@ const pt = {
1698
2393
  noMatches: "Nenhuma organização corresponde à sua pesquisa.",
1699
2394
  },
1700
2395
  notifications: {
2396
+ regionLabel: "Notificações",
2397
+ groupCount: "{{count}} notificações",
2398
+ groupUnread: "{{count}} não lidas",
2399
+ groupMarkRead: "Marcar como lidas",
2400
+ groupMarkReadTitle: "Marcar todas deste tipo como lidas",
1701
2401
  empty: "Sem notificações",
1702
2402
  markAllRead: "Marcar tudo como lido",
1703
2403
  viewAll: "Ver todas as notificações",
@@ -1816,7 +2516,103 @@ const pt = {
1816
2516
  done: 'Concluído — ocultar',
1817
2517
  },
1818
2518
  },
2519
+ excelImport: {
2520
+ noImportableFields: "Esse objeto não tem campos importáveis.",
2521
+ schemaReadFailed: "Não foi possível ler o esquema do objeto.",
2522
+ imported: "{{count}} linha(s) importada(s) para {{object}}.",
2523
+ importFrom: "Importar as linhas reais de",
2524
+ into: "para",
2525
+ opening: "Abrindo…",
2526
+ importAction: "Importar",
2527
+ dismiss: "Dispensar",
2528
+ },
2529
+ cloudOnboarding: {
2530
+ 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.",
2531
+ hintReady: "Seu ambiente de produção está pronto. Abra-o para criar e executar seus aplicativos — tudo acontece dentro do ambiente.",
2532
+ createEnvironment: "Crie seu ambiente",
2533
+ openProduction: "Abrir produção",
2534
+ manageEnvironments: "Gerenciar ambientes",
2535
+ },
2536
+ aiModelStatus: {
2537
+ summary: "Criar / Perguntar usa {{conversational}} ({{conversationalSource}}); estruturado usa {{structured}} ({{structuredSource}}).",
2538
+ summaryRouting: "Política de roteamento: planos gratuitos → {{free}}, planos pagos → {{paid}}.",
2539
+ modelUnknown: "desconhecido",
2540
+ sourceUnknown: "não informado pelo adaptador",
2541
+ rowConversational: "Modelo Build / Ask",
2542
+ rowStructured: "Estruturado (blueprint / seed)",
2543
+ rowReasoning: "Esforço de raciocínio",
2544
+ 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.",
2545
+ 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.",
2546
+ overridesInEffect: "Substituições em vigor: ",
2547
+ noOverrides: "nenhuma — usando os padrões do código implantado.",
2548
+ adapter: "Adaptador: ",
2549
+ sourceCodeDefault: "padrão do código (sem substituição env)",
2550
+ sourceInherits: "igual a build/ask",
2551
+ sourcePinned: "fixado por {{source}}",
2552
+ },
2553
+ chatbotError: {
2554
+ title: "Falha na resposta",
2555
+ fallbackDetail: "Algo deu errado. Tente novamente.",
2556
+ details: "Detalhes",
2557
+ hide: "Ocultar",
2558
+ retry: "Tentar novamente",
2559
+ },
2560
+ chatbotQuota: {
2561
+ title: "Upgrade necessário",
2562
+ fallbackMessage: "Você atingiu sua cota de IA.",
2563
+ buyCredits: "Comprar um pacote de créditos",
2564
+ upgradePlan: "Fazer upgrade do plano",
2565
+ },
2566
+ environment: {
2567
+ addEnvironment: "Adicionar ambiente",
2568
+ setUpProduction: "Configure seu ambiente de produção",
2569
+ addDevelopment: "Adicionar ambiente de desenvolvimento",
2570
+ },
2571
+ cloudConnection: {
2572
+ checking: "Verificando a conexão…",
2573
+ retry: "Tentar novamente",
2574
+ errors: {
2575
+ expired: "A solicitação expirou antes de ser aprovada. Comece novamente.",
2576
+ bindFailed: "Falha ao vincular.",
2577
+ deviceCodeFailed: "Falha na solicitação do código do dispositivo.",
2578
+ },
2579
+ waiting: {
2580
+ popupOpened: "Aprove a conexão na janela que acabou de abrir — esta página se atualiza sozinha.",
2581
+ polling: "Aguardando a aprovação no console da nuvem…",
2582
+ openApproval: "Abrir a página de aprovação",
2583
+ copy: "Copiar",
2584
+ copied: "Copiado",
2585
+ codePrefilled: "O código já vem preenchido na página de aprovação.",
2586
+ openItHere: "A janela não apareceu? Abra aqui",
2587
+ cancel: "Cancelar",
2588
+ },
2589
+ bound: {
2590
+ title: "Conectado ao ObjectStack Cloud",
2591
+ runtime: "Runtime",
2592
+ organization: "Organização",
2593
+ approvedBy: "Aprovado por",
2594
+ runtimeId: "ID do runtime",
2595
+ environment: "Ambiente",
2596
+ since: "Desde",
2597
+ privatePackages: "Os pacotes privados da sua organização agora aparecem no Marketplace em “Sua organização”.",
2598
+ disconnect: "Desconectar",
2599
+ },
2600
+ unbound: {
2601
+ title: "Não conectado",
2602
+ 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.",
2603
+ connect: "Conectar",
2604
+ },
2605
+ },
1819
2606
  marketplace: {
2607
+ suggestedBindings: {
2608
+ promptEveryone: "Este app sugere conceder \"{{set}}\" a todos os usuários autenticados (a posição Everyone).",
2609
+ promptGuest: "Este app sugere conceder \"{{set}}\" a visitantes não autenticados (a posição Guest).",
2610
+ confirm: "Conceder",
2611
+ confirming: "Concedendo…",
2612
+ dismiss: "Dispensar",
2613
+ confirmedToast: "\"{{set}}\" agora está concedido a {{anchor}}.",
2614
+ dismissedToast: "Sugestão de \"{{set}}\" dispensada.",
2615
+ },
1820
2616
  title: "Marketplace de aplicativos",
1821
2617
  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
2618
  searchPlaceholder: "Pesquisar aplicativos por nome ou ID de manifesto…",
@@ -1868,6 +2664,7 @@ const pt = {
1868
2664
  updateAvailable: 'Atualização disponível',
1869
2665
  },
1870
2666
  action: {
2667
+ installed: "Instalado",
1871
2668
  install: "Instalar",
1872
2669
  reinstall: "Reinstalar",
1873
2670
  working: "Processando…",
@@ -1938,6 +2735,14 @@ const pt = {
1938
2735
  yearsAgo: "há {{count}} anos",
1939
2736
  },
1940
2737
  },
2738
+ approvals: {
2739
+ approve: 'Aprovar',
2740
+ reject: 'Rejeitar',
2741
+ comment: 'Comentário (opcional)',
2742
+ approveSuccess: 'Aprovado',
2743
+ rejectSuccess: 'Rejeitado',
2744
+ rejectConfirm: 'Rejeitar esta solicitação de aprovação?',
2745
+ },
1941
2746
  approvalsInbox: {
1942
2747
  loadMore: 'Carregar mais',
1943
2748
  loadingMore: 'Carregando…',
@@ -1962,13 +2767,28 @@ const pt = {
1962
2767
  slaRemaining: 'SLA: faltam {{dur}}',
1963
2768
  slaOverdue: 'SLA vencido há {{dur}}',
1964
2769
  actReassign: 'Reatribuída',
2770
+ reassignFromTo: 'de {{from}} para {{to}}',
1965
2771
  actRemind: 'Lembrete',
1966
2772
  actRequestInfo: 'Pediu mais informações',
1967
2773
  actComment: 'Comentou',
1968
2774
  stepProgress: 'Etapas de aprovação',
1969
2775
  prevRequest: 'Anterior',
1970
2776
  nextRequest: 'Próxima',
1971
- positionOf: '{{index}} de {{total}}',
2777
+ positionOf: 'Solicitação {{index}} de {{total}}',
2778
+ progressApprovals: 'Aprovações — {{got}} de {{need}}',
2779
+ progressGroups: 'Progresso de assinaturas — {{got}} de {{need}} grupos',
2780
+ progressEligible: '{{count}} aprovador(es) elegível(eis)',
2781
+ progressBar: 'Progresso da decisão',
2782
+ declaredActions: 'Ações',
2783
+ attachmentChip: 'Anexo',
2784
+ attachmentOpenFailed: 'Não foi possível abrir o anexo — tente novamente',
2785
+ approveOneTitle: 'Aprovar "{{title}}"?',
2786
+ approveOneBody: 'Isso aprova a solicitação com a sua identidade. Para adicionar um comentário ou anexo, abra a solicitação.',
2787
+ flowOrigin: 'Iniciada por fluxo',
2788
+ sortBy: 'Ordenar',
2789
+ sortRecent: 'Mais recentes primeiro',
2790
+ sortOldest: 'Mais antigas primeiro',
2791
+ sortAmount: 'Valor (maior→menor)',
1972
2792
  quickPhrase1: 'Aprovada — atende aos requisitos.',
1973
2793
  quickPhrase2: 'Aprovada com condições — acompanhe a execução.',
1974
2794
  quickPhrase3: 'Adicione material de apoio e reenvie.',
@@ -2097,6 +2917,10 @@ const pt = {
2097
2917
  retry: 'Tentar novamente',
2098
2918
  },
2099
2919
  draftBar: {
2920
+ messageClean: "Pré-visualização do rascunho — não há alterações não publicadas; tudo aqui já está no ar.",
2921
+ sampleDataTitle: "Os dados de exemplo aparecem depois que você publicar",
2922
+ sampleDataBody: "Você está pré-visualizando a estrutura do seu app. Publique para carregar registros de exemplo e colocá-lo no ar.",
2923
+ publishCta: "Publicar para ver no ar",
2100
2924
  message: 'Pré-visualização de rascunho — você está vendo alterações não publicadas. Nada entra no ar até você publicar.',
2101
2925
  publish: 'Publicar',
2102
2926
  publishing: 'Publicando…',