pgkiln 0.83.0 → 0.85.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.
- package/db/migrations/154_notifications.sql +186 -0
- package/docs/apex-feature-parity.md +3 -2
- package/docs/guide/03-builder.md +16 -5
- package/docs/guide/04-pages-and-regions.md +42 -0
- package/docs/guide/06-processing.md +22 -1
- package/docs/guide/07-dynamic-actions.md +1 -0
- package/docs/guide/09-reference.md +15 -0
- package/docs/guide/11-from-apex.md +1 -0
- package/docs/guide/12-development.md +13 -1
- package/package.json +1 -1
- package/public/app.css +29 -0
- package/public/app.js +78 -0
- package/public/sw.js +5 -1
- package/src/app.ts +11 -0
- package/src/builder/ai-agents.ts +86 -85
- package/src/builder/ai-builder.ts +30 -30
- package/src/builder/ai.ts +93 -92
- package/src/builder/api.ts +47 -47
- package/src/builder/app-groups.ts +33 -32
- package/src/builder/appfromfile.ts +57 -58
- package/src/builder/appsheets.ts +33 -32
- package/src/builder/appwizard.ts +65 -65
- package/src/builder/arrange.ts +23 -22
- package/src/builder/assistant.ts +39 -38
- package/src/builder/automations.ts +32 -31
- package/src/builder/availability.ts +24 -24
- package/src/builder/backups.ts +30 -31
- package/src/builder/blueprints.ts +62 -61
- package/src/builder/code-editor.ts +1 -1
- package/src/builder/components.ts +10 -6
- package/src/builder/create-page.ts +52 -50
- package/src/builder/cross-app.ts +37 -35
- package/src/builder/dataload.ts +2 -2
- package/src/builder/datasets.ts +107 -106
- package/src/builder/dependencies.ts +20 -19
- package/src/builder/designer.ts +36 -36
- package/src/builder/diagnostics.ts +58 -57
- package/src/builder/features.ts +39 -35
- package/src/builder/feedback.ts +23 -20
- package/src/builder/find-workspace.ts +28 -24
- package/src/builder/form-designer.ts +36 -35
- package/src/builder/gallery.ts +25 -29
- package/src/builder/globalization.ts +50 -49
- package/src/builder/i18n/de.ts +3461 -0
- package/src/builder/i18n/en.ts +3461 -0
- package/src/builder/i18n/es.ts +3461 -0
- package/src/builder/i18n/fr.ts +3461 -0
- package/src/builder/i18n/it.ts +3461 -0
- package/src/builder/i18n/ja.ts +3461 -0
- package/src/builder/i18n/ko.ts +3461 -0
- package/src/builder/i18n/nl.ts +3461 -0
- package/src/builder/i18n/pt.ts +3461 -0
- package/src/builder/i18n/zh-cn.ts +3461 -0
- package/src/builder/i18n/zh-tw.ts +3461 -0
- package/src/builder/i18n.ts +17 -3
- package/src/builder/json-sources.ts +63 -62
- package/src/builder/layouts.ts +12 -11
- package/src/builder/locks.ts +29 -28
- package/src/builder/login-page.ts +26 -25
- package/src/builder/mail.ts +148 -147
- package/src/builder/newapp.ts +15 -12
- package/src/builder/notification-settings.ts +27 -0
- package/src/builder/plugins.ts +47 -44
- package/src/builder/process-jobs.ts +11 -10
- package/src/builder/pwa.ts +22 -21
- package/src/builder/remote-databases.ts +55 -56
- package/src/builder/report-settings.ts +1 -1
- package/src/builder/reporter.ts +43 -42
- package/src/builder/rest-catalogs.ts +87 -86
- package/src/builder/rest.ts +9 -8
- package/src/builder/routes.ts +30 -27
- package/src/builder/search.ts +14 -13
- package/src/builder/static-files.ts +31 -32
- package/src/builder/subscriptions.ts +47 -45
- package/src/builder/supporting.ts +23 -18
- package/src/builder/team.ts +179 -179
- package/src/builder/telemetry.ts +59 -62
- package/src/builder/templates.ts +66 -65
- package/src/builder/themeroller.ts +60 -63
- package/src/builder/ui-defaults.ts +21 -20
- package/src/builder/ui.ts +2 -1
- package/src/builder/upgrade.ts +25 -24
- package/src/builder/utilities.ts +48 -47
- package/src/builder/vector-providers.ts +67 -66
- package/src/builder/websources.ts +43 -42
- package/src/builder/wizards.ts +95 -89
- package/src/builder/workflow-migrate.ts +30 -31
- package/src/builder/workflows.ts +40 -39
- package/src/builder/workingcopies.ts +41 -49
- package/src/builder/workspace-backups.ts +21 -20
- package/src/builder/workspace-mail.ts +17 -16
- package/src/builder/workspace-resources.ts +104 -112
- package/src/builder/workspace-transfer.ts +34 -26
- package/src/cli/replace.ts +2 -0
- package/src/i18n/ar.ts +9 -0
- package/src/i18n/cs.ts +9 -0
- package/src/i18n/da.ts +9 -0
- package/src/i18n/de.ts +9 -0
- package/src/i18n/el.ts +9 -0
- package/src/i18n/es.ts +9 -0
- package/src/i18n/fi.ts +9 -0
- package/src/i18n/fr.ts +9 -0
- package/src/i18n/he.ts +9 -0
- package/src/i18n/it.ts +9 -0
- package/src/i18n/ja.ts +9 -0
- package/src/i18n/ko.ts +9 -0
- package/src/i18n/nb.ts +9 -0
- package/src/i18n/pl.ts +9 -0
- package/src/i18n/pt.ts +9 -0
- package/src/i18n/ru.ts +9 -0
- package/src/i18n/sv.ts +9 -0
- package/src/i18n/tr.ts +9 -0
- package/src/i18n/uk.ts +9 -0
- package/src/i18n/zh.ts +9 -0
- package/src/i18n.ts +18 -0
- package/src/metadata.ts +9 -3
- package/src/runtime/engine.ts +2 -1
- package/src/runtime/feedback.ts +1 -1
- package/src/runtime/lists.ts +43 -11
- package/src/runtime/notifications.ts +237 -0
- package/src/runtime/processes.ts +45 -1
- package/src/runtime/regions.ts +11 -15
- package/src/runtime/render.ts +12 -3
- package/src/runtime/routes.ts +12 -4
- package/src/runtime/signin.ts +2 -1
- package/src/session.ts +13 -4
package/src/builder/i18n/en.ts
CHANGED
|
@@ -4053,4 +4053,3465 @@ export const en = {
|
|
|
4053
4053
|
'docv.view': 'View',
|
|
4054
4054
|
'docv.doc_column': 'Document column',
|
|
4055
4055
|
'docv.intro': 'A document view shows each row of {table} with its child rows as one JSON document, like an Oracle JSON Relational Duality View. Reports, REST (AutoREST on the view) and MCP read whole documents; an update of the document column writes the row and its children back in one statement. The table\'s row level security and grants apply (the view is security_invoker and gets the table\'s grants).',
|
|
4056
|
+
// ------------------------------------------------------------ Team Development (sprint 164)
|
|
4057
|
+
'tm.team_development': 'Team Development',
|
|
4058
|
+
'tm.you_are_not_a_developer': 'You are not a developer of any workspace: Team Development belongs to a workspace.',
|
|
4059
|
+
'tm.search': 'Search',
|
|
4060
|
+
'tm.clear': 'Clear',
|
|
4061
|
+
'tm.title': 'Title',
|
|
4062
|
+
'tm.description': 'Description',
|
|
4063
|
+
'tm.milestone': 'Milestone',
|
|
4064
|
+
'tm.application': 'Application',
|
|
4065
|
+
'tm.page_number': 'Page number',
|
|
4066
|
+
'tm.a_page_of_the_application': 'A page of the application.',
|
|
4067
|
+
'tm.labels': 'Labels',
|
|
4068
|
+
'tm.set_up_team_development': 'set up Team Development',
|
|
4069
|
+
'tm.add_labels': 'add labels',
|
|
4070
|
+
'tm.assignees': 'Assignees',
|
|
4071
|
+
'tm.set_up_team_development_2': 'Set up Team Development',
|
|
4072
|
+
'tm.mentions_of_you': 'Mentions of you',
|
|
4073
|
+
'tm.nobody_mentioned_you_in_an': 'Nobody mentioned you in an unseen comment.',
|
|
4074
|
+
'tm.saved_views': 'Saved views',
|
|
4075
|
+
'tm.save_the_filters_you_use': 'Save the filters you use often.',
|
|
4076
|
+
'tm.name_of_the_view': 'Name of the view',
|
|
4077
|
+
'tm.quick_filters': 'Quick filters',
|
|
4078
|
+
'tm.assigned_to_me': 'Assigned to me',
|
|
4079
|
+
'tm.not_assigned': 'Not assigned',
|
|
4080
|
+
'tm.closed': 'Closed',
|
|
4081
|
+
'tm.board_by_label': 'Board by label',
|
|
4082
|
+
'tm.board_by_milestone': 'Board by milestone',
|
|
4083
|
+
'tm.move': 'Move',
|
|
4084
|
+
'tm.no_issues': 'No issues.',
|
|
4085
|
+
'tm.start_from_a_template': 'Start from a template',
|
|
4086
|
+
'tm.use_template': 'Use template',
|
|
4087
|
+
'tm.create_issue': 'Create issue',
|
|
4088
|
+
'tm.cancel': 'Cancel',
|
|
4089
|
+
'tm.no_description': 'No description.',
|
|
4090
|
+
'tm.activity': 'Activity',
|
|
4091
|
+
'tm.canned_response': 'Canned response',
|
|
4092
|
+
'tm.insert': 'Insert',
|
|
4093
|
+
'tm.add_a_comment': 'Add a comment',
|
|
4094
|
+
'tm.markdown_name_mentions_a_developer': 'Markdown; @name mentions a developer of this workspace.',
|
|
4095
|
+
'tm.comment': 'Comment',
|
|
4096
|
+
'tm.status': 'Status',
|
|
4097
|
+
'tm.none': 'None',
|
|
4098
|
+
'tm.nobody': 'Nobody',
|
|
4099
|
+
'tm.from_feedback': 'From feedback',
|
|
4100
|
+
'tm.from_a_developer_comment': 'From a developer comment',
|
|
4101
|
+
'tm.delete': 'Delete',
|
|
4102
|
+
'tm.save': 'Save',
|
|
4103
|
+
'tm.name': 'Name',
|
|
4104
|
+
'tm.colour': 'Colour',
|
|
4105
|
+
'tm.group': 'Group',
|
|
4106
|
+
'tm.edit': 'Edit',
|
|
4107
|
+
'tm.no_labels_in_this_group': 'No labels in this group.',
|
|
4108
|
+
'tm.delete_group': 'Delete group',
|
|
4109
|
+
'tm.add_group': 'Add group',
|
|
4110
|
+
'tm.the_board_groups_issues_by': 'The board groups issues by the labels of one group. Only workspace administrators delete labels and groups.',
|
|
4111
|
+
'tm.due': 'Due',
|
|
4112
|
+
'tm.no_milestones_yet': 'No milestones yet.',
|
|
4113
|
+
'tm.kind': 'Kind',
|
|
4114
|
+
'tm.issue_title': 'Issue title',
|
|
4115
|
+
'tm.issue_templates_only': 'Issue templates only.',
|
|
4116
|
+
'tm.issue_templates_label_names_separated': 'Issue templates: label names, separated by commas.',
|
|
4117
|
+
'tm.text': 'Text',
|
|
4118
|
+
'tm.markdown': 'Markdown.',
|
|
4119
|
+
'tm.use': 'Use',
|
|
4120
|
+
'tm.none_yet': 'None yet.',
|
|
4121
|
+
'tm.language': 'Language',
|
|
4122
|
+
'tm.install': 'Install',
|
|
4123
|
+
'tm.set_up': 'Set up',
|
|
4124
|
+
'tm.new_issue': 'New issue',
|
|
4125
|
+
'tm.make_an_issue': 'Make an issue',
|
|
4126
|
+
'tm.show': 'Show',
|
|
4127
|
+
'tm.mark_all_as_seen': 'Mark all as seen',
|
|
4128
|
+
'tm.save_view': 'Save view',
|
|
4129
|
+
'tm.label': 'Label',
|
|
4130
|
+
'tm.delete_issue': 'Delete issue',
|
|
4131
|
+
'tm.edit_the_issue': 'Edit the issue',
|
|
4132
|
+
'tm.delete_label': 'Delete label',
|
|
4133
|
+
'tm.delete_milestone': 'Delete milestone',
|
|
4134
|
+
'tm.delete_template': 'Delete template',
|
|
4135
|
+
'tm.filter_the_issues': 'Filter the issues',
|
|
4136
|
+
'tm.title_text_or_number': 'Title, text or #number',
|
|
4137
|
+
'tm.name_of_this_view': 'Name of this view',
|
|
4138
|
+
'tm.label_group': 'Label group',
|
|
4139
|
+
'tm.group_the_board_by': 'Group the board by',
|
|
4140
|
+
'tm.e_g_area': 'e.g. Area',
|
|
4141
|
+
'tm.open_issues_of_this_page': 'Open issues of this page',
|
|
4142
|
+
'tm.issue_saved': 'Issue saved.',
|
|
4143
|
+
'tm.a_comment_has_1_to': 'A comment has 1 to 20000 characters.',
|
|
4144
|
+
'tm.comment_added': 'Comment added.',
|
|
4145
|
+
'tm.a_view_has_a_name': 'A view has a name of 1 to 40 characters.',
|
|
4146
|
+
'tm.view_deleted': 'View deleted.',
|
|
4147
|
+
'tm.mentions_marked_as_seen': 'Mentions marked as seen.',
|
|
4148
|
+
'tm.a_label_has_a_name': 'A label has a name of 1 to 40 characters.',
|
|
4149
|
+
'tm.a_group_has_a_name': 'A group has a name of 1 to 40 characters.',
|
|
4150
|
+
'tm.a_milestone_has_a_name': 'A milestone has a name of 1 to 40 characters and an optional date.',
|
|
4151
|
+
'tm.a_template_has_a_name': 'A template has a name of 1 to 60 characters and up to 20000 characters of text.',
|
|
4152
|
+
'tm.template_deleted': 'The template is deleted.',
|
|
4153
|
+
'tm.an_issue_needs_a_title': 'An issue needs a title.',
|
|
4154
|
+
'tm.the_title_is_at_most': 'The title is at most 200 characters.',
|
|
4155
|
+
'tm.the_text_is_at_most': 'The text is at most 20000 characters.',
|
|
4156
|
+
'tm.unknown_label': 'Unknown label.',
|
|
4157
|
+
'tm.unknown_milestone': 'Unknown milestone.',
|
|
4158
|
+
'tm.assignees_are_developers_of_this': 'Assignees are developers of this workspace.',
|
|
4159
|
+
'tm.the_application_is_not_one': 'The application is not one of this workspace.',
|
|
4160
|
+
'tm.the_page_is_a_page': 'The page is a page number.',
|
|
4161
|
+
'tm.choose_the_application_of_the': 'Choose the application of the page.',
|
|
4162
|
+
'tm.add_a_label': 'Add a label',
|
|
4163
|
+
'tm.add_a_label_group': 'Add a label group',
|
|
4164
|
+
'tm.milestones': 'Milestones',
|
|
4165
|
+
'tm.add_a_milestone': 'Add a milestone',
|
|
4166
|
+
'tm.issue_templates': 'Issue templates',
|
|
4167
|
+
'tm.canned_responses': 'Canned responses',
|
|
4168
|
+
'tm.add_a_template': 'Add a template',
|
|
4169
|
+
'tm.board': 'Board',
|
|
4170
|
+
'tm.templates': 'Templates',
|
|
4171
|
+
'tm.counts_open': '{n} open issues',
|
|
4172
|
+
'tm.counts_open_1': '1 open issue',
|
|
4173
|
+
'tm.counts_mine': '{n} assigned to you',
|
|
4174
|
+
'tm.counts_mentions': '{n} mentions of you',
|
|
4175
|
+
'tm.counts_mentions_1': '1 mention of you',
|
|
4176
|
+
'tm.tab.issues': 'Issues',
|
|
4177
|
+
'tm.tab.board': 'Board',
|
|
4178
|
+
'tm.tab.labels': 'Labels',
|
|
4179
|
+
'tm.tab.milestones': 'Milestones',
|
|
4180
|
+
'tm.tab.templates': 'Templates',
|
|
4181
|
+
'tm.tab.setup': 'Set up',
|
|
4182
|
+
'tm.body_help': 'Markdown: headings, lists, `code`, links. Mention a developer with @name: they see it under Team Development.',
|
|
4183
|
+
'tm.no_labels_or': 'No labels yet: {setup} or {add}.',
|
|
4184
|
+
'tm.no_labels': 'No labels yet: {setup}.',
|
|
4185
|
+
'tm.new_here': 'New here? {setup}: sample labels (Bug, Feature, Task; priorities), templates and milestones.',
|
|
4186
|
+
'tm.blank_issue': 'Blank issue',
|
|
4187
|
+
'tm.status_closed': 'Closed',
|
|
4188
|
+
'tm.status_open': 'Open',
|
|
4189
|
+
'tm.comment_reopen': 'Comment and reopen',
|
|
4190
|
+
'tm.comment_close': 'Comment and close',
|
|
4191
|
+
'tm.reopen_issue': 'Reopen issue',
|
|
4192
|
+
'tm.close_issue': 'Close issue',
|
|
4193
|
+
'tm.add_label': 'Add label',
|
|
4194
|
+
'tm.labels_no_group': 'Labels without a group',
|
|
4195
|
+
'tm.delete_label_confirm': 'Delete the label {name}? Issues lose it.',
|
|
4196
|
+
'tm.delete_group_confirm': 'Delete the group {name}? Its labels stay, without a group.',
|
|
4197
|
+
'tm.add_milestone': 'Add milestone',
|
|
4198
|
+
'tm.kind_issue': 'Issue template',
|
|
4199
|
+
'tm.kind_response': 'Canned response',
|
|
4200
|
+
'tm.add_template': 'Add template',
|
|
4201
|
+
'tm.page_issues': '{n} open issues:',
|
|
4202
|
+
'tm.page_issues_1': '1 open issue:',
|
|
4203
|
+
'tm.all_n': 'all {n}',
|
|
4204
|
+
'tm.no_page': 'The application has no page {page}.',
|
|
4205
|
+
'tm.created': 'Issue #{id} created.',
|
|
4206
|
+
'tm.reopened': 'Issue #{id} reopened.',
|
|
4207
|
+
'tm.deleted': 'Issue #{id} deleted.',
|
|
4208
|
+
'tm.view_saved': 'View {name} saved.',
|
|
4209
|
+
'tm.label_saved': 'Label {name} saved.',
|
|
4210
|
+
'tm.group_added': 'Group {name} added.',
|
|
4211
|
+
'tm.group_exists': 'A group {name} exists already.',
|
|
4212
|
+
'tm.label_deleted': 'The label is deleted.',
|
|
4213
|
+
'tm.group_deleted': 'The group is deleted.',
|
|
4214
|
+
'tm.milestone_deleted': 'The milestone is deleted.',
|
|
4215
|
+
'tm.milestone_saved': 'Milestone {name} saved.',
|
|
4216
|
+
'tm.template_saved': 'Template {name} saved.',
|
|
4217
|
+
'tm.setup_done': 'Set up: {groups} label group(s), {labels} label(s), {templates} template(s) and {milestones} milestone(s) added.',
|
|
4218
|
+
'tm.created_feedback': 'Issue #{id} created from the feedback.',
|
|
4219
|
+
'tm.created_comment': 'Issue #{id} created from the comment.',
|
|
4220
|
+
'tm.no_milestone': 'No milestone',
|
|
4221
|
+
'tm.none_of_these': 'None of these',
|
|
4222
|
+
'tm.other_labels': 'Other labels',
|
|
4223
|
+
'tm.setup_intro': 'Installs sample data for {workspace}; what exists already (by name) is kept, so you can run it again.',
|
|
4224
|
+
'tm.this_workspace': 'this workspace',
|
|
4225
|
+
'tm.setup_labels': 'Label groups and labels: {list}',
|
|
4226
|
+
'tm.setup_templates': 'Templates: {list}; canned responses ({n})',
|
|
4227
|
+
'tm.setup_milestones': 'Milestones: {list}',
|
|
4228
|
+
'tm.issue_closed': 'Issue #{id} closed.',
|
|
4229
|
+
// ------------------------------------------------------------ Mail services (sprint 164)
|
|
4230
|
+
'ml.only_with_sign_in_oauth2': '(only with Sign-in: OAuth2)',
|
|
4231
|
+
'ml.advanced': 'Advanced',
|
|
4232
|
+
'ml.choose_another_provider': 'Choose another provider',
|
|
4233
|
+
'ml.queued_utc': 'Queued (UTC)',
|
|
4234
|
+
'ml.application': 'Application',
|
|
4235
|
+
'ml.to': 'To',
|
|
4236
|
+
'ml.subject': 'Subject',
|
|
4237
|
+
'ml.from': 'From',
|
|
4238
|
+
'ml.attempts': 'Attempts',
|
|
4239
|
+
'ml.status': 'Status',
|
|
4240
|
+
'ml.actions': 'Actions',
|
|
4241
|
+
'ml.no_mail_yet': 'No mail yet.',
|
|
4242
|
+
'ml.only_administrators_configure_mail_services': 'Only administrators configure mail services.',
|
|
4243
|
+
'ml.mail_services': 'Mail services',
|
|
4244
|
+
'ml.send_e_mail': 'Send e-mail',
|
|
4245
|
+
'ml.service': 'Service',
|
|
4246
|
+
'ml.provider': 'Provider',
|
|
4247
|
+
'ml.senders': 'Senders',
|
|
4248
|
+
'ml.secret': 'Secret',
|
|
4249
|
+
'ml.applications': 'Applications',
|
|
4250
|
+
'ml.its_applications_without_a_service': 'its applications without a service of their own',
|
|
4251
|
+
'ml.no_mail_services_yet': 'No mail services yet.',
|
|
4252
|
+
'ml.add_a_mail_service': 'Add a mail service',
|
|
4253
|
+
'ml.step_1_of_2_how': 'Step 1 of 2: how should the applications send mail?',
|
|
4254
|
+
'ml.change': 'Change',
|
|
4255
|
+
'ml.delete_service': 'Delete service',
|
|
4256
|
+
'ml.the_applications_that_send_through': 'The applications that send through this service (each application has one), their From address (empty: the service\'s default) and a limit per day (UTC; empty: none). An application with another service shows it.',
|
|
4257
|
+
'ml.sends_through_this_service': 'Sends through this service',
|
|
4258
|
+
'ml.from_address': 'From address',
|
|
4259
|
+
'ml.mails_per_day': 'Mails per day',
|
|
4260
|
+
'ml.no_applications': 'No applications.',
|
|
4261
|
+
'ml.save': 'Save',
|
|
4262
|
+
'ml.send_again': 'Send again',
|
|
4263
|
+
'ml.cancel': 'Cancel',
|
|
4264
|
+
'ml.no_from_address': 'no From address',
|
|
4265
|
+
'ml.it_may_not_send_mail': 'It may not send mail yet',
|
|
4266
|
+
'ml.show': 'Show',
|
|
4267
|
+
'ml.find_my_workspace': 'Find my workspace',
|
|
4268
|
+
'ml.test_connection': 'Test connection',
|
|
4269
|
+
'ml.send_test_mail': 'Send test mail',
|
|
4270
|
+
'ml.add_service': 'Add service',
|
|
4271
|
+
'ml.tenant_id_microsoft_entra': 'Tenant ID (Microsoft Entra)',
|
|
4272
|
+
'ml.client_application_id': 'Client (application) ID',
|
|
4273
|
+
'ml.token_url': 'Token URL',
|
|
4274
|
+
'ml.scope': 'Scope',
|
|
4275
|
+
'ml.host': 'Host',
|
|
4276
|
+
'ml.port': 'Port',
|
|
4277
|
+
'ml.security': 'Security',
|
|
4278
|
+
'ml.sign_in': 'Sign-in',
|
|
4279
|
+
'ml.user_name': 'User name',
|
|
4280
|
+
'ml.check_the_server_s_certificate': 'Check the server\'s certificate',
|
|
4281
|
+
'ml.keep_a_copy_in_the': 'Keep a copy in the mailbox\'s Sent Items',
|
|
4282
|
+
'ml.aws_region': 'AWS region',
|
|
4283
|
+
'ml.access_key_id': 'Access key ID',
|
|
4284
|
+
'ml.sending_domain': 'Sending domain',
|
|
4285
|
+
'ml.region': 'Region',
|
|
4286
|
+
'ml.message_stream': 'Message stream',
|
|
4287
|
+
'ml.remove_the_stored_secret': 'Remove the stored secret',
|
|
4288
|
+
'ml.name': 'Name',
|
|
4289
|
+
'ml.description': 'Description',
|
|
4290
|
+
'ml.enabled': 'Enabled',
|
|
4291
|
+
'ml.allowed_senders': 'Allowed senders',
|
|
4292
|
+
'ml.default_from_address': 'Default From address',
|
|
4293
|
+
'ml.api_base_url': 'API base URL',
|
|
4294
|
+
'ml.send_a_test_mail_to': 'Send a test mail to',
|
|
4295
|
+
'ml.smtp_server': 'SMTP server',
|
|
4296
|
+
'ml.microsoft_entra_application': 'Microsoft Entra application',
|
|
4297
|
+
'ml.amazon_ses': 'Amazon SES',
|
|
4298
|
+
'ml.mailgun': 'Mailgun',
|
|
4299
|
+
'ml.postmark': 'Postmark',
|
|
4300
|
+
'ml.check_before_saving': 'Check before saving',
|
|
4301
|
+
'ml.contoso_onmicrosoft_com_or_its': 'contoso.onmicrosoft.com or its GUID',
|
|
4302
|
+
'ml.empty_microsoft_entra_of_the': 'empty: Microsoft Entra of the tenant',
|
|
4303
|
+
'ml.another_identity_provider_s_token': 'Another identity provider\'s token endpoint (client credentials grant), e.g. Google\'s.',
|
|
4304
|
+
'ml.empty_587_starttls_or_465': 'Empty: 587 (STARTTLS) or 465 (TLS).',
|
|
4305
|
+
'ml.the_mailbox_e_g_noreply': 'the mailbox, e.g. noreply@example.com',
|
|
4306
|
+
'ml.eu_west_1': 'eu-west-1',
|
|
4307
|
+
'ml.e_g_office365': 'e.g. OFFICE365',
|
|
4308
|
+
'ml.upper_case_letters_digits_and': 'Upper case letters, digits and _.',
|
|
4309
|
+
'ml.noreply_example_com_example_com': 'noreply@example.com, @example.com',
|
|
4310
|
+
'ml.the_from_addresses_this_service': 'The From addresses this service may send as: an address, or @domain for every address of a domain (the provider must accept them too).',
|
|
4311
|
+
'ml.noreply_example_com': 'noreply@example.com',
|
|
4312
|
+
'ml.for_applications_that_set_none': 'For applications that set none.',
|
|
4313
|
+
'ml.empty_the_provider_s_own': 'empty: the provider\'s own API',
|
|
4314
|
+
'ml.a_gateway_or_proxy_that': 'A gateway or proxy that speaks the provider\'s API. Administrators only.',
|
|
4315
|
+
'ml.you_example_com': 'you@example.com',
|
|
4316
|
+
'ml.one_of_the_allowed_senders': 'One of the allowed senders.',
|
|
4317
|
+
'ml.pgkiln_example_com': 'pgkiln@example.com',
|
|
4318
|
+
'ml.one_of_the_service_s': 'One of the service\'s senders.',
|
|
4319
|
+
'ml.any_smtp_server_or_relay': 'Any SMTP server or relay. Sign in with a password, or with OAuth2 (Exchange Online, Google Workspace).',
|
|
4320
|
+
'ml.microsoft_365_through_the_graph': 'Microsoft 365 through the Graph API, as an Entra application with Mail.Send.',
|
|
4321
|
+
'ml.amazon_simple_email_service_api': 'Amazon Simple Email Service (API v2), with an IAM access key.',
|
|
4322
|
+
'ml.resend_s_http_api_with': 'Resend\'s HTTP API, with an API key.',
|
|
4323
|
+
'ml.postmark_s_http_api_with': 'Postmark\'s HTTP API, with a server token.',
|
|
4324
|
+
'ml.sendgrid_s_http_api_with': 'SendGrid\'s HTTP API, with an API key.',
|
|
4325
|
+
'ml.mailgun_s_http_api_with': 'Mailgun\'s HTTP API, with an API key and a sending domain.',
|
|
4326
|
+
'ml.for_development_and_demos_the': 'For development and demos: the server writes each mail to its log and sends nothing.',
|
|
4327
|
+
'ml.starttls_required': 'STARTTLS (required)',
|
|
4328
|
+
'ml.tls_from_the_start_port': 'TLS from the start (port 465)',
|
|
4329
|
+
'ml.none_a_local_relay_only': 'None (a local relay only)',
|
|
4330
|
+
'ml.user_name_and_password': 'User name and password',
|
|
4331
|
+
'ml.oauth2_xoauth2_client_credentials': 'OAuth2 (XOAUTH2, client credentials)',
|
|
4332
|
+
'ml.none': 'None',
|
|
4333
|
+
'ml.all': 'All',
|
|
4334
|
+
'ml.queued': 'Queued',
|
|
4335
|
+
'ml.sending': 'Sending',
|
|
4336
|
+
'ml.sent': 'Sent',
|
|
4337
|
+
'ml.error': 'Error',
|
|
4338
|
+
'ml.cancelled': 'Cancelled',
|
|
4339
|
+
'ml.password_or_the_client_secret': 'Password, or the client secret (OAuth2)',
|
|
4340
|
+
'ml.client_secret': 'Client secret',
|
|
4341
|
+
'ml.secret_access_key': 'Secret access key',
|
|
4342
|
+
'ml.server_token': 'Server token',
|
|
4343
|
+
'ml.secret_not_used': 'Secret (not used)',
|
|
4344
|
+
'ml.stored_encrypted_never_shown_again': 'Stored encrypted; never shown again.',
|
|
4345
|
+
'ml.the_check_failed': 'The check failed.',
|
|
4346
|
+
'ml.builder_mail_saved_find_my': 'Builder mail saved: "Find my workspace" sends through it.',
|
|
4347
|
+
'ml.the_builder_sends_no_mail': 'The builder sends no mail now.',
|
|
4348
|
+
'ml.not_saved_yet_fill_in': 'Not saved yet: fill in the settings below and save to switch.',
|
|
4349
|
+
'ml.add': 'Add',
|
|
4350
|
+
'ml.the_mail_is_queued_again': 'The mail is queued again.',
|
|
4351
|
+
'ml.the_mail_is_cancelled': 'The mail is cancelled.',
|
|
4352
|
+
'ml.the_mail_has_changed_meanwhile': 'The mail has changed meanwhile.',
|
|
4353
|
+
'ml.switch_off_only_for_a': 'Switch off only for a relay with a self-signed certificate on your own network.',
|
|
4354
|
+
'ml.mail_service_added_choose_the': 'Mail service added. Choose the applications that send through it below, and test it.',
|
|
4355
|
+
'ml.mail_service_saved': 'Mail service saved.',
|
|
4356
|
+
'ml.applications_saved': 'Applications saved.',
|
|
4357
|
+
'ml.mail_service_deleted': 'Mail service deleted.',
|
|
4358
|
+
'ml.name_at_least_one_allowed': 'Name at least one allowed sender (an address, or @domain).',
|
|
4359
|
+
'ml.the_default_from_address_must': 'The default From address must be an address the service may send as.',
|
|
4360
|
+
'ml.choose_one_of_the_mail': 'Choose one of the mail services.',
|
|
4361
|
+
'ml.the_from_address_is_an': 'The From address is an e-mail address, e.g. pgkiln@example.com.',
|
|
4362
|
+
'ml.the_name_is_upper_case': 'The name is upper case letters, digits and _ (e.g. OFFICE365).',
|
|
4363
|
+
'ml.not_found': 'Not found.',
|
|
4364
|
+
'ml.mails_per_day_a_whole': 'Mails per day: a whole number of 0 or more (empty: no limit).',
|
|
4365
|
+
'ml.services': 'Services',
|
|
4366
|
+
'ml.recent_mail': 'Recent mail',
|
|
4367
|
+
'ml.settings': 'Settings',
|
|
4368
|
+
'ml.mail': 'Mail',
|
|
4369
|
+
'ml.builder_mail': 'Builder mail',
|
|
4370
|
+
'ml.mail_service': 'Mail service',
|
|
4371
|
+
'ml.app_builder': 'App Builder',
|
|
4372
|
+
'ml.workspace_utilities': 'Workspace utilities',
|
|
4373
|
+
'ml.activity': 'Activity',
|
|
4374
|
+
'ml.api_key': 'API key',
|
|
4375
|
+
'ml.no_secret_key': 'The server has no `PGKILN_SECRET_KEY`: secrets can\'t be stored until it is set.',
|
|
4376
|
+
'ml.check_help': 'Uses the settings above as they are filled in, without saving them. Test connection signs in (SMTP) or makes a read-only call with the key; a test mail is really sent.',
|
|
4377
|
+
'ml.check_help_secret': 'Uses the settings above as they are filled in, without saving them. An empty secret field uses the stored secret. Test connection signs in (SMTP) or makes a read-only call with the key; a test mail is really sent.',
|
|
4378
|
+
'ml.secret_unreadable': 'The stored secret can\'t be read: {error}',
|
|
4379
|
+
'ml.test_to_missing': 'Give the address to send the test mail to.',
|
|
4380
|
+
'ml.from_not_allowed': 'The From address must be one of the allowed senders.',
|
|
4381
|
+
'ml.test_handed': 'The test mail was handed to {provider}. Check the mailbox of {to}.',
|
|
4382
|
+
'ml.test_handed_id': 'The test mail was handed to {provider} (its id: {id}). Check the mailbox of {to}.',
|
|
4383
|
+
'ml.intro': 'How the applications of this installation send e-mail (`meta.send_mail()` from SQL, the {process} process, e-mail templates). Mail is queued in the application\'s transaction and sent by the server after it commits. Choose the service of each application on the service\'s page.',
|
|
4384
|
+
'ml.may_not_send_as': 'The service {name} may not send as {from}: add it to its senders first.',
|
|
4385
|
+
'ml.delete_confirm': 'Delete mail service {name}? Its applications can\'t send mail until they get another one.',
|
|
4386
|
+
'ml.aria_from': 'From address for {app}',
|
|
4387
|
+
'ml.aria_max': 'Mails per day for {app}',
|
|
4388
|
+
'ml.queue_intro': 'The mail this application queued (`meta.send_mail()`, the Send e-mail process), kept 30 days.',
|
|
4389
|
+
'ml.sends_through': 'It sends through {service} ({provider}) as {from}; today: {today}.',
|
|
4390
|
+
'ml.sends_through_max': 'It sends through {service} ({provider}) as {from}; today: {today} of {max}.',
|
|
4391
|
+
'ml.disabled_l': 'disabled',
|
|
4392
|
+
'ml.no_service_admin': '{none}: an administrator chooses its mail service under {link}.',
|
|
4393
|
+
'ml.no_service': '{none}: an administrator chooses its mail service.',
|
|
4394
|
+
'ml.mail_of': 'Mail · {app}',
|
|
4395
|
+
'ml.builder_intro': 'The service the builder itself sends through: {find} on the sign-in page mails developers their workspaces (to the address on their account). None: the builder sends no mail.',
|
|
4396
|
+
// ------------------------------------------------------------ Workspace mail service (sprint 164)
|
|
4397
|
+
'wml.workspace_mail_service': 'Workspace mail service',
|
|
4398
|
+
'wml.only_the_workspace_s_administrators': 'Only the workspace\'s administrators manage its mail service.',
|
|
4399
|
+
'wml.network_access': 'network access',
|
|
4400
|
+
'wml.change': 'Change',
|
|
4401
|
+
'wml.delete_service': 'Delete service',
|
|
4402
|
+
'wml.application': 'Application',
|
|
4403
|
+
'wml.sends_through': 'Sends through',
|
|
4404
|
+
'wml.chosen_by_an_administrator': '(chosen by an administrator)',
|
|
4405
|
+
'wml.nothing_yet': 'nothing yet',
|
|
4406
|
+
'wml.no_applications': 'No applications.',
|
|
4407
|
+
'wml.delete_this_workspace_s_mail': 'Delete this workspace\'s mail service? Its applications without a service of their own can\'t send mail then.',
|
|
4408
|
+
'wml.provider': 'Provider',
|
|
4409
|
+
'wml.not_saved_yet_fill_in': 'Not saved yet: fill in the settings below and save to switch.',
|
|
4410
|
+
'wml.mail_service_saved': 'Mail service saved.',
|
|
4411
|
+
'wml.mail_service_added_send_a': 'Mail service added: send a test mail to check it.',
|
|
4412
|
+
'wml.mail_service_deleted': 'Mail service deleted.',
|
|
4413
|
+
'wml.there_was_no_mail_service': 'There was no mail service.',
|
|
4414
|
+
'wml.settings': 'Settings',
|
|
4415
|
+
'wml.applications': 'Applications',
|
|
4416
|
+
'wml.administration': 'Administration',
|
|
4417
|
+
'wml.mail_service': 'Mail service',
|
|
4418
|
+
'wml.title': 'Mail service · {workspace}',
|
|
4419
|
+
'wml.intro': 'This workspace\'s own mail service: its applications that an administrator gave no service of their own send through it ({fn}, the Send e-mail process). The secret is stored encrypted and never shown again. It uses the provider\'s own API; an SMTP server must be on the installation\'s allow-list and this workspace\'s {network} list.',
|
|
4420
|
+
// ------------------------------------------------------------ Data Reporter datasets (sprint 164)
|
|
4421
|
+
'dts.data_reporter': 'Data Reporter',
|
|
4422
|
+
'dts.dataset': 'Dataset',
|
|
4423
|
+
'dts.schema': 'Schema',
|
|
4424
|
+
'dts.tables_and_views': 'Tables and views',
|
|
4425
|
+
'dts.columns': 'Columns',
|
|
4426
|
+
'dts.updated_utc': 'Updated (UTC)',
|
|
4427
|
+
'dts.actions': 'Actions',
|
|
4428
|
+
'dts.no_datasets_yet_create_one': 'No datasets yet: create one on tables and views of a schema, or import a dataset file.',
|
|
4429
|
+
'dts.application': 'Application',
|
|
4430
|
+
'dts.datasets': 'Datasets',
|
|
4431
|
+
'dts.users': 'Users',
|
|
4432
|
+
'dts.published_reports': 'Published reports',
|
|
4433
|
+
'dts.no_reporting_applications_yet_choose': 'No reporting applications yet: choose Create reporting application on a dataset.',
|
|
4434
|
+
'dts.new_dataset': 'New dataset',
|
|
4435
|
+
'dts.show_its_tables_and_views': 'Show its tables and views',
|
|
4436
|
+
'dts.tables_and_views_the_first': 'Tables and views (the first is the main one)',
|
|
4437
|
+
'dts.the_schema_has_no_tables': 'The schema has no tables or views you may use.',
|
|
4438
|
+
'dts.joins_are_proposed_from_foreign': 'Joins are proposed from foreign keys; every column is offered at first, labelled from its name. You change all of it on the next page.',
|
|
4439
|
+
'dts.cancel': 'Cancel',
|
|
4440
|
+
'dts.the_dataset_doesn_t_match': 'The dataset doesn\'t match the database (any more):',
|
|
4441
|
+
'dts.description_shown_to_users': 'Description (shown to users)',
|
|
4442
|
+
'dts.alias': 'Alias',
|
|
4443
|
+
'dts.table_or_view': 'Table or view',
|
|
4444
|
+
'dts.joins_to': 'Joins to',
|
|
4445
|
+
'dts.join': 'Join',
|
|
4446
|
+
'dts.remove': 'Remove',
|
|
4447
|
+
'dts.the_main_table': 'the main table',
|
|
4448
|
+
'dts.add_a_table_or_view': 'Add a table or view',
|
|
4449
|
+
'dts.joined_to': 'Joined to',
|
|
4450
|
+
'dts.on': 'On',
|
|
4451
|
+
'dts.empty_proposed_from_a_foreign': 'Empty: proposed from a foreign key.',
|
|
4452
|
+
'dts.business_users_see_only_the': 'Business users see only the offered columns, under their labels. The name is how reports refer to a column: changing it breaks saved reports that use it.',
|
|
4453
|
+
'dts.offer': 'Offer',
|
|
4454
|
+
'dts.column': 'Column',
|
|
4455
|
+
'dts.name': 'Name',
|
|
4456
|
+
'dts.label': 'Label',
|
|
4457
|
+
'dts.format_mask': 'Format mask',
|
|
4458
|
+
'dts.description': 'Description',
|
|
4459
|
+
'dts.only_rows_that_match_every': 'Only rows that match every condition are in the dataset (on top of the application role\'s row level security).',
|
|
4460
|
+
'dts.the_query_reports_run_on': 'The query reports run on (as the application\'s role). The preview runs it read only through your SQL Workshop connection.',
|
|
4461
|
+
'dts.no_rows': 'No rows.',
|
|
4462
|
+
'dts.import_datasets': 'Import datasets',
|
|
4463
|
+
'dts.file': 'File',
|
|
4464
|
+
'dts.or_paste_it': 'Or paste it',
|
|
4465
|
+
'dts.replace_datasets_with_the_same': 'Replace datasets with the same name',
|
|
4466
|
+
'dts.create_a_reporting_application': 'Create a reporting application',
|
|
4467
|
+
'dts.the_first_dataset_s_schema': 'The first dataset\'s schema is the application\'s parsing schema.',
|
|
4468
|
+
'dts.import': 'Import',
|
|
4469
|
+
'dts.export_all': 'Export all',
|
|
4470
|
+
'dts.create_reporting_application': 'Create reporting application',
|
|
4471
|
+
'dts.run': 'Run',
|
|
4472
|
+
'dts.users_and_roles': 'Users and roles',
|
|
4473
|
+
'dts.create_dataset': 'Create dataset',
|
|
4474
|
+
'dts.download': 'Download',
|
|
4475
|
+
'dts.save_dataset': 'Save dataset',
|
|
4476
|
+
'dts.delete_dataset': 'Delete dataset',
|
|
4477
|
+
'dts.create': 'Create',
|
|
4478
|
+
'dts.from_a_foreign_key': 'from a foreign key',
|
|
4479
|
+
'dts.first_administrator': 'First administrator',
|
|
4480
|
+
'dts.password': 'Password',
|
|
4481
|
+
'dts.e_g_sales': 'e.g. sales',
|
|
4482
|
+
'dts.lower_case_letters_digits_and': 'Lower case letters, digits and _ (at most 40): reports and files use it. It can\'t be changed later.',
|
|
4483
|
+
'dts.e_g_sales_2': 'e.g. Sales',
|
|
4484
|
+
'dts.what_business_users_see': 'What business users see.',
|
|
4485
|
+
'dts.its_address_a_alias_its': 'Its address: /a/<alias>. Its database role is app_<alias>, which may only read the datasets\' tables and views.',
|
|
4486
|
+
'dts.an_account_of_the_user': 'An account of the user directory (users sign in with their workspace accounts).',
|
|
4487
|
+
'dts.only_for_a_new_account': 'Only for a new account.',
|
|
4488
|
+
'dts.the_dataset_offers_no_columns': 'The dataset offers no columns.',
|
|
4489
|
+
'dts.no_reporting_application_uses_it': 'No reporting application uses it.',
|
|
4490
|
+
'dts.dataset_saved': 'Dataset saved.',
|
|
4491
|
+
'dts.create_a_dataset_first': 'Create a dataset first.',
|
|
4492
|
+
'dts.reporting_applications': 'Reporting applications',
|
|
4493
|
+
'dts.1_schema': '1. Schema',
|
|
4494
|
+
'dts.2_tables_and_views': '2. Tables and views',
|
|
4495
|
+
'dts.row_filter': 'Row filter',
|
|
4496
|
+
'dts.query_and_preview': 'Query and preview',
|
|
4497
|
+
'dts.delete': 'Delete',
|
|
4498
|
+
'dts.a_dataset_file': 'A dataset file',
|
|
4499
|
+
'dts.app_builder': 'App Builder',
|
|
4500
|
+
'dts.choose_one_of_the_schemas': 'Choose one of the schemas in the list.',
|
|
4501
|
+
'dts.choose_at_least_one_table': 'Choose at least one table or view.',
|
|
4502
|
+
'dts.roles_help': 'Roles: {viewer} runs published reports (every user with access), {editor} also builds, saves, publishes and unpublishes reports, {administrator} also unpublishes and deletes anyone\'s. Give accounts access and roles under Users and roles.',
|
|
4503
|
+
'dts.exists': 'There is already a dataset {name}.',
|
|
4504
|
+
'dts.created': 'Dataset {name} created: check its columns and labels.',
|
|
4505
|
+
'dts.created_errors': 'Dataset {name} created. {errors}',
|
|
4506
|
+
'dts.on_header': 'On (column = its column)',
|
|
4507
|
+
'dts.join_left': 'Left (keep rows without a match)',
|
|
4508
|
+
'dts.join_inner': 'Inner (only matching rows)',
|
|
4509
|
+
'dts.aria_join_type': 'Join type of {table}',
|
|
4510
|
+
'dts.aria_join_cols': 'Join columns of {table}',
|
|
4511
|
+
'dts.aria_remove': 'Remove {table}',
|
|
4512
|
+
'dts.aria_offer': 'Offer {column}',
|
|
4513
|
+
'dts.aria_name': 'Name of {column}',
|
|
4514
|
+
'dts.aria_label': 'Label of {column}',
|
|
4515
|
+
'dts.aria_format': 'Format mask of {column}',
|
|
4516
|
+
'dts.aria_desc': 'Description of {column}',
|
|
4517
|
+
'dts.aria_filter_col': 'Filter {n}: column',
|
|
4518
|
+
'dts.aria_filter_op': 'Filter {n}: operator',
|
|
4519
|
+
'dts.aria_filter_value': 'Filter {n}: value',
|
|
4520
|
+
'dts.value': 'value',
|
|
4521
|
+
'dts.none_opt': '- none -',
|
|
4522
|
+
'dts.used_by': 'Reporting applications using it ({apps}) lose this data source: their reports on it stop working.',
|
|
4523
|
+
'dts.delete_confirm': 'Delete the dataset {name}?',
|
|
4524
|
+
'dts.schema_refused': 'Your SQL Workshop connection may not use the schema {schema}.',
|
|
4525
|
+
'dts.deleted': 'Dataset {name} deleted.',
|
|
4526
|
+
'dts.import_intro': 'A file downloaded from a Data Reporter (`*.dataset.json`, format pgkiln-dataset/1), with one dataset or several. Each is checked against this installation\'s database: its schema, tables, views and columns must exist here.',
|
|
4527
|
+
'dts.import_title': 'Import datasets',
|
|
4528
|
+
'dts.too_large': 'The file is larger than 2 MB.',
|
|
4529
|
+
'dts.no_file': 'Choose a file or paste one.',
|
|
4530
|
+
'dts.no_schema': 'Dataset {name}: the schema "{schema}" doesn\'t exist here, or your SQL Workshop connection may not use it.',
|
|
4531
|
+
'dts.import_errors': 'Dataset {name}: {errors}',
|
|
4532
|
+
'dts.no_columns': 'it offers no columns.',
|
|
4533
|
+
'dts.nothing_imported': 'Nothing was imported. {error}',
|
|
4534
|
+
'dts.create_app_title': 'Create reporting application',
|
|
4535
|
+
'dts.choose_one': 'Choose at least one dataset.',
|
|
4536
|
+
'dts.choose_max': 'Choose at most {n} datasets.',
|
|
4537
|
+
'dts.app_created': 'Reporting application {name} created: run it at {path}, and give accounts access and the roles viewer, editor or administrator under Users and roles.',
|
|
4538
|
+
'dts.new_dataset_title': 'New dataset',
|
|
4539
|
+
// ------------------------------------------------------------ Team Development (2) (sprint 164)
|
|
4540
|
+
'tm.changed_the_title': 'changed the title',
|
|
4541
|
+
'tm.problem': 'Problem',
|
|
4542
|
+
'tm.idea': 'Idea',
|
|
4543
|
+
'tm.feedback': 'Feedback',
|
|
4544
|
+
'tm.untitled': 'Untitled',
|
|
4545
|
+
'tm.ev.created': 'created the issue',
|
|
4546
|
+
'tm.ev.closed': 'closed the issue',
|
|
4547
|
+
'tm.ev.reopened': 'reopened the issue',
|
|
4548
|
+
'tm.ev.body': 'edited the description',
|
|
4549
|
+
'tm.ev.labels': 'changed the labels',
|
|
4550
|
+
'tm.ev.assignees': 'changed the assignees',
|
|
4551
|
+
'tm.ev.milestone': 'set the milestone',
|
|
4552
|
+
'tm.ev.link': 'linked',
|
|
4553
|
+
'tm.ev.commented': 'commented',
|
|
4554
|
+
'tm.someone': 'someone',
|
|
4555
|
+
'tm.f.status': 'Status',
|
|
4556
|
+
'tm.f.open': 'Open',
|
|
4557
|
+
'tm.f.all': 'All',
|
|
4558
|
+
'tm.f.any': 'Any',
|
|
4559
|
+
'tm.f.assignee': 'Assignee',
|
|
4560
|
+
'tm.f.anyone': 'Anyone',
|
|
4561
|
+
'tm.f.me': 'Me',
|
|
4562
|
+
'tm.delete_view_confirm': 'Delete the view {name}?',
|
|
4563
|
+
'tm.delete_named': 'Delete {name}',
|
|
4564
|
+
'tm.delete_issue_confirm': 'Delete issue #{id} with its comments and history?',
|
|
4565
|
+
'tm.delete_milestone_confirm': 'Delete the milestone {name}? Its issues keep no milestone.',
|
|
4566
|
+
'tm.delete_template_confirm': 'Delete the template {name}?',
|
|
4567
|
+
// ------------------------------------------------------------ REST data sources and web credentials (sprint 164)
|
|
4568
|
+
'wsrc.secrets': 'Secrets',
|
|
4569
|
+
'wsrc.a_secret_is_stored': 'A secret is stored',
|
|
4570
|
+
'wsrc.no_secret_yet': 'No secret yet.',
|
|
4571
|
+
'wsrc.a_password_is_stored': 'A password is stored',
|
|
4572
|
+
'wsrc.no_password_yet': 'No password yet.',
|
|
4573
|
+
'wsrc.a_refresh_token_is_stored': 'A refresh token is stored',
|
|
4574
|
+
'wsrc.no_refresh_token_yet': 'No refresh token yet.',
|
|
4575
|
+
'wsrc.synchronisation': 'Synchronisation',
|
|
4576
|
+
'wsrc.set_a_local_table_above': 'Set a local table above to copy this source\'s rows into a table (on demand, from SQL or on a schedule).',
|
|
4577
|
+
'wsrc.the_scheduler_is_off_on': '(the scheduler is off on this server: AUTOMATIONS=off)',
|
|
4578
|
+
'wsrc.requested': 'Requested',
|
|
4579
|
+
'wsrc.took': 'Took',
|
|
4580
|
+
'wsrc.by': 'By',
|
|
4581
|
+
'wsrc.status': 'Status',
|
|
4582
|
+
'wsrc.rows': 'Rows',
|
|
4583
|
+
'wsrc.inserted': 'Inserted',
|
|
4584
|
+
'wsrc.updated': 'Updated',
|
|
4585
|
+
'wsrc.deleted': 'Deleted',
|
|
4586
|
+
'wsrc.message': 'Message',
|
|
4587
|
+
'wsrc.no_runs_yet': 'No runs yet.',
|
|
4588
|
+
'wsrc.test': 'Test',
|
|
4589
|
+
'wsrc.suggested_columns': 'Suggested columns',
|
|
4590
|
+
'wsrc.use_these_columns': 'Use these columns',
|
|
4591
|
+
'wsrc.response': 'Response',
|
|
4592
|
+
'wsrc.synchronise_now': 'Synchronise now',
|
|
4593
|
+
'wsrc.the_secret': 'the secret',
|
|
4594
|
+
'wsrc.the_password': 'the password',
|
|
4595
|
+
'wsrc.the_refresh_token': 'the refresh token',
|
|
4596
|
+
'wsrc.not_found': 'Not found.',
|
|
4597
|
+
'wsrc.the_synchronisation_failed': 'The synchronisation failed.',
|
|
4598
|
+
'wsrc.the_columns_are_not_valid': 'The columns are not valid JSON.',
|
|
4599
|
+
'wsrc.columns_saved': 'Columns saved.',
|
|
4600
|
+
'wsrc.remove_confirm': 'Remove {what}?',
|
|
4601
|
+
'wsrc.remove': 'Remove {what}',
|
|
4602
|
+
'wsrc.secret_stored': '{stored} (encrypted). It is never shown; type a new one above to replace it.',
|
|
4603
|
+
'wsrc.secret_missing': '{none} Requests with this credential fail until one is entered.',
|
|
4604
|
+
'wsrc.no_client_secret': 'No client secret (a public client).',
|
|
4605
|
+
'wsrc.password_stored': '{stored} (encrypted).',
|
|
4606
|
+
'wsrc.password_missing': '{none} The password flow fails until one is entered.',
|
|
4607
|
+
'wsrc.refresh_stored': '{stored} (encrypted). pgkiln uses it to renew the access token and keeps the newer one the service sends.',
|
|
4608
|
+
'wsrc.refresh_stored_at': '{stored} (encrypted), received {at} UTC. pgkiln uses it to renew the access token and keeps the newer one the service sends.',
|
|
4609
|
+
'wsrc.refresh_missing': '{none} Enter one above.',
|
|
4610
|
+
'wsrc.no_refresh': 'No refresh token yet (kept when the token endpoint sends one).',
|
|
4611
|
+
'wsrc.no_secret_key': 'The server has no `PGKILN_SECRET_KEY`: secrets can\'t be saved or used until it is set (at least 32 characters).',
|
|
4612
|
+
'wsrc.sync_into': 'Into {table} ({mode}). Next run: {next}',
|
|
4613
|
+
'wsrc.deleting_missing': 'deleting missing rows',
|
|
4614
|
+
'wsrc.sync_from_code': 'From application code: {call} queues a run for the server\'s next scheduler pass.',
|
|
4615
|
+
'wsrc.answered': 'The web service answered {status}.',
|
|
4616
|
+
'wsrc.the_source': 'The source',
|
|
4617
|
+
'wsrc.synced': 'Synchronised {rows} row(s): {inserted} inserted, {updated} updated, {deleted} deleted.',
|
|
4618
|
+
// ------------------------------------------------------------ Workspace files, remote servers and web credentials (sprint 164)
|
|
4619
|
+
'wres.you_are_not_a_developer': 'You are not a developer of any workspace yet.',
|
|
4620
|
+
'wres.only_the_workspace_s_administrators': 'Only the workspace\'s administrators change these.',
|
|
4621
|
+
'wres.you_can_see_these_the': 'You can see these; the workspace\'s administrators change them.',
|
|
4622
|
+
'wres.content': 'Content',
|
|
4623
|
+
'wres.cancel': 'Cancel',
|
|
4624
|
+
'wres.static_workspace_files': 'Static workspace files',
|
|
4625
|
+
'wres.name': 'Name',
|
|
4626
|
+
'wres.type': 'Type',
|
|
4627
|
+
'wres.size': 'Size',
|
|
4628
|
+
'wres.loaded_by': 'Loaded by',
|
|
4629
|
+
'wres.changed_utc': 'Changed (UTC)',
|
|
4630
|
+
'wres.actions': 'Actions',
|
|
4631
|
+
'wres.edit': 'Edit',
|
|
4632
|
+
'wres.no_files_yet': 'No files yet.',
|
|
4633
|
+
'wres.a_file_with_the_same': 'A file with the same name is replaced.',
|
|
4634
|
+
'wres.not_a_valid_url': 'not a valid URL',
|
|
4635
|
+
'wres.may_be_called': 'may be called',
|
|
4636
|
+
'wres.description': 'Description',
|
|
4637
|
+
'wres.delete_server': 'Delete server',
|
|
4638
|
+
'wres.remote_servers': 'Remote servers',
|
|
4639
|
+
'wres.network_access': 'network access',
|
|
4640
|
+
'wres.server': 'Server',
|
|
4641
|
+
'wres.url_now': 'URL now',
|
|
4642
|
+
'wres.network_access_2': 'Network access',
|
|
4643
|
+
'wres.default_credential': 'Default credential',
|
|
4644
|
+
'wres.used_by': 'Used by',
|
|
4645
|
+
'wres.nothing_yet': 'nothing yet',
|
|
4646
|
+
'wres.no_remote_servers_yet': 'No remote servers yet.',
|
|
4647
|
+
'wres.delete_credential': 'Delete credential',
|
|
4648
|
+
'wres.workspace_web_credentials': 'Workspace web credentials',
|
|
4649
|
+
'wres.authentication': 'Authentication',
|
|
4650
|
+
'wres.secret': 'Secret',
|
|
4651
|
+
'wres.valid_for': 'Valid for',
|
|
4652
|
+
'wres.overridden_by': 'Overridden by',
|
|
4653
|
+
'wres.none_yet': 'none yet',
|
|
4654
|
+
'wres.any_url': 'any URL',
|
|
4655
|
+
'wres.no_workspace_web_credentials_yet': 'No workspace web credentials yet.',
|
|
4656
|
+
'wres.save': 'Save',
|
|
4657
|
+
'wres.new_file': 'New file',
|
|
4658
|
+
'wres.upload': 'Upload',
|
|
4659
|
+
'wres.new_server': 'New server',
|
|
4660
|
+
'wres.new_credential': 'New credential',
|
|
4661
|
+
'wres.changed': 'Changed',
|
|
4662
|
+
'wres.files_to_upload': 'Files to upload',
|
|
4663
|
+
'wres.file_name': 'File name',
|
|
4664
|
+
'wres.static_id': 'Static id',
|
|
4665
|
+
'wres.base_url_this_installation': 'Base URL (this installation)',
|
|
4666
|
+
'wres.or_from_the_environment_variable': 'Or from the environment variable',
|
|
4667
|
+
'wres.default_web_credential': 'Default web credential',
|
|
4668
|
+
'wres.user_name_client_id_access': 'User name / client id / access key id',
|
|
4669
|
+
'wres.grant_type_oauth2': 'Grant type (oauth2)',
|
|
4670
|
+
'wres.oauth2_user_name_password_grant': 'OAuth2 user name (password grant)',
|
|
4671
|
+
'wres.header_name_header': 'Header name (header)',
|
|
4672
|
+
'wres.token_url_oauth2': 'Token URL (oauth2)',
|
|
4673
|
+
'wres.scope_oauth2_region_aws_sigv4': 'Scope (oauth2) / region (aws_sigv4)',
|
|
4674
|
+
'wres.valid_for_urls': 'Valid for URLs',
|
|
4675
|
+
'wres.letters_digits_and_e_g': 'Letters, digits, _, - and . (e.g. brand.css, common.js).',
|
|
4676
|
+
'wres.upper_case_letters_digits_and': 'Upper case letters, digits and _: REST data sources, catalogs and AI services name the server by it. Renaming it moves this workspace\'s sources and catalogs along.',
|
|
4677
|
+
'wres.crm_system': 'CRM system',
|
|
4678
|
+
'wres.https_crm_example_com_api': 'https://crm.example.com/api',
|
|
4679
|
+
'wres.no_trailing_slash_query_or': 'No trailing slash, query or fragment. Sources add their path after it.',
|
|
4680
|
+
'wres.e_g_crm_api': 'e.g. CRM_API',
|
|
4681
|
+
'wres.sources_on_this_server_that': 'Sources on this server that name no credential of their own use this one (an application\'s credential of that name, else the workspace\'s).',
|
|
4682
|
+
'wres.the_applications_of_the_workspace': 'The applications of the workspace use it by this name (an application\'s own credential of the same name wins).',
|
|
4683
|
+
'wres.x_api_key': 'X-API-Key',
|
|
4684
|
+
'wres.https_login_example_com_oauth': 'https://login.example.com/oauth/token',
|
|
4685
|
+
'wres.https_crm_example_com_api_2': 'https://crm.example.com/api/',
|
|
4686
|
+
'wres.comma_separated_url_prefixes_the': 'Comma separated URL prefixes: the credential is only ever sent to these. Recommended.',
|
|
4687
|
+
'wres.new_remote_server': 'New remote server',
|
|
4688
|
+
'wres.one_is_stored_encrypted_it': 'One is stored (encrypted): it is never shown; type a new one to replace it.',
|
|
4689
|
+
'wres.write_only_never_shown_again': 'Write-only: never shown again or exported.',
|
|
4690
|
+
'wres.new_web_credential': 'New web credential',
|
|
4691
|
+
'wres.no_such_file': 'No such file.',
|
|
4692
|
+
'wres.no_such_remote_server': 'No such remote server.',
|
|
4693
|
+
'wres.no_such_web_credential': 'No such web credential.',
|
|
4694
|
+
'wres.the_password_header_value_token': 'The password, header value, token, client secret or secret access key.',
|
|
4695
|
+
'wres.the_password_grant_the_oauth2': 'The password grant: the OAuth2 user\'s password.',
|
|
4696
|
+
'wres.the_refresh_token_grant_a': 'The refresh token grant: a refresh token to start with.',
|
|
4697
|
+
'wres.choose_one_or_more_files': 'Choose one or more files.',
|
|
4698
|
+
'wres.the_name_must_end_in': 'The name must end in a text type (.js, .css, .json, .txt, .csv, .md, .map) and use letters, digits, _, - and . only.',
|
|
4699
|
+
'wres.files': 'Files',
|
|
4700
|
+
'wres.servers': 'Servers',
|
|
4701
|
+
'wres.credentials': 'Credentials',
|
|
4702
|
+
'wres.app_builder': 'App Builder',
|
|
4703
|
+
'wres.workspace_utilities': 'Workspace utilities',
|
|
4704
|
+
'wres.the_name_is_upper_case': 'The name is upper case letters, digits and _, starting with a letter, e.g. CRM_API.',
|
|
4705
|
+
'wres.server_title': 'Remote server {id}',
|
|
4706
|
+
'wres.env_help': 'When the server\'s environment sets it, it wins over the base URL (one value per environment: development, test, production). Only {prefix}… names.',
|
|
4707
|
+
'wres.delete_server_confirm': 'Delete remote server {id}? Sources on it fail until a server gets its static id again.',
|
|
4708
|
+
'wres.servers_intro': 'Named base URLs of {workspace}: a REST data source, a REST source catalog or an AI service names a server and a path instead of a full URL, so moving from development to production changes one value here (or one environment variable), and every source on the server follows at once. The URL still passes every check a full URL does: the installation\'s allow-list, this workspace\'s {network} list and the address checks when the call is made.',
|
|
4709
|
+
'wres.credential_title': 'Web credential {name}',
|
|
4710
|
+
'wres.no_secret_key': 'The server has no `PGKILN_SECRET_KEY`: secrets can\'t be stored until it is set.',
|
|
4711
|
+
'wres.refresh_token': 'Refresh token',
|
|
4712
|
+
'wres.delete_credential_confirm': 'Delete web credential {name}? Applications that use it fail until one of that name exists.',
|
|
4713
|
+
'wres.files_title': 'Static workspace files',
|
|
4714
|
+
'wres.servers_title': 'Remote servers',
|
|
4715
|
+
'wres.credentials_title': 'Workspace web credentials',
|
|
4716
|
+
'wres.too_large': 'The file is larger than {size}.',
|
|
4717
|
+
'wres.file_exists': 'There is a file {name} already.',
|
|
4718
|
+
'wres.server_saved': 'Remote server {id} saved.',
|
|
4719
|
+
'wres.server_exists': 'This workspace has a remote server {id} already.',
|
|
4720
|
+
'wres.server_deleted': 'Remote server {id} deleted.',
|
|
4721
|
+
'wres.credential_saved': 'Web credential {name} saved.',
|
|
4722
|
+
'wres.credential_exists': 'This workspace has a web credential {name} already.',
|
|
4723
|
+
'wres.credential_deleted': 'Web credential {name} deleted.',
|
|
4724
|
+
'wres.files_intro': 'CSS, JavaScript, JSON, images and fonts that every application of {workspace} may use: an application loads one on every page with {tag} in Shared Components → Static application files → Every page loads (a page: Page → Appearance), and templates, HTML and links use {sub} for their URL. Each application serves them from its own address ({path}), never another workspace\'s. Up to {size} per file; no HTML. They travel with the workspace export.',
|
|
4725
|
+
'wres.type_help': 'basic: user name + password · header: an HTTP header with the secret (API key) · bearer: Authorization: Bearer <secret> · oauth2: client credentials, password or refresh token grant · aws_sigv4: an S3-compatible object store.',
|
|
4726
|
+
'wres.credentials_intro': 'Web credentials of {workspace} that its applications use by name in REST data sources, the Invoke API process, remote servers and object storage, so a key is entered once for the workspace. An application\'s own credential (Shared Components → Web credentials) with the same name wins. Secrets are encrypted with the server\'s key, never shown again and never exported.',
|
|
4727
|
+
'wres.edit_named': 'Edit {name}',
|
|
4728
|
+
'wres.delete_file_confirm': 'Delete {name}? Applications that load it leave it out.',
|
|
4729
|
+
'wres.delete_named': 'Delete {name}',
|
|
4730
|
+
// ------------------------------------------------------------ Template components (sprint 164)
|
|
4731
|
+
'tpl.custom_attributes': 'Custom attributes',
|
|
4732
|
+
'tpl.name': 'Name',
|
|
4733
|
+
'tpl.label': 'Label',
|
|
4734
|
+
'tpl.type': 'Type',
|
|
4735
|
+
'tpl.default': 'Default',
|
|
4736
|
+
'tpl.none_the_template_uses_the': 'None: the template uses the row\'s columns only.',
|
|
4737
|
+
'tpl.preview': 'Preview',
|
|
4738
|
+
'tpl.sample_rows': 'Sample rows',
|
|
4739
|
+
'tpl.one_name_value_per_line': 'One NAME=value per line; a blank line starts the next row. Attributes take their defaults; #LINK# is "#".',
|
|
4740
|
+
'tpl.as_multiple_in_the_wrapper': 'As "multiple" (in the wrapper)',
|
|
4741
|
+
'tpl.plug_in': 'Plug-in',
|
|
4742
|
+
'tpl.share_this_component_with_other': 'Share this component with other applications and installations as one JSON file; import it under Shared Components → Template components → Add.',
|
|
4743
|
+
'tpl.download_plug_in_file': 'Download plug-in file',
|
|
4744
|
+
'tpl.built_in_components': 'Built-in components',
|
|
4745
|
+
'tpl.every_application_can_use_these': 'Every application can use these in a Template component region or as a report column template. To change one, copy it into this application: the copy (same static id) takes its place.',
|
|
4746
|
+
'tpl.component': 'Component',
|
|
4747
|
+
'tpl.static_id': 'Static id',
|
|
4748
|
+
'tpl.actions': 'Actions',
|
|
4749
|
+
'tpl.copy_into_this_application': 'Copy into this application',
|
|
4750
|
+
'tpl.import_a_plug_in': 'Import a plug-in',
|
|
4751
|
+
'tpl.plug_in_file_json': 'Plug-in file (JSON)',
|
|
4752
|
+
'tpl.paste_the_contents_of_a': 'Paste the contents of a .plugin.json file, e.g. one from examples/plugins/. The template is checked before it is saved.',
|
|
4753
|
+
'tpl.replace_a_component_with_the': 'Replace a component with the same static id',
|
|
4754
|
+
'tpl.import_plug_in': 'Import plug-in',
|
|
4755
|
+
'tpl.choose_a_component_and_save': 'Choose a component and save to set its attributes.',
|
|
4756
|
+
'tpl.template_component_settings': 'Template component settings',
|
|
4757
|
+
'tpl.these_fields_write_the_region': 'These fields write the region\'s settings JSON above (other keys are kept).',
|
|
4758
|
+
'tpl.no_query_the_component_shows': 'No query: the component shows once, from its attributes.',
|
|
4759
|
+
'tpl.template_component': 'Template component',
|
|
4760
|
+
'tpl.shared_components_template_components': 'Shared Components → Template components',
|
|
4761
|
+
'tpl.display': 'Display',
|
|
4762
|
+
'tpl.at_most_rows': 'At most rows',
|
|
4763
|
+
'tpl.text_when_there_are_no': 'Text when there are no rows',
|
|
4764
|
+
'tpl.attributes': 'Attributes',
|
|
4765
|
+
'tpl.link_link': 'Link (#LINK#)',
|
|
4766
|
+
'tpl.each_instance_links_to_page': 'Each instance links to page',
|
|
4767
|
+
'tpl.the_template_puts_it_in': 'The template puts it in href="#LINK#"; item values get a checksum. Empty for users who may not open the page.',
|
|
4768
|
+
'tpl.set_items': 'Set items',
|
|
4769
|
+
'tpl.item_column_comma_separated': 'ITEM=#column#, comma separated.',
|
|
4770
|
+
'tpl.save_template_component_settings': 'Save template component settings',
|
|
4771
|
+
'tpl.not_in_the_query': 'not in the query',
|
|
4772
|
+
'tpl.column_templates': 'Column templates',
|
|
4773
|
+
'tpl.render_a_column_s_cells': 'Render a column\'s cells through a template component. Its template sees every column of the row as #NAME# (also hidden ones), and #LINK# is the report\'s link. Attributes: NAME=value per line, with #column# and &ITEM. substitutions.',
|
|
4774
|
+
'tpl.column': 'Column',
|
|
4775
|
+
'tpl.no_columns_yet': 'No columns yet.',
|
|
4776
|
+
'tpl.save_column_templates': 'Save column templates',
|
|
4777
|
+
'tpl.no_data_found': 'No data found',
|
|
4778
|
+
'tpl.p3_id_id': 'P3_ID=#id#',
|
|
4779
|
+
'tpl.template_component_settings_saved': 'Template component settings saved.',
|
|
4780
|
+
'tpl.column_templates_saved': 'Column templates saved.',
|
|
4781
|
+
'tpl.import_failed_the_plug_in': 'Import failed: the plug-in file is not valid JSON.',
|
|
4782
|
+
'tpl.tc_list': 'tc-list',
|
|
4783
|
+
'tpl.choose': '- choose -',
|
|
4784
|
+
'tpl.each_row_as_an_instance': 'Each row as an instance',
|
|
4785
|
+
'tpl.multiple_all_rows_in_the': 'Multiple: all rows in the wrapper',
|
|
4786
|
+
'tpl.no_link': '- no link -',
|
|
4787
|
+
'tpl.plain_value': '- plain value -',
|
|
4788
|
+
'tpl.builtin_help': 'The built-in ones (avatar, badge, comments, media list, metric card, timeline), and the application\'s own under {link}.',
|
|
4789
|
+
'tpl.aria_component': 'Template component of {column}',
|
|
4790
|
+
'tpl.aria_attrs': 'Attributes of {column}',
|
|
4791
|
+
'tpl.missing': '{name} (missing!)',
|
|
4792
|
+
'tpl.import_failed': 'Import failed: {error}',
|
|
4793
|
+
'tpl.imported': 'Template component {name} imported.',
|
|
4794
|
+
'tpl.copy_failed': 'Copy failed: {error}',
|
|
4795
|
+
'tpl.built_in': 'built in',
|
|
4796
|
+
// ------------------------------------------------------------ Vector providers (sprint 164)
|
|
4797
|
+
'vp.pgvector_is_not_installed_in': 'pgvector is not installed in this database.',
|
|
4798
|
+
'vp.vector_provider': 'Vector provider',
|
|
4799
|
+
'vp.ai_service': 'AI service',
|
|
4800
|
+
'vp.workspace_utilities_ai_services': 'Workspace utilities → AI services',
|
|
4801
|
+
'vp.model_in_the_database': 'Model in the database',
|
|
4802
|
+
'vp.function': 'Function',
|
|
4803
|
+
'vp.used_by': 'Used by',
|
|
4804
|
+
'vp.no_search_configuration_or_vector': 'No search configuration or vector column uses this provider yet.',
|
|
4805
|
+
'vp.delete_vector_provider': 'Delete vector provider',
|
|
4806
|
+
'vp.vector_providers': 'Vector providers',
|
|
4807
|
+
'vp.a_vector_provider_turns_text': 'A vector provider turns text into an embedding: a list of numbers whose distance says how close two texts are in meaning. Vector columns keep the embeddings of a table\'s rows (SQL Workshop › Table Properties › Add vector column), and search configurations of type vector or hybrid, and the Retrieve tools of AI agents, find rows by meaning. The texts go to the provider\'s AI service.',
|
|
4808
|
+
'vp.name': 'Name',
|
|
4809
|
+
'vp.type': 'Type',
|
|
4810
|
+
'vp.model_or_function': 'Model or function',
|
|
4811
|
+
'vp.dimensions': 'Dimensions',
|
|
4812
|
+
'vp.no_vector_providers_yet': 'No vector providers yet.',
|
|
4813
|
+
'vp.the_vector_providers_of_this': 'The vector providers of this workspace\'s applications (each application defines its own under Shared Components → Vector providers), and the vector columns they keep current.',
|
|
4814
|
+
'vp.application': 'Application',
|
|
4815
|
+
'vp.column': 'Column',
|
|
4816
|
+
'vp.provider': 'Provider',
|
|
4817
|
+
'vp.source_columns': 'Source columns',
|
|
4818
|
+
'vp.kept_by': 'Kept by',
|
|
4819
|
+
'vp.no_vector_columns_yet_sql': 'No vector columns yet (SQL Workshop › Table Properties › Add vector column).',
|
|
4820
|
+
'vp.test_embed_a_sample_text': 'Test: embed a sample text',
|
|
4821
|
+
'vp.add_vector_provider': 'Add vector provider',
|
|
4822
|
+
'vp.name_static_id': 'Name (static ID)',
|
|
4823
|
+
'vp.description': 'Description',
|
|
4824
|
+
'vp.embedding_model': 'Embedding model',
|
|
4825
|
+
'vp.texts_per_request': 'Texts per request',
|
|
4826
|
+
'vp.requests_per_minute': 'Requests per minute',
|
|
4827
|
+
'vp.engine': 'Engine',
|
|
4828
|
+
'vp.model': 'Model',
|
|
4829
|
+
'vp.e_g_doc_embeddings': 'e.g. DOC_EMBEDDINGS',
|
|
4830
|
+
'vp.upper_case_letters_digits_and': 'Upper case letters, digits and _. Search configurations name it; in SQL: meta.embed(text, \'DOC_EMBEDDINGS\') (function and database model providers).',
|
|
4831
|
+
'vp.e_g_text_embedding_3': 'e.g. text-embedding-3-small',
|
|
4832
|
+
'vp.exactly_as_the_provider_names': 'Exactly as the provider names it: text-embedding-3-small, gemini-embedding-001, nomic-embed-text, mxbai-embed-large …',
|
|
4833
|
+
'vp.when_the_server_embeds_queued': 'When the server embeds queued rows (vector columns).',
|
|
4834
|
+
'vp.at_most_this_many_background': 'At most this many background requests per minute (per server), under the provider\'s rate limit.',
|
|
4835
|
+
'vp.e_g_intfloat_e5_small': 'e.g. intfloat/e5-small-v2',
|
|
4836
|
+
'vp.a_model_the_engine_loads': 'A model the engine loads (the first call downloads it): intfloat/e5-small-v2 (384), Alibaba-NLP/gte-base-en-v1.5 (768), mixedbread-ai/mxbai-embed-large-v1 (1024) …',
|
|
4837
|
+
'vp.e_g_sales_embed': 'e.g. sales.embed',
|
|
4838
|
+
'vp.schema_name_of_a_function': 'schema.name of a function (text) returning vector, real[] or float8[]. meta.embed calls it as the role that runs the query (its grants apply): grant execute on it to the application\'s role.',
|
|
4839
|
+
'vp.ai_service_with_an_embedding': 'AI service with an embedding model',
|
|
4840
|
+
'vp.model_in_the_database_postgresml': 'Model in the database (PostgresML)',
|
|
4841
|
+
'vp.sql_or_pl_pgsql_function': 'SQL or PL/pgSQL function',
|
|
4842
|
+
'vp.postgresml_pgml_embed_model_text': 'PostgresML: pgml.embed(model, text)',
|
|
4843
|
+
'vp.save': 'Save',
|
|
4844
|
+
'vp.where_the_embeddings_come_from': 'Where the embeddings come from.',
|
|
4845
|
+
'vp.its_key_base_url_and': 'Its key, base URL and daily limits apply; the texts to embed go to its provider.',
|
|
4846
|
+
'vp.the_extension_that_runs_the': 'The extension that runs the model. Nothing leaves the database; grant usage on its schema (pgml) to the application\'s role.',
|
|
4847
|
+
'vp.vector_provider_saved': 'Vector provider saved.',
|
|
4848
|
+
'vp.the_pgvector_extension_is_installed': 'The pgvector extension is installed.',
|
|
4849
|
+
'vp.providers': 'Providers',
|
|
4850
|
+
'vp.vector_columns': 'Vector columns',
|
|
4851
|
+
'vp.app_builder': 'App Builder',
|
|
4852
|
+
'vp.shared_components': 'Shared Components',
|
|
4853
|
+
'vp.the_quick_brown_fox_jumps': 'The quick brown fox jumps over the lazy dog.',
|
|
4854
|
+
'vp.workspace_utilities': 'Workspace utilities',
|
|
4855
|
+
'vp.installed': 'pgvector {version} is installed (schema {schema}).',
|
|
4856
|
+
'vp.not_installed_detail': 'Vector providers can be defined, but vector columns, vector search and Retrieve tools need the extension.',
|
|
4857
|
+
'vp.create_extension': 'Create extension vector {version}',
|
|
4858
|
+
'vp.has_pgvector': 'The database server has pgvector {version}: {who} runs {sql} in this database.',
|
|
4859
|
+
'vp.a_superuser': 'a superuser',
|
|
4860
|
+
'vp.an_administrator': 'an administrator',
|
|
4861
|
+
'vp.no_package': 'The database server doesn\'t have the pgvector package: install it (for example {apt}, the {docker} Docker image, or your cloud provider\'s {vector} extension), then create the extension.',
|
|
4862
|
+
'vp.eg_1536': 'e.g. 1536',
|
|
4863
|
+
'vp.dimensions_help': 'The length of each vector: text-embedding-3-small 1536 (or fewer: OpenAI shortens them), text-embedding-3-large 3072, nomic-embed-text 768, gemini-embedding-001 3072. A vector column is vector(n) with this n; an HNSW index takes up to {max}.',
|
|
4864
|
+
'vp.no_service': 'This application may not use an OpenAI, Gemini or OpenAI-compatible AI service yet: an administrator adds one under {link} (Claude has no embeddings) and allows this application to use it.',
|
|
4865
|
+
'vp.no_pgml': 'PostgresML ({pgml}) is not installed in this database: install it on the database server, then {sql}. It runs Hugging Face models (ONNX among them) inside PostgreSQL.',
|
|
4866
|
+
'vp.used_config': 'Search configuration {link} ({type})',
|
|
4867
|
+
'vp.used_column': 'Vector column {link} ({mode})',
|
|
4868
|
+
'vp.set_by_trigger': 'set by a trigger',
|
|
4869
|
+
'vp.queued_server': 'queued for the server',
|
|
4870
|
+
'vp.delete_confirm': 'Delete vector provider {name}? Search configurations and vector columns that use it stop working.',
|
|
4871
|
+
'vp.whole_number': '{what} is a whole number.',
|
|
4872
|
+
'vp.f_dimensions': 'Dimensions',
|
|
4873
|
+
'vp.f_batch': 'Texts per request',
|
|
4874
|
+
'vp.f_per_minute': 'Requests per minute',
|
|
4875
|
+
'vp.gone': 'Vector provider {name} no longer exists.',
|
|
4876
|
+
'vp.exists': 'A vector provider {name} exists already.',
|
|
4877
|
+
'vp.deleted': 'Vector provider {name} deleted.',
|
|
4878
|
+
// ------------------------------------------------------------ AI assistant (sprint 164)
|
|
4879
|
+
'asst.workspace_utilities_ai_services': 'Workspace utilities → AI services',
|
|
4880
|
+
'asst.ai_assistant_settings': 'AI assistant settings',
|
|
4881
|
+
'asst.a_chat_with_an_ai': 'A chat with an AI service. What users type, the context rows and the tools\' results go to the service\'s provider (Claude, OpenAI, Gemini, or the OpenAI-compatible endpoint in its base URL). Context queries and SQL tools run as the application\'s database role; SQL tools are rolled back unless they may change data.',
|
|
4882
|
+
'asst.assistant': 'Assistant',
|
|
4883
|
+
'asst.ai_agent': 'AI agent',
|
|
4884
|
+
'asst.shared_components_ai_agents': 'Shared Components → AI Agents',
|
|
4885
|
+
'asst.ai_service': 'AI service',
|
|
4886
|
+
'asst.tool_rounds_per_question': 'Tool rounds per question',
|
|
4887
|
+
'asst.questions_per_conversation': 'Questions per conversation',
|
|
4888
|
+
'asst.system_prompt': 'System prompt',
|
|
4889
|
+
'asst.welcome_text': 'Welcome text',
|
|
4890
|
+
'asst.placeholder': 'Placeholder',
|
|
4891
|
+
'asst.error_message': 'Error message',
|
|
4892
|
+
'asst.also_for_users_who_are': 'Also for users who are not signed in (every question costs tokens)',
|
|
4893
|
+
'asst.context_and_tools': 'Context and tools',
|
|
4894
|
+
'asst.context_queries_json': 'Context queries (JSON)',
|
|
4895
|
+
'asst.tools_json': 'Tools (JSON)',
|
|
4896
|
+
'asst.save_ai_assistant_settings': 'Save AI assistant settings',
|
|
4897
|
+
'asst.ask_in_your_own_words': 'Ask in your own words (AI)',
|
|
4898
|
+
'asst.built_in_phrases': 'built-in phrases',
|
|
4899
|
+
'asst.also_for_users_who_are_2': 'Also for users who are not signed in',
|
|
4900
|
+
'asst.save': 'Save',
|
|
4901
|
+
'asst.the_service_s_message': 'the service\'s message',
|
|
4902
|
+
'asst.none_the_service_prompt_and': '- none: the service, prompt and tools below -',
|
|
4903
|
+
'asst.choose': '- choose -',
|
|
4904
|
+
'asst.off': '- off -',
|
|
4905
|
+
'asst.built_in_phrases_no_ai': 'Built-in phrases (no AI)',
|
|
4906
|
+
'asst.tools': 'Tools',
|
|
4907
|
+
'asst.context_queries': 'Context queries',
|
|
4908
|
+
'asst.settings_saved': 'Settings saved.',
|
|
4909
|
+
'asst.no_service': 'This application may not use any AI service yet: an administrator adds one under {link} and allows this application to use it.',
|
|
4910
|
+
'asst.who_the_assistant_is_and': 'Who the assistant is and what it may answer. `&ITEM.` is replaced by the item\'s value as delimited data (never the session id or passwords).',
|
|
4911
|
+
'asst.run_before_each_question_their': 'Run before each question; their rows go to the model as data. `[{"name": "policy", "sql": "select title, body from hr.policy where body @@ plainto_tsquery(:AI_PROMPT)", "max_rows": 5}]` (`:AI_PROMPT` is the question, `:APP_USER` and items as usual).',
|
|
4912
|
+
'asst.the_model_calls_them_when': 'The model calls them when it needs to. SQL: `{"name": "my_leave", "description": "…", "sql": "select … where status = :STATUS", "parameters": {"STATUS": {"type": "string", "enum": ["PENDING", "APPROVED"]}}}`; add `"writes": true` for a tool that changes data and `"authz": "SCHEME"` to offer it only to some users. REST: `{"name": "department", "type": "rest", "source": "DEPARTMENT", "description": "…", "parameters": {"dname": {"type": "string"}}}`. Parameter types: string, integer, number, boolean, date; `"optional": true` allows none.',
|
|
4913
|
+
'asst.agent_help': 'An agent of {link} sets the service, system prompt, reasoning effort, tools and steps; saving with an agent removes the region\'s own service, system prompt, tools and tool rounds.',
|
|
4914
|
+
'asst.no_rest_source': 'Tool "{tool}": there is no REST data source {source}.',
|
|
4915
|
+
'asst.no_authz': 'Tool "{tool}": there is no authorization scheme {scheme}.',
|
|
4916
|
+
'asst.no_agent': 'There is no AI agent {agent}.',
|
|
4917
|
+
'asst.filter_intro': 'Users type a question; it becomes the report\'s own settings (filters, highlights, sort, control break, totals, group by, pivot, chart, computed columns; only columns the report shows, only its operators), shown as chips they can edit, remove or undo. With an AI service the question and the column names go to the service\'s provider; without one ({builtin}) pgkiln reads common phrases itself, in English, Dutch and German.',
|
|
4918
|
+
// ------------------------------------------------------------ AI services (sprint 164)
|
|
4919
|
+
'aisv.service': 'Service',
|
|
4920
|
+
'aisv.api_key': 'API key',
|
|
4921
|
+
'aisv.when_utc': 'When (UTC)',
|
|
4922
|
+
'aisv.application': 'Application',
|
|
4923
|
+
'aisv.page': 'Page',
|
|
4924
|
+
'aisv.user': 'User',
|
|
4925
|
+
'aisv.model': 'Model',
|
|
4926
|
+
'aisv.source': 'Source',
|
|
4927
|
+
'aisv.input': 'Input',
|
|
4928
|
+
'aisv.output': 'Output',
|
|
4929
|
+
'aisv.status': 'Status',
|
|
4930
|
+
'aisv.no_ai_requests_yet': 'No AI requests yet.',
|
|
4931
|
+
'aisv.only_administrators_configure_ai_services': 'Only administrators configure AI services.',
|
|
4932
|
+
'aisv.ai_services': 'AI services',
|
|
4933
|
+
'aisv.generate_text_with_ai': 'Generate text with AI',
|
|
4934
|
+
'aisv.provider': 'Provider',
|
|
4935
|
+
'aisv.applications': 'Applications',
|
|
4936
|
+
'aisv.no_ai_services_yet': 'No AI services yet.',
|
|
4937
|
+
'aisv.requests': 'Requests',
|
|
4938
|
+
'aisv.input_tokens': 'Input tokens',
|
|
4939
|
+
'aisv.output_tokens': 'Output tokens',
|
|
4940
|
+
'aisv.not_ok': 'Not ok',
|
|
4941
|
+
'aisv.builder_tests': 'builder tests',
|
|
4942
|
+
'aisv.no_ai_requests_in_the': 'No AI requests in the last 30 days.',
|
|
4943
|
+
'aisv.tokens_model_duration_and_status': 'Tokens, model, duration and status of each call. Prompts and answers are never logged (an application\'s debug messages at level 9 show them).',
|
|
4944
|
+
'aisv.delete_service': 'Delete service',
|
|
4945
|
+
'aisv.instead_of_the_base_url': 'Instead of the base URL: a remote server\'s URL (Workspace utilities → Remote servers) plus a path, so moving the endpoint changes one value. The API key is sent there: choose a server whose workspace administrators you trust with it.',
|
|
4946
|
+
'aisv.save': 'Save',
|
|
4947
|
+
'aisv.sends_a_prompt_to_the': 'Sends a prompt to the service (counted in the usage log as a builder test).',
|
|
4948
|
+
'aisv.prompt': 'Prompt',
|
|
4949
|
+
'aisv.may_use': 'May use',
|
|
4950
|
+
'aisv.requests_per_day': 'Requests per day',
|
|
4951
|
+
'aisv.tokens_per_day': 'Tokens per day',
|
|
4952
|
+
'aisv.no_applications': 'No applications.',
|
|
4953
|
+
'aisv.save_access': 'Save access',
|
|
4954
|
+
'aisv.requests_today': 'Requests today',
|
|
4955
|
+
'aisv.tokens_today': 'Tokens today',
|
|
4956
|
+
'aisv.this_application_may_not_use': 'This application may not use any AI service yet.',
|
|
4957
|
+
'aisv.test': 'Test',
|
|
4958
|
+
'aisv.when': 'When',
|
|
4959
|
+
'aisv.name': 'Name',
|
|
4960
|
+
'aisv.description': 'Description',
|
|
4961
|
+
'aisv.effort_claude': 'Effort (Claude)',
|
|
4962
|
+
'aisv.maximum_output_tokens': 'Maximum output tokens',
|
|
4963
|
+
'aisv.time_limit_seconds': 'Time limit (seconds)',
|
|
4964
|
+
'aisv.base_url': 'Base URL',
|
|
4965
|
+
'aisv.refusal_fallbacks_claude': 'Refusal fallbacks (Claude)',
|
|
4966
|
+
'aisv.enabled': 'Enabled',
|
|
4967
|
+
'aisv.remove_the_stored_key_use': 'Remove the stored key (use the server default)',
|
|
4968
|
+
'aisv.remote_server': 'Remote server',
|
|
4969
|
+
'aisv.path': 'Path',
|
|
4970
|
+
'aisv.e_g_claude': 'e.g. CLAUDE',
|
|
4971
|
+
'aisv.upper_case_letters_digits_and': 'Upper case letters, digits and _. Processes refer to the service by this name.',
|
|
4972
|
+
'aisv.per_request_1_128000_a': 'Per request (1 – 128000); a process may ask for fewer.',
|
|
4973
|
+
'aisv.5_600_pages_wait_for': '5 – 600. Pages wait for the answer.',
|
|
4974
|
+
'aisv.empty_the_provider_s_own': 'empty: the provider\'s own API',
|
|
4975
|
+
'aisv.after_the_server_s_base': 'After the server\'s base URL, e.g. /v1; empty: the base URL itself.',
|
|
4976
|
+
'aisv.claude_anthropic': 'Claude (Anthropic)',
|
|
4977
|
+
'aisv.openai': 'OpenAI',
|
|
4978
|
+
'aisv.gemini_google_openai_compatible_endpoint': 'Gemini (Google, OpenAI-compatible endpoint)',
|
|
4979
|
+
'aisv.openai_compatible_ollama_vllm_azure': 'OpenAI-compatible (Ollama, vLLM, Azure OpenAI, a gateway)',
|
|
4980
|
+
'aisv.model_default': 'Model default',
|
|
4981
|
+
'aisv.none_the_base_url_above': 'none: the base URL above',
|
|
4982
|
+
'aisv.add_service': 'Add service',
|
|
4983
|
+
'aisv.not_found': 'Not found.',
|
|
4984
|
+
'aisv.the_service_now_calls_its': 'The service now calls its remote server: test it.',
|
|
4985
|
+
'aisv.the_service_calls_its_base': 'The service calls its base URL again.',
|
|
4986
|
+
'aisv.an_openai_compatible_service_needs': 'An OpenAI-compatible service needs a base URL or a remote server.',
|
|
4987
|
+
'aisv.the_test_failed': 'The test failed.',
|
|
4988
|
+
'aisv.prompts_and_the_item_values': 'Prompts, and the item values they contain, are sent to this provider. Gemini and OpenAI-compatible endpoints speak OpenAI\'s Chat Completions.',
|
|
4989
|
+
'aisv.how_deeply_claude_thinks_thinking': 'How deeply Claude thinks (thinking is always on for current Claude models): lower is faster and cheaper; high or more for hard tasks. Model default: medium for Claude Opus 5.5.',
|
|
4990
|
+
'aisv.when_claude_declines_a_request': 'When Claude declines a request for safety reasons, Anthropic re-runs it on its recommended fallback model. The usage log shows the model that answered.',
|
|
4991
|
+
'aisv.access_saved': 'Access saved.',
|
|
4992
|
+
'aisv.ai_service_added_allow_applications': 'AI service added. Allow applications to use it below, and test it.',
|
|
4993
|
+
'aisv.ai_service_deleted': 'AI service deleted.',
|
|
4994
|
+
'aisv.the_model_is_a_name': 'The model is a name like claude-opus-5-5 (letters, digits and . _ : / @ -).',
|
|
4995
|
+
'aisv.maximum_output_tokens_1_to': 'Maximum output tokens: 1 to 128000.',
|
|
4996
|
+
'aisv.time_limit_5_to_600': 'Time limit: 5 to 600 seconds.',
|
|
4997
|
+
'aisv.the_base_url_starts_with': 'The base URL starts with http:// or https://.',
|
|
4998
|
+
'aisv.an_openai_compatible_service_needs_2': 'An OpenAI-compatible service needs a base URL (e.g. http://localhost:11434/v1 for Ollama).',
|
|
4999
|
+
'aisv.the_name_is_upper_case': 'The name is upper case letters, digits and _ (e.g. CLAUDE).',
|
|
5000
|
+
'aisv.the_path_starts_with_without': 'The path starts with /, without spaces, e.g. /v1.',
|
|
5001
|
+
'aisv.no_such_remote_server': 'No such remote server.',
|
|
5002
|
+
'aisv.limits_are_whole_numbers_of': 'Limits are whole numbers of 0 or more (empty: no limit).',
|
|
5003
|
+
'aisv.services': 'Services',
|
|
5004
|
+
'aisv.usage_30_days': 'Usage (30 days)',
|
|
5005
|
+
'aisv.recent_requests': 'Recent requests',
|
|
5006
|
+
'aisv.settings': 'Settings',
|
|
5007
|
+
'aisv.app_builder': 'App Builder',
|
|
5008
|
+
'aisv.workspace_utilities': 'Workspace utilities',
|
|
5009
|
+
'aisv.activity': 'Activity',
|
|
5010
|
+
'aisv.ai_usage': 'AI usage',
|
|
5011
|
+
'aisv.the_server_has_no_pgkiln': 'The server has no `PGKILN_SECRET_KEY`: API keys can\'t be stored until it is set (the server\'s environment variables still work).',
|
|
5012
|
+
'aisv.model_help': 'Exactly as the provider names it, e.g. {model} (Claude) or the OpenAI model your account uses. pgkiln never changes it.',
|
|
5013
|
+
'aisv.intro': 'Large language models the applications of this installation may use (processes and dynamic actions {process}, and {fn} from SQL). Prompts, including the item values they contain, are sent to the chosen provider. Allow each application on the service\'s page.',
|
|
5014
|
+
'aisv.delete_confirm': 'Delete AI service {name}? Processes that use it fail until another service gets its name.',
|
|
5015
|
+
'aisv.test_prompt': 'Reply with one short sentence to confirm you can read this.',
|
|
5016
|
+
'aisv.apps_intro': 'Which applications may use this service, with optional limits per day (UTC). Empty limits: no limit. Requests over a limit fail with a message and are logged as {limited}.',
|
|
5017
|
+
'aisv.limited': 'limited',
|
|
5018
|
+
'aisv.aria_req': 'Requests per day for {app}',
|
|
5019
|
+
'aisv.aria_tok': 'Tokens per day for {app}',
|
|
5020
|
+
'aisv.answered_by': 'Answered by {model}: {input} input and {output} output tokens.',
|
|
5021
|
+
// ------------------------------------------------------------ REST source catalogs (sprint 164)
|
|
5022
|
+
'rcat.what_the_document_had_that': 'What the document had that the catalog doesn\'t use:',
|
|
5023
|
+
'rcat.openapi_3': 'OpenAPI 3',
|
|
5024
|
+
'rcat.swagger_2_0': 'Swagger 2.0',
|
|
5025
|
+
'rcat.file': 'File',
|
|
5026
|
+
'rcat.or_paste_it': 'Or paste it',
|
|
5027
|
+
'rcat.method': 'Method',
|
|
5028
|
+
'rcat.description': 'Description',
|
|
5029
|
+
'rcat.rest_source_catalogs': 'REST Source Catalogs',
|
|
5030
|
+
'rcat.catalog': 'Catalog',
|
|
5031
|
+
'rcat.base_url': 'Base URL',
|
|
5032
|
+
'rcat.services': 'Services',
|
|
5033
|
+
'rcat.from': 'From',
|
|
5034
|
+
'rcat.updated_utc': 'Updated (UTC)',
|
|
5035
|
+
'rcat.no_catalogs_yet_import_an': 'No catalogs yet: import an OpenAPI document or create one below.',
|
|
5036
|
+
'rcat.service': 'Service',
|
|
5037
|
+
'rcat.path': 'Path',
|
|
5038
|
+
'rcat.parameters': 'Parameters',
|
|
5039
|
+
'rcat.columns': 'Columns',
|
|
5040
|
+
'rcat.write_back': 'Write back',
|
|
5041
|
+
'rcat.no_services_yet': 'No services yet.',
|
|
5042
|
+
'rcat.delete_service': 'Delete service',
|
|
5043
|
+
'rcat.delete_catalog': 'Delete catalog',
|
|
5044
|
+
'rcat.web_credential': 'Web credential',
|
|
5045
|
+
'rcat.create': 'Create',
|
|
5046
|
+
'rcat.download': 'Download',
|
|
5047
|
+
'rcat.add_a_service': 'Add a service',
|
|
5048
|
+
'rcat.save': 'Save',
|
|
5049
|
+
'rcat.create_from_the_catalog': 'Create from the catalog',
|
|
5050
|
+
'rcat.updated': 'Updated',
|
|
5051
|
+
'rcat.or_read_it_from_a': 'Or read it from a URL',
|
|
5052
|
+
'rcat.name': 'Name',
|
|
5053
|
+
'rcat.row_selector': 'Row selector',
|
|
5054
|
+
'rcat.parameters_json': 'Parameters (JSON)',
|
|
5055
|
+
'rcat.columns_json': 'Columns (JSON)',
|
|
5056
|
+
'rcat.headers_json': 'Headers (JSON)',
|
|
5057
|
+
'rcat.body_template': 'Body template',
|
|
5058
|
+
'rcat.key_columns': 'Key columns',
|
|
5059
|
+
'rcat.operations_json': 'Operations (JSON)',
|
|
5060
|
+
'rcat.remote_server': 'Remote server',
|
|
5061
|
+
'rcat.api_version': 'API version',
|
|
5062
|
+
'rcat.https_api_example_com_openapi': 'https://api.example.com/openapi.json',
|
|
5063
|
+
'rcat.the_server_reads_it_the': 'The server reads it; the host must be on its allow-list (PGKILN_REST_ALLOWED_HOSTS).',
|
|
5064
|
+
'rcat.from_the_document': 'from the document',
|
|
5065
|
+
'rcat.instead_of_the_document_s': 'Instead of the document\'s server, e.g. https://test.api.example.com/v1.',
|
|
5066
|
+
'rcat.the_document_s_title': 'the document\'s title',
|
|
5067
|
+
'rcat.the_data_source_s_name': 'The data source\'s name when an application makes one from this service.',
|
|
5068
|
+
'rcat.pets_pet_id': '/pets/{pet_id}',
|
|
5069
|
+
'rcat.after_the_catalog_s_base': 'After the catalog\'s base URL; {name} is a path parameter.',
|
|
5070
|
+
'rcat.where_the_rows_are_in': 'Where the rows are in the response; empty: the response.',
|
|
5071
|
+
'rcat.e_g_weather_service': 'e.g. Weather service',
|
|
5072
|
+
'rcat.https_api_example_com_v1': 'https://api.example.com/v1',
|
|
5073
|
+
'rcat.e_g_a_test_system': 'e.g. a test system\'s URL (optional on a remote server). Data sources made earlier keep the URL they were made with.',
|
|
5074
|
+
'rcat.e_g_crm': 'e.g. CRM',
|
|
5075
|
+
'rcat.the_static_id_of_a': 'The static id of a remote server of this workspace (Workspace utilities → Remote servers): data sources made from the catalog then name the server and the service\'s path, so they move with it.',
|
|
5076
|
+
'rcat.the_service_s_name': 'the service\'s name',
|
|
5077
|
+
'rcat.replace_the_services': 'Replace the services',
|
|
5078
|
+
'rcat.import': 'Import',
|
|
5079
|
+
'rcat.this_application_has_a_rest': 'This application has a REST data source with that name already: choose another name.',
|
|
5080
|
+
'rcat.catalog_created_add_its_services': 'Catalog created: add its services.',
|
|
5081
|
+
'rcat.catalog_saved': 'Catalog saved.',
|
|
5082
|
+
'rcat.service_deleted': 'Service deleted.',
|
|
5083
|
+
'rcat.the_file_is_larger_than': 'The file is larger than 5 MB.',
|
|
5084
|
+
'rcat.choose_a_file_paste_a': 'Choose a file, paste a document or give its URL.',
|
|
5085
|
+
'rcat.the_url_starts_with_http': 'The URL starts with http:// or https://.',
|
|
5086
|
+
'rcat.choose_a_service_of_one': 'Choose a service of one of this workspace\'s catalogs.',
|
|
5087
|
+
'rcat.the_name_is_upper_case': 'The name is upper case letters, digits and _, starting with a letter, e.g. COUNTRIES.',
|
|
5088
|
+
'rcat.catalogs': 'Catalogs',
|
|
5089
|
+
'rcat.import_a_catalog': 'Import a catalog',
|
|
5090
|
+
'rcat.create_a_catalog_by_hand': 'Create a catalog by hand',
|
|
5091
|
+
'rcat.new_service': 'New service',
|
|
5092
|
+
'rcat.replace_from_a_document': 'Replace from a document',
|
|
5093
|
+
'rcat.from_a_rest_source_catalog': 'From a REST source catalog',
|
|
5094
|
+
'rcat.app_builder': 'App Builder',
|
|
5095
|
+
'rcat.workspace_utilities': 'Workspace utilities',
|
|
5096
|
+
'rcat.doc_intro': 'An {openapi} or {swagger} document in JSON (e.g. {file}), or a catalog file downloaded from pgkiln.',
|
|
5097
|
+
'rcat.doc_replacing': 'The catalog\'s services are replaced by the document\'s; data sources made from it earlier stay as they are.',
|
|
5098
|
+
'rcat.url_answered': 'The URL answered HTTP {status}.',
|
|
5099
|
+
'rcat.headers_help': 'Extra request headers, not secrets: an application\'s web credential signs in.',
|
|
5100
|
+
'rcat.unusable': 'The catalog can\'t be used as it is: {problems}',
|
|
5101
|
+
'rcat.and_more': '(and {n} more)',
|
|
5102
|
+
'rcat.imported': 'Catalog {name} imported with {n} service(s).',
|
|
5103
|
+
'rcat.import_failed': 'Import failed: {error}',
|
|
5104
|
+
'rcat.on_server': 'On remote server {server}',
|
|
5105
|
+
'rcat.from_openapi': 'from an OpenAPI document',
|
|
5106
|
+
'rcat.from_openapi_version': 'from an OpenAPI document (version {version})',
|
|
5107
|
+
'rcat.updated_when': 'updated {when} UTC',
|
|
5108
|
+
'rcat.add': 'Add',
|
|
5109
|
+
'rcat.service_title': 'Service {name}',
|
|
5110
|
+
'rcat.url': 'URL:',
|
|
5111
|
+
'rcat.delete_service_confirm': 'Delete the service {name}?',
|
|
5112
|
+
'rcat.delete_catalog_confirm': 'Delete the catalog {name} and its services? Data sources made from it stay.',
|
|
5113
|
+
'rcat.no_server': 'Catalog saved. This workspace has no remote server {server} yet: add it under Workspace utilities → Remote servers.',
|
|
5114
|
+
'rcat.replaced': 'The services of {name} were replaced: {n} service(s).',
|
|
5115
|
+
'rcat.deleted': 'Catalog {name} deleted.',
|
|
5116
|
+
'rcat.service_saved': 'Service {name} saved.',
|
|
5117
|
+
'rcat.no_credential': 'This application has no web credential {name} (nor does its workspace).',
|
|
5118
|
+
'rcat.copy_of': 'A copy of a service of this workspace\'s {link}: its URL, parameters, columns and write-back operations.',
|
|
5119
|
+
'rcat.catalogs_link': 'catalogs',
|
|
5120
|
+
// ------------------------------------------------------------ Blueprints (sprint 164)
|
|
5121
|
+
'bp.review': 'Review',
|
|
5122
|
+
'bp.describe_the_application': 'Describe the application',
|
|
5123
|
+
'bp.draft_a_blueprint': 'Draft a blueprint',
|
|
5124
|
+
'bp.sql_workshop_ai': 'SQL Workshop → AI',
|
|
5125
|
+
'bp.name': 'Name',
|
|
5126
|
+
'bp.save': 'Save',
|
|
5127
|
+
'bp.this_is_what_the_blueprint': 'This is what the blueprint creates. Check it; go back to change it, or create the application.',
|
|
5128
|
+
'bp.alias': 'Alias',
|
|
5129
|
+
'bp.schema': 'Schema',
|
|
5130
|
+
'bp.sign_in': 'Sign-in',
|
|
5131
|
+
'bp.table': 'Table',
|
|
5132
|
+
'bp.columns': 'Columns',
|
|
5133
|
+
'bp.sample_rows': 'Sample rows',
|
|
5134
|
+
'bp.the_sql': 'The SQL',
|
|
5135
|
+
'bp.a_dashboard_with_charts_per': 'A dashboard with charts per table',
|
|
5136
|
+
'bp.menu_home_and_the_pages': 'Menu: Home and the pages\' own entries.',
|
|
5137
|
+
'bp.first_user_admin_role': 'First user (admin role)',
|
|
5138
|
+
'bp.password_for_a_new_account': 'Password (for a new account)',
|
|
5139
|
+
'bp.back_to_the_editor': 'Back to the editor',
|
|
5140
|
+
'bp.the_blueprint_can_t_be': 'The blueprint can\'t be created yet:',
|
|
5141
|
+
'bp.blueprints': 'Blueprints',
|
|
5142
|
+
'bp.blueprint': 'Blueprint',
|
|
5143
|
+
'bp.application_created': 'Application created',
|
|
5144
|
+
'bp.changed': 'Changed',
|
|
5145
|
+
'bp.delete': 'Delete',
|
|
5146
|
+
'bp.no_saved_blueprints_yet': 'No saved blueprints yet.',
|
|
5147
|
+
'bp.a_blueprint_of_an_application': 'A blueprint of an application of this workspace: the tables its pages use, its pages and its menu, to review and change in the editor (for a copy, a new version or a test system). Nothing is created until you confirm the review.',
|
|
5148
|
+
'bp.application': 'Application',
|
|
5149
|
+
'bp.sample_rows_up_to_20': 'Sample rows: up to 20 per table',
|
|
5150
|
+
'bp.the_rows_are_copied_into': 'The rows are copied into the blueprint as they are: leave this off for personal or confidential data.',
|
|
5151
|
+
'bp.drafted_by_ai_review_it': 'Drafted by AI: review it before you create anything.',
|
|
5152
|
+
'bp.create_the_application': 'Create the application',
|
|
5153
|
+
'bp.new_blueprint': 'New blueprint',
|
|
5154
|
+
'bp.create_a_blueprint': 'Create a blueprint',
|
|
5155
|
+
'bp.e_g_track_projects_with': 'e.g. Track projects with tasks and due dates, and the hours people spend on them',
|
|
5156
|
+
'bp.projects': 'Projects',
|
|
5157
|
+
'bp.blueprint_deleted_applications_created_from': 'Blueprint deleted (applications created from it stay).',
|
|
5158
|
+
'bp.there_is_no_such_blueprint': 'There is no such blueprint.',
|
|
5159
|
+
'bp.the_app_builder_has_no': 'The App Builder has no AI service yet.',
|
|
5160
|
+
'bp.describe_the_application_2': 'Describe the application.',
|
|
5161
|
+
'bp.draft_with_ai': 'Draft with AI',
|
|
5162
|
+
'bp.tables': 'Tables',
|
|
5163
|
+
'bp.pages': 'Pages',
|
|
5164
|
+
'bp.from_an_application': 'From an application',
|
|
5165
|
+
'bp.app_builder': 'App Builder',
|
|
5166
|
+
'bp.create': 'Create',
|
|
5167
|
+
'bp.too_long': 'The blueprint is too long (at most {n} characters).',
|
|
5168
|
+
'bp.bad_json': 'Not valid JSON: {error}',
|
|
5169
|
+
'bp.title': 'Blueprint: {name}',
|
|
5170
|
+
'bp.intro': 'A blueprint describes an application: its tables (every table gets an {id}; {references} makes a foreign key), pages ({pages}), menu and sample rows. {review} shows what it will create; nothing is created before you confirm it there.',
|
|
5171
|
+
'bp.no_service': 'The App Builder has no AI service: an administrator chooses one under {link}. You can write the blueprint yourself.',
|
|
5172
|
+
'bp.db_role': '(database role {role})',
|
|
5173
|
+
'bp.alias_taken': 'An application with the alias {alias} already exists: change "alias" and "schema" in the blueprint.',
|
|
5174
|
+
'bp.alias_taken_short': 'An application with the alias {alias} already exists.',
|
|
5175
|
+
'bp.review_title': 'Review',
|
|
5176
|
+
'bp.list_intro': 'Describe an application as a blueprint (tables, pages, menu, sample rows), review it and create it.',
|
|
5177
|
+
'bp.saved': 'Blueprint {name} saved.',
|
|
5178
|
+
'bp.created': 'Application {alias} created from the blueprint: {tables} table(s), {rows} sample row(s).',
|
|
5179
|
+
'bp.admin_role': 'The existing account {user} got the admin role.',
|
|
5180
|
+
'bp.not_created': 'No application was created: {error}',
|
|
5181
|
+
// ------------------------------------------------------------ JSON sources (sprint 164)
|
|
5182
|
+
'jsrc.a_column_per_path_in': 'A column per path in the document (keys separated by dots, e.g. `address.city`). A value that doesn\'t read as the type shows empty. Saving a row writes only the paths whose values changed: keys this list doesn\'t name stay in the document. Clear a name to remove a column.',
|
|
5183
|
+
'jsrc.column': 'Column',
|
|
5184
|
+
'jsrc.path': 'Path',
|
|
5185
|
+
'jsrc.type': 'Type',
|
|
5186
|
+
'jsrc.read_only': 'Read only',
|
|
5187
|
+
'jsrc.json_source': 'JSON source',
|
|
5188
|
+
'jsrc.table_and_jsonb_column': 'Table and jsonb column',
|
|
5189
|
+
'jsrc.a_column_of_a_table': 'A column of a table, or the document column of a table of documents. The table needs a primary key.',
|
|
5190
|
+
'jsrc.the_view_also_adds_and': 'The view also adds and deletes rows of the table',
|
|
5191
|
+
'jsrc.for_a_table_of_documents': 'For a table of documents: an insert into the view adds a row, a delete removes it. Off: the view only changes the documents of existing rows.',
|
|
5192
|
+
'jsrc.columns': 'Columns',
|
|
5193
|
+
'jsrc.remove_this_array': 'Remove this array',
|
|
5194
|
+
'jsrc.add_an_array': 'Add an array',
|
|
5195
|
+
'jsrc.add_the_array_then_propose': 'Add the array, then Propose from the data fills its columns (or type them after saving).',
|
|
5196
|
+
'jsrc.json_sources': 'JSON sources',
|
|
5197
|
+
'jsrc.a_json_source_describes_a': 'A JSON source describes a jsonb column: a column per path in its documents, and arrays of objects as rows of their own. pgkiln makes updatable views from it, so forms, reports, interactive grids, REST and MCP read and write the documents like tables. Saving a row changes only the paths it changed: keys the source doesn\'t know about stay. For a table with its child tables as one document, see SQL Workshop › Table Properties › Document view.',
|
|
5198
|
+
'jsrc.name': 'Name',
|
|
5199
|
+
'jsrc.views': 'Views',
|
|
5200
|
+
'jsrc.not_made': 'not made',
|
|
5201
|
+
'jsrc.no_json_sources_yet': 'No JSON sources yet.',
|
|
5202
|
+
'jsrc.delete_json_source': 'Delete JSON source',
|
|
5203
|
+
'jsrc.proposed_from_up_to_200': 'Proposed from up to 200 documents: check the names and types, then save.',
|
|
5204
|
+
'jsrc.propose_from_the_data': 'Propose from the data',
|
|
5205
|
+
'jsrc.add_json_source': 'Add JSON source',
|
|
5206
|
+
'jsrc.open_in_the_sql_worksheet': 'Open in the SQL Worksheet',
|
|
5207
|
+
'jsrc.create_page': 'Create page',
|
|
5208
|
+
'jsrc.the_element_itself': '(the element itself)',
|
|
5209
|
+
'jsrc.name_static_id': 'Name (static ID)',
|
|
5210
|
+
'jsrc.description': 'Description',
|
|
5211
|
+
'jsrc.view': 'View',
|
|
5212
|
+
'jsrc.page_number': 'Page number',
|
|
5213
|
+
'jsrc.title': 'Title',
|
|
5214
|
+
'jsrc.e_g_emp_profile': 'e.g. EMP_PROFILE',
|
|
5215
|
+
'jsrc.upper_case_letters_digits_and': 'Upper case letters, digits and _.',
|
|
5216
|
+
'jsrc.e_g_emp_profile_2': 'e.g. emp_profile',
|
|
5217
|
+
'jsrc.made_in_the_table_s': 'Made in the table\'s schema. Regions, REST and MCP use it like a table.',
|
|
5218
|
+
'jsrc.the_array_in_the_document': 'The array in the document, e.g. skills.',
|
|
5219
|
+
'jsrc.e_g_skills': 'e.g. skills',
|
|
5220
|
+
'jsrc.e_g_emp_profile_skills': 'e.g. emp_profile_skills',
|
|
5221
|
+
'jsrc.save': 'Save',
|
|
5222
|
+
'jsrc.the_views_are_not_made': 'The views are not made yet.',
|
|
5223
|
+
'jsrc.make_the_views_again': 'Make the views again',
|
|
5224
|
+
'jsrc.create_views': 'Create views',
|
|
5225
|
+
'jsrc.check_the_statements_then_run': 'Check the statements, then run them as a script.',
|
|
5226
|
+
'jsrc.json_source_saved': 'JSON source saved.',
|
|
5227
|
+
'jsrc.the_page_number_is_a': 'The page number is a whole number from 1.',
|
|
5228
|
+
'jsrc.choose_a_table_and_its': 'Choose a table and its json or jsonb column.',
|
|
5229
|
+
'jsrc.create_page_needs_a_table': 'Create page needs a table with a one-column key; use the views in regions of your own.',
|
|
5230
|
+
'jsrc.sources': 'Sources',
|
|
5231
|
+
'jsrc.app_builder': 'App Builder',
|
|
5232
|
+
'jsrc.shared_components': 'Shared Components',
|
|
5233
|
+
'jsrc.aria_name': 'Column {n}: name',
|
|
5234
|
+
'jsrc.aria_path': 'Column {n}: path',
|
|
5235
|
+
'jsrc.aria_type': 'Column {n}: type',
|
|
5236
|
+
'jsrc.aria_readonly': 'Column {n}: read only',
|
|
5237
|
+
'jsrc.no_json_table': '(no table with a json or jsonb column)',
|
|
5238
|
+
'jsrc.array_view_help': 'One row per element: the table\'s key, {rowkey} (the element\'s key) and {position} (1, 2 …), then these columns. Use it as a detail grid.',
|
|
5239
|
+
'jsrc.page_exists': 'Page {n} exists already.',
|
|
5240
|
+
'jsrc.form_on': 'A form on {view}. Open it with the key in the URL ({item}), e.g. from a report\'s link.',
|
|
5241
|
+
'jsrc.form_on_grid': 'A form on {view} with a detail grid for {arrays}. Open it with the key in the URL ({item}), e.g. from a report\'s link.',
|
|
5242
|
+
'jsrc.form_on_grids': 'A form on {view} with detail grids for {arrays}. Open it with the key in the URL ({item}), e.g. from a report\'s link.',
|
|
5243
|
+
'jsrc.delete_confirm': 'Delete JSON source {name}? Its views stay in the database (drop them in the SQL Workshop).',
|
|
5244
|
+
'jsrc.view_taken': 'The view {view} belongs to JSON source {source}.',
|
|
5245
|
+
'jsrc.key_changed': 'The primary key of {table} changed: save the source again.',
|
|
5246
|
+
'jsrc.nothing_changed': 'Nothing was changed: {error}',
|
|
5247
|
+
'jsrc.views_made': 'The views of {name} are made: {views}.',
|
|
5248
|
+
'jsrc.page_made': 'Page {n} made: a form on {view}.',
|
|
5249
|
+
'jsrc.page_made_grids': 'Page {n} made: a form on {view} with detail grids.',
|
|
5250
|
+
// ------------------------------------------------------------ REST API (PostgREST, OAuth clients) (sprint 164)
|
|
5251
|
+
'apip.for_development_and_trusted_scripts': 'For development and trusted scripts: the token acts as the account until it expires. Roles are read at each request; deactivating the account or revoking its access stops the token at once (`meta.api_check`). To invalidate all tokens, change `API_JWT_SECRET`.',
|
|
5252
|
+
'apip.roles': 'Roles',
|
|
5253
|
+
'apip.create_client': 'Create client',
|
|
5254
|
+
'apip.client_id': 'Client ID',
|
|
5255
|
+
'apip.client_secret': 'Client secret',
|
|
5256
|
+
'apip.client': 'Client',
|
|
5257
|
+
'apip.token': 'Token',
|
|
5258
|
+
'apip.secret_changed': 'Secret changed',
|
|
5259
|
+
'apip.last_used': 'Last used',
|
|
5260
|
+
'apip.actions': 'Actions',
|
|
5261
|
+
'apip.save': 'Save',
|
|
5262
|
+
'apip.no_clients_yet': 'No clients yet.',
|
|
5263
|
+
'apip.not_reachable': 'not reachable',
|
|
5264
|
+
'apip.users_create_their_own_tokens': 'Users create their own tokens',
|
|
5265
|
+
'apip.my_account': 'My account',
|
|
5266
|
+
'apip.issue_token': 'Issue token',
|
|
5267
|
+
'apip.path': 'Path',
|
|
5268
|
+
'apip.kind': 'Kind',
|
|
5269
|
+
'apip.try_it': 'Try it',
|
|
5270
|
+
'apip.new_client': 'New client',
|
|
5271
|
+
'apip.comma_separated_or_pick_below': 'comma separated, or pick below',
|
|
5272
|
+
'apip.no_roles': 'no roles',
|
|
5273
|
+
'apip.keep_the_old_secret': 'Keep the old secret',
|
|
5274
|
+
'apip.status': 'Status',
|
|
5275
|
+
'apip.methods': 'Methods',
|
|
5276
|
+
'apip.name': 'Name',
|
|
5277
|
+
'apip.token_lifetime_minutes': 'Token lifetime (minutes)',
|
|
5278
|
+
'apip.description': 'Description',
|
|
5279
|
+
'apip.api_database_role': 'API database role',
|
|
5280
|
+
'apip.account': 'Account',
|
|
5281
|
+
'apip.valid_for_hours': 'Valid for (hours)',
|
|
5282
|
+
'apip.e_g_payroll_sync': 'e.g. payroll-sync',
|
|
5283
|
+
'apip.lower_case_letters_digits': 'Lower case letters, digits, . _ -',
|
|
5284
|
+
'apip.5_to_1440': '5 to 1440.',
|
|
5285
|
+
'apip.who_uses_it': 'who uses it',
|
|
5286
|
+
'apip.e_g_myapp_api': 'e.g. myapp_api',
|
|
5287
|
+
'apip.grant_it_only_the_api': 'Grant it only the api schema’s views and functions, and grant it to pgkiln_authenticator. Empty: tokens work only for the REST modules pgkiln serves (Shared Components → REST modules).',
|
|
5288
|
+
'apip.revoke': 'Revoke',
|
|
5289
|
+
'apip.reactivate': 'Reactivate',
|
|
5290
|
+
'apip.problem': 'Problem:',
|
|
5291
|
+
'apip.check_the_name_lower_case': 'Check the name (lower case letters, digits, . _ -) and the token lifetime (5–1440 minutes).',
|
|
5292
|
+
'apip.setup': 'Setup',
|
|
5293
|
+
'apip.issue_a_token': 'Issue a token',
|
|
5294
|
+
'apip.endpoints': 'Endpoints',
|
|
5295
|
+
'apip.app_builder': 'App Builder',
|
|
5296
|
+
'apip.rest_api': 'REST API',
|
|
5297
|
+
'apip.oauth_intro': 'For systems that call the API (like ORDS\'s {ords}): a client exchanges its id and secret for an access token at {url} ({grant}) and acts as {client} with its roles, read at every request.',
|
|
5298
|
+
'apip.new_secret_for': 'New secret for {name}',
|
|
5299
|
+
'apip.client_created': 'Client {name} created',
|
|
5300
|
+
'apip.copy_now': 'Copy the secret now: it is shown only once.',
|
|
5301
|
+
'apip.grace': 'The previous secret keeps working for {n} hours.',
|
|
5302
|
+
'apip.aria_roles': 'Roles of {name}',
|
|
5303
|
+
'apip.add': 'Add',
|
|
5304
|
+
'apip.minutes': '{n} min',
|
|
5305
|
+
'apip.old_valid_until': 'old secret valid until {when}',
|
|
5306
|
+
'apip.never': 'never',
|
|
5307
|
+
'apip.new_secret': 'New secret',
|
|
5308
|
+
'apip.old_24h': 'old valid 24 h',
|
|
5309
|
+
'apip.old_7d': 'old valid 7 days',
|
|
5310
|
+
'apip.old_now': 'old invalid now',
|
|
5311
|
+
'apip.delete': 'Delete',
|
|
5312
|
+
'apip.ok': 'OK:',
|
|
5313
|
+
'apip.intro': 'PostgREST runs next to pgkiln and serves the {schema} schema over HTTP. Requests carry a JWT whose {role} claim is this application\'s API role; row level security uses the same {user} and {has} as the web pages.',
|
|
5314
|
+
'apip.at': 'PostgREST at {url}:',
|
|
5315
|
+
'apip.dedicated': '{role} is a dedicated role',
|
|
5316
|
+
'apip.no_role': 'No API role: tokens are for the REST modules pgkiln serves only',
|
|
5317
|
+
'apip.may_switch': 'pgkiln_authenticator may switch to {role}',
|
|
5318
|
+
'apip.run_grant': '{run} {sql}',
|
|
5319
|
+
'apip.run': 'run',
|
|
5320
|
+
'apip.self_help': 'On {account}, signed-in users create a token that acts as them. A user the application requires two-factor sign-in of gives a second step first (if their last one is older than 15 minutes).',
|
|
5321
|
+
'apip.methods_for': 'Methods for {role}',
|
|
5322
|
+
'apip.none': 'none',
|
|
5323
|
+
'apip.nothing_yet': 'Nothing in the {schema} schema yet. Create views and functions there and grant them to the API role.',
|
|
5324
|
+
'apip.nothing_yet_no_role': 'Nothing in the {schema} schema yet, or no API role set. Create views and functions there and grant them to the API role.',
|
|
5325
|
+
'apip.reload': 'After schema changes run {sql} so PostgREST picks them up. OpenAPI description: {link}.',
|
|
5326
|
+
'apip.roles_saved': 'Roles of {name} saved.',
|
|
5327
|
+
// ------------------------------------------------------------ AI agents and tools (sprint 164)
|
|
5328
|
+
'agt.this_application_may_not_use': 'This application may not use any AI service yet: an administrator adds one under Workspace utilities → AI services and allows this application to use it.',
|
|
5329
|
+
'agt.agent': 'Agent',
|
|
5330
|
+
'agt.tools': 'Tools',
|
|
5331
|
+
'agt.the_agent_acts_only_through': 'The agent acts only through the tools you tick.',
|
|
5332
|
+
'agt.add_one': 'add one',
|
|
5333
|
+
'agt.used_by': 'Used by',
|
|
5334
|
+
'agt.no_ai_assistant_region_uses': 'No AI assistant region uses this agent yet (Page Designer → an AI assistant region → AI agent).',
|
|
5335
|
+
'agt.delete_agent': 'Delete agent',
|
|
5336
|
+
'agt.tool': 'Tool',
|
|
5337
|
+
'agt.no_agent_uses_this_tool': 'No agent uses this tool yet.',
|
|
5338
|
+
'agt.delete_tool': 'Delete tool',
|
|
5339
|
+
'agt.every_tool_call_of_the': 'Every tool call of the application\'s AI assistants and agents, with the arguments the model gave (kept 30 days).',
|
|
5340
|
+
'agt.when_utc': 'When (UTC)',
|
|
5341
|
+
'agt.page': 'Page',
|
|
5342
|
+
'agt.user': 'User',
|
|
5343
|
+
'agt.arguments': 'Arguments',
|
|
5344
|
+
'agt.status': 'Status',
|
|
5345
|
+
'agt.no_tool_calls_yet': 'No tool calls yet.',
|
|
5346
|
+
'agt.ai_agents': 'AI Agents',
|
|
5347
|
+
'agt.ai_usage': 'AI usage',
|
|
5348
|
+
'agt.ai_service': 'AI service',
|
|
5349
|
+
'agt.authorization': 'Authorization',
|
|
5350
|
+
'agt.no_ai_agents_yet': 'No AI agents yet.',
|
|
5351
|
+
'agt.type': 'Type',
|
|
5352
|
+
'agt.no_ai_tools_yet': 'No AI tools yet.',
|
|
5353
|
+
'agt.add_agent': 'Add agent',
|
|
5354
|
+
'agt.add_tool': 'Add tool',
|
|
5355
|
+
'agt.when': 'When',
|
|
5356
|
+
'agt.authorization_scheme': 'Authorization scheme',
|
|
5357
|
+
'agt.name': 'Name',
|
|
5358
|
+
'agt.description': 'Description',
|
|
5359
|
+
'agt.reasoning_effort': 'Reasoning effort',
|
|
5360
|
+
'agt.maximum_steps': 'Maximum steps',
|
|
5361
|
+
'agt.maximum_output_tokens': 'Maximum output tokens',
|
|
5362
|
+
'agt.system_prompt': 'System prompt',
|
|
5363
|
+
'agt.sql_query_sql': 'SQL query (SQL)',
|
|
5364
|
+
'agt.function_pl_pgsql': 'Function (PL/pgSQL)',
|
|
5365
|
+
'agt.rest_data_source_rest': 'REST data source (REST)',
|
|
5366
|
+
'agt.action_javascript': 'Action (JavaScript)',
|
|
5367
|
+
'agt.pages_navigate': 'Pages (Navigate)',
|
|
5368
|
+
'agt.search_configuration_retrieve': 'Search configuration (Retrieve)',
|
|
5369
|
+
'agt.parameters_json_not_for_navigate': 'Parameters (JSON; not for Navigate or Retrieve)',
|
|
5370
|
+
'agt.maximum_rows': 'Maximum rows',
|
|
5371
|
+
'agt.time_limit_seconds': 'Time limit (seconds)',
|
|
5372
|
+
'agt.e_g_sales_agent': 'e.g. SALES_AGENT',
|
|
5373
|
+
'agt.upper_case_letters_digits_and': 'Upper case letters, digits and _. AI assistant regions name the agent.',
|
|
5374
|
+
'agt.rounds_of_tool_calls_per': 'Rounds of tool calls per question (1 – 20); then the model must answer.',
|
|
5375
|
+
'agt.the_service_s': 'the service\'s',
|
|
5376
|
+
'agt.per_call_to_the_model': 'Per call to the model (never above the service\'s maximum).',
|
|
5377
|
+
'agt.e_g_top_earners': 'e.g. top_earners',
|
|
5378
|
+
'agt.letters_digits_and_the_model': 'Letters, digits and _: the model calls the tool by this name.',
|
|
5379
|
+
'agt.e_g_sales_give_discount': 'e.g. sales.give_discount',
|
|
5380
|
+
'agt.schema_name_called_as_the': 'schema.name, called as the application\'s role with named arguments: each parameter name in lower case is an argument name (P_ORDER → p_order). It may change data.',
|
|
5381
|
+
'agt.e_g_highlightorder': 'e.g. highlightOrder',
|
|
5382
|
+
'agt.after_the_answer_the_browser': 'After the answer the browser calls the function registered with pgkiln.actions.register(name) with {value: the arguments}, and the dynamic actions of the custom event of this name.',
|
|
5383
|
+
'agt.the_page_numbers_the_agent': 'The page numbers the agent may link to. pgkiln offers only those the user may open and builds the URL (item values with their checksum).',
|
|
5384
|
+
'agt.rows_the_model_gets_back': 'Rows the model gets back (1 – 500).',
|
|
5385
|
+
'agt.sql_and_function_tools_1': 'SQL and function tools (1 – 60).',
|
|
5386
|
+
'agt.none_everyone_who_may_use': '- none: everyone who may use the page -',
|
|
5387
|
+
'agt.must_not_be_the_public': 'Must not be the public user',
|
|
5388
|
+
'agt.choose': '- choose -',
|
|
5389
|
+
'agt.the_service_s_2': 'The service\'s',
|
|
5390
|
+
'agt.save': 'Save',
|
|
5391
|
+
'agt.the_conversation_the_tools_results': 'The conversation, the tools\' results and the system prompt go to this service\'s provider.',
|
|
5392
|
+
'agt.only_users_who_pass_it': 'Only users who pass it may use the agent (regions show a message to the others).',
|
|
5393
|
+
'agt.what_the_tool_does_each': 'What the tool does; each type uses the fields below that name it.',
|
|
5394
|
+
'agt.tells_the_model_what_the': 'Tells the model what the tool does and when to use it.',
|
|
5395
|
+
'agt.the_parameters_become_the_source': 'The parameters become the source\'s parameters.',
|
|
5396
|
+
'agt.only_users_who_pass_it_2': 'Only users who pass it are offered the tool.',
|
|
5397
|
+
'agt.ai_agent_saved': 'AI agent saved.',
|
|
5398
|
+
'agt.ai_tool_saved': 'AI tool saved.',
|
|
5399
|
+
'agt.parameters_not_valid_json': 'Parameters: not valid JSON.',
|
|
5400
|
+
'agt.tool_calls': 'Tool calls',
|
|
5401
|
+
'agt.agents': 'Agents',
|
|
5402
|
+
'agt.ai_agent': 'AI agent',
|
|
5403
|
+
'agt.ai_tool': 'AI tool',
|
|
5404
|
+
'agt.app_builder': 'App Builder',
|
|
5405
|
+
'agt.shared_components': 'Shared Components',
|
|
5406
|
+
'agt.type.sql': 'SQL query (read-only, as the application\'s role)',
|
|
5407
|
+
'agt.type.function': 'PL/pgSQL function (may change data)',
|
|
5408
|
+
'agt.type.rest': 'REST data source',
|
|
5409
|
+
'agt.type.javascript': 'JavaScript action in the browser',
|
|
5410
|
+
'agt.type.navigate': 'Navigate: a link to a page',
|
|
5411
|
+
'agt.type.retrieve': 'Retrieve (RAG): rows of a search configuration',
|
|
5412
|
+
'agt.effort_help': 'Claude: the output effort (thinking depth). OpenAI, Gemini and OpenAI-compatible: reasoning_effort (leave empty for models without reasoning).',
|
|
5413
|
+
'agt.system_help': 'Who the agent is, what it may answer and when to use which tool. &ITEM. is replaced by the item\'s value as delimited data.',
|
|
5414
|
+
'agt.no_tools': 'No AI tools yet: {link}.',
|
|
5415
|
+
'agt.delete_agent_confirm': 'Delete agent {name}? Regions that use it show that the assistant is not set up.',
|
|
5416
|
+
'agt.sql_help': 'One SELECT with the parameters as :NAME bind values (and :APP_USER, items). Runs as the application\'s database role (grants and row level security apply) in a read-only transaction.',
|
|
5417
|
+
'agt.delete_tool_confirm': 'Delete tool {name}?',
|
|
5418
|
+
'agt.whole_number': '{what} is a whole number.',
|
|
5419
|
+
'agt.f_steps': 'Maximum steps',
|
|
5420
|
+
'agt.f_tokens': 'Maximum output tokens',
|
|
5421
|
+
'agt.f_rows': 'Maximum rows',
|
|
5422
|
+
'agt.f_timeout': 'Time limit',
|
|
5423
|
+
'agt.intro': 'An agent answers in an AI assistant region and acts only through the tools you give it: SQL queries (read-only, as the application\'s database role, so row level security applies), PL/pgSQL functions, REST data sources, JavaScript actions in the browser, and links to pages (pgkiln builds the URL and its checksum, only for pages the user may open). A Retrieve tool gives the agent the rows of a search configuration that match a text by meaning (RAG), again as the application\'s role. What users type and the tools\' results go to the agent\'s AI service. {usage} lists every tool call.',
|
|
5424
|
+
'agt.agent_gone': 'Agent {name} no longer exists.',
|
|
5425
|
+
'agt.agent_exists': 'An agent {name} exists already.',
|
|
5426
|
+
'agt.no_rest_source': 'There is no REST data source {name}.',
|
|
5427
|
+
'agt.no_search_config': 'There is no search configuration {name} with a table or SQL source.',
|
|
5428
|
+
'agt.no_page': 'There is no page {n}.',
|
|
5429
|
+
'agt.tool_gone': 'Tool {name} no longer exists.',
|
|
5430
|
+
'agt.tool_used': 'Tool {name} is used by {agents}: take it out of those agents first.',
|
|
5431
|
+
// ------------------------------------------------------------ Data Reporter settings (sprint 164)
|
|
5432
|
+
'drep.static_id': 'Static id',
|
|
5433
|
+
'drep.label': 'Label',
|
|
5434
|
+
'drep.description_shown_to_users': 'Description (shown to users)',
|
|
5435
|
+
'drep.app_builder_data_reporter': 'App Builder → Data Reporter',
|
|
5436
|
+
'drep.remove_this_data_source_users': 'Remove this data source (users\' reports on it stop working)',
|
|
5437
|
+
'drep.offer': 'Offer',
|
|
5438
|
+
'drep.column': 'Column',
|
|
5439
|
+
'drep.format_mask': 'Format mask',
|
|
5440
|
+
'drep.not_in_the_table': 'not in the table',
|
|
5441
|
+
'drep.data_reporter_settings': 'Data Reporter settings',
|
|
5442
|
+
'drep.signed_in_users_build_their': 'Signed-in users build their own reports from the data sources below: they pick offered columns, filter, group with totals, sort and draw a chart, and save reports privately or shared. Reports run as the application\'s database role, so grants and row level security apply.',
|
|
5443
|
+
'drep.reports': 'Reports',
|
|
5444
|
+
'drep.who_may_share_reports': 'Who may share reports',
|
|
5445
|
+
'drep.rows_per_page': 'Rows per page',
|
|
5446
|
+
'drep.who_may_build_and_save': 'Who may build and save reports',
|
|
5447
|
+
'drep.others_only_run_shared_reports': 'Others only run shared reports.',
|
|
5448
|
+
'drep.who_may_unpublish_and_delete': 'Who may unpublish and delete anyone\'s reports',
|
|
5449
|
+
'drep.shared_reports_are_published_a': 'Shared reports are published: a stable URL, pins',
|
|
5450
|
+
'drep.text_when_there_are_no': 'Text when there are no rows',
|
|
5451
|
+
'drep.add_a_data_source': 'Add a data source',
|
|
5452
|
+
'drep.table_or_view': 'Table or view',
|
|
5453
|
+
'drep.all_columns_are_offered_at': 'All columns are offered at first (except binary ones); untick those users should not see. Prefer a view that shows exactly what business users may report on.',
|
|
5454
|
+
'drep.or_a_dataset_of_the': 'Or a dataset of the workspace',
|
|
5455
|
+
'drep.save_data_reporter_settings': 'Save Data Reporter settings',
|
|
5456
|
+
'drep.the_dataset_s': 'the dataset\'s',
|
|
5457
|
+
'drep.no_data_found': 'No data found',
|
|
5458
|
+
'drep.from_the_name': 'from the name',
|
|
5459
|
+
'drep.every_signed_in_user': 'Every signed-in user',
|
|
5460
|
+
'drep.nobody_private_reports_only': 'Nobody (private reports only)',
|
|
5461
|
+
'drep.every_user': 'Every user',
|
|
5462
|
+
'drep.nobody': 'Nobody',
|
|
5463
|
+
'drep.settings_saved': 'Settings saved.',
|
|
5464
|
+
'drep.choose_a_table_or_view': 'Choose a table or view for the new data source.',
|
|
5465
|
+
'drep.choose_one_of_the_workspace': 'Choose one of the workspace\'s datasets.',
|
|
5466
|
+
'drep.no_columns': 'Data source {id} offers no columns.',
|
|
5467
|
+
'drep.exists': 'There is already a data source {id}.',
|
|
5468
|
+
'drep.dataset_note': 'Its tables, columns, labels, masks and row filter are the dataset\'s: {link}.',
|
|
5469
|
+
'drep.aria_offer': 'Offer {column}',
|
|
5470
|
+
'drep.aria_label': 'Label of {column}',
|
|
5471
|
+
'drep.aria_format': 'Format mask of {column}',
|
|
5472
|
+
// ------------------------------------------------------------ Globalization (sprint 164)
|
|
5473
|
+
'glob.for_texts_pgkiln_derives_itself': 'For texts pgkiln derives itself, such as column headings made from column names (`hiredate` → “Hiredate”).',
|
|
5474
|
+
'glob.use_them_in_sql_with': 'Use them in SQL with `meta.message(\'NAME\', param0, …)` (placeholders `%0`…`%9`) and in texts as `&APP_TEXT$NAME.`, like APEX_LANG.MESSAGE. A message named like a pgkiln text (e.g. `login.title`, `report.no_data`) replaces it. Missing languages fall back to the primary language.',
|
|
5475
|
+
'glob.automatic_time_zone': 'Automatic time zone',
|
|
5476
|
+
'glob.each_user_sees_times_in': 'Each user sees times in their own time zone: the browser\'s (sent once per session), or the one they choose on My account. Without JavaScript the app\'s time zone applies (APEX: Automatic Time Zone).',
|
|
5477
|
+
'glob.shared_components': 'Shared Components',
|
|
5478
|
+
'glob.none_yet': 'none yet',
|
|
5479
|
+
'glob.change_languages_in_settings': 'Change languages in Settings',
|
|
5480
|
+
'glob.give_translators_an_xliff_file': 'Give translators an XLIFF file (as in APEX) or a CSV file, then import it here. Empty targets are ignored on import.',
|
|
5481
|
+
'glob.file': 'File',
|
|
5482
|
+
'glob.or_paste_xliff_csv': '…or paste XLIFF / CSV',
|
|
5483
|
+
'glob.used_in': 'Used in',
|
|
5484
|
+
'glob.save_translations': 'Save translations',
|
|
5485
|
+
'glob.add_a_text': 'Add a text',
|
|
5486
|
+
'glob.add': 'Add',
|
|
5487
|
+
'glob.settings_globalization': 'Settings → Globalization',
|
|
5488
|
+
'glob.name': 'Name',
|
|
5489
|
+
'glob.language': 'Language',
|
|
5490
|
+
'glob.text': 'Text',
|
|
5491
|
+
'glob.save': 'Save',
|
|
5492
|
+
'glob.delete': 'Delete',
|
|
5493
|
+
'glob.no_text_messages': 'No text messages.',
|
|
5494
|
+
'glob.add_a_text_message': 'Add a text message',
|
|
5495
|
+
'glob.add_message': 'Add message',
|
|
5496
|
+
'glob.currency': 'Currency',
|
|
5497
|
+
'glob.time_zone': 'Time zone',
|
|
5498
|
+
'glob.e_g_eur_empty_per': 'e.g. EUR (empty: per language)',
|
|
5499
|
+
'glob.iso_4217_code_for_l': 'ISO 4217 code for L (symbol) and C (code) in number format masks such as FML999G990D00. A text message FORMAT.CURRENCY overrides it per language.',
|
|
5500
|
+
'glob.e_g_greeting_or_login': 'e.g. GREETING or login.title',
|
|
5501
|
+
'glob.hello_0': 'Hello %0!',
|
|
5502
|
+
'glob.names_start_with_a_letter': 'Names start with a letter and contain letters, digits, _ . $ or -.',
|
|
5503
|
+
'glob.queries_run_in_this_time': 'Queries run in this time zone (SET LOCAL timezone), so timestamp with time zone values show in it.',
|
|
5504
|
+
'glob.text_message_saved': 'Text message saved.',
|
|
5505
|
+
'glob.text_message_deleted': 'Text message deleted.',
|
|
5506
|
+
'glob.currency_a_three_letter_iso': 'Currency: a three-letter ISO 4217 code such as EUR or USD.',
|
|
5507
|
+
'glob.languages': 'Languages',
|
|
5508
|
+
'glob.export_and_import': 'Export and import',
|
|
5509
|
+
'glob.translate': 'Translate',
|
|
5510
|
+
'glob.text_messages': 'Text messages',
|
|
5511
|
+
'glob.app_builder': 'App Builder',
|
|
5512
|
+
'glob.globalization': 'Globalization',
|
|
5513
|
+
'glob.unknown_zone': 'Unknown time zone "{zone}".',
|
|
5514
|
+
'glob.primary': 'Primary language: {lang}',
|
|
5515
|
+
'glob.derived': 'Language derived from: {from}',
|
|
5516
|
+
'glob.from.browser': 'the browser',
|
|
5517
|
+
'glob.from.user': 'the user\'s preference, then the browser',
|
|
5518
|
+
'glob.from.primary': 'always the primary language',
|
|
5519
|
+
'glob.translated_into': 'Translated into: {langs}',
|
|
5520
|
+
'glob.builtin': 'pgkiln\'s own texts (sign-in, reports, messages) exist in {list} and {last}; override any of them with a text message of the same name.',
|
|
5521
|
+
'glob.translate_into': 'Translate into {lang}',
|
|
5522
|
+
'glob.aria_translation': 'Translation of: {text}',
|
|
5523
|
+
'glob.text_lang': 'Text ({lang})',
|
|
5524
|
+
'glob.translation_lang': 'Translation ({lang})',
|
|
5525
|
+
'glob.add_lang_first': 'Add a translated language under {link} first (for example {example}).',
|
|
5526
|
+
'glob.aria_text_of': 'Text of {name} ({lang})',
|
|
5527
|
+
'glob.delete_confirm': 'Delete {name} ({lang})?',
|
|
5528
|
+
'glob.import_failed': 'Import failed: {error}',
|
|
5529
|
+
// ------------------------------------------------------------ Remote databases (sprint 164)
|
|
5530
|
+
'rdb.grant_to_the_applications_database': 'Grant to the applications\' database roles',
|
|
5531
|
+
'rdb.no_application_has_a_database': 'No application has a database role yet (Application settings → Database role).',
|
|
5532
|
+
'rdb.also_insert_update_and_delete': 'Also INSERT, UPDATE and DELETE (else SELECT only)',
|
|
5533
|
+
'rdb.test_the_connection': 'Test the connection',
|
|
5534
|
+
'rdb.cancel': 'Cancel',
|
|
5535
|
+
'rdb.another_postgresql_database_s_tables': 'Another PostgreSQL database\'s tables as foreign tables (postgres_fdw) in a local schema: regions, reports, forms and lists of values use them like the application\'s own tables, as its database role, with the grants given here.',
|
|
5536
|
+
'rdb.postgres_fdw_is_not_installed': 'postgres_fdw is not installed in this database.',
|
|
5537
|
+
'rdb.create_extension_postgres_fdw': 'Create extension postgres_fdw',
|
|
5538
|
+
'rdb.name': 'Name',
|
|
5539
|
+
'rdb.connection': 'Connection',
|
|
5540
|
+
'rdb.local_schema': 'Local schema',
|
|
5541
|
+
'rdb.tables': 'Tables',
|
|
5542
|
+
'rdb.granted_to': 'Granted to',
|
|
5543
|
+
'rdb.imported': 'Imported',
|
|
5544
|
+
'rdb.actions': 'Actions',
|
|
5545
|
+
'rdb.edit': 'Edit',
|
|
5546
|
+
'rdb.import_again': 'Import again',
|
|
5547
|
+
'rdb.delete': 'Delete',
|
|
5548
|
+
'rdb.no_remote_databases_yet': 'No remote databases yet.',
|
|
5549
|
+
'rdb.description': 'Description',
|
|
5550
|
+
'rdb.host': 'Host',
|
|
5551
|
+
'rdb.port': 'Port',
|
|
5552
|
+
'rdb.database': 'Database',
|
|
5553
|
+
'rdb.user': 'User',
|
|
5554
|
+
'rdb.password': 'Password',
|
|
5555
|
+
'rdb.remote_schema': 'Remote schema',
|
|
5556
|
+
'rdb.a_static_id_e_g': 'A static id, e.g. CRM. The server is pgkiln_rdb_<name>.',
|
|
5557
|
+
'rdb.as_the_database_server_reaches': 'As the database server reaches it (it makes the connection, not pgkiln).',
|
|
5558
|
+
'rdb.a_user_of_the_remote': 'A user of the remote database: what it may read or change there is what the applications may.',
|
|
5559
|
+
'rdb.a_new_schema_here_for': 'A new schema here for the foreign tables, e.g. crm: regions query crm.<table>.',
|
|
5560
|
+
'rdb.add_a_remote_database': 'Add a remote database',
|
|
5561
|
+
'rdb.kept_by_postgresql_in_the': 'Kept by PostgreSQL in the user mapping and never shown; type a new one to replace it.',
|
|
5562
|
+
'rdb.kept_by_postgresql_in_the_2': 'Kept by PostgreSQL in the user mapping (pgkiln never stores it).',
|
|
5563
|
+
'rdb.save_and_import_again': 'Save and import again',
|
|
5564
|
+
'rdb.add_and_import': 'Add and import',
|
|
5565
|
+
'rdb.the_test_failed': 'The test failed',
|
|
5566
|
+
'rdb.nothing_was_changed': 'Nothing was changed',
|
|
5567
|
+
'rdb.the_postgres_fdw_extension_is': 'The postgres_fdw extension is installed.',
|
|
5568
|
+
'rdb.no_such_remote_database': 'No such remote database.',
|
|
5569
|
+
'rdb.the_password_has_at_most': 'The password has at most 1000 characters.',
|
|
5570
|
+
'rdb.renaming_it_or_moving_it': 'Renaming it, or moving it to another local schema, needs the password again.',
|
|
5571
|
+
'rdb.rolled_back': 'rolled back',
|
|
5572
|
+
'rdb.remote_databases': 'Remote databases',
|
|
5573
|
+
'rdb.app_builder': 'App Builder',
|
|
5574
|
+
'rdb.workspace_utilities': 'Workspace utilities',
|
|
5575
|
+
'rdb.title': 'Remote databases',
|
|
5576
|
+
'rdb.edit_named': 'Edit {name}',
|
|
5577
|
+
'rdb.tables_help': 'Remote tables and views to import, separated by commas (at most {n}); empty: all of the remote schema\'s.',
|
|
5578
|
+
'rdb.fdw_superuser': 'A superuser runs {create} and {grant} pgkiln\'s owner role.',
|
|
5579
|
+
'rdb.fdw_missing': 'The server needs PostgreSQL\'s contrib package, then a superuser runs {create} and {grant} pgkiln\'s owner role.',
|
|
5580
|
+
'rdb.delete_confirm': 'Delete {name}? Its schema {schema} and its foreign tables are dropped.',
|
|
5581
|
+
'rdb.test_ok': 'The connection works: {n} table(s) would be imported into {schema}. Nothing was saved.',
|
|
5582
|
+
'rdb.name_taken': 'There is a remote database {name} already.',
|
|
5583
|
+
'rdb.schema_taken': 'Another remote database uses schema {schema}.',
|
|
5584
|
+
// ------------------------------------------------------------ Debug messages and installation log (sprint 164)
|
|
5585
|
+
'diag.no_runs_recorded_yet_runs': 'No runs recorded yet: runs are logged from version 0.25 on (each `db:migrate` or `pgkiln migrate` that applies or fails a file). The applied migrations below show when each file was applied.',
|
|
5586
|
+
'diag.save': 'Save',
|
|
5587
|
+
'diag.page': 'Page',
|
|
5588
|
+
'diag.user': 'User',
|
|
5589
|
+
'diag.only_with_errors_or_warnings': 'Only with errors or warnings',
|
|
5590
|
+
'diag.when': 'When',
|
|
5591
|
+
'diag.request': 'Request',
|
|
5592
|
+
'diag.status': 'Status',
|
|
5593
|
+
'diag.entries': 'Entries',
|
|
5594
|
+
'diag.view': 'View',
|
|
5595
|
+
'diag.older_page_views': 'Older page views',
|
|
5596
|
+
'diag.back_to_activity': 'Back to Activity',
|
|
5597
|
+
'diag.total_time': 'total time',
|
|
5598
|
+
'diag.http_status': 'HTTP status',
|
|
5599
|
+
'diag.previous': '◂ Previous',
|
|
5600
|
+
'diag.all_page_views': 'All page views',
|
|
5601
|
+
'diag.next': 'Next ▸',
|
|
5602
|
+
'diag.elapsed_ms': 'Elapsed ms',
|
|
5603
|
+
'diag.duration_ms': 'Duration ms',
|
|
5604
|
+
'diag.until_next': 'Until next',
|
|
5605
|
+
'diag.level': 'Level',
|
|
5606
|
+
'diag.component': 'Component',
|
|
5607
|
+
'diag.message': 'Message',
|
|
5608
|
+
'diag.installation': 'Installation',
|
|
5609
|
+
'diag.only_administrators_see_the_installation': 'Only administrators see the installation log.',
|
|
5610
|
+
'diag.pgkiln_version_of_this_server': 'pgkiln version of this server',
|
|
5611
|
+
'diag.migrations_not_applied': 'migrations not applied',
|
|
5612
|
+
'diag.started': 'Started',
|
|
5613
|
+
'diag.kind': 'Kind',
|
|
5614
|
+
'diag.version': 'Version',
|
|
5615
|
+
'diag.files': 'Files',
|
|
5616
|
+
'diag.applied': 'Applied',
|
|
5617
|
+
'diag.by': 'By',
|
|
5618
|
+
'diag.file': 'File',
|
|
5619
|
+
'diag.filter': 'Filter',
|
|
5620
|
+
'diag.delete_all_debug_messages': 'Delete all debug messages',
|
|
5621
|
+
'diag.debug_level': 'Debug level',
|
|
5622
|
+
'diag.keep_messages_for': 'Keep messages for',
|
|
5623
|
+
'diag.debug_messages_off': 'Debug messages off.',
|
|
5624
|
+
'diag.level_9_records_posted_item': 'Level 9 records posted item values (never those of password items).',
|
|
5625
|
+
'diag.choose_a_debug_level_and': 'Choose a debug level and a retention of 1 to 90 days.',
|
|
5626
|
+
'diag.page_views': 'Page views',
|
|
5627
|
+
'diag.install_and_upgrade_runs': 'Install and upgrade runs',
|
|
5628
|
+
'diag.applied_migrations': 'Applied migrations',
|
|
5629
|
+
'diag.example_and_seed_scripts': 'Example and seed scripts',
|
|
5630
|
+
'diag.app_builder': 'App Builder',
|
|
5631
|
+
'diag.activity': 'Activity',
|
|
5632
|
+
'diag.debug_messages': 'Debug messages',
|
|
5633
|
+
'diag.workspace_utilities': 'Workspace utilities',
|
|
5634
|
+
'diag.on': '{state}: every request of this application records its steps with timings, and SQL can add messages with {fn}. This costs time and space: turn it off when you are done.',
|
|
5635
|
+
'diag.on_state': 'Debug messages are on (level {level})',
|
|
5636
|
+
'diag.off': 'Debug messages are off: requests record nothing, and {fn} returns at once. Choose a level to record the requests of this application.',
|
|
5637
|
+
'diag.delete_confirm': 'Delete all debug messages of {app}?',
|
|
5638
|
+
'diag.title': 'Debug messages · {app}',
|
|
5639
|
+
'diag.page_view': 'Page view {id}',
|
|
5640
|
+
'diag.view_title': 'Debug {id} · {app}',
|
|
5641
|
+
'diag.on_flash': 'Debug messages on (level {level}).',
|
|
5642
|
+
'diag.applied_n': 'migrations applied',
|
|
5643
|
+
'diag.applied_latest': 'migrations applied, the latest {name}',
|
|
5644
|
+
'diag.missing': 'This database misses {n} migrations of this server ({list}). Run {npm} or {cli}.',
|
|
5645
|
+
'diag.missing_1': 'This database misses 1 migration of this server ({list}). Run {npm} or {cli}.',
|
|
5646
|
+
// ------------------------------------------------------------ Login page and two-factor settings (sprint 164)
|
|
5647
|
+
'lgp.not_offered_yet': 'Not offered yet:',
|
|
5648
|
+
'lgp.login_page': 'Login page',
|
|
5649
|
+
'lgp.login': 'Login',
|
|
5650
|
+
'lgp.minimal': 'Minimal',
|
|
5651
|
+
'lgp.create_a_login_page': 'Create a login page',
|
|
5652
|
+
'lgp.offer_forgot_password': 'Offer "Forgot password?"',
|
|
5653
|
+
'lgp.second_step': 'Second step',
|
|
5654
|
+
'lgp.my_account': 'My account',
|
|
5655
|
+
'lgp.not_available_yet': 'Not available yet:',
|
|
5656
|
+
'lgp.required_for_roles': 'Required for roles',
|
|
5657
|
+
'lgp.required_for_some_roles': 'Required for some roles',
|
|
5658
|
+
'lgp.offer_a_code_by_e': 'Offer a code by e-mail',
|
|
5659
|
+
'lgp.multi_factor_sign_in': 'Multi-factor sign-in',
|
|
5660
|
+
'lgp.second_step_within_minutes': 'Second step within (minutes)',
|
|
5661
|
+
'lgp.admin_manager': 'admin, manager',
|
|
5662
|
+
'lgp.the_built_in_sign_in': '- the built-in sign-in page -',
|
|
5663
|
+
'lgp.off': 'Off',
|
|
5664
|
+
'lgp.optional_users_may_add_an': 'Optional (users may add an app)',
|
|
5665
|
+
'lgp.required': 'Required',
|
|
5666
|
+
'lgp.two_factor_sign_in_a': 'Two-factor sign-in: a role name is too long.',
|
|
5667
|
+
'lgp.two_factor_sign_in_name': 'Two-factor sign-in: name the roles that must use it.',
|
|
5668
|
+
'lgp.two_factor_sign_in_the': 'Two-factor sign-in: the server needs PGKILN_SECRET_KEY before it can be required.',
|
|
5669
|
+
'lgp.requires_signin': '{page} (requires sign-in: not usable)',
|
|
5670
|
+
'lgp.page_help': 'A public page with a {login} region (APEX: the login page); page template {minimal} hides the header and navigation.',
|
|
5671
|
+
'lgp.reset_help': 'Users with a password and an e-mail address in the user directory get a single-use link, valid for 30 minutes, to choose a new password. Only for the user directory\'s own passwords.',
|
|
5672
|
+
'lgp.sent_through': 'Sent through mail service {service} as {from}.',
|
|
5673
|
+
'lgp.mfa_help': 'After the password or an LDAP directory: a code from an authenticator app, a passkey or a recovery code, added on {account} or while signing in.',
|
|
5674
|
+
'lgp.needs_key': '{na} the server needs {key} to keep the apps\' secrets.',
|
|
5675
|
+
'lgp.roles_help': 'With {some}: users with one of these roles must use it, others may.',
|
|
5676
|
+
'lgp.email_help': 'Users who already have an app or a passkey may get a one-time code by e-mail instead (valid {minutes} minutes, at most {per_hour} an hour); never as their only factor.',
|
|
5677
|
+
'lgp.passkeys_note': 'Passkeys need the application at a host name, not an IP address. Identity providers ask for their own second factor (see the provider\'s {mfa}). To ask again before a page opens (step-up), give its authorization scheme {within} in Shared Components.',
|
|
5678
|
+
'lgp.no_page': 'Login page: there is no page {n}.',
|
|
5679
|
+
'lgp.created': 'Page {n} "Login" created and made the login page. Add regions around the sign-in form in the Page Designer.',
|
|
5680
|
+
// ------------------------------------------------------------ Create page wizards (sprint 164)
|
|
5681
|
+
'wiz.kind.report_form': 'Report and form',
|
|
5682
|
+
'wiz.kind_help.report_form': 'An interactive report and a modal form with create, update and delete.',
|
|
5683
|
+
'wiz.kind.grid': 'Interactive grid',
|
|
5684
|
+
'wiz.kind_help.grid': 'One editable grid page.',
|
|
5685
|
+
'wiz.kind.form': 'Form',
|
|
5686
|
+
'wiz.kind_help.form': 'A form for one row: create, update and delete, back to a page of your choice.',
|
|
5687
|
+
'wiz.kind.cards': 'Cards',
|
|
5688
|
+
'wiz.kind_help.cards': 'A card per row with a title, subtitle, body and badge, optionally linked to a form.',
|
|
5689
|
+
'wiz.kind.calendar': 'Calendar',
|
|
5690
|
+
'wiz.kind_help.calendar': 'Rows with a date as events in month, week, day and list views.',
|
|
5691
|
+
'wiz.kind.chart': 'Chart',
|
|
5692
|
+
'wiz.kind_help.chart': 'The number of rows, or a sum, average, minimum or maximum, per label.',
|
|
5693
|
+
'wiz.kind.map': 'Map',
|
|
5694
|
+
'wiz.kind_help.map': 'Rows with a position as markers on a map, with a list filtered by the map area.',
|
|
5695
|
+
'wiz.kind.facets': 'Faceted search',
|
|
5696
|
+
'wiz.kind_help.facets': 'A report with a filter panel: values with counts, ranges and a search field.',
|
|
5697
|
+
'wiz.kind.master_detail': 'Master detail',
|
|
5698
|
+
'wiz.kind_help.master_detail': 'A grid of the table and, below it, an editable grid of the selected row\'s details.',
|
|
5699
|
+
'wiz.kind.report': 'Interactive report',
|
|
5700
|
+
'wiz.kind_help.report': 'An interactive report of the table on its own page, optionally with a modal form page.',
|
|
5701
|
+
'wiz.kind.smart_filters': 'Smart filters',
|
|
5702
|
+
'wiz.kind_help.smart_filters': 'An interactive report with one search field above it that suggests filters (chips) from the columns.',
|
|
5703
|
+
'wiz.kind.search': 'Search page',
|
|
5704
|
+
'wiz.kind_help.search': 'A search region over the application\'s search configurations, or a new one on a table.',
|
|
5705
|
+
'wiz.kind.data_load': 'Data loading',
|
|
5706
|
+
'wiz.kind_help.data_load': 'A data load definition for the table and a page where users upload a CSV, Excel, JSON or XML file into it.',
|
|
5707
|
+
'wiz.kind.tree': 'Tree',
|
|
5708
|
+
'wiz.kind_help.tree': 'The rows as a tree: an id, a parent (from a foreign key to the table itself) and a label.',
|
|
5709
|
+
'wiz.kind.timeline': 'Timeline',
|
|
5710
|
+
'wiz.kind_help.timeline': 'Rows as events on a vertical line: when, who, a title and a text (template component Timeline).',
|
|
5711
|
+
'wiz.kind.media_list': 'Media list',
|
|
5712
|
+
'wiz.kind_help.media_list': 'Rows with initials, a title, a description and a badge (template component Media list).',
|
|
5713
|
+
'wiz.kind.content_row': 'Content row',
|
|
5714
|
+
'wiz.kind_help.content_row': 'Rows with initials, a title and a description, and a secondary text and a badge on the right (template component Content row).',
|
|
5715
|
+
'wiz.kind.comments': 'Comments',
|
|
5716
|
+
'wiz.kind_help.comments': 'Rows as a conversation: who wrote what and when (template component Comments).',
|
|
5717
|
+
'wiz.kind.dashboard': 'Dashboard',
|
|
5718
|
+
'wiz.kind_help.dashboard': 'Charts of the application\'s tables, chosen from the data like a new application\'s dashboard.',
|
|
5719
|
+
'wiz.kind.wizard': 'Wizard',
|
|
5720
|
+
'wiz.kind_help.wizard': 'A form over several steps, one page per step with a progress list, Previous and Next; Finish adds the row.',
|
|
5721
|
+
'wiz.kind.tasks': 'Unified task list',
|
|
5722
|
+
'wiz.kind_help.tasks': 'The approval and action tasks of the signed-in user (a task list region).',
|
|
5723
|
+
'wiz.kind.workflows': 'Workflow console',
|
|
5724
|
+
'wiz.kind_help.workflows': 'The workflows the user started or administers, with their state and history.',
|
|
5725
|
+
'wiz.kind_on': '{kind} on {table}',
|
|
5726
|
+
'wiz.search_configurations': 'Search configurations',
|
|
5727
|
+
'wiz.shared_components_search_configurations': 'Shared Components → Search configurations',
|
|
5728
|
+
'wiz.tasks_come_from_task_definitions': 'Tasks come from task definitions (Shared Components → Task definitions) and approvals started in processes or workflows.',
|
|
5729
|
+
'wiz.tables': 'Tables',
|
|
5730
|
+
'wiz.a_chart_per_table_at': 'A chart per table (at most six) of the rows per parent row or per repeating value, read from the data; tables with row level security are left out.',
|
|
5731
|
+
'wiz.the_application_s_database_role': 'The application\'s database role can\'t read any table.',
|
|
5732
|
+
'wiz.cancel': 'Cancel',
|
|
5733
|
+
'wiz.create_page': 'Create page',
|
|
5734
|
+
'wiz.form_page': 'Form page',
|
|
5735
|
+
'wiz.page_mode': 'Page mode',
|
|
5736
|
+
'wiz.after_saving_or_cancelling_go': 'After saving or cancelling, go to page',
|
|
5737
|
+
'wiz.title': 'Title',
|
|
5738
|
+
'wiz.subtitle': 'Subtitle',
|
|
5739
|
+
'wiz.body': 'Body',
|
|
5740
|
+
'wiz.badge': 'Badge',
|
|
5741
|
+
'wiz.start_date': 'Start date',
|
|
5742
|
+
'wiz.end_date': 'End date',
|
|
5743
|
+
'wiz.event_title': 'Event title',
|
|
5744
|
+
'wiz.drag_and_drop': 'Drag and drop',
|
|
5745
|
+
'wiz.chart_type': 'Chart type',
|
|
5746
|
+
'wiz.label_one_bar_slice_or': 'Label (one bar, slice or point per value)',
|
|
5747
|
+
'wiz.value': 'Value',
|
|
5748
|
+
'wiz.of_column': 'Of column',
|
|
5749
|
+
'wiz.position': 'Position',
|
|
5750
|
+
'wiz.latitude': 'Latitude',
|
|
5751
|
+
'wiz.longitude': 'Longitude',
|
|
5752
|
+
'wiz.popup_title': 'Popup title',
|
|
5753
|
+
'wiz.popup_text': 'Popup text',
|
|
5754
|
+
'wiz.a_list_below_the_map': 'A list below the map',
|
|
5755
|
+
'wiz.a_search_field_above_the': 'A search field above the facets',
|
|
5756
|
+
'wiz.node_id': 'Node id',
|
|
5757
|
+
'wiz.parent': 'Parent',
|
|
5758
|
+
'wiz.label': 'Label',
|
|
5759
|
+
'wiz.levels_open_at_first': 'Levels open at first',
|
|
5760
|
+
'wiz.when': 'When',
|
|
5761
|
+
'wiz.who': 'Who',
|
|
5762
|
+
'wiz.text': 'Text',
|
|
5763
|
+
'wiz.description': 'Description',
|
|
5764
|
+
'wiz.secondary_text_on_the_right': 'Secondary text (on the right)',
|
|
5765
|
+
'wiz.who_wrote_it': 'Who wrote it',
|
|
5766
|
+
'wiz.comment': 'Comment',
|
|
5767
|
+
'wiz.data_load_definition': 'Data load definition',
|
|
5768
|
+
'wiz.mode': 'Mode',
|
|
5769
|
+
'wiz.skip_rows_with_errors': 'Skip rows with errors',
|
|
5770
|
+
'wiz.steps': 'Steps',
|
|
5771
|
+
'wiz.after_finish_or_cancel_go': 'After Finish or Cancel, go to page',
|
|
5772
|
+
'wiz.and_a_new_configuration_on': 'And a new configuration on',
|
|
5773
|
+
'wiz.show': 'Show',
|
|
5774
|
+
'wiz.also_completed_tasks': 'Also completed tasks',
|
|
5775
|
+
'wiz.detail_table': 'Detail table',
|
|
5776
|
+
'wiz.page_number': 'Page number',
|
|
5777
|
+
'wiz.name': 'Name',
|
|
5778
|
+
'wiz.menu_icon': 'Menu icon',
|
|
5779
|
+
'wiz.add_a_navigation_entry': 'Add a navigation entry',
|
|
5780
|
+
'wiz.the_modal_form_page_opened': 'The modal form page opened from the report.',
|
|
5781
|
+
'wiz.cancel_create_apply_changes_and': 'Cancel, Create, Apply Changes and Delete return there.',
|
|
5782
|
+
'wiz.one_page_per_step_numbered': 'One page per step, numbered from the page number up; the columns are shared out in order.',
|
|
5783
|
+
'wiz.the_page_title_and_the': 'The page title and the navigation entry.',
|
|
5784
|
+
'wiz.my_tasks_to_act_on': 'My tasks (to act on or claim)',
|
|
5785
|
+
'wiz.tasks_i_requested': 'Tasks I requested',
|
|
5786
|
+
'wiz.tasks_i_administer': 'Tasks I administer',
|
|
5787
|
+
'wiz.count': 'Count',
|
|
5788
|
+
'wiz.sum': 'Sum',
|
|
5789
|
+
'wiz.average': 'Average',
|
|
5790
|
+
'wiz.minimum': 'Minimum',
|
|
5791
|
+
'wiz.maximum': 'Maximum',
|
|
5792
|
+
'wiz.none': '- none -',
|
|
5793
|
+
'wiz.normal_page': 'Normal page',
|
|
5794
|
+
'wiz.modal_dialog': 'Modal dialog',
|
|
5795
|
+
'wiz.append_add_the_rows': 'Append: add the rows',
|
|
5796
|
+
'wiz.merge_update_rows_with_the': 'Merge: update rows with the same key, add the others',
|
|
5797
|
+
'wiz.replace_delete_all_rows_first': 'Replace: delete all rows first',
|
|
5798
|
+
'wiz.the_workflows_the_user_started': 'The workflows the user started',
|
|
5799
|
+
'wiz.the_workflows_the_user_administers': 'The workflows the user administers',
|
|
5800
|
+
'wiz.choose_a_table_or_view': 'Choose a table or view.',
|
|
5801
|
+
'wiz.choose_a_page_type': 'Choose a page type.',
|
|
5802
|
+
'wiz.the_proposals_come_from_the': 'The proposals come from the table\'s columns, key and foreign keys; change them below.',
|
|
5803
|
+
'wiz.users_who_see_the_calendar': 'Users who see the calendar can move events to another day or hour (an UPDATE of the start and end columns as the app\'s role; row level security applies). Set an authorization in the region\'s "move_authz" to limit it.',
|
|
5804
|
+
'wiz.count_empty_counts_the_rows': 'Count: empty counts the rows. Sum, average, minimum and maximum need a number column.',
|
|
5805
|
+
'wiz.an_interactive_report_of_the': 'An interactive report of the same rows; moving the map offers "Show this area in the list".',
|
|
5806
|
+
'wiz.what_identifies_a_node_usually': 'What identifies a node: usually the primary key.',
|
|
5807
|
+
'wiz.the_column_with_the_parent': 'The column with the parent node\'s id; proposed from a foreign key to the table itself. Rows whose parent is not in the table are the top level.',
|
|
5808
|
+
'wiz.the_events_come_newest_first': 'The events come newest first.',
|
|
5809
|
+
'wiz.its_first_two_letters_are': 'Its first two letters are the initials.',
|
|
5810
|
+
'wiz.the_newest_first': 'The newest first.',
|
|
5811
|
+
'wiz.load_the_good_rows_and': 'Load the good rows and list the others; otherwise nothing is loaded when a row fails.',
|
|
5812
|
+
'wiz.searches_the_table_s_text': 'Searches the table\'s text columns and shows its name (or first text) column as the result\'s title.',
|
|
5813
|
+
'wiz.tables_with_a_foreign_key': 'Tables with a foreign key to this table. Selecting a master row shows its details; new detail rows get the master\'s key.',
|
|
5814
|
+
'wiz.enter_a_page_number': 'Enter a page number.',
|
|
5815
|
+
'wiz.this_application_does_not_exist': 'This application does not exist.',
|
|
5816
|
+
'wiz.enter_the_form_page_number': 'Enter the form page number.',
|
|
5817
|
+
'wiz.choose_at_least_one_table': 'Choose at least one table the application can read.',
|
|
5818
|
+
'wiz.none_of_these_tables_has': 'None of these tables has a column worth a chart (a foreign key, or values that repeat).',
|
|
5819
|
+
'wiz.app_builder': 'App Builder',
|
|
5820
|
+
'wiz.col_columns': 'Columns',
|
|
5821
|
+
'wiz.col_report_columns': 'Report columns',
|
|
5822
|
+
'wiz.col_facets': 'Facets',
|
|
5823
|
+
'wiz.col_filters': 'Filters (suggested in the search field)',
|
|
5824
|
+
'wiz.note_required': ', required: always included',
|
|
5825
|
+
'wiz.note_select_list': ', a select list of {table}',
|
|
5826
|
+
'wiz.note_key': ', key: always included',
|
|
5827
|
+
'wiz.note_with': ', with {col}',
|
|
5828
|
+
'wiz.note_values_of': ': values of {col}',
|
|
5829
|
+
'wiz.note_range': ': a range (from / to)',
|
|
5830
|
+
'wiz.note_counts': ': values with counts',
|
|
5831
|
+
'wiz.note_ranges': ': ranges',
|
|
5832
|
+
'wiz.note_values': ': values',
|
|
5833
|
+
'wiz.form_page_ph': 'e.g. {n} (empty: no form)',
|
|
5834
|
+
'wiz.return_home': 'empty: the home page ({n})',
|
|
5835
|
+
'wiz.return_this': 'empty: this page',
|
|
5836
|
+
'wiz.form_map': 'A modal form page, linked from the popups and the list.',
|
|
5837
|
+
'wiz.form_rows': 'A modal form page, linked from each row, and a Create button.',
|
|
5838
|
+
'wiz.form_search': 'With a table: a modal form page that each result links to.',
|
|
5839
|
+
'wiz.def_help': 'Upper case, e.g. ORDERS_LOAD. A new definition for {table}; an existing one of that name is used as it is.',
|
|
5840
|
+
'wiz.def_help_has': 'Upper case, e.g. ORDERS_LOAD. A new definition for {table}; an existing one of that name is used as it is (this application has {list}).',
|
|
5841
|
+
'wiz.the_table': 'the table',
|
|
5842
|
+
'wiz.no_search_configs': 'This application has no search configurations yet ({link}): choose a table to search below.',
|
|
5843
|
+
'wiz.no_fk': 'No table has a foreign key to {table}: a master-detail page needs one.',
|
|
5844
|
+
'wiz.back_choose': 'Back to choose another type',
|
|
5845
|
+
'wiz.back_choose_table': 'Back to choose another type or table',
|
|
5846
|
+
'wiz.no_pk': '{table} has no single-column primary key, which this page type needs.',
|
|
5847
|
+
'wiz.role_read_only': 'The application\'s database role {role} can read but not change {table}: grant it the privileges the page needs ({privs}).',
|
|
5848
|
+
'wiz.role_no_access': 'The application\'s database role {role} has no access to {table}: grant it the privileges the page needs ({privs}).',
|
|
5849
|
+
'wiz.privs_merge': 'select, insert, update, delete for merge or replace',
|
|
5850
|
+
'wiz.page_title': 'Create page · {app}',
|
|
5851
|
+
'wiz.created_pages': 'Pages {list} created.',
|
|
5852
|
+
'wiz.created_page': 'Page {n} created.',
|
|
5853
|
+
'wiz.created_pages_for': 'Pages {list} created for {table}. Make sure the app\'s database role has privileges on it.',
|
|
5854
|
+
'wiz.created_page_for': 'Page {n} created for {table}. Make sure the app\'s database role has privileges on it.',
|
|
5855
|
+
// ------------------------------------------------------------ Create page and copy page (sprint 164)
|
|
5856
|
+
'cpg.blank_page': 'Blank page',
|
|
5857
|
+
'cpg.an_empty_page_to_build': 'An empty page to build in the Page Designer.',
|
|
5858
|
+
'cpg.back': 'Back',
|
|
5859
|
+
'cpg.create_page': 'Create page',
|
|
5860
|
+
'cpg.next': 'Next',
|
|
5861
|
+
'cpg.choose_a_page_type_types': 'Choose a page type. Types on a table ask for it next; every type proposes its settings and opens the new page in the Page Designer.',
|
|
5862
|
+
'cpg.create_pages_with_ai': 'Create pages with AI',
|
|
5863
|
+
'cpg.describe_the_pages_in_your': 'Describe the pages in your own words; check the proposals before they are made.',
|
|
5864
|
+
'cpg.features_add_pages_and_settings': 'Features add pages and settings to the application. Each lists what it adds before it creates anything; an installed feature is greyed out.',
|
|
5865
|
+
'cpg.installed': 'Installed',
|
|
5866
|
+
'cpg.not_available': 'Not available',
|
|
5867
|
+
'cpg.shared_components': 'Shared components',
|
|
5868
|
+
'cpg.kind': 'Kind',
|
|
5869
|
+
'cpg.name': 'Name',
|
|
5870
|
+
'cpg.in_this_application': 'In this application',
|
|
5871
|
+
'cpg.the_page_uses_no_shared': 'The page uses no shared components.',
|
|
5872
|
+
'cpg.copy_page': 'Copy page',
|
|
5873
|
+
'cpg.copy_a_page_of_this': 'Copy a page of this application or another application of the workspace, under a new number and name. The shared components it uses (lists of values, authorization schemes, lists…) are mapped to this application\'s or copied.',
|
|
5874
|
+
'cpg.page_number': 'Page number',
|
|
5875
|
+
'cpg.page_mode': 'Page mode',
|
|
5876
|
+
'cpg.breadcrumb_parent': 'Breadcrumb parent',
|
|
5877
|
+
'cpg.table_or_view': 'Table or view',
|
|
5878
|
+
'cpg.new_page_number': 'New page number',
|
|
5879
|
+
'cpg.copy_from_application': 'Copy from application',
|
|
5880
|
+
'cpg.component': 'Component',
|
|
5881
|
+
'cpg.feature': 'Feature',
|
|
5882
|
+
'cpg.copy': 'Copy',
|
|
5883
|
+
'cpg.normal_page': 'Normal page',
|
|
5884
|
+
'cpg.modal_dialog': 'Modal dialog',
|
|
5885
|
+
'cpg.copy_it_into_this_application': 'Copy it into this application',
|
|
5886
|
+
'cpg.in_the_same_application_they': 'In the same application they stay as they are, or point to another of the same kind.',
|
|
5887
|
+
'cpg.use_one_of_this_application': 'Use one of this application\'s, or copy it from the other application.',
|
|
5888
|
+
'cpg.choose_an_application_of_this': 'Choose an application of this workspace.',
|
|
5889
|
+
'cpg.enter_a_page_number': 'Enter a page number.',
|
|
5890
|
+
'cpg.enter_a_name': 'Enter a name.',
|
|
5891
|
+
'cpg.create_page_as_copy': 'Create page as copy',
|
|
5892
|
+
'cpg.app_builder': 'App Builder',
|
|
5893
|
+
'cpg.page_title': 'Create page · {app}',
|
|
5894
|
+
'cpg.copy_title': 'Copy page · {app}',
|
|
5895
|
+
'cpg.page_of': 'Page of {app}',
|
|
5896
|
+
'cpg.use_name': 'Use {name}',
|
|
5897
|
+
'cpg.copy_intro': 'Page {n} {name} of {app}: its regions, items, buttons, dynamic actions, validations, processes, computations and branches. Items named {prefix}… are renamed to the new number, also where the page\'s code refers to them.',
|
|
5898
|
+
'cpg.refers_by_name': 'The page refers to these by name.',
|
|
5899
|
+
'cpg.sql_runs_as': 'Its SQL runs as this application\'s database role {role}: grant it what {app}\'s role may read and change.',
|
|
5900
|
+
'cpg.none': '(none)',
|
|
5901
|
+
'cpg.copied': 'Page {n} "{name}" created as a copy of page {page}.',
|
|
5902
|
+
'cpg.copied_from': 'Page {n} "{name}" created as a copy of page {page} of {app}.',
|
|
5903
|
+
'cpg.k.authz_scheme': 'Authorization scheme',
|
|
5904
|
+
'cpg.k.build_option': 'Build option',
|
|
5905
|
+
'cpg.k.lov': 'List of values',
|
|
5906
|
+
'cpg.k.list': 'List',
|
|
5907
|
+
'cpg.k.template_component': 'Template component',
|
|
5908
|
+
'cpg.k.search_config': 'Search configuration',
|
|
5909
|
+
'cpg.k.data_load_def': 'Data load definition',
|
|
5910
|
+
// ------------------------------------------------------------ Create pages with AI (sprint 164)
|
|
5911
|
+
'aib.sql_workshop_ai': 'SQL Workshop → AI',
|
|
5912
|
+
'aib.description': 'Description',
|
|
5913
|
+
'aib.propose_pages': 'Propose pages',
|
|
5914
|
+
'aib.create': 'Create',
|
|
5915
|
+
'aib.page_type': 'Page type',
|
|
5916
|
+
'aib.table_or_view': 'Table or view',
|
|
5917
|
+
'aib.page': 'Page',
|
|
5918
|
+
'aib.form_page': 'Form page',
|
|
5919
|
+
'aib.label': 'Label',
|
|
5920
|
+
'aib.why': 'Why',
|
|
5921
|
+
'aib.create_the_ticked_pages': 'Create the ticked pages',
|
|
5922
|
+
'aib.no_pages_were_proposed_describe': 'No pages were proposed: describe them differently, or check that the application\'s role may read the tables.',
|
|
5923
|
+
'aib.e_g_a_page_to': 'e.g. A page to manage employees, a calendar of leave, and a chart of salaries per department',
|
|
5924
|
+
'aib.the_ai_request_failed': 'The AI request failed.',
|
|
5925
|
+
'aib.tick_the_pages_to_create': 'Tick the pages to create.',
|
|
5926
|
+
'aib.the_app_builder_has_no': 'The App Builder has no AI service yet (an administrator chooses one under SQL Workshop → AI).',
|
|
5927
|
+
'aib.describe_the_pages_you_want': 'Describe the pages you want.',
|
|
5928
|
+
'aib.create_pages_with_ai': 'Create pages with AI',
|
|
5929
|
+
'aib.proposed_pages': 'Proposed pages',
|
|
5930
|
+
'aib.app_builder': 'App Builder',
|
|
5931
|
+
'aib.intro': 'Describe the pages you want. The App Builder\'s AI service proposes pages of the create page wizards for tables and views the application\'s role ({role}) can read; you check the proposals and create the ones you tick. Table and column names, types and {descriptions} are sent to the service, never rows.',
|
|
5932
|
+
'aib.the_owner': 'the owner',
|
|
5933
|
+
'aib.descriptions': 'descriptions',
|
|
5934
|
+
'aib.no_service': 'The App Builder has no AI service yet: an administrator chooses one under {link}.',
|
|
5935
|
+
'aib.thinking': 'Thinking…',
|
|
5936
|
+
'aib.p_create': 'Create proposal {n}',
|
|
5937
|
+
'aib.p_kind': 'Page type of proposal {n}',
|
|
5938
|
+
'aib.p_table': 'Table of proposal {n}',
|
|
5939
|
+
'aib.p_page': 'Page number of proposal {n}',
|
|
5940
|
+
'aib.p_form': 'Form page of proposal {n} (report and form)',
|
|
5941
|
+
'aib.p_label': 'Label of proposal {n}',
|
|
5942
|
+
'aib.admins_only': 'Only administrators choose the App Builder\'s AI service.',
|
|
5943
|
+
'aib.no_tables': 'The application\'s role {role} can\'t read any table or view yet.',
|
|
5944
|
+
'aib.p_invalid': 'Proposal {n}: choose a page type, a table the application can read and free page numbers.',
|
|
5945
|
+
'aib.created': 'Pages {list} created. Make sure the application\'s database role has the privileges they need.',
|
|
5946
|
+
'aib.not_created': 'No pages were created: {error}',
|
|
5947
|
+
// ------------------------------------------------------------ New applications (sprint 164)
|
|
5948
|
+
'nwa.push_off': 'Push notifications are off: they need PGKILN_SECRET_KEY in the server\'s environment.',
|
|
5949
|
+
'nwa.no_workspace': 'You are not a developer of any workspace yet: ask an administrator to add you to one.',
|
|
5950
|
+
'nwa.bad_alias': 'The alias must start with a letter and contain only a-z, 0-9, _ and - (at most 50 characters).',
|
|
5951
|
+
'nwa.enter_name': 'Enter a name for the application.',
|
|
5952
|
+
'nwa.bad_schema': 'The schema {schema} can\'t be the parsing schema of an application.',
|
|
5953
|
+
'nwa.first_user': 'Apps with a login page need a first user.',
|
|
5954
|
+
'nwa.choose_icon': 'Choose one of the icons in the list.',
|
|
5955
|
+
'nwa.choose_language': 'Choose one of the languages in the list.',
|
|
5956
|
+
'nwa.role_exists': 'The database role {role} exists already: choose another alias.',
|
|
5957
|
+
'nwa.schema_foreign': 'The schema {schema} exists already and doesn\'t belong to this workspace: choose another schema.',
|
|
5958
|
+
'nwa.choose_boilerplate': 'Choose a boilerplate application (an application of type Boilerplate).',
|
|
5959
|
+
'nwa.alias_taken': 'An application with the alias {alias} already exists.',
|
|
5960
|
+
'nwa.f.about': 'About page',
|
|
5961
|
+
'nwa.fh.about': 'An About page in a Help menu of the header.',
|
|
5962
|
+
'nwa.f.access': 'Access control',
|
|
5963
|
+
'nwa.fh.access': 'Authorization schemes for the roles admin, contributor and reader, to put on pages, regions and buttons.',
|
|
5964
|
+
'nwa.f.activity': 'Activity reporting',
|
|
5965
|
+
'nwa.fh.activity': 'A page for administrators with the page views per day and the latest activity.',
|
|
5966
|
+
'nwa.f.feedback': 'Feedback',
|
|
5967
|
+
'nwa.fh.feedback': 'Users send feedback from the header; you read it under Activity → Feedback.',
|
|
5968
|
+
'nwa.f.theme': 'Theme style selection',
|
|
5969
|
+
'nwa.fh.theme': 'Users may choose the light or the dark theme.',
|
|
5970
|
+
'nwa.f.pwa': 'Install as an app (PWA)',
|
|
5971
|
+
'nwa.fh.pwa': 'Installable on phones and desktops, with offline pages.',
|
|
5972
|
+
'nwa.f.push': 'Push notifications',
|
|
5973
|
+
'nwa.fh.push': 'Notifications to the users\' devices (with Install as an app).',
|
|
5974
|
+
// ------------------------------------------------------------ Create Application wizard (sprint 164)
|
|
5975
|
+
'aw.k.report_form': 'Interactive report with form',
|
|
5976
|
+
'aw.k.facets': 'Faceted search',
|
|
5977
|
+
'aw.k.cards': 'Cards',
|
|
5978
|
+
'aw.k.calendar': 'Calendar',
|
|
5979
|
+
'aw.k.master_detail': 'Master detail',
|
|
5980
|
+
'aw.k.grid': 'Interactive grid',
|
|
5981
|
+
'aw.k.report': 'Report',
|
|
5982
|
+
'aw.k.none': 'No page',
|
|
5983
|
+
'aw.at_most_tables': 'Choose at most {n} tables and views.',
|
|
5984
|
+
'aw.no_dashboard': 'No dashboard: no table has a foreign key, or a text, yes/no or date column whose statistics show a few values that repeat (ANALYZE the tables first).',
|
|
5985
|
+
'aw.not_on_dashboard': 'Not on the dashboard: {tables} (row level security: the application\'s role may see none of the rows).',
|
|
5986
|
+
'aw.paste_title': 'Create application from pasted data',
|
|
5987
|
+
'aw.pasted_data': 'Pasted data',
|
|
5988
|
+
'aw.paste_the_data': 'Paste the data.',
|
|
5989
|
+
'aw.paste_max': 'At most {mb} MB of text can be pasted; upload a file instead.',
|
|
5990
|
+
'aw.created': 'Application {alias} created.',
|
|
5991
|
+
'aw.created_pages': 'Application {alias} created with {n} page(s) besides Home.',
|
|
5992
|
+
'aw.existing_account': 'The existing account {user} got the admin role (its password was not changed).',
|
|
5993
|
+
'aw.src.file': 'From a file',
|
|
5994
|
+
'aw.srch.file': 'CSV, Excel, JSON or XML: a table per sheet with its rows',
|
|
5995
|
+
'aw.src.paste': 'From pasted data',
|
|
5996
|
+
'aw.srch.paste': 'Rows copied from a spreadsheet, or CSV text',
|
|
5997
|
+
'aw.src.blueprints': 'From a blueprint',
|
|
5998
|
+
'aw.srch.blueprints': 'Tables, pages, menu and sample rows described once (or drafted by AI)',
|
|
5999
|
+
'aw.src.gallery': 'From the App Gallery',
|
|
6000
|
+
'aw.srch.gallery': 'A starter application',
|
|
6001
|
+
'aw.rls_on': 'Row level security is on ({n} policies): each user sees only the rows the policies allow',
|
|
6002
|
+
'aw.rls_on_1': 'Row level security is on (1 policy): each user sees only the rows the policies allow',
|
|
6003
|
+
'aw.icon': 'Icon',
|
|
6004
|
+
'aw.not_analyzed': 'not analyzed',
|
|
6005
|
+
'aw.about_rows': 'about {n} row(s)',
|
|
6006
|
+
'aw.view': 'view',
|
|
6007
|
+
'aw.no_key': ', no single-column key: no form',
|
|
6008
|
+
'aw.paged_grid': ': a paged grid',
|
|
6009
|
+
'aw.no_relations': '{schema} has no tables or views.',
|
|
6010
|
+
'aw.paste_intro': 'Paste rows copied from a spreadsheet, or CSV or TSV text: the delimiter (tab, comma, semicolon or |) is detected. Next you check the proposed table and its columns, as for a file. {link} instead.',
|
|
6011
|
+
'aw.upload_a_file': 'Upload a file',
|
|
6012
|
+
'aw.bp_option': '{name} (boilerplate)',
|
|
6013
|
+
'aw.create_an_application_from_pasted': 'Create an application from pasted data',
|
|
6014
|
+
'aw.data': 'Data',
|
|
6015
|
+
'aw.first_row_contains_column_names': 'First row contains column names',
|
|
6016
|
+
'aw.cancel': 'Cancel',
|
|
6017
|
+
'aw.create_an_application': 'Create an application',
|
|
6018
|
+
'aw.choose_one_of_the_schemas': 'Choose one of the schemas in the list.',
|
|
6019
|
+
'aw.name': 'Name',
|
|
6020
|
+
'aw.a_hero_with_the_name': 'a hero with the name and icon, and a card per page',
|
|
6021
|
+
'aw.choose_a_schema_under_data': 'Choose a schema under Data for a page per table, or add pages with the page wizards later.',
|
|
6022
|
+
'aw.alias_url': 'Alias (URL)',
|
|
6023
|
+
'aw.lowercase_e_g_inventory_a': 'lowercase, e.g. inventory → /a/inventory; follows the name until you change it',
|
|
6024
|
+
'aw.advanced': 'Advanced',
|
|
6025
|
+
'aw.create_application': 'Create application',
|
|
6026
|
+
'aw.next': 'Next',
|
|
6027
|
+
'aw.rls_no_policies': 'RLS, no policies',
|
|
6028
|
+
'aw.show_its_tables': 'Show its tables',
|
|
6029
|
+
'aw.home': 'Home',
|
|
6030
|
+
'aw.row_level_security_is_on': 'Row level security is on without policies: the application\'s role sees no rows (unless it owns the table or bypasses row level security)',
|
|
6031
|
+
'aw.other_ways_to_start': 'Other ways to start',
|
|
6032
|
+
'aw.pages_on_the_tables_of': 'Pages on the tables of',
|
|
6033
|
+
'aw.description': 'Description',
|
|
6034
|
+
'aw.theme_style': 'Theme style',
|
|
6035
|
+
'aw.navigation': 'Navigation',
|
|
6036
|
+
'aw.accent_colour': 'Accent colour',
|
|
6037
|
+
'aw.dashboard_a_chart_per_table': 'Dashboard: a chart per table with the number of rows per parent row (a foreign key) or per value of a column whose values repeat',
|
|
6038
|
+
'aw.authentication': 'Authentication',
|
|
6039
|
+
'aw.first_user': 'First user',
|
|
6040
|
+
'aw.password': 'Password',
|
|
6041
|
+
'aw.language': 'Language',
|
|
6042
|
+
'aw.start_from': 'Start from',
|
|
6043
|
+
'aw.names_the_application_and_the': 'Names the application and the table (you can change both in the next step).',
|
|
6044
|
+
'aw.one_line_for_the_home': 'One line for the home and About pages',
|
|
6045
|
+
'aw.of_the_theme_style_the': 'Of the theme style; the default stores nothing.',
|
|
6046
|
+
'aw.e_g_your_name': 'e.g. your name',
|
|
6047
|
+
'aw.gets_the_admin_role_an': 'Gets the admin role. An existing account in Users is reused.',
|
|
6048
|
+
'aw.for_a_new_account_at': 'For a new account; at least 8 characters.',
|
|
6049
|
+
'aw.a_new_empty_schema_home': '- a new, empty schema (Home only) -',
|
|
6050
|
+
'aw.iris_light_body_dark_header': 'Iris (light body, dark header and menu)',
|
|
6051
|
+
'aw.lavender_rounded_indigo': 'Lavender (rounded, indigo)',
|
|
6052
|
+
'aw.standard_blue_navy_header': 'Standard (blue, navy header)',
|
|
6053
|
+
'aw.side_menu': 'Side menu',
|
|
6054
|
+
'aw.top_menu': 'Top menu',
|
|
6055
|
+
'aw.app_users_login_page': 'App users (login page)',
|
|
6056
|
+
'aw.none_public': 'None (public)',
|
|
6057
|
+
'aw.a_blank_application': '- a blank application -',
|
|
6058
|
+
'aw.paste_delimited_text_csv_or': 'Paste delimited text (CSV or TSV); upload JSON, XML or Excel files with From a file.',
|
|
6059
|
+
'aw.the_data_has_column_names': 'The data has column names but no rows.',
|
|
6060
|
+
'aw.choose_a_boilerplate_application_an': 'Choose a boilerplate application (an application of type Boilerplate).',
|
|
6061
|
+
'aw.choose_at_least_one_table': 'Choose at least one table or view.',
|
|
6062
|
+
'aw.a_boilerplate_application_brings_its': 'A boilerplate application brings its own pages: choose no tables, or no boilerplate.',
|
|
6063
|
+
'aw.application': 'Application',
|
|
6064
|
+
'aw.appearance': 'Appearance',
|
|
6065
|
+
'aw.pages': 'Pages',
|
|
6066
|
+
'aw.features': 'Features',
|
|
6067
|
+
'aw.settings': 'Settings',
|
|
6068
|
+
'aw.app_builder': 'App Builder',
|
|
6069
|
+
'aw.create': 'Create',
|
|
6070
|
+
// ------------------------------------------------------------ Create application from a file (sprint 164)
|
|
6071
|
+
'aff.table_exists': 'The table {table} already exists: choose another name.',
|
|
6072
|
+
'aff.no_dashboard': 'No dashboard: no text, yes/no or date column has a few values that repeat, to count the rows by.',
|
|
6073
|
+
'aff.no_facets': 'No faceted search: no column suits a filter.',
|
|
6074
|
+
'aff.choose_file': 'Choose a file.',
|
|
6075
|
+
'aff.too_large': 'The file is larger than {mb} MB.',
|
|
6076
|
+
'aff.col_name_head': 'Column name (empty = skip)',
|
|
6077
|
+
'aff.col_name_for': 'Column name for {col}',
|
|
6078
|
+
'aff.type_of': 'Type of {col}',
|
|
6079
|
+
'aff.bad_schema': 'The schema {schema} can\'t be the parsing schema of an application.',
|
|
6080
|
+
'aff.loaded': '{table}: {n} row(s) loaded.',
|
|
6081
|
+
'aff.loaded_skipped': '{table}: {n} row(s) loaded, {skipped} skipped.',
|
|
6082
|
+
'aff.created': 'Application {alias} created.',
|
|
6083
|
+
'aff.existing_account': 'The existing account {user} got the admin role (its password was not changed).',
|
|
6084
|
+
'aff.page_item': 'Page {n}: {label}',
|
|
6085
|
+
'aff.intro': 'Upload a spreadsheet: CSV or TSV (UTF-8 or Windows-1252; the delimiter is detected), Excel .xlsx (each sheet becomes a table, up to {sheets}), JSON (an array of objects; an object with several arrays becomes several tables) or XML, up to {mb} MB. Next you check the proposed tables and their columns. The application gets its own schema and database role, a table with the rows, a report and form, and optionally a dashboard and a faceted search. {paste} instead, or {tables}.',
|
|
6086
|
+
'aff.schema_help_1': 'A database role app_<alias> is created with access to this schema only; the app runs as that role. The table is created in this schema.',
|
|
6087
|
+
'aff.schema_help_n': 'A database role app_<alias> is created with access to this schema only; the app runs as that role. The tables are created in this schema.',
|
|
6088
|
+
'aff.sheets_info': '{file}: {n} sheets ({list}).',
|
|
6089
|
+
'aff.arrays_info': '{file}: {n} arrays ({list}).',
|
|
6090
|
+
'aff.sheet_rows': '{name}: {n} row(s)',
|
|
6091
|
+
'aff.info': '{file}: {rows} row(s), {cols} column(s)',
|
|
6092
|
+
'aff.delimiter': ', delimiter {d}',
|
|
6093
|
+
'aff.tab': 'tab',
|
|
6094
|
+
'aff.xml_rows': ', XML rows {path}',
|
|
6095
|
+
'aff.first_10': '(first 10 shown)',
|
|
6096
|
+
'aff.application_created': 'Application created',
|
|
6097
|
+
'aff.table': 'Table',
|
|
6098
|
+
'aff.row': 'Row',
|
|
6099
|
+
'aff.error': 'Error',
|
|
6100
|
+
'aff.the_first_errors_are_shown': 'The first errors are shown.',
|
|
6101
|
+
'aff.create_an_application_from_a': 'Create an application from a file',
|
|
6102
|
+
'aff.paste_data': 'Paste data',
|
|
6103
|
+
'aff.start_from_existing_tables': 'start from existing tables',
|
|
6104
|
+
'aff.file': 'File',
|
|
6105
|
+
'aff.first_row_contains_column_names': 'First row contains column names',
|
|
6106
|
+
'aff.cancel': 'Cancel',
|
|
6107
|
+
'aff.paste_other_data': 'Paste other data',
|
|
6108
|
+
'aff.choose_another_file': 'Choose another file',
|
|
6109
|
+
'aff.page_1_is_the_home': 'Page 1 is the Home page; each table gets an interactive report with a modal form to create, change and delete rows, and a navigation entry. More pages can be added later with the page wizards.',
|
|
6110
|
+
'aff.create_application': 'Create application',
|
|
6111
|
+
'aff.file_column': 'File column',
|
|
6112
|
+
'aff.values': 'Values',
|
|
6113
|
+
'aff.type': 'Type',
|
|
6114
|
+
'aff.page_1_is_the_home_2': 'Page 1 is the Home page; page 2 an interactive report of the table with a modal form (page 3) to create, change and delete rows. Each page gets a navigation entry. More pages can be added later with the page wizards.',
|
|
6115
|
+
'aff.edit_the_application': 'Edit the application',
|
|
6116
|
+
'aff.run': 'Run',
|
|
6117
|
+
'aff.create_another': 'Create another',
|
|
6118
|
+
'aff.next': 'Next',
|
|
6119
|
+
'aff.name': 'Name',
|
|
6120
|
+
'aff.alias_url': 'Alias (URL)',
|
|
6121
|
+
'aff.parsing_schema': 'Parsing schema',
|
|
6122
|
+
'aff.authentication': 'Authentication',
|
|
6123
|
+
'aff.first_user': 'First user',
|
|
6124
|
+
'aff.password': 'Password',
|
|
6125
|
+
'aff.dashboard_a_chart_per_table': 'Dashboard: a chart per table with the number of rows per parent row (a foreign key) or per value of a text, yes/no or date column',
|
|
6126
|
+
'aff.skip_rows_with_errors_otherwise': 'Skip rows with errors (otherwise nothing is created when a row fails)',
|
|
6127
|
+
'aff.table_name': 'Table name',
|
|
6128
|
+
'aff.dashboard_a_chart_with_the': 'Dashboard: a chart with the number of rows per value of a text, yes/no or date column',
|
|
6129
|
+
'aff.faceted_search_a_report_with': 'Faceted search: a report with a filter panel (values with counts, ranges and a search field)',
|
|
6130
|
+
'aff.lowercase_e_g_inventory_a': 'lowercase, e.g. inventory → /a/inventory',
|
|
6131
|
+
'aff.e_g_your_name': 'e.g. your name',
|
|
6132
|
+
'aff.gets_the_admin_role_an': 'Gets the admin role. An existing account in Users is reused.',
|
|
6133
|
+
'aff.for_a_new_account_at': 'For a new account; at least 8 characters.',
|
|
6134
|
+
'aff.in_the_application_s_schema': 'In the application\'s schema; the table gets an identity primary key id.',
|
|
6135
|
+
'aff.new_schema_named_after_the': '- new schema named after the alias -',
|
|
6136
|
+
'aff.app_users_login_page': 'App users (login page)',
|
|
6137
|
+
'aff.none_public': 'None (public)',
|
|
6138
|
+
'aff.give_at_least_one_column': 'Give at least one column a name.',
|
|
6139
|
+
'aff.table_name_a_lower_case': 'Table name: a lower-case name (letters, digits and _) without a schema; the table goes into the application\'s schema.',
|
|
6140
|
+
'aff.the_file_has_column_names': 'The file has column names but no rows.',
|
|
6141
|
+
'aff.skipped_rows': 'Skipped rows',
|
|
6142
|
+
'aff.foreign_keys': 'Foreign keys',
|
|
6143
|
+
'aff.pages': 'Pages',
|
|
6144
|
+
'aff.application': 'Application',
|
|
6145
|
+
'aff.preview': 'Preview',
|
|
6146
|
+
'aff.create_application_from_a_file': 'Create application from a file',
|
|
6147
|
+
'aff.app_builder': 'App Builder',
|
|
6148
|
+
'aff.create': 'Create',
|
|
6149
|
+
'aff.from_a_file': 'From a file',
|
|
6150
|
+
// ------------------------------------------------------------ Workbooks with several sheets (sprint 164)
|
|
6151
|
+
'ash.bad_xlsx': 'This is not a readable Excel (.xlsx) file: {error}',
|
|
6152
|
+
'ash.sheet_error': 'Sheet {sheet}: {error}',
|
|
6153
|
+
'ash.too_many_sheets': 'The workbook has {n} sheets with rows; at most {max} become tables at once.',
|
|
6154
|
+
'ash.too_many_rows_wb': 'The workbook has {n} rows; at most {max} can be loaded at once.',
|
|
6155
|
+
'ash.too_many_arrays': 'The JSON has {n} arrays; at most {max} become tables at once.',
|
|
6156
|
+
'ash.too_many_rows': 'The file has {n} rows; at most {max} can be loaded at once.',
|
|
6157
|
+
'ash.sheet': 'Sheet {name}',
|
|
6158
|
+
'ash.bad_table_name': '{where}: the table name must be lower-case (letters, digits and _) without a schema; the table goes into the application\'s schema.',
|
|
6159
|
+
'ash.no_columns': '{where}: give at least one column a name.',
|
|
6160
|
+
'ash.bad_column': '{where}: "{col}" is not a valid column name.',
|
|
6161
|
+
'ash.bad_type': '{where}: unknown column type {type}.',
|
|
6162
|
+
'ash.dup_columns': '{where}: column names must be unique.',
|
|
6163
|
+
'ash.id_taken': '{where}: "id" is the name of the new key column; rename the file column or choose it as the primary key.',
|
|
6164
|
+
'ash.table_exists': 'The table {table} already exists: choose another name.',
|
|
6165
|
+
'ash.fk_failed': 'Foreign key {fk}: {error} Untick it, or fix the data.',
|
|
6166
|
+
'ash.no_dashboard': 'No dashboard: no table has a foreign key or a text, yes/no or date column with a few values that repeat, to count the rows by.',
|
|
6167
|
+
'ash.create_from_sheet': 'Create a table from this sheet ({rows} row(s), {cols} column(s))',
|
|
6168
|
+
'ash.col_name_head': 'Column name (empty = skip)',
|
|
6169
|
+
'ash.col_name_for': 'Column name for {col} ({sheet})',
|
|
6170
|
+
'ash.type_of': 'Type of {col} ({sheet})',
|
|
6171
|
+
'ash.missing': '{n} row(s) have a value that {key} doesn\'t have.',
|
|
6172
|
+
'ash.fk_intro': 'Proposed where a column matches another table\'s primary key; ticked when every value is found. Forms get a select list for each foreign key.',
|
|
6173
|
+
'ash.table_name': 'Table name',
|
|
6174
|
+
'ash.primary_key': 'Primary key',
|
|
6175
|
+
'ash.a_whole_number_key_column': 'A whole-number key column becomes an identity key; another key column is unique, next to a new id.',
|
|
6176
|
+
'ash.file_column': 'File column',
|
|
6177
|
+
'ash.values': 'Values',
|
|
6178
|
+
'ash.type': 'Type',
|
|
6179
|
+
'ash.no_column_matches_another_table': 'No column matches another table\'s key. A column matches when it is named like the key column (dept_id), or like the other table and its key (department_id, department_code), with the same type.',
|
|
6180
|
+
'ash.update_the_proposals': 'Update the proposals',
|
|
6181
|
+
'ash.a_new_column_id_identity': '- a new column id (identity) -',
|
|
6182
|
+
'ash.the_file_has_column_names': 'The file has column names but no rows.',
|
|
6183
|
+
'ash.choose_at_least_one_sheet': 'Choose at least one sheet.',
|
|
6184
|
+
'ash.each_sheet_needs_a_table': 'Each sheet needs a table name of its own.',
|
|
6185
|
+
'ash.foreign_keys': 'Foreign keys',
|
|
6186
|
+
// ------------------------------------------------------------ Theme Roller (sprint 164)
|
|
6187
|
+
'thr.as_base': '- as the base -',
|
|
6188
|
+
'thr.as_app': '- as the application -',
|
|
6189
|
+
'thr.default_base_style': 'Default (the base style\'s header and menu)',
|
|
6190
|
+
'thr.preview_text': 'Text with a {link} and a {badge}.',
|
|
6191
|
+
'thr.link': 'link',
|
|
6192
|
+
'thr.badge': 'badge',
|
|
6193
|
+
'thr.value': 'Value',
|
|
6194
|
+
'thr.c_accent': 'Accent colour',
|
|
6195
|
+
'thr.c_header': 'Header colour',
|
|
6196
|
+
'thr.c_accent_dark': 'Accent colour in dark mode',
|
|
6197
|
+
'thr.c_header_dark': 'Header colour in dark mode',
|
|
6198
|
+
'thr.c_strip': 'Header strip colour',
|
|
6199
|
+
'thr.c_strip_dark': 'Header strip colour in dark mode',
|
|
6200
|
+
'thr.delete_confirm': 'Delete style {name}?',
|
|
6201
|
+
'thr.edit_style': 'Edit style {name}',
|
|
6202
|
+
'thr.max_styles': 'At most {n} styles per application.',
|
|
6203
|
+
'thr.options_intro': 'Regions and buttons have {options} in the Page Designer (group Appearance): CSS classes from a fixed list, which these styles also affect.',
|
|
6204
|
+
'thr.regions_list': 'Regions: {list}',
|
|
6205
|
+
'thr.buttons_list': 'Buttons: {list}',
|
|
6206
|
+
'thr.title': '{app} Theme Roller',
|
|
6207
|
+
'thr.gone': 'Style {name} no longer exists.',
|
|
6208
|
+
'thr.exists': 'There is already a style named {name}.',
|
|
6209
|
+
'thr.saved': 'Style {name} saved.',
|
|
6210
|
+
'thr.deleted': 'Style {name} deleted.',
|
|
6211
|
+
'thr.variants_intro': 'Several saved styles for this application (APEX: theme styles). The base style ({base}) and colours under {settings} are what users see without a style; each style below changes the colours and may set a font, font size and corners. The colours apply to the light theme, the dark-mode colours to the dark theme (pick light colours there); fonts, sizes and corners to both.',
|
|
6212
|
+
'thr.use_this_colour_else_the': 'Use this colour (else the base colour)',
|
|
6213
|
+
'thr.or_the_value_of_an': '…or the value of an item',
|
|
6214
|
+
'thr.a_dynamic_colour_the_item': 'A dynamic colour: the item\'s value when it is #rrggbb (else the base colour).',
|
|
6215
|
+
'thr.preview': 'Preview',
|
|
6216
|
+
'thr.employees': 'Employees',
|
|
6217
|
+
'thr.employee_list': 'Employee list',
|
|
6218
|
+
'thr.directory': 'Directory',
|
|
6219
|
+
'thr.reports': 'Reports',
|
|
6220
|
+
'thr.a_region': 'A region',
|
|
6221
|
+
'thr.a_field': 'A field',
|
|
6222
|
+
'thr.cancel': 'Cancel',
|
|
6223
|
+
'thr.save': 'Save',
|
|
6224
|
+
'thr.condition_sql': 'Condition (SQL)',
|
|
6225
|
+
'thr.optional_a_boolean_expression_with': 'Optional. A boolean expression with bind variables, run as the application\'s role on every page: users who did not choose a style get the first style whose condition holds, else the default style (APEX: conditional theme styles).',
|
|
6226
|
+
'thr.use_this_colour_else_the_2': 'Use this colour (else the accent colour)',
|
|
6227
|
+
'thr.settings_theme': 'Settings → Theme',
|
|
6228
|
+
'thr.name': 'Name',
|
|
6229
|
+
'thr.accent': 'Accent',
|
|
6230
|
+
'thr.header': 'Header',
|
|
6231
|
+
'thr.dark_accent': 'Dark accent',
|
|
6232
|
+
'thr.dark_header': 'Dark header',
|
|
6233
|
+
'thr.navigation': 'Navigation',
|
|
6234
|
+
'thr.strip': 'Strip',
|
|
6235
|
+
'thr.font': 'Font',
|
|
6236
|
+
'thr.font_size': 'Font size',
|
|
6237
|
+
'thr.corners': 'Corners',
|
|
6238
|
+
'thr.actions': 'Actions',
|
|
6239
|
+
'thr.delete': 'Delete',
|
|
6240
|
+
'thr.no_styles_yet_the_application': 'No styles yet: the application uses its base colours.',
|
|
6241
|
+
'thr.users_may_choose_a_style': 'Users may choose a style',
|
|
6242
|
+
'thr.adds_the_styles_to_the': 'Adds the styles to the user menu and My account (APEX: "Enable End Users to Choose Theme Style"). A user\'s choice is kept per application on the account; only this application\'s styles can be chosen.',
|
|
6243
|
+
'thr.template_options': 'Template options',
|
|
6244
|
+
'thr.edit': 'Edit',
|
|
6245
|
+
'thr.preview_of_the_style': 'Preview of the style',
|
|
6246
|
+
'thr.sample_menu': 'Sample menu',
|
|
6247
|
+
'thr.navigation_appearance': 'Navigation appearance',
|
|
6248
|
+
'thr.default_style': 'Default style',
|
|
6249
|
+
'thr.e_g_ocean': 'e.g. Ocean',
|
|
6250
|
+
'thr.shown_to_users_who_may': 'Shown to users who may choose a style. 1–30 letters, digits, spaces, - or _.',
|
|
6251
|
+
'thr.as_the_application': '- as the application -',
|
|
6252
|
+
'thr.default_the_base_style_s': 'Default (the base style\'s header and menu)',
|
|
6253
|
+
'thr.as_the_base': '- as the base -',
|
|
6254
|
+
'thr.none_the_base_style_and': 'None (the base style and colours)',
|
|
6255
|
+
'thr.default': 'Default',
|
|
6256
|
+
'thr.save_style': 'Save style',
|
|
6257
|
+
'thr.add_style': 'Add style',
|
|
6258
|
+
'thr.add_a_style': 'Add a style',
|
|
6259
|
+
'thr.theme_roller_settings_saved': 'Theme Roller settings saved.',
|
|
6260
|
+
'thr.what_everyone_sees_unless_they': 'What everyone sees unless they chose another style.',
|
|
6261
|
+
'thr.theme_roller_style_variants': 'Theme Roller: style variants',
|
|
6262
|
+
'thr.app_builder': 'App Builder',
|
|
6263
|
+
'thr.settings': 'Settings',
|
|
6264
|
+
'thr.theme_roller': 'Theme Roller',
|
|
6265
|
+
// ------------------------------------------------------------ Features (sprint 164)
|
|
6266
|
+
'feat.f.access': 'Access control',
|
|
6267
|
+
'feat.h.access': 'Authorization schemes for the roles admin, contributor and reader, to put on pages, regions and buttons.',
|
|
6268
|
+
'feat.f.activity': 'Activity reporting',
|
|
6269
|
+
'feat.h.activity': 'A page for administrators with the page views per day and the latest activity.',
|
|
6270
|
+
'feat.f.config': 'Configuration options',
|
|
6271
|
+
'feat.h.config': 'A page where the application\'s administrators switch build options on and off while it runs.',
|
|
6272
|
+
'feat.f.email': 'E-mail reporting',
|
|
6273
|
+
'feat.h.email': 'A weekly e-mail to the administrators with the application\'s activity, the rows as a CSV file.',
|
|
6274
|
+
'feat.f.feedback': 'Feedback',
|
|
6275
|
+
'feat.h.feedback': 'Users send feedback from the header; you read it under the application\'s Activity → Feedback.',
|
|
6276
|
+
'feat.f.about': 'About page',
|
|
6277
|
+
'feat.h.about': 'An About page in a Help menu of the header.',
|
|
6278
|
+
'feat.f.login': 'Login page',
|
|
6279
|
+
'feat.h.login': 'The application\'s own login page instead of the built-in sign-in page, editable in the Page Designer.',
|
|
6280
|
+
'feat.f.theme': 'Theme style selection',
|
|
6281
|
+
'feat.h.theme': 'Users choose the light or the dark theme in their user menu (Appearance).',
|
|
6282
|
+
'feat.f.push': 'Push notifications',
|
|
6283
|
+
'feat.h.push': 'Notifications to the users\' devices, from processes and SQL (meta.send_push); the application becomes installable.',
|
|
6284
|
+
'feat.a.access_1': 'Authorization schemes CONTRIBUTOR (role admin or contributor) and READER (admin, contributor or reader), and ADMIN when the application has none',
|
|
6285
|
+
'feat.a.access_2': 'Give users their roles under Shared Components → Users (application access)',
|
|
6286
|
+
'feat.a.activity_1': 'Page {page} "Activity" (authorization ADMIN): a chart of the page views per day and a report of the latest activity, from meta.app_activity()',
|
|
6287
|
+
'feat.a.activity_2': 'A navigation entry Activity for administrators',
|
|
6288
|
+
'feat.a.activity_3': 'Authorization scheme ADMIN (role admin) when the application has none',
|
|
6289
|
+
'feat.page_in_use': 'Page {page} is in use by another page.',
|
|
6290
|
+
'feat.a.config_1': 'Page {page} "Configuration" (authorization ADMIN): the configurable build options as switches, and Save',
|
|
6291
|
+
'feat.a.config_2': 'The build options ticked below become configurable (Shared Components → Build options → Configurable)',
|
|
6292
|
+
'feat.a.config_3': 'A navigation entry Configuration for administrators',
|
|
6293
|
+
'feat.a.email_1': 'Application setting EMAIL_REPORT_TO: the addresses the report goes to (Shared Components → Application settings)',
|
|
6294
|
+
'feat.a.email_2': 'Automation EMAIL_REPORTING, every Monday at 07:00 UTC: meta.send_activity_report() with the last 7 days (Shared Components → Automations)',
|
|
6295
|
+
'feat.a.email_3': 'Mail goes out through the application\'s mail service (Workspace utilities → Mail services); without addresses nothing is sent',
|
|
6296
|
+
'feat.not_email': '"{address}" is not an e-mail address.',
|
|
6297
|
+
'feat.too_many': 'Too many addresses.',
|
|
6298
|
+
'feat.a.feedback_1': 'A Feedback entry in the header for signed-in users (Settings → Feedback)',
|
|
6299
|
+
'feat.a.feedback_2': 'Their feedback, with the page, under Activity → Feedback in the builder',
|
|
6300
|
+
'feat.a.about_1': 'Page {page} "About" with the application\'s name and the pages of its menu',
|
|
6301
|
+
'feat.a.about_2': 'A Help menu with About in the navigation bar (list NAVBAR), unless the application has a navigation bar list already',
|
|
6302
|
+
'feat.a.login_1': 'Page 9999 (or the next free number) "Login": public, page template Minimal, with a Login region',
|
|
6303
|
+
'feat.a.login_2': 'It becomes the login page (Settings → Sign-in methods)',
|
|
6304
|
+
'feat.no_signin': 'The application has no sign-in (authentication none).',
|
|
6305
|
+
'feat.a.theme_1': 'Appearance in the user menu: light, dark or the device\'s setting (Settings → Theme → Users may choose)',
|
|
6306
|
+
'feat.a.push_1': 'Install as an app (PWA): a manifest, a service worker and an Install button',
|
|
6307
|
+
'feat.a.push_2': 'Push notifications: users subscribe on My account; send with the send_push process or meta.send_push',
|
|
6308
|
+
'feat.a.push_3': 'The application\'s push key pair (kept encrypted)',
|
|
6309
|
+
'feat.push_needs_key': 'Push notifications need PGKILN_SECRET_KEY in the server\'s environment.',
|
|
6310
|
+
'feat.send_to': 'Send it to',
|
|
6311
|
+
'feat.send_to_help': 'Comma separated; may stay empty and be set later in Shared Components → Application settings (EMAIL_REPORT_TO).',
|
|
6312
|
+
'feat.cbo': 'Configurable build options',
|
|
6313
|
+
'feat.no_build_options': 'The application has no build options yet: add them under Shared Components → Build options and tick {configurable}; the page shows them as they come.',
|
|
6314
|
+
'feat.configurable': 'Configurable',
|
|
6315
|
+
'feat.installed_already': '{feature} is installed in this application already.',
|
|
6316
|
+
'feat.add': 'Add {feature}',
|
|
6317
|
+
'feat.title': '{feature} · {app}',
|
|
6318
|
+
'feat.added': '{feature} added.',
|
|
6319
|
+
'feat.back_to_the_features': 'Back to the features',
|
|
6320
|
+
'feat.cancel': 'Cancel',
|
|
6321
|
+
'feat.it_added': 'It added',
|
|
6322
|
+
'feat.it_adds': 'It adds',
|
|
6323
|
+
'feat.app_builder': 'App Builder',
|
|
6324
|
+
'feat.create_page': 'Create page',
|
|
6325
|
+
// ------------------------------------------------------------ OpenTelemetry (sprint 164)
|
|
6326
|
+
'tel.o.builder': 'set here',
|
|
6327
|
+
'tel.o.environment': 'environment variable',
|
|
6328
|
+
'tel.o.default': 'default',
|
|
6329
|
+
'tel.intro': 'Traces and logs of this workspace\'s applications. {state} A collector of the workspace\'s own is reached through the installation\'s allow-list and this workspace\'s {network} list.',
|
|
6330
|
+
'tel.endpoint_help': 'The OTLP/HTTP base address; /v1/traces, /v1/logs and /v1/metrics are added. In effect: {value} {origin} ({env}).',
|
|
6331
|
+
'tel.none': 'none',
|
|
6332
|
+
'tel.service_help': 'service.name of everything sent (OTEL_SERVICE_NAME). In effect: {value}.',
|
|
6333
|
+
'tel.new_token': 'The new token (shown once): {token}',
|
|
6334
|
+
'tel.test_failed': 'The collector did not take the test span: {problem}',
|
|
6335
|
+
'tel.send_traces_logs_and_metrics': 'Send traces, logs and metrics of the applications to your own monitoring (Grafana, Jaeger, Datadog, Honeycomb, OCI APM, or anything that speaks OTLP) through an OpenTelemetry Collector. A trace per page request, with a span for each SQL statement, REST data source call, AI request and tool call; mail and workflow steps as traces of their own. pgkiln sends OTLP over HTTP as JSON. The standard `OTEL_*` environment variables work too; a value set here wins. Chapter 1 of the guide (Monitoring with OpenTelemetry) explains every choice.',
|
|
6336
|
+
'tel.headers': 'Headers',
|
|
6337
|
+
'tel.remove_the_headers': 'Remove the headers',
|
|
6338
|
+
'tel.opentelemetry': 'OpenTelemetry',
|
|
6339
|
+
'tel.only_administrators_set_up_opentelemetry': 'Only administrators set up OpenTelemetry for the installation.',
|
|
6340
|
+
'tel.send': 'Send',
|
|
6341
|
+
'tel.save': 'Save',
|
|
6342
|
+
'tel.send_a_test_span': 'Send a test span',
|
|
6343
|
+
'tel.since_this_server_started_each': 'Since this server started. Each server of the installation sends its own.',
|
|
6344
|
+
'tel.collector': 'Collector',
|
|
6345
|
+
'tel.sending': 'Sending',
|
|
6346
|
+
'tel.off': '(off)',
|
|
6347
|
+
'tel.remove_the_token': 'Remove the token',
|
|
6348
|
+
'tel.a_workspace_s_administrators_may': 'A workspace\'s administrators may switch its applications off, or send them to a collector of their own as well.',
|
|
6349
|
+
'tel.workspace': 'Workspace',
|
|
6350
|
+
'tel.applications': 'Applications',
|
|
6351
|
+
'tel.sends': 'Sends',
|
|
6352
|
+
'tel.no_workspaces': 'No workspaces.',
|
|
6353
|
+
'tel.only_the_workspace_s_administrators': 'Only the workspace\'s administrators change its OpenTelemetry setting.',
|
|
6354
|
+
'tel.network_access': 'network access',
|
|
6355
|
+
'tel.the_applications_send': 'The applications send',
|
|
6356
|
+
'tel.remove_the_metrics_token_scrapers': 'Remove the metrics token? Scrapers that use it get 401.',
|
|
6357
|
+
'tel.send_to_this_collector': 'Send to this collector',
|
|
6358
|
+
'tel.collector_url': 'Collector URL',
|
|
6359
|
+
'tel.service_name': 'Service name',
|
|
6360
|
+
'tel.sample_ratio': 'Sample ratio',
|
|
6361
|
+
'tel.user': 'User',
|
|
6362
|
+
'tel.traces': 'Traces',
|
|
6363
|
+
'tel.logs_errors_refused_access_and': 'Logs: errors, refused access and failed sign-ins',
|
|
6364
|
+
'tel.include_values': 'Include values',
|
|
6365
|
+
'tel.trace_builder_requests_too': 'Trace builder requests too',
|
|
6366
|
+
'tel.browser_spans': 'Browser spans',
|
|
6367
|
+
'tel.prometheus_endpoint_metrics': 'Prometheus endpoint /metrics',
|
|
6368
|
+
'tel.as_the_instance_does': 'As the instance does',
|
|
6369
|
+
'tel.nothing': 'Nothing',
|
|
6370
|
+
'tel.also_to_our_own_collector': 'Also to our own collector',
|
|
6371
|
+
'tel.own_collector_url': 'Own collector URL',
|
|
6372
|
+
'tel.include_values_for_the_own': 'Include values for the own collector',
|
|
6373
|
+
'tel.share_of_traces_sent_0': 'Share of traces sent, 0 to 1 (OTEL_TRACES_SAMPLER_ARG). A trace with an error is always sent. A caller\'s traceparent decides for its trace.',
|
|
6374
|
+
'tel.https_otlp_example_com': 'https://otlp.example.com',
|
|
6375
|
+
'tel.the_otlp_http_base_address': 'The OTLP/HTTP base address; /v1/traces and /v1/logs are added.',
|
|
6376
|
+
'tel.hashed_the_same_user_gives': 'Hashed (the same user gives the same value, the name is not sent)',
|
|
6377
|
+
'tel.user_name': 'User name',
|
|
6378
|
+
'tel.not_sent': 'Not sent',
|
|
6379
|
+
'tel.off_switch_it_on_above': 'Off: switch it on above.',
|
|
6380
|
+
'tel.the_token_is_pgkiln_metrics': 'The token is PGKILN_METRICS_TOKEN.',
|
|
6381
|
+
'tel.no_token_is_set': 'No token is set.',
|
|
6382
|
+
'tel.replace_the_token': 'Replace the token',
|
|
6383
|
+
'tel.make_a_token': 'Make a token',
|
|
6384
|
+
'tel.opentelemetry_settings_saved': 'OpenTelemetry settings saved.',
|
|
6385
|
+
'tel.the_collector_took_the_test': 'The collector took the test span ("pgkiln test span").',
|
|
6386
|
+
'tel.the_instance_sends_them_to': 'The instance sends them to its collector.',
|
|
6387
|
+
'tel.the_instance_sends_nothing_at': 'The instance sends nothing at the moment.',
|
|
6388
|
+
'tel.saved': 'Saved.',
|
|
6389
|
+
'tel.the_workspace_has_no_collector': 'The workspace has no collector of its own.',
|
|
6390
|
+
'tel.off_nothing_leaves_the_server': 'Off: nothing leaves the server (workspaces with a collector of their own still send to it).',
|
|
6391
|
+
'tel.sent_with_every_request_to': 'Sent with every request to the collector, name=value, one per line or comma separated (OTEL_EXPORTER_OTLP_HEADERS). Stored encrypted.',
|
|
6392
|
+
'tel.applications_only_by_default': 'Applications only by default.',
|
|
6393
|
+
'tel.pages_report_their_load_time': 'Pages report their load time and Ajax calls to pgkiln, which adds them to the page\'s trace. The browser never sees the collector or its headers.',
|
|
6394
|
+
'tel.for_administrators_signed_in_to': 'For administrators signed in to the builder, or a scraper with the metrics token below (PGKILN_METRICS, PGKILN_METRICS_TOKEN).',
|
|
6395
|
+
'tel.the_metrics_token_is_removed': 'The metrics token is removed.',
|
|
6396
|
+
'tel.sent_with_every_request_to_2': 'Sent with every request to the own collector (an API key). Stored encrypted.',
|
|
6397
|
+
'tel.status': 'Status',
|
|
6398
|
+
'tel.prometheus': 'Prometheus',
|
|
6399
|
+
'tel.workspaces': 'Workspaces',
|
|
6400
|
+
'tel.setting': 'Setting',
|
|
6401
|
+
'tel.app_builder': 'App Builder',
|
|
6402
|
+
'tel.workspace_utilities': 'Workspace utilities',
|
|
6403
|
+
'tel.administration': 'Administration',
|
|
6404
|
+
'tel.unreadable': '(unreadable)',
|
|
6405
|
+
// ------------------------------------------------------------ Page Designer layout (sprint 164)
|
|
6406
|
+
'arr.spans': 'Region spans {n} of 12 columns.',
|
|
6407
|
+
'arr.nothing_undo': 'Nothing to undo.',
|
|
6408
|
+
'arr.nothing_redo': 'Nothing to redo.',
|
|
6409
|
+
'arr.undone': 'Undone',
|
|
6410
|
+
'arr.redone': 'Redone',
|
|
6411
|
+
'arr.that_region_is_not_on': 'That region is not on this page.',
|
|
6412
|
+
'arr.unknown_position': 'Unknown position.',
|
|
6413
|
+
'arr.unknown_button_position': 'Unknown button position.',
|
|
6414
|
+
'arr.unknown_direction': 'Unknown direction.',
|
|
6415
|
+
'arr.the_place_to_move_to': 'The place to move to is not in that region.',
|
|
6416
|
+
'arr.region_not_found_on_this': 'Region not found on this page.',
|
|
6417
|
+
'arr.the_column_span_is_1': 'The column span is 1 to 12.',
|
|
6418
|
+
'arr.page_not_found': 'Page not found.',
|
|
6419
|
+
'arr.unknown_region_type': 'Unknown region type.',
|
|
6420
|
+
'arr.unknown_item_type': 'Unknown item type.',
|
|
6421
|
+
'arr.unknown_button_action': 'Unknown button action.',
|
|
6422
|
+
'arr.that_page_is_not_in': 'That page is not in this application.',
|
|
6423
|
+
'arr.unknown_component': 'Unknown component.',
|
|
6424
|
+
'arr.unknown_region': 'Unknown region.',
|
|
6425
|
+
'arr.unknown_component_type': 'Unknown component type.',
|
|
6426
|
+
'arr.unknown_component_or_page': 'Unknown component or page.',
|
|
6427
|
+
// ------------------------------------------------------------ Earlier pages, second pass (sprint 164)
|
|
6428
|
+
'glob.progress': '{done} of {total} texts translated. Leave a translation empty to show the {language} text.',
|
|
6429
|
+
'rdb.fdw_installed': 'postgres_fdw is installed.',
|
|
6430
|
+
'diag.unknown': 'The database has migrations this server does not know ({list}): the server is older than the database.',
|
|
6431
|
+
'tm.issues_of_page': 'Issues of page {page} of {app}.',
|
|
6432
|
+
'tm.the_application': 'the application',
|
|
6433
|
+
'tm.n_issues': '{n} issues.',
|
|
6434
|
+
'tm.n_issues_1': '1 issue.',
|
|
6435
|
+
'tm.n_issues_500': '{n} issues (the first 500).',
|
|
6436
|
+
'tm.move_to': 'Move #{id} to',
|
|
6437
|
+
'tm.feedback_of': 'Feedback of {user}',
|
|
6438
|
+
'tm.comment_of': '{author}\'s comment',
|
|
6439
|
+
'tm.page_n': ', page {n}',
|
|
6440
|
+
'dts.intro': 'Datasets are trusted views of {workspace}\'s data for business users: tables and views of one schema, joined, with the columns they may see, labels, format masks and descriptions, and a row filter. A reporting application on one or more datasets lets its users build, save, publish and share reports; every report runs as the application\'s database role, so grants and row level security apply.',
|
|
6441
|
+
'dts.this_workspace': 'this workspace',
|
|
6442
|
+
'wres.remove_stored': 'Remove the stored {what}',
|
|
6443
|
+
'tpl.no_wrapper': '{name} has no wrapper, so the rows show one after another.',
|
|
6444
|
+
'rcat.params_help': '[{"name": "page_size", "in": "query", "key": "pageSize", "default": "20"}] · in: path, query, header, body; "key": the service\'s name for it when it isn\'t lower case with _.',
|
|
6445
|
+
'rcat.intro': 'Web services described once for {workspace}: their base URL and services. An application makes a REST data source from a service in Shared Components → REST data sources → New. The data source is a copy; credentials stay with the application.',
|
|
6446
|
+
'rcat.this_workspace': 'this workspace',
|
|
6447
|
+
'rcat.described_once': 'Services described once for the workspace: {link}.',
|
|
6448
|
+
'bp.ai_help': 'The AI service {service} writes a blueprint into the editor below (replacing what is there). Only your description is sent.',
|
|
6449
|
+
'bp.thinking': 'Thinking…',
|
|
6450
|
+
'bp.spec_help': 'Column types: {types}; {required}, {unique}, {values} (allowed texts). Page types: {kinds} and blank ({text}). Optional: {dashboard}, {navigation}, {sample}.',
|
|
6451
|
+
'bp.of_app': 'A blueprint of {app}: review it, change the name, alias and schema, then {review}.',
|
|
6452
|
+
'bp.notes': '{n} notes on what didn\'t carry over',
|
|
6453
|
+
'bp.notes_1': '1 note on what didn\'t carry over',
|
|
6454
|
+
'drep.no_object': 'The table or view {object} does not exist (any more).',
|
|
6455
|
+
'drep.no_select': 'The application\'s database role may not read {object}: grant it SELECT.',
|
|
6456
|
+
'rs.json_columns_help': 'name=column:path[:type]; separate them with ";". A path is keys separated by dots, a number picks an element of an array. Types: {types} (text when left out); a value that doesn\'t read as the type shows empty. They are columns like the others: search, filters, sorting, headings and downloads. To edit documents, use a JSON source (Shared Components).',
|
|
6457
|
+
'dl.load_with_def': 'Load a file with this definition',
|
|
6458
|
+
'aw.schema_help': 'The application\'s parsing schema. Choose a schema to get a page per table and view; a new schema is named after the alias.',
|
|
6459
|
+
'aw.bp_help': 'A boilerplate application\'s pages, shared components and settings are copied; the new application keeps its own name, alias, role and authentication.',
|
|
6460
|
+
// ------------------------------------------------------------ Page Designer, Form Designer, utilities, subscriptions, working copies (sprint 164)
|
|
6461
|
+
'rte.refused_pgkiln_auth_header_proxies': 'refused: PGKILN_AUTH_HEADER_PROXIES is not set',
|
|
6462
|
+
'rte.no_roles_allowed': 'no roles allowed',
|
|
6463
|
+
'rte.no_check_configured_nobody_can': 'no check configured: nobody can sign in',
|
|
6464
|
+
'rte.no_method_enabled': 'no method enabled',
|
|
6465
|
+
'rte.page_views_24h': 'page views (24h)',
|
|
6466
|
+
'rte.distinct_users_24h': 'distinct users (24h)',
|
|
6467
|
+
'rte.average_page_time': 'average page time',
|
|
6468
|
+
'rte.failed_locked_sign_ins_24h': 'failed / locked sign-ins (24h)',
|
|
6469
|
+
'rte.errors_access_denied_24h': 'errors / access denied (24h)',
|
|
6470
|
+
'rte.the_slowest_statements_of_this': 'the slowest statements of this application\'s database role',
|
|
6471
|
+
'rte.the_ai_services_this_application': 'the AI services this application may use, and its requests',
|
|
6472
|
+
'rte.what_users_sent_from_the': 'what users sent from the application\'s Feedback link, and your answers',
|
|
6473
|
+
'rte.the_mail_this_application_queued': 'the mail this application queued and sent, with retry and cancel',
|
|
6474
|
+
'rte.page': 'Page',
|
|
6475
|
+
'rte.name': 'Name',
|
|
6476
|
+
'rte.views': 'Views',
|
|
6477
|
+
'rte.avg_ms': 'Avg ms',
|
|
6478
|
+
'rte.max_ms': 'Max ms',
|
|
6479
|
+
'rte.hide_page_views': 'Hide page views',
|
|
6480
|
+
'rte.include_page_views': 'Include page views',
|
|
6481
|
+
'rte.when': 'When',
|
|
6482
|
+
'rte.event': 'Event',
|
|
6483
|
+
'rte.user': 'User',
|
|
6484
|
+
'rte.detail': 'Detail',
|
|
6485
|
+
'rte.top_sql': 'Top SQL',
|
|
6486
|
+
'rte.ai_usage': 'AI usage',
|
|
6487
|
+
'rte.feedback': 'Feedback',
|
|
6488
|
+
'rte.mail': 'Mail',
|
|
6489
|
+
'rte.debug_messages': 'Debug messages',
|
|
6490
|
+
'rte.definition': 'Definition',
|
|
6491
|
+
'rte.security': 'Security',
|
|
6492
|
+
'rte.sign_in': 'Sign-in',
|
|
6493
|
+
'rte.user_interface': 'User Interface',
|
|
6494
|
+
'rte.globalization': 'Globalization',
|
|
6495
|
+
'rte.errors_and_sessions': 'Errors and Sessions',
|
|
6496
|
+
'rte.progressive_web_app': 'Progressive Web App',
|
|
6497
|
+
'rte.you_are_not_a_developer': 'you are not a developer of any workspace yet: ask an administrator to add you to one.',
|
|
6498
|
+
'rte.page_views_by_page_7': 'Page views by page (7 days)',
|
|
6499
|
+
'rte.recent_events': 'Recent events',
|
|
6500
|
+
'rte.activity': 'Activity',
|
|
6501
|
+
'rte.app_builder': 'App Builder',
|
|
6502
|
+
'rte.settings': 'Settings',
|
|
6503
|
+
'rte.developers': 'Developers',
|
|
6504
|
+
'wcp.lines_with_are_the_main': 'Lines with `-` are the main application\'s, lines with `+` the working copy\'s.',
|
|
6505
|
+
'wcp.change_it_like_any_application': 'Change it like any application: it runs against the main application\'s schema and data, with its automations and synchronisations switched off. Then compare it with the main application and merge it back.',
|
|
6506
|
+
'wcp.delete_working_copy': 'Delete working copy',
|
|
6507
|
+
'wcp.a_working_copy_is_a': 'A working copy is a second application made from this one, for changes in isolation (APEX: working copies). Compare it with this application and merge it back component by component; components changed on both sides are shown as conflicts to resolve.',
|
|
6508
|
+
'wcp.name': 'Name',
|
|
6509
|
+
'wcp.application': 'Application',
|
|
6510
|
+
'wcp.made_by': 'Made by',
|
|
6511
|
+
'wcp.made': 'Made',
|
|
6512
|
+
'wcp.last_merged': 'Last merged',
|
|
6513
|
+
'wcp.actions': 'Actions',
|
|
6514
|
+
'wcp.no_working_copies': 'No working copies.',
|
|
6515
|
+
'wcp.component': 'Component',
|
|
6516
|
+
'wcp.main_application': 'Main application',
|
|
6517
|
+
'wcp.working_copy': 'Working copy',
|
|
6518
|
+
'wcp.result': 'Result',
|
|
6519
|
+
'wcp.differences': 'Differences',
|
|
6520
|
+
'wcp.main': 'Main',
|
|
6521
|
+
'wcp.copy': 'Copy',
|
|
6522
|
+
'wcp.show': 'Show',
|
|
6523
|
+
'wcp.merging_writes_the_result_into': 'Merging writes the result into the main application and the working copy. Refreshing writes it into the working copy only (bringing the main application\'s changes in). Users, sessions, saved reports, secrets and the main application\'s automation switches stay as they are.',
|
|
6524
|
+
'wcp.the_working_copy_and_the': 'The working copy and the main application are the same: nothing to merge.',
|
|
6525
|
+
'wcp.compare_and_merge': 'Compare and merge',
|
|
6526
|
+
'wcp.create_working_copy': 'Create working copy',
|
|
6527
|
+
'wcp.changed_components': 'Changed components',
|
|
6528
|
+
'wcp.e_g_new_dashboard': 'e.g. new-dashboard',
|
|
6529
|
+
'wcp.changed_in_the_copy': 'Changed in the copy',
|
|
6530
|
+
'wcp.changed_in_the_main_application': 'Changed in the main application',
|
|
6531
|
+
'wcp.conflict_changed_on_both_sides': 'Conflict: changed on both sides',
|
|
6532
|
+
'wcp.this_application_is_not_a': 'This application is not a working copy.',
|
|
6533
|
+
'wcp.choose_main_or_copy_for': 'Choose main or copy for every conflict.',
|
|
6534
|
+
'wcp.working_copies': 'Working copies',
|
|
6535
|
+
'wcp.create_a_working_copy': 'Create a working copy',
|
|
6536
|
+
'wcp.app_builder': 'App Builder',
|
|
6537
|
+
'wcp.compare': 'Compare',
|
|
6538
|
+
'wcp.side.added': 'added',
|
|
6539
|
+
'wcp.side.deleted': 'deleted',
|
|
6540
|
+
'wcp.side.changed': 'changed',
|
|
6541
|
+
'wcp.unchanged': 'unchanged',
|
|
6542
|
+
'wcp.is_copy': 'This application is the working copy {name} of {main} ({path}), made by {by} on {at}.',
|
|
6543
|
+
'wcp.last_refreshed': 'Last refreshed {at}.',
|
|
6544
|
+
'wcp.last_merged_by': 'Last merged {at} by {by}.',
|
|
6545
|
+
'wcp.delete_confirm': 'Delete the working copy {name} and its changes that are not merged?',
|
|
6546
|
+
'wcp.created': 'Working copy {name} created: change it, then compare and merge it back.',
|
|
6547
|
+
'wcp.counts': '{copy} changed in the copy, {main} changed in the main application, {conflicts} conflicts.',
|
|
6548
|
+
'wcp.counts_1': '{copy} changed in the copy, {main} changed in the main application, 1 conflict.',
|
|
6549
|
+
'wcp.keep_for': 'Keep for {label}',
|
|
6550
|
+
'wcp.merge_confirm': 'Merge the working copy into {main}?',
|
|
6551
|
+
'wcp.merge_into': 'Merge into {main}',
|
|
6552
|
+
'wcp.refresh_from': 'Refresh the copy from {main}',
|
|
6553
|
+
'wcp.compare_title': 'Compare with {main}',
|
|
6554
|
+
'wcp.compare_intro': 'Working copy {copy} of {main}, compared per component with the main application as it was when the copy was made.',
|
|
6555
|
+
'wcp.compare_intro_since': 'Working copy {copy} of {main}, compared per component with the main application as it was when the copy was made, refreshed or merged.',
|
|
6556
|
+
'wcp.diff_title': 'Differences: {label}',
|
|
6557
|
+
'wcp.merged': 'Working copy {name} merged ({n} components).',
|
|
6558
|
+
'wcp.refreshed': 'Working copy {name} refreshed from the main application.',
|
|
6559
|
+
'wcp.deleted': 'Working copy {name} deleted.',
|
|
6560
|
+
'wcp.not_a_copy': 'Not a working copy',
|
|
6561
|
+
'sub.subscription': 'Subscription',
|
|
6562
|
+
'sub.publish_to_subscribers': 'Publish to subscribers',
|
|
6563
|
+
'sub.subscribers': 'Subscribers…',
|
|
6564
|
+
'sub.in_sync': 'in sync',
|
|
6565
|
+
'sub.settings': 'Settings',
|
|
6566
|
+
'sub.components_of_this_application_that': 'Components of this application that are copies of a component in a theme or library application. Refreshing copies the master\'s definition again, replacing changes made here.',
|
|
6567
|
+
'sub.component': 'Component',
|
|
6568
|
+
'sub.from': 'From',
|
|
6569
|
+
'sub.refreshed': 'Refreshed',
|
|
6570
|
+
'sub.state': 'State',
|
|
6571
|
+
'sub.actions': 'Actions',
|
|
6572
|
+
'sub.refresh': 'Refresh',
|
|
6573
|
+
'sub.unsubscribe': 'Unsubscribe',
|
|
6574
|
+
'sub.refresh_all': 'Refresh all',
|
|
6575
|
+
'sub.no_subscriptions': 'No subscriptions.',
|
|
6576
|
+
'sub.subscribe': 'Subscribe',
|
|
6577
|
+
'sub.the_component_is_copied_now': 'The component is copied now. A component of this application with the same name is replaced.',
|
|
6578
|
+
'sub.no_theme_or_library_applications': 'No theme or library applications offer components. Set an application\'s type under its Settings.',
|
|
6579
|
+
'sub.subscribe_to_a_component_group': 'Subscribe to a component group',
|
|
6580
|
+
'sub.component_group': 'Component group',
|
|
6581
|
+
'sub.every_component_of_the_group': 'Every component of the group is copied now and subscribed (Shared Components → Component Groups of a theme or library application).',
|
|
6582
|
+
'sub.subscribe_to_the_group': 'Subscribe to the group',
|
|
6583
|
+
'sub.application': 'Application',
|
|
6584
|
+
'sub.publish': 'Publish',
|
|
6585
|
+
'sub.publishing_refreshes_every_subscriber_of': 'Publishing refreshes every subscriber of a component with this application\'s version. Applications locked by another developer are skipped.',
|
|
6586
|
+
'sub.no_application_subscribes_to_this': 'No application subscribes to this application\'s components yet.',
|
|
6587
|
+
'sub.unsubscribe_the_component_stays_as': 'Unsubscribe? The component stays as it is.',
|
|
6588
|
+
'sub.theme': 'Theme',
|
|
6589
|
+
'sub.application_type': 'Application type',
|
|
6590
|
+
'sub.subscriptions': 'Subscriptions',
|
|
6591
|
+
'sub.subscribers_2': 'Subscribers',
|
|
6592
|
+
'sub.app_builder': 'App Builder',
|
|
6593
|
+
'sub.shared_components': 'Shared Components',
|
|
6594
|
+
'sub.th.standard': 'An ordinary application.',
|
|
6595
|
+
'sub.th.theme': 'Its theme (colours, navigation, Theme Roller styles) and template components are offered to other applications.',
|
|
6596
|
+
'sub.th.library': 'Its lists of values, authorization schemes, build options, template components and lists are offered to other applications.',
|
|
6597
|
+
'sub.th.boilerplate': 'A starting point: Create application can copy it.',
|
|
6598
|
+
'sub.th.reporting': 'Made by App Builder → Data Reporter on datasets of the workspace: its users build, publish and share reports.',
|
|
6599
|
+
'sub.k.lov': 'List of values',
|
|
6600
|
+
'sub.k.authz_scheme': 'Authorization scheme',
|
|
6601
|
+
'sub.k.build_option': 'Build option',
|
|
6602
|
+
'sub.k.template_component': 'Template component',
|
|
6603
|
+
'sub.k.list': 'List',
|
|
6604
|
+
'sub.what': '{kind} {name}',
|
|
6605
|
+
'sub.subscribed_from': 'Subscribed from {master}. Changes made here are overwritten by the next refresh.',
|
|
6606
|
+
'sub.subscribed_from_at': 'Subscribed from {master}, refreshed {at}. Changes made here are overwritten by the next refresh.',
|
|
6607
|
+
'sub.refresh_from': 'Refresh from {master}',
|
|
6608
|
+
'sub.subscribers_1': '1 application subscribes to this {kind}.',
|
|
6609
|
+
'sub.subscribers_n': '{n} applications subscribe to this {kind}.',
|
|
6610
|
+
'sub.type_line': '{type}: {help} Change it under {settings}.',
|
|
6611
|
+
'sub.choose_dash': '- choose -',
|
|
6612
|
+
'sub.choose_component': 'Choose a component.',
|
|
6613
|
+
'sub.choose_group': 'Choose a component group.',
|
|
6614
|
+
'sub.subscribed': 'Subscribed: {what} copied.',
|
|
6615
|
+
'sub.subscribed_group': 'Subscribed to {group}: {n} components copied.',
|
|
6616
|
+
'sub.subscribed_group_1': 'Subscribed to {group}: 1 component copied.',
|
|
6617
|
+
'sub.subscribed_group_skipped': 'Subscribed to {group}: {n} components copied; skipped {skipped}.',
|
|
6618
|
+
'sub.subscribed_group_skipped_1': 'Subscribed to {group}: 1 component copied; skipped {skipped}.',
|
|
6619
|
+
'sub.not_subscribed': 'Not subscribed.',
|
|
6620
|
+
'sub.no_subscriber': 'No application subscribes to it.',
|
|
6621
|
+
'sub.published': 'Published to {n} applications.',
|
|
6622
|
+
'sub.published_1': 'Published to 1 application.',
|
|
6623
|
+
'sub.published_skipped': 'Published to {n} applications; {skipped} skipped (locked by another developer).',
|
|
6624
|
+
'sub.published_skipped_1': 'Published to 1 application; {skipped} skipped (locked by another developer).',
|
|
6625
|
+
'sub.title': '{app} subscriptions',
|
|
6626
|
+
'util.pages': 'Pages',
|
|
6627
|
+
'util.regions': 'Regions',
|
|
6628
|
+
'util.items': 'Items',
|
|
6629
|
+
'util.processes': 'Processes',
|
|
6630
|
+
'util.lists_of_values': 'Lists of values',
|
|
6631
|
+
'util.changes_in_7_days': 'Changes in 7 days',
|
|
6632
|
+
'util.page': 'Page',
|
|
6633
|
+
'util.last_change': 'Last change',
|
|
6634
|
+
'util.by': 'By',
|
|
6635
|
+
'util.changes': 'Changes',
|
|
6636
|
+
'util.no_recorded_changes_yet_the': 'No recorded changes yet: the change history starts with the first change after the upgrade to this version.',
|
|
6637
|
+
'util.the_checksum_of_the_application': 'The checksum of the application\'s definition (its export without the alias): the same definition gives the same checksum on any installation, so two installations, or an application and its working copy, compare at a glance.',
|
|
6638
|
+
'util.checksum': 'Checksum',
|
|
6639
|
+
'util.every_change_made_in_the': 'Every change made in the builder (and every import, restore or merge) is compared with the application before it: each component that was added, changed or deleted is listed here with who and when. Changes from the command line or the MCP server have no developer.',
|
|
6640
|
+
'util.from': 'From',
|
|
6641
|
+
'util.to': 'To',
|
|
6642
|
+
'util.component': 'Component',
|
|
6643
|
+
'util.when': 'When',
|
|
6644
|
+
'util.developer': 'Developer',
|
|
6645
|
+
'util.change': 'Change',
|
|
6646
|
+
'util.differences': 'Differences',
|
|
6647
|
+
'util.show': 'Show',
|
|
6648
|
+
'util.icons': 'Icons',
|
|
6649
|
+
'util.search': 'Search',
|
|
6650
|
+
'util.no_lucide_icon_matches': 'No Lucide icon matches.',
|
|
6651
|
+
'util.search_to_see_the_matching': 'Search to see the matching Lucide icons.',
|
|
6652
|
+
'util.e_g_p3_id': 'e.g. P3_ID',
|
|
6653
|
+
'util.e_g_truck_money_arrow': 'e.g. truck, money, arrow',
|
|
6654
|
+
'util.all': 'All',
|
|
6655
|
+
'util.plans_every_sql_statement_as': 'Plans every SQL statement as the application\'s role and checks every reference.',
|
|
6656
|
+
'util.the_tables_views_sequences_and': 'The tables, views, sequences and functions the application uses, missing ones and missing grants.',
|
|
6657
|
+
'util.who_changed_which_component_and': 'Who changed which component and when, with the differences.',
|
|
6658
|
+
'util.components_that_can_use_a': 'Components that can use a newer default of this pgkiln version.',
|
|
6659
|
+
'util.labels_format_masks_help_and': 'Labels, format masks, help and lists of values per table column, used by the page wizards.',
|
|
6660
|
+
'util.names_sql_conditions_settings_and': 'Names, SQL, conditions, settings and help texts of every component.',
|
|
6661
|
+
'util.timed_steps_of_each_request': 'Timed steps of each request and messages from meta.debug().',
|
|
6662
|
+
'util.page_views_errors_sign_ins': 'Page views, errors, sign-ins and the application\'s logs.',
|
|
6663
|
+
'util.back_up_now_download_and': 'Back up now, download and restore earlier versions.',
|
|
6664
|
+
'util.change_a_copy_compare_it': 'Change a copy, compare it and merge it back.',
|
|
6665
|
+
'util.browse_the_icons_the_icon': 'Browse the icons the icon picker offers.',
|
|
6666
|
+
'util.application_dashboard': 'Application dashboard',
|
|
6667
|
+
'util.recently_updated_pages': 'Recently updated pages',
|
|
6668
|
+
'util.application_checksum': 'Application checksum',
|
|
6669
|
+
'util.change_history': 'Change history',
|
|
6670
|
+
'util.icon_browser': 'Icon browser',
|
|
6671
|
+
'util.app_builder': 'App Builder',
|
|
6672
|
+
'util.utilities': 'Utilities',
|
|
6673
|
+
'util.workspace_utilities': 'Workspace utilities',
|
|
6674
|
+
'util.c_advisor': 'Advisor',
|
|
6675
|
+
'util.c_deps': 'Database object dependencies',
|
|
6676
|
+
'util.c_history': 'Change history',
|
|
6677
|
+
'util.c_upgrade': 'Upgrade application',
|
|
6678
|
+
'util.c_ui_defaults': 'UI defaults',
|
|
6679
|
+
'util.c_search': 'Search',
|
|
6680
|
+
'util.c_debug': 'Debug messages',
|
|
6681
|
+
'util.c_activity': 'Activity',
|
|
6682
|
+
'util.c_backups': 'Backups',
|
|
6683
|
+
'util.c_wc': 'Working copies',
|
|
6684
|
+
'util.c_export': 'Export',
|
|
6685
|
+
'util.c_icons': 'Icons',
|
|
6686
|
+
'util.export_text': 'The application as a file (checksum {sum}).',
|
|
6687
|
+
'util.title': 'Utilities · {app}',
|
|
6688
|
+
'util.cmd_line': 'Command line / import',
|
|
6689
|
+
'util.import': 'import',
|
|
6690
|
+
'util.command_line': 'command line',
|
|
6691
|
+
'util.the_command_line': 'the command line',
|
|
6692
|
+
'util.no_changes': 'No changes recorded yet.',
|
|
6693
|
+
'util.no_changes_filtered': 'No changes with these filters.',
|
|
6694
|
+
'util.diff_title': 'Differences: {label}',
|
|
6695
|
+
'util.diff_intro': '{op} by {who}, {when}. Lines with {minus} are before the change, lines with {plus} after it.',
|
|
6696
|
+
'util.history_title': 'Change history · {app}',
|
|
6697
|
+
'util.icons_intro': 'The icons of the icon picker: pgkiln\'s own set and {n} Lucide icons ({version}, ISC licence). Use the name in an icon field; modifiers such as {lg}, {spin} or {success} may follow it (e.g. {example}), and Font APEX names work where Lucide has the same icon ({fa}).',
|
|
6698
|
+
'util.op.added': 'added',
|
|
6699
|
+
'util.op.changed': 'changed',
|
|
6700
|
+
'util.op.deleted': 'deleted',
|
|
6701
|
+
'fdz.static_id': 'Static id',
|
|
6702
|
+
'fdz.label': 'Label',
|
|
6703
|
+
'fdz.description_shown_to_designers': 'Description (shown to designers)',
|
|
6704
|
+
'fdz.key_column_identifies_a_row': 'Key column (identifies a row)',
|
|
6705
|
+
'fdz.forms_on_it_may': 'Forms on it may',
|
|
6706
|
+
'fdz.offer': 'Offer',
|
|
6707
|
+
'fdz.column': 'Column',
|
|
6708
|
+
'fdz.list_of_values': 'List of values',
|
|
6709
|
+
'fdz.not_in_the_table': 'not in the table',
|
|
6710
|
+
'fdz.remove_this_data_source_forms': 'Remove this data source (forms on it stop working)',
|
|
6711
|
+
'fdz.form_designer_settings': 'Form Designer settings',
|
|
6712
|
+
'fdz.users_that_pass_the_designers': 'Users that pass the designers\' authorization scheme build data entry forms on the tables and views below: they pick offered columns, labels, help texts, required fields and defaults, and publish forms for everyone who can see this region. Forms read and write rows as the application\'s database role, so grants and row level security apply.',
|
|
6713
|
+
'fdz.forms': 'Forms',
|
|
6714
|
+
'fdz.who_may_design_forms': 'Who may design forms',
|
|
6715
|
+
'fdz.rows_per_page': 'Rows per page',
|
|
6716
|
+
'fdz.text_when_there_are_no': 'Text when there are no rows',
|
|
6717
|
+
'fdz.add_a_data_source': 'Add a data source',
|
|
6718
|
+
'fdz.table_or_view': 'Table or view',
|
|
6719
|
+
'fdz.all_columns_are_offered_at': 'All columns are offered at first (except binary and JSON ones), the primary key is the key column, and forms may add and change rows, not delete them. Untick columns designers should not put on forms, such as generated keys and audit columns.',
|
|
6720
|
+
'fdz.save_form_designer_settings': 'Save Form Designer settings',
|
|
6721
|
+
'fdz.no_data_found': 'No data found',
|
|
6722
|
+
'fdz.from_the_name': 'from the name',
|
|
6723
|
+
'fdz.nobody_choose_an_authorization_scheme': 'Nobody (choose an authorization scheme)',
|
|
6724
|
+
'fdz.add_rows': 'add rows',
|
|
6725
|
+
'fdz.change_rows': 'change rows',
|
|
6726
|
+
'fdz.delete_rows': 'delete rows',
|
|
6727
|
+
'fdz.settings_saved': 'Settings saved.',
|
|
6728
|
+
'fdz.choose_a_table_or_view': 'Choose a table or view for the new data source.',
|
|
6729
|
+
'fdz.no_authz': 'There is no authorization scheme {name}.',
|
|
6730
|
+
'fdz.no_columns': 'Data source {id} offers no columns.',
|
|
6731
|
+
'fdz.dup_source': 'There is already a data source {id}.',
|
|
6732
|
+
'fdz.needs_key': '(needs a key column)',
|
|
6733
|
+
'fdz.no_key': '- none: forms only add rows -',
|
|
6734
|
+
'fdz.offer_col': 'Offer {col}',
|
|
6735
|
+
'fdz.label_of': 'Label of {col}',
|
|
6736
|
+
'fdz.lov_of': 'List of values of {col}',
|
|
6737
|
+
'fdz.no_object': 'The table or view {object} does not exist (any more).',
|
|
6738
|
+
'fdz.lacks': 'The application\'s database role lacks {privs} on {object}: grant it, or forms can\'t do that.',
|
|
6739
|
+
'pdz.p1_item_binds_an_item': '`:P1_ITEM` binds an item value in any SQL (always escaped). `:APP_USER`, `:APP_PAGE_ID`, `:REQUEST` are built in.',
|
|
6740
|
+
'pdz.p1_item_substitutes_into_titles': '`&P1_ITEM.` substitutes into titles, static HTML and link targets (HTML-escaped).',
|
|
6741
|
+
'pdz.in_sql_pl_pgsql_and': 'In SQL, PL/pgSQL and RLS policies: `meta.app_user()`, `meta.has_role(\'admin\')`, `meta.v(\'P1_ITEM\')`, `meta.page_url(3, \'{"P3_ID": 7}\')`.',
|
|
6742
|
+
'pdz.a_pl_pgsql_raise_exception': 'A PL/pgSQL `raise exception \'Message\' using column = \'sal\'` shows the message on the item whose source column is `sal`.',
|
|
6743
|
+
'pdz.layout': 'Layout',
|
|
6744
|
+
'pdz.column_span': 'column span',
|
|
6745
|
+
'pdz.drag_a_region_by_its': 'Drag a region by its header to move it, or drag its right edge to make it wider or narrower.',
|
|
6746
|
+
'pdz.drag_items_and_buttons_to': 'Drag items and buttons to another place or another region.',
|
|
6747
|
+
'pdz.drag_a_region_item_or': 'Drag a region, item or button from the gallery onto the layout to create it; or open a gallery entry to create one with a form.',
|
|
6748
|
+
'pdz.alt': 'Alt',
|
|
6749
|
+
'pdz.shift': 'Shift',
|
|
6750
|
+
'pdz.arrange': 'Arrange',
|
|
6751
|
+
'pdz.undo': 'Undo',
|
|
6752
|
+
'pdz.redo': 'Redo',
|
|
6753
|
+
'pdz.cheat_sheet': 'Cheat sheet',
|
|
6754
|
+
'pdz.identification': 'Identification',
|
|
6755
|
+
'pdz.appearance': 'Appearance',
|
|
6756
|
+
'pdz.warn_on_unsaved_changes': 'Warn on unsaved changes',
|
|
6757
|
+
'pdz.ask_before_the_user_leaves': 'Ask before the user leaves the page (a link, a redirect button, closing the tab) while an item has a changed value. Submitting doesn\'t ask. Leave an item out with {"warn_unsaved": false} in its attributes.',
|
|
6758
|
+
'pdz.security': 'Security',
|
|
6759
|
+
'pdz.requires_authentication': 'Requires authentication',
|
|
6760
|
+
'pdz.help': 'Help',
|
|
6761
|
+
'pdz.help_text': 'Help text',
|
|
6762
|
+
'pdz.markdown_with_amp_item_substitutions': 'Markdown with &ITEM. substitutions. A region of type Help Text on the page shows it (APEX: Page → Help).',
|
|
6763
|
+
'pdz.page_number': 'Page number',
|
|
6764
|
+
'pdz.name': 'Name',
|
|
6765
|
+
'pdz.title': 'Title',
|
|
6766
|
+
'pdz.page_mode': 'Page mode',
|
|
6767
|
+
'pdz.page_group': 'Page group',
|
|
6768
|
+
'pdz.page_template': 'Page template',
|
|
6769
|
+
'pdz.dialog_position': 'Dialog position',
|
|
6770
|
+
'pdz.dialog_size': 'Dialog size',
|
|
6771
|
+
'pdz.javascript_and_css_files': 'JavaScript and CSS files',
|
|
6772
|
+
'pdz.breadcrumb_parent': 'Breadcrumb parent',
|
|
6773
|
+
'pdz.authorization_scheme': 'Authorization scheme',
|
|
6774
|
+
'pdz.page_access_protection': 'Page access protection',
|
|
6775
|
+
'pdz.build_option': 'Build option',
|
|
6776
|
+
'pdz.e_g_page_3_js': 'e.g. page-3.js, page-3.css',
|
|
6777
|
+
'pdz.static_application_files_js_css': 'Static application files (.js, .css) this page loads after the application\'s own, in this order; #WORKSPACE_FILES#name for a static workspace file.',
|
|
6778
|
+
'pdz.normal': 'Normal',
|
|
6779
|
+
'pdz.modal_dialog': 'Modal dialog',
|
|
6780
|
+
'pdz.none': '- none -',
|
|
6781
|
+
'pdz.standard': 'Standard',
|
|
6782
|
+
'pdz.left_side_column': 'Left side column',
|
|
6783
|
+
'pdz.right_side_column': 'Right side column',
|
|
6784
|
+
'pdz.minimal_no_navigation': 'Minimal (no navigation)',
|
|
6785
|
+
'pdz.centred_dialog': 'Centred dialog',
|
|
6786
|
+
'pdz.drawer_from_the_right': 'Drawer from the right',
|
|
6787
|
+
'pdz.drawer_from_the_left': 'Drawer from the left',
|
|
6788
|
+
'pdz.drawer_from_the_top': 'Drawer from the top',
|
|
6789
|
+
'pdz.drawer_from_the_bottom': 'Drawer from the bottom',
|
|
6790
|
+
'pdz.small': 'Small',
|
|
6791
|
+
'pdz.medium': 'Medium',
|
|
6792
|
+
'pdz.large': 'Large',
|
|
6793
|
+
'pdz.arguments_must_have_checksum': 'Arguments must have checksum',
|
|
6794
|
+
'pdz.unrestricted': 'Unrestricted',
|
|
6795
|
+
'pdz.organises_the_pages_in_the': 'Organises the pages in the App Builder (Shared Components → Page groups). Changes nothing when the application runs.',
|
|
6796
|
+
'pdz.side_column_regions_with_position': 'Side column: regions with position left (or right) show in a column beside the body (under it on narrow screens). Minimal: no header and navigation menu, e.g. for a login page (Application settings → Login page).',
|
|
6797
|
+
'pdz.modal_pages_only_on_phones': 'Modal pages only. On phones dialogs and side drawers fill the screen.',
|
|
6798
|
+
'pdz.the_width_the_height_of': 'The width (the height of top and bottom drawers).',
|
|
6799
|
+
'pdz.app_builder': 'App Builder',
|
|
6800
|
+
'pdz.grid_help': 'Regions sit on a 12-column grid in sequence order; a region\'s {span} sets its width, and regions wrap to a new row when the row is full.',
|
|
6801
|
+
'pdz.keyboard_help': 'Keyboard: focus a component on the layout and press {move} to move it, {resize} to change a region\'s width. The {arrange} buttons above the properties do the same.',
|
|
6802
|
+
'pdz.undo_help': '{undo} and {redo} in the toolbar take back layout changes.',
|
|
6803
|
+
'pdz.title_help': 'Supports &ITEM. substitutions.',
|
|
6804
|
+
'pdz.not_authz': 'Not {name}',
|
|
6805
|
+
// ------------------------------------------------------------ Application groups, Find my workspace, static application files (sprint 164 part 11)
|
|
6806
|
+
'agr.exists': 'A group with this name exists already.',
|
|
6807
|
+
'agr.bad_name': 'The name is 1 to 60 characters, without spaces at the start or end.',
|
|
6808
|
+
'agr.intro': 'Groups organise the applications of this workspace ({workspace}) on the App Builder home, which can show one group at a time. They change nothing in the applications.',
|
|
6809
|
+
'agr.groups': 'Groups',
|
|
6810
|
+
'agr.group': 'Group',
|
|
6811
|
+
'agr.applications': 'Applications',
|
|
6812
|
+
'agr.application': 'Application',
|
|
6813
|
+
'agr.rename': 'Rename',
|
|
6814
|
+
'agr.new_name_for': 'New name for {name}',
|
|
6815
|
+
'agr.delete_confirm': 'Delete the group {name}? Its applications stay, without a group.',
|
|
6816
|
+
'agr.delete_name': 'Delete {name}',
|
|
6817
|
+
'agr.no_groups': 'No groups yet.',
|
|
6818
|
+
'agr.add_title': 'Add a group',
|
|
6819
|
+
'agr.name': 'Name',
|
|
6820
|
+
'agr.name_ph': 'Finance',
|
|
6821
|
+
'agr.description': 'Description',
|
|
6822
|
+
'agr.add': 'Add group',
|
|
6823
|
+
'agr.group_of': 'Group of {name}',
|
|
6824
|
+
'agr.no_group': '(no group)',
|
|
6825
|
+
'agr.save': 'Save groups',
|
|
6826
|
+
'agr.no_apps': 'No applications in this workspace.',
|
|
6827
|
+
'agr.added': 'Group {name} added.',
|
|
6828
|
+
'agr.renamed': 'Group renamed to {name}.',
|
|
6829
|
+
'agr.deleted': 'Group {name} deleted.',
|
|
6830
|
+
'agr.saved': 'Groups saved.',
|
|
6831
|
+
'fw.mail_admin': 'administrator: every workspace',
|
|
6832
|
+
'fw.mail_no_ws': 'No workspace yet: ask an administrator.',
|
|
6833
|
+
'fw.mail_intro': 'You asked which pgkiln workspaces you can sign in to.',
|
|
6834
|
+
'fw.mail_sign_in': 'Sign in at {url}',
|
|
6835
|
+
'fw.mail_ignore': 'If you didn\'t ask, you can ignore this mail: nothing was changed.',
|
|
6836
|
+
'fw.mail_subject': 'Your pgkiln workspaces',
|
|
6837
|
+
'fw.back': 'Back to sign in',
|
|
6838
|
+
'fw.no_mail': 'This installation doesn\'t send mail to developers. Ask an administrator which workspaces you belong to; or sign in with your user name and password only: the workspace is optional.',
|
|
6839
|
+
'fw.check_mail': 'Check your mail',
|
|
6840
|
+
'fw.intro': 'Enter the e-mail address of your developer account: we send you your user name and the workspaces you can sign in to.',
|
|
6841
|
+
'fw.send': 'Send',
|
|
6842
|
+
'fw.bad_email': 'Enter an e-mail address, e.g. ann@example.com.',
|
|
6843
|
+
'fw.sent': 'If a developer account has the address {email}, it gets a mail with its user name and workspaces in a few minutes. No mail? Ask an administrator.',
|
|
6844
|
+
'sf.edit_title': 'Edit {name}',
|
|
6845
|
+
'sf.new_file': 'New file',
|
|
6846
|
+
'sf.file_name': 'File name',
|
|
6847
|
+
'sf.file_name_help': 'Letters, digits, _, - and . (e.g. app.js, styles.css, data.json).',
|
|
6848
|
+
'sf.content': 'Content',
|
|
6849
|
+
'sf.content_help': 'JavaScript registers functions for the dynamic action "Execute JavaScript" with `pgkiln.actions.register(\'name\', (da) => { … })`; it can also use `pgkiln.getValue`, `setValue`, `showSuccess` and `showError`. No inline scripts: everything runs from these files.',
|
|
6850
|
+
'sf.title': 'Static application files',
|
|
6851
|
+
'sf.intro': 'JavaScript, CSS, JSON, images and fonts of this application, served at {path} and exported with it. Pages load the scripts and stylesheets chosen below (and those a page adds in its properties), so code runs from files, never inline. Up to {max} per file; no HTML.',
|
|
6852
|
+
'sf.name': 'Name',
|
|
6853
|
+
'sf.type': 'Type',
|
|
6854
|
+
'sf.size': 'Size',
|
|
6855
|
+
'sf.loaded_by': 'Loaded by',
|
|
6856
|
+
'sf.changed': 'Changed',
|
|
6857
|
+
'sf.actions': 'Actions',
|
|
6858
|
+
'sf.every_page': 'every page',
|
|
6859
|
+
'sf.pages': 'page {pages}',
|
|
6860
|
+
'sf.edit': 'Edit',
|
|
6861
|
+
'sf.delete_confirm': 'Delete {name}?',
|
|
6862
|
+
'sf.delete_name': 'Delete {name}',
|
|
6863
|
+
'sf.no_files': 'No files yet.',
|
|
6864
|
+
'sf.files_to_upload': 'Files to upload',
|
|
6865
|
+
'sf.upload': 'Upload',
|
|
6866
|
+
'sf.replaced': 'A file with the same name is replaced.',
|
|
6867
|
+
'sf.every_page_loads': 'Every page loads',
|
|
6868
|
+
'sf.includes': 'Scripts and stylesheets, in order',
|
|
6869
|
+
'sf.includes_ph': 'e.g. library.js, app.js, app-styles.css',
|
|
6870
|
+
'sf.includes_help': 'Up to {max} .js and .css files, loaded in this order after pgkiln\'s own (scripts deferred). #WORKSPACE_FILES#name is a static workspace file (Workspace utilities). A page adds its own files under Page → Appearance.',
|
|
6871
|
+
'sf.choose_files': 'Choose one or more files.',
|
|
6872
|
+
'sf.too_large_name': '{name} is larger than {max}.',
|
|
6873
|
+
'sf.bad_type': '{name}: not an allowed name or type (letters, digits, _, - and .; {types}).',
|
|
6874
|
+
'sf.uploaded': 'Uploaded: {names}.',
|
|
6875
|
+
'sf.bad_text_name': 'The name must end in a text type (.js, .css, .json, .txt, .csv, .md, .map) and use letters, digits, _, - and . only.',
|
|
6876
|
+
'sf.too_large': 'The file is larger than {max}.',
|
|
6877
|
+
'sf.saved_name': '{name} saved.',
|
|
6878
|
+
'sf.deleted': '{name} deleted.',
|
|
6879
|
+
'sf.no_such_file': 'No such file.',
|
|
6880
|
+
'sf.saved_missing': 'Saved. Not uploaded yet (left out until they are): {names}.',
|
|
6881
|
+
'sf.saved': 'Saved.',
|
|
6882
|
+
// ------------------------------------------------------------ Notifications and live badges (sprint 165)
|
|
6883
|
+
'nfy.heading': 'Notifications',
|
|
6884
|
+
'nfy.bell': 'Notification bell in the header',
|
|
6885
|
+
'nfy.bell_help': 'Signed-in users see their unread notifications and the newest ones; opening one marks it read and goes to its page. Add them from SQL with `meta.notify(user, title, body, page, items)` or with a process of type send_notification; `meta.unread_notifications()` is the count, e.g. for a badge.',
|
|
6886
|
+
'nfy.live': 'Live badges (seconds)',
|
|
6887
|
+
'nfy.live_ph': 'e.g. 60 (empty: off)',
|
|
6888
|
+
'nfy.live_help': 'Every so many seconds (10 to 3600) an open page refreshes its badges in place: the navigation menu and bar, buttons with a badge query and the bell. Not while the tab is hidden; it doesn\'t keep a session alive.',
|
|
6889
|
+
'nfy.live_invalid': 'Live badges: a whole number of seconds from 10 to 3600, or empty.',
|
|
6890
|
+
// ------------------------------------------------------------ Page and application locks, developer comments (sprint 164 part 12)
|
|
6891
|
+
'lk.run_only': 'The application is Run only (Availability → Build status).',
|
|
6892
|
+
'lk.page_locked_by': 'Page {page} is locked by {user} since {since}{note}.',
|
|
6893
|
+
'lk.app_locked_by': 'The application is locked by {user} since {since}{note}.',
|
|
6894
|
+
'lk.run_only_refused': 'Set it back to Run and build to change it.',
|
|
6895
|
+
'lk.refused': 'Changes are refused until it is unlocked.',
|
|
6896
|
+
'lk.break_confirm_page': 'Break {user}\'s lock on page {page}?',
|
|
6897
|
+
'lk.break_confirm_app': 'Break {user}\'s lock on the application?',
|
|
6898
|
+
'lk.unlock': 'Unlock',
|
|
6899
|
+
'lk.break': 'Break lock (administrator)',
|
|
6900
|
+
'lk.only_owner': 'Only {user} or an administrator can unlock it.',
|
|
6901
|
+
'lk.not_locked_page': 'Not locked: every developer can change page {page}.',
|
|
6902
|
+
'lk.not_locked_app': 'Not locked: every developer can change the application.',
|
|
6903
|
+
'lk.note': 'Note',
|
|
6904
|
+
'lk.note_ph': 'Note (optional), e.g. reworking the form',
|
|
6905
|
+
'lk.lock_page': 'Lock page {page}',
|
|
6906
|
+
'lk.lock_app': 'Lock the application',
|
|
6907
|
+
'lk.lock': 'Lock',
|
|
6908
|
+
'lk.comments': 'Comments',
|
|
6909
|
+
'lk.comment_on_page': 'Add a comment on page {page}',
|
|
6910
|
+
'lk.comment_on_app': 'Add a comment on the application',
|
|
6911
|
+
'lk.add_comment': 'Add comment',
|
|
6912
|
+
'lk.delete_comment_confirm': 'Delete this comment?',
|
|
6913
|
+
'lk.delete': 'Delete',
|
|
6914
|
+
'lk.issue': 'Issue #{n}',
|
|
6915
|
+
'lk.make_issue': 'Make an issue',
|
|
6916
|
+
'lk.no_comments': 'No comments yet.',
|
|
6917
|
+
'lk.locked_page': 'Page {page} is locked: other developers can\'t change it until you unlock it.',
|
|
6918
|
+
'lk.locked_app': 'The application is locked: other developers can\'t change it until you unlock it.',
|
|
6919
|
+
'lk.already': 'It is already locked.',
|
|
6920
|
+
'lk.not_locked': 'It is not locked.',
|
|
6921
|
+
'lk.only_unlocker': 'Only the developer who locked it or an administrator can unlock it.',
|
|
6922
|
+
'lk.unlocked': 'Unlocked.',
|
|
6923
|
+
'lk.broken': '{user}\'s lock was broken.',
|
|
6924
|
+
'lk.comment_length': 'A comment has 1 to 4000 characters.',
|
|
6925
|
+
'lk.comment_added': 'Comment added.',
|
|
6926
|
+
'lk.only_author': 'Only the author or an administrator can delete a comment.',
|
|
6927
|
+
'lk.comment_deleted': 'Comment deleted.',
|
|
6928
|
+
// ------------------------------------------------------------ Automations: actions and runs (sprint 164 part 12)
|
|
6929
|
+
'au.back_to': 'Back to {name}',
|
|
6930
|
+
'au.failed_rows': '{n} failed row(s)',
|
|
6931
|
+
'au.first': '(first {n})',
|
|
6932
|
+
'au.row_action': 'Row {row}, action {action}',
|
|
6933
|
+
'au.not_scheduled': 'not scheduled (disabled)',
|
|
6934
|
+
'au.never': 'never: {message}',
|
|
6935
|
+
'au.scheduler_off': '(the scheduler is off on this server: AUTOMATIONS=off)',
|
|
6936
|
+
'au.actions': 'Actions',
|
|
6937
|
+
'au.order_once': 'Run in this order, once, in one transaction.',
|
|
6938
|
+
'au.order_rows': 'Run in this order, for each row of the query, in one transaction.',
|
|
6939
|
+
'au.order_rows_skip': 'Run in this order, for each row of the query, in one transaction per run; a failing row is rolled back and skipped.',
|
|
6940
|
+
'au.seq': 'Seq',
|
|
6941
|
+
'au.action': 'Action',
|
|
6942
|
+
'au.condition': 'Condition',
|
|
6943
|
+
'au.order': 'Order',
|
|
6944
|
+
'au.always': 'always',
|
|
6945
|
+
'au.move_up': 'Move {name} up',
|
|
6946
|
+
'au.move_down': 'Move {name} down',
|
|
6947
|
+
'au.no_actions': 'No actions yet: a run does nothing.',
|
|
6948
|
+
'au.add_action': 'Add action',
|
|
6949
|
+
'au.runs': 'Runs',
|
|
6950
|
+
'au.next_run': 'Next run: {when}',
|
|
6951
|
+
'au.from_code': 'From application code: {call} runs it now, in the caller\'s transaction.',
|
|
6952
|
+
'au.run_now': 'Run now',
|
|
6953
|
+
'au.started': 'Started',
|
|
6954
|
+
'au.took': 'Took',
|
|
6955
|
+
'au.by': 'By',
|
|
6956
|
+
'au.status': 'Status',
|
|
6957
|
+
'au.rows': 'Rows',
|
|
6958
|
+
'au.failed': 'Failed',
|
|
6959
|
+
'au.message': 'Message',
|
|
6960
|
+
'au.no_runs': 'No runs yet.',
|
|
6961
|
+
'au.ran': 'Ran successfully.',
|
|
6962
|
+
'au.ran_rows': 'Ran successfully for {n} row(s).',
|
|
6963
|
+
'au.ran_errors': 'Ran with errors: {message}. See the run history.',
|
|
6964
|
+
'au.failed_run': 'The automation failed.',
|
|
6965
|
+
// ------------------------------------------------------------ Workflow versions and instances (sprint 164 part 12)
|
|
6966
|
+
'wfv.draft_new': 'Draft steps belong in a development version: create the workflow without them, then create a new version to model with drafts.',
|
|
6967
|
+
'wfv.draft_active': 'Version {version} is active: draft steps belong in a development version.',
|
|
6968
|
+
'wfv.active_fixed': 'Version {version} is active and can\'t be changed. Create a new version to edit its steps.',
|
|
6969
|
+
'wfv.running': '({n} running)',
|
|
6970
|
+
'wfv.versions': 'Versions',
|
|
6971
|
+
'wfv.intro': 'New instances start the {active} version; running instances keep the version they started with. Edit a {development} version, then activate it.',
|
|
6972
|
+
'wfv.state.active': 'active',
|
|
6973
|
+
'wfv.state.development': 'development',
|
|
6974
|
+
'wfv.state.inactive': 'inactive',
|
|
6975
|
+
'wfv.version': 'Version',
|
|
6976
|
+
'wfv.state': 'State',
|
|
6977
|
+
'wfv.activated': 'Activated',
|
|
6978
|
+
'wfv.instances': 'Instances',
|
|
6979
|
+
'wfv.activate_confirm': 'Activate version {version}? New instances start it; running ones keep their version.',
|
|
6980
|
+
'wfv.activate': 'Activate',
|
|
6981
|
+
'wfv.discard_confirm': 'Discard version {version} and its changes?',
|
|
6982
|
+
'wfv.discard': 'Discard',
|
|
6983
|
+
'wfv.diagram': 'Diagram',
|
|
6984
|
+
'wfv.new_label': 'Label of the new version',
|
|
6985
|
+
'wfv.new': 'Create new version',
|
|
6986
|
+
'wfv.new_help': 'A copy of version {version} to edit; the label is optional ({next}).',
|
|
6987
|
+
'wfv.diagram_dev': 'Diagram of version {version} (development)',
|
|
6988
|
+
'wfv.diagram_of': 'Diagram of version {version}',
|
|
6989
|
+
'wfv.drafts': 'Draft steps ({steps}) are placeholders: replace them before activating version {version}.',
|
|
6990
|
+
'wfv.svg': 'Download SVG',
|
|
6991
|
+
'wfv.png': 'Download PNG',
|
|
6992
|
+
'wfv.counts': 'Instances: {counts}. Running instances keep the steps of the version they started with.',
|
|
6993
|
+
'wfv.none_yet': 'none yet',
|
|
6994
|
+
'wfv.migrate_title': 'Migrate running instances to a newer version',
|
|
6995
|
+
'wfv.migrate': 'Migrate instances…',
|
|
6996
|
+
'wfv.id': 'Id',
|
|
6997
|
+
'wfv.title': 'Title',
|
|
6998
|
+
'wfv.at': 'At',
|
|
6999
|
+
'wfv.started': 'Started',
|
|
7000
|
+
'wfv.instance_at': 'Instance {id}, version {version}: at {steps}',
|
|
7001
|
+
'wfv.instance': 'Instance {id}, version {version}',
|
|
7002
|
+
'wfv.pick': 'Pick an instance to see where it is in the diagram of its version.',
|
|
7003
|
+
'wfv.bad_label': 'A version label is letters, digits, dots, dashes and underscores (at most 30).',
|
|
7004
|
+
'wfv.created': 'Version {version} created (development): edit its steps, then activate it.',
|
|
7005
|
+
'wfv.no_dev': 'There is no version in development.',
|
|
7006
|
+
'wfv.cant_activate': 'Version {version} can\'t be activated: {problems}',
|
|
7007
|
+
'wfv.activated_flash': 'Version {version} is active: new instances start it.',
|
|
7008
|
+
'wfv.discarded': 'Version {version} discarded.',
|
|
7009
|
+
'wfv.was_no_dev': 'There was no version in development.',
|
|
7010
|
+
// ------------------------------------------------------------ Workflow migration (sprint 164 part 12)
|
|
7011
|
+
'wfm.no_steps': 'This version has no steps to draw.',
|
|
7012
|
+
'wfm.choose_instances': 'Choose the instances to migrate.',
|
|
7013
|
+
'wfm.title': 'Migrate running instances',
|
|
7014
|
+
'wfm.none_running': '{name} has no running instances.',
|
|
7015
|
+
'wfm.back_to': 'Back to {name}',
|
|
7016
|
+
'wfm.all_current': 'Every running instance of {name} runs the active version {version}: there is no newer version to move them to.',
|
|
7017
|
+
'wfm.intro': 'Move running instances to a newer version: each goes on at the step of the new version its current step is mapped to, keeping its variables and the task it waits for. An instance inside parallel branches moves as a whole: its main path at its join and each open branch at its own step, each mapped (a join stays a join). Every position must have a mapping, or nothing moves.',
|
|
7018
|
+
'wfm.to_version': 'To version',
|
|
7019
|
+
'wfm.to_help': 'Changing it: preview again to see its steps.',
|
|
7020
|
+
'wfm.older': 'Instances on an older version',
|
|
7021
|
+
'wfm.migrate': 'Migrate',
|
|
7022
|
+
'wfm.migrate_instance': 'Migrate instance {id}',
|
|
7023
|
+
'wfm.branches_at': 'branches at {steps}',
|
|
7024
|
+
'wfm.none_older': 'No running instance is older than version {version}.',
|
|
7025
|
+
'wfm.map': 'Map the current steps to steps of version {version}',
|
|
7026
|
+
'wfm.no_mapping': '— no mapping —',
|
|
7027
|
+
'wfm.preview': 'Preview',
|
|
7028
|
+
'wfm.path': 'Path',
|
|
7029
|
+
'wfm.from': 'From',
|
|
7030
|
+
'wfm.to': 'To',
|
|
7031
|
+
'wfm.result': 'Result',
|
|
7032
|
+
'wfm.branch': 'branch {name}',
|
|
7033
|
+
'wfm.main': 'main',
|
|
7034
|
+
'wfm.ready': 'ready',
|
|
7035
|
+
'wfm.confirm': 'Migrate {n} instance(s) to version {version}?',
|
|
7036
|
+
'wfm.do': 'Migrate {n} instance(s)',
|
|
7037
|
+
'wfm.not_ready': 'Map a step for every instance and branch (or leave the instances out) and preview again: nothing is migrated while one can\'t move.',
|
|
7038
|
+
'wfm.version': 'Version {version}',
|
|
7039
|
+
'wfm.page_title': 'Migrate {name}',
|
|
7040
|
+
'wfm.crumb': 'Migrate instances',
|
|
7041
|
+
'wfm.choose_version': 'Choose the version to migrate to.',
|
|
7042
|
+
'wfm.done': '{n} instance(s) of {name} migrated to version {version}.',
|
|
7043
|
+
// ------------------------------------------------------------ Upgrade application (sprint 164 part 13)
|
|
7044
|
+
'upg.rule_nav_title': 'Navigation appearance',
|
|
7045
|
+
'upg.rule_nav_since': 'Navigation appearances (Pillar Light, Pillar Dark) came with sprint 117.',
|
|
7046
|
+
'upg.rule_date_title': 'Date picker for date columns',
|
|
7047
|
+
'upg.rule_date_since': 'Date and date-time items have had pgkiln\'s date picker since sprint 84.',
|
|
7048
|
+
'upg.rule_popup_title': 'Paged list of values for large tables',
|
|
7049
|
+
'upg.rule_popup_since': 'Popup lists of values search and page on the server.',
|
|
7050
|
+
'upg.label_theme': 'Application settings › Theme',
|
|
7051
|
+
'upg.reason_nav': 'The application has no navigation appearance: Pillar Light gives the header strip and the filled current page of new applications.',
|
|
7052
|
+
'upg.label_item': 'Page {page} › item {name}',
|
|
7053
|
+
'upg.reason_date': '{column} is a {type} column shown as a text field: a date item has the date picker and reads the date in the application\'s format.',
|
|
7054
|
+
'upg.reason_datetime': '{column} is a {type} column shown as a text field: a datetime item has the date picker and reads the date in the application\'s format.',
|
|
7055
|
+
'upg.reason_popup': 'Its list of values reads {table} (about {n} rows): a select list sends every row with the page; a popup list of values searches and pages on the server.',
|
|
7056
|
+
'upg.col_component': 'Component',
|
|
7057
|
+
'upg.col_why': 'Why',
|
|
7058
|
+
'upg.col_actions': 'Actions',
|
|
7059
|
+
'upg.preview': 'Preview',
|
|
7060
|
+
'upg.upgrade': 'Upgrade',
|
|
7061
|
+
'upg.upgrade_all': 'Upgrade all {n}',
|
|
7062
|
+
'upg.nothing': 'Nothing to upgrade.',
|
|
7063
|
+
'upg.intro': 'Components made before a pgkiln version that brought a better default. Preview a change, then upgrade one component or all of a kind; every upgrade is in the change history (and the backups) if you want to go back.',
|
|
7064
|
+
'upg.preview_title': 'Preview: {label}',
|
|
7065
|
+
'upg.title': 'Upgrade application · {name}',
|
|
7066
|
+
'upg.gone': 'Nothing to upgrade: the component was changed or upgraded in the meantime.',
|
|
7067
|
+
'upg.done_one': '{label} upgraded.',
|
|
7068
|
+
'upg.done_n': '{n} components upgraded.',
|
|
7069
|
+
// ------------------------------------------------------------ Report layouts: logo (sprint 164 part 13)
|
|
7070
|
+
'lay.logo_image': 'Logo image',
|
|
7071
|
+
'lay.logo_alt': 'Logo of this layout',
|
|
7072
|
+
'lay.no_logo': 'No logo. It prints at the top right of the first page.',
|
|
7073
|
+
'lay.logo_file': 'Logo (PNG or JPEG)',
|
|
7074
|
+
'lay.upload': 'Upload',
|
|
7075
|
+
'lay.remove': 'Remove logo',
|
|
7076
|
+
'lay.preview_pdf': 'Preview PDF',
|
|
7077
|
+
'lay.removed': 'Logo removed.',
|
|
7078
|
+
'lay.choose': 'Choose a PNG or JPEG file.',
|
|
7079
|
+
'lay.too_large': 'The logo is larger than {mb} MB.',
|
|
7080
|
+
'lay.not_image': 'The logo must be a PNG or JPEG image.',
|
|
7081
|
+
'lay.saved': 'Logo saved.',
|
|
7082
|
+
// ------------------------------------------------------------ Object dependencies (sprint 164 part 13)
|
|
7083
|
+
'dep.not_parsed': 'Not scanned (only SELECT, INSERT, UPDATE, DELETE and MERGE are parsed): {statements}',
|
|
7084
|
+
'dep.page_tag': 'page {n}',
|
|
7085
|
+
'dep.col_object': 'Object',
|
|
7086
|
+
'dep.col_type': 'Type',
|
|
7087
|
+
'dep.col_status': 'Status',
|
|
7088
|
+
'dep.col_pages': 'Pages',
|
|
7089
|
+
'dep.col_used_by': 'Used by',
|
|
7090
|
+
'dep.missing': 'Missing',
|
|
7091
|
+
'dep.no_grant': 'No grant',
|
|
7092
|
+
'dep.lacks': '{role} lacks {privileges}',
|
|
7093
|
+
'dep.ok': 'OK',
|
|
7094
|
+
'dep.n_component': '{n} component',
|
|
7095
|
+
'dep.n_components': '{n} components',
|
|
7096
|
+
'dep.no_objects': 'No objects.',
|
|
7097
|
+
'dep.no_match': 'No objects match.',
|
|
7098
|
+
'dep.intro': 'The tables, views, sequences and functions the application\'s SQL uses ({n} statements parsed as the role {role}; nothing is run), with the components that use them. Missing objects and privileges the role lacks are marked.',
|
|
7099
|
+
'dep.runtime_connection': '(the runtime connection)',
|
|
7100
|
+
'dep.n_objects': '{n} objects',
|
|
7101
|
+
'dep.n_missing': '{n} missing',
|
|
7102
|
+
'dep.n_without_grants': '{n} without the grants they need',
|
|
7103
|
+
'dep.filter': 'Filter',
|
|
7104
|
+
'dep.filter_ph': 'e.g. sales.orders',
|
|
7105
|
+
'dep.all_objects': 'All objects',
|
|
7106
|
+
'dep.only_problems': 'Only problems',
|
|
7107
|
+
'dep.not_scanned': 'Not scanned',
|
|
7108
|
+
'dep.note': 'Note',
|
|
7109
|
+
'dep.title': 'Object dependencies · {name}',
|
|
7110
|
+
'dep.crumb': 'Object dependencies',
|
|
7111
|
+
// ------------------------------------------------------------ UI defaults (sprint 164 part 13)
|
|
7112
|
+
'uid.schema': 'Schema',
|
|
7113
|
+
'uid.choose_schema': 'Choose a schema',
|
|
7114
|
+
'uid.table_or_view': 'Table or view',
|
|
7115
|
+
'uid.choose_table': 'Choose a table',
|
|
7116
|
+
'uid.col_column': 'Column',
|
|
7117
|
+
'uid.col_label': 'Label',
|
|
7118
|
+
'uid.col_mask': 'Format mask',
|
|
7119
|
+
'uid.col_alignment': 'Alignment',
|
|
7120
|
+
'uid.col_help': 'Help',
|
|
7121
|
+
'uid.col_lov': 'List of values',
|
|
7122
|
+
'uid.label_of': 'Label of {column}',
|
|
7123
|
+
'uid.mask_of': 'Format mask of {column}',
|
|
7124
|
+
'uid.alignment_of': 'Alignment of {column}',
|
|
7125
|
+
'uid.help_of': 'Help of {column}',
|
|
7126
|
+
'uid.lov_of': 'List of values of {column}',
|
|
7127
|
+
'uid.seed': 'Seed from comments',
|
|
7128
|
+
'uid.help': 'An empty row has no UI default. The placeholder of a label shows what the wizards use without one. Lists of values: `LOV:NAME` (a shared list of values of the application), `STATIC:Yes;Y,No;N` or a query (`select name d, id r from sales.status`).',
|
|
7129
|
+
'uid.per_column': 'UI defaults per column',
|
|
7130
|
+
'uid.intro': 'Label, format mask, help text, alignment and list of values per table column (APEX: Attribute Dictionary). The page wizards and the Create Application wizard use the label for every generated report heading and form item, and a generated form item also gets the format mask, help and list of values. They apply to pages generated after the change, in every application.',
|
|
7131
|
+
'uid.seeded_one': 'UI defaults of {n} column made from their comments.',
|
|
7132
|
+
'uid.seeded': 'UI defaults of {n} columns made from their comments.',
|
|
7133
|
+
'uid.no_comments': 'No column without a UI default has a comment.',
|
|
7134
|
+
'uid.bad_mask': 'Format mask of {column}: letters, digits and . , : / - only (e.g. 999G990D00 or DD.MM.YYYY).',
|
|
7135
|
+
'uid.bad_alignment': 'Alignment of {column}: start, center or end.',
|
|
7136
|
+
'uid.saved': 'UI defaults of {table} saved.',
|
|
7137
|
+
// ------------------------------------------------------------ Supporting objects (sprint 164 part 13)
|
|
7138
|
+
'sup.statement': 'Statement',
|
|
7139
|
+
'sup.rows': '{command}, {n} row(s)',
|
|
7140
|
+
'sup.ran_install': 'The install scripts ran: {n} statement(s), committed.',
|
|
7141
|
+
'sup.ran_upgrade': 'The upgrade scripts ran: {n} statement(s), committed.',
|
|
7142
|
+
'sup.ran_deinstall': 'The deinstall scripts ran: {n} statement(s), committed.',
|
|
7143
|
+
'sup.failed_install': 'The install scripts failed: everything they did was undone (rolled back).',
|
|
7144
|
+
'sup.failed_upgrade': 'The upgrade scripts failed: everything they did was undone (rolled back).',
|
|
7145
|
+
'sup.failed_deinstall': 'The deinstall scripts failed: everything they did was undone (rolled back).',
|
|
7146
|
+
'sup.error': 'Error: {message}',
|
|
7147
|
+
'sup.imported': 'This application came with supporting objects. They were {b}not{b_end} run: read them below and run them only if you trust them.',
|
|
7148
|
+
'sup.result_install': 'Result: install scripts',
|
|
7149
|
+
'sup.result_upgrade': 'Result: upgrade scripts',
|
|
7150
|
+
'sup.result_deinstall': 'Result: deinstall scripts',
|
|
7151
|
+
'sup.intro': 'Scripts that install, upgrade or remove what the application needs in the database. They travel with the export and run only from here, when you choose to: as the application\'s database role {role}, statement by statement in one transaction (an error undoes the whole run). {add} under Shared Components.',
|
|
7152
|
+
'sup.no_role': '(none: the runtime connection)',
|
|
7153
|
+
'sup.add_script': 'Add a script',
|
|
7154
|
+
'sup.h_install': 'Install scripts ({n})',
|
|
7155
|
+
'sup.h_upgrade': 'Upgrade scripts ({n})',
|
|
7156
|
+
'sup.h_deinstall': 'Deinstall scripts ({n})',
|
|
7157
|
+
'sup.edit': 'Edit',
|
|
7158
|
+
'sup.run_install': 'Run the install scripts',
|
|
7159
|
+
'sup.run_upgrade': 'Run the upgrade scripts',
|
|
7160
|
+
'sup.run_deinstall': 'Run the deinstall scripts',
|
|
7161
|
+
'sup.confirm_install': 'Run the install scripts of {app} as {role}?',
|
|
7162
|
+
'sup.confirm_upgrade': 'Run the upgrade scripts of {app} as {role}?',
|
|
7163
|
+
'sup.confirm_deinstall': 'Run the deinstall scripts of {app} as {role}?',
|
|
7164
|
+
'sup.runtime_connection': 'the runtime connection',
|
|
7165
|
+
'sup.none': 'None.',
|
|
7166
|
+
'sup.unknown_kind': 'Unknown kind of script',
|
|
7167
|
+
// ------------------------------------------------------------ Cross-application reports (sprint 164 part 13)
|
|
7168
|
+
'xap.attributes.title': 'Application attributes',
|
|
7169
|
+
'xap.attributes.about': 'The main settings of every application: type, sign-in, availability, build status, debug level, language and database role.',
|
|
7170
|
+
'xap.build_options.title': 'Build options',
|
|
7171
|
+
'xap.build_options.about': 'The build options of every application and whether their components are included.',
|
|
7172
|
+
'xap.comments.title': 'Developer comments',
|
|
7173
|
+
'xap.comments.about': 'The developers\' comments on applications and pages, newest first.',
|
|
7174
|
+
'xap.authentication.title': 'Authentication',
|
|
7175
|
+
'xap.authentication.about': 'How people sign in to every application: the sign-in method, password sign-in, identity providers and LDAP directories, access control, the login page and Forgot password.',
|
|
7176
|
+
'xap.authorization.title': 'Authorization schemes',
|
|
7177
|
+
'xap.authorization.about': 'The authorization schemes of every application: their type and what they check.',
|
|
7178
|
+
'xap.password_items.title': 'Password items',
|
|
7179
|
+
'xap.password_items.about': 'Every password item: pgkiln never shows their values again, never keeps them in session state for the next page and never writes them to the debug log.',
|
|
7180
|
+
'xap.theme.title': 'Theme summary',
|
|
7181
|
+
'xap.theme.about': 'The look of every application: base style, Theme Roller style, navigation and the colours it sets.',
|
|
7182
|
+
'xap.col.alias': 'Alias',
|
|
7183
|
+
'xap.col.type': 'Type',
|
|
7184
|
+
'xap.col.sign_in': 'Sign-in',
|
|
7185
|
+
'xap.col.availability': 'Availability',
|
|
7186
|
+
'xap.col.build_status': 'Build status',
|
|
7187
|
+
'xap.col.debug': 'Debug',
|
|
7188
|
+
'xap.col.language': 'Language',
|
|
7189
|
+
'xap.col.database_role': 'Database role',
|
|
7190
|
+
'xap.col.updated': 'Updated',
|
|
7191
|
+
'xap.col.build_option': 'Build option',
|
|
7192
|
+
'xap.col.status': 'Status',
|
|
7193
|
+
'xap.col.description': 'Description',
|
|
7194
|
+
'xap.col.page': 'Page',
|
|
7195
|
+
'xap.col.author': 'Author',
|
|
7196
|
+
'xap.col.written': 'Written',
|
|
7197
|
+
'xap.col.comment': 'Comment',
|
|
7198
|
+
'xap.col.passwords': 'Passwords',
|
|
7199
|
+
'xap.col.identity_providers': 'Identity providers',
|
|
7200
|
+
'xap.col.ldap_directories': 'LDAP directories',
|
|
7201
|
+
'xap.col.access': 'Access',
|
|
7202
|
+
'xap.col.keep_me_signed_in_days': 'Keep me signed in (days)',
|
|
7203
|
+
'xap.col.login_page': 'Login page',
|
|
7204
|
+
'xap.col.forgot_password': 'Forgot password',
|
|
7205
|
+
'xap.col.scheme': 'Scheme',
|
|
7206
|
+
'xap.col.checks': 'Checks',
|
|
7207
|
+
'xap.col.error_message': 'Error message',
|
|
7208
|
+
'xap.col.item': 'Item',
|
|
7209
|
+
'xap.col.label': 'Label',
|
|
7210
|
+
'xap.col.show_button': 'Show button',
|
|
7211
|
+
'xap.col.required': 'Required',
|
|
7212
|
+
'xap.col.base_style': 'Base style',
|
|
7213
|
+
'xap.col.style': 'Style',
|
|
7214
|
+
'xap.col.navigation': 'Navigation',
|
|
7215
|
+
'xap.col.colours_set': 'Colours set',
|
|
7216
|
+
'xap.col.installable_pwa': 'Installable (PWA)',
|
|
7217
|
+
'xap.of_workspace': 'Applications of the workspace {name}.',
|
|
7218
|
+
'xap.nav': 'Cross-application reports',
|
|
7219
|
+
'xap.application': 'Application',
|
|
7220
|
+
'xap.nothing': 'Nothing to report in this workspace.',
|
|
7221
|
+
// ------------------------------------------------------------ Workspace export and import (sprint 164 part 13)
|
|
7222
|
+
'wtr.admins_only': 'Only administrators and the workspace\'s administrators export or import a workspace\'s components.',
|
|
7223
|
+
'wtr.components': 'Components',
|
|
7224
|
+
'wtr.in_file': 'in the file',
|
|
7225
|
+
'wtr.issues': '{n} issue(s)',
|
|
7226
|
+
'wtr.intro': 'The components of the workspace {name} as one file: to copy them to another workspace or installation, or to keep them with your applications\' files. Applications are exported on their own (App Builder → an application → Export).',
|
|
7227
|
+
'wtr.imported_into': 'Imported into {name}:',
|
|
7228
|
+
'wtr.export': 'Export',
|
|
7229
|
+
'wtr.import': 'Import',
|
|
7230
|
+
'wtr.not_in_file': 'Not in the file: the workspace\'s name, its isolation and database roles, passwords and secrets, script runs and other history.',
|
|
7231
|
+
'wtr.import_intro': 'A file exported from a workspace, imported into {name}. Nothing is deleted; developers are added only when this installation has a developer of that name.',
|
|
7232
|
+
'wtr.file': 'Workspace file',
|
|
7233
|
+
'wtr.replace': 'Replace components with the same name (otherwise this workspace\'s own are kept)',
|
|
7234
|
+
'wtr.choose_part': 'Choose at least one kind of component.',
|
|
7235
|
+
'wtr.too_big': 'The file is larger than {n} MB.',
|
|
7236
|
+
'wtr.choose_file': 'Choose a workspace file.',
|
|
7237
|
+
'wtr.not_json': 'The file is not valid JSON.',
|
|
7238
|
+
'wtr.failed': 'Import failed, nothing was changed: {reason}',
|
|
7239
|
+
'wtr.refused_value': 'the file has a value this installation refuses ({detail}).',
|
|
7240
|
+
'wtr.duplicate': 'the file has two components with the same name ({detail}).',
|
|
7241
|
+
'wtr.part.settings': 'Settings: description, message, banner and preferences',
|
|
7242
|
+
'wtr.part.developers': 'Developers and workspace administrators',
|
|
7243
|
+
'wtr.part.app_groups': 'Application groups',
|
|
7244
|
+
'wtr.part.extension_links': 'Extension links',
|
|
7245
|
+
'wtr.part.rest_catalogs': 'REST source catalogs',
|
|
7246
|
+
'wtr.part.sql_scripts': 'SQL scripts',
|
|
7247
|
+
'wtr.part.blueprints': 'Blueprints',
|
|
7248
|
+
'wtr.part.data_generators': 'Data generators',
|
|
7249
|
+
'wtr.part.datasets': 'Data Reporter datasets',
|
|
7250
|
+
'wtr.part.team': 'Team Development: labels, milestones, templates and issues',
|
|
7251
|
+
'wtr.part.workspace_files': 'Static workspace files',
|
|
7252
|
+
'wtr.part.remote_servers': 'Remote servers (an existing server keeps its base URL)',
|
|
7253
|
+
'wtr.part.web_credentials': 'Web credentials (without their secrets)',
|
|
7254
|
+
// ------------------------------------------------------------ Application backups (sprint 164 part 13)
|
|
7255
|
+
'bkp.reason.import': 'before an import',
|
|
7256
|
+
'bkp.reason.merge': 'before a working copy merge',
|
|
7257
|
+
'bkp.reason.restore': 'before a restore',
|
|
7258
|
+
'bkp.reason.daily': 'daily',
|
|
7259
|
+
'bkp.reason.manual': 'made by hand',
|
|
7260
|
+
'bkp.intro': 'Exports of this application kept by this installation: one before every import that replaces it (also from the command line and the MCP server), before a working copy merge and a restore, one a day when it changed, and the ones made here. The newest {n} are kept. Backups are not exported.',
|
|
7261
|
+
'bkp.made_utc': 'Made (UTC)',
|
|
7262
|
+
'bkp.made': 'Made',
|
|
7263
|
+
'bkp.why': 'Why',
|
|
7264
|
+
'bkp.by': 'By',
|
|
7265
|
+
'bkp.note': 'Note',
|
|
7266
|
+
'bkp.size': 'Size',
|
|
7267
|
+
'bkp.actions': 'Actions',
|
|
7268
|
+
'bkp.download': 'Download',
|
|
7269
|
+
'bkp.restore_confirm': 'Restore the application as it was on {when}? Its pages, shared components and settings become those of the backup; the current version is backed up first.',
|
|
7270
|
+
'bkp.restore': 'Restore',
|
|
7271
|
+
'bkp.delete_confirm': 'Delete this backup?',
|
|
7272
|
+
'bkp.delete': 'Delete',
|
|
7273
|
+
'bkp.none': 'No backups yet.',
|
|
7274
|
+
'bkp.back_up_now': 'Back up now',
|
|
7275
|
+
'bkp.note_placeholder': 'e.g. before the new dashboard',
|
|
7276
|
+
'bkp.keep': 'Keep',
|
|
7277
|
+
'bkp.to_keep': 'Backups to keep',
|
|
7278
|
+
'bkp.to_keep_help': '0 to 500; 0 makes no backups at all (also not before an import).',
|
|
7279
|
+
'bkp.page_title': '{name} backups',
|
|
7280
|
+
'bkp.made_flash': 'Backup made.',
|
|
7281
|
+
'bkp.none_kept': 'No backup made: this application keeps none (set "Backups to keep").',
|
|
7282
|
+
'bkp.keep_invalid': 'Backups to keep: a whole number from 0 to 500.',
|
|
7283
|
+
'bkp.saved': 'Saved.',
|
|
7284
|
+
'bkp.not_found': 'Backup not found.',
|
|
7285
|
+
'bkp.restored': 'Restored the application as it was on {when}. The version it replaced is the newest backup.',
|
|
7286
|
+
'bkp.restore_failed': 'Restore failed: {message}',
|
|
7287
|
+
'bkp.deleted': 'Backup deleted.',
|
|
7288
|
+
'bkp.not_found_short': 'Not found.',
|
|
7289
|
+
// ------------------------------------------------------------ Manage backups (sprint 164 part 13)
|
|
7290
|
+
'wbk.intro': 'The backups of the applications of {name}: one before every import that replaces an application, a merge or a restore, one a day when it changed, and the ones made by hand. Open an application\'s backups to download, restore or delete one.',
|
|
7291
|
+
'wbk.intro_this': 'The backups of the applications of this workspace: one before every import that replaces an application, a merge or a restore, one a day when it changed, and the ones made by hand. Open an application\'s backups to download, restore or delete one.',
|
|
7292
|
+
'wbk.applications': 'Applications',
|
|
7293
|
+
'wbk.application': 'Application',
|
|
7294
|
+
'wbk.backups': 'Backups',
|
|
7295
|
+
'wbk.storage': 'Storage',
|
|
7296
|
+
'wbk.changed_since_newest': 'Changed since their newest backup',
|
|
7297
|
+
'wbk.kept': 'Kept',
|
|
7298
|
+
'wbk.newest_utc': 'Newest (UTC)',
|
|
7299
|
+
'wbk.newest': 'Newest',
|
|
7300
|
+
'wbk.size': 'Size',
|
|
7301
|
+
'wbk.none': 'none',
|
|
7302
|
+
'wbk.never': 'never',
|
|
7303
|
+
'wbk.changed_since': 'changed since',
|
|
7304
|
+
'wbk.no_apps': 'No applications.',
|
|
7305
|
+
'wbk.back_up_all': 'Back up all applications',
|
|
7306
|
+
'wbk.back_up_all_text': 'Makes a backup of every application of this workspace that keeps backups.',
|
|
7307
|
+
'wbk.note': 'Note',
|
|
7308
|
+
'wbk.note_placeholder': 'e.g. before the upgrade',
|
|
7309
|
+
'wbk.only_changed': 'Only applications changed since their newest backup',
|
|
7310
|
+
'wbk.back_up_now': 'Back up now',
|
|
7311
|
+
'wbk.failed_one': '{n} backup(s) made; not backed up: application {ids}.',
|
|
7312
|
+
'wbk.failed_many': '{n} backup(s) made; not backed up: applications {ids}.',
|
|
7313
|
+
'wbk.made_one': '{n} backup made.',
|
|
7314
|
+
'wbk.made_many': '{n} backups made.',
|
|
7315
|
+
'wbk.nothing': 'Nothing to back up: every application is unchanged since its newest backup, or keeps none.',
|
|
7316
|
+
// ------------------------------------------------------------ Availability (sprint 164 part 13)
|
|
7317
|
+
'avl.mode.available': 'Available',
|
|
7318
|
+
'avl.mode.developers': 'Available to developers only',
|
|
7319
|
+
'avl.mode.restricted': 'Restricted to the users below (and developers)',
|
|
7320
|
+
'avl.mode.unavailable': 'Unavailable',
|
|
7321
|
+
'avl.intro': 'Who may use the running application. Developers are those signed in to the builder in the same browser (they see the developer toolbar). Pages, file downloads, REST modules and the REST API follow this setting; automations, workflows, background jobs and queued mail keep running. It belongs to this installation: exports leave it out and an import over the application keeps it.',
|
|
7322
|
+
'avl.status': 'Status',
|
|
7323
|
+
'avl.message': 'Message',
|
|
7324
|
+
'avl.message_help': 'Shown when the application is unavailable or for developers only, e.g. "We are upgrading the application; back at 14:00." Empty: a standard message in the user\'s language.',
|
|
7325
|
+
'avl.users': 'Users (restricted)',
|
|
7326
|
+
'avl.users_help': 'User names separated by commas or spaces. They sign in as usual; others get "not available to your account".',
|
|
7327
|
+
'avl.build_status': 'Build status',
|
|
7328
|
+
'avl.run_and_build': 'Run and build',
|
|
7329
|
+
'avl.run_only': 'Run only',
|
|
7330
|
+
'avl.build_status_help': 'Run only: the builder refuses changes to the application (pages, shared components, settings, restores) until it is set back here. pgkiln import --replace still deploys it.',
|
|
7331
|
+
'avl.page_title': '{name} availability',
|
|
7332
|
+
'avl.users_invalid': 'User names are at most 100 characters, without spaces or colons.',
|
|
7333
|
+
'avl.saved': 'Availability saved.',
|
|
7334
|
+
'avl.not_found': 'Not found.',
|
|
7335
|
+
// ------------------------------------------------------------ Feedback (sprint 164 part 13)
|
|
7336
|
+
'fbk.title': 'Feedback',
|
|
7337
|
+
'fbk.status.open': 'Open',
|
|
7338
|
+
'fbk.status.in_progress': 'In progress',
|
|
7339
|
+
'fbk.status.done': 'Done',
|
|
7340
|
+
'fbk.status.declined': 'Declined',
|
|
7341
|
+
'fbk.kind.comment': 'Comment',
|
|
7342
|
+
'fbk.kind.idea': 'Idea',
|
|
7343
|
+
'fbk.kind.problem': 'Problem',
|
|
7344
|
+
'fbk.enable': 'Users can send feedback',
|
|
7345
|
+
'fbk.enable_help': 'A {link} link in the application\'s navigation bar opens a page for a comment, an idea or a problem about the page the user came from, with their earlier feedback and your answers.',
|
|
7346
|
+
'fbk.counts': '{open} open, {in_progress} in progress, {done} done, {declined} declined.',
|
|
7347
|
+
'fbk.status': 'Status',
|
|
7348
|
+
'fbk.kind': 'Kind',
|
|
7349
|
+
'fbk.all': 'All',
|
|
7350
|
+
'fbk.page': 'page {n}',
|
|
7351
|
+
'fbk.answer': 'Answer (the user sees it)',
|
|
7352
|
+
'fbk.answered_by': 'By {user}, {when}',
|
|
7353
|
+
'fbk.none': 'No feedback yet.',
|
|
7354
|
+
'fbk.none_filtered': 'No feedback with these filters.',
|
|
7355
|
+
'fbk.page_title': '{name} feedback',
|
|
7356
|
+
'fbk.saved': 'Saved.',
|
|
7357
|
+
'fbk.not_found': 'Not found.',
|
|
7358
|
+
// ------------------------------------------------------------ Plug-ins (plugins.ts) (sprint 164 part 13)
|
|
7359
|
+
'plg.type.region': 'Region',
|
|
7360
|
+
'plg.type.item': 'Item',
|
|
7361
|
+
'plg.type.dynamic_action': 'Dynamic action',
|
|
7362
|
+
'plg.type.process': 'Process',
|
|
7363
|
+
'plg.heading.region': '{label} (Region plug-in)',
|
|
7364
|
+
'plg.heading.item': '{label} (Item plug-in)',
|
|
7365
|
+
'plg.heading.dynamic_action': '{label} (Dynamic action plug-in)',
|
|
7366
|
+
'plg.heading.process': '{label} (Process plug-in)',
|
|
7367
|
+
'plg.use.region': 'page {page}: region {name}',
|
|
7368
|
+
'plg.use.item': 'page {page}: item {name}',
|
|
7369
|
+
'plg.use.process': 'page {page}: process {name}',
|
|
7370
|
+
'plg.use.dynamic_action': 'page {page}: dynamic action {name}',
|
|
7371
|
+
'plg.how.dynamic_action': 'Use it as a dynamic action with action `plugin`, Code `{name}` and Plug-in attributes `{"attributes": {…}}`.',
|
|
7372
|
+
'plg.how.region': 'Use it as a region of type `plugin` with configuration `{"plugin": "{name}", "attributes": {…}}`.',
|
|
7373
|
+
'plg.how.item': 'Use it as a item of type `plugin` with configuration `{"plugin": "{name}", "attributes": {…}}`.',
|
|
7374
|
+
'plg.how.process': 'Use it as a process of type `plugin` with configuration `{"plugin": "{name}", "attributes": {…}}`.',
|
|
7375
|
+
'plg.name': 'Name',
|
|
7376
|
+
'plg.version_n': 'version {version}',
|
|
7377
|
+
'plg.help': 'Help',
|
|
7378
|
+
'plg.used_by': 'Used by',
|
|
7379
|
+
'plg.nothing_yet': 'nothing yet',
|
|
7380
|
+
'plg.files': 'Files',
|
|
7381
|
+
'plg.missing': 'missing',
|
|
7382
|
+
'plg.none': 'none',
|
|
7383
|
+
'plg.template': 'Template',
|
|
7384
|
+
'plg.function': 'Function',
|
|
7385
|
+
'plg.attributes': 'Attributes',
|
|
7386
|
+
'plg.label': 'Label',
|
|
7387
|
+
'plg.type': 'Type',
|
|
7388
|
+
'plg.default': 'Default',
|
|
7389
|
+
'plg.install_sql': 'Install SQL',
|
|
7390
|
+
'plg.install_help': 'Not run on import. Read it, then run it as the application\'s database role {role}, in one transaction.',
|
|
7391
|
+
'plg.role_none': '(none: the runtime connection)',
|
|
7392
|
+
'plg.confirm_install': 'Run the install SQL of {label} as {role}?',
|
|
7393
|
+
'plg.confirm_install_runtime': 'Run the install SQL of {label} as the runtime connection?',
|
|
7394
|
+
'plg.run_install': 'Run the install SQL',
|
|
7395
|
+
'plg.download': 'Download plug-in file',
|
|
7396
|
+
'plg.confirm_remove': 'Remove the plug-in {label}? Its files and template component stay.',
|
|
7397
|
+
'plg.remove': 'Remove',
|
|
7398
|
+
'plg.result': 'Result: install SQL of {name}',
|
|
7399
|
+
'plg.title': 'Plug-ins',
|
|
7400
|
+
'plg.intro': 'Region, item, dynamic action and process types that bring their own code: JavaScript and CSS as {files} (registered with {register}), a template component, a PL/pgSQL function.',
|
|
7401
|
+
'plg.intro_trust': 'A plug-in\'s code runs with this application\'s rights: import only plug-ins you trust and read their files.',
|
|
7402
|
+
'plg.static_files': 'static application files',
|
|
7403
|
+
'plg.plugin': 'Plug-in',
|
|
7404
|
+
'plg.version': 'Version',
|
|
7405
|
+
'plg.no_plugins': 'No plug-ins yet.',
|
|
7406
|
+
'plg.import_title': 'Import a plug-in',
|
|
7407
|
+
'plg.file_label': 'Plug-in file (`pgkiln-plugin/2` JSON)',
|
|
7408
|
+
'plg.or_paste': '…or paste it',
|
|
7409
|
+
'plg.replace': 'Replace a plug-in, files and template component with the same names',
|
|
7410
|
+
'plg.import': 'Import',
|
|
7411
|
+
'plg.import_help': 'Template components for older plug-in files (`pgkiln-plugin/1`) are imported under Template components. `examples/plugins/` has examples.',
|
|
7412
|
+
'plg.not_json': 'Import failed: the plug-in file is not valid JSON.',
|
|
7413
|
+
'plg.choose_file': 'Choose a plug-in file or paste one.',
|
|
7414
|
+
'plg.imported': 'Plug-in {label} imported.',
|
|
7415
|
+
'plg.imported_install': 'Plug-in {label} imported. Read its install SQL below before running it.',
|
|
7416
|
+
'plg.import_failed': 'Import failed: {message}',
|
|
7417
|
+
'plg.removed': 'Plug-in removed. Its files and template component stay (delete them on their own pages).',
|
|
7418
|
+
'plg.no_such': 'No such plug-in.',
|
|
7419
|
+
// ------------------------------------------------------------ App Gallery (gallery.ts) (sprint 164 part 13)
|
|
7420
|
+
'gal.tab.samples': 'Sample Apps',
|
|
7421
|
+
'gal.tab.starters': 'Starter Apps',
|
|
7422
|
+
'gal.tab.utilities': 'Utility Apps',
|
|
7423
|
+
'gal.tab.custom': 'Custom Apps',
|
|
7424
|
+
'gal.kinds': 'Kinds of applications',
|
|
7425
|
+
'gal.install': 'Install',
|
|
7426
|
+
'gal.installed': 'Installed',
|
|
7427
|
+
'gal.edit': 'Edit',
|
|
7428
|
+
'gal.other_workspace': 'in another workspace',
|
|
7429
|
+
'gal.confirm_install': 'Install {title}? It adds its own schema, data and demo accounts with known passwords: not for a production instance.',
|
|
7430
|
+
'gal.admin_installs': 'An administrator installs it.',
|
|
7431
|
+
'gal.this_workspace': 'This workspace',
|
|
7432
|
+
'gal.boilerplate_desc': 'A boilerplate application: a new application starts with its pages, shared components and settings.',
|
|
7433
|
+
'gal.create_from': 'Create from it',
|
|
7434
|
+
'gal.no_match': 'No app matches {q}.',
|
|
7435
|
+
'gal.show_all': 'Show all',
|
|
7436
|
+
'gal.no_custom': 'No custom apps yet: make an application of type {type} (Application settings → Application type) and it appears here.',
|
|
7437
|
+
'gal.boilerplate': 'Boilerplate',
|
|
7438
|
+
'gal.empty': 'The gallery is empty.',
|
|
7439
|
+
'gal.intro.samples': 'Applications that show what pgkiln can do, each with its own schema, data and demo account: the showcase, the tutorial, one app per feature area and the UX Pattern Catalog. An administrator installs them on a development or demo instance.',
|
|
7440
|
+
'gal.intro.starters': 'Small, ready-to-use applications. Install shows what will be created (tables, pages, sample data) before anything happens; the application gets its own role and schema in this workspace.',
|
|
7441
|
+
'gal.intro.utilities': 'Applications a workspace uses rather than learns from: shared lookup lists, release notes, announcements. Like starter apps, Install shows what will be created first, and the application gets its own role and schema in this workspace.',
|
|
7442
|
+
'gal.intro.custom': 'The boilerplate applications of this workspace: start a new application from one.',
|
|
7443
|
+
'gal.search': 'Search apps',
|
|
7444
|
+
'gal.err_alias': 'an application with the alias {alias} exists already.',
|
|
7445
|
+
'gal.err_no_app': 'the scripts ran, but there is no application {alias}.',
|
|
7446
|
+
'gal.err_nothing': 'the gallery entry names nothing to install.',
|
|
7447
|
+
'gal.installed_flash': '{title} installed (/a/{alias}).',
|
|
7448
|
+
'gal.not_installed': '{title} was not installed: {message}',
|
|
7449
|
+
// ------------------------------------------------------------ Progressive Web App settings (pwa.ts) (sprint 164 part 13)
|
|
7450
|
+
'pwa.installable': 'Installable (Progressive Web App)',
|
|
7451
|
+
'pwa.installable_help': 'Phones and computers can install the app: its own icon, full screen, and the app works on with a bad or no connection.',
|
|
7452
|
+
'pwa.short_name': 'Name under the icon',
|
|
7453
|
+
'pwa.short_name_ph': 'at most 12 characters work best',
|
|
7454
|
+
'pwa.offline_pages': 'Keep visited pages on the device for offline use',
|
|
7455
|
+
'pwa.offline_pages_help': 'The pages a user opened are shown when there is no connection. They contain personal data: they are removed when someone signs in or out on the device.',
|
|
7456
|
+
'pwa.offline_submit': 'Keep forms sent without a connection, and send them later',
|
|
7457
|
+
'pwa.offline_submit_help': 'For field work: forms (with photos) are kept on the device and sent when the connection is back, under the same user, at most once.',
|
|
7458
|
+
'pwa.push': 'Push notifications',
|
|
7459
|
+
'pwa.push_help': 'Users turn them on per device under My account (or with the dynamic action push_subscribe); application code sends them with meta.send_push(user, title, body, page, items) or a send_push process. On iPhone and iPad only after the app was added to the home screen. Needs PGKILN_SECRET_KEY: the key that signs them is stored encrypted.',
|
|
7460
|
+
'pwa.icon': 'Icon (PNG, square, at least 512 × 512)',
|
|
7461
|
+
'pwa.icon_alt': 'The app\'s icon',
|
|
7462
|
+
'pwa.icon_stored': 'An icon is stored.',
|
|
7463
|
+
'pwa.remove_icon': 'Remove it',
|
|
7464
|
+
'pwa.no_icon': 'Without one, the app gets a tile with its initial in the accent colour.',
|
|
7465
|
+
'pwa.stats_devices': '{devices} device(s) of {users} user(s) receive notifications.',
|
|
7466
|
+
'pwa.stats_week': 'Last 7 days: {sent} sent, {no_device} to users without a device, {failed} failed.',
|
|
7467
|
+
'pwa.stats_week_waiting': 'Last 7 days: {sent} sent, {no_device} to users without a device, {failed} failed, {waiting} waiting.',
|
|
7468
|
+
'pwa.test_to': 'Send a test notification to',
|
|
7469
|
+
'pwa.user_name': 'user name',
|
|
7470
|
+
'pwa.send_test': 'Send test',
|
|
7471
|
+
'pwa.new_keys': 'New keys',
|
|
7472
|
+
'pwa.new_keys_help': 'Makes a new key pair (for example after the private key may have leaked). Every device stops receiving notifications until its user turns them on again.',
|
|
7473
|
+
'pwa.icon_too_large': 'The icon is larger than {mb} MB.',
|
|
7474
|
+
'pwa.icon_not_png': 'The icon must be a PNG image.',
|
|
7475
|
+
'pwa.icon_size': 'The icon must be square and at least 512 × 512 pixels (this one is {width} × {height}).',
|
|
7476
|
+
'pwa.push_needs_key': 'Push notifications need PGKILN_SECRET_KEY in the server\'s environment (the key that signs them is stored encrypted).',
|
|
7477
|
+
'pwa.saved_not_installable': 'Saved. Push notifications work only when the app is installable.',
|
|
7478
|
+
'pwa.saved': 'Progressive Web App settings saved.',
|
|
7479
|
+
'pwa.test_queued': 'Test notification queued for {n} device(s) of {user}.',
|
|
7480
|
+
'pwa.test_no_device': '{user} has not turned on notifications on any device (My account → Notifications).',
|
|
7481
|
+
'pwa.keys_made': 'New keys made. Users have to turn notifications on again on each device.',
|
|
7482
|
+
// ------------------------------------------------------------ Application search and Used in (search.ts) (sprint 164 part 13)
|
|
7483
|
+
'srch.page_tag': 'page {n}',
|
|
7484
|
+
'srch.used_in': 'Used in ({n})',
|
|
7485
|
+
'srch.not_referenced': 'Not referenced anywhere in this application.',
|
|
7486
|
+
'srch.not_referenced_item': 'Not referenced anywhere in this application (outside its own definition).',
|
|
7487
|
+
'srch.found_in': 'Found in SQL, substitutions, links and settings of this application. Database code (views, functions, policies) isn\'t searched.',
|
|
7488
|
+
'srch.placeholder': 'Text in names, titles, SQL, settings…',
|
|
7489
|
+
'srch.aria': 'Search the application',
|
|
7490
|
+
'srch.matches': '{n} matches',
|
|
7491
|
+
'srch.matches_more': '{n}+ matches',
|
|
7492
|
+
'srch.nothing': 'Nothing found for “{q}”.',
|
|
7493
|
+
'srch.intro': 'Searches every page and component of {name}: names, titles, SQL, conditions, settings and help texts.',
|
|
7494
|
+
'srch.page_title': 'Search · {name}',
|
|
7495
|
+
// ------------------------------------------------------------ REST module endpoints (rest.ts) (sprint 164 part 13)
|
|
7496
|
+
'rst.endpoints': 'Endpoints',
|
|
7497
|
+
'rst.disabled': 'The module is disabled: its endpoints answer 404.',
|
|
7498
|
+
'rst.method': 'Method',
|
|
7499
|
+
'rst.url': 'URL',
|
|
7500
|
+
'rst.type': 'Type',
|
|
7501
|
+
'rst.access': 'Access',
|
|
7502
|
+
'rst.try_it': 'Try it with a token from {link}:',
|
|
7503
|
+
'rst.rest_api': 'REST API',
|
|
7504
|
+
'rst.edit_in': 'Edit its templates and handlers, and try them, in {link}.',
|
|
7505
|
+
'rst.modules_path': 'SQL Workshop › RESTful Services › Modules',
|
|
7506
|
+
'rst.openapi': 'OpenAPI description:',
|
|
7507
|
+
// ------------------------------------------------------------ Background process jobs (process-jobs.ts) (sprint 164 part 13)
|
|
7508
|
+
'pjb.off': 'Background processes are off on this server (BACKGROUND_PROCESSES=off).',
|
|
7509
|
+
'pjb.job': 'Job',
|
|
7510
|
+
'pjb.state': 'State',
|
|
7511
|
+
'pjb.by': 'By',
|
|
7512
|
+
'pjb.queued': 'Queued',
|
|
7513
|
+
'pjb.took': 'Took',
|
|
7514
|
+
'pjb.steps': 'Steps',
|
|
7515
|
+
'pjb.message': 'Message',
|
|
7516
|
+
'pjb.no_runs': 'No runs yet.',
|
|
4056
7517
|
} as const;
|