@object-ui/i18n 17.3.0 → 17.6.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +1929 -1
  2. package/README.md +41 -12
  3. package/dist/i18n.d.ts +1 -1
  4. package/dist/i18n.js +1 -2
  5. package/dist/index.d.ts +23 -21
  6. package/dist/index.js +31 -21
  7. package/dist/locales/ar.d.ts +638 -369
  8. package/dist/locales/ar.js +744 -424
  9. package/dist/locales/de.d.ts +638 -369
  10. package/dist/locales/de.js +759 -446
  11. package/dist/locales/en.d.ts +673 -404
  12. package/dist/locales/en.js +899 -406
  13. package/dist/locales/es.d.ts +638 -369
  14. package/dist/locales/es.js +739 -427
  15. package/dist/locales/fr.d.ts +638 -369
  16. package/dist/locales/fr.js +738 -423
  17. package/dist/locales/index.d.ts +6476 -3786
  18. package/dist/locales/index.js +20 -20
  19. package/dist/locales/ja.d.ts +638 -369
  20. package/dist/locales/ja.js +732 -417
  21. package/dist/locales/ko.d.ts +638 -369
  22. package/dist/locales/ko.js +736 -424
  23. package/dist/locales/pt.d.ts +638 -369
  24. package/dist/locales/pt.js +737 -425
  25. package/dist/locales/ru.d.ts +638 -369
  26. package/dist/locales/ru.js +750 -424
  27. package/dist/locales/zh.d.ts +672 -403
  28. package/dist/locales/zh.js +720 -403
  29. package/dist/pickLocalized.d.ts +58 -0
  30. package/dist/pickLocalized.js +115 -7
  31. package/dist/provider.d.ts +84 -2
  32. package/dist/provider.js +305 -31
  33. package/dist/useDisplayLocale.d.ts +49 -0
  34. package/dist/useDisplayLocale.js +55 -0
  35. package/dist/useObjectLabel.d.ts +94 -14
  36. package/dist/useObjectLabel.js +134 -21
  37. package/dist/useSafeTranslation.js +51 -3
  38. package/dist/utils/index.d.ts +4 -3
  39. package/dist/utils/index.js +4 -3
  40. package/dist/utils/number-display.d.ts +32 -0
  41. package/dist/utils/number-display.js +32 -0
  42. package/dist/utils/spec-formatters.d.ts +39 -13
  43. package/dist/utils/spec-formatters.js +3 -3
  44. package/package.json +4 -3
@@ -1,4 +1,18 @@
1
1
  const pt = {
2
+ // objectui#4467 — the impersonation banner (app-shell ImpersonationBanner).
3
+ // Raised by `session.impersonatedBy`, so it survives SPA reboots; it names
4
+ // BOTH parties because the audit trail attributes the work to the impersonated
5
+ // user, and the exit states its own failure rather than appearing to succeed.
6
+ impersonation: {
7
+ banner: {
8
+ message: 'Você está personificando {{user}} — todas as ações são registradas em nome dele.',
9
+ startedBy: 'Iniciado pelo administrador {{admin}}.',
10
+ stop: 'Parar personificação',
11
+ stopping: 'Encerrando…',
12
+ stopFailed: 'Não foi possível parar a personificação: {{reason}}',
13
+ notRestored: 'O servidor aceitou a solicitação, mas não restaurou sua sessão de administrador — você ainda está personificando {{user}}. Saia e entre novamente para encerrar.',
14
+ },
15
+ },
2
16
  // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
3
17
  capability: {
4
18
  label: {
@@ -16,6 +30,25 @@ const pt = {
16
30
  other: 'Outro',
17
31
  },
18
32
  },
33
+ // objectui#3546 slice six — o resumo somente leitura das facetas de
34
+ // autorização de PermissionFacetLink. "aba" como em list.tabs.
35
+ perm: {
36
+ facet: {
37
+ none: "Nenhum",
38
+ more: "+{{count}} mais",
39
+ objects: "{{count}} objetos",
40
+ objects_one: "{{count}} objeto",
41
+ fields: "{{count}} regras de campo",
42
+ fields_one: "{{count}} regra de campo",
43
+ rls: "{{count}} políticas RLS",
44
+ rls_one: "{{count}} política RLS",
45
+ tabs: "{{count}} regras de aba",
46
+ tabs_one: "{{count}} regra de aba",
47
+ adminScope: "Administração delegada configurada",
48
+ designInStudio: "Projetar no Studio →",
49
+ designInStudioHint: "Projetar no Studio",
50
+ },
51
+ },
19
52
  lookup: {
20
53
  recentlyUsed: 'Usados recentemente',
21
54
  allResults: 'Todos os resultados',
@@ -46,13 +79,13 @@ const pt = {
46
79
  common: {
47
80
  addToFavorites: "Adicionar aos favoritos",
48
81
  removeFromFavorites: "Remover dos favoritos",
49
- loading: "Carregando...",
82
+ loading: "Carregando…",
50
83
  save: "Salvar",
84
+ discard: "Descartar",
51
85
  cancel: "Cancelar",
52
86
  delete: "Excluir",
53
87
  edit: "Editar",
54
88
  create: "Criar",
55
- search: "Pesquisar",
56
89
  filter: "Filtrar",
57
90
  reset: "Redefinir",
58
91
  confirm: "Confirmar",
@@ -76,7 +109,7 @@ const pt = {
76
109
  required: "Obrigatório",
77
110
  optional: "Opcional",
78
111
  selectOption: "Selecionar uma opção",
79
- select: "Selecionar...",
112
+ select: "Selecionar…",
80
113
  openChat: "Abrir chat",
81
114
  closeChat: "Fechar chat",
82
115
  closePanel: "Fechar painel",
@@ -85,6 +118,11 @@ const pt = {
85
118
  itemCountOne: "{{count}} item",
86
119
  toggleSidebar: "Alternar barra lateral",
87
120
  package: "Pacote",
121
+ done: "Concluído",
122
+ editInStudio: "Editar no Studio",
123
+ record: "Registro",
124
+ retry: "Tentar novamente",
125
+ printDialogHint: "Abre a caixa de diálogo de impressão do navegador (não é uma exportação para PDF)",
88
126
  },
89
127
  actions: {
90
128
  decisionOutput: {
@@ -116,6 +154,9 @@ const pt = {
116
154
  submitFailed: "Não foi possível salvar. Tente novamente.",
117
155
  discardTitle: "Descartar as alterações?",
118
156
  discardMessage: "Você tem alterações não salvas. Se fechar este formulário agora, suas edições serão perdidas.",
157
+ // objectui#4024 — the create/edit dialog's `sr-only` accessible
158
+ // description, used when the form declares no `description` of its own.
159
+ dialogDescriptionFallback: "Preencha os campos do formulário e depois envie ou cancele.",
119
160
  keepEditing: "Continuar editando",
120
161
  discard: "Descartar",
121
162
  conflictTitle: "Conflito ao salvar",
@@ -184,7 +225,7 @@ const pt = {
184
225
  richText: {
185
226
  format: "Formato: {{format}}",
186
227
  basicEditorHint: "Editor de texto rico (básico)",
187
- placeholder: "Digite algo...",
228
+ placeholder: "Digite algo…",
188
229
  },
189
230
  options: {
190
231
  empty: "Nenhuma opção disponível",
@@ -220,6 +261,14 @@ const pt = {
220
261
  tags: {
221
262
  placeholder: "Digite e pressione Enter para adicionar…",
222
263
  },
264
+ // objectui#4028 — `AddressField`'s five sub-labels.
265
+ address: {
266
+ street: "Endereço (rua)",
267
+ city: "Cidade",
268
+ state: "Estado / Província",
269
+ postalCode: "Código postal",
270
+ country: "País",
271
+ },
223
272
  textarea: {
224
273
  characterCount: "Contagem de caracteres: {{count}} de {{max}}",
225
274
  charactersRemaining: "Caracteres restantes: {{count}}",
@@ -250,7 +299,7 @@ const pt = {
250
299
  saveAll: "Salvar tudo ({{count}})",
251
300
  addRecord: "Adicionar registro",
252
301
  open: "Abrir",
253
- search: "Pesquisar...",
302
+ search: "Pesquisar…",
254
303
  modified: "{{count}} linha(s) modificada(s)",
255
304
  saveFailed: 'Falha ao salvar',
256
305
  selected: "{{count}} selecionado(s)",
@@ -294,7 +343,7 @@ const pt = {
294
343
  delete: "Excluir",
295
344
  export: "Exportar",
296
345
  exportAs: "Exportar como {{format}}",
297
- loading: "Carregando grade...",
346
+ loading: "Carregando grade…",
298
347
  errorLoading: "Erro ao carregar grade",
299
348
  pullToRefresh: "Puxe para atualizar",
300
349
  refreshing: "Atualizando…",
@@ -305,6 +354,22 @@ const pt = {
305
354
  yes: "Sim",
306
355
  no: "Não",
307
356
  systemFields: "Sistema",
357
+ // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
358
+ // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
359
+ // pack controls its own separator and word order.
360
+ summary: {
361
+ pattern: "{{label}}: {{value}}",
362
+ count: "Contagem",
363
+ countEmpty: "Vazios",
364
+ countFilled: "Preenchidos",
365
+ countUnique: "Únicos",
366
+ percentEmpty: "Vazios",
367
+ percentFilled: "Preenchidos",
368
+ sum: "Soma",
369
+ avg: "Média",
370
+ min: "Mín.",
371
+ max: "Máx.",
372
+ },
308
373
  toolbar: {
309
374
  densityMode: "Densidade",
310
375
  densityCompact: "Compacto",
@@ -418,12 +483,12 @@ const pt = {
418
483
  templateName: "Nome do modelo",
419
484
  save: "Salvar",
420
485
  deleteTemplate: "Excluir modelo",
421
- savedMapping: 'Saved mapping:',
422
- chooseSavedMapping: 'Choose a saved mapping…',
423
- manualMapping: '— Map columns manually —',
424
- transform: 'Transform',
425
- savedMappingHint: 'Mapping “{{name}}” applies rename + transforms + type coercion on the server. Column mapping is read-only.',
426
- savedMappingPreviewNote: 'The preview shows your source columns; on import, mapping “{{name}}” applies rename, transforms and type coercion on the server.',
486
+ savedMapping: 'Mapeamento salvo:',
487
+ chooseSavedMapping: 'Escolher um mapeamento salvo…',
488
+ manualMapping: '— Mapear colunas manualmente —',
489
+ transform: 'Transformação',
490
+ savedMappingHint: 'O mapeamento "{{name}}" aplica renomeação + transformações + conversão de tipos no servidor. O mapeamento de colunas é somente leitura.',
491
+ savedMappingPreviewNote: 'A pré-visualização mostra suas colunas de origem; na importação, o mapeamento "{{name}}" aplica renomeação, transformações e conversão de tipos no servidor.',
427
492
  csvColumn: "Coluna",
428
493
  mapsTo: "Mapeia para",
429
494
  typeMismatch: "Parece {{type}}",
@@ -483,6 +548,8 @@ const pt = {
483
548
  loadErrorUnauthorizedMessage: "Sua sessão expirou ou você saiu. Entre novamente para ver estes registros.",
484
549
  loadErrorRejectedTitle: "A consulta desta visualização foi rejeitada",
485
550
  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.",
551
+ loadErrorApiDisabledTitle: "Este objeto não está disponível pela API",
552
+ loadErrorApiDisabledMessage: "Esta página não consegue carregar seus registros porque o objeto não está exposto pela API. Isso é uma configuração do próprio objeto, não uma permissão — um administrador precisa habilitar o acesso via API para que esta página funcione.",
486
553
  retry: "Tentar novamente",
487
554
  managedBy: {
488
555
  system: {
@@ -507,7 +574,7 @@ const pt = {
507
574
  },
508
575
  },
509
576
  refresh: "Atualizar",
510
- loading: 'Loading records...',
577
+ loading: "Carregando registros…",
511
578
  recordCount: "{{count}} registros",
512
579
  recordCountOne: "{{count}} registro",
513
580
  addRecord: "Adicionar registro",
@@ -519,7 +586,8 @@ const pt = {
519
586
  sort: "Ordenar",
520
587
  sortRecords: "Ordenar registros",
521
588
  sortByIdSuffix: "(por ID)",
522
- 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.",
589
+ 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, desnormalize-o neste objeto como um campo armazenado, gravado quando a origem muda, e ordene por ele. Não um campo de fórmula: ele é virtual, nenhuma coluna é armazenada para ele e o servidor recusa ordenar por ele.",
590
+ resetSortToDefault: "Restaurar o padrão da exibição",
523
591
  group: "Agrupar",
524
592
  groupBy: "Agrupar por",
525
593
  export: "Exportar",
@@ -577,13 +645,16 @@ const pt = {
577
645
  },
578
646
  kanban: {
579
647
  uncategorized: "Sem categoria",
648
+ columns: "colunas",
580
649
  addCard: "Adicionar cartão",
581
650
  addColumn: "Adicionar coluna",
582
651
  moveCard: "Mover cartão",
583
652
  deleteCard: "Excluir cartão",
584
653
  deleteColumn: "Excluir coluna",
585
654
  noCards: "Sem cartões",
586
- cardTitlePlaceholder: "Digite o título do cartão...",
655
+ cardTitlePlaceholder: "Digite o título do cartão…",
656
+ requiredFieldsTitle: "Preencha os campos obrigatórios",
657
+ requiredFieldsDescription: "Esta movimentação torna os campos abaixo obrigatórios. Preencha-os para continuar.",
587
658
  },
588
659
  timeline: {
589
660
  bucket: {
@@ -596,6 +667,13 @@ const pt = {
596
667
  noDate: "Sem data",
597
668
  unassigned: "Não atribuído",
598
669
  },
670
+ scale: {
671
+ week: "Semana {{n}}",
672
+ quarter: "T{{quarter}} {{year}}",
673
+ },
674
+ gantt: {
675
+ rowLabel: "Itens",
676
+ },
599
677
  },
600
678
  gantt: {
601
679
  viewMode: {
@@ -642,6 +720,18 @@ const pt = {
642
720
  ff: "Término → Término",
643
721
  sf: "Início → Término",
644
722
  },
723
+ linkEnd: {
724
+ start: "Início",
725
+ end: "Fim",
726
+ },
727
+ link: {
728
+ rejected: {
729
+ self: "Uma tarefa não pode depender de si mesma.",
730
+ locked: "Esta linha está bloqueada e não pode receber uma nova dependência.",
731
+ group: "Uma linha de resumo não pode receber dependências: vincule uma das suas tarefas.",
732
+ cycle: "Esse vínculo criaria uma dependência circular.",
733
+ },
734
+ },
645
735
  conflict: {
646
736
  title: "Conflito de agendamento",
647
737
  body: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa(s) afetada(s)?",
@@ -650,8 +740,8 @@ const pt = {
650
740
  },
651
741
  autoScheduleDlg: {
652
742
  title: "Agendamento automático",
653
- body: "Adiar {count} tarefa(s) para atender aos vínculos de dependência?",
654
- skipped: "{count} tarefa(s) bloqueada(s) também violam os vínculos e foram ignoradas.",
743
+ body: "Adiar {{count}} tarefa(s) para atender aos vínculos de dependência?",
744
+ skipped: "{{count}} tarefa(s) bloqueada(s) também violam os vínculos e foram ignoradas.",
655
745
  confirm: "Aplicar",
656
746
  cancel: "Cancelar",
657
747
  none: "Todas as dependências foram atendidas — nada a reagendar.",
@@ -688,6 +778,7 @@ const pt = {
688
778
  exportPng: "Exportar como PNG",
689
779
  exportPdf: "Exportar PDF",
690
780
  saveLayout: "Salvar o layout",
781
+ refresh: "Atualizar",
691
782
  undo: "Desfazer",
692
783
  redo: "Refazer",
693
784
  prevPeriod: "Período anterior",
@@ -728,11 +819,11 @@ const pt = {
728
819
  defaultBadge: "padrão",
729
820
  tabActionsFor: "Ações de exibição para {{name}}",
730
821
  readonlyAriaLabel: "Exibição somente leitura",
731
- readonlyTooltip: "Exibição do sistema — duplique para personalizar.",
822
+ readonlyTooltip: "Exibição do sistema — definida no código, somente leitura.",
732
823
  },
733
824
  designer: {
734
- undo: 'Undo',
735
- redo: 'Redo',
825
+ undo: "Desfazer",
826
+ redo: "Refazer",
736
827
  },
737
828
  detail: {
738
829
  editInlineHint: "Clique duas vezes para editar",
@@ -774,13 +865,15 @@ const pt = {
774
865
  relatedRecords: "{{count}} registros",
775
866
  relatedRecordOne: "{{count}} registro",
776
867
  noRelatedRecords: "Nenhum registro relacionado encontrado",
777
- loading: "Carregando...",
868
+ loading: "Carregando…",
778
869
  copyToClipboard: "Copiar para área de transferência",
779
870
  copied: "Copiado!",
780
871
  deleteConfirmation: "Tem certeza de que deseja excluir este registro?",
872
+ deleted: "Registro excluído",
781
873
  editRecord: "Editar registro",
782
874
  viewAll: "Ver tudo",
783
875
  new: "Novo",
876
+ add: "Adicionar",
784
877
  emptyValue: "—",
785
878
  comments: "Comentários",
786
879
  searchComments: "Pesquisar comentários…",
@@ -810,6 +903,10 @@ const pt = {
810
903
  attachmentDownloadDenied: "Você não tem acesso para baixar este anexo.",
811
904
  attachmentAuthRequired: "Faça login para baixar este anexo.",
812
905
  attachmentPermissionDenied: "Você não tem permissão para fazer isso.",
906
+ attachmentsAccessDenied: "Você não tem acesso a estes anexos.",
907
+ attachmentsLoadFailed: "Não foi possível carregar os anexos deste registro.",
908
+ attachmentsApiUnavailable: "A lista de anexos não está disponível neste objeto.",
909
+ retryLoadAttachments: "Tentar novamente",
813
910
  unifiedDiff: "Visualização unificada",
814
911
  sideBySideDiff: "Visualização lado a lado",
815
912
  noChanges: "Sem alterações",
@@ -845,6 +942,7 @@ const pt = {
845
942
  loadMore: "Carregar mais",
846
943
  edited: "(editado)",
847
944
  via: "via {{source}}",
945
+ viewSource: "Ver origem",
848
946
  replyCount: "{{count}} resposta",
849
947
  replyCountPlural: "{{count}} respostas",
850
948
  replyPlaceholder: "Responder…",
@@ -860,6 +958,8 @@ const pt = {
860
958
  writeStrippedTitle: "Salvo, mas alguns campos não foram aplicados",
861
959
  writeStrippedReadonly: "Somente leitura, portanto não foi aplicado: {{fields}}",
862
960
  writeStrippedByState: "Não editável no estado atual deste registro, portanto não foi aplicado: {{fields}}",
961
+ writeStrippedPrimaryKey: "O identificador do registro não pode ser alterado ao salvar, portanto não foi aplicado: {{fields}}",
962
+ writeStrippedUnknownReason: "Não aplicado pelo servidor: {{fields}}",
863
963
  approvalPendingEditable: "Em aprovação · editável",
864
964
  approvalPendingTooltip: "Este registro tem uma solicitação de aprovação pendente; esta etapa ainda permite a edição",
865
965
  approvalProgress: "Aprovações — {{got}} de {{need}}",
@@ -872,13 +972,20 @@ const pt = {
872
972
  cancelApprovalTooltipUnlocked: "Cancelar a solicitação de aprovação pendente",
873
973
  cancelApprovalFailed: "Falha ao cancelar aprovação",
874
974
  cancelApprovalUnavailable: "O cancelamento de aprovações não é suportado por esta fonte de dados",
975
+ pathLabel: 'Caminho do registro',
976
+ pathStageCompleted: '{{stage}}, concluída',
977
+ pathStageCurrent: '{{stage}}, etapa atual',
978
+ pathStageUpcoming: '{{stage}}, pendente',
979
+ pathStageLostCurrent: '{{stage}}, perdida, etapa atual',
980
+ pathStageLostUpcoming: '{{stage}}, perdida, não alcançada',
981
+ pathStageWonUpcoming: '{{stage}}, etapa objetivo, não alcançada',
875
982
  linkCopied: "Link copiado para a área de transferência",
876
983
  linkCopyFailed: "Falha ao copiar o link",
877
984
  cancel: "Cancelar",
878
985
  cancelEdit: "Descartar alterações",
879
986
  sectionMoreDetails: "Mais detalhes",
880
987
  concurrentUpdateTitle: "Este registro foi modificado por outra pessoa",
881
- concurrentUpdateDescription: "Outro usuário salvou uma versão mais recente de {{field}} durante sua edição. Escolha como resolver o conflito.",
988
+ concurrentUpdateDescription: "Outro usuário salvou, durante sua edição, uma versão mais recente que afeta {{field}}. Escolha como resolver o conflito.",
882
989
  concurrentUpdateYourEdit: "Sua edição",
883
990
  concurrentUpdateCurrentValue: "Valor atual",
884
991
  concurrentUpdateUpdatedBy: "Atualizado por {{name}}",
@@ -886,9 +993,11 @@ const pt = {
886
993
  concurrentUpdateReload: "Carregar versão atual",
887
994
  concurrentUpdateOverwrite: "Sobrescrever mesmo assim",
888
995
  concurrentUpdateCancel: "Cancelar",
996
+ concurrentUpdateRecordLabel: "este registro",
889
997
  openInNewTab: "Abrir em nova aba",
890
998
  activity: "Atividade",
891
999
  history: "Histórico",
1000
+ historyEmpty: "Nenhum histórico ainda",
892
1001
  editRow: "Editar",
893
1002
  deleteRow: "Excluir",
894
1003
  deleteRowConfirmation: "Excluir este registro?",
@@ -898,10 +1007,13 @@ const pt = {
898
1007
  nextPage: "Próximo",
899
1008
  pageOf: "Página {{current}} de {{total}}",
900
1009
  sortBy: "Ordenar por",
901
- filterPlaceholder: "Filtrar...",
1010
+ filterPlaceholder: "Filtrar…",
902
1011
  highlightFields: "Campos principais",
903
1012
  createdBy: "Criado por",
904
1013
  updatedBy: "Atualizado por",
1014
+ // objectui#3863 — base key. pt's third category `many` starts at a million, where
1015
+ // the plural form is correct, so the base repeats `_other`.
1016
+ showEmptyRelated: "+ {{count}} vazios",
905
1017
  showEmptyRelated_one: "+ {{count}} vazio",
906
1018
  showEmptyRelated_other: "+ {{count}} vazios",
907
1019
  copyEmail: "Copiar e-mail",
@@ -913,7 +1025,8 @@ const pt = {
913
1025
  },
914
1026
  chart: {
915
1027
  noData: "Nenhum dado de gráfico disponível",
916
- loading: "Carregando gráfico...",
1028
+ loading: "Carregando gráfico…",
1029
+ nullCategory: "(Não especificado)",
917
1030
  },
918
1031
  map: {
919
1032
  searchLocations: "Pesquisar locais…",
@@ -922,68 +1035,9 @@ const pt = {
922
1035
  invalidCoordinates: "{{count}} registro com coordenadas ausentes ou inválidas excluído do mapa.",
923
1036
  invalidCoordinatesPlural: "{{count}} registros com coordenadas ausentes ou inválidas excluídos do mapa.",
924
1037
  },
925
- workflow: {
926
- draft: "Rascunho",
927
- active: "Ativo",
928
- paused: "Pausado",
929
- completed: "Concluído",
930
- cancelled: "Cancelado",
931
- save: "Salvar",
932
- publish: "Publicar",
933
- addNode: "Adicionar nó",
934
- workflowFlow: "Fluxo de trabalho",
935
- properties: "Propriedades",
936
- connections: "Conexões",
937
- quickConnect: "Conexão rápida",
938
- fromPlaceholder: "De...",
939
- toPlaceholder: "Para...",
940
- connect: "Conectar",
941
- label: "Rótulo",
942
- type: "Tipo",
943
- description: "Descrição",
944
- assignee: "Responsável",
945
- assigneeType: "Tipo de responsável",
946
- user: "Usuário",
947
- role: "Função",
948
- group: "Grupo",
949
- expression: "Expressão",
950
- timeoutMinutes: "Tempo limite (minutos)",
951
- selectNodeToEdit: "Selecione um nó para editar suas propriedades",
952
- workflowTitle: "Título do fluxo de trabalho",
953
- newWorkflow: "Novo fluxo de trabalho",
954
- outConnections: "{{count}} saída(s)",
955
- start: "Início",
956
- end: "Fim",
957
- task: "Tarefa",
958
- userTask: "Tarefa de usuário",
959
- serviceTask: "Tarefa de serviço",
960
- scriptTask: "Tarefa de script",
961
- approval: "Aprovação",
962
- condition: "Condição",
963
- parallelGateway: "Gateway paralelo",
964
- joinGateway: "Gateway de junção",
965
- boundaryEvent: "Evento de limite",
966
- delay: "Atraso",
967
- notification: "Notificação",
968
- webhook: "Webhook",
969
- allowConcurrency: "Permitir (execução simultânea)",
970
- forbidConcurrency: "Proibir (pular novos)",
971
- replaceConcurrency: "Substituir (cancelar existentes)",
972
- queueConcurrency: "Fila (executar após atual)",
973
- conditionEvent: "Condição",
974
- manualEvent: "Manual",
975
- webhookEvent: "Webhook",
976
- timerEvent: "Temporizador",
977
- signalEvent: "Sinal",
978
- versionHistory: "Histórico de versões",
979
- importBpmn: "Importar BPMN",
980
- exportBpmn: "Exportar BPMN",
981
- undo: "Desfazer",
982
- redo: "Refazer",
983
- resetZoom: "Redefinir zoom",
984
- },
985
1038
  dashboard: {
986
1039
  noRows: "Sem linhas",
1040
+ loading: "Carregando…",
987
1041
  pickMeasures: "Escolha medidas (valores) para este widget de dataset.",
988
1042
  datasetUnsupported: "Esta fonte de dados não oferece suporte a consultas de dataset.",
989
1043
  details: "Detalhes",
@@ -1020,6 +1074,105 @@ const pt = {
1020
1074
  total: "Total",
1021
1075
  noDataAvailable: "Sem dados disponíveis",
1022
1076
  noDataSourceFor: "Sem fonte de dados para",
1077
+ config: {
1078
+ breadcrumb: {
1079
+ dashboard: "Painel",
1080
+ configuration: "Configuração",
1081
+ widget: "Widget",
1082
+ chart: "Gráfico",
1083
+ table: "Tabela",
1084
+ pivotTable: "Tabela dinâmica",
1085
+ },
1086
+ section: {
1087
+ general: "Geral",
1088
+ layout: "Layout",
1089
+ data: "Dados",
1090
+ dataBinding: "Vinculação de dados",
1091
+ appearance: "Aparência",
1092
+ },
1093
+ field: {
1094
+ title: "Título",
1095
+ description: "Descrição",
1096
+ columns: "Colunas",
1097
+ gap: "Espaçamento",
1098
+ rowHeight: "Altura da linha (px)",
1099
+ autoRefresh: "Atualização automática",
1100
+ showDescription: "Mostrar descrição",
1101
+ theme: "Tema",
1102
+ widgetType: "Tipo de widget",
1103
+ colorVariant: "Variante de cor",
1104
+ dataset: "Conjunto de dados",
1105
+ dimensions: "Dimensões",
1106
+ values: "Valores",
1107
+ width: "Largura (colunas)",
1108
+ height: "Altura (linhas)",
1109
+ },
1110
+ placeholder: {
1111
+ dashboardTitle: "Título do painel",
1112
+ dashboardDescription: "Resumo curto exibido sob o título",
1113
+ widgetTitle: "Título do widget",
1114
+ widgetDescription: "Descrição do widget",
1115
+ datasetName: "Nome do conjunto de dados",
1116
+ selectDataset: "Selecionar conjunto de dados…",
1117
+ searchDatasets: "Pesquisar conjuntos de dados…",
1118
+ addDimension: "Adicionar dimensão…",
1119
+ addMeasure: "Adicionar medida…",
1120
+ searchMembers: "Pesquisar…",
1121
+ },
1122
+ empty: {
1123
+ datasets: "Nenhum conjunto de dados encontrado.",
1124
+ dimensions: "Nenhuma dimensão selecionada.",
1125
+ measures: "Nenhuma medida selecionada.",
1126
+ nothingToAdd: "Não há mais nada para adicionar.",
1127
+ },
1128
+ help: {
1129
+ dataset: "O conjunto de dados da camada semântica ao qual este widget está vinculado (ADR-0021).",
1130
+ dimensions: "Agrupar/dividir os valores por estas dimensões do conjunto de dados.",
1131
+ dimensionsPivot: "Campos de agrupamento/divisão. A última dimensão se expande como colunas.",
1132
+ values: "Medidas do conjunto de dados a exibir (pelo menos uma).",
1133
+ },
1134
+ action: {
1135
+ add: "Adicionar",
1136
+ remove: "Remover {{name}}",
1137
+ },
1138
+ refresh: {
1139
+ off: "Desativado",
1140
+ every30s: "A cada 30 s",
1141
+ every1m: "A cada 1 min",
1142
+ every5m: "A cada 5 min",
1143
+ every15m: "A cada 15 min",
1144
+ every30m: "A cada 30 min",
1145
+ every1h: "A cada 1 hora",
1146
+ },
1147
+ themeOption: {
1148
+ light: "Claro",
1149
+ dark: "Escuro",
1150
+ auto: "Automático",
1151
+ },
1152
+ widgetType: {
1153
+ metric: "Métrica",
1154
+ bar: "Gráfico de barras",
1155
+ horizontalBar: "Barras horizontais",
1156
+ line: "Gráfico de linhas",
1157
+ pie: "Gráfico de pizza",
1158
+ donut: "Gráfico de rosca",
1159
+ area: "Gráfico de área",
1160
+ scatter: "Gráfico de dispersão",
1161
+ funnel: "Funil",
1162
+ table: "Tabela",
1163
+ pivot: "Tabela dinâmica",
1164
+ },
1165
+ color: {
1166
+ default: "Padrão",
1167
+ blue: "Azul",
1168
+ teal: "Verde-azulado",
1169
+ orange: "Laranja",
1170
+ purple: "Roxo",
1171
+ success: "Sucesso",
1172
+ warning: "Aviso",
1173
+ danger: "Perigo",
1174
+ },
1175
+ },
1023
1176
  trend: {
1024
1177
  vsLastQuarter: "vs. trimestre anterior",
1025
1178
  vsLastMonth: "vs. mês anterior",
@@ -1029,24 +1182,6 @@ const pt = {
1029
1182
  vsPreviousPeriod: "vs. período anterior",
1030
1183
  },
1031
1184
  },
1032
- configPanel: {
1033
- save: "Salvar",
1034
- discard: "Descartar",
1035
- close: "Fechar",
1036
- layout: "Layout",
1037
- columns: "Colunas",
1038
- gap: "Espaçamento",
1039
- rowHeight: "Altura da linha",
1040
- data: "Dados",
1041
- refreshInterval: "Intervalo de atualização",
1042
- appearance: "Aparência",
1043
- title: "Título",
1044
- showDescription: "Mostrar descrição",
1045
- theme: "Tema",
1046
- configuration: "Configuração",
1047
- general: "Geral",
1048
- advanced: "Avançado",
1049
- },
1050
1185
  appDesigner: {
1051
1186
  createApp: "Criar aplicativo",
1052
1187
  editApp: "Editar aplicativo",
@@ -1077,7 +1212,7 @@ const pt = {
1077
1212
  faviconUrl: "Favicon URL",
1078
1213
  preview: "Pré-visualização",
1079
1214
  complete: "Concluir",
1080
- snakeCaseHint: "Must be snake_case (e.g. my_app)",
1215
+ snakeCaseHint: "Deve ser snake_case (ex. my_app)",
1081
1216
  modeEdit: "Editar",
1082
1217
  modePreview: "Pré-visualizar",
1083
1218
  modeCode: "Código",
@@ -1097,8 +1232,6 @@ const pt = {
1097
1232
  showSort: "Mostrar ordenação",
1098
1233
  appearance: "Aparência",
1099
1234
  rowHeight: "Altura da linha",
1100
- stripedRows: "Linhas alternadas",
1101
- bordered: "Com borda",
1102
1235
  livePreview: "Pré-visualização em tempo real",
1103
1236
  stepBasicDesc: "Nome, título e layout",
1104
1237
  stepObjectsDesc: "Selecionar objetos de negócio",
@@ -1212,7 +1345,6 @@ const pt = {
1212
1345
  unique: "Único",
1213
1346
  readOnly: "Somente leitura",
1214
1347
  hidden: "Oculto",
1215
- indexed: "Indexado",
1216
1348
  externalId: "ID externo",
1217
1349
  trackHistory: "Rastrear histórico",
1218
1350
  defaultValue: "Valor padrão",
@@ -1241,6 +1373,7 @@ const pt = {
1241
1373
  },
1242
1374
  },
1243
1375
  console: {
1376
+ saveAdvisoryTitle: "Salvo — a verificação de criação gerou {{count}} recomendação(ões)",
1244
1377
  settingsHub: {
1245
1378
  title: "Configurações",
1246
1379
  subtitle: "Configure seu workspace, integrações e sinalizadores de recursos.",
@@ -1285,6 +1418,13 @@ const pt = {
1285
1418
  passwordsDownload: "Baixar CSV",
1286
1419
  },
1287
1420
  ai: {
1421
+ pendingDrafts: {
1422
+ count: "{{count}} alteração(ões) ainda não publicada(s) — os usuários não conseguem vê-las.",
1423
+ publish: "Publicar",
1424
+ published: "Todas as alterações pendentes estão ativas.",
1425
+ failed: "Falha ao publicar.",
1426
+ publishedWithFindings: "Publicado, mas as verificações de tempo de execução relataram problemas: {{detail}}",
1427
+ },
1288
1428
  usage: {
1289
1429
  title: "Uso de IA",
1290
1430
  meterBuild: "Criar",
@@ -1307,7 +1447,7 @@ const pt = {
1307
1447
  shareTitle: "Compartilhar esta conversa",
1308
1448
  shareDisabledTitle: "Comece a conversar para habilitar o compartilhamento",
1309
1449
  newChat: "Nova",
1310
- searchChats: "Pesquisar conversas...",
1450
+ searchChats: "Pesquisar conversas…",
1311
1451
  noChatsYet: "Ainda não há conversas",
1312
1452
  noChatsDescription: "Inicie uma nova conversa para vê-la aqui.",
1313
1453
  noMatchingChats: "Nenhuma conversa correspondente.",
@@ -1316,18 +1456,18 @@ const pt = {
1316
1456
  deleteConversation: "Excluir conversa",
1317
1457
  saveRename: "Salvar novo nome",
1318
1458
  cancelRename: "Cancelar renomeação",
1319
- loadingHistory: "Carregando o histórico da conversa...",
1459
+ loadingHistory: "Carregando o histórico da conversa…",
1320
1460
  conversationReady: "Conversa pronta",
1321
1461
  preparingConversation: "Preparando uma nova conversa",
1322
1462
  offlineDemoMode: "Modo de demonstração off-line — lista de agentes indisponível",
1323
1463
  sendFailedRateLimited: "Você está enviando mensagens rápido demais. Sua mensagem foi mantida abaixo — aguarde um momento e tente novamente.",
1324
1464
  sendFailedGeneric: "Não foi possível enviar sua mensagem. Ela foi mantida abaixo — tente novamente.",
1325
- askAgent: "Pergunte a {{agent}}...",
1465
+ askAgent: "Pergunte a {{agent}}…",
1326
1466
  assistant: "Assistente",
1327
1467
  liveCanvas: "Pré-visualização ao vivo — {{app}} (rascunho)",
1328
1468
  liveCanvasUnlisted: "Aplicativo ao vivo — {{app}} (não listado até ser publicado)",
1329
- loadingAgents: "Carregando agentes...",
1330
- askAnything: "Pergunte qualquer coisa...",
1469
+ loadingAgents: "Carregando agentes…",
1470
+ askAnything: "Pergunte qualquer coisa…",
1331
1471
  emptyTitle: "Iniciar uma conversa",
1332
1472
  emptyDescription: "Pergunte qualquer coisa — o assistente tem acesso ao contexto do seu aplicativo atual.",
1333
1473
  switchAssistant: "Trocar de assistente",
@@ -1420,6 +1560,11 @@ const pt = {
1420
1560
  changesConfirmed: "Confirmado",
1421
1561
  changesConfirm: "Confirmar",
1422
1562
  changesConfirmHint: "Responda para confirmar ou ajustar esta alteração.",
1563
+ changesApplying: "Aplicando…",
1564
+ changesApplied: "Aplicado",
1565
+ changesDrafted: "Salvo como rascunho",
1566
+ changesFailed: "Não aplicado",
1567
+ discussing: "Discutindo: {{target}}",
1423
1568
  changeVerb: {
1424
1569
  createObject: "Criar objeto",
1425
1570
  addField: "Adicionar campo",
@@ -1430,9 +1575,60 @@ const pt = {
1430
1575
  createSeed: "Gerar dados de exemplo",
1431
1576
  createPackage: "Criar pacote de aplicativo",
1432
1577
  },
1578
+ // objectui#3546 slice four — the AI console surfaces: the /ai chat page's app switcher,
1579
+ // connection banner and plan/publish cards, the ChatDock chrome, and the
1580
+ // conversation-list date buckets. `group.*` is the template-key family
1581
+ // `console.ai.group.${key}` (ConversationsSidebar), enumerated from the
1582
+ // ConversationGroupKey union — all five members, no wildcard.
1583
+ collapseToDock: "Recolher para o painel lateral",
1584
+ switchApp: "Trocar de aplicativo",
1585
+ switchAppLabel: "Conversas de criação por aplicativo",
1586
+ newApp: "Novo aplicativo",
1587
+ connectionWaiting: "Aguardando o servidor…",
1588
+ connectionStalled: "Ainda processando…",
1589
+ connectionOffline: "Conexão perdida — reconectando…",
1590
+ designingPlan: "Projetando seu aplicativo…",
1591
+ designingPlanHint: {
1592
+ data: "Mapeando os dados que você vai acompanhar…",
1593
+ objects: "Modelando os objetos e seus campos…",
1594
+ relations: "Conectando os registros relacionados…",
1595
+ lookups: "Configurando as relações e os campos de busca…",
1596
+ views: "Planejando as telas e as visualizações…",
1597
+ forms: "Organizando os formulários e as listas…",
1598
+ defaults: "Adicionando valores padrão e validações sensatas…",
1599
+ dashboard: "Esboçando um painel para acompanhar…",
1600
+ review: "Verificando se a estrutura faz sentido…",
1601
+ finalize: "Reunindo o plano…",
1602
+ },
1603
+ planBuilding: "Criando…",
1604
+ planBuilt: "Criado",
1605
+ planDeferred: "Ainda não criado",
1606
+ planReady: "O plano está pronto. Crie agora ou diga o que ajustar.",
1607
+ published: "Publicado",
1608
+ publishFailed: "Falha ao publicar",
1609
+ unavailableTitle: "Assistente de IA indisponível",
1610
+ unavailableDescription: "Esta implantação não tem um assistente de IA habilitado. Todo o resto funciona normalmente.",
1611
+ unavailableError: "Não foi possível acessar o serviço de IA. Ele pode estar temporariamente off-line — tente novamente ou volte ao início.",
1612
+ unavailableRetry: "Tentar novamente",
1613
+ unavailableHome: "Voltar ao início",
1614
+ dock: {
1615
+ title: "Assistente",
1616
+ description: "Conversa com o assistente de IA",
1617
+ resize: "Redimensionar a conversa",
1618
+ collapse: "Recolher a conversa",
1619
+ maximize: "Abrir como página inteira",
1620
+ open: "Abrir o assistente",
1621
+ },
1622
+ group: {
1623
+ today: "Hoje",
1624
+ yesterday: "Ontem",
1625
+ previous7Days: "7 dias anteriores",
1626
+ previous30Days: "30 dias anteriores",
1627
+ older: "Mais antigas",
1628
+ },
1433
1629
  },
1434
1630
  title: "Console ObjectStack",
1435
- initializing: "Inicializando aplicação...",
1631
+ initializing: "Inicializando aplicação…",
1436
1632
  loadingHint: "Configurar um novo ambiente pode levar alguns instantes.",
1437
1633
  breadcrumb: {
1438
1634
  dashboards: "Painéis",
@@ -1440,6 +1636,31 @@ const pt = {
1440
1636
  reports: "Relatórios",
1441
1637
  system: "Sistema",
1442
1638
  },
1639
+ // objectui#4024 — the single-namespace settings screen. Its sibling
1640
+ // `settingsHub` above already resolved through this pack; the view was the
1641
+ // one file still carrying English literals.
1642
+ settingsView: {
1643
+ backToHub: "Todas as configurações",
1644
+ back: "Voltar",
1645
+ noNamespace: "Nenhum namespace selecionado.",
1646
+ loadError: "Falha ao carregar as configurações",
1647
+ saved: "Configurações salvas",
1648
+ saveFailed: "Falha ao salvar",
1649
+ lockedByEnv: "Bloqueado pelo ambiente: {{key}}",
1650
+ lockedByEnvNoKey: "Bloqueado pelo ambiente",
1651
+ actionSucceeded: "A ação foi concluída",
1652
+ actionFailed: "A ação falhou",
1653
+ discard: "Descartar",
1654
+ saveChanges: "Salvar alterações",
1655
+ unsavedCount: "{{count}} alterações não salvas",
1656
+ unsavedCount_one: "{{count}} alteração não salva",
1657
+ unsavedCount_other: "{{count}} alterações não salvas",
1658
+ cryptoRefusalTitle: "Esta implantação não consegue criptografar segredos",
1659
+ cryptoRefusalSubjectSuffix: "está declarado como criptografado, portanto nada foi gravado.",
1660
+ cryptoRefusalNoSubject: "O valor declarado como criptografado foi recusado, portanto nada foi gravado.",
1661
+ cryptoRefusalToast: "Não é possível criptografar segredos: {{subject}}",
1662
+ cryptoRefusalToastNoSubject: "Não é possível criptografar segredos",
1663
+ },
1443
1664
  loadingSteps: {
1444
1665
  connecting: "Conectando à fonte de dados",
1445
1666
  loadingConfig: "Carregando configuração",
@@ -1469,6 +1690,7 @@ const pt = {
1469
1690
  general: "Geral",
1470
1691
  navigation: "Navegação",
1471
1692
  dataViews: "Visualizações de dados",
1693
+ aiChat: "Assistente de IA",
1472
1694
  preferences: "Preferências",
1473
1695
  },
1474
1696
  openCommandPalette: "Abrir paleta de comandos",
@@ -1479,11 +1701,13 @@ const pt = {
1479
1701
  createRecord: "Criar novo registro",
1480
1702
  refreshData: "Atualizar dados",
1481
1703
  editRecord: "Editar registro selecionado",
1704
+ newChat: "Nova conversa",
1705
+ toggleChatsList: "Alternar lista de conversas",
1482
1706
  toggleDarkMode: "Alternar modo escuro",
1483
1707
  },
1484
1708
  commandPalette: {
1485
1709
  title: "Paleta de comandos",
1486
- placeholder: "Digite um comando ou pesquise...",
1710
+ placeholder: "Digite um comando ou pesquise…",
1487
1711
  noResults: "Nenhum resultado encontrado.",
1488
1712
  objects: "Objetos",
1489
1713
  dashboards: "Painéis",
@@ -1509,6 +1733,12 @@ const pt = {
1509
1733
  goHome: "Ir para início",
1510
1734
  errorDetails: "Detalhes do erro (somente desenvolvimento)",
1511
1735
  },
1736
+ // objectui#3546 slice four — the console's catch-all route (AppContent `RouteNotFound`).
1737
+ notFound: {
1738
+ title: "Página não encontrada",
1739
+ description: "A URL que você acessou não corresponde a nenhuma visualização deste aplicativo.",
1740
+ back: "Voltar",
1741
+ },
1512
1742
  theme: {
1513
1743
  toggle: "Alternar tema",
1514
1744
  light: "Claro",
@@ -1524,109 +1754,41 @@ const pt = {
1524
1754
  viewNameHelp: "Chave técnica (snake_case). Preenchida automaticamente a partir do título — edite se quiser.",
1525
1755
  viewNameRequired: "Informe uma chave (letras minúsculas, números, sublinhado). Não é preenchida automaticamente para títulos não latinos.",
1526
1756
  viewNameInvalid: "Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.",
1527
- systemViewReadonly: 'System view defined in code - duplicate to customize.',
1528
- expandToPage: 'Open as full page',
1757
+ systemViewReadonly: "Exibição do sistema definida no código — somente leitura.",
1758
+ cannotEditMetaView: "Esta exibição é integrada e definida no código — não é possível alterá-la.",
1759
+ cannotDeleteMetaView: "Esta exibição é integrada e definida no código — não é possível excluí-la.",
1760
+ expandToPage: "Abrir como página inteira",
1529
1761
  objectNotFound: "Objeto não encontrado",
1530
1762
  objectNotFoundDescription: "O objeto \"{{objectName}}\" não existe na configuração atual.",
1531
1763
  objectNotFoundHint: "Verifique as configurações de navegação do seu aplicativo ou selecione um objeto diferente na barra lateral.",
1532
1764
  filterOrNotSavable: "Este filtro une as condições com OU, algo que uma visão salva ainda não consegue armazenar. Ele continua aplicado a esta lista — remova o agrupamento OU para salvá-lo na visão.",
1533
1765
  filterNestedNotSavable: "Este filtro usa grupos de condições aninhados, que uma visão salva não consegue armazenar. Transforme-o em uma única lista de condições para salvá-lo na visão.",
1534
1766
  allRecords: "Todos os registros",
1535
- exitDesignMode: "Sair do modo de design",
1536
- enterDesignMode: "Entrar no modo de design",
1537
- metadataInspector: "Inspetor de metadados",
1538
- editView: "Editar visualização",
1539
- addView: "Adicionar visualização",
1540
- designTools: "Ferramentas de design",
1541
1767
  new: "Novo",
1542
1768
  configureView: "Configurar visualização",
1543
- closePanel: "Fechar painel",
1544
- page: "Página",
1545
- pageConfigHint: "Barra de ferramentas, navegação e configurações do shell de visualização",
1546
- listConfigHint: "Renderização de dados, colunas e aparência para este tipo de lista",
1547
- general: "Geral",
1548
- generalHint: "Título, descrição e tipo da visualização",
1549
1769
  toolbar: "Barra de ferramentas",
1550
- toolbarHint: "Pesquisa, filtro, ordenação, agrupamento e alternância de densidade",
1551
1770
  toolbarEnabledCount: "{{count}} de {{total}} habilitados",
1552
- navigationSection: "Navegação",
1553
- navigationHint: "Comportamento ao clicar na linha e configurações da visualização detalhada",
1554
- records: "Registros",
1555
- recordsHint: "Modo de seleção, adicionar registro e edição em linha",
1556
- exportPrint: "Exportar e imprimir",
1557
- exportPrintHint: "Formatos de exportação, impressão e exibição da contagem de registros",
1558
- showAllFields: "Mostrar tudo",
1559
- hideAllFields: "Ocultar tudo",
1560
- searchFields: "Pesquisar campos...",
1771
+ searchFields: "Pesquisar campos…",
1561
1772
  title: "Título",
1562
- description: "Descrição",
1563
- data: "Dados",
1564
- source: "Fonte",
1565
- columns: "Colunas",
1566
- filterBy: "Filtrar por",
1567
- sortBy: "Ordenar por",
1568
- appearance: "Aparência",
1569
- showDescription: "Mostrar descrição",
1570
1773
  viewType: "Tipo de visualização",
1571
- userFilters: "Filtros do usuário",
1572
- enableSearch: "Habilitar pesquisa",
1573
- enableFilter: "Habilitar filtro",
1574
- enableSort: "Habilitar ordenação",
1575
- enableHideFields: "Ativar ocultar campos",
1576
- enableGroup: "Ativar agrupamento",
1577
- enableColor: "Ativar cor",
1578
- enableDensity: "Ativar densidade",
1579
- userActions: "Ações do usuário",
1580
- addRecordViaForm: "Adicionar registros via formulário",
1581
- advanced: "Avançado",
1582
- allowExport: "Permitir exportação",
1583
1774
  recordCount: "{{count}} registros",
1584
- noDescription: "Sem descrição",
1585
- none: "Nenhum",
1586
- columnsConfigured: "{{count}} colunas",
1587
1775
  save: "Salvar",
1588
1776
  discard: "Descartar",
1589
1777
  createView: "Criar visualização",
1590
1778
  newView: "Nova visualização",
1591
- typeOptions: "Opções de tipo",
1592
1779
  groupByField: "Campo de agrupamento",
1593
1780
  startDateField: "Campo de data de início",
1594
1781
  titleField: "Campo de título",
1595
1782
  latitudeField: "Campo de latitude",
1596
1783
  longitudeField: "Campo de longitude",
1597
1784
  imageField: "Campo de imagem",
1598
- dateField: "Campo de data",
1599
- selectField: "Selecionar campo...",
1600
- gridOptionsHint: "A visualização de grade usa as colunas configuradas acima.",
1785
+ selectField: "Selecionar campo…",
1601
1786
  groupBy: "Agrupar por",
1602
- prefixField: "Campo de prefixo",
1603
- fields: "Campos",
1604
- fieldsVisible: "{{count}} visíveis",
1605
- sortsCount: "{{count}} ordenações",
1606
- filtersCount: "{{count}} filtros",
1607
1787
  endDateField: "Campo de data de término",
1608
- color: "Cor",
1609
- fieldTextColor: "Cor do texto do campo",
1610
- rowHeight: "Altura da linha",
1611
- wrapHeaders: "Quebrar cabeçalhos",
1612
- showFieldDescriptions: "Mostrar descrições dos campos",
1613
- collapseAllByDefault: "Recolher tudo por padrão",
1614
- striped: "Linhas listradas",
1615
- bordered: "Células com borda",
1616
- inlineEdit: "Editar registros em linha",
1617
- addDeleteRecordsInline: "Adicionar/excluir registros em linha",
1618
- clickIntoRecordDetails: "Clique para detalhes do registro",
1619
- navigationMode: "Modo de navegação",
1620
- navigationWidth: "Largura de navegação",
1621
- navigationWidthHint: "Disponível para os modos de navegação gaveta, modal e dividido",
1622
- openNewTab: "Abrir em nova aba",
1623
- openNewTabHint: "Disponível para os modos de navegação página e nova janela",
1624
1788
  import: "Importar",
1625
1789
  importTitle: "Importar do CSV",
1626
1790
  importedToast: "{{count}} linha(s) importada(s).",
1627
1791
  importedWithSkipped: "{{ok}} linha(s) importada(s); {{skipped}} pulada(s).",
1628
- showAdvancedSettings: "Mostrar configurações avançadas",
1629
- showFewerSettings: "Mostrar menos configurações",
1630
1792
  createViewDesc: "Escolha um tipo de exibição e dê um nome a ela. Todas as configurações podem ser alteradas depois.",
1631
1793
  cancel: "Cancelar",
1632
1794
  create: "Criar",
@@ -1659,7 +1821,7 @@ const pt = {
1659
1821
  latitudeFieldHelp: "Campo contendo a latitude (apenas campos geográficos).",
1660
1822
  longitudeFieldHelp: "Campo contendo a longitude (apenas campos geográficos).",
1661
1823
  imageFieldHelp: "A capa da galeria vem deste campo de imagem ou anexo.",
1662
- selectOption: "Selecionar...",
1824
+ selectOption: "Selecionar…",
1663
1825
  noEligibleFieldForType: "Nenhum campo elegível desse tipo. Adicione um ao objeto primeiro.",
1664
1826
  viewTypeUnavailable: "Este objeto não tem um campo que sirva como \"{{field}}\".",
1665
1827
  viewTypeUnavailableShort: "Não suportado por este objeto.",
@@ -1674,58 +1836,9 @@ const pt = {
1674
1836
  xAxisFieldHelp: "A dimensão categórica ou temporal.",
1675
1837
  yAxisField: "Campo do eixo Y",
1676
1838
  yAxisFieldHelp: "O campo numérico para agregar.",
1677
- selectionMode: "Modo de seleção",
1678
- selectionNone: "Nenhum",
1679
- selectionSingle: "Individual",
1680
- selectionMultiple: "Múltiplo",
1681
- pageSize: "Tamanho da página",
1682
- pageSizeOptions: "Opções de tamanho de página",
1683
- exportFormats: "Formatos de exportação",
1684
- exportMaxRecords: "Máximo de registros",
1685
- exportIncludeHeaders: "Incluir cabeçalhos",
1686
- exportFileNamePrefix: "Prefixo do nome do arquivo",
1687
- searchableFields: "Campos pesquisáveis",
1688
- filterableFields: "Campos filtráveis",
1689
- resizableColumns: "Colunas redimensionáveis",
1690
- densityCompact: "Compacto",
1691
- densityComfortable: "Normal",
1692
- densitySpacious: "Espaçoso",
1693
- densityMode: "Modo de densidade",
1694
- hiddenFields: "Campos ocultos",
1695
- rowActions: "Ações de linha",
1696
- bulkActions: "Ações em massa",
1697
- sharing: "Compartilhamento",
1698
- sharingEnabled: "Compartilhamento ativado",
1699
- sharingVisibility: "Visibilidade",
1700
- addRecordEnabled: "Adição de registro ativada",
1701
- addRecordPosition: "Posição",
1702
- addRecordMode: "Modo",
1703
- addRecordFormView: "Exibição de formulário",
1704
- conditionalFormatting: "Formatação condicional",
1705
- addRule: "Adicionar regra",
1706
- quickFilters: "Filtros rápidos",
1707
- addQuickFilter: "Adicionar filtro rápido",
1708
- ufElements: "Elementos",
1709
- ufDropdown: "Lista suspensa",
1710
1839
  ufTabs: "Abas",
1711
- ufToggle: "Alternar",
1712
- ufAddField: "+ Adicionar campo de filtro...",
1713
- ufNoFields: "Sem campos disponíveis",
1714
- ufAddTab: "+ Adicionar aba",
1715
- ufTabLabel: "Rótulo",
1840
+ ufAddField: "+ Adicionar campo de filtro…",
1716
1841
  ufShowAllRecords: "Mostrar aba \"Todos os registros\"",
1717
- ufAllowAddTab: "Permitir adicionar abas",
1718
- showRecordCount: "Mostrar contagem de registros",
1719
- allowPrinting: "Permitir impressão",
1720
- virtualScroll: "Rolagem virtual",
1721
- emptyStateTitle: "Título do estado vazio",
1722
- emptyStateMessage: "Mensagem do estado vazio",
1723
- emptyStateIcon: "Ícone do estado vazio",
1724
- ariaLabel: "Rótulo ARIA",
1725
- ariaDescribedBy: "Descrito por ARIA",
1726
- ariaLive: "ARIA ao vivo",
1727
- accessibility: "Acessibilidade",
1728
- viewTabs: "Abas de exibição",
1729
1842
  },
1730
1843
  localeSwitcher: {
1731
1844
  label: "Idioma",
@@ -1769,7 +1882,7 @@ const pt = {
1769
1882
  passwordPlaceholder: "Digite sua senha",
1770
1883
  forgotPasswordText: "Esqueceu a senha?",
1771
1884
  submitButton: "Entrar",
1772
- submittingButton: "Entrando...",
1885
+ submittingButton: "Entrando…",
1773
1886
  noAccountText: "Não tem uma conta?",
1774
1887
  signUpText: "Cadastre-se",
1775
1888
  errors: {
@@ -1777,6 +1890,18 @@ const pt = {
1777
1890
  invalidCredentials: "E-mail ou senha inválidos. Por favor, tente novamente.",
1778
1891
  emailNotVerified: "Por favor, verifique seu e-mail antes de fazer login.",
1779
1892
  },
1893
+ // objectui#3546 slice three — phone/OTP sign-in. `{seconds}` is LoginForm's own
1894
+ // literal `.replace()` hole, not i18next interpolation: keep the single braces.
1895
+ emailOrPhoneLabel: "E-mail ou número de telefone",
1896
+ emailOrPhonePlaceholder: "name@example.com ou +1 555 000 0000",
1897
+ phoneLabel: "Número de telefone",
1898
+ phonePlaceholder: "+1 555 000 0000",
1899
+ otpCodeLabel: "Código de verificação",
1900
+ otpCodePlaceholder: "Código de 6 dígitos",
1901
+ sendOtpButton: "Obter código",
1902
+ resendOtpCountdownText: "Reenviar em {seconds} s",
1903
+ usePhoneOtpText: "Entrar com código de verificação",
1904
+ usePasswordSignInText: "Entrar com senha em vez disso",
1780
1905
  },
1781
1906
  register: {
1782
1907
  title: "Criar uma conta",
@@ -1792,7 +1917,7 @@ const pt = {
1792
1917
  passwordMismatchError: "As senhas não coincidem",
1793
1918
  passwordTooShortError: "A senha deve ter pelo menos 8 caracteres",
1794
1919
  submitButton: "Criar conta",
1795
- submittingButton: "Criando conta...",
1920
+ submittingButton: "Criando conta…",
1796
1921
  hasAccountText: "Já tem uma conta?",
1797
1922
  signInText: "Entrar",
1798
1923
  errors: {
@@ -1813,12 +1938,26 @@ const pt = {
1813
1938
  emailLabel: "E-mail",
1814
1939
  emailPlaceholder: "name@example.com",
1815
1940
  submitButton: "Enviar link de redefinição",
1816
- submittingButton: "Enviando...",
1941
+ submittingButton: "Enviando…",
1817
1942
  successTitle: "Verifique seu e-mail",
1818
- successDescription: "Enviamos um link para redefinição de senha para {{email}}. Por favor verifique sua caixa de entrada.",
1943
+ successDescription: "Enviamos um link para redefinição de senha para {email}. Por favor verifique sua caixa de entrada.",
1819
1944
  backToSignInText: "Voltar para o login",
1820
1945
  rememberPasswordText: "Lembra da sua senha?",
1821
1946
  signInText: "Entrar",
1947
+ // objectui#3546 slice three — the SMS reset branch of the same form.
1948
+ phoneLabel: "Número de telefone",
1949
+ phonePlaceholder: "+1 555 000 0000",
1950
+ otpCodeLabel: "Código de verificação",
1951
+ otpCodePlaceholder: "Código de 6 dígitos",
1952
+ sendOtpButton: "Obter código",
1953
+ resendOtpCountdownText: "Reenviar em {seconds} s",
1954
+ newPasswordLabel: "Nova senha",
1955
+ newPasswordPlaceholder: "Digite uma nova senha",
1956
+ resetButton: "Redefinir senha",
1957
+ usePhoneResetText: "Redefinir com código por SMS",
1958
+ useEmailResetText: "Redefinir por e-mail em vez disso",
1959
+ phoneSuccessTitle: "Senha redefinida",
1960
+ phoneSuccessDescription: "Sua senha foi redefinida. Agora você pode entrar com a nova senha.",
1822
1961
  },
1823
1962
  resetPassword: {
1824
1963
  title: "Definir nova senha",
@@ -1857,6 +1996,8 @@ const pt = {
1857
1996
  backToLogin: "Voltar ao login",
1858
1997
  checkSpam: "Não recebeu o e-mail? Verifique sua pasta de spam ou entre em contato com o suporte.",
1859
1998
  or: "Ou",
1999
+ // objectui#3546 slice three.
2000
+ resendUnavailable: "O envio de e-mails pode não estar configurado neste ambiente. Entre em contato com o suporte se o problema persistir.",
1860
2001
  },
1861
2002
  setup: {
1862
2003
  welcomeTitle: "Bem-vindo ao ObjectStack",
@@ -1895,6 +2036,9 @@ const pt = {
1895
2036
  invalidDescription: "Nenhum código de dispositivo foi fornecido na URL.",
1896
2037
  loading: "Carregando…",
1897
2038
  cancel: "Cancelar",
2039
+ // objectui#3546 slice three — device-authorization plugin switched off.
2040
+ disabledTitle: "Autorização de dispositivo não habilitada",
2041
+ disabledDescription: "Esta implantação não tem a autorização de dispositivo habilitada, por isso este dispositivo não pode ser aprovado aqui.",
1898
2042
  },
1899
2043
  shell: {
1900
2044
  tenantHostHint: "Você está fazendo login neste espaço de trabalho",
@@ -1934,6 +2078,29 @@ const pt = {
1934
2078
  },
1935
2079
  },
1936
2080
  },
2081
+ // objectui#3546 slice three — the /oauth/consent screen.
2082
+ oauth: {
2083
+ consent: {
2084
+ title: "{{appName}} quer acessar sua conta",
2085
+ request: "{{appName}} está solicitando permissão{{suffix}}.",
2086
+ unknownApp: "um aplicativo",
2087
+ willAllow: "Este aplicativo poderá:",
2088
+ scope: {
2089
+ openid: "Confirmar sua identidade",
2090
+ profile: "Ler seu perfil básico (nome, foto)",
2091
+ email: "Ler seu endereço de e-mail",
2092
+ offlineAccess: "Manter a sessão ativa (renovar o acesso)",
2093
+ },
2094
+ deny: "Negar",
2095
+ authorize: "Autorizar",
2096
+ submitting: "Autorizando…",
2097
+ granted: "Acesso concedido",
2098
+ denied: "Acesso negado",
2099
+ noRedirect: "O servidor não retornou nenhuma URL de redirecionamento.",
2100
+ failed: "Falha no consentimento",
2101
+ footer: "Você pode revogar o acesso a qualquer momento nas configurações da sua conta.",
2102
+ },
2103
+ },
1937
2104
  profile: {
1938
2105
  title: "Perfil",
1939
2106
  subtitle: "Gerencie as configurações da sua conta",
@@ -1995,6 +2162,8 @@ const pt = {
1995
2162
  invite: "Convidar membro",
1996
2163
  members: "Membros",
1997
2164
  settings: "Configurações do espaço de trabalho",
2165
+ multiOrgDisabled: "A criação de novas organizações está desativada nesta instância.",
2166
+ createFailed: 'Falha ao criar o espaço de trabalho',
1998
2167
  },
1999
2168
  help: {
2000
2169
  onThisPage: "Nesta página",
@@ -2005,7 +2174,7 @@ const pt = {
2005
2174
  },
2006
2175
  sidebar: {
2007
2176
  packageManagement: "Gerenciamento de pacotes",
2008
- searchNavigation: "Pesquisar na navegação...",
2177
+ searchNavigation: "Pesquisar na navegação…",
2009
2178
  settings: "Configurações",
2010
2179
  help: "Ajuda",
2011
2180
  helpTooltip: "Ajuda e documentação",
@@ -2029,8 +2198,8 @@ const pt = {
2029
2198
  switchObject: "Trocar de objeto",
2030
2199
  connection: {
2031
2200
  connected: "Conectado",
2032
- connecting: "Conectando...",
2033
- reconnecting: "Reconectando...",
2201
+ connecting: "Conectando…",
2202
+ reconnecting: "Reconectando…",
2034
2203
  disconnected: "Desconectado",
2035
2204
  error: "Erro de conexão",
2036
2205
  },
@@ -2046,10 +2215,12 @@ const pt = {
2046
2215
  build: {
2047
2216
  title: "Criar um aplicativo",
2048
2217
  subtitle: "Comece do zero — projete objetos, formulários, automações e interfaces.",
2218
+ noCapability: "A criação de aplicativos não está disponível neste espaço de trabalho — ela exige a permissão “Gerenciar metadados”, que sua conta não possui.",
2049
2219
  },
2050
2220
  template: {
2051
2221
  title: "Comece com um modelo",
2052
2222
  subtitle: "Instale um aplicativo modelo do marketplace e personalize-o.",
2223
+ marketplaceDisabled: "Este runtime não tem um marketplace de aplicativos configurado, portanto não há modelos para instalar aqui.",
2053
2224
  },
2054
2225
  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.",
2055
2226
  welcomeAdminDescriptionNoBuild: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda. Quando houver dados, o assistente de IA poderá ajudar a explorá-los.",
@@ -2069,6 +2240,14 @@ const pt = {
2069
2240
  publishing: "Publicando…",
2070
2241
  published: "Publicado! Suas alterações estão ativas.",
2071
2242
  publishFailed: "Falha ao publicar",
2243
+ // objectui#3546 slice six — seedWarn reaproveita a tradução de
2244
+ // console.ai.seedWarn (mesma frase em inglês). Marcador "(s)" como em
2245
+ // home.pendingDrafts.message, da mesma família.
2246
+ nothing: "Nada para publicar.",
2247
+ probeWarn: "Publicado, mas a verificação encontrou problemas.",
2248
+ seedWarn: "Publicado, mas alguns dados de exemplo não puderam ser carregados.",
2249
+ publishedVerified: "Publicado e verificado — {{count}} linha(s) de exemplo ativa(s).",
2250
+ capabilityWarn: "Verificação de autoria: {{count}} referência(s) de capacidade não apontam para nada.",
2072
2251
  },
2073
2252
  title: "Início",
2074
2253
  subtitle: "Painel do seu espaço de trabalho",
@@ -2082,7 +2261,7 @@ const pt = {
2082
2261
  title: "Requer a sua atenção",
2083
2262
  empty: "Está tudo em dia",
2084
2263
  },
2085
- loading: "Carregando espaço de trabalho...",
2264
+ loading: "Carregando espaço de trabalho…",
2086
2265
  recent: "Recentes",
2087
2266
  starred: "Favoritos",
2088
2267
  welcome: "Bem-vindo ao ObjectUI",
@@ -2143,6 +2322,9 @@ const pt = {
2143
2322
  roles: "Perfis",
2144
2323
  configuration: "Configuração",
2145
2324
  createApp: "Criar aplicativo",
2325
+ administration: "Administração",
2326
+ datasources: "Fontes de dados",
2327
+ documentation: "Documentação",
2146
2328
  },
2147
2329
  appSwitcher: {
2148
2330
  switchApplication: "Trocar de aplicativo",
@@ -2182,7 +2364,7 @@ const pt = {
2182
2364
  search: {
2183
2365
  title: "Pesquisar",
2184
2366
  back: "Voltar",
2185
- placeholder: "Pesquisar objetos, painéis, páginas, relatórios...",
2367
+ placeholder: "Pesquisar objetos, painéis, páginas, relatórios…",
2186
2368
  inputAriaLabel: "Pesquisar objetos, painéis, páginas, relatórios",
2187
2369
  resultsCount: "{{count}} resultado para \"{{query}}\"",
2188
2370
  resultsCountPlural: "{{count}} resultados para \"{{query}}\"",
@@ -2201,6 +2383,7 @@ const pt = {
2201
2383
  empty: {
2202
2384
  objectNotFound: "Objeto não encontrado",
2203
2385
  objectNotFoundDescription: "A definição do objeto \"{{name}}\" está ausente. Verifique sua configuração ou navegue de volta.",
2386
+ interfacePageSourceMissing: "Esta página de interface faz referência a \"{{name}}\", que não está disponível.",
2204
2387
  pageNotFound: "Página não encontrada",
2205
2388
  pageNotFoundDescription: "A página \"{{name}}\" não foi encontrada. Ela pode ter sido removida ou renomeada.",
2206
2389
  dashboardNotFound: "Painel não encontrado",
@@ -2209,27 +2392,17 @@ const pt = {
2209
2392
  reportNotFoundDescription: "O relatório \"{{name}}\" não foi encontrado. Ele pode ter sido removido ou renomeado.",
2210
2393
  noAppsConfigured: "Nenhum aplicativo configurado",
2211
2394
  noAppsConfiguredDescription: "Nenhum aplicativo está registrado. Crie seu primeiro aplicativo ou visite as configurações do sistema.",
2395
+ appNotAvailable: "Aplicativo indisponível",
2396
+ appNotAvailableDescription: "Este aplicativo ainda não está disponível — a publicação pode estar em andamento. Tente novamente em instantes.",
2397
+ appAccessDenied: "Você não tem acesso a este aplicativo",
2398
+ appAccessDeniedDescription: "Este aplicativo existe, mas sua conta não tem autorização para abri-lo. Peça acesso a um administrador.",
2399
+ appAccessDeniedHome: "Voltar ao início",
2212
2400
  createFirstApp: "Criar primeiro aplicativo",
2213
2401
  systemSettings: "Configurações do sistema",
2214
2402
  back: "Voltar",
2215
2403
  recordNotFound: "Registro não encontrado",
2216
2404
  recordNotFoundDescription: "O registro que você está procurando não existe ou pode ter sido excluído.",
2217
2405
  },
2218
- renderer: {
2219
- noPageSchema: "Nenhum esquema de página fornecido",
2220
- noFormSchema: "Nenhum esquema de formulário fornecido",
2221
- noDashboardSchema: "Nenhum esquema de painel fornecido",
2222
- pageRendering: "Renderizando página: {{name}}",
2223
- dashboardRendering: "Renderizando painel: {{name}}",
2224
- formRenderingMode: "Formulário renderizado no modo {{mode}}",
2225
- formRenderingFor: "para registro {{id}}",
2226
- createRecord: "Criar registro",
2227
- editRecord: "Editar registro",
2228
- page: "Página",
2229
- dashboard: "Painel",
2230
- save: "Salvar",
2231
- cancel: "Cancelar",
2232
- },
2233
2406
  actionDialog: {
2234
2407
  title: "Parâmetros de ação",
2235
2408
  description: "Insira as informações necessárias para continuar.",
@@ -2280,7 +2453,7 @@ const pt = {
2280
2453
  deleteFailed: "Não foi possível excluir a exibição",
2281
2454
  },
2282
2455
  dashboardActions: {
2283
- pdfPreparing: "Preparando exportação PDF…",
2456
+ printDialogOpening: "Abrindo a caixa de diálogo de impressão do navegador (não é uma exportação para PDF)",
2284
2457
  exportFailed: "Falha na exportação: {{message}}",
2285
2458
  forecastSoon: "A exibição de previsão está chegando em breve",
2286
2459
  },
@@ -2324,126 +2497,159 @@ const pt = {
2324
2497
  first: "Primeiro",
2325
2498
  },
2326
2499
  editor: {
2327
- breadcrumb: "Configuração",
2328
- basic: "Geral",
2329
- title: "Título",
2330
- titlePlaceholder: "ex.: Pipeline por trimestre",
2331
- description: "Descrição",
2332
- descriptionPlaceholder: "O que este relatório mostra?",
2333
- type: "Tipo de relatório",
2334
- typeTabular: "Tabular — lista plana",
2335
- typeSummary: "Resumo — agrupado com totais",
2336
- typeMatrix: "Matriz — pivô linhas × colunas",
2337
- typeJoined: "Combinado — vários blocos",
2338
- typeHelp: "Escolha o layout que corresponde ao que deseja ver.",
2339
- data: "Dados",
2340
- objectName: "Fonte de dados",
2341
- objectNamePlaceholder: "ex.: opportunity",
2342
- objectNameHelp: "Qual objeto este relatório deve consultar?",
2343
- limit: "Limite de linhas",
2344
- limitPlaceholder: "ex.: 100",
2345
- columns: "Colunas",
2346
- columnsHint: "Escolha quais campos aparecem como colunas. Adicione uma agregação (Soma, Contagem…) em relatórios de Resumo ou Matriz.",
2347
- filters: "Filtros",
2348
- filtersHint: "Restrinja as linhas incluídas neste relatório.",
2349
- filtersComplex: "Este relatório usa um filtro avançado que não pode ser editado aqui. Ao salvar será mantido inalterado.",
2350
- groupBy: "Agrupar por",
2351
- groupByHint: "Agrupe os dados e calcule subtotais.",
2352
- rows: "Linhas",
2353
- rowsHint: "Agrupe linhas por estes campos.",
2354
- columnsAxis: "Colunas",
2355
- columnsAxisHint: "Pivote estes campos no topo.",
2356
- values: "Valores",
2357
- valuesHint: "Números exibidos em cada célula. Escolha um ou mais campos e adicione uma agregação (Soma, Contagem…).",
2358
- grouping: "Agrupamento",
2359
- addGrouping: "Adicionar agrupamento",
2360
- dateGranularity: "Granularidade de data",
2361
- dateGranularityNone: "(usar valor bruto)",
2362
- day: "Dia",
2363
- week: "Semana",
2364
- month: "Mês",
2365
- quarter: "Trimestre",
2366
- year: "Ano",
2367
- sortAsc: "Crescente",
2368
- sortDesc: "Decrescente",
2369
- chart: "Gráfico",
2370
- chartHint: "Visualização opcional ao lado da tabela.",
2371
- chartType: "Tipo de gráfico",
2372
- chartTitle: "Título do gráfico",
2373
- chartTitlePlaceholder: "Padrão: título do relatório",
2374
- chartXAxis: "Eixo X (categoria)",
2375
- chartYAxis: "Eixo Y (valor)",
2376
- chartShowLegend: "Mostrar legenda",
2377
- chartShowDataLabels: "Mostrar rótulos de dados",
2378
- chartNone: "(sem gráfico)",
2379
- chartBar: "Barras",
2380
- chartLine: "Linhas",
2381
- chartArea: "Áreas",
2382
- chartPie: "Pizza",
2383
- chartDonut: "Rosca",
2384
- chartFunnel: "Funil",
2385
- validationNeedsObject: "Escolha uma fonte de dados antes de adicionar colunas.",
2386
- validationMatrixNeedsRowsCols: "Relatórios de matriz precisam de pelo menos uma Linha e uma Coluna.",
2387
- validationSummaryNeedsRows: "Relatórios de resumo precisam de pelo menos um campo de agrupamento.",
2388
- blocks: "Blocos",
2389
- blocksHint: "Cada bloco é sua própria tabela ou gráfico. Filtros de bloco são combinados (E) com o filtro do relatório.",
2390
- addBlock: "Adicionar bloco",
2391
- removeBlock: "Remover bloco",
2392
- blockName: "Nome do bloco",
2393
- blockNamePlaceholder: "nome_unico_do_bloco",
2394
- blockLabel: "Rótulo de exibição",
2395
- blockLabelPlaceholder: "Exibido acima do bloco",
2396
- blockDescription: "Descrição",
2397
- blockDescriptionPlaceholder: "Contexto opcional para este bloco",
2398
- validationJoinedNeedsBlocks: "Relatórios combinados precisam de pelo menos um bloco.",
2399
- validationBlockNameRequired: "Cada bloco precisa de um nome não vazio.",
2400
- validationBlockNameDuplicate: "Os nomes dos blocos devem ser únicos no relatório.",
2401
- validationBlockNeedsColumns: "Cada bloco precisa de pelo menos uma coluna.",
2402
- noneOption: "(nenhum)",
2403
- addCondition: "Adicionar condição",
2404
- combineLogic: "Combinar com",
2405
- opContains: "contém",
2406
- opIsEmpty: "está vazio",
2407
- opIsNotEmpty: "não está vazio",
2408
- formatAuto: "Automático",
2409
- formatCurrency: "Moeda",
2410
- formatPercent: "Porcentagem",
2411
- formatInteger: "Inteiro",
2412
- formatDate: "Data",
2413
- formatDatetime: "Data e hora",
2414
- columnLabelPlaceholder: "Substituir rótulo",
2415
- aggregateColumn: "Agregação",
2416
- formatColumn: "Formato",
2417
- addColumns: "Adicionar colunas",
2418
- searchFields: "Pesquisar campos…",
2419
- noMatchingFields: "Nenhum campo corresponde à sua pesquisa.",
2420
- noFieldsAvailable: "Nenhum campo disponível.",
2421
- columnsCount: "{n} coluna(s) selecionada(s)",
2422
- columnsEmpty: "Nenhuma coluna selecionada ainda.",
2423
- fieldPickerTitle: "Selecionar campos",
2424
- fieldPickerDescription: "Escolha um ou mais campos para adicionar. Use o campo de pesquisa para filtrar a lista.",
2425
- fieldPickerChangeTitle: "Alterar campo",
2426
- fieldPickerAddGroupingTitle: "Adicionar agrupamento",
2427
- fieldPickerEmpty: "(Selecionar campo)",
2428
- fieldPickerSelected: "{n} selecionado(s)",
2429
- fieldPickerClear: "Limpar seleção",
2430
- fieldPickerAdd: "Adicionar",
2431
- fieldPickerAddN: "Adicionar {n}",
2500
+ panelTitle: "Editar relatório",
2432
2501
  },
2433
2502
  },
2434
2503
  organizations: {
2435
2504
  create: "Criar workspace",
2436
- mine: "Minhas organizações",
2437
- title: "Organizações",
2438
- heading: "Suas organizações",
2439
- subtitle: "Selecione uma organização para continuar ou crie uma nova.",
2440
- searchPlaceholder: "Pesquisar uma organização",
2441
- new: "Nova organização",
2442
- current: "Organização atual",
2505
+ mine: "Meus workspaces",
2506
+ title: "Workspaces",
2507
+ heading: "Seus workspaces",
2508
+ subtitle: "Selecione um workspace para continuar ou crie um novo.",
2509
+ searchPlaceholder: "Pesquisar um workspace",
2510
+ new: "Novo workspace",
2511
+ current: "Workspace atual",
2443
2512
  manage: "Gerenciar",
2444
- emptyTitle: "Nenhuma organização ainda",
2445
- emptyDescription: "Crie sua primeira organização para começar.",
2446
- noMatches: "Nenhuma organização corresponde à sua pesquisa.",
2513
+ emptyTitle: "Nenhum workspace ainda",
2514
+ emptyDescription: "Crie seu primeiro workspace para começar.",
2515
+ noMatches: "Nenhum workspace corresponde à sua pesquisa.",
2516
+ },
2517
+ organization: {
2518
+ roles: {
2519
+ owner: 'Proprietário',
2520
+ admin: 'Administrador',
2521
+ delegatedAdmin: 'Administrador delegado',
2522
+ member: 'Membro',
2523
+ },
2524
+ errors: {
2525
+ notAllowedToInvite: 'Você não tem permissão para convidar usuários para esta organização.',
2526
+ notAllowedToInviteWithRole: 'Você não tem permissão para convidar um usuário com esta função.',
2527
+ alreadyInvited: 'Este usuário já foi convidado para esta organização.',
2528
+ organizationExists: 'Essa organização já existe.',
2529
+ slugTaken: 'Esse slug já está em uso.',
2530
+ notAllowedToCreate: 'Você não tem permissão para criar uma nova organização.',
2531
+ notTheRecipient: 'Você não é o destinatário deste convite.',
2532
+ invitationNotFound: 'Este convite não existe mais ou expirou.',
2533
+ unknown: 'Algo deu errado. Tente novamente.',
2534
+ },
2535
+ backToList: "Voltar para as organizações",
2536
+ notFound: "Organização não encontrada",
2537
+ notFoundDescription: "Esta organização não existe ou você não tem acesso.",
2538
+ tabs: {
2539
+ members: "Membros",
2540
+ invitations: "Convites",
2541
+ settings: "Configurações",
2542
+ },
2543
+ members: {
2544
+ title: "Membros",
2545
+ inviteMember: "Convidar membro",
2546
+ inviteRestrictedNote: "Apenas administradores da organização podem convidar membros.",
2547
+ removeMember: "Remover membro",
2548
+ removeConfirmTitle: "Remover membro?",
2549
+ removeConfirmDescription: "Isso removerá {{name}} da organização. O acesso será perdido imediatamente.",
2550
+ removeConfirmAction: "Remover",
2551
+ memberRemoved: "Membro removido",
2552
+ removeFailed: "Falha ao remover o membro",
2553
+ roleUpdated: "Função atualizada",
2554
+ roleUpdateFailed: "Falha ao atualizar a função",
2555
+ memberActions: 'Ações do membro',
2556
+ loadFailed: 'Falha ao carregar os membros',
2557
+ },
2558
+ invitations: {
2559
+ title: "Convites",
2560
+ empty: "Nenhum convite encontrado.",
2561
+ expiresAt: "Expira em",
2562
+ linkCopied: "Link do convite copiado",
2563
+ copyFailed: "Falha ao copiar o link",
2564
+ canceled: "Convite cancelado",
2565
+ cancelFailed: "Falha ao cancelar o convite",
2566
+ cancelTitle: "Cancelar convite?",
2567
+ cancelDescription: "O convite de {{email}} será revogado.",
2568
+ cancelAction: "Cancelar convite",
2569
+ inviteTitle: "Convidar um membro",
2570
+ inviteDescription: "A pessoa receberá um convite para entrar nesta organização.",
2571
+ emailLabel: "E-mail",
2572
+ roleLabel: "Função",
2573
+ placementLabel: "Alocação (opcional)",
2574
+ placementDescription: "Aplicada quando o convite for aceito. Somente as unidades e os cargos que você pode delegar são listados.",
2575
+ businessUnitLabel: "Unidade de negócio",
2576
+ businessUnitPlaceholder: "Sem alocação",
2577
+ positionsLabel: "Cargos",
2578
+ sendInvite: "Enviar convite",
2579
+ sentTitle: "Convite criado",
2580
+ sentDescription: "Compartilhe o link abaixo com a pessoa convidada. Ela precisará entrar para aceitar.",
2581
+ linkLabel: "Link de aceitação",
2582
+ invitedAs: "{{email}} convidado como {{role}}",
2583
+ copyLinkLabel: 'Copiar link do convite',
2584
+ loadFailed: 'Falha ao carregar os convites',
2585
+ inviteFailed: 'Falha ao convidar o membro',
2586
+ status: {
2587
+ all: "Todos",
2588
+ pending: "Pendente",
2589
+ accepted: "Aceito",
2590
+ rejected: "Recusado",
2591
+ canceled: "Cancelado",
2592
+ },
2593
+ },
2594
+ settings: {
2595
+ generalTitle: "Geral",
2596
+ generalDescription: "Atualize as informações da sua organização.",
2597
+ readOnlyNote: "Somente proprietários podem alterar as configurações.",
2598
+ nameLabel: "Nome da organização",
2599
+ slugLabel: "Slug",
2600
+ logoLabel: "Logo",
2601
+ logoUpload: "Enviar",
2602
+ logoReplace: "Substituir",
2603
+ logoClear: "Remover",
2604
+ logoUploaded: "Logo enviado — salve para aplicar",
2605
+ logoUploadFailed: "Falha ao enviar o logo",
2606
+ save: "Salvar alterações",
2607
+ saved: "Configurações salvas",
2608
+ saveFailed: "Falha ao salvar as configurações",
2609
+ leaveTitle: "Sair da organização",
2610
+ leaveDescription: "Você perderá o acesso a esta organização.",
2611
+ leaveAction: "Sair",
2612
+ leaveConfirmTitle: "Sair da organização?",
2613
+ leaveConfirmDescription: "Tem certeza de que deseja sair de {{name}}? Você perderá o acesso imediatamente.",
2614
+ leaveConfirmAction: "Sair",
2615
+ leftOrg: "Você saiu da organização",
2616
+ leaveFailed: "Falha ao sair da organização",
2617
+ dangerZone: "Zona de perigo",
2618
+ deleteTitle: "Excluir organização",
2619
+ deleteDescription: "Exclua permanentemente esta organização e todos os seus dados.",
2620
+ deleteAction: "Excluir",
2621
+ deleteConfirmTitle: "Excluir organização?",
2622
+ deleteConfirmDescription: "Esta ação é irreversível. Todos os dados serão excluídos permanentemente. Digite o slug da organização para confirmar.",
2623
+ deleteConfirmSlugLabel: "Digite \"{{slug}}\" para confirmar",
2624
+ deleteConfirmAction: "Excluir organização",
2625
+ deleted: "Organização excluída",
2626
+ deleteFailed: "Falha ao excluir a organização",
2627
+ },
2628
+ accept: {
2629
+ title: "Você foi convidado",
2630
+ description: "Você foi convidado para entrar em {{orgName}} como {{role}}.",
2631
+ errorTitle: "Convite indisponível",
2632
+ goToOrgs: "Ir para as organizações",
2633
+ loading: "Carregando o convite…",
2634
+ organization: "Organização",
2635
+ role: "Função",
2636
+ expiresAt: "Expira em",
2637
+ accept: "Aceitar convite",
2638
+ accepted: "Convite aceito",
2639
+ acceptFailed: "Falha ao aceitar o convite",
2640
+ decline: "Recusar",
2641
+ declined: "Convite recusado",
2642
+ declineFailed: "Falha ao recusar o convite",
2643
+ },
2644
+ current: {
2645
+ label: "Organização atual",
2646
+ },
2647
+ switcher: {
2648
+ label: "Trocar de organização",
2649
+ groupLabel: "Organização de trabalho",
2650
+ groupHint: "Novos registros são criados aqui. As exibições mostram dados de todas as suas organizações.",
2651
+ manageMembers: "Gerenciar membros",
2652
+ },
2447
2653
  },
2448
2654
  notifications: {
2449
2655
  regionLabel: "Notificações",
@@ -2458,6 +2664,9 @@ const pt = {
2458
2664
  viewApprovals: "Ver aprovações",
2459
2665
  noPendingApprovals: "Sem aprovações pendentes",
2460
2666
  openApprovalsInbox: "Abrir caixa de aprovações",
2667
+ badgeTotal: "{{total}} no total",
2668
+ badgeNotifications: "{{unread}} notificações",
2669
+ badgeApprovals: "{{approvals}} aprovações pendentes",
2461
2670
  emptyUnread: "Tudo lido",
2462
2671
  filterUnread: "Não lidos",
2463
2672
  filterAll: "Todos",
@@ -2482,52 +2691,6 @@ const pt = {
2482
2691
  consentRequired: "Por favor, aceite a política de privacidade para continuar.",
2483
2692
  rateLimited: "Reserve um momento para revisar suas respostas antes de enviar.",
2484
2693
  redirectBlocked: "Envio aceito, mas a URL de redirecionamento foi bloqueada por segurança.",
2485
- demo: {
2486
- contactTitle: "Entrar em contato",
2487
- contactDescription: "Conte-nos sobre seu projeto e um representante de vendas entrará em contato em um dia útil.",
2488
- supportTitle: "Enviar solicitação de suporte",
2489
- supportDescription: "Descreva-nos o problema — nossa equipe responderá em um dia útil.",
2490
- thankYouSalesTitle: "Obrigado — recebemos sua mensagem!",
2491
- thankYouSalesMessage: "Um representante de vendas entrará em contato em um dia útil.",
2492
- thankYouSupportTitle: "Pronto — sua solicitação está na fila.",
2493
- thankYouSupportMessage: "Um engenheiro de suporte fará o acompanhamento em breve. Salve esta página se tiver capturas de tela adicionais.",
2494
- field: {
2495
- firstName: "Nome",
2496
- lastName: "Sobrenome",
2497
- email: "E-mail corporativo",
2498
- phone: "Telefone",
2499
- jobTitle: "Cargo",
2500
- company: "Empresa",
2501
- website: "Site",
2502
- industry: "Setor",
2503
- companySize: "Tamanho da empresa",
2504
- howCanWeHelp: "Como podemos ajudar?",
2505
- subject: "Assunto",
2506
- description: "Descrição",
2507
- issueType: "Tipo de problema",
2508
- priority: "Prioridade",
2509
- },
2510
- industry: {
2511
- technology: "Tecnologia",
2512
- software: "Software / SaaS",
2513
- finance: "Finanças",
2514
- healthcare: "Saúde",
2515
- retail: "Varejo",
2516
- other: "Outro",
2517
- },
2518
- issueType: {
2519
- question: "Pergunta",
2520
- problem: "Problema",
2521
- bug: "Bug",
2522
- feature_request: "Solicitação de recurso",
2523
- },
2524
- priority: {
2525
- low: "Baixa",
2526
- medium: "Média",
2527
- high: "Alta",
2528
- critical: "Crítica",
2529
- },
2530
- },
2531
2694
  },
2532
2695
  connectAgent: {
2533
2696
  disabled: {
@@ -2640,6 +2803,7 @@ const pt = {
2640
2803
  retry: "Tentar novamente",
2641
2804
  errors: {
2642
2805
  expired: "A solicitação expirou antes de ser aprovada. Comece novamente.",
2806
+ accessDenied: "A solicitação de conexão foi recusada. Comece novamente.",
2643
2807
  bindFailed: "Falha ao vincular.",
2644
2808
  deviceCodeFailed: "Falha na solicitação do código do dispositivo.",
2645
2809
  },
@@ -2705,10 +2869,16 @@ const pt = {
2705
2869
  installedBadge: "Instalado v{{version}}",
2706
2870
  load: {
2707
2871
  failed: "Não foi possível carregar o marketplace",
2708
- failedHint: "Por padrão, este runtime aponta para o cloud público ObjectStack. Certifique-se de que o runtime está online.",
2872
+ failedHintConfigured: "Este runtime acessa o marketplace através do plano de controle em {{url}}. Verifique se ele está online e acessível a partir daqui.",
2873
+ failedHintSameOrigin: "Este runtime serve o catálogo do marketplace por conta própria. Verifique se o runtime está online.",
2709
2874
  packageFailed: "Não foi possível carregar o pacote",
2710
2875
  notFound: "Não encontrado.",
2711
2876
  },
2877
+ disabled: {
2878
+ title: "O marketplace de aplicativos está desativado",
2879
+ description: "Este runtime não tem marketplace configurado, portanto não há nada para explorar ou instalar aqui.",
2880
+ hint: "Esse é o estado esperado quando o runtime é iniciado com <code>OS_CLOUD_URL=off</code> (ou <code>none</code>, <code>local</code>, <code>disabled</code>). Para ativar o marketplace, aponte <code>OS_CLOUD_URL</code> para um plano de controle e reinicie o runtime.",
2881
+ },
2712
2882
  detail: {
2713
2883
  homepage: "Página inicial",
2714
2884
  installedV: "Instalado · v{{version}}",
@@ -2744,6 +2914,7 @@ const pt = {
2744
2914
  dismiss: "Fechar",
2745
2915
  openOnCloud: "Abrir na nuvem",
2746
2916
  backHome: "Voltar ao início",
2917
+ updateTo: "Atualizar",
2747
2918
  },
2748
2919
  install: {
2749
2920
  dialogTitle: "Instalar {{name}}",
@@ -2760,6 +2931,37 @@ const pt = {
2760
2931
  localManifestConflict: "{{message}}\nNota: Um aplicativo local já possui este manifest_id. Remova-o primeiro de objectstack.config.ts.",
2761
2932
  localUnauthorized: "Faça login neste runtime primeiro.",
2762
2933
  localMarketplaceUnavailable: "Este runtime não tem OS_CLOUD_URL configurado.",
2934
+ updateTo: "Atualizar → v{{version}}",
2935
+ installedVersion: "Instalado v{{version}}",
2936
+ },
2937
+ // objectui#3546 — the MarketplacePage "Your organization" strip.
2938
+ org: {
2939
+ heading: "Sua organização",
2940
+ install: "Instalar",
2941
+ installed: "{{name}} instalado",
2942
+ installedBadge: "Instalado",
2943
+ installing: "Instalando…",
2944
+ },
2945
+ // ADR-0025 PD4 §3.5/§3.11 — the pre-install consent panel
2946
+ // (PluginDisclosure.tsx). `runtime` is a CLOSED enum: spec
2947
+ // PluginRuntimeSchema = z.enum(['node', 'sandbox', 'worker']).
2948
+ disclosure: {
2949
+ containsCode: "Este pacote contém código",
2950
+ reviewed: "Revisado e aprovado",
2951
+ unreviewed: "Ainda não revisado",
2952
+ signed: "Assinado",
2953
+ grantsIntro: "Na instalação, este pacote receberá:",
2954
+ services: "Serviços da plataforma",
2955
+ hooks: "Hooks de ciclo de vida",
2956
+ network: "Acesso à rede",
2957
+ fs: "Acesso ao sistema de arquivos",
2958
+ noPermissions: "Não solicita permissões especiais.",
2959
+ acknowledge: "Entendo que este pacote executa código e recebe as permissões acima.",
2960
+ runtime: {
2961
+ node: "No processo · confiança total",
2962
+ sandbox: "Em sandbox",
2963
+ worker: "Fora do processo",
2964
+ },
2763
2965
  },
2764
2966
  uninstall: {
2765
2967
  confirm: "Desinstalar {{manifestId}} v{{version}} deste runtime?\n\nO manifesto em cache será removido.",
@@ -2916,12 +3118,19 @@ const pt = {
2916
3118
  submittedAgo: 'Enviada {{when}}',
2917
3119
  completedAt: 'Concluída {{when}}',
2918
3120
  waitingOn: 'Aguardando',
3121
+ approverNameSeparator: ', ',
3122
+ approverUnstaffed: '{{seat}} (atualmente sem titular)',
2919
3123
  history: 'Atividade',
2920
3124
  noActions: 'Nenhuma ação ainda.',
2921
3125
  actSubmit: 'Enviada',
2922
3126
  actApprove: 'Aprovada',
2923
3127
  actReject: 'Rejeitada',
2924
3128
  actRecall: 'Retirada',
3129
+ overrideActionLabel: '{{action}} (substituição)',
3130
+ overrideNotice: 'Você não ocupa nenhuma vaga de aprovador nesta etapa. Ao continuar, será usada a sua substituição de administrador: a etapa é finalizada imediatamente e qualquer aprovador que ainda não agiu é ignorado. A decisão é registrada como substituição de administrador.',
3131
+ overrideNoticeWho: 'Você não ocupa nenhuma vaga de aprovador nesta etapa. Ao continuar, será usada a sua substituição de administrador: a etapa é finalizada imediatamente e os aprovadores que ainda não agiram são ignorados — {{who}}. A decisão é registrada como substituição de administrador.',
3132
+ viaOverrideChip: 'Substituição de administrador',
3133
+ viaOverrideHint: 'Quem agiu não ocupava vaga de aprovador nesta etapa — admitido pela via de substituição de administrador.',
2925
3134
  rawData: 'Dados brutos (JSON)',
2926
3135
  copy: 'Copiar',
2927
3136
  copied: 'Copiado',
@@ -3008,6 +3217,39 @@ const pt = {
3008
3217
  detailChangedKeys: 'Também alterado:',
3009
3218
  confirmNote: 'Publicar libera atomicamente todos os {{count}} rascunhos pendentes deste pacote.',
3010
3219
  publishConfirm: 'Publicar tudo',
3220
+ // [objectui#5418] Pre-publish security-posture findings, shown next to
3221
+ // the confirm button so a refusal the door would issue is read BEFORE
3222
+ // the click rather than as a toast after the batch rolled back.
3223
+ securityBlockTitle: 'A publicação será recusada — {{count}} item(ns) precisam de uma decisão primeiro',
3224
+ securityBlockWhere: 'Corrija no objeto em Configurações → Compartilhamento de registros e publique novamente.',
3225
+ },
3226
+ // ADR-0045 — the materialized-but-unlisted app banner
3227
+ // (UnpublishedAppBar.tsx), sibling of draftBar above.
3228
+ unpublishedBar: {
3229
+ message: 'App não publicado — totalmente funcional, mas somente os criadores o veem. Publique-o para que seus usuários o vejam.',
3230
+ publish: 'Publicar',
3231
+ publishing: 'Publicando…',
3232
+ published: 'Publicado! O app já está visível para seus usuários.',
3233
+ publishFailed: 'Falha ao publicar',
3234
+ },
3235
+ // ADR-0067 — the append-only build/revert timeline (CommitTimeline.tsx);
3236
+ // `button` is the banner's entry point into it.
3237
+ history: {
3238
+ button: 'Histórico',
3239
+ title: 'Histórico de compilações',
3240
+ description: 'Todas as alterações deste app, as mais recentes primeiro. Desfaça qualquer etapa para revertê-la — não é necessário confirmar a publicação.',
3241
+ loadFailed: 'Não foi possível carregar o histórico:',
3242
+ loadFailedUnavailable: 'Armazenamento de commits temporariamente inacessível — esta leitura não aconteceu, portanto nenhum histórico é exibido. Tente novamente em instantes.',
3243
+ loading: 'Carregando histórico…',
3244
+ empty: 'Ainda não há histórico para este app.',
3245
+ revertLabel: 'Uma alteração foi desfeita',
3246
+ applyLabel: 'Alteração de compilação',
3247
+ revert: 'desfazer',
3248
+ items: 'itens',
3249
+ revertAction: 'Desfazer',
3250
+ reverted: 'Desfeito — a alteração foi revertida.',
3251
+ revertFailed: 'Falha ao desfazer',
3252
+ revertUnavailable: 'Armazenamento de commits temporariamente inacessível — a reversão pode não ter sido aplicada. Reabra este histórico para verificar antes de tentar novamente.',
3011
3253
  },
3012
3254
  },
3013
3255
  filterBuilder: {
@@ -3026,10 +3268,15 @@ const pt = {
3026
3268
  noResults: "Sem resultados",
3027
3269
  searchField: "Pesquisar {{label}}…",
3028
3270
  enterId: "Inserir ID de {{label}}",
3271
+ addValue: "Digite um valor e pressione Enter",
3272
+ removeValue: "Remover {{value}}",
3273
+ rangeStart: "De",
3274
+ rangeEnd: "Até",
3029
3275
  operators: {
3030
3276
  equals: "Igual a",
3031
3277
  notEquals: "Diferente de",
3032
3278
  contains: "Contém",
3279
+ containsCaseInsensitive: "Contém (ignorar maiúsculas)",
3033
3280
  notContains: "Não contém",
3034
3281
  isEmpty: "Está vazio",
3035
3282
  isNotEmpty: "Não está vazio",
@@ -3042,6 +3289,12 @@ const pt = {
3042
3289
  between: "Entre",
3043
3290
  in: "Em",
3044
3291
  notIn: "Não em",
3292
+ startsWith: "Começa com",
3293
+ endsWith: "Termina com",
3294
+ isNull: "É null",
3295
+ isNotNull: "Não é null",
3296
+ exists: "Está definido",
3297
+ notExists: "Não está definido",
3045
3298
  },
3046
3299
  },
3047
3300
  sortBuilder: {
@@ -3087,5 +3340,64 @@ const pt = {
3087
3340
  statusIdle: "inativo",
3088
3341
  statusAway: "ausente",
3089
3342
  },
3343
+ wizard: {
3344
+ missingRequired: "Preencha os campos obrigatórios: {{fields}}",
3345
+ },
3346
+ flowRunner: {
3347
+ title: 'Entrada',
3348
+ submitting: 'Enviando…',
3349
+ saveAndContinue: 'Salvar e continuar',
3350
+ nextStep: 'Salvo — próxima etapa',
3351
+ completed: 'Fluxo "{{flow}}" concluído',
3352
+ },
3353
+ appManagement: {
3354
+ title: "Aplicativos",
3355
+ subtitle: "Gerencie todos os aplicativos configurados",
3356
+ newApp: "Novo aplicativo",
3357
+ searchLabel: "Pesquisar aplicativos",
3358
+ searchPlaceholder: "Pesquisar aplicativos…",
3359
+ selectedCount: "{{n}} selecionados",
3360
+ bulkEnable: "Habilitar",
3361
+ bulkDisable: "Desabilitar",
3362
+ selectAll: "Selecionar tudo ({{n}})",
3363
+ empty: "Nenhum aplicativo encontrado.",
3364
+ defaultBadge: "Padrão",
3365
+ active: "Ativo",
3366
+ inactive: "Inativo",
3367
+ selectApp: "Selecionar {{name}}",
3368
+ openApp: "Abrir aplicativo",
3369
+ openAppNamed: "Abrir {{name}}",
3370
+ editApp: "Editar aplicativo",
3371
+ editAppNamed: "Editar {{name}}",
3372
+ editWithAi: "Editar com IA",
3373
+ editWithAiNamed: "Editar {{name}} com IA",
3374
+ enableApp: "Habilitar aplicativo",
3375
+ disableApp: "Desabilitar aplicativo",
3376
+ enableAppNamed: "Habilitar {{name}}",
3377
+ disableAppNamed: "Desabilitar {{name}}",
3378
+ setDefault: "Definir como padrão",
3379
+ setDefaultNamed: "Definir {{name}} como padrão",
3380
+ deleteApp: "Excluir aplicativo",
3381
+ deleteAppNamed: "Excluir {{name}}",
3382
+ confirmDelete: "Clique novamente para confirmar a exclusão",
3383
+ confirmDeleteNamed: "Confirmar a exclusão de {{name}}",
3384
+ toast: {
3385
+ noClient: "Não é possível acessar o serviço de metadados",
3386
+ unknownError: "erro desconhecido",
3387
+ appEnabled: "{{name}} habilitado",
3388
+ appDisabled: "{{name}} desabilitado",
3389
+ toggleFailed: "Falha ao alterar o status do aplicativo: {{reason}}",
3390
+ setDefaultDone: "{{name}} definido como padrão",
3391
+ setDefaultFailed: "Falha ao definir o aplicativo padrão: {{reason}}",
3392
+ appDeleted: "{{name}} excluído",
3393
+ deleteFailed: "Falha ao excluir o aplicativo: {{reason}}",
3394
+ bulkEnabled: "{{n}} aplicativos habilitados",
3395
+ bulkDisabled: "{{n}} aplicativos desabilitados",
3396
+ bulkFailed: "Falha em {{n}}: {{details}}",
3397
+ bulkFailureEntry: "{{name}} ({{reason}})",
3398
+ bulkFailureJoiner: "; ",
3399
+ bulkOperationFailed: "Falha na operação em massa: {{reason}}",
3400
+ },
3401
+ },
3090
3402
  };
3091
3403
  export default pt;