@object-ui/i18n 17.5.0 → 17.7.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 (58) hide show
  1. package/CHANGELOG.md +4954 -0
  2. package/README.md +234 -13
  3. package/dist/builtinAggregateLabels.d.ts +40 -0
  4. package/dist/builtinAggregateLabels.js +23 -0
  5. package/dist/currency.d.ts +27 -3
  6. package/dist/currency.js +28 -4
  7. package/dist/fallbackInterpolation.d.ts +79 -0
  8. package/dist/fallbackInterpolation.js +124 -0
  9. package/dist/i18n.d.ts +28 -2
  10. package/dist/i18n.js +99 -17
  11. package/dist/index.d.ts +17 -23
  12. package/dist/index.js +51 -27
  13. package/dist/locales/ar.d.ts +1113 -370
  14. package/dist/locales/ar.js +1276 -428
  15. package/dist/locales/de.d.ts +785 -370
  16. package/dist/locales/de.js +896 -401
  17. package/dist/locales/en.d.ts +800 -385
  18. package/dist/locales/en.js +1261 -419
  19. package/dist/locales/es.d.ts +867 -370
  20. package/dist/locales/es.js +976 -398
  21. package/dist/locales/fr.d.ts +867 -370
  22. package/dist/locales/fr.js +976 -399
  23. package/dist/locales/index.d.ts +8682 -3761
  24. package/dist/locales/index.js +68 -29
  25. package/dist/locales/ja.d.ts +785 -370
  26. package/dist/locales/ja.js +891 -395
  27. package/dist/locales/ko.d.ts +785 -370
  28. package/dist/locales/ko.js +893 -399
  29. package/dist/locales/pt.d.ts +867 -370
  30. package/dist/locales/pt.js +975 -397
  31. package/dist/locales/registry.d.ts +102 -0
  32. package/dist/locales/registry.js +220 -0
  33. package/dist/locales/rtl.d.ts +24 -0
  34. package/dist/locales/rtl.js +26 -0
  35. package/dist/locales/ru.d.ts +949 -370
  36. package/dist/locales/ru.js +1093 -419
  37. package/dist/locales/zh.d.ts +803 -388
  38. package/dist/locales/zh.js +899 -388
  39. package/dist/pickLocalized.d.ts +67 -0
  40. package/dist/pickLocalized.js +114 -0
  41. package/dist/provider.d.ts +102 -13
  42. package/dist/provider.js +335 -50
  43. package/dist/translateFn.d.ts +29 -0
  44. package/dist/translateFn.js +8 -0
  45. package/dist/useDisplayLocale.d.ts +11 -0
  46. package/dist/useDisplayLocale.js +13 -2
  47. package/dist/useObjectLabel.d.ts +118 -22
  48. package/dist/useObjectLabel.js +148 -23
  49. package/dist/useSafeTranslation.js +41 -43
  50. package/dist/utils/formatting.d.ts +16 -0
  51. package/dist/utils/formatting.js +23 -3
  52. package/dist/utils/index.d.ts +4 -4
  53. package/dist/utils/index.js +4 -4
  54. package/dist/utils/spec-formatters.d.ts +13 -23
  55. package/dist/utils/spec-formatters.js +41 -2
  56. package/dist/utils/spec-translations.d.ts +16 -3
  57. package/dist/utils/spec-translations.js +52 -13
  58. package/package.json +12 -6
@@ -19,10 +19,12 @@ const pt = {
19
19
  manage_users: "Gerenciar usuários",
20
20
  manage_org_users: "Gerenciar usuários da organização",
21
21
  manage_metadata: "Gerenciar metadados",
22
+ manage_org_presentation: "Gerenciar a apresentação da organização",
22
23
  manage_platform_settings: "Gerenciar configurações da plataforma",
23
24
  setup_access: "Acesso à configuração",
24
25
  setup_write: "Gravação de configurações",
25
26
  studio_access: "Acesso ao Studio",
27
+ manage_sharing: "Gerenciar compartilhamento",
26
28
  },
27
29
  group: {
28
30
  platform: 'Plataforma',
@@ -38,12 +40,20 @@ const pt = {
38
40
  more: "+{{count}} mais",
39
41
  objects: "{{count}} objetos",
40
42
  objects_one: "{{count}} objeto",
43
+ objects_many: "{{count}} de objetos",
44
+ objects_other: "{{count}} objetos",
41
45
  fields: "{{count}} regras de campo",
42
46
  fields_one: "{{count}} regra de campo",
47
+ fields_many: "{{count}} de regras de campo",
48
+ fields_other: "{{count}} regras de campo",
43
49
  rls: "{{count}} políticas RLS",
44
50
  rls_one: "{{count}} política RLS",
51
+ rls_many: "{{count}} de políticas RLS",
52
+ rls_other: "{{count}} políticas RLS",
45
53
  tabs: "{{count}} regras de aba",
46
54
  tabs_one: "{{count}} regra de aba",
55
+ tabs_many: "{{count}} de regras de aba",
56
+ tabs_other: "{{count}} regras de aba",
47
57
  adminScope: "Administração delegada configurada",
48
58
  designInStudio: "Projetar no Studio →",
49
59
  designInStudioHint: "Projetar no Studio",
@@ -62,7 +72,9 @@ const pt = {
62
72
  selectFirst: 'Selecione primeiro {{fields}}',
63
73
  selectRecord: 'Selecionar registro',
64
74
  recordCount: '{{count}} registros',
65
- recordCountOne: '1 registro',
75
+ recordCount_one: '{{count}} registro',
76
+ recordCount_many: '{{count}} de registros',
77
+ recordCount_other: '{{count}} registros',
66
78
  pageOf: 'Página {{current}} de {{total}}',
67
79
  filters: 'Filtros',
68
80
  clear: 'Limpar',
@@ -81,6 +93,7 @@ const pt = {
81
93
  removeFromFavorites: "Remover dos favoritos",
82
94
  loading: "Carregando…",
83
95
  save: "Salvar",
96
+ discard: "Descartar",
84
97
  cancel: "Cancelar",
85
98
  delete: "Excluir",
86
99
  edit: "Editar",
@@ -114,7 +127,9 @@ const pt = {
114
127
  closePanel: "Fechar painel",
115
128
  resizeDrawer: "Redimensionar painel",
116
129
  itemCount: "{{count}} itens",
117
- itemCountOne: "{{count}} item",
130
+ itemCount_one: "{{count}} item",
131
+ itemCount_many: "{{count}} de itens",
132
+ itemCount_other: "{{count}} itens",
118
133
  toggleSidebar: "Alternar barra lateral",
119
134
  package: "Pacote",
120
135
  done: "Concluído",
@@ -122,6 +137,16 @@ const pt = {
122
137
  record: "Registro",
123
138
  retry: "Tentar novamente",
124
139
  printDialogHint: "Abre a caixa de diálogo de impressão do navegador (não é uma exportação para PDF)",
140
+ // The non-grid row ceiling's footnote (objectui#7210). Two keys because
141
+ // there are two conditions: a reported `total` states the fact with BOTH
142
+ // numbers, a missing one cannot name how many. Kept terse deliberately —
143
+ // this copy is eagerly loaded, and since objectui#7399 these bytes are
144
+ // budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
145
+ // headroom is deliberately NOT restated here — it moves on every
146
+ // re-baseline, and the figure that was here went stale.
147
+ // `pnpm check:eager-closure` prints it.
148
+ rowCeilingNote: "Mostrando os primeiros {{shown}} de {{total}} registros. Restrinja o filtro.",
149
+ rowCeilingNoteUnknownTotal: "Mostrando os primeiros {{shown}} registros. Restrinja o filtro.",
125
150
  },
126
151
  actions: {
127
152
  decisionOutput: {
@@ -133,6 +158,14 @@ const pt = {
133
158
  acknowledge: 'Eu o salvei',
134
159
  copyAll: 'Copiar tudo',
135
160
  },
161
+ notAvailableHere: '"{{action}}" não está disponível na página atual.',
162
+ completedSuccessfully: 'A ação foi concluída com sucesso',
163
+ failed: 'A ação falhou',
164
+ parallelFailed: 'Uma ou mais ações paralelas falharam',
165
+ undo: 'Desfazer',
166
+ undone: 'Alteração desfeita',
167
+ undoneOperation: 'Desfazer: {{description}}',
168
+ redoneOperation: 'Refazer: {{description}}',
136
169
  },
137
170
  validation: {
138
171
  required: "{{field}} é obrigatório",
@@ -150,19 +183,45 @@ const pt = {
150
183
  },
151
184
  form: {
152
185
  noPermissionToSave: "Você não tem permissão para salvar este registro.",
186
+ noPermissionToCreate: "Você não tem permissão para criar registros de {{object}}. Os campos são somente leitura.",
187
+ noPermissionToEdit: "Você não tem permissão para editar registros de {{object}}. Os campos são somente leitura.",
153
188
  submitFailed: "Não foi possível salvar. Tente novamente.",
189
+ uploadInFlight: "Aguarde a conclusão do upload antes de salvar.",
190
+ clearedOnHide: "O que não se aplica mais aos valores atuais foi limpo: {{fields}}",
191
+ visibleWhenFaulted: "Não é possível enviar: não foi possível avaliar a regra visibleWhen de {{fields}}. A regra precisa ser corrigida antes que este formulário possa ser enviado.",
154
192
  discardTitle: "Descartar as alterações?",
155
193
  discardMessage: "Você tem alterações não salvas. Se fechar este formulário agora, suas edições serão perdidas.",
156
194
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
157
195
  // description, used when the form declares no `description` of its own.
158
196
  dialogDescriptionFallback: "Preencha os campos do formulário e depois envie ou cancele.",
197
+ deniedDescription: "Você não tem permissão para editar este campo.",
198
+ masterDetail: {
199
+ loadingColumns: "Carregando colunas…",
200
+ subtotal: "Subtotal",
201
+ tax: "Imposto ({{rate}}%)",
202
+ total: "Total",
203
+ lineItem: "Item de linha",
204
+ rowTitle: "{{title}} — linha {{row}}",
205
+ applyRow: "Aplicar",
206
+ editorDescription: "Preencha o registro e seus itens de linha e depois salve.",
207
+ noChildObject: "Esta coleção não tem nenhum objeto filho configurado: defina {{property}} como o objeto cujas linhas ela lista.",
208
+ schemaUnavailable: "Não foi possível carregar o esquema de {{object}}, portanto esta coleção não tem colunas para mostrar. Verifique se o objeto existe e pode ser lido e depois recarregue.",
209
+ noRelationshipField: "Não foi possível determinar como {{object}} se vincula a {{parent}}: nenhum campo lookup ou master_detail dele faz referência ao pai. Defina {{property}} nesta coleção como o campo que contém o registro pai.",
210
+ },
211
+ lineItems: {
212
+ title: "Itens de linha",
213
+ saveRecordFirst: "Salve o registro primeiro para adicionar itens de linha.",
214
+ notLoaded: "Os itens de linha deste registro não foram carregados.",
215
+ loadFailed: "Falha ao carregar os itens de linha",
216
+ saveFailed: "Falha ao salvar os itens de linha",
217
+ noChildObject: "Este painel não tem nenhum objeto filho configurado: defina {{property}} como o objeto cujas linhas ele lista.",
218
+ },
159
219
  keepEditing: "Continuar editando",
160
220
  discard: "Descartar",
161
221
  conflictTitle: "Conflito ao salvar",
162
222
  conflictMessage: "Outra pessoa alterou este registro enquanto você editava. Sobrescrever substituirá as alterações dela pelas suas.",
163
223
  conflictLatestVersion: "Salvamento dela: {{time}}",
164
224
  conflictOverwrite: "Sobrescrever",
165
- addItem: "Adicionar item",
166
225
  removeItem: "Remover item",
167
226
  fieldRequired: "Este campo é obrigatório",
168
227
  invalidFormat: "Formato inválido",
@@ -180,6 +239,12 @@ const pt = {
180
239
  createSuccess: "{{object}} criado",
181
240
  updateSuccess: "{{object}} atualizado",
182
241
  deleteSuccess: "{{object}} excluído",
242
+ created: "Criado",
243
+ saved: "Salvo",
244
+ savedNamed: "{{title}} salvo",
245
+ submitted: "Enviado",
246
+ errorLoading: "Erro ao carregar formulário",
247
+ navigateRefused: "O destino `navigateOnSuccess` declarado para este formulário foi recusado, então a navegação não aconteceu.",
183
248
  fullscreen: {
184
249
  title: "Editar texto",
185
250
  description: "Edite o valor de texto completo e depois salve ou cancele as alterações.",
@@ -204,6 +269,9 @@ const pt = {
204
269
  },
205
270
  relativeDate: {
206
271
  overdue: "Atrasado {{count}} d",
272
+ overdue_one: "Atrasado {{count}} d",
273
+ overdue_many: "Atrasado {{count}} d",
274
+ overdue_other: "Atrasado {{count}} d",
207
275
  },
208
276
  file: {
209
277
  dragDropHere: 'Arraste e solte arquivos aqui',
@@ -220,6 +288,7 @@ const pt = {
220
288
  remove: 'Remover {{name}}',
221
289
  exceedsMaxSize: '"{{name}}" excede o tamanho máximo ({{max}} MB)',
222
290
  uploadFailed: 'Falha ao enviar "{{name}}": {{error}}',
291
+ uploadIncomplete: 'O envio de "{{name}}" não foi concluído: nenhum ID de arquivo foi retornado, então nada foi salvo',
223
292
  },
224
293
  richText: {
225
294
  format: "Formato: {{format}}",
@@ -247,6 +316,9 @@ const pt = {
247
316
  selectBusinessUnit: "Selecionar uma unidade de negócio",
248
317
  selectPosition: "Selecionar um cargo",
249
318
  selectUnitAndSubordinates: "Selecionar uma unidade de negócio",
319
+ selectField: "Selecionar um campo de usuário",
320
+ noUserFields: "Este objeto não tem campos de usuário",
321
+ fieldNotUserTyped: "{{name}} — não é um campo de usuário",
250
322
  },
251
323
  filterCondition: {
252
324
  selectObjectFirst: "Selecione primeiro um objeto.",
@@ -257,13 +329,51 @@ const pt = {
257
329
  editAsJson: "Editar como JSON",
258
330
  useVisualBuilder: "Usar o construtor visual",
259
331
  },
332
+ object: {
333
+ invalidJson: "JSON inválido",
334
+ },
335
+ location: {
336
+ refusedFormat: "Não salvo: informe um par latitude, longitude (exemplo: 30.2741, 120.1551).",
337
+ refusedRange: "Não salvo: {{detail}}",
338
+ latitude: "latitude",
339
+ longitude: "longitude",
340
+ refusedResidueOne: "Não salvo: {{name}} “{{text}}” não é um número. Informe decimais simples (exemplo: 30.2741, 120.1551).",
341
+ refusedResidue: "Não salvo: {{name}} “{{text}}” e {{otherName}} “{{otherText}}” não são números. Informe decimais simples (exemplo: 30.2741, 120.1551).",
342
+ },
343
+ date: {
344
+ impossibleDay: "O valor salvo “{{value}}” não é uma data real. Escolha uma data para substituí-lo.",
345
+ },
346
+ dateTime: {
347
+ impossibleDay: "O valor salvo “{{value}}” não é uma data real. Escolha uma data e uma hora para substituí-lo.",
348
+ },
349
+ number: {
350
+ badInput: "Não salvo: o texto deste campo não é um número. Informe um decimal simples (exemplo: {{example}}).",
351
+ },
260
352
  tags: {
261
353
  placeholder: "Digite e pressione Enter para adicionar…",
262
354
  },
355
+ // objectui#4028 — `AddressField`'s five sub-labels.
356
+ address: {
357
+ street: "Endereço (rua)",
358
+ city: "Cidade",
359
+ state: "Estado / Província",
360
+ postalCode: "Código postal",
361
+ country: "País",
362
+ },
263
363
  textarea: {
264
364
  characterCount: "Contagem de caracteres: {{count}} de {{max}}",
265
365
  charactersRemaining: "Caracteres restantes: {{count}}",
266
366
  },
367
+ grid: {
368
+ addLine: "Adicionar linha",
369
+ noItems: "Nenhum item",
370
+ noItemsAddHint: "Ainda não há itens — clique em “{{label}}” para começar.",
371
+ optionalColumns: "Colunas opcionais",
372
+ computed: "Calculado",
373
+ openRow: "Abrir linha",
374
+ duplicateRow: "Duplicar linha",
375
+ removeRow: "Remover linha",
376
+ },
267
377
  },
268
378
  table: {
269
379
  rowsPerPage: "Linhas por página",
@@ -292,23 +402,41 @@ const pt = {
292
402
  open: "Abrir",
293
403
  search: "Pesquisar…",
294
404
  modified: "{{count}} linha(s) modificada(s)",
405
+ modified_one: "{{count}} linha modificada",
406
+ modified_many: "{{count}} de linhas modificadas",
407
+ modified_other: "{{count}} linhas modificadas",
295
408
  saveFailed: 'Falha ao salvar',
296
409
  selected: "{{count}} selecionado(s)",
410
+ selected_one: "{{count}} selecionado",
411
+ selected_many: "{{count}} selecionados",
412
+ selected_other: "{{count}} selecionados",
297
413
  edit: "Editar",
298
414
  delete: "Excluir",
299
415
  },
300
416
  grid: {
301
417
  bulkSelected: "{{count}} selecionados",
418
+ bulkSelected_one: "{{count}} selecionado",
419
+ bulkSelected_many: "{{count}} selecionados",
420
+ bulkSelected_other: "{{count}} selecionados",
302
421
  bulkSelectedAllMatches: "{{count}} selecionados (todas as correspondências)",
303
422
  bulkClear: "Limpar seleção",
304
423
  bulkAllOnPage: "Os {{count}} desta página estão selecionados.",
424
+ bulkAllOnPage_one: "{{count}} registro desta página está selecionado.",
425
+ bulkAllOnPage_many: "Os {{count}} desta página estão selecionados.",
426
+ bulkAllOnPage_other: "Os {{count}} desta página estão selecionados.",
305
427
  bulkSelectAllMatching: "Selecionar todas as {{count}} correspondências",
306
428
  bulkAllMatchingSelected: "Todos os {{count}} registros correspondentes estão selecionados.",
307
429
  bulk: {
308
430
  confirmDefault: "Isto será aplicado a {{count}} registro(s).",
431
+ confirmDefault_one: "Isto será aplicado a {{count}} registro.",
432
+ confirmDefault_many: "Isto será aplicado a {{count}} de registros.",
433
+ confirmDefault_other: "Isto será aplicado a {{count}} registros.",
309
434
  overLimit: "A seleção ({{count}}) excede o limite da ação ({{limit}}). Reduza a seleção para prosseguir.",
310
435
  affectedRecords: "Registros afetados ({{count}}):",
311
436
  skippedIneligible: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
437
+ skippedIneligible_one: '{{count}} dos registros selecionados não é elegível para esta ação e será ignorado.',
438
+ skippedIneligible_many: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
439
+ skippedIneligible_other: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
312
440
  rowFallback: "Linha {{index}}",
313
441
  andMore: "… e mais {{count}}",
314
442
  processed: "{{count}} / {{total}} processados",
@@ -326,7 +454,6 @@ const pt = {
326
454
  undo: "Desfazer",
327
455
  undoing: "Desfazendo…",
328
456
  done: "Concluído",
329
- selectPlaceholder: "Selecionar…",
330
457
  loading: "Carregando…",
331
458
  },
332
459
  actions: "Ações",
@@ -345,6 +472,14 @@ const pt = {
345
472
  yes: "Sim",
346
473
  no: "Não",
347
474
  systemFields: "Sistema",
475
+ // objectui#10881 — the grouped grid's two refusals: over a data source
476
+ // that cannot answer the group header query, and over rows a host
477
+ // handed in while declaring them one page of more. `queryGroupHeaders`
478
+ // is the member's name and stays untranslated.
479
+ grouping: {
480
+ needsHeaderQuery: "Esta visão está agrupada, mas sua fonte de dados não implementa queryGroupHeaders, portanto os grupos não podem ser contados. Remova o agrupamento para mostrar os registros.",
481
+ needsWholeRows: "O agrupamento precisa de todos os registros, mas esta grade recebeu apenas uma página deles, portanto os grupos não podem ser contados. Entregue todos os registros ou deixe a grade buscá-los em uma fonte de dados que implemente queryGroupHeaders.",
482
+ },
348
483
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
349
484
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
350
485
  // pack controls its own separator and word order.
@@ -371,10 +506,15 @@ const pt = {
371
506
  },
372
507
  import: {
373
508
  downloadTemplate: "Baixar modelo",
374
- downloadTemplateHint: "Obtenha um CSV com as colunas corretas (campos obrigatórios marcados com *).",
509
+ downloadTemplateHint: "Obtenha um arquivo Excel com as colunas que você pode importar (campos obrigatórios marcados com *) e instruções de preenchimento.",
375
510
  templateFileName: "{{object}}-import-template",
511
+ templateDownloadFailed: "Não foi possível baixar o modelo. Tente novamente.",
512
+ templateNotPermitted: "Você não tem permissão para criar registros deste objeto, portanto o modelo de importação não está disponível.",
376
513
  autoMatched: "Correspondência automática",
377
514
  autoMatchedSummary: "{{count}} coluna(s) com correspondência automática — revise e ajuste abaixo.",
515
+ autoMatchedSummary_one: "{{count}} coluna com correspondência automática — revise e ajuste abaixo.",
516
+ autoMatchedSummary_many: "{{count}} de colunas com correspondência automática — revise e ajuste abaixo.",
517
+ autoMatchedSummary_other: "{{count}} colunas com correspondência automática — revise e ajuste abaixo.",
378
518
  confidence: {
379
519
  high: "Confiança alta",
380
520
  medium: "Confiança média",
@@ -387,8 +527,17 @@ const pt = {
387
527
  cancelImport: "Cancelar a importação",
388
528
  importCancelled: "Importação cancelada",
389
529
  resultsTruncated: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
530
+ resultsTruncated_one: "Mostrando o primeiro resultado de linha ({{count}} de {{total}}).",
531
+ resultsTruncated_many: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
532
+ resultsTruncated_other: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
390
533
  createdCount: "{{count}} criados",
534
+ createdCount_one: "{{count}} criado",
535
+ createdCount_many: "{{count}} criados",
536
+ createdCount_other: "{{count}} criados",
391
537
  updatedCount: "{{count}} atualizados",
538
+ updatedCount_one: "{{count}} atualizado",
539
+ updatedCount_many: "{{count}} atualizados",
540
+ updatedCount_other: "{{count}} atualizados",
392
541
  downloadFailed: "Baixar as linhas com falha",
393
542
  options: "Opções de importação",
394
543
  writeMode: "Quando uma linha corresponde a um registro existente",
@@ -436,6 +585,9 @@ const pt = {
436
585
  historyColResult: "Resultado",
437
586
  historyColTime: "Quando",
438
587
  errorCount: "{{count}} erros",
588
+ errorCount_one: "{{count}} erro",
589
+ errorCount_many: "{{count}} de erros",
590
+ errorCount_other: "{{count}} erros",
439
591
  undoImport: "Desfazer a importação",
440
592
  undoing: "Desfazendo…",
441
593
  undoConfirm: "Desfazer esta importação? Os registros criados serão excluídos e os registros atualizados voltarão aos valores anteriores.",
@@ -496,7 +648,13 @@ const pt = {
496
648
  mapped: "Mapeado",
497
649
  skipped: "Pulado",
498
650
  rowsWithErrors: "{{count}} linha(s) com erros",
651
+ rowsWithErrors_one: "{{count}} linha com erros",
652
+ rowsWithErrors_many: "{{count}} de linhas com erros",
653
+ rowsWithErrors_other: "{{count}} linhas com erros",
499
654
  rowsCorrected: "{{count}} linha(s) corrigida(s)",
655
+ rowsCorrected_one: "{{count}} linha corrigida",
656
+ rowsCorrected_many: "{{count}} de linhas corrigidas",
657
+ rowsCorrected_other: "{{count}} linhas corrigidas",
500
658
  clickToFix: "— clique em uma célula destacada para editar em linha.",
501
659
  showingRows: "Mostrando {{shown}} de {{total}} linhas",
502
660
  importing: "Importando… {{progress}}%",
@@ -504,11 +662,17 @@ const pt = {
504
662
  imported: "{{count}} importado(s)",
505
663
  skippedCount: "{{count}} pulado(s)",
506
664
  moreErrors: "…e {{count}} erro(s) a mais",
665
+ moreErrors_one: "…e {{count}} erro a mais",
666
+ moreErrors_many: "…e {{count}} de erros a mais",
667
+ moreErrors_other: "…e {{count}} erros a mais",
507
668
  cancel: "Cancelar",
508
669
  back: "Voltar",
509
670
  next: "Próximo",
510
671
  close: "Fechar",
511
672
  importNRows: "Importar {{count}} linhas",
673
+ importNRows_one: "Importar {{count}} linha",
674
+ importNRows_many: "Importar {{count}} de linhas",
675
+ importNRows_other: "Importar {{count}} linhas",
512
676
  importingProgress: "Importando…",
513
677
  requiredMark: "*",
514
678
  required: "Obrigatório",
@@ -520,11 +684,38 @@ const pt = {
520
684
  month: "Mês",
521
685
  week: "Semana",
522
686
  day: "Dia",
523
- agenda: "Agenda",
524
687
  allDay: "Dia inteiro",
525
- noEvents: "Sem eventos",
526
688
  newEvent: "Novo evento",
527
689
  moreEvents: "+{{count}} mais",
690
+ unscheduled: "Sem agendamento ({{count}})",
691
+ loading: "Carregando calendário…",
692
+ loadError: "Erro: {{message}}",
693
+ configRequired: "Configuração do calendário necessária. Informe startDateField, a única chave obrigatória do calendário; o título do evento é resolvido sem titleField.",
694
+ configRequiredHint: "Ela pertence ao bloco calendar da visão. Uma página de interface não tem espaço de calendário próprio: aponte o sourceView dela para uma visão que declare um.",
695
+ eventDetails: "Detalhes do evento",
696
+ pullToRefresh: "Puxe para atualizar",
697
+ refreshing: "Atualizando…",
698
+ onDate: "Em {{date}}",
699
+ eventTitle: "Título",
700
+ eventTitlePlaceholder: "Sobre o que é este evento?",
701
+ creating: "Criando…",
702
+ titleRequired: "O título é obrigatório",
703
+ a11y: {
704
+ region: "Calendário",
705
+ grid: "Grade do calendário",
706
+ goToToday: "Ir para hoje",
707
+ previousPeriod: "Período anterior",
708
+ nextPeriod: "Período seguinte",
709
+ currentDate: "Data atual: {{date}}",
710
+ dayCell: "{{date}}, {{count}} eventos",
711
+ dayCell_one: "{{date}}, {{count}} evento",
712
+ dayCell_many: "{{date}}, {{count}} de eventos",
713
+ dayCell_other: "{{date}}, {{count}} eventos",
714
+ resizeEventEnd: "Alterar o fim do evento",
715
+ resizeEventEndHint: "Arraste para alterar a data de término",
716
+ resizeStart: "Alterar o início",
717
+ resizeEnd: "Alterar o fim",
718
+ },
528
719
  },
529
720
  list: {
530
721
  firstRunTitle: "Ainda não há nada aqui",
@@ -567,7 +758,9 @@ const pt = {
567
758
  refresh: "Atualizar",
568
759
  loading: "Carregando registros…",
569
760
  recordCount: "{{count}} registros",
570
- recordCountOne: "{{count}} registro",
761
+ recordCount_one: "{{count}} registro",
762
+ recordCount_many: "{{count}} de registros",
763
+ recordCount_other: "{{count}} registros",
571
764
  addRecord: "Adicionar registro",
572
765
  tabs: "Abas",
573
766
  allRecords: "Todos os registros",
@@ -599,7 +792,7 @@ const pt = {
599
792
  hideFieldsTitle: "Ocultar campos",
600
793
  dataLimitReached: "Os primeiros {{limit}} registros estão sendo exibidos. Pode haver mais dados disponíveis.",
601
794
  viewSettings: "Configurações de exibição",
602
- viewSettingsHint: "Agrupamento, cor, densidade e campos visíveis.",
795
+ viewSettingsHint: "Agrupamento, cor, densidade e campos visíveis. Aplica-se a todos os usuários desta exibição.",
603
796
  addGroup: "Adicionar campo de grupo",
604
797
  collapsedByDefault: "Recolhido por padrão",
605
798
  removeGroup: "Remover",
@@ -664,6 +857,17 @@ const pt = {
664
857
  },
665
858
  gantt: {
666
859
  rowLabel: "Itens",
860
+ unusableRange: {
861
+ malformedDate: "Intervalo de datas do gantt inutilizável: {{path}} é {{value}}, que não é uma data válida. Todas as datas do gantt têm de ser analisáveis: startDate e endDate de cada item de linha, além de qualquer minDate / maxDate fixado no esquema.",
862
+ malformedRow: "Linhas do gantt inutilizáveis: {{path}} é {{value}}, que não tem a forma de uma linha. Um gantt lê items como uma lista de linhas, cada linha como um objeto com label e os seus próprios items, e os items de cada linha como uma lista de barras; um null, um número, uma cadeia ou um objeto simples em qualquer dessas posições não pode ser desenhado.",
863
+ inverted: "Intervalo de datas do gantt inutilizável: minDate {{minDate}} é posterior a maxDate {{maxDate}}. Um minDate / maxDate fixado prevalece sobre o intervalo calculado a partir das linhas, pelo que este eixo não tem colunas e nenhuma barra pode ser colocada; troque os dois valores.",
864
+ },
865
+ },
866
+ unsupported: {
867
+ objectBoundGantt: "Variante \"gantt\" não suportada: uma linha do tempo vinculada a um objeto renderiza as variantes de feed ({{variants}}). O gantt precisa de linhas literais, cada uma com os seus próprios items aninhados, por isso o eixo gantt (scale) não tem efeito aqui.",
868
+ },
869
+ unconfigured: {
870
+ noDateAxis: "Eixo de datas da linha do tempo necessário: esta vista não declara nenhum campo de data e uma linha do tempo vinculada a um objeto não inventa nenhum. Declare um de: {{fields}}. O primeiro é a grafia da spec; os restantes são aliases legados.",
667
871
  },
668
872
  },
669
873
  gantt: {
@@ -681,6 +885,7 @@ const pt = {
681
885
  },
682
886
  aria: {
683
887
  taskList: "Lista de tarefas",
888
+ refreshing: "Atualizando…",
684
889
  },
685
890
  tooltip: {
686
891
  days: "d",
@@ -726,13 +931,22 @@ const pt = {
726
931
  conflict: {
727
932
  title: "Conflito de agendamento",
728
933
  body: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa(s) afetada(s)?",
934
+ body_one: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa afetada?",
935
+ body_many: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} de tarefas afetadas?",
936
+ body_other: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefas afetadas?",
729
937
  confirm: "Reagendar automaticamente",
730
938
  cancel: "Manter como está",
731
939
  },
732
940
  autoScheduleDlg: {
733
941
  title: "Agendamento automático",
734
942
  body: "Adiar {{count}} tarefa(s) para atender aos vínculos de dependência?",
943
+ body_one: "Adiar {{count}} tarefa para atender aos vínculos de dependência?",
944
+ body_many: "Adiar {{count}} de tarefas para atender aos vínculos de dependência?",
945
+ body_other: "Adiar {{count}} tarefas para atender aos vínculos de dependência?",
735
946
  skipped: "{{count}} tarefa(s) bloqueada(s) também violam os vínculos e foram ignoradas.",
947
+ skipped_one: "{{count}} tarefa bloqueada também viola os vínculos e foi ignorada.",
948
+ skipped_many: "{{count}} de tarefas bloqueadas também violam os vínculos e foram ignoradas.",
949
+ skipped_other: "{{count}} tarefas bloqueadas também violam os vínculos e foram ignoradas.",
736
950
  confirm: "Aplicar",
737
951
  cancel: "Cancelar",
738
952
  none: "Todas as dependências foram atendidas — nada a reagendar.",
@@ -811,6 +1025,7 @@ const pt = {
811
1025
  tabActionsFor: "Ações de exibição para {{name}}",
812
1026
  readonlyAriaLabel: "Exibição somente leitura",
813
1027
  readonlyTooltip: "Exibição do sistema — definida no código, somente leitura.",
1028
+ malformedFilter: "O filtro desta exibição é inválido, por isso nenhum registro é exibido: a condição {{subject}} não pode ser aplicada.",
814
1029
  },
815
1030
  designer: {
816
1031
  undo: "Desfazer",
@@ -838,7 +1053,9 @@ const pt = {
838
1053
  pageHeaderActions: "Ações do cabeçalho da página",
839
1054
  emojiPicker: "Seletor de emojis",
840
1055
  reactionCount: "{{emoji}} {{count}} reações",
841
- reactionCountOne: "{{emoji}} {{count}} reação",
1056
+ reactionCount_one: "{{emoji}} {{count}} reação",
1057
+ reactionCount_many: "{{emoji}} {{count}} de reações",
1058
+ reactionCount_other: "{{emoji}} {{count}} reações",
842
1059
  recordDetail: "Detalhe do registro",
843
1060
  recordDetailWithLabel: "Detalhe de {{label}}",
844
1061
  openAsFullPage: "Abrir como página inteira",
@@ -865,7 +1082,6 @@ const pt = {
865
1082
  viewAll: "Ver tudo",
866
1083
  new: "Novo",
867
1084
  add: "Adicionar",
868
- emptyValue: "—",
869
1085
  comments: "Comentários",
870
1086
  searchComments: "Pesquisar comentários…",
871
1087
  addCommentPlaceholder: "Adicionar comentário… (Ctrl+Enter para enviar)",
@@ -876,11 +1092,22 @@ const pt = {
876
1092
  unpin: "Desfixar",
877
1093
  justNow: "agora mesmo",
878
1094
  minutesAgo: "há {{count}} min",
1095
+ minutesAgo_one: "há {{count}} min",
1096
+ minutesAgo_many: "há {{count}} min",
1097
+ minutesAgo_other: "há {{count}} min",
879
1098
  hoursAgo: "há {{count}} h",
1099
+ hoursAgo_one: "há {{count}} h",
1100
+ hoursAgo_many: "há {{count}} h",
1101
+ hoursAgo_other: "há {{count}} h",
880
1102
  daysAgo: "há {{count}} d",
1103
+ daysAgo_one: "há {{count}} d",
1104
+ daysAgo_many: "há {{count}} d",
1105
+ daysAgo_other: "há {{count}} d",
881
1106
  dropFilesToUpload: "Arraste arquivos aqui ou clique para enviar",
882
1107
  attachmentCount: "{{count}} anexo",
883
- attachmentCountPlural: "{{count}} anexos",
1108
+ attachmentCount_one: "{{count}} anexo",
1109
+ attachmentCount_many: "{{count}} de anexos",
1110
+ attachmentCount_other: "{{count}} anexos",
884
1111
  removeAttachment: "Remover anexo",
885
1112
  // Record Attachments panel (enable.files, objectstack#4358)
886
1113
  attachments: "Anexos",
@@ -894,11 +1121,10 @@ const pt = {
894
1121
  attachmentDownloadDenied: "Você não tem acesso para baixar este anexo.",
895
1122
  attachmentAuthRequired: "Faça login para baixar este anexo.",
896
1123
  attachmentPermissionDenied: "Você não tem permissão para fazer isso.",
897
- unifiedDiff: "Visualização unificada",
898
- sideBySideDiff: "Visualização lado a lado",
899
- noChanges: "Sem alterações",
900
- previousVersion: "Anterior",
901
- currentVersion: "Atual",
1124
+ attachmentsAccessDenied: "Você não tem acesso a estes anexos.",
1125
+ attachmentsLoadFailed: "Não foi possível carregar os anexos deste registro.",
1126
+ attachmentsApiUnavailable: "A lista de anexos não está disponível neste objeto.",
1127
+ retryLoadAttachments: "Tentar novamente",
902
1128
  discussion: "Discussão",
903
1129
  showDiscussion: "Mostrar discussão ({{count}})",
904
1130
  hideDiscussion: "Ocultar discussão",
@@ -913,25 +1139,36 @@ const pt = {
913
1139
  writeComment: "Escreva um comentário…",
914
1140
  subscribedTooltip: "Inscrito — clique para cancelar inscrição",
915
1141
  unsubscribedTooltip: "Inscrever-se para notificações",
916
- firstRecord: "Primeiro registro (Home)",
917
- previousRecordKey: "Registro anterior (←)",
918
- nextRecordKey: "Próximo registro (→)",
919
- lastRecord: "Último registro (End)",
920
1142
  noRecords: "Sem registros",
921
- searchWhileNavigating: "Pesquisar durante a navegação",
922
- searchRecords: "Pesquisar registros…",
923
1143
  allActivity: "Toda atividade",
924
1144
  commentsOnly: "Apenas comentários",
925
1145
  fieldChangesFilter: "Alterações de campo",
926
1146
  tasksOnly: "Apenas tarefas",
927
1147
  leaveCommentPlaceholder: "Deixar um comentário… (Ctrl+Enter para enviar)",
928
1148
  noActivity: "Nenhuma atividade registrada",
1149
+ activityAccessDenied: "Você não tem permissão para ver a atividade deste registro.",
1150
+ commentsAccessDenied: "Você não tem permissão para ver os comentários deste registro.",
1151
+ // objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
1152
+ // `detail.*` pack did not already name, and the `formatFieldChange`
1153
+ // sentences, which are assembled in code and so need interpolation holes.
1154
+ allFilter: 'Tudo',
1155
+ createsFilter: 'Criações',
1156
+ deletesFilter: 'Exclusões',
1157
+ statusChangesFilter: 'Alterações de status',
1158
+ activityEmptyValue: '(vazio)',
1159
+ activityFieldChanged: 'Alterou {{field}} de "{{old}}" para "{{new}}"',
1160
+ activityCreated: 'Criou este registro',
1161
+ activityDeleted: 'Excluiu este registro',
1162
+ activityStatusChanged: 'Alterou o status para "{{value}}"',
1163
+ activityUpdated: 'Atualizou o registro',
929
1164
  loadMore: "Carregar mais",
930
1165
  edited: "(editado)",
931
1166
  via: "via {{source}}",
932
1167
  viewSource: "Ver origem",
933
1168
  replyCount: "{{count}} resposta",
934
- replyCountPlural: "{{count}} respostas",
1169
+ replyCount_one: "{{count}} resposta",
1170
+ replyCount_many: "{{count}} de respostas",
1171
+ replyCount_other: "{{count}} respostas",
935
1172
  replyPlaceholder: "Responder…",
936
1173
  filterActivity: "Filtrar atividade",
937
1174
  openDiscussion: "Abrir painel de discussão",
@@ -945,6 +1182,9 @@ const pt = {
945
1182
  writeStrippedTitle: "Salvo, mas alguns campos não foram aplicados",
946
1183
  writeStrippedReadonly: "Somente leitura, portanto não foi aplicado: {{fields}}",
947
1184
  writeStrippedByState: "Não editável no estado atual deste registro, portanto não foi aplicado: {{fields}}",
1185
+ writeStrippedPrimaryKey: "O identificador do registro não pode ser alterado ao salvar, portanto não foi aplicado: {{fields}}",
1186
+ writeStrippedComputed: "Calculado pelo servidor a partir de uma fórmula, portanto o valor enviado não foi aplicado: {{fields}}",
1187
+ writeStrippedUnknownReason: "Não aplicado pelo servidor: {{fields}}",
948
1188
  approvalPendingEditable: "Em aprovação · editável",
949
1189
  approvalPendingTooltip: "Este registro tem uma solicitação de aprovação pendente; esta etapa ainda permite a edição",
950
1190
  approvalProgress: "Aprovações — {{got}} de {{need}}",
@@ -957,7 +1197,16 @@ const pt = {
957
1197
  cancelApprovalTooltipUnlocked: "Cancelar a solicitação de aprovação pendente",
958
1198
  cancelApprovalFailed: "Falha ao cancelar aprovação",
959
1199
  cancelApprovalUnavailable: "O cancelamento de aprovações não é suportado por esta fonte de dados",
1200
+ pathLabel: 'Caminho do registro',
1201
+ pathStageCompleted: '{{stage}}, concluída',
1202
+ pathStageCurrent: '{{stage}}, etapa atual',
1203
+ pathStageUpcoming: '{{stage}}, pendente',
1204
+ pathStageLostCurrent: '{{stage}}, perdida, etapa atual',
1205
+ pathStageLostUpcoming: '{{stage}}, perdida, não alcançada',
1206
+ pathStageWonUpcoming: '{{stage}}, etapa objetivo, não alcançada',
960
1207
  linkCopied: "Link copiado para a área de transferência",
1208
+ commentFailed: "Seu comentário não foi publicado. Nada foi salvo — tente novamente.",
1209
+ reactionFailed: "Sua reação não foi salva. Tente novamente.",
961
1210
  linkCopyFailed: "Falha ao copiar o link",
962
1211
  cancel: "Cancelar",
963
1212
  cancelEdit: "Descartar alterações",
@@ -987,97 +1236,67 @@ const pt = {
987
1236
  sortBy: "Ordenar por",
988
1237
  filterPlaceholder: "Filtrar…",
989
1238
  highlightFields: "Campos principais",
1239
+ highlightsLabel: "Campos principais do registro",
990
1240
  createdBy: "Criado por",
991
1241
  updatedBy: "Atualizado por",
992
- // objectui#3863 — base key. pt's third category `many` starts at a million, where
993
- // the plural form is correct, so the base repeats `_other`.
1242
+ // objectui#3863 — base key, answering only a call made without a count. pt's
1243
+ // `many` (exact millions) has its own slot since objectui#11432; it repeats
1244
+ // `_other` here because the count governs no noun complement.
994
1245
  showEmptyRelated: "+ {{count}} vazios",
995
1246
  showEmptyRelated_one: "+ {{count}} vazio",
1247
+ showEmptyRelated_many: "+ {{count}} vazios",
996
1248
  showEmptyRelated_other: "+ {{count}} vazios",
997
1249
  copyEmail: "Copiar e-mail",
998
1250
  copyPhone: "Copiar telefone",
999
1251
  copyRecordId: "Copiar ID do registro",
1000
1252
  showEmptyFields: "Mostrar {{count}} campos vazios",
1253
+ showEmptyFields_one: "Mostrar {{count}} campo vazio",
1254
+ showEmptyFields_many: "Mostrar {{count}} de campos vazios",
1255
+ showEmptyFields_other: "Mostrar {{count}} campos vazios",
1001
1256
  hideEmptyFields: "Ocultar campos vazios",
1002
1257
  noValue: "Sem valor",
1258
+ unresolvedReference: "Referência não resolvida: {{value}} não foi resolvida como um usuário",
1259
+ unresolvedLookupReference: "Referência não resolvida: {{value}} não foi resolvida como um registro nesta tela",
1260
+ repeaterItemCount: "{{count}} itens",
1261
+ repeaterItemCount_one: "{{count}} item",
1262
+ repeaterItemCount_many: "{{count}} de itens",
1263
+ repeaterItemCount_other: "{{count}} itens",
1264
+ fileCount: "{{count}} arquivos",
1265
+ fileCount_one: "{{count}} arquivo",
1266
+ fileCount_many: "{{count}} de arquivos",
1267
+ fileCount_other: "{{count}} arquivos",
1003
1268
  },
1004
1269
  chart: {
1005
- noData: "Nenhum dado de gráfico disponível",
1006
1270
  loading: "Carregando gráfico…",
1271
+ refreshing: "Atualizando…",
1007
1272
  nullCategory: "(Não especificado)",
1008
- },
1009
- map: {
1010
- searchLocations: "Pesquisar locais…",
1011
- locationDetails: "Detalhes do local",
1012
- markersCount: "{{count}} marcadores",
1013
- invalidCoordinates: "{{count}} registro com coordenadas ausentes ou inválidas excluído do mapa.",
1014
- invalidCoordinatesPlural: "{{count}} registros com coordenadas ausentes ou inválidas excluídos do mapa.",
1015
- },
1016
- workflow: {
1017
- draft: "Rascunho",
1018
- active: "Ativo",
1019
- paused: "Pausado",
1020
- completed: "Concluído",
1021
- cancelled: "Cancelado",
1022
- save: "Salvar",
1023
- publish: "Publicar",
1024
- addNode: "Adicionar nó",
1025
- workflowFlow: "Fluxo de trabalho",
1026
- properties: "Propriedades",
1027
- connections: "Conexões",
1028
- quickConnect: "Conexão rápida",
1029
- fromPlaceholder: "De…",
1030
- toPlaceholder: "Para…",
1031
- connect: "Conectar",
1032
- label: "Rótulo",
1033
- type: "Tipo",
1034
- description: "Descrição",
1035
- assignee: "Responsável",
1036
- assigneeType: "Tipo de responsável",
1037
- user: "Usuário",
1038
- role: "Função",
1039
- group: "Grupo",
1040
- expression: "Expressão",
1041
- timeoutMinutes: "Tempo limite (minutos)",
1042
- selectNodeToEdit: "Selecione um nó para editar suas propriedades",
1043
- workflowTitle: "Título do fluxo de trabalho",
1044
- newWorkflow: "Novo fluxo de trabalho",
1045
- outConnections: "{{count}} saída(s)",
1046
- start: "Início",
1047
- end: "Fim",
1048
- task: "Tarefa",
1049
- userTask: "Tarefa de usuário",
1050
- serviceTask: "Tarefa de serviço",
1051
- scriptTask: "Tarefa de script",
1052
- approval: "Aprovação",
1053
- condition: "Condição",
1054
- parallelGateway: "Gateway paralelo",
1055
- joinGateway: "Gateway de junção",
1056
- boundaryEvent: "Evento de limite",
1057
- delay: "Atraso",
1058
- notification: "Notificação",
1059
- webhook: "Webhook",
1060
- allowConcurrency: "Permitir (execução simultânea)",
1061
- forbidConcurrency: "Proibir (pular novos)",
1062
- replaceConcurrency: "Substituir (cancelar existentes)",
1063
- queueConcurrency: "Fila (executar após atual)",
1064
- conditionEvent: "Condição",
1065
- manualEvent: "Manual",
1066
- webhookEvent: "Webhook",
1067
- timerEvent: "Temporizador",
1068
- signalEvent: "Sinal",
1069
- versionHistory: "Histórico de versões",
1070
- importBpmn: "Importar BPMN",
1071
- exportBpmn: "Exportar BPMN",
1072
- undo: "Desfazer",
1073
- redo: "Refazer",
1074
- resetZoom: "Redefinir zoom",
1273
+ scatterOneMeasure: "Um gráfico de dispersão traça uma única medida. Mantenha apenas uma série:",
1274
+ unconfigured: {
1275
+ noCategoryAxis: "Eixo de categorias do gráfico obrigatório — um gráfico vinculado a um objeto não o inventa. Declare um destes:",
1276
+ },
1075
1277
  },
1076
1278
  dashboard: {
1077
- noRows: "Sem linhas",
1279
+ // objectui#7063 — the DEFAULT empty state every dashboard widget renders
1280
+ // when its query SUCCEEDED and returned nothing. It replaced the terse
1281
+ // per-widget `noRows` / `noDataAvailable` fragments at the render site;
1282
+ // objectui#7125 deleted those two keys from all ten packs once nothing
1283
+ // read them. The copy here has to read as a state rather than a failure,
1284
+ // which is why it says the widget loaded. `sourceLabel` carries its own
1285
+ // punctuation so the call site concatenates no separator (see
1286
+ // `WidgetEmptyState`).
1287
+ empty: {
1288
+ title: "Ainda sem dados",
1289
+ message: "Este widget foi carregado com sucesso, mas a consulta ainda não retornou nenhum registro.",
1290
+ sourceLabel: "Fonte de dados:",
1291
+ },
1078
1292
  loading: "Carregando…",
1293
+ refreshing: "Atualizando…",
1294
+ refreshAll: "Atualizar tudo",
1295
+ refreshDashboard: "Atualizar painel",
1079
1296
  pickMeasures: "Escolha medidas (valores) para este widget de dataset.",
1080
1297
  datasetUnsupported: "Esta fonte de dados não oferece suporte a consultas de dataset.",
1298
+ widgetForbiddenTitle: "Sem acesso",
1299
+ widgetForbiddenMessage: "Você não tem permissão para ver os dados deste widget.",
1081
1300
  details: "Detalhes",
1082
1301
  exportCsv: "Exportar CSV",
1083
1302
  openInList: "Abrir na lista",
@@ -1105,13 +1324,110 @@ const pt = {
1105
1324
  },
1106
1325
  },
1107
1326
  addWidget: "Adicionar widget",
1108
- removeWidget: "Remover widget",
1109
1327
  editLayout: "Editar layout",
1110
1328
  saveLayout: "Salvar layout",
1111
1329
  resetLayout: "Redefinir layout",
1112
1330
  total: "Total",
1113
- noDataAvailable: "Sem dados disponíveis",
1114
1331
  noDataSourceFor: "Sem fonte de dados para",
1332
+ config: {
1333
+ breadcrumb: {
1334
+ dashboard: "Painel",
1335
+ configuration: "Configuração",
1336
+ widget: "Widget",
1337
+ chart: "Gráfico",
1338
+ table: "Tabela",
1339
+ pivotTable: "Tabela dinâmica",
1340
+ },
1341
+ section: {
1342
+ general: "Geral",
1343
+ layout: "Layout",
1344
+ data: "Dados",
1345
+ dataBinding: "Vinculação de dados",
1346
+ appearance: "Aparência",
1347
+ },
1348
+ field: {
1349
+ title: "Título",
1350
+ description: "Descrição",
1351
+ columns: "Colunas",
1352
+ gap: "Espaçamento",
1353
+ rowHeight: "Altura da linha (px)",
1354
+ autoRefresh: "Atualização automática",
1355
+ showDescription: "Mostrar descrição",
1356
+ theme: "Tema",
1357
+ widgetType: "Tipo de widget",
1358
+ colorVariant: "Variante de cor",
1359
+ dataset: "Conjunto de dados",
1360
+ dimensions: "Dimensões",
1361
+ values: "Valores",
1362
+ width: "Largura (colunas)",
1363
+ height: "Altura (linhas)",
1364
+ },
1365
+ placeholder: {
1366
+ dashboardTitle: "Título do painel",
1367
+ dashboardDescription: "Resumo curto exibido sob o título",
1368
+ widgetTitle: "Título do widget",
1369
+ widgetDescription: "Descrição do widget",
1370
+ datasetName: "Nome do conjunto de dados",
1371
+ selectDataset: "Selecionar conjunto de dados…",
1372
+ searchDatasets: "Pesquisar conjuntos de dados…",
1373
+ addDimension: "Adicionar dimensão…",
1374
+ addMeasure: "Adicionar medida…",
1375
+ searchMembers: "Pesquisar…",
1376
+ },
1377
+ empty: {
1378
+ datasets: "Nenhum conjunto de dados encontrado.",
1379
+ dimensions: "Nenhuma dimensão selecionada.",
1380
+ measures: "Nenhuma medida selecionada.",
1381
+ nothingToAdd: "Não há mais nada para adicionar.",
1382
+ },
1383
+ help: {
1384
+ dataset: "O conjunto de dados da camada semântica ao qual este widget está vinculado (ADR-0021).",
1385
+ dimensions: "Agrupar/dividir os valores por estas dimensões do conjunto de dados.",
1386
+ dimensionsPivot: "Campos de agrupamento/divisão. A última dimensão se expande como colunas.",
1387
+ values: "Medidas do conjunto de dados a exibir (pelo menos uma).",
1388
+ },
1389
+ action: {
1390
+ add: "Adicionar",
1391
+ remove: "Remover {{name}}",
1392
+ },
1393
+ refresh: {
1394
+ off: "Desativado",
1395
+ every30s: "A cada 30 s",
1396
+ every1m: "A cada 1 min",
1397
+ every5m: "A cada 5 min",
1398
+ every15m: "A cada 15 min",
1399
+ every30m: "A cada 30 min",
1400
+ every1h: "A cada 1 hora",
1401
+ },
1402
+ themeOption: {
1403
+ light: "Claro",
1404
+ dark: "Escuro",
1405
+ auto: "Automático",
1406
+ },
1407
+ widgetType: {
1408
+ metric: "Métrica",
1409
+ bar: "Gráfico de barras",
1410
+ horizontalBar: "Barras horizontais",
1411
+ line: "Gráfico de linhas",
1412
+ pie: "Gráfico de pizza",
1413
+ donut: "Gráfico de rosca",
1414
+ area: "Gráfico de área",
1415
+ scatter: "Gráfico de dispersão",
1416
+ funnel: "Funil",
1417
+ table: "Tabela",
1418
+ pivot: "Tabela dinâmica",
1419
+ },
1420
+ color: {
1421
+ default: "Padrão",
1422
+ blue: "Azul",
1423
+ teal: "Verde-azulado",
1424
+ orange: "Laranja",
1425
+ purple: "Roxo",
1426
+ success: "Sucesso",
1427
+ warning: "Aviso",
1428
+ danger: "Perigo",
1429
+ },
1430
+ },
1115
1431
  trend: {
1116
1432
  vsLastQuarter: "vs. trimestre anterior",
1117
1433
  vsLastMonth: "vs. mês anterior",
@@ -1121,24 +1437,6 @@ const pt = {
1121
1437
  vsPreviousPeriod: "vs. período anterior",
1122
1438
  },
1123
1439
  },
1124
- configPanel: {
1125
- save: "Salvar",
1126
- discard: "Descartar",
1127
- close: "Fechar",
1128
- layout: "Layout",
1129
- columns: "Colunas",
1130
- gap: "Espaçamento",
1131
- rowHeight: "Altura da linha",
1132
- data: "Dados",
1133
- refreshInterval: "Intervalo de atualização",
1134
- appearance: "Aparência",
1135
- title: "Título",
1136
- showDescription: "Mostrar descrição",
1137
- theme: "Tema",
1138
- configuration: "Configuração",
1139
- general: "Geral",
1140
- advanced: "Avançado",
1141
- },
1142
1440
  appDesigner: {
1143
1441
  createApp: "Criar aplicativo",
1144
1442
  editApp: "Editar aplicativo",
@@ -1151,10 +1449,6 @@ const pt = {
1151
1449
  appDescription: "Descrição",
1152
1450
  appIcon: "Ícone",
1153
1451
  template: "Modelo",
1154
- layout: "Layout",
1155
- layoutSidebar: "Barra lateral",
1156
- layoutHeader: "Cabeçalho",
1157
- layoutEmpty: "Vazio",
1158
1452
  selectObjects: "Selecionar objetos",
1159
1453
  searchObjects: "Pesquisar objetos…",
1160
1454
  selectAll: "Selecionar todos",
@@ -1163,7 +1457,6 @@ const pt = {
1163
1457
  addGroup: "Adicionar grupo",
1164
1458
  addUrl: "Adicionar URL",
1165
1459
  addSeparator: "Adicionar separador",
1166
- noNavItems: "Nenhum item de navegação ainda.",
1167
1460
  logoUrl: "Logo URL",
1168
1461
  primaryColor: "Cor primária",
1169
1462
  faviconUrl: "Favicon URL",
@@ -1189,16 +1482,13 @@ const pt = {
1189
1482
  showSort: "Mostrar ordenação",
1190
1483
  appearance: "Aparência",
1191
1484
  rowHeight: "Altura da linha",
1192
- stripedRows: "Linhas alternadas",
1193
- bordered: "Com borda",
1194
1485
  livePreview: "Pré-visualização em tempo real",
1195
- stepBasicDesc: "Nome, título e layout",
1486
+ stepBasicDesc: "Nome, título e ícone",
1196
1487
  stepObjectsDesc: "Selecionar objetos de negócio",
1197
1488
  stepNavigationDesc: "Construir árvore de navegação",
1198
1489
  stepBrandingDesc: "Logo, cores e favicon",
1199
1490
  noObjectsFound: "Nenhum objeto encontrado.",
1200
1491
  noNavItemsHint: "Sem itens de navegação. Selecione objetos na etapa anterior ou adicione manualmente.",
1201
- separator: "Separador",
1202
1492
  separatorLabel: "— Separador —",
1203
1493
  newGroup: "Novo grupo",
1204
1494
  newLink: "Novo link",
@@ -1232,6 +1522,7 @@ const pt = {
1232
1522
  navTypeSeparator: "Separador",
1233
1523
  navTypeAction: "Ação",
1234
1524
  navTypeComponent: "Componente",
1525
+ navTypeDoc: "Documento",
1235
1526
  navEditIcon: "Editar ícone",
1236
1527
  navToggleVisible: "Alternar visibilidade",
1237
1528
  navHidden: "Oculto",
@@ -1304,17 +1595,13 @@ const pt = {
1304
1595
  unique: "Único",
1305
1596
  readOnly: "Somente leitura",
1306
1597
  hidden: "Oculto",
1307
- indexed: "Indexado",
1308
1598
  externalId: "ID externo",
1309
1599
  trackHistory: "Rastrear histórico",
1310
1600
  defaultValue: "Valor padrão",
1311
1601
  placeholder: "Espaço reservado",
1312
1602
  referenceTo: "Referência a",
1313
- formula: "Fórmula",
1314
1603
  options: "Opções",
1315
1604
  addOption: "Adicionar opção",
1316
- validationRules: "Regras de validação",
1317
- addRule: "Adicionar regra",
1318
1605
  systemBadge: "Sistema",
1319
1606
  ungrouped: "Geral",
1320
1607
  deleteConfirmTitle: "Excluir campo?",
@@ -1333,7 +1620,23 @@ const pt = {
1333
1620
  },
1334
1621
  },
1335
1622
  console: {
1623
+ studio: {
1624
+ backToHome: "Voltar ao início",
1625
+ },
1336
1626
  saveAdvisoryTitle: "Salvo — a verificação de criação gerou {{count}} recomendação(ões)",
1627
+ saveAdvisoryTitle_one: "Salvo — a verificação de criação gerou {{count}} recomendação",
1628
+ saveAdvisoryTitle_many: "Salvo — a verificação de criação gerou {{count}} de recomendações",
1629
+ saveAdvisoryTitle_other: "Salvo — a verificação de criação gerou {{count}} recomendações",
1630
+ publishAdvisoryTitle: "Publicado — a verificação de criação gerou {{count}} recomendação(ões)",
1631
+ publishAdvisoryTitle_one: "Publicado — a verificação de criação gerou {{count}} recomendação",
1632
+ publishAdvisoryTitle_many: "Publicado — a verificação de criação gerou {{count}} de recomendações",
1633
+ publishAdvisoryTitle_other: "Publicado — a verificação de criação gerou {{count}} recomendações",
1634
+ importMappingsUnavailable: "Não foi possível carregar os mapeamentos de importação salvos de {{object}}",
1635
+ importMappingsRefused: "O servidor recusou esta solicitação, portanto esta lista está vazia porque não pôde ser lida, não porque nada esteja registrado. Entre novamente ou peça acesso a um administrador.",
1636
+ importMappingsUnreadable: "Esta lista está vazia porque não pôde ser lida, não porque nada esteja registrado. Tente novamente e relate o problema se ele persistir.",
1637
+ savedViewsUnavailable: "Não foi possível carregar as exibições salvas de {{object}}",
1638
+ savedViewsRefused: "O servidor recusou esta solicitação, portanto esta lista está vazia porque não pôde ser lida, não porque este objeto não tenha exibições salvas. Entre novamente ou peça acesso a um administrador.",
1639
+ savedViewsUnreadable: "Esta lista está vazia porque não pôde ser lida, não porque este objeto não tenha exibições salvas. Tente novamente e relate o problema se ele persistir.",
1337
1640
  settingsHub: {
1338
1641
  title: "Configurações",
1339
1642
  subtitle: "Configure seu workspace, integrações e sinalizadores de recursos.",
@@ -1378,6 +1681,13 @@ const pt = {
1378
1681
  passwordsDownload: "Baixar CSV",
1379
1682
  },
1380
1683
  ai: {
1684
+ pendingDrafts: {
1685
+ count: "{{count}} alteração(ões) ainda não publicada(s) — os usuários não conseguem vê-las.",
1686
+ publish: "Publicar",
1687
+ published: "Todas as alterações pendentes estão ativas.",
1688
+ failed: "Falha ao publicar.",
1689
+ publishedWithFindings: "Publicado, mas as verificações de tempo de execução relataram problemas: {{detail}}",
1690
+ },
1381
1691
  usage: {
1382
1692
  title: "Uso de IA",
1383
1693
  meterBuild: "Criar",
@@ -1387,9 +1697,18 @@ const pt = {
1387
1697
  statusFull: "Limite atingido",
1388
1698
  resetsDaily: "Redefine hoje à noite",
1389
1699
  resetsMonthly: "Redefine no próximo ciclo",
1700
+ resetsWeeklyDays: "Redefine em {{count}} dias",
1701
+ resetsWeeklyDays_one: "Redefine em {{count}} dia",
1702
+ resetsWeeklyDays_many: "Redefine em {{count}} de dias",
1703
+ resetsWeeklyDays_other: "Redefine em {{count}} dias",
1704
+ resetsWeeklyHours: "Redefine em {{count}} horas",
1705
+ resetsWeeklyHours_one: "Redefine em {{count}} hora",
1706
+ resetsWeeklyHours_many: "Redefine em {{count}} de horas",
1707
+ resetsWeeklyHours_other: "Redefine em {{count}} horas",
1390
1708
  ctaUpgrade: "Faça upgrade para continuar",
1391
1709
  ctaTopUp: "Adicione créditos para continuar",
1392
1710
  ariaLabel: "Uso de IA: {{status}}",
1711
+ breakdownTitle: "Usado até agora",
1393
1712
  },
1394
1713
  workspaceTitle: "Workspace de IA",
1395
1714
  workspaceSubtitle: "Pergunte, inspecione e retome conversas",
@@ -1399,6 +1718,31 @@ const pt = {
1399
1718
  share: "Compartilhar",
1400
1719
  shareTitle: "Compartilhar esta conversa",
1401
1720
  shareDisabledTitle: "Comece a conversar para habilitar o compartilhamento",
1721
+ buildDoctor: "Diagnóstico de build",
1722
+ buildDoctorTitle: "Diagnóstico de build — o que foi realmente aplicado?",
1723
+ buildDoctorDisabledTitle: "Envie uma mensagem primeiro",
1724
+ buildDoctorDrawer: {
1725
+ description: 'O que o agente afirmou versus o que está realmente ativo. Diagnóstico somente leitura.',
1726
+ reconciling: 'Conciliando…',
1727
+ notAvailable: 'Indisponível — a conversa não foi encontrada ou você não tem autorização.',
1728
+ untitled: '(sem título)',
1729
+ summary: '{{turns}} turno(s) · {{messages}} msgs · {{tokens}} tok · {{seconds}} s LLM',
1730
+ allLive: 'Todas as {{count}} alteração(ões) tentada(s) estão ativas — nada se perdeu.',
1731
+ discrepancies: '{{count}} discrepância(s) — o que o chat disse não corresponde ao que está ativo.',
1732
+ orphanedTitle: 'Proposto, mas nunca aplicado',
1733
+ orphanedHint: 'Um cartão de confirmação que o agente propôs, mas que nenhum turno posterior aplicou — a alteração se perdeu silenciosamente.',
1734
+ missingTitle: 'Declarado, mas ausente',
1735
+ missingHint: 'Um resultado de ferramenta disse que foi aplicado, mas o artefato não está ativo em sys_metadata.',
1736
+ toolErrorsTitle: 'Erros de ferramentas',
1737
+ toolErrorsHint: 'Chamadas de ferramentas que retornaram um erro durante o build.',
1738
+ verifyTitle: 'Verificação do build (verify_build)',
1739
+ yourApp: 'Seu aplicativo:',
1740
+ noIssues: '0 problemas',
1741
+ issueCount: '{{count}} problema(s)',
1742
+ platformNoise: '{{count}} achado(s) sys_* da plataforma oculto(s)',
1743
+ pendingActions: 'Ações pendentes',
1744
+ timeline: 'Linha do tempo ({{count}})',
1745
+ },
1402
1746
  newChat: "Nova",
1403
1747
  searchChats: "Pesquisar conversas…",
1404
1748
  noChatsYet: "Ainda não há conversas",
@@ -1428,7 +1772,7 @@ const pt = {
1428
1772
  empty: {
1429
1773
  build: {
1430
1774
  title: "Criar com IA",
1431
- 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.",
1775
+ description: "Descreva um aplicativo em linguagem simples — eu rascunho os objetos, telas e dados de exemplo, e então você revisa e publica.",
1432
1776
  },
1433
1777
  ask: {
1434
1778
  title: "Pergunte aos seus dados",
@@ -1437,7 +1781,7 @@ const pt = {
1437
1781
  editApp: {
1438
1782
  title: "Editando “{{app}}”",
1439
1783
  titleGeneric: "Editar este aplicativo",
1440
- 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.",
1784
+ description: "O que você quer mudar? Eu altero este aplicativo no lugar — adicionar um campo, objeto, visão ou painel, ou ajustar o que já existe.",
1441
1785
  },
1442
1786
  },
1443
1787
  clearConversation: "Limpar",
@@ -1490,29 +1834,52 @@ const pt = {
1490
1834
  recentRecords: "Liste os 5 registros criados mais recentemente.",
1491
1835
  recordCounts: "Conte os registros de cada objeto.",
1492
1836
  },
1837
+ // cloud#1984 — these five chips are the maker's own recommendations, so
1838
+ // they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
1839
+ // (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
1840
+ // wording that promises autonomous behaviour (alert / remind / notify /
1841
+ // automate / status workflow) — v1 has no flows, actions or schedules, and
1842
+ // the model silently degrades such a request into a board or a filtered
1843
+ // view, so the chip would promise an alert and deliver a page. REVERT to
1844
+ // the automation wording when ADR-0112 v2 re-adds flows and actions.
1493
1845
  metadataAssistant: {
1494
- buildCrm: "Crie um CRM de vendas — clientes, contatos e um funil de negócios que eu possa totalizar por etapa.",
1495
- buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, e um quadro por status.",
1496
- buildFlow: "Projete uma central de suporte — chamados com prioridade, um fluxo de status e vínculos com clientes.",
1497
- buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e visibilidade de estoque baixo.",
1498
- buildRecruiting: "Crie um controle de candidaturas — candidatos, vagas abertas, etapas de entrevista e anotações.",
1846
+ buildCrm: "Crie um CRM de vendas — clientes, contatos e negócios com um campo de etapa, e um painel que some o valor por etapa.",
1847
+ buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, um quadro por status e um calendário de prazos.",
1848
+ buildFlow: "Projete uma central de suporte — chamados com campos de prioridade e status, um quadro por status e vínculos com clientes.",
1849
+ buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e uma visão que filtre os itens abaixo do ponto de reposição.",
1850
+ buildRecruiting: "Crie um controle de candidaturas — candidatos, vagas abertas, um campo de etapa de entrevista e um quadro por etapa.",
1499
1851
  },
1500
1852
  generic: {
1501
1853
  help: "Com o que você pode me ajudar?",
1502
1854
  availableObjects: "Liste os objetos de dados disponíveis.",
1503
1855
  recentActivity: "Resuma minha atividade recente.",
1504
1856
  },
1857
+ // objectui#7709 — the edit-mode starters, shown when the maker is bound
1858
+ // to an EXISTING app (`?package=`). Same rule as the five above: they
1859
+ // may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
1860
+ // `addAutomation` ("an approval, a status flow, or a notification") and
1861
+ // every capability it named is refused by v1 (cloud#1956 / PR #1970), so
1862
+ // it now asks for sample data — `seed` IS on v1's whitelist, and having
1863
+ // no data is what an existing app most often lacks. REVERT: when
1864
+ // ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
1865
+ // comes back as `addAutomation`; the retired string is pinned for every
1866
+ // pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
1505
1867
  editApp: {
1506
1868
  addField: "Adicione um campo a um dos objetos.",
1507
1869
  addObject: "Adicione um novo objeto e relacione-o a um existente.",
1508
1870
  addDashboard: "Adicione um painel para as métricas principais.",
1509
- addAutomation: "Adicione uma automação — uma aprovação, um fluxo de status ou uma notificação.",
1871
+ addSampleData: "Preencha os objetos existentes com registros de exemplo realistas para eu poder demonstrar o aplicativo.",
1510
1872
  },
1511
1873
  },
1512
1874
  changesTitle: "Confirmar alterações",
1513
1875
  changesConfirmed: "Confirmado",
1514
1876
  changesConfirm: "Confirmar",
1515
1877
  changesConfirmHint: "Responda para confirmar ou ajustar esta alteração.",
1878
+ changesApplying: "Aplicando…",
1879
+ changesApplied: "Aplicado",
1880
+ changesDrafted: "Salvo como rascunho",
1881
+ changesFailed: "Não aplicado",
1882
+ discussing: "Discutindo: {{target}}",
1516
1883
  changeVerb: {
1517
1884
  createObject: "Criar objeto",
1518
1885
  addField: "Adicionar campo",
@@ -1583,6 +1950,13 @@ const pt = {
1583
1950
  pages: "Páginas",
1584
1951
  reports: "Relatórios",
1585
1952
  system: "Sistema",
1953
+ marketplace: "Marketplace",
1954
+ settings: 'Configurações',
1955
+ apps: 'Aplicativos',
1956
+ profile: 'Perfil',
1957
+ approvals: 'Aprovações',
1958
+ aiApprovals: 'Aprovações de IA',
1959
+ auditLog: 'Log de auditoria',
1586
1960
  },
1587
1961
  // objectui#4024 — the single-namespace settings screen. Its sibling
1588
1962
  // `settingsHub` above already resolved through this pack; the view was the
@@ -1602,6 +1976,7 @@ const pt = {
1602
1976
  saveChanges: "Salvar alterações",
1603
1977
  unsavedCount: "{{count}} alterações não salvas",
1604
1978
  unsavedCount_one: "{{count}} alteração não salva",
1979
+ unsavedCount_many: "{{count}} de alterações não salvas",
1605
1980
  unsavedCount_other: "{{count}} alterações não salvas",
1606
1981
  cryptoRefusalTitle: "Esta implantação não consegue criptografar segredos",
1607
1982
  cryptoRefusalSubjectSuffix: "está declarado como criptografado, portanto nada foi gravado.",
@@ -1674,6 +2049,21 @@ const pt = {
1674
2049
  records: "Registros",
1675
2050
  recentRecords: "Vistos recentemente",
1676
2051
  },
2052
+ // objectui#9954 — see the `en` pack for what raises each case.
2053
+ readRate: {
2054
+ ratioTitle: 'Volume de leitura incomum neste ambiente',
2055
+ ratio: 'São lidas {{ratio}} linhas para cada linha gravada. A plataforma sinaliza tudo acima de {{threshold}}. Nada está sendo limitado ou bloqueado; este é um relatório para que o padrão de leitura possa ser revisado.',
2056
+ noWritesTitle: 'Leituras sem nenhuma gravação neste ambiente',
2057
+ noWrites: 'Linhas estão sendo lidas sem que nenhuma seja gravada, portanto a taxa de leitura não tem limite superior. Esta é a leitura mais grave. A plataforma sinaliza tudo acima de {{threshold}}. Nada está sendo limitado ou bloqueado; este é um relatório para que o padrão de leitura possa ser revisado.',
2058
+ },
2059
+ // objectui#10439 — see the `en` pack for what raises each case.
2060
+ storageUsage: {
2061
+ warningTitle: 'O armazenamento está quase cheio',
2062
+ warning: '{{used}} MB de {{limit}} MB usados. Envios e importações são pausados quando o armazenamento fica cheio.',
2063
+ blockedTitle: 'Armazenamento cheio: envios e importações estão pausados',
2064
+ blocked: '{{used}} MB de {{limit}} MB usados. Os dados existentes não são alterados, e a leitura, a exportação e a edição de registros individuais continuam funcionando.',
2065
+ upgrade: 'Faça upgrade para continuar',
2066
+ },
1677
2067
  errors: {
1678
2068
  somethingWentWrong: "Algo deu errado",
1679
2069
  unexpectedError: "Ocorreu um erro inesperado ao renderizar esta visualização.",
@@ -1704,6 +2094,7 @@ const pt = {
1704
2094
  viewNameInvalid: "Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.",
1705
2095
  systemViewReadonly: "Exibição do sistema definida no código — somente leitura.",
1706
2096
  cannotEditMetaView: "Esta exibição é integrada e definida no código — não é possível alterá-la.",
2097
+ viewConfigPermissionDenied: "As configurações da exibição se aplicam a todos os usuários que a utilizam, portanto alterá-las exige a permissão 'Gerenciar metadados'. Peça a um administrador para fazer essa alteração.",
1707
2098
  cannotDeleteMetaView: "Esta exibição é integrada e definida no código — não é possível excluí-la.",
1708
2099
  expandToPage: "Abrir como página inteira",
1709
2100
  objectNotFound: "Objeto não encontrado",
@@ -1712,101 +2103,35 @@ const pt = {
1712
2103
  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.",
1713
2104
  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.",
1714
2105
  allRecords: "Todos os registros",
1715
- exitDesignMode: "Sair do modo de design",
1716
- enterDesignMode: "Entrar no modo de design",
1717
- metadataInspector: "Inspetor de metadados",
1718
- editView: "Editar visualização",
1719
- addView: "Adicionar visualização",
1720
- designTools: "Ferramentas de design",
1721
2106
  new: "Novo",
1722
2107
  configureView: "Configurar visualização",
1723
- closePanel: "Fechar painel",
1724
- page: "Página",
1725
- pageConfigHint: "Barra de ferramentas, navegação e configurações do shell de visualização",
1726
- listConfigHint: "Renderização de dados, colunas e aparência para este tipo de lista",
1727
- general: "Geral",
1728
- generalHint: "Título, descrição e tipo da visualização",
1729
- toolbar: "Barra de ferramentas",
1730
- toolbarHint: "Pesquisa, filtro, ordenação, agrupamento e alternância de densidade",
1731
2108
  toolbarEnabledCount: "{{count}} de {{total}} habilitados",
1732
- navigationSection: "Navegação",
1733
- navigationHint: "Comportamento ao clicar na linha e configurações da visualização detalhada",
1734
- records: "Registros",
1735
- recordsHint: "Modo de seleção, adicionar registro e edição em linha",
1736
- exportPrint: "Exportar e imprimir",
1737
- exportPrintHint: "Formatos de exportação, impressão e exibição da contagem de registros",
1738
- showAllFields: "Mostrar tudo",
1739
- hideAllFields: "Ocultar tudo",
1740
2109
  searchFields: "Pesquisar campos…",
1741
2110
  title: "Título",
1742
- description: "Descrição",
1743
- data: "Dados",
1744
- source: "Fonte",
1745
- columns: "Colunas",
1746
- filterBy: "Filtrar por",
1747
- sortBy: "Ordenar por",
1748
- appearance: "Aparência",
1749
- showDescription: "Mostrar descrição",
1750
2111
  viewType: "Tipo de visualização",
1751
- userFilters: "Filtros do usuário",
1752
- enableSearch: "Habilitar pesquisa",
1753
- enableFilter: "Habilitar filtro",
1754
- enableSort: "Habilitar ordenação",
1755
- enableHideFields: "Ativar ocultar campos",
1756
- enableGroup: "Ativar agrupamento",
1757
- enableColor: "Ativar cor",
1758
- enableDensity: "Ativar densidade",
1759
- userActions: "Ações do usuário",
1760
- addRecordViaForm: "Adicionar registros via formulário",
1761
- advanced: "Avançado",
1762
- allowExport: "Permitir exportação",
1763
2112
  recordCount: "{{count}} registros",
1764
- noDescription: "Sem descrição",
1765
- none: "Nenhum",
1766
- columnsConfigured: "{{count}} colunas",
2113
+ recordCount_one: "{{count}} registro",
2114
+ recordCount_many: "{{count}} de registros",
2115
+ recordCount_other: "{{count}} registros",
1767
2116
  save: "Salvar",
1768
2117
  discard: "Descartar",
1769
2118
  createView: "Criar visualização",
1770
2119
  newView: "Nova visualização",
1771
- typeOptions: "Opções de tipo",
1772
2120
  groupByField: "Campo de agrupamento",
1773
2121
  startDateField: "Campo de data de início",
1774
2122
  titleField: "Campo de título",
1775
2123
  latitudeField: "Campo de latitude",
1776
2124
  longitudeField: "Campo de longitude",
1777
2125
  imageField: "Campo de imagem",
1778
- dateField: "Campo de data",
1779
2126
  selectField: "Selecionar campo…",
1780
- gridOptionsHint: "A visualização de grade usa as colunas configuradas acima.",
1781
- groupBy: "Agrupar por",
1782
- prefixField: "Campo de prefixo",
1783
- fields: "Campos",
1784
- fieldsVisible: "{{count}} visíveis",
1785
- sortsCount: "{{count}} ordenações",
1786
- filtersCount: "{{count}} filtros",
1787
2127
  endDateField: "Campo de data de término",
1788
- color: "Cor",
1789
- fieldTextColor: "Cor do texto do campo",
1790
- rowHeight: "Altura da linha",
1791
- wrapHeaders: "Quebrar cabeçalhos",
1792
- showFieldDescriptions: "Mostrar descrições dos campos",
1793
- collapseAllByDefault: "Recolher tudo por padrão",
1794
- striped: "Linhas listradas",
1795
- bordered: "Células com borda",
1796
- inlineEdit: "Editar registros em linha",
1797
- addDeleteRecordsInline: "Adicionar/excluir registros em linha",
1798
- clickIntoRecordDetails: "Clique para detalhes do registro",
1799
- navigationMode: "Modo de navegação",
1800
- navigationWidth: "Largura de navegação",
1801
- navigationWidthHint: "Disponível para os modos de navegação gaveta, modal e dividido",
1802
- openNewTab: "Abrir em nova aba",
1803
- openNewTabHint: "Disponível para os modos de navegação página e nova janela",
1804
2128
  import: "Importar",
1805
2129
  importTitle: "Importar do CSV",
1806
2130
  importedToast: "{{count}} linha(s) importada(s).",
2131
+ importedToast_one: "{{count}} linha importada.",
2132
+ importedToast_many: "{{count}} de linhas importadas.",
2133
+ importedToast_other: "{{count}} linhas importadas.",
1807
2134
  importedWithSkipped: "{{ok}} linha(s) importada(s); {{skipped}} pulada(s).",
1808
- showAdvancedSettings: "Mostrar configurações avançadas",
1809
- showFewerSettings: "Mostrar menos configurações",
1810
2135
  createViewDesc: "Escolha um tipo de exibição e dê um nome a ela. Todas as configurações podem ser alteradas depois.",
1811
2136
  cancel: "Cancelar",
1812
2137
  create: "Criar",
@@ -1814,6 +2139,9 @@ const pt = {
1814
2139
  deleteViewTitle: "Excluir exibição",
1815
2140
  deleteViewConfirm: "Excluir a exibição \"{{name}}\"? Isso não pode ser desfeito.",
1816
2141
  bulkDeleteConfirm: "Excluir {{count}} registros selecionados? Isso não pode ser desfeito.",
2142
+ bulkDeleteConfirm_one: "Excluir {{count}} registro selecionado? Isso não pode ser desfeito.",
2143
+ bulkDeleteConfirm_many: "Excluir {{count}} de registros selecionados? Isso não pode ser desfeito.",
2144
+ bulkDeleteConfirm_other: "Excluir {{count}} registros selecionados? Isso não pode ser desfeito.",
1817
2145
  duplicateViewName: "Já existe uma exibição com esse nome.",
1818
2146
  viewTypeGrid: "Grade",
1819
2147
  viewTypeGridDesc: "Tabela de registros no estilo planilha.",
@@ -1850,62 +2178,17 @@ const pt = {
1850
2178
  chartTypePie: "Gráfico de pizza",
1851
2179
  chartTypeArea: "Gráfico de área",
1852
2180
  chartTypeScatter: "Gráfico de dispersão",
1853
- xAxisField: "Campo do eixo X",
1854
- xAxisFieldHelp: "A dimensão categórica ou temporal.",
1855
- yAxisField: "Campo do eixo Y",
1856
- yAxisFieldHelp: "O campo numérico para agregar.",
1857
- selectionMode: "Modo de seleção",
1858
- selectionNone: "Nenhum",
1859
- selectionSingle: "Individual",
1860
- selectionMultiple: "Múltiplo",
1861
- pageSize: "Tamanho da página",
1862
- pageSizeOptions: "Opções de tamanho de página",
1863
- exportFormats: "Formatos de exportação",
1864
- exportMaxRecords: "Máximo de registros",
1865
- exportIncludeHeaders: "Incluir cabeçalhos",
1866
- exportFileNamePrefix: "Prefixo do nome do arquivo",
1867
- searchableFields: "Campos pesquisáveis",
1868
- filterableFields: "Campos filtráveis",
1869
- resizableColumns: "Colunas redimensionáveis",
1870
- densityCompact: "Compacto",
1871
- densityComfortable: "Normal",
1872
- densitySpacious: "Espaçoso",
1873
- densityMode: "Modo de densidade",
1874
- hiddenFields: "Campos ocultos",
1875
- rowActions: "Ações de linha",
1876
- bulkActions: "Ações em massa",
1877
- sharing: "Compartilhamento",
1878
- sharingEnabled: "Compartilhamento ativado",
1879
- sharingVisibility: "Visibilidade",
1880
- addRecordEnabled: "Adição de registro ativada",
1881
- addRecordPosition: "Posição",
1882
- addRecordMode: "Modo",
1883
- addRecordFormView: "Exibição de formulário",
1884
- conditionalFormatting: "Formatação condicional",
1885
- addRule: "Adicionar regra",
1886
- quickFilters: "Filtros rápidos",
1887
- addQuickFilter: "Adicionar filtro rápido",
1888
- ufElements: "Elementos",
1889
- ufDropdown: "Lista suspensa",
2181
+ dataset: "Conjunto de dados",
2182
+ datasetHelp: "O gráfico lê seus valores deste conjunto de dados do objeto.",
2183
+ chartMeasure: "Medida",
2184
+ chartMeasureHelp: "A medida do conjunto de dados exibida no eixo de valores.",
2185
+ chartDimension: "Dimensão",
2186
+ chartDimensionHelp: "A dimensão do conjunto de dados pela qual os valores são agrupados (opcional).",
2187
+ viewTypeUnavailableDataset: "Este objeto não expõe nenhum conjunto de dados para o gráfico.",
2188
+ noDatasetMeasure: "Este conjunto de dados não declara nenhuma medida para o gráfico.",
1890
2189
  ufTabs: "Abas",
1891
- ufToggle: "Alternar",
1892
2190
  ufAddField: "+ Adicionar campo de filtro…",
1893
- ufNoFields: "Sem campos disponíveis",
1894
- ufAddTab: "+ Adicionar aba",
1895
- ufTabLabel: "Rótulo",
1896
2191
  ufShowAllRecords: "Mostrar aba \"Todos os registros\"",
1897
- ufAllowAddTab: "Permitir adicionar abas",
1898
- showRecordCount: "Mostrar contagem de registros",
1899
- allowPrinting: "Permitir impressão",
1900
- virtualScroll: "Rolagem virtual",
1901
- emptyStateTitle: "Título do estado vazio",
1902
- emptyStateMessage: "Mensagem do estado vazio",
1903
- emptyStateIcon: "Ícone do estado vazio",
1904
- ariaLabel: "Rótulo ARIA",
1905
- ariaDescribedBy: "Descrito por ARIA",
1906
- ariaLive: "ARIA ao vivo",
1907
- accessibility: "Acessibilidade",
1908
- viewTabs: "Abas de exibição",
1909
2192
  },
1910
2193
  localeSwitcher: {
1911
2194
  label: "Idioma",
@@ -1916,6 +2199,9 @@ const pt = {
1916
2199
  unpinItem: "Desafixar {{name}}",
1917
2200
  dragToReorder: "Arrastar para reordenar",
1918
2201
  favorites: "Favoritos",
2202
+ launcherLabel: "Iniciador de aplicativos",
2203
+ menuLabel: "Navegação do aplicativo",
2204
+ menuEmpty: "Este aplicativo não tem entradas de navegação que você possa abrir.",
1919
2205
  },
1920
2206
  },
1921
2207
  auth: {
@@ -1969,6 +2255,8 @@ const pt = {
1969
2255
  resendOtpCountdownText: "Reenviar em {seconds} s",
1970
2256
  usePhoneOtpText: "Entrar com código de verificação",
1971
2257
  usePasswordSignInText: "Entrar com senha em vez disso",
2258
+ socialButton: "Continuar com {provider}",
2259
+ orText: "ou continue com e-mail",
1972
2260
  },
1973
2261
  register: {
1974
2262
  title: "Criar uma conta",
@@ -1987,8 +2275,12 @@ const pt = {
1987
2275
  submittingButton: "Criando conta…",
1988
2276
  hasAccountText: "Já tem uma conta?",
1989
2277
  signInText: "Entrar",
2278
+ socialButton: "Cadastre-se com {provider}",
2279
+ orText: "ou continue com e-mail",
1990
2280
  errors: {
1991
2281
  userExists: "Já existe uma conta com esse e-mail. Tente fazer login.",
2282
+ selfRegistrationClosed: "O cadastro por conta própria não está aberto neste ambiente. Peça um convite a um administrador.",
2283
+ emailDomainNotAllowed: "O domínio deste e-mail não tem permissão para se cadastrar aqui. Use o e-mail da sua organização ou peça um convite a um administrador.",
1992
2284
  },
1993
2285
  verifyInbox: {
1994
2286
  title: "Verifique sua caixa de entrada",
@@ -2007,7 +2299,7 @@ const pt = {
2007
2299
  submitButton: "Enviar link de redefinição",
2008
2300
  submittingButton: "Enviando…",
2009
2301
  successTitle: "Verifique seu e-mail",
2010
- successDescription: "Enviamos um link para redefinição de senha para {{email}}. Por favor verifique sua caixa de entrada.",
2302
+ successDescription: "Enviamos um link para redefinição de senha para {email}. Por favor verifique sua caixa de entrada.",
2011
2303
  backToSignInText: "Voltar para o login",
2012
2304
  rememberPasswordText: "Lembra da sua senha?",
2013
2305
  signInText: "Entrar",
@@ -2187,6 +2479,15 @@ const pt = {
2187
2479
  role: "Função",
2188
2480
  save: "Salvar alterações",
2189
2481
  },
2482
+ language: {
2483
+ title: "Idioma",
2484
+ description: "O idioma usado nas notificações e mensagens enviadas para você. O idioma da interface é escolhido separadamente, no menu do globo.",
2485
+ label: "Idioma preferido",
2486
+ systemDefault: "Usar o padrão da implantação",
2487
+ save: "Salvar",
2488
+ saved: "Preferência de idioma atualizada.",
2489
+ readOnly: "O idioma da sua conta é gerenciado pelo seu administrador.",
2490
+ },
2190
2491
  password: {
2191
2492
  changeTitle: "Alterar senha",
2192
2493
  setTitle: "Definir senha local",
@@ -2218,7 +2519,6 @@ const pt = {
2218
2519
  label: "Espaços de trabalho",
2219
2520
  default: "Meu espaço de trabalho",
2220
2521
  switch: "Trocar de espaço de trabalho",
2221
- create: "Criar espaço de trabalho",
2222
2522
  createTitle: "Criar um espaço de trabalho",
2223
2523
  createDescription: "Um espaço de trabalho é um espaço compartilhado para colaboração da equipe.",
2224
2524
  createButton: "Criar espaço de trabalho",
@@ -2243,7 +2543,6 @@ const pt = {
2243
2543
  packageManagement: "Gerenciamento de pacotes",
2244
2544
  searchNavigation: "Pesquisar na navegação…",
2245
2545
  settings: "Configurações",
2246
- help: "Ajuda",
2247
2546
  helpTooltip: "Ajuda e documentação",
2248
2547
  activityFeed: "Feed de atividades",
2249
2548
  notifications: "Notificações",
@@ -2282,10 +2581,12 @@ const pt = {
2282
2581
  build: {
2283
2582
  title: "Criar um aplicativo",
2284
2583
  subtitle: "Comece do zero — projete objetos, formulários, automações e interfaces.",
2584
+ 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.",
2285
2585
  },
2286
2586
  template: {
2287
2587
  title: "Comece com um modelo",
2288
2588
  subtitle: "Instale um aplicativo modelo do marketplace e personalize-o.",
2589
+ marketplaceDisabled: "Este runtime não tem um marketplace de aplicativos configurado, portanto não há modelos para instalar aqui.",
2289
2590
  },
2290
2591
  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.",
2291
2592
  welcomeAdminDescriptionNoBuild: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda. Quando houver dados, o assistente de IA poderá ajudar a explorá-los.",
@@ -2301,6 +2602,9 @@ const pt = {
2301
2602
  },
2302
2603
  pendingDrafts: {
2303
2604
  message: "Você tem {{count}} alteração(ões) não publicada(s) — publique para ativá-las.",
2605
+ message_one: "Você tem {{count}} alteração não publicada — publique para ativá-la.",
2606
+ message_many: "Você tem {{count}} de alterações não publicadas — publique para ativá-las.",
2607
+ message_other: "Você tem {{count}} alterações não publicadas — publique para ativá-las.",
2304
2608
  cta: "Publicar",
2305
2609
  publishing: "Publicando…",
2306
2610
  published: "Publicado! Suas alterações estão ativas.",
@@ -2315,7 +2619,6 @@ const pt = {
2315
2619
  capabilityWarn: "Verificação de autoria: {{count}} referência(s) de capacidade não apontam para nada.",
2316
2620
  },
2317
2621
  title: "Início",
2318
- subtitle: "Painel do seu espaço de trabalho",
2319
2622
  nav: "Início",
2320
2623
  allApps: "Todas as aplicações",
2321
2624
  yourApps: "As suas aplicações",
@@ -2327,8 +2630,6 @@ const pt = {
2327
2630
  empty: "Está tudo em dia",
2328
2631
  },
2329
2632
  loading: "Carregando espaço de trabalho…",
2330
- recent: "Recentes",
2331
- starred: "Favoritos",
2332
2633
  welcome: "Bem-vindo ao ObjectUI",
2333
2634
  welcomeDescription: "Comece criando sua primeira aplicação ou configurando as preferências do sistema.",
2334
2635
  createFirstApp: "Crie sua primeira app",
@@ -2336,8 +2637,6 @@ const pt = {
2336
2637
  browseMarketplace: "Explorar marketplace de apps",
2337
2638
  quickActions: {
2338
2639
  title: "Ações rápidas",
2339
- createApp: "Criar app",
2340
- createAppDesc: "Comece com uma nova aplicação",
2341
2640
  manageObjects: "Gerenciar objetos",
2342
2641
  manageObjectsDesc: "Configure modelos de dados",
2343
2642
  systemSettings: "Configurações do sistema",
@@ -2353,18 +2652,15 @@ const pt = {
2353
2652
  greetingNight: "Turno da noite",
2354
2653
  heroTagline: "Continue de onde parou ou descubra algo novo.",
2355
2654
  open: "Abrir",
2356
- stats: {
2357
- apps: "Aplicativos",
2358
- starred: "Favoritos",
2359
- recent: "Recentes",
2360
- },
2361
2655
  recentApps: {
2362
2656
  title: "Abertos recentemente",
2363
2657
  itemType: {
2364
2658
  object: "Objeto",
2365
2659
  dashboard: "Painel",
2366
2660
  page: "Página",
2661
+ report: "Relatório",
2367
2662
  record: "Registro",
2663
+ metadata: "Metadados",
2368
2664
  },
2369
2665
  },
2370
2666
  starredApps: {
@@ -2386,7 +2682,6 @@ const pt = {
2386
2682
  organizations: "Organizações",
2387
2683
  roles: "Perfis",
2388
2684
  configuration: "Configuração",
2389
- createApp: "Criar aplicativo",
2390
2685
  administration: "Administração",
2391
2686
  datasources: "Fontes de dados",
2392
2687
  documentation: "Documentação",
@@ -2411,6 +2706,7 @@ const pt = {
2411
2706
  typeUpdate: "Atualizar",
2412
2707
  typeDelete: "Excluir",
2413
2708
  typeComment: "Comentário",
2709
+ typeSystem: "Sistema",
2414
2710
  relativeJustNow: "agora mesmo",
2415
2711
  relativeSecondsAgo: "há {{count}}s",
2416
2712
  relativeMinutesAgo: "há {{count}}m",
@@ -2432,8 +2728,13 @@ const pt = {
2432
2728
  placeholder: "Pesquisar objetos, painéis, páginas, relatórios…",
2433
2729
  inputAriaLabel: "Pesquisar objetos, painéis, páginas, relatórios",
2434
2730
  resultsCount: "{{count}} resultado para \"{{query}}\"",
2435
- resultsCountPlural: "{{count}} resultados para \"{{query}}\"",
2731
+ resultsCount_one: "{{count}} resultado para \"{{query}}\"",
2732
+ resultsCount_many: "{{count}} de resultados para \"{{query}}\"",
2733
+ resultsCount_other: "{{count}} resultados para \"{{query}}\"",
2436
2734
  itemsAvailable: "{{count}} itens disponíveis",
2735
+ itemsAvailable_one: "{{count}} item disponível",
2736
+ itemsAvailable_many: "{{count}} de itens disponíveis",
2737
+ itemsAvailable_other: "{{count}} itens disponíveis",
2437
2738
  noResults: "Nenhum resultado encontrado",
2438
2739
  noResultsHint: "Tente ajustar seus termos de pesquisa",
2439
2740
  typeObjects: "Objetos",
@@ -2458,7 +2759,11 @@ const pt = {
2458
2759
  noAppsConfigured: "Nenhum aplicativo configurado",
2459
2760
  noAppsConfiguredDescription: "Nenhum aplicativo está registrado. Crie seu primeiro aplicativo ou visite as configurações do sistema.",
2460
2761
  appNotAvailable: "Aplicativo indisponível",
2461
- appNotAvailableDescription: "Este aplicativo ainda não está disponível — a publicação pode estar em andamento. Tente novamente em instantes.",
2762
+ appNotAvailableDescription: "Este aplicativo não está disponível — tente novamente em instantes.",
2763
+ appNotFound: "Não é possível abrir este aplicativo",
2764
+ appNotFoundDescription: "O servidor não retornou este aplicativo para a sua conta.",
2765
+ appUnreachable: "Não foi possível acessar o servidor",
2766
+ appUnreachableDescription: "Não foi possível verificar este aplicativo. Tente novamente em instantes.",
2462
2767
  appAccessDenied: "Você não tem acesso a este aplicativo",
2463
2768
  appAccessDeniedDescription: "Este aplicativo existe, mas sua conta não tem autorização para abri-lo. Peça acesso a um administrador.",
2464
2769
  appAccessDeniedHome: "Voltar ao início",
@@ -2468,31 +2773,16 @@ const pt = {
2468
2773
  recordNotFound: "Registro não encontrado",
2469
2774
  recordNotFoundDescription: "O registro que você está procurando não existe ou pode ter sido excluído.",
2470
2775
  },
2471
- renderer: {
2472
- noPageSchema: "Nenhum esquema de página fornecido",
2473
- noFormSchema: "Nenhum esquema de formulário fornecido",
2474
- noDashboardSchema: "Nenhum esquema de painel fornecido",
2475
- pageRendering: "Renderizando página: {{name}}",
2476
- dashboardRendering: "Renderizando painel: {{name}}",
2477
- formRenderingMode: "Formulário renderizado no modo {{mode}}",
2478
- formRenderingFor: "para registro {{id}}",
2479
- createRecord: "Criar registro",
2480
- editRecord: "Editar registro",
2481
- page: "Página",
2482
- dashboard: "Painel",
2483
- save: "Salvar",
2484
- cancel: "Cancelar",
2485
- },
2486
2776
  actionDialog: {
2487
2777
  title: "Parâmetros de ação",
2488
2778
  description: "Insira as informações necessárias para continuar.",
2489
2779
  selectPlaceholder: "Selecionar {{label}}",
2490
2780
  requiredError: "{{label}} é obrigatório",
2781
+ unresolvedParam: 'Não é possível exibir este parâmetro: o campo em que ele se baseia não está nos metadados do objeto, portanto o controle necessário não pode ser construído. Peça a um administrador para corrigir a definição da ação.',
2782
+ carryOverHint: 'Mantido sem alterações (somente leitura)',
2491
2783
  cancel: "Cancelar",
2492
2784
  confirm: "Confirmar",
2493
2785
  uploading: "Enviando…",
2494
- defaultActionTitle: "Ação",
2495
- ok: "OK",
2496
2786
  lookupPlaceholder: "ID do registro para {{label}}",
2497
2787
  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.",
2498
2788
  },
@@ -2501,11 +2791,6 @@ const pt = {
2501
2791
  confirm: "Continuar",
2502
2792
  cancel: "Cancelar",
2503
2793
  },
2504
- rowAction: {
2505
- openMenu: "Abrir menu",
2506
- edit: "Editar",
2507
- delete: "Excluir",
2508
- },
2509
2794
  navigationSync: {
2510
2795
  addedPage: "Navegação atualizada: página \"{{name}}\" adicionada",
2511
2796
  addedDashboard: "Navegação atualizada: painel \"{{name}}\" adicionado",
@@ -2526,6 +2811,9 @@ const pt = {
2526
2811
  noRecordId: "Nenhum ID de registro fornecido",
2527
2812
  deleteConfirm: "Excluir este registro?",
2528
2813
  bulkDeleteSuccess: "{{count}} registros de {{label}} excluídos",
2814
+ bulkDeleteSuccess_one: "{{count}} registro de {{label}} excluído",
2815
+ bulkDeleteSuccess_many: "{{count}} de registros de {{label}} excluídos",
2816
+ bulkDeleteSuccess_other: "{{count}} registros de {{label}} excluídos",
2529
2817
  bulkDeletePartial: "{{succeeded}} excluídos, {{failed}} com falha",
2530
2818
  },
2531
2819
  objectViewActions: {
@@ -2537,15 +2825,6 @@ const pt = {
2537
2825
  exportFailed: "Falha na exportação: {{message}}",
2538
2826
  forecastSoon: "A exibição de previsão está chegando em breve",
2539
2827
  },
2540
- recordDetail: {
2541
- viewersTooltip: "Usuários visualizando este registro agora",
2542
- },
2543
- cellRender: {
2544
- empty: "Vazio",
2545
- yes: "Sim",
2546
- no: "Não",
2547
- systemFields: "Sistema",
2548
- },
2549
2828
  user: {
2550
2829
  profile: "Perfil",
2551
2830
  settings: "Configurações",
@@ -2582,17 +2861,17 @@ const pt = {
2582
2861
  },
2583
2862
  organizations: {
2584
2863
  create: "Criar workspace",
2585
- mine: "Minhas organizações",
2586
- title: "Organizações",
2587
- heading: "Suas organizações",
2588
- subtitle: "Selecione uma organização para continuar ou crie uma nova.",
2589
- searchPlaceholder: "Pesquisar uma organização",
2590
- new: "Nova organização",
2591
- current: "Organização atual",
2864
+ mine: "Meus workspaces",
2865
+ title: "Workspaces",
2866
+ heading: "Seus workspaces",
2867
+ subtitle: "Selecione um workspace para continuar ou crie um novo.",
2868
+ searchPlaceholder: "Pesquisar um workspace",
2869
+ new: "Novo workspace",
2870
+ current: "Workspace atual",
2592
2871
  manage: "Gerenciar",
2593
- emptyTitle: "Nenhuma organização ainda",
2594
- emptyDescription: "Crie sua primeira organização para começar.",
2595
- noMatches: "Nenhuma organização corresponde à sua pesquisa.",
2872
+ emptyTitle: "Nenhum workspace ainda",
2873
+ emptyDescription: "Crie seu primeiro workspace para começar.",
2874
+ noMatches: "Nenhum workspace corresponde à sua pesquisa.",
2596
2875
  },
2597
2876
  organization: {
2598
2877
  roles: {
@@ -2721,6 +3000,9 @@ const pt = {
2721
3000
  declined: "Convite recusado",
2722
3001
  declineFailed: "Falha ao recusar o convite",
2723
3002
  },
3003
+ current: {
3004
+ label: "Organização atual",
3005
+ },
2724
3006
  switcher: {
2725
3007
  label: "Trocar de organização",
2726
3008
  groupLabel: "Organização de trabalho",
@@ -2732,18 +3014,37 @@ const pt = {
2732
3014
  regionLabel: "Notificações",
2733
3015
  groupCount: "{{count}} notificações",
2734
3016
  groupUnread: "{{count}} não lidas",
3017
+ groupUnread_one: "{{count}} não lida",
3018
+ groupUnread_many: "{{count}} não lidas",
3019
+ groupUnread_other: "{{count}} não lidas",
2735
3020
  groupMarkRead: "Marcar como lidas",
2736
3021
  groupMarkReadTitle: "Marcar todas deste tipo como lidas",
2737
3022
  empty: "Sem notificações",
2738
3023
  markAllRead: "Marcar tudo como lido",
2739
3024
  viewAll: "Ver todas as notificações",
2740
3025
  approvalsPending: "{{count}} aprovações pendentes",
3026
+ approvalsPending_one: "{{count}} aprovação pendente",
3027
+ approvalsPending_many: "{{count}} de aprovações pendentes",
3028
+ approvalsPending_other: "{{count}} aprovações pendentes",
2741
3029
  viewApprovals: "Ver aprovações",
2742
3030
  noPendingApprovals: "Sem aprovações pendentes",
2743
3031
  openApprovalsInbox: "Abrir caixa de aprovações",
2744
3032
  badgeTotal: "{{total}} no total",
2745
3033
  badgeNotifications: "{{unread}} notificações",
2746
3034
  badgeApprovals: "{{approvals}} aprovações pendentes",
3035
+ arrivalMany: "{{count}} novas mensagens",
3036
+ arrivalMany_one: "{{count}} nova mensagem",
3037
+ arrivalMany_many: "{{count}} de novas mensagens",
3038
+ arrivalMany_other: "{{count}} novas mensagens",
3039
+ arrivalRepeats: "{{count}} novas mensagens sobre este tópico",
3040
+ arrivalRepeats_one: "{{count}} nova mensagem sobre este tópico",
3041
+ arrivalRepeats_many: "{{count}} de novas mensagens sobre este tópico",
3042
+ arrivalRepeats_other: "{{count}} novas mensagens sobre este tópico",
3043
+ arrivalOpen: "Ver",
3044
+ toastEnabled: "Avisos no aplicativo",
3045
+ desktopEnabled: "Notificações da área de trabalho",
3046
+ desktopBlocked: "Bloqueado. Permita notificações deste site nas configurações do navegador.",
3047
+ desktopUnsupported: "Este navegador não oferece suporte a notificações da área de trabalho.",
2747
3048
  emptyUnread: "Tudo lido",
2748
3049
  filterUnread: "Não lidos",
2749
3050
  filterAll: "Todos",
@@ -2757,63 +3058,19 @@ const pt = {
2757
3058
  thankYouTitle: "Obrigado!",
2758
3059
  thankYouMessage: "Seu envio foi recebido com sucesso.",
2759
3060
  redirecting: "Redirecionando em {{seconds}} segundo(s)…",
3061
+ redirectPending: "Redirecionando…",
2760
3062
  unavailableTitle: "Formulário indisponível",
2761
3063
  unavailableDescription: "Nenhum formulário público está disponível nesta URL. Certifique-se de que a exibição subjacente tenha o compartilhamento anônimo ativado.",
2762
3064
  tryDemo: "Experimentar demo",
2763
3065
  retry: "Tentar novamente",
2764
3066
  loading: "Carregando formulário…",
2765
3067
  requiredHint: "* Campo obrigatório",
3068
+ requiredFields: "Campos obrigatórios: {{fields}}",
2766
3069
  consentLabelDefault: "Aceito a política de privacidade e consinto com o processamento dos meus dados para esta solicitação.",
2767
3070
  consentLink: "Política de privacidade",
2768
3071
  consentRequired: "Por favor, aceite a política de privacidade para continuar.",
2769
3072
  rateLimited: "Reserve um momento para revisar suas respostas antes de enviar.",
2770
3073
  redirectBlocked: "Envio aceito, mas a URL de redirecionamento foi bloqueada por segurança.",
2771
- demo: {
2772
- contactTitle: "Entrar em contato",
2773
- contactDescription: "Conte-nos sobre seu projeto e um representante de vendas entrará em contato em um dia útil.",
2774
- supportTitle: "Enviar solicitação de suporte",
2775
- supportDescription: "Descreva-nos o problema — nossa equipe responderá em um dia útil.",
2776
- thankYouSalesTitle: "Obrigado — recebemos sua mensagem!",
2777
- thankYouSalesMessage: "Um representante de vendas entrará em contato em um dia útil.",
2778
- thankYouSupportTitle: "Pronto — sua solicitação está na fila.",
2779
- thankYouSupportMessage: "Um engenheiro de suporte fará o acompanhamento em breve. Salve esta página se tiver capturas de tela adicionais.",
2780
- field: {
2781
- firstName: "Nome",
2782
- lastName: "Sobrenome",
2783
- email: "E-mail corporativo",
2784
- phone: "Telefone",
2785
- jobTitle: "Cargo",
2786
- company: "Empresa",
2787
- website: "Site",
2788
- industry: "Setor",
2789
- companySize: "Tamanho da empresa",
2790
- howCanWeHelp: "Como podemos ajudar?",
2791
- subject: "Assunto",
2792
- description: "Descrição",
2793
- issueType: "Tipo de problema",
2794
- priority: "Prioridade",
2795
- },
2796
- industry: {
2797
- technology: "Tecnologia",
2798
- software: "Software / SaaS",
2799
- finance: "Finanças",
2800
- healthcare: "Saúde",
2801
- retail: "Varejo",
2802
- other: "Outro",
2803
- },
2804
- issueType: {
2805
- question: "Pergunta",
2806
- problem: "Problema",
2807
- bug: "Bug",
2808
- feature_request: "Solicitação de recurso",
2809
- },
2810
- priority: {
2811
- low: "Baixa",
2812
- medium: "Média",
2813
- high: "Alta",
2814
- critical: "Crítica",
2815
- },
2816
- },
2817
3074
  },
2818
3075
  connectAgent: {
2819
3076
  disabled: {
@@ -2859,6 +3116,9 @@ const pt = {
2859
3116
  noImportableFields: "Esse objeto não tem campos importáveis.",
2860
3117
  schemaReadFailed: "Não foi possível ler o esquema do objeto.",
2861
3118
  imported: "{{count}} linha(s) importada(s) para {{object}}.",
3119
+ imported_one: "{{count}} linha importada para {{object}}.",
3120
+ imported_many: "{{count}} de linhas importadas para {{object}}.",
3121
+ imported_other: "{{count}} linhas importadas para {{object}}.",
2862
3122
  importFrom: "Importar as linhas reais de",
2863
3123
  into: "para",
2864
3124
  opening: "Abrindo…",
@@ -2872,6 +3132,78 @@ const pt = {
2872
3132
  openProduction: "Abrir produção",
2873
3133
  manageEnvironments: "Gerenciar ambientes",
2874
3134
  },
3135
+ cloudPlanStatus: {
3136
+ current: "Plano atual",
3137
+ },
3138
+ ai: {
3139
+ nlQuery: {
3140
+ placeholder: "Faça uma pergunta sobre seus dados…",
3141
+ ask: "Perguntar",
3142
+ results: "Resultados",
3143
+ match: "Correspondência: {{percent}}",
3144
+ simulatedSummary: "Resultados para: {{query}}",
3145
+ noResults: "Nenhum registro correspondente encontrado",
3146
+ recentQueries: "Consultas recentes",
3147
+ },
3148
+ formAssist: {
3149
+ title: "Sugestões de IA",
3150
+ suggestionCount: "{{count}} sugestões",
3151
+ suggestionCount_one: "{{count}} sugestão",
3152
+ suggestionCount_many: "{{count}} de sugestões",
3153
+ suggestionCount_other: "{{count}} sugestões",
3154
+ applyAll: "Aplicar tudo",
3155
+ confidence: "Confiança: {{percent}}",
3156
+ appliedCount: "{{count}} sugestões aplicadas",
3157
+ appliedCount_one: "{{count}} sugestão aplicada",
3158
+ appliedCount_many: "{{count}} de sugestões aplicadas",
3159
+ appliedCount_other: "{{count}} sugestões aplicadas",
3160
+ },
3161
+ recommendations: {
3162
+ title: "Recomendações",
3163
+ generating: "Gerando recomendações…",
3164
+ empty: "Nenhuma recomendação disponível",
3165
+ },
3166
+ },
3167
+ aiApprovals: {
3168
+ title: "Aprovações de IA",
3169
+ description: "Ações propostas por um agente de IA que precisam de revisão humana antes da execução.",
3170
+ tabPending: "Pendentes",
3171
+ tabDecided: "Decididas",
3172
+ tabAll: "Todas",
3173
+ statusPending: "Pendente",
3174
+ statusApproved: "Aprovada",
3175
+ statusExecuted: "Executada",
3176
+ statusFailed: "Falhou",
3177
+ statusRejected: "Rejeitada",
3178
+ colTool: "Ferramenta",
3179
+ colAction: "Ação",
3180
+ colObject: "Objeto",
3181
+ colStatus: "Status",
3182
+ colProposed: "Proposta",
3183
+ colDecision: "Decisão",
3184
+ emptyTitle: "Nenhuma ação aguardando",
3185
+ emptyDescription: "Quando a IA propuser uma ação sensível, ela aparecerá aqui para revisão.",
3186
+ view: "Ver",
3187
+ approve: "Aprovar",
3188
+ reject: "Rejeitar",
3189
+ working: "Processando…",
3190
+ approveAndExecute: "Aprovar e executar",
3191
+ outcomeApprove: "Aprovação de {{id}}: {{message}}",
3192
+ outcomeReject: "Rejeição de {{id}}: {{message}}",
3193
+ outcomeExecuteFailed: "A ação falhou durante a execução",
3194
+ drawerFallbackTitle: "Ação pendente",
3195
+ drawerSubtitle: "Ferramenta {{tool}} em {{object}}",
3196
+ fieldProposedBy: "Proposta por",
3197
+ fieldDecidedBy: "Decidida por",
3198
+ fieldConversation: "Conversa",
3199
+ fieldToolInput: "Entrada da ferramenta",
3200
+ fieldResult: "Resultado",
3201
+ fieldError: "Erro",
3202
+ fieldRejectionReason: "Motivo da rejeição",
3203
+ rejectTitle: "Rejeitar esta ação?",
3204
+ rejectBody: "O motivo é devolvido à IA para que ela ajuste a próxima resposta.",
3205
+ rejectPlaceholder: "Motivo opcional (ex.: «ID de registro incorreto — confirme antes com a pessoa usuária.»)",
3206
+ },
2875
3207
  aiModelStatus: {
2876
3208
  summary: "Criar / Perguntar usa {{conversational}} ({{conversationalSource}}); estruturado usa {{structured}} ({{structuredSource}}).",
2877
3209
  summaryRouting: "Política de roteamento: planos gratuitos → {{free}}, planos pagos → {{paid}}.",
@@ -2889,6 +3221,114 @@ const pt = {
2889
3221
  sourceInherits: "igual a build/ask",
2890
3222
  sourcePinned: "fixado por {{source}}",
2891
3223
  },
3224
+ // objectui#7254 — the AI copilot's tool cards. Three families, all of them
3225
+ // English-only until this landed while every other string on the same screen
3226
+ // was translated:
3227
+ //
3228
+ // `tool.*` — one entry per PLATFORM-PROVIDED tool name
3229
+ // (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
3230
+ // closed registry those runtimes are conformance-tested
3231
+ // against). `humanizeToolName` looks each up as
3232
+ // `chatbot.tool.<tool_name>` and falls back to its English
3233
+ // title-caser for a custom / third-party tool, so a name
3234
+ // missing here is degraded, never broken. The `en` values
3235
+ // are deliberately EQUAL to what that title-caser produces:
3236
+ // adding the key must not silently reword the English UI.
3237
+ // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3238
+ // set for both surfaces (they used to carry separate
3239
+ // tables and disagreed on casing).
3240
+ // `plan.*` — the "N objects · N views · N dashboards" strip. Plural
3241
+ // FAMILIES: one slot per CLDR category the pack's language
3242
+ // selects (objectui#11432), plus the base key for a call
3243
+ // made without a count. `all-locales-key-parity.test.ts`
3244
+ // derives the required slots from `Intl.PluralRules`.
3245
+ //
3246
+ // objectui#7481 — five `tool.*` entries are NEWER than the registry above:
3247
+ // `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
3248
+ // and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
3249
+ // `@objectstack/spec` snapshot does not list them yet. They are kept here on
3250
+ // purpose: a step label the user reads must not wait on a pin bump. When the
3251
+ // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3252
+ // against the registry instead of against its own hand-held list.
3253
+ chatbot: {
3254
+ tool: {
3255
+ aggregate_data: "Resumir dados",
3256
+ get_record: "Obter registro",
3257
+ query_data: "Consultar dados",
3258
+ query_records: "Consultar registros",
3259
+ search_knowledge: "Pesquisar na base de conhecimento",
3260
+ visualize_data: "Criar gráfico",
3261
+ add_field: "Adicionar campo",
3262
+ apply_blueprint: "Construir o aplicativo",
3263
+ apply_edit: "Aplicar alterações",
3264
+ create_metadata: "Criar metadados",
3265
+ create_object: "Criar objeto",
3266
+ create_package: "Criar pacote",
3267
+ create_seed: "Gerar dados de exemplo",
3268
+ delete_field: "Excluir campo",
3269
+ describe_metadata: "Consultar metadados",
3270
+ describe_object: "Consultar a estrutura do objeto",
3271
+ get_active_package: "Obter o pacote ativo",
3272
+ get_authoring_rules: "Ler as regras de autoria",
3273
+ get_metadata_schema: "Obter o esquema de metadados",
3274
+ get_package: "Obter pacote",
3275
+ list_metadata: "Listar metadados",
3276
+ list_objects: "Listar objetos",
3277
+ list_packages: "Listar pacotes",
3278
+ load_tools: "Carregar ferramentas",
3279
+ modify_field: "Modificar campo",
3280
+ open_record: "Abrir registro",
3281
+ propose_blueprint: "Projetar o plano do aplicativo",
3282
+ set_active_package: "Trocar o pacote ativo",
3283
+ suggest_builder: "Sugerir como construir",
3284
+ test_flow: "Testar o fluxo",
3285
+ todo_write: "Anotar tarefas",
3286
+ toggle_flow: "Ativar ou desativar o fluxo",
3287
+ update_metadata: "Atualizar metadados",
3288
+ validate_expression: "Validar expressão",
3289
+ verify_build: "Verificar a construção",
3290
+ },
3291
+ toolState: {
3292
+ agentActivity: "Atividade do agente",
3293
+ pending: "Pendente",
3294
+ running: "Em execução",
3295
+ awaitingApproval: "Aguardando aprovação",
3296
+ responded: "Respondido",
3297
+ completed: "Concluído",
3298
+ error: "Erro",
3299
+ denied: "Negado",
3300
+ failed: "Falhou",
3301
+ },
3302
+ plan: {
3303
+ countObjects: "{{count}} objetos",
3304
+ countObjects_one: "{{count}} objeto",
3305
+ countObjects_many: "{{count}} de objetos",
3306
+ countObjects_other: "{{count}} objetos",
3307
+ countViews: "{{count}} visões",
3308
+ countViews_one: "{{count}} visão",
3309
+ countViews_many: "{{count}} de visões",
3310
+ countViews_other: "{{count}} visões",
3311
+ countDashboards: "{{count}} painéis",
3312
+ countDashboards_one: "{{count}} painel",
3313
+ countDashboards_many: "{{count}} de painéis",
3314
+ countDashboards_other: "{{count}} painéis",
3315
+ countSeedData: "dados de exemplo",
3316
+ },
3317
+ build: {
3318
+ building: "Criando {{app}}…",
3319
+ built: "Criação de {{app}} concluída",
3320
+ appFallback: "seu aplicativo",
3321
+ addingSampleData: "adicionando dados de exemplo",
3322
+ group: {
3323
+ object: "Objetos",
3324
+ view: "Visões",
3325
+ dashboard: "Painéis",
3326
+ app: "Aplicativo",
3327
+ seed: "Dados de exemplo",
3328
+ },
3329
+ moreArtifacts: "+{{n}} mais",
3330
+ },
3331
+ },
2892
3332
  chatbotError: {
2893
3333
  title: "Falha na resposta",
2894
3334
  fallbackDetail: "Algo deu errado. Tente novamente.",
@@ -2926,6 +3366,7 @@ const pt = {
2926
3366
  retry: "Tentar novamente",
2927
3367
  errors: {
2928
3368
  expired: "A solicitação expirou antes de ser aprovada. Comece novamente.",
3369
+ accessDenied: "A solicitação de conexão foi recusada. Comece novamente.",
2929
3370
  bindFailed: "Falha ao vincular.",
2930
3371
  deviceCodeFailed: "Falha na solicitação do código do dispositivo.",
2931
3372
  },
@@ -2968,7 +3409,7 @@ const pt = {
2968
3409
  },
2969
3410
  title: "Marketplace de aplicativos",
2970
3411
  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.",
2971
- searchPlaceholder: "Pesquisar aplicativos por nome ou ID de manifesto…",
3412
+ searchPlaceholder: 'Pesquisar aplicativos por nome ou ID do aplicativo…',
2972
3413
  searchAria: "Pesquisar aplicativos do marketplace",
2973
3414
  installed: "Instalado",
2974
3415
  installedCount: "Instalados ({{count}})",
@@ -2991,10 +3432,16 @@ const pt = {
2991
3432
  installedBadge: "Instalado v{{version}}",
2992
3433
  load: {
2993
3434
  failed: "Não foi possível carregar o marketplace",
2994
- failedHint: "Por padrão, este runtime aponta para o cloud público ObjectStack. Certifique-se de que o runtime está online.",
3435
+ 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.",
3436
+ failedHintSameOrigin: "Este runtime serve o catálogo do marketplace por conta própria. Verifique se o runtime está online.",
2995
3437
  packageFailed: "Não foi possível carregar o pacote",
2996
3438
  notFound: "Não encontrado.",
2997
3439
  },
3440
+ disabled: {
3441
+ title: "O marketplace de aplicativos está desativado",
3442
+ description: "Este runtime não tem marketplace configurado, portanto não há nada para explorar ou instalar aqui.",
3443
+ 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.",
3444
+ },
2998
3445
  detail: {
2999
3446
  homepage: "Página inicial",
3000
3447
  installedV: "Instalado · v{{version}}",
@@ -3010,10 +3457,17 @@ const pt = {
3010
3457
  purgeSampleData: 'Remover dados de exemplo',
3011
3458
  purgeConfirm: 'Excluir todos os registros de exemplo criados por este pacote? Os registros adicionados pelo usuário NÃO serão afetados.',
3012
3459
  purgeSuccess: '{{count}} registro(s) de exemplo removido(s).',
3460
+ purgeSuccess_one: '{{count}} registro de exemplo removido.',
3461
+ purgeSuccess_many: '{{count}} de registros de exemplo removidos.',
3462
+ purgeSuccess_other: '{{count}} registros de exemplo removidos.',
3013
3463
  purgeNoData: 'Nenhum registro de exemplo encontrado para remover.',
3014
3464
  reseedQueued: 'Os dados de exemplo serão recarregados no próximo acesso ao ambiente.',
3015
3465
  reseedLocalSuccess: 'Dados de exemplo recarregados: {{inserted}} inseridos, {{updated}} atualizados.',
3016
3466
  reseedPartialErrors: '({{count}} registro(s) não puderam ser gravados)',
3467
+ reseedPartialErrors_one: '({{count}} registro não pôde ser gravado)',
3468
+ reseedPartialErrors_many: '({{count}} de registros não puderam ser gravados)',
3469
+ reseedPartialErrors_other: '({{count}} registros não puderam ser gravados)',
3470
+ sampleDataKernelUnavailable: 'Este plano de controle não tem um kernel de ambiente, portanto os dados de exemplo não podem ser recarregados nem removidos aqui. Faça isso no runtime do próprio ambiente.',
3017
3471
  updateAvailable: 'Atualização disponível',
3018
3472
  },
3019
3473
  action: {
@@ -3066,7 +3520,8 @@ const pt = {
3066
3520
  reviewed: "Revisado e aprovado",
3067
3521
  unreviewed: "Ainda não revisado",
3068
3522
  signed: "Assinado",
3069
- grantsIntro: "Na instalação, este pacote receberá:",
3523
+ grantsIntro: "Este pacote solicita:",
3524
+ notEnforced: "Esta lista é registada na instalação e reconfirmada se uma versão posterior pedir mais, mas o runtime ainda não restringe o pacote a ela.",
3070
3525
  services: "Serviços da plataforma",
3071
3526
  hooks: "Hooks de ciclo de vida",
3072
3527
  network: "Acesso à rede",
@@ -3105,30 +3560,21 @@ const pt = {
3105
3560
  storage: "Armazenamento",
3106
3561
  other: "Outro",
3107
3562
  },
3108
- pricing: {
3109
- free: "Grátis",
3110
- freemium: "Freemium",
3111
- paid: "Pago",
3112
- subscription: "Assinatura",
3113
- "usage-based": "Por uso",
3114
- "contact-sales": "Contatar vendas",
3115
- },
3116
3563
  relativeTime: {
3117
3564
  today: "hoje",
3118
3565
  daysAgo: "há {{count}}d",
3119
3566
  monthsAgo: "há {{count}} meses",
3567
+ monthsAgo_one: "há {{count}} mês",
3568
+ monthsAgo_many: "há {{count}} meses",
3569
+ monthsAgo_other: "há {{count}} meses",
3120
3570
  yearsAgo: "há {{count}} anos",
3571
+ yearsAgo_one: "há {{count}} ano",
3572
+ yearsAgo_many: "há {{count}} anos",
3573
+ yearsAgo_other: "há {{count}} anos",
3121
3574
  },
3122
3575
  },
3123
- approvals: {
3124
- approve: 'Aprovar',
3125
- reject: 'Rejeitar',
3126
- comment: 'Comentário (opcional)',
3127
- approveSuccess: 'Aprovado',
3128
- rejectSuccess: 'Rejeitado',
3129
- rejectConfirm: 'Rejeitar esta solicitação de aprovação?',
3130
- },
3131
3576
  approvalsInbox: {
3577
+ recordUnresolvable: 'Este registro não pode ser aberto',
3132
3578
  loadMore: 'Carregar mais',
3133
3579
  loadingMore: 'Carregando…',
3134
3580
  loadedOf: '{{loaded}} de {{total}} carregadas',
@@ -3147,6 +3593,9 @@ const pt = {
3147
3593
  requestInfoSent: 'Devolvida ao solicitante para complemento',
3148
3594
  remindBtn: 'Lembrar',
3149
3595
  remindSuccess: 'Lembrete enviado a {{count}} aprovador(es)',
3596
+ remindSuccess_one: 'Lembrete enviado a {{count}} aprovador',
3597
+ remindSuccess_many: 'Lembrete enviado a {{count}} de aprovadores',
3598
+ remindSuccess_other: 'Lembrete enviado a {{count}} aprovadores',
3150
3599
  remindThrottled: 'Um lembrete já foi enviado há pouco — tente mais tarde.',
3151
3600
  replyPlaceholder: 'Responder nesta solicitação…',
3152
3601
  slaRemaining: 'SLA: faltam {{dur}}',
@@ -3163,6 +3612,9 @@ const pt = {
3163
3612
  progressApprovals: 'Aprovações — {{got}} de {{need}}',
3164
3613
  progressGroups: 'Progresso de assinaturas — {{got}} de {{need}} grupos',
3165
3614
  progressEligible: '{{count}} aprovador(es) elegível(eis)',
3615
+ progressEligible_one: '{{count}} aprovador elegível',
3616
+ progressEligible_many: '{{count}} de aprovadores elegíveis',
3617
+ progressEligible_other: '{{count}} aprovadores elegíveis',
3166
3618
  progressBar: 'Progresso da decisão',
3167
3619
  declaredActions: 'Ações',
3168
3620
  attachmentChip: 'Anexo',
@@ -3194,6 +3646,9 @@ const pt = {
3194
3646
  filterCount: '{{shown}} de {{total}}',
3195
3647
  selected: 'selecionadas',
3196
3648
  actionableCount: '({{count}} acionáveis)',
3649
+ actionableCount_one: '({{count}} acionável)',
3650
+ actionableCount_many: '({{count}} acionáveis)',
3651
+ actionableCount_other: '({{count}} acionáveis)',
3197
3652
  selectAll: 'Selecionar tudo',
3198
3653
  selectRow: 'Selecionar solicitação',
3199
3654
  colRequest: 'Solicitação',
@@ -3234,12 +3689,19 @@ const pt = {
3234
3689
  submittedAgo: 'Enviada {{when}}',
3235
3690
  completedAt: 'Concluída {{when}}',
3236
3691
  waitingOn: 'Aguardando',
3692
+ approverNameSeparator: ', ',
3693
+ approverUnstaffed: '{{seat}} (atualmente sem titular)',
3237
3694
  history: 'Atividade',
3238
3695
  noActions: 'Nenhuma ação ainda.',
3239
3696
  actSubmit: 'Enviada',
3240
3697
  actApprove: 'Aprovada',
3241
3698
  actReject: 'Rejeitada',
3242
3699
  actRecall: 'Retirada',
3700
+ overrideActionLabel: '{{action}} (substituição)',
3701
+ 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.',
3702
+ 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.',
3703
+ viaOverrideChip: 'Substituição de administrador',
3704
+ viaOverrideHint: 'Quem agiu não ocupava vaga de aprovador nesta etapa — admitido pela via de substituição de administrador.',
3243
3705
  rawData: 'Dados brutos (JSON)',
3244
3706
  copy: 'Copiar',
3245
3707
  copied: 'Copiado',
@@ -3260,11 +3722,23 @@ const pt = {
3260
3722
  approveN: 'Aprovar {{count}}',
3261
3723
  rejectN: 'Rejeitar {{count}}',
3262
3724
  bulkApproveTitle: 'Aprovar {{count}} solicitações?',
3725
+ bulkApproveTitle_one: 'Aprovar {{count}} solicitação?',
3726
+ bulkApproveTitle_many: 'Aprovar {{count}} de solicitações?',
3727
+ bulkApproveTitle_other: 'Aprovar {{count}} solicitações?',
3263
3728
  bulkApproveBody: 'Cada solicitação é aprovada com sua identidade e o fluxo segue pelo ramo de aprovação.',
3264
3729
  bulkRejectTitle: 'Rejeitar {{count}} solicitações?',
3730
+ bulkRejectTitle_one: 'Rejeitar {{count}} solicitação?',
3731
+ bulkRejectTitle_many: 'Rejeitar {{count}} de solicitações?',
3732
+ bulkRejectTitle_other: 'Rejeitar {{count}} solicitações?',
3265
3733
  bulkRejectBody: 'As solicitações selecionadas serão rejeitadas e os solicitantes notificados.',
3266
3734
  bulkApproved: '{{count}} solicitações aprovadas',
3735
+ bulkApproved_one: '{{count}} solicitação aprovada',
3736
+ bulkApproved_many: '{{count}} de solicitações aprovadas',
3737
+ bulkApproved_other: '{{count}} solicitações aprovadas',
3267
3738
  bulkRejected: '{{count}} solicitações rejeitadas',
3739
+ bulkRejected_one: '{{count}} solicitação rejeitada',
3740
+ bulkRejected_many: '{{count}} de solicitações rejeitadas',
3741
+ bulkRejected_other: '{{count}} solicitações rejeitadas',
3268
3742
  bulkPartial: '{{ok}} com sucesso, {{fail}} falharam: {{which}}',
3269
3743
  rejectOneTitle: 'Rejeitar "{{title}}"?',
3270
3744
  rejectOneBody: 'A solicitação será rejeitada e o solicitante notificado.',
@@ -3289,8 +3763,17 @@ const pt = {
3289
3763
  alreadyDecided: 'Esta solicitação já foi decidida. Atualize a lista.',
3290
3764
  justNow: 'agora mesmo',
3291
3765
  minutesAgo: 'há {{count}} min',
3766
+ minutesAgo_one: 'há {{count}} min',
3767
+ minutesAgo_many: 'há {{count}} min',
3768
+ minutesAgo_other: 'há {{count}} min',
3292
3769
  hoursAgo: 'há {{count}} h',
3770
+ hoursAgo_one: 'há {{count}} h',
3771
+ hoursAgo_many: 'há {{count}} h',
3772
+ hoursAgo_other: 'há {{count}} h',
3293
3773
  daysAgo: 'há {{count}} dias',
3774
+ daysAgo_one: 'há {{count}} dia',
3775
+ daysAgo_many: 'há {{count}} dias',
3776
+ daysAgo_other: 'há {{count}} dias',
3294
3777
  },
3295
3778
  preview: {
3296
3779
  empty: {
@@ -3325,7 +3808,18 @@ const pt = {
3325
3808
  detailNone: 'Nenhuma diferença detectada — o rascunho corresponde à versão publicada.',
3326
3809
  detailChangedKeys: 'Também alterado:',
3327
3810
  confirmNote: 'Publicar libera atomicamente todos os {{count}} rascunhos pendentes deste pacote.',
3811
+ confirmNote_one: 'Publicar libera atomicamente {{count}} rascunho pendente deste pacote.',
3812
+ confirmNote_many: 'Publicar libera atomicamente todos os {{count}} de rascunhos pendentes deste pacote.',
3813
+ confirmNote_other: 'Publicar libera atomicamente todos os {{count}} rascunhos pendentes deste pacote.',
3328
3814
  publishConfirm: 'Publicar tudo',
3815
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3816
+ // the confirm button so a refusal the door would issue is read BEFORE
3817
+ // the click rather than as a toast after the batch rolled back.
3818
+ securityBlockTitle: 'A publicação será recusada — {{count}} item(ns) precisam de uma decisão primeiro',
3819
+ securityBlockTitle_one: 'A publicação será recusada — {{count}} item precisa de uma decisão primeiro',
3820
+ securityBlockTitle_many: 'A publicação será recusada — {{count}} de itens precisam de uma decisão primeiro',
3821
+ securityBlockTitle_other: 'A publicação será recusada — {{count}} itens precisam de uma decisão primeiro',
3822
+ securityBlockWhere: 'Corrija no objeto em Configurações → Compartilhamento de registros e publique novamente.',
3329
3823
  },
3330
3824
  // ADR-0045 — the materialized-but-unlisted app banner
3331
3825
  // (UnpublishedAppBar.tsx), sibling of draftBar above.
@@ -3349,7 +3843,7 @@ const pt = {
3349
3843
  revertLabel: 'Uma alteração foi desfeita',
3350
3844
  applyLabel: 'Alteração de compilação',
3351
3845
  revert: 'desfazer',
3352
- items: 'itens',
3846
+ items: 'Itens: {{count}}',
3353
3847
  revertAction: 'Desfazer',
3354
3848
  reverted: 'Desfeito — a alteração foi revertida.',
3355
3849
  revertFailed: 'Falha ao desfazer',
@@ -3372,22 +3866,33 @@ const pt = {
3372
3866
  noResults: "Sem resultados",
3373
3867
  searchField: "Pesquisar {{label}}…",
3374
3868
  enterId: "Inserir ID de {{label}}",
3869
+ addValue: "Digite um valor e pressione Enter",
3870
+ removeValue: "Remover {{value}}",
3871
+ rangeStart: "De",
3872
+ rangeEnd: "Até",
3375
3873
  operators: {
3376
3874
  equals: "Igual a",
3377
- notEquals: "Diferente de",
3875
+ not_equals: "Diferente de",
3378
3876
  contains: "Contém",
3379
- notContains: "Não contém",
3380
- isEmpty: "Está vazio",
3381
- isNotEmpty: "Não está vazio",
3382
- greaterThan: "Maior que",
3383
- lessThan: "Menor que",
3384
- greaterOrEqual: "Maior ou igual",
3385
- lessOrEqual: "Menor ou igual",
3877
+ icontains: "Contém (ignorar maiúsculas)",
3878
+ not_contains: "Não contém",
3879
+ is_empty: "Está vazio",
3880
+ is_not_empty: "Não está vazio",
3881
+ greater_than: "Maior que",
3882
+ less_than: "Menor que",
3883
+ greater_than_or_equal: "Maior ou igual",
3884
+ less_than_or_equal: "Menor ou igual",
3386
3885
  before: "Antes de",
3387
3886
  after: "Depois de",
3388
3887
  between: "Entre",
3389
3888
  in: "Em",
3390
- notIn: "Não em",
3889
+ not_in: "Não em",
3890
+ starts_with: "Começa com",
3891
+ ends_with: "Termina com",
3892
+ is_null: "É null",
3893
+ is_not_null: "Não é null",
3894
+ exists: "Está definido",
3895
+ notExists: "Não está definido",
3391
3896
  },
3392
3897
  },
3393
3898
  sortBuilder: {
@@ -3401,7 +3906,9 @@ const pt = {
3401
3906
  },
3402
3907
  collaboration: {
3403
3908
  commentCount: "{{count}} comentários",
3404
- commentCountOne: "{{count}} comentário",
3909
+ commentCount_one: "{{count}} comentário",
3910
+ commentCount_many: "{{count}} de comentários",
3911
+ commentCount_other: "{{count}} comentários",
3405
3912
  resolvedSuffix: " · Resolvido",
3406
3913
  sortComments: "Ordenar comentários",
3407
3914
  sortOldest: "Mais antigos",
@@ -3410,11 +3917,22 @@ const pt = {
3410
3917
  reopen: "Reabrir",
3411
3918
  justNow: "agora mesmo",
3412
3919
  minutesAgo: "há {{count}} min",
3920
+ minutesAgo_one: "há {{count}} min",
3921
+ minutesAgo_many: "há {{count}} min",
3922
+ minutesAgo_other: "há {{count}} min",
3413
3923
  hoursAgo: "há {{count}} h",
3924
+ hoursAgo_one: "há {{count}} h",
3925
+ hoursAgo_many: "há {{count}} h",
3926
+ hoursAgo_other: "há {{count}} h",
3414
3927
  daysAgo: "há {{count}} d",
3928
+ daysAgo_one: "há {{count}} d",
3929
+ daysAgo_many: "há {{count}} d",
3930
+ daysAgo_other: "há {{count}} d",
3415
3931
  edited: "(editado)",
3416
3932
  reactionCount: "{{count}} reações",
3417
- reactionCountOne: "{{count}} reação",
3933
+ reactionCount_one: "{{count}} reação",
3934
+ reactionCount_many: "{{count}} de reações",
3935
+ reactionCount_other: "{{count}} reações",
3418
3936
  addThumbsUp: "Adicionar curtida",
3419
3937
  reply: "Responder",
3420
3938
  reactThumbsUp: "Reagir com curtida",
@@ -3425,9 +3943,13 @@ const pt = {
3425
3943
  commentPlaceholder: "Adicionar um comentário… (use @ para mencionar)",
3426
3944
  send: "Enviar",
3427
3945
  presentUserCount: "{{count}} usuários presentes",
3428
- presentUserCountOne: "{{count}} usuário presente",
3946
+ presentUserCount_one: "{{count}} usuário presente",
3947
+ presentUserCount_many: "{{count}} de usuários presentes",
3948
+ presentUserCount_other: "{{count}} usuários presentes",
3429
3949
  moreUserCount: "mais {{count}} usuários",
3430
- moreUserCountOne: "mais {{count}} usuário",
3950
+ moreUserCount_one: "mais {{count}} usuário",
3951
+ moreUserCount_many: "mais {{count}} de usuários",
3952
+ moreUserCount_other: "mais {{count}} usuários",
3431
3953
  userStatusTitle: "{{name}} ({{status}})",
3432
3954
  statusActive: "ativo",
3433
3955
  statusIdle: "inativo",
@@ -3435,6 +3957,18 @@ const pt = {
3435
3957
  },
3436
3958
  wizard: {
3437
3959
  missingRequired: "Preencha os campos obrigatórios: {{fields}}",
3960
+ back: "Voltar",
3961
+ submitting: "Enviando…",
3962
+ stepFallback: "Etapa {{n}}",
3963
+ progressLabel: "Progresso",
3964
+ emptyStep: "Nenhum campo configurado para esta etapa",
3965
+ },
3966
+ flowRunner: {
3967
+ title: 'Entrada',
3968
+ submitting: 'Enviando…',
3969
+ saveAndContinue: 'Salvar e continuar',
3970
+ nextStep: 'Salvo — próxima etapa',
3971
+ completed: 'Fluxo "{{flow}}" concluído',
3438
3972
  },
3439
3973
  appManagement: {
3440
3974
  title: "Aplicativos",
@@ -3485,5 +4019,49 @@ const pt = {
3485
4019
  bulkOperationFailed: "Falha na operação em massa: {{reason}}",
3486
4020
  },
3487
4021
  },
4022
+ // objectui#6301 — Configuração › Automação de pacotes (ADR-0126 §7.4).
4023
+ // Terminologia do pack: `common.package` = Pacote, `flowRunner.completed` =
4024
+ // Fluxo, aspas "…". ⛔ Nenhuma formulação de linhagem ou desvio neste
4025
+ // grupo (§9).
4026
+ packagedAutomation: {
4027
+ title: "Automação de pacotes",
4028
+ subtitle: "Fluxos e ações fornecidos pelos pacotes instalados. Desligue um nesta implantação ou clone um fluxo com um novo nome para personalizá-lo. A edição acontece no Studio.",
4029
+ refresh: "Atualizar",
4030
+ flowsHeading: "Fluxos de pacote",
4031
+ actionsHeading: "Ações de pacote",
4032
+ colFlow: "Fluxo",
4033
+ colActivation: "Ativação",
4034
+ colActions: "Ações",
4035
+ toggleLabel: "Ativação de {{label}}",
4036
+ on: "Ativado",
4037
+ off: "Desativado",
4038
+ clone: "Clonar",
4039
+ cloneTitle: "Clonar fluxo do pacote",
4040
+ cloneBody: "A cópia mantém toda a definição e exige um novo nome de máquina e um novo rótulo. Edite a cópia no Studio.",
4041
+ cloneName: "Novo nome de máquina",
4042
+ cloneLabel: "Novo rótulo",
4043
+ cancel: "Cancelar",
4044
+ cloneConfirm: "Criar clone",
4045
+ cloneCreated: 'Fluxo "{{name}}" criado.',
4046
+ emptyTitle: "Nenhum fluxo de pacote",
4047
+ emptyBody: "Nenhum pacote instalado fornece um fluxo de automação nesta implantação. Os fluxos que você mesmo cria ficam no Studio.",
4048
+ loadFailed: "Não foi possível carregar a automação de pacotes.",
4049
+ toggleFailedHttp: "Não foi possível alterar a ativação (HTTP {{status}}).",
4050
+ toggleFailed: "Não foi possível alterar a ativação.",
4051
+ cloneFailedHttp: "Não foi possível clonar este fluxo (HTTP {{status}}).",
4052
+ cloneFailed: "Não foi possível clonar este fluxo.",
4053
+ actionsSubtitle: "Ações fornecidas pelos pacotes instalados. Desligue uma nesta implantação e ela deixa de ser executada em todos os lugares onde é oferecida. Criar sua própria ação ao lado dela continua disponível no Studio.",
4054
+ colAction: "Ação",
4055
+ colObject: "Objeto",
4056
+ actionToggleLabel: "Ativação de {{label}} em {{object}}",
4057
+ actionsEmptyTitle: "Nenhuma ação de pacote",
4058
+ actionsEmptyBody: "Nenhum pacote instalado declara uma ação nesta implantação. As ações que você mesmo cria ficam no Studio.",
4059
+ actionsLoadFailed: "Não foi possível carregar as ações de pacote.",
4060
+ },
4061
+ element: {
4062
+ number: {
4063
+ noObject: "Nenhum objeto indicado: defina object ou dataSource.object.",
4064
+ },
4065
+ },
3488
4066
  };
3489
4067
  export default pt;