@object-ui/i18n 17.6.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 (56) hide show
  1. package/CHANGELOG.md +4320 -0
  2. package/README.md +192 -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 +27 -1
  10. package/dist/i18n.js +99 -16
  11. package/dist/index.d.ts +7 -13
  12. package/dist/index.js +41 -17
  13. package/dist/locales/ar.d.ts +946 -113
  14. package/dist/locales/ar.js +1095 -161
  15. package/dist/locales/de.d.ts +618 -113
  16. package/dist/locales/de.js +715 -134
  17. package/dist/locales/en.d.ts +632 -127
  18. package/dist/locales/en.js +1044 -162
  19. package/dist/locales/es.d.ts +700 -113
  20. package/dist/locales/es.js +794 -130
  21. package/dist/locales/fr.d.ts +700 -113
  22. package/dist/locales/fr.js +795 -132
  23. package/dist/locales/index.d.ts +6990 -1169
  24. package/dist/locales/index.js +48 -9
  25. package/dist/locales/ja.d.ts +618 -113
  26. package/dist/locales/ja.js +708 -128
  27. package/dist/locales/ko.d.ts +618 -113
  28. package/dist/locales/ko.js +712 -132
  29. package/dist/locales/pt.d.ts +700 -113
  30. package/dist/locales/pt.js +794 -130
  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 +782 -113
  36. package/dist/locales/ru.js +910 -152
  37. package/dist/locales/zh.d.ts +635 -130
  38. package/dist/locales/zh.js +725 -131
  39. package/dist/pickLocalized.d.ts +30 -0
  40. package/dist/pickLocalized.js +39 -0
  41. package/dist/provider.d.ts +101 -12
  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 +11 -0
  47. package/dist/useObjectLabel.d.ts +40 -18
  48. package/dist/useObjectLabel.js +46 -14
  49. package/dist/useSafeTranslation.js +40 -42
  50. package/dist/utils/formatting.d.ts +16 -0
  51. package/dist/utils/formatting.js +23 -3
  52. package/dist/utils/spec-formatters.d.ts +13 -23
  53. package/dist/utils/spec-formatters.js +41 -2
  54. package/dist/utils/spec-translations.d.ts +16 -3
  55. package/dist/utils/spec-translations.js +52 -13
  56. 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',
@@ -115,7 +127,9 @@ const pt = {
115
127
  closePanel: "Fechar painel",
116
128
  resizeDrawer: "Redimensionar painel",
117
129
  itemCount: "{{count}} itens",
118
- itemCountOne: "{{count}} item",
130
+ itemCount_one: "{{count}} item",
131
+ itemCount_many: "{{count}} de itens",
132
+ itemCount_other: "{{count}} itens",
119
133
  toggleSidebar: "Alternar barra lateral",
120
134
  package: "Pacote",
121
135
  done: "Concluído",
@@ -123,6 +137,16 @@ const pt = {
123
137
  record: "Registro",
124
138
  retry: "Tentar novamente",
125
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.",
126
150
  },
127
151
  actions: {
128
152
  decisionOutput: {
@@ -134,6 +158,14 @@ const pt = {
134
158
  acknowledge: 'Eu o salvei',
135
159
  copyAll: 'Copiar tudo',
136
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}}',
137
169
  },
138
170
  validation: {
139
171
  required: "{{field}} é obrigatório",
@@ -151,19 +183,45 @@ const pt = {
151
183
  },
152
184
  form: {
153
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.",
154
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.",
155
192
  discardTitle: "Descartar as alterações?",
156
193
  discardMessage: "Você tem alterações não salvas. Se fechar este formulário agora, suas edições serão perdidas.",
157
194
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
158
195
  // description, used when the form declares no `description` of its own.
159
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
+ },
160
219
  keepEditing: "Continuar editando",
161
220
  discard: "Descartar",
162
221
  conflictTitle: "Conflito ao salvar",
163
222
  conflictMessage: "Outra pessoa alterou este registro enquanto você editava. Sobrescrever substituirá as alterações dela pelas suas.",
164
223
  conflictLatestVersion: "Salvamento dela: {{time}}",
165
224
  conflictOverwrite: "Sobrescrever",
166
- addItem: "Adicionar item",
167
225
  removeItem: "Remover item",
168
226
  fieldRequired: "Este campo é obrigatório",
169
227
  invalidFormat: "Formato inválido",
@@ -181,6 +239,12 @@ const pt = {
181
239
  createSuccess: "{{object}} criado",
182
240
  updateSuccess: "{{object}} atualizado",
183
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.",
184
248
  fullscreen: {
185
249
  title: "Editar texto",
186
250
  description: "Edite o valor de texto completo e depois salve ou cancele as alterações.",
@@ -205,6 +269,9 @@ const pt = {
205
269
  },
206
270
  relativeDate: {
207
271
  overdue: "Atrasado {{count}} d",
272
+ overdue_one: "Atrasado {{count}} d",
273
+ overdue_many: "Atrasado {{count}} d",
274
+ overdue_other: "Atrasado {{count}} d",
208
275
  },
209
276
  file: {
210
277
  dragDropHere: 'Arraste e solte arquivos aqui',
@@ -221,6 +288,7 @@ const pt = {
221
288
  remove: 'Remover {{name}}',
222
289
  exceedsMaxSize: '"{{name}}" excede o tamanho máximo ({{max}} MB)',
223
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',
224
292
  },
225
293
  richText: {
226
294
  format: "Formato: {{format}}",
@@ -248,6 +316,9 @@ const pt = {
248
316
  selectBusinessUnit: "Selecionar uma unidade de negócio",
249
317
  selectPosition: "Selecionar um cargo",
250
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",
251
322
  },
252
323
  filterCondition: {
253
324
  selectObjectFirst: "Selecione primeiro um objeto.",
@@ -258,6 +329,26 @@ const pt = {
258
329
  editAsJson: "Editar como JSON",
259
330
  useVisualBuilder: "Usar o construtor visual",
260
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
+ },
261
352
  tags: {
262
353
  placeholder: "Digite e pressione Enter para adicionar…",
263
354
  },
@@ -273,6 +364,16 @@ const pt = {
273
364
  characterCount: "Contagem de caracteres: {{count}} de {{max}}",
274
365
  charactersRemaining: "Caracteres restantes: {{count}}",
275
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
+ },
276
377
  },
277
378
  table: {
278
379
  rowsPerPage: "Linhas por página",
@@ -301,23 +402,41 @@ const pt = {
301
402
  open: "Abrir",
302
403
  search: "Pesquisar…",
303
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",
304
408
  saveFailed: 'Falha ao salvar',
305
409
  selected: "{{count}} selecionado(s)",
410
+ selected_one: "{{count}} selecionado",
411
+ selected_many: "{{count}} selecionados",
412
+ selected_other: "{{count}} selecionados",
306
413
  edit: "Editar",
307
414
  delete: "Excluir",
308
415
  },
309
416
  grid: {
310
417
  bulkSelected: "{{count}} selecionados",
418
+ bulkSelected_one: "{{count}} selecionado",
419
+ bulkSelected_many: "{{count}} selecionados",
420
+ bulkSelected_other: "{{count}} selecionados",
311
421
  bulkSelectedAllMatches: "{{count}} selecionados (todas as correspondências)",
312
422
  bulkClear: "Limpar seleção",
313
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.",
314
427
  bulkSelectAllMatching: "Selecionar todas as {{count}} correspondências",
315
428
  bulkAllMatchingSelected: "Todos os {{count}} registros correspondentes estão selecionados.",
316
429
  bulk: {
317
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.",
318
434
  overLimit: "A seleção ({{count}}) excede o limite da ação ({{limit}}). Reduza a seleção para prosseguir.",
319
435
  affectedRecords: "Registros afetados ({{count}}):",
320
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.',
321
440
  rowFallback: "Linha {{index}}",
322
441
  andMore: "… e mais {{count}}",
323
442
  processed: "{{count}} / {{total}} processados",
@@ -335,7 +454,6 @@ const pt = {
335
454
  undo: "Desfazer",
336
455
  undoing: "Desfazendo…",
337
456
  done: "Concluído",
338
- selectPlaceholder: "Selecionar…",
339
457
  loading: "Carregando…",
340
458
  },
341
459
  actions: "Ações",
@@ -354,6 +472,14 @@ const pt = {
354
472
  yes: "Sim",
355
473
  no: "Não",
356
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
+ },
357
483
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
358
484
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
359
485
  // pack controls its own separator and word order.
@@ -380,10 +506,15 @@ const pt = {
380
506
  },
381
507
  import: {
382
508
  downloadTemplate: "Baixar modelo",
383
- 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.",
384
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.",
385
513
  autoMatched: "Correspondência automática",
386
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.",
387
518
  confidence: {
388
519
  high: "Confiança alta",
389
520
  medium: "Confiança média",
@@ -396,8 +527,17 @@ const pt = {
396
527
  cancelImport: "Cancelar a importação",
397
528
  importCancelled: "Importação cancelada",
398
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}}).",
399
533
  createdCount: "{{count}} criados",
534
+ createdCount_one: "{{count}} criado",
535
+ createdCount_many: "{{count}} criados",
536
+ createdCount_other: "{{count}} criados",
400
537
  updatedCount: "{{count}} atualizados",
538
+ updatedCount_one: "{{count}} atualizado",
539
+ updatedCount_many: "{{count}} atualizados",
540
+ updatedCount_other: "{{count}} atualizados",
401
541
  downloadFailed: "Baixar as linhas com falha",
402
542
  options: "Opções de importação",
403
543
  writeMode: "Quando uma linha corresponde a um registro existente",
@@ -445,6 +585,9 @@ const pt = {
445
585
  historyColResult: "Resultado",
446
586
  historyColTime: "Quando",
447
587
  errorCount: "{{count}} erros",
588
+ errorCount_one: "{{count}} erro",
589
+ errorCount_many: "{{count}} de erros",
590
+ errorCount_other: "{{count}} erros",
448
591
  undoImport: "Desfazer a importação",
449
592
  undoing: "Desfazendo…",
450
593
  undoConfirm: "Desfazer esta importação? Os registros criados serão excluídos e os registros atualizados voltarão aos valores anteriores.",
@@ -505,7 +648,13 @@ const pt = {
505
648
  mapped: "Mapeado",
506
649
  skipped: "Pulado",
507
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",
508
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",
509
658
  clickToFix: "— clique em uma célula destacada para editar em linha.",
510
659
  showingRows: "Mostrando {{shown}} de {{total}} linhas",
511
660
  importing: "Importando… {{progress}}%",
@@ -513,11 +662,17 @@ const pt = {
513
662
  imported: "{{count}} importado(s)",
514
663
  skippedCount: "{{count}} pulado(s)",
515
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",
516
668
  cancel: "Cancelar",
517
669
  back: "Voltar",
518
670
  next: "Próximo",
519
671
  close: "Fechar",
520
672
  importNRows: "Importar {{count}} linhas",
673
+ importNRows_one: "Importar {{count}} linha",
674
+ importNRows_many: "Importar {{count}} de linhas",
675
+ importNRows_other: "Importar {{count}} linhas",
521
676
  importingProgress: "Importando…",
522
677
  requiredMark: "*",
523
678
  required: "Obrigatório",
@@ -529,11 +684,38 @@ const pt = {
529
684
  month: "Mês",
530
685
  week: "Semana",
531
686
  day: "Dia",
532
- agenda: "Agenda",
533
687
  allDay: "Dia inteiro",
534
- noEvents: "Sem eventos",
535
688
  newEvent: "Novo evento",
536
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
+ },
537
719
  },
538
720
  list: {
539
721
  firstRunTitle: "Ainda não há nada aqui",
@@ -576,7 +758,9 @@ const pt = {
576
758
  refresh: "Atualizar",
577
759
  loading: "Carregando registros…",
578
760
  recordCount: "{{count}} registros",
579
- recordCountOne: "{{count}} registro",
761
+ recordCount_one: "{{count}} registro",
762
+ recordCount_many: "{{count}} de registros",
763
+ recordCount_other: "{{count}} registros",
580
764
  addRecord: "Adicionar registro",
581
765
  tabs: "Abas",
582
766
  allRecords: "Todos os registros",
@@ -608,7 +792,7 @@ const pt = {
608
792
  hideFieldsTitle: "Ocultar campos",
609
793
  dataLimitReached: "Os primeiros {{limit}} registros estão sendo exibidos. Pode haver mais dados disponíveis.",
610
794
  viewSettings: "Configurações de exibição",
611
- 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.",
612
796
  addGroup: "Adicionar campo de grupo",
613
797
  collapsedByDefault: "Recolhido por padrão",
614
798
  removeGroup: "Remover",
@@ -673,6 +857,17 @@ const pt = {
673
857
  },
674
858
  gantt: {
675
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.",
676
871
  },
677
872
  },
678
873
  gantt: {
@@ -690,6 +885,7 @@ const pt = {
690
885
  },
691
886
  aria: {
692
887
  taskList: "Lista de tarefas",
888
+ refreshing: "Atualizando…",
693
889
  },
694
890
  tooltip: {
695
891
  days: "d",
@@ -735,13 +931,22 @@ const pt = {
735
931
  conflict: {
736
932
  title: "Conflito de agendamento",
737
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?",
738
937
  confirm: "Reagendar automaticamente",
739
938
  cancel: "Manter como está",
740
939
  },
741
940
  autoScheduleDlg: {
742
941
  title: "Agendamento automático",
743
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?",
744
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.",
745
950
  confirm: "Aplicar",
746
951
  cancel: "Cancelar",
747
952
  none: "Todas as dependências foram atendidas — nada a reagendar.",
@@ -820,6 +1025,7 @@ const pt = {
820
1025
  tabActionsFor: "Ações de exibição para {{name}}",
821
1026
  readonlyAriaLabel: "Exibição somente leitura",
822
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.",
823
1029
  },
824
1030
  designer: {
825
1031
  undo: "Desfazer",
@@ -847,7 +1053,9 @@ const pt = {
847
1053
  pageHeaderActions: "Ações do cabeçalho da página",
848
1054
  emojiPicker: "Seletor de emojis",
849
1055
  reactionCount: "{{emoji}} {{count}} reações",
850
- 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",
851
1059
  recordDetail: "Detalhe do registro",
852
1060
  recordDetailWithLabel: "Detalhe de {{label}}",
853
1061
  openAsFullPage: "Abrir como página inteira",
@@ -874,7 +1082,6 @@ const pt = {
874
1082
  viewAll: "Ver tudo",
875
1083
  new: "Novo",
876
1084
  add: "Adicionar",
877
- emptyValue: "—",
878
1085
  comments: "Comentários",
879
1086
  searchComments: "Pesquisar comentários…",
880
1087
  addCommentPlaceholder: "Adicionar comentário… (Ctrl+Enter para enviar)",
@@ -885,11 +1092,22 @@ const pt = {
885
1092
  unpin: "Desfixar",
886
1093
  justNow: "agora mesmo",
887
1094
  minutesAgo: "há {{count}} min",
1095
+ minutesAgo_one: "há {{count}} min",
1096
+ minutesAgo_many: "há {{count}} min",
1097
+ minutesAgo_other: "há {{count}} min",
888
1098
  hoursAgo: "há {{count}} h",
1099
+ hoursAgo_one: "há {{count}} h",
1100
+ hoursAgo_many: "há {{count}} h",
1101
+ hoursAgo_other: "há {{count}} h",
889
1102
  daysAgo: "há {{count}} d",
1103
+ daysAgo_one: "há {{count}} d",
1104
+ daysAgo_many: "há {{count}} d",
1105
+ daysAgo_other: "há {{count}} d",
890
1106
  dropFilesToUpload: "Arraste arquivos aqui ou clique para enviar",
891
1107
  attachmentCount: "{{count}} anexo",
892
- attachmentCountPlural: "{{count}} anexos",
1108
+ attachmentCount_one: "{{count}} anexo",
1109
+ attachmentCount_many: "{{count}} de anexos",
1110
+ attachmentCount_other: "{{count}} anexos",
893
1111
  removeAttachment: "Remover anexo",
894
1112
  // Record Attachments panel (enable.files, objectstack#4358)
895
1113
  attachments: "Anexos",
@@ -907,11 +1125,6 @@ const pt = {
907
1125
  attachmentsLoadFailed: "Não foi possível carregar os anexos deste registro.",
908
1126
  attachmentsApiUnavailable: "A lista de anexos não está disponível neste objeto.",
909
1127
  retryLoadAttachments: "Tentar novamente",
910
- unifiedDiff: "Visualização unificada",
911
- sideBySideDiff: "Visualização lado a lado",
912
- noChanges: "Sem alterações",
913
- previousVersion: "Anterior",
914
- currentVersion: "Atual",
915
1128
  discussion: "Discussão",
916
1129
  showDiscussion: "Mostrar discussão ({{count}})",
917
1130
  hideDiscussion: "Ocultar discussão",
@@ -926,25 +1139,36 @@ const pt = {
926
1139
  writeComment: "Escreva um comentário…",
927
1140
  subscribedTooltip: "Inscrito — clique para cancelar inscrição",
928
1141
  unsubscribedTooltip: "Inscrever-se para notificações",
929
- firstRecord: "Primeiro registro (Home)",
930
- previousRecordKey: "Registro anterior (←)",
931
- nextRecordKey: "Próximo registro (→)",
932
- lastRecord: "Último registro (End)",
933
1142
  noRecords: "Sem registros",
934
- searchWhileNavigating: "Pesquisar durante a navegação",
935
- searchRecords: "Pesquisar registros…",
936
1143
  allActivity: "Toda atividade",
937
1144
  commentsOnly: "Apenas comentários",
938
1145
  fieldChangesFilter: "Alterações de campo",
939
1146
  tasksOnly: "Apenas tarefas",
940
1147
  leaveCommentPlaceholder: "Deixar um comentário… (Ctrl+Enter para enviar)",
941
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',
942
1164
  loadMore: "Carregar mais",
943
1165
  edited: "(editado)",
944
1166
  via: "via {{source}}",
945
1167
  viewSource: "Ver origem",
946
1168
  replyCount: "{{count}} resposta",
947
- replyCountPlural: "{{count}} respostas",
1169
+ replyCount_one: "{{count}} resposta",
1170
+ replyCount_many: "{{count}} de respostas",
1171
+ replyCount_other: "{{count}} respostas",
948
1172
  replyPlaceholder: "Responder…",
949
1173
  filterActivity: "Filtrar atividade",
950
1174
  openDiscussion: "Abrir painel de discussão",
@@ -959,6 +1183,7 @@ const pt = {
959
1183
  writeStrippedReadonly: "Somente leitura, portanto não foi aplicado: {{fields}}",
960
1184
  writeStrippedByState: "Não editável no estado atual deste registro, portanto não foi aplicado: {{fields}}",
961
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}}",
962
1187
  writeStrippedUnknownReason: "Não aplicado pelo servidor: {{fields}}",
963
1188
  approvalPendingEditable: "Em aprovação · editável",
964
1189
  approvalPendingTooltip: "Este registro tem uma solicitação de aprovação pendente; esta etapa ainda permite a edição",
@@ -980,6 +1205,8 @@ const pt = {
980
1205
  pathStageLostUpcoming: '{{stage}}, perdida, não alcançada',
981
1206
  pathStageWonUpcoming: '{{stage}}, etapa objetivo, não alcançada',
982
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.",
983
1210
  linkCopyFailed: "Falha ao copiar o link",
984
1211
  cancel: "Cancelar",
985
1212
  cancelEdit: "Descartar alterações",
@@ -1009,37 +1236,67 @@ const pt = {
1009
1236
  sortBy: "Ordenar por",
1010
1237
  filterPlaceholder: "Filtrar…",
1011
1238
  highlightFields: "Campos principais",
1239
+ highlightsLabel: "Campos principais do registro",
1012
1240
  createdBy: "Criado por",
1013
1241
  updatedBy: "Atualizado por",
1014
- // objectui#3863 — base key. pt's third category `many` starts at a million, where
1015
- // the plural form is correct, so the base repeats `_other`.
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.
1016
1245
  showEmptyRelated: "+ {{count}} vazios",
1017
1246
  showEmptyRelated_one: "+ {{count}} vazio",
1247
+ showEmptyRelated_many: "+ {{count}} vazios",
1018
1248
  showEmptyRelated_other: "+ {{count}} vazios",
1019
1249
  copyEmail: "Copiar e-mail",
1020
1250
  copyPhone: "Copiar telefone",
1021
1251
  copyRecordId: "Copiar ID do registro",
1022
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",
1023
1256
  hideEmptyFields: "Ocultar campos vazios",
1024
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",
1025
1268
  },
1026
1269
  chart: {
1027
- noData: "Nenhum dado de gráfico disponível",
1028
1270
  loading: "Carregando gráfico…",
1271
+ refreshing: "Atualizando…",
1029
1272
  nullCategory: "(Não especificado)",
1030
- },
1031
- map: {
1032
- searchLocations: "Pesquisar locais…",
1033
- locationDetails: "Detalhes do local",
1034
- markersCount: "{{count}} marcadores",
1035
- invalidCoordinates: "{{count}} registro com coordenadas ausentes ou inválidas excluído do mapa.",
1036
- invalidCoordinatesPlural: "{{count}} registros com coordenadas ausentes ou inválidas excluídos do mapa.",
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
+ },
1037
1277
  },
1038
1278
  dashboard: {
1039
- 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
+ },
1040
1292
  loading: "Carregando…",
1293
+ refreshing: "Atualizando…",
1294
+ refreshAll: "Atualizar tudo",
1295
+ refreshDashboard: "Atualizar painel",
1041
1296
  pickMeasures: "Escolha medidas (valores) para este widget de dataset.",
1042
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.",
1043
1300
  details: "Detalhes",
1044
1301
  exportCsv: "Exportar CSV",
1045
1302
  openInList: "Abrir na lista",
@@ -1067,12 +1324,10 @@ const pt = {
1067
1324
  },
1068
1325
  },
1069
1326
  addWidget: "Adicionar widget",
1070
- removeWidget: "Remover widget",
1071
1327
  editLayout: "Editar layout",
1072
1328
  saveLayout: "Salvar layout",
1073
1329
  resetLayout: "Redefinir layout",
1074
1330
  total: "Total",
1075
- noDataAvailable: "Sem dados disponíveis",
1076
1331
  noDataSourceFor: "Sem fonte de dados para",
1077
1332
  config: {
1078
1333
  breadcrumb: {
@@ -1194,10 +1449,6 @@ const pt = {
1194
1449
  appDescription: "Descrição",
1195
1450
  appIcon: "Ícone",
1196
1451
  template: "Modelo",
1197
- layout: "Layout",
1198
- layoutSidebar: "Barra lateral",
1199
- layoutHeader: "Cabeçalho",
1200
- layoutEmpty: "Vazio",
1201
1452
  selectObjects: "Selecionar objetos",
1202
1453
  searchObjects: "Pesquisar objetos…",
1203
1454
  selectAll: "Selecionar todos",
@@ -1206,7 +1457,6 @@ const pt = {
1206
1457
  addGroup: "Adicionar grupo",
1207
1458
  addUrl: "Adicionar URL",
1208
1459
  addSeparator: "Adicionar separador",
1209
- noNavItems: "Nenhum item de navegação ainda.",
1210
1460
  logoUrl: "Logo URL",
1211
1461
  primaryColor: "Cor primária",
1212
1462
  faviconUrl: "Favicon URL",
@@ -1233,13 +1483,12 @@ const pt = {
1233
1483
  appearance: "Aparência",
1234
1484
  rowHeight: "Altura da linha",
1235
1485
  livePreview: "Pré-visualização em tempo real",
1236
- stepBasicDesc: "Nome, título e layout",
1486
+ stepBasicDesc: "Nome, título e ícone",
1237
1487
  stepObjectsDesc: "Selecionar objetos de negócio",
1238
1488
  stepNavigationDesc: "Construir árvore de navegação",
1239
1489
  stepBrandingDesc: "Logo, cores e favicon",
1240
1490
  noObjectsFound: "Nenhum objeto encontrado.",
1241
1491
  noNavItemsHint: "Sem itens de navegação. Selecione objetos na etapa anterior ou adicione manualmente.",
1242
- separator: "Separador",
1243
1492
  separatorLabel: "— Separador —",
1244
1493
  newGroup: "Novo grupo",
1245
1494
  newLink: "Novo link",
@@ -1273,6 +1522,7 @@ const pt = {
1273
1522
  navTypeSeparator: "Separador",
1274
1523
  navTypeAction: "Ação",
1275
1524
  navTypeComponent: "Componente",
1525
+ navTypeDoc: "Documento",
1276
1526
  navEditIcon: "Editar ícone",
1277
1527
  navToggleVisible: "Alternar visibilidade",
1278
1528
  navHidden: "Oculto",
@@ -1350,11 +1600,8 @@ const pt = {
1350
1600
  defaultValue: "Valor padrão",
1351
1601
  placeholder: "Espaço reservado",
1352
1602
  referenceTo: "Referência a",
1353
- formula: "Fórmula",
1354
1603
  options: "Opções",
1355
1604
  addOption: "Adicionar opção",
1356
- validationRules: "Regras de validação",
1357
- addRule: "Adicionar regra",
1358
1605
  systemBadge: "Sistema",
1359
1606
  ungrouped: "Geral",
1360
1607
  deleteConfirmTitle: "Excluir campo?",
@@ -1373,7 +1620,23 @@ const pt = {
1373
1620
  },
1374
1621
  },
1375
1622
  console: {
1623
+ studio: {
1624
+ backToHome: "Voltar ao início",
1625
+ },
1376
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.",
1377
1640
  settingsHub: {
1378
1641
  title: "Configurações",
1379
1642
  subtitle: "Configure seu workspace, integrações e sinalizadores de recursos.",
@@ -1434,9 +1697,18 @@ const pt = {
1434
1697
  statusFull: "Limite atingido",
1435
1698
  resetsDaily: "Redefine hoje à noite",
1436
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",
1437
1708
  ctaUpgrade: "Faça upgrade para continuar",
1438
1709
  ctaTopUp: "Adicione créditos para continuar",
1439
1710
  ariaLabel: "Uso de IA: {{status}}",
1711
+ breakdownTitle: "Usado até agora",
1440
1712
  },
1441
1713
  workspaceTitle: "Workspace de IA",
1442
1714
  workspaceSubtitle: "Pergunte, inspecione e retome conversas",
@@ -1446,6 +1718,31 @@ const pt = {
1446
1718
  share: "Compartilhar",
1447
1719
  shareTitle: "Compartilhar esta conversa",
1448
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
+ },
1449
1746
  newChat: "Nova",
1450
1747
  searchChats: "Pesquisar conversas…",
1451
1748
  noChatsYet: "Ainda não há conversas",
@@ -1475,7 +1772,7 @@ const pt = {
1475
1772
  empty: {
1476
1773
  build: {
1477
1774
  title: "Criar com IA",
1478
- 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.",
1479
1776
  },
1480
1777
  ask: {
1481
1778
  title: "Pergunte aos seus dados",
@@ -1484,7 +1781,7 @@ const pt = {
1484
1781
  editApp: {
1485
1782
  title: "Editando “{{app}}”",
1486
1783
  titleGeneric: "Editar este aplicativo",
1487
- 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.",
1488
1785
  },
1489
1786
  },
1490
1787
  clearConversation: "Limpar",
@@ -1537,23 +1834,41 @@ const pt = {
1537
1834
  recentRecords: "Liste os 5 registros criados mais recentemente.",
1538
1835
  recordCounts: "Conte os registros de cada objeto.",
1539
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.
1540
1845
  metadataAssistant: {
1541
- buildCrm: "Crie um CRM de vendas — clientes, contatos e um funil de negócios que eu possa totalizar por etapa.",
1542
- buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, e um quadro por status.",
1543
- buildFlow: "Projete uma central de suporte — chamados com prioridade, um fluxo de status e vínculos com clientes.",
1544
- buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e visibilidade de estoque baixo.",
1545
- 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.",
1546
1851
  },
1547
1852
  generic: {
1548
1853
  help: "Com o que você pode me ajudar?",
1549
1854
  availableObjects: "Liste os objetos de dados disponíveis.",
1550
1855
  recentActivity: "Resuma minha atividade recente.",
1551
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`.
1552
1867
  editApp: {
1553
1868
  addField: "Adicione um campo a um dos objetos.",
1554
1869
  addObject: "Adicione um novo objeto e relacione-o a um existente.",
1555
1870
  addDashboard: "Adicione um painel para as métricas principais.",
1556
- 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.",
1557
1872
  },
1558
1873
  },
1559
1874
  changesTitle: "Confirmar alterações",
@@ -1635,6 +1950,13 @@ const pt = {
1635
1950
  pages: "Páginas",
1636
1951
  reports: "Relatórios",
1637
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',
1638
1960
  },
1639
1961
  // objectui#4024 — the single-namespace settings screen. Its sibling
1640
1962
  // `settingsHub` above already resolved through this pack; the view was the
@@ -1654,6 +1976,7 @@ const pt = {
1654
1976
  saveChanges: "Salvar alterações",
1655
1977
  unsavedCount: "{{count}} alterações não salvas",
1656
1978
  unsavedCount_one: "{{count}} alteração não salva",
1979
+ unsavedCount_many: "{{count}} de alterações não salvas",
1657
1980
  unsavedCount_other: "{{count}} alterações não salvas",
1658
1981
  cryptoRefusalTitle: "Esta implantação não consegue criptografar segredos",
1659
1982
  cryptoRefusalSubjectSuffix: "está declarado como criptografado, portanto nada foi gravado.",
@@ -1726,6 +2049,21 @@ const pt = {
1726
2049
  records: "Registros",
1727
2050
  recentRecords: "Vistos recentemente",
1728
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
+ },
1729
2067
  errors: {
1730
2068
  somethingWentWrong: "Algo deu errado",
1731
2069
  unexpectedError: "Ocorreu um erro inesperado ao renderizar esta visualização.",
@@ -1756,6 +2094,7 @@ const pt = {
1756
2094
  viewNameInvalid: "Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.",
1757
2095
  systemViewReadonly: "Exibição do sistema definida no código — somente leitura.",
1758
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.",
1759
2098
  cannotDeleteMetaView: "Esta exibição é integrada e definida no código — não é possível excluí-la.",
1760
2099
  expandToPage: "Abrir como página inteira",
1761
2100
  objectNotFound: "Objeto não encontrado",
@@ -1766,12 +2105,14 @@ const pt = {
1766
2105
  allRecords: "Todos os registros",
1767
2106
  new: "Novo",
1768
2107
  configureView: "Configurar visualização",
1769
- toolbar: "Barra de ferramentas",
1770
2108
  toolbarEnabledCount: "{{count}} de {{total}} habilitados",
1771
2109
  searchFields: "Pesquisar campos…",
1772
2110
  title: "Título",
1773
2111
  viewType: "Tipo de visualização",
1774
2112
  recordCount: "{{count}} registros",
2113
+ recordCount_one: "{{count}} registro",
2114
+ recordCount_many: "{{count}} de registros",
2115
+ recordCount_other: "{{count}} registros",
1775
2116
  save: "Salvar",
1776
2117
  discard: "Descartar",
1777
2118
  createView: "Criar visualização",
@@ -1783,11 +2124,13 @@ const pt = {
1783
2124
  longitudeField: "Campo de longitude",
1784
2125
  imageField: "Campo de imagem",
1785
2126
  selectField: "Selecionar campo…",
1786
- groupBy: "Agrupar por",
1787
2127
  endDateField: "Campo de data de término",
1788
2128
  import: "Importar",
1789
2129
  importTitle: "Importar do CSV",
1790
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.",
1791
2134
  importedWithSkipped: "{{ok}} linha(s) importada(s); {{skipped}} pulada(s).",
1792
2135
  createViewDesc: "Escolha um tipo de exibição e dê um nome a ela. Todas as configurações podem ser alteradas depois.",
1793
2136
  cancel: "Cancelar",
@@ -1796,6 +2139,9 @@ const pt = {
1796
2139
  deleteViewTitle: "Excluir exibição",
1797
2140
  deleteViewConfirm: "Excluir a exibição \"{{name}}\"? Isso não pode ser desfeito.",
1798
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.",
1799
2145
  duplicateViewName: "Já existe uma exibição com esse nome.",
1800
2146
  viewTypeGrid: "Grade",
1801
2147
  viewTypeGridDesc: "Tabela de registros no estilo planilha.",
@@ -1832,10 +2178,14 @@ const pt = {
1832
2178
  chartTypePie: "Gráfico de pizza",
1833
2179
  chartTypeArea: "Gráfico de área",
1834
2180
  chartTypeScatter: "Gráfico de dispersão",
1835
- xAxisField: "Campo do eixo X",
1836
- xAxisFieldHelp: "A dimensão categórica ou temporal.",
1837
- yAxisField: "Campo do eixo Y",
1838
- yAxisFieldHelp: "O campo numérico para agregar.",
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.",
1839
2189
  ufTabs: "Abas",
1840
2190
  ufAddField: "+ Adicionar campo de filtro…",
1841
2191
  ufShowAllRecords: "Mostrar aba \"Todos os registros\"",
@@ -1849,6 +2199,9 @@ const pt = {
1849
2199
  unpinItem: "Desafixar {{name}}",
1850
2200
  dragToReorder: "Arrastar para reordenar",
1851
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.",
1852
2205
  },
1853
2206
  },
1854
2207
  auth: {
@@ -1902,6 +2255,8 @@ const pt = {
1902
2255
  resendOtpCountdownText: "Reenviar em {seconds} s",
1903
2256
  usePhoneOtpText: "Entrar com código de verificação",
1904
2257
  usePasswordSignInText: "Entrar com senha em vez disso",
2258
+ socialButton: "Continuar com {provider}",
2259
+ orText: "ou continue com e-mail",
1905
2260
  },
1906
2261
  register: {
1907
2262
  title: "Criar uma conta",
@@ -1920,8 +2275,12 @@ const pt = {
1920
2275
  submittingButton: "Criando conta…",
1921
2276
  hasAccountText: "Já tem uma conta?",
1922
2277
  signInText: "Entrar",
2278
+ socialButton: "Cadastre-se com {provider}",
2279
+ orText: "ou continue com e-mail",
1923
2280
  errors: {
1924
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.",
1925
2284
  },
1926
2285
  verifyInbox: {
1927
2286
  title: "Verifique sua caixa de entrada",
@@ -2120,6 +2479,15 @@ const pt = {
2120
2479
  role: "Função",
2121
2480
  save: "Salvar alterações",
2122
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
+ },
2123
2491
  password: {
2124
2492
  changeTitle: "Alterar senha",
2125
2493
  setTitle: "Definir senha local",
@@ -2151,7 +2519,6 @@ const pt = {
2151
2519
  label: "Espaços de trabalho",
2152
2520
  default: "Meu espaço de trabalho",
2153
2521
  switch: "Trocar de espaço de trabalho",
2154
- create: "Criar espaço de trabalho",
2155
2522
  createTitle: "Criar um espaço de trabalho",
2156
2523
  createDescription: "Um espaço de trabalho é um espaço compartilhado para colaboração da equipe.",
2157
2524
  createButton: "Criar espaço de trabalho",
@@ -2176,7 +2543,6 @@ const pt = {
2176
2543
  packageManagement: "Gerenciamento de pacotes",
2177
2544
  searchNavigation: "Pesquisar na navegação…",
2178
2545
  settings: "Configurações",
2179
- help: "Ajuda",
2180
2546
  helpTooltip: "Ajuda e documentação",
2181
2547
  activityFeed: "Feed de atividades",
2182
2548
  notifications: "Notificações",
@@ -2236,6 +2602,9 @@ const pt = {
2236
2602
  },
2237
2603
  pendingDrafts: {
2238
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.",
2239
2608
  cta: "Publicar",
2240
2609
  publishing: "Publicando…",
2241
2610
  published: "Publicado! Suas alterações estão ativas.",
@@ -2250,7 +2619,6 @@ const pt = {
2250
2619
  capabilityWarn: "Verificação de autoria: {{count}} referência(s) de capacidade não apontam para nada.",
2251
2620
  },
2252
2621
  title: "Início",
2253
- subtitle: "Painel do seu espaço de trabalho",
2254
2622
  nav: "Início",
2255
2623
  allApps: "Todas as aplicações",
2256
2624
  yourApps: "As suas aplicações",
@@ -2262,8 +2630,6 @@ const pt = {
2262
2630
  empty: "Está tudo em dia",
2263
2631
  },
2264
2632
  loading: "Carregando espaço de trabalho…",
2265
- recent: "Recentes",
2266
- starred: "Favoritos",
2267
2633
  welcome: "Bem-vindo ao ObjectUI",
2268
2634
  welcomeDescription: "Comece criando sua primeira aplicação ou configurando as preferências do sistema.",
2269
2635
  createFirstApp: "Crie sua primeira app",
@@ -2271,8 +2637,6 @@ const pt = {
2271
2637
  browseMarketplace: "Explorar marketplace de apps",
2272
2638
  quickActions: {
2273
2639
  title: "Ações rápidas",
2274
- createApp: "Criar app",
2275
- createAppDesc: "Comece com uma nova aplicação",
2276
2640
  manageObjects: "Gerenciar objetos",
2277
2641
  manageObjectsDesc: "Configure modelos de dados",
2278
2642
  systemSettings: "Configurações do sistema",
@@ -2288,18 +2652,15 @@ const pt = {
2288
2652
  greetingNight: "Turno da noite",
2289
2653
  heroTagline: "Continue de onde parou ou descubra algo novo.",
2290
2654
  open: "Abrir",
2291
- stats: {
2292
- apps: "Aplicativos",
2293
- starred: "Favoritos",
2294
- recent: "Recentes",
2295
- },
2296
2655
  recentApps: {
2297
2656
  title: "Abertos recentemente",
2298
2657
  itemType: {
2299
2658
  object: "Objeto",
2300
2659
  dashboard: "Painel",
2301
2660
  page: "Página",
2661
+ report: "Relatório",
2302
2662
  record: "Registro",
2663
+ metadata: "Metadados",
2303
2664
  },
2304
2665
  },
2305
2666
  starredApps: {
@@ -2321,7 +2682,6 @@ const pt = {
2321
2682
  organizations: "Organizações",
2322
2683
  roles: "Perfis",
2323
2684
  configuration: "Configuração",
2324
- createApp: "Criar aplicativo",
2325
2685
  administration: "Administração",
2326
2686
  datasources: "Fontes de dados",
2327
2687
  documentation: "Documentação",
@@ -2346,6 +2706,7 @@ const pt = {
2346
2706
  typeUpdate: "Atualizar",
2347
2707
  typeDelete: "Excluir",
2348
2708
  typeComment: "Comentário",
2709
+ typeSystem: "Sistema",
2349
2710
  relativeJustNow: "agora mesmo",
2350
2711
  relativeSecondsAgo: "há {{count}}s",
2351
2712
  relativeMinutesAgo: "há {{count}}m",
@@ -2367,8 +2728,13 @@ const pt = {
2367
2728
  placeholder: "Pesquisar objetos, painéis, páginas, relatórios…",
2368
2729
  inputAriaLabel: "Pesquisar objetos, painéis, páginas, relatórios",
2369
2730
  resultsCount: "{{count}} resultado para \"{{query}}\"",
2370
- 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}}\"",
2371
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",
2372
2738
  noResults: "Nenhum resultado encontrado",
2373
2739
  noResultsHint: "Tente ajustar seus termos de pesquisa",
2374
2740
  typeObjects: "Objetos",
@@ -2393,7 +2759,11 @@ const pt = {
2393
2759
  noAppsConfigured: "Nenhum aplicativo configurado",
2394
2760
  noAppsConfiguredDescription: "Nenhum aplicativo está registrado. Crie seu primeiro aplicativo ou visite as configurações do sistema.",
2395
2761
  appNotAvailable: "Aplicativo indisponível",
2396
- appNotAvailableDescription: "Este aplicativo ainda não está disponível — a publicação pode estar em andamento. Tente novamente em instantes.",
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.",
2397
2767
  appAccessDenied: "Você não tem acesso a este aplicativo",
2398
2768
  appAccessDeniedDescription: "Este aplicativo existe, mas sua conta não tem autorização para abri-lo. Peça acesso a um administrador.",
2399
2769
  appAccessDeniedHome: "Voltar ao início",
@@ -2408,11 +2778,11 @@ const pt = {
2408
2778
  description: "Insira as informações necessárias para continuar.",
2409
2779
  selectPlaceholder: "Selecionar {{label}}",
2410
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)',
2411
2783
  cancel: "Cancelar",
2412
2784
  confirm: "Confirmar",
2413
2785
  uploading: "Enviando…",
2414
- defaultActionTitle: "Ação",
2415
- ok: "OK",
2416
2786
  lookupPlaceholder: "ID do registro para {{label}}",
2417
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.",
2418
2788
  },
@@ -2421,11 +2791,6 @@ const pt = {
2421
2791
  confirm: "Continuar",
2422
2792
  cancel: "Cancelar",
2423
2793
  },
2424
- rowAction: {
2425
- openMenu: "Abrir menu",
2426
- edit: "Editar",
2427
- delete: "Excluir",
2428
- },
2429
2794
  navigationSync: {
2430
2795
  addedPage: "Navegação atualizada: página \"{{name}}\" adicionada",
2431
2796
  addedDashboard: "Navegação atualizada: painel \"{{name}}\" adicionado",
@@ -2446,6 +2811,9 @@ const pt = {
2446
2811
  noRecordId: "Nenhum ID de registro fornecido",
2447
2812
  deleteConfirm: "Excluir este registro?",
2448
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",
2449
2817
  bulkDeletePartial: "{{succeeded}} excluídos, {{failed}} com falha",
2450
2818
  },
2451
2819
  objectViewActions: {
@@ -2457,15 +2825,6 @@ const pt = {
2457
2825
  exportFailed: "Falha na exportação: {{message}}",
2458
2826
  forecastSoon: "A exibição de previsão está chegando em breve",
2459
2827
  },
2460
- recordDetail: {
2461
- viewersTooltip: "Usuários visualizando este registro agora",
2462
- },
2463
- cellRender: {
2464
- empty: "Vazio",
2465
- yes: "Sim",
2466
- no: "Não",
2467
- systemFields: "Sistema",
2468
- },
2469
2828
  user: {
2470
2829
  profile: "Perfil",
2471
2830
  settings: "Configurações",
@@ -2655,18 +3014,37 @@ const pt = {
2655
3014
  regionLabel: "Notificações",
2656
3015
  groupCount: "{{count}} notificações",
2657
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",
2658
3020
  groupMarkRead: "Marcar como lidas",
2659
3021
  groupMarkReadTitle: "Marcar todas deste tipo como lidas",
2660
3022
  empty: "Sem notificações",
2661
3023
  markAllRead: "Marcar tudo como lido",
2662
3024
  viewAll: "Ver todas as notificações",
2663
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",
2664
3029
  viewApprovals: "Ver aprovações",
2665
3030
  noPendingApprovals: "Sem aprovações pendentes",
2666
3031
  openApprovalsInbox: "Abrir caixa de aprovações",
2667
3032
  badgeTotal: "{{total}} no total",
2668
3033
  badgeNotifications: "{{unread}} notificações",
2669
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.",
2670
3048
  emptyUnread: "Tudo lido",
2671
3049
  filterUnread: "Não lidos",
2672
3050
  filterAll: "Todos",
@@ -2680,12 +3058,14 @@ const pt = {
2680
3058
  thankYouTitle: "Obrigado!",
2681
3059
  thankYouMessage: "Seu envio foi recebido com sucesso.",
2682
3060
  redirecting: "Redirecionando em {{seconds}} segundo(s)…",
3061
+ redirectPending: "Redirecionando…",
2683
3062
  unavailableTitle: "Formulário indisponível",
2684
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.",
2685
3064
  tryDemo: "Experimentar demo",
2686
3065
  retry: "Tentar novamente",
2687
3066
  loading: "Carregando formulário…",
2688
3067
  requiredHint: "* Campo obrigatório",
3068
+ requiredFields: "Campos obrigatórios: {{fields}}",
2689
3069
  consentLabelDefault: "Aceito a política de privacidade e consinto com o processamento dos meus dados para esta solicitação.",
2690
3070
  consentLink: "Política de privacidade",
2691
3071
  consentRequired: "Por favor, aceite a política de privacidade para continuar.",
@@ -2736,6 +3116,9 @@ const pt = {
2736
3116
  noImportableFields: "Esse objeto não tem campos importáveis.",
2737
3117
  schemaReadFailed: "Não foi possível ler o esquema do objeto.",
2738
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}}.",
2739
3122
  importFrom: "Importar as linhas reais de",
2740
3123
  into: "para",
2741
3124
  opening: "Abrindo…",
@@ -2749,6 +3132,78 @@ const pt = {
2749
3132
  openProduction: "Abrir produção",
2750
3133
  manageEnvironments: "Gerenciar ambientes",
2751
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
+ },
2752
3207
  aiModelStatus: {
2753
3208
  summary: "Criar / Perguntar usa {{conversational}} ({{conversationalSource}}); estruturado usa {{structured}} ({{structuredSource}}).",
2754
3209
  summaryRouting: "Política de roteamento: planos gratuitos → {{free}}, planos pagos → {{paid}}.",
@@ -2766,6 +3221,114 @@ const pt = {
2766
3221
  sourceInherits: "igual a build/ask",
2767
3222
  sourcePinned: "fixado por {{source}}",
2768
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
+ },
2769
3332
  chatbotError: {
2770
3333
  title: "Falha na resposta",
2771
3334
  fallbackDetail: "Algo deu errado. Tente novamente.",
@@ -2846,7 +3409,7 @@ const pt = {
2846
3409
  },
2847
3410
  title: "Marketplace de aplicativos",
2848
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.",
2849
- searchPlaceholder: "Pesquisar aplicativos por nome ou ID de manifesto…",
3412
+ searchPlaceholder: 'Pesquisar aplicativos por nome ou ID do aplicativo…',
2850
3413
  searchAria: "Pesquisar aplicativos do marketplace",
2851
3414
  installed: "Instalado",
2852
3415
  installedCount: "Instalados ({{count}})",
@@ -2894,10 +3457,17 @@ const pt = {
2894
3457
  purgeSampleData: 'Remover dados de exemplo',
2895
3458
  purgeConfirm: 'Excluir todos os registros de exemplo criados por este pacote? Os registros adicionados pelo usuário NÃO serão afetados.',
2896
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.',
2897
3463
  purgeNoData: 'Nenhum registro de exemplo encontrado para remover.',
2898
3464
  reseedQueued: 'Os dados de exemplo serão recarregados no próximo acesso ao ambiente.',
2899
3465
  reseedLocalSuccess: 'Dados de exemplo recarregados: {{inserted}} inseridos, {{updated}} atualizados.',
2900
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.',
2901
3471
  updateAvailable: 'Atualização disponível',
2902
3472
  },
2903
3473
  action: {
@@ -2950,7 +3520,8 @@ const pt = {
2950
3520
  reviewed: "Revisado e aprovado",
2951
3521
  unreviewed: "Ainda não revisado",
2952
3522
  signed: "Assinado",
2953
- 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.",
2954
3525
  services: "Serviços da plataforma",
2955
3526
  hooks: "Hooks de ciclo de vida",
2956
3527
  network: "Acesso à rede",
@@ -2989,30 +3560,21 @@ const pt = {
2989
3560
  storage: "Armazenamento",
2990
3561
  other: "Outro",
2991
3562
  },
2992
- pricing: {
2993
- free: "Grátis",
2994
- freemium: "Freemium",
2995
- paid: "Pago",
2996
- subscription: "Assinatura",
2997
- "usage-based": "Por uso",
2998
- "contact-sales": "Contatar vendas",
2999
- },
3000
3563
  relativeTime: {
3001
3564
  today: "hoje",
3002
3565
  daysAgo: "há {{count}}d",
3003
3566
  monthsAgo: "há {{count}} meses",
3567
+ monthsAgo_one: "há {{count}} mês",
3568
+ monthsAgo_many: "há {{count}} meses",
3569
+ monthsAgo_other: "há {{count}} meses",
3004
3570
  yearsAgo: "há {{count}} anos",
3571
+ yearsAgo_one: "há {{count}} ano",
3572
+ yearsAgo_many: "há {{count}} anos",
3573
+ yearsAgo_other: "há {{count}} anos",
3005
3574
  },
3006
3575
  },
3007
- approvals: {
3008
- approve: 'Aprovar',
3009
- reject: 'Rejeitar',
3010
- comment: 'Comentário (opcional)',
3011
- approveSuccess: 'Aprovado',
3012
- rejectSuccess: 'Rejeitado',
3013
- rejectConfirm: 'Rejeitar esta solicitação de aprovação?',
3014
- },
3015
3576
  approvalsInbox: {
3577
+ recordUnresolvable: 'Este registro não pode ser aberto',
3016
3578
  loadMore: 'Carregar mais',
3017
3579
  loadingMore: 'Carregando…',
3018
3580
  loadedOf: '{{loaded}} de {{total}} carregadas',
@@ -3031,6 +3593,9 @@ const pt = {
3031
3593
  requestInfoSent: 'Devolvida ao solicitante para complemento',
3032
3594
  remindBtn: 'Lembrar',
3033
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',
3034
3599
  remindThrottled: 'Um lembrete já foi enviado há pouco — tente mais tarde.',
3035
3600
  replyPlaceholder: 'Responder nesta solicitação…',
3036
3601
  slaRemaining: 'SLA: faltam {{dur}}',
@@ -3047,6 +3612,9 @@ const pt = {
3047
3612
  progressApprovals: 'Aprovações — {{got}} de {{need}}',
3048
3613
  progressGroups: 'Progresso de assinaturas — {{got}} de {{need}} grupos',
3049
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',
3050
3618
  progressBar: 'Progresso da decisão',
3051
3619
  declaredActions: 'Ações',
3052
3620
  attachmentChip: 'Anexo',
@@ -3078,6 +3646,9 @@ const pt = {
3078
3646
  filterCount: '{{shown}} de {{total}}',
3079
3647
  selected: 'selecionadas',
3080
3648
  actionableCount: '({{count}} acionáveis)',
3649
+ actionableCount_one: '({{count}} acionável)',
3650
+ actionableCount_many: '({{count}} acionáveis)',
3651
+ actionableCount_other: '({{count}} acionáveis)',
3081
3652
  selectAll: 'Selecionar tudo',
3082
3653
  selectRow: 'Selecionar solicitação',
3083
3654
  colRequest: 'Solicitação',
@@ -3151,11 +3722,23 @@ const pt = {
3151
3722
  approveN: 'Aprovar {{count}}',
3152
3723
  rejectN: 'Rejeitar {{count}}',
3153
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?',
3154
3728
  bulkApproveBody: 'Cada solicitação é aprovada com sua identidade e o fluxo segue pelo ramo de aprovação.',
3155
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?',
3156
3733
  bulkRejectBody: 'As solicitações selecionadas serão rejeitadas e os solicitantes notificados.',
3157
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',
3158
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',
3159
3742
  bulkPartial: '{{ok}} com sucesso, {{fail}} falharam: {{which}}',
3160
3743
  rejectOneTitle: 'Rejeitar "{{title}}"?',
3161
3744
  rejectOneBody: 'A solicitação será rejeitada e o solicitante notificado.',
@@ -3180,8 +3763,17 @@ const pt = {
3180
3763
  alreadyDecided: 'Esta solicitação já foi decidida. Atualize a lista.',
3181
3764
  justNow: 'agora mesmo',
3182
3765
  minutesAgo: 'há {{count}} min',
3766
+ minutesAgo_one: 'há {{count}} min',
3767
+ minutesAgo_many: 'há {{count}} min',
3768
+ minutesAgo_other: 'há {{count}} min',
3183
3769
  hoursAgo: 'há {{count}} h',
3770
+ hoursAgo_one: 'há {{count}} h',
3771
+ hoursAgo_many: 'há {{count}} h',
3772
+ hoursAgo_other: 'há {{count}} h',
3184
3773
  daysAgo: 'há {{count}} dias',
3774
+ daysAgo_one: 'há {{count}} dia',
3775
+ daysAgo_many: 'há {{count}} dias',
3776
+ daysAgo_other: 'há {{count}} dias',
3185
3777
  },
3186
3778
  preview: {
3187
3779
  empty: {
@@ -3216,11 +3808,17 @@ const pt = {
3216
3808
  detailNone: 'Nenhuma diferença detectada — o rascunho corresponde à versão publicada.',
3217
3809
  detailChangedKeys: 'Também alterado:',
3218
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.',
3219
3814
  publishConfirm: 'Publicar tudo',
3220
- // [objectui#5418] Pre-publish security-posture findings, shown next to
3815
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3221
3816
  // the confirm button so a refusal the door would issue is read BEFORE
3222
3817
  // the click rather than as a toast after the batch rolled back.
3223
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',
3224
3822
  securityBlockWhere: 'Corrija no objeto em Configurações → Compartilhamento de registros e publique novamente.',
3225
3823
  },
3226
3824
  // ADR-0045 — the materialized-but-unlisted app banner
@@ -3245,7 +3843,7 @@ const pt = {
3245
3843
  revertLabel: 'Uma alteração foi desfeita',
3246
3844
  applyLabel: 'Alteração de compilação',
3247
3845
  revert: 'desfazer',
3248
- items: 'itens',
3846
+ items: 'Itens: {{count}}',
3249
3847
  revertAction: 'Desfazer',
3250
3848
  reverted: 'Desfeito — a alteração foi revertida.',
3251
3849
  revertFailed: 'Falha ao desfazer',
@@ -3274,25 +3872,25 @@ const pt = {
3274
3872
  rangeEnd: "Até",
3275
3873
  operators: {
3276
3874
  equals: "Igual a",
3277
- notEquals: "Diferente de",
3875
+ not_equals: "Diferente de",
3278
3876
  contains: "Contém",
3279
- containsCaseInsensitive: "Contém (ignorar maiúsculas)",
3280
- notContains: "Não contém",
3281
- isEmpty: "Está vazio",
3282
- isNotEmpty: "Não está vazio",
3283
- greaterThan: "Maior que",
3284
- lessThan: "Menor que",
3285
- greaterOrEqual: "Maior ou igual",
3286
- 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",
3287
3885
  before: "Antes de",
3288
3886
  after: "Depois de",
3289
3887
  between: "Entre",
3290
3888
  in: "Em",
3291
- notIn: "Não em",
3292
- startsWith: "Começa com",
3293
- endsWith: "Termina com",
3294
- isNull: "É null",
3295
- isNotNull: "Não é null",
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",
3296
3894
  exists: "Está definido",
3297
3895
  notExists: "Não está definido",
3298
3896
  },
@@ -3308,7 +3906,9 @@ const pt = {
3308
3906
  },
3309
3907
  collaboration: {
3310
3908
  commentCount: "{{count}} comentários",
3311
- commentCountOne: "{{count}} comentário",
3909
+ commentCount_one: "{{count}} comentário",
3910
+ commentCount_many: "{{count}} de comentários",
3911
+ commentCount_other: "{{count}} comentários",
3312
3912
  resolvedSuffix: " · Resolvido",
3313
3913
  sortComments: "Ordenar comentários",
3314
3914
  sortOldest: "Mais antigos",
@@ -3317,11 +3917,22 @@ const pt = {
3317
3917
  reopen: "Reabrir",
3318
3918
  justNow: "agora mesmo",
3319
3919
  minutesAgo: "há {{count}} min",
3920
+ minutesAgo_one: "há {{count}} min",
3921
+ minutesAgo_many: "há {{count}} min",
3922
+ minutesAgo_other: "há {{count}} min",
3320
3923
  hoursAgo: "há {{count}} h",
3924
+ hoursAgo_one: "há {{count}} h",
3925
+ hoursAgo_many: "há {{count}} h",
3926
+ hoursAgo_other: "há {{count}} h",
3321
3927
  daysAgo: "há {{count}} d",
3928
+ daysAgo_one: "há {{count}} d",
3929
+ daysAgo_many: "há {{count}} d",
3930
+ daysAgo_other: "há {{count}} d",
3322
3931
  edited: "(editado)",
3323
3932
  reactionCount: "{{count}} reações",
3324
- reactionCountOne: "{{count}} reação",
3933
+ reactionCount_one: "{{count}} reação",
3934
+ reactionCount_many: "{{count}} de reações",
3935
+ reactionCount_other: "{{count}} reações",
3325
3936
  addThumbsUp: "Adicionar curtida",
3326
3937
  reply: "Responder",
3327
3938
  reactThumbsUp: "Reagir com curtida",
@@ -3332,9 +3943,13 @@ const pt = {
3332
3943
  commentPlaceholder: "Adicionar um comentário… (use @ para mencionar)",
3333
3944
  send: "Enviar",
3334
3945
  presentUserCount: "{{count}} usuários presentes",
3335
- 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",
3336
3949
  moreUserCount: "mais {{count}} usuários",
3337
- 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",
3338
3953
  userStatusTitle: "{{name}} ({{status}})",
3339
3954
  statusActive: "ativo",
3340
3955
  statusIdle: "inativo",
@@ -3342,6 +3957,11 @@ const pt = {
3342
3957
  },
3343
3958
  wizard: {
3344
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",
3345
3965
  },
3346
3966
  flowRunner: {
3347
3967
  title: 'Entrada',
@@ -3399,5 +4019,49 @@ const pt = {
3399
4019
  bulkOperationFailed: "Falha na operação em massa: {{reason}}",
3400
4020
  },
3401
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
+ },
3402
4066
  };
3403
4067
  export default pt;