pgkiln 0.57.0 → 0.59.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/docs/apex-feature-parity.md +1 -1
- package/docs/guide/03-builder.md +7 -3
- package/docs/guide/12-development.md +2 -1
- package/package.json +1 -1
- package/src/builder/i18n/de.ts +668 -0
- package/src/builder/i18n/en.ts +668 -0
- package/src/builder/i18n/es.ts +668 -0
- package/src/builder/i18n/fr.ts +668 -0
- package/src/builder/i18n/nl.ts +668 -0
- package/src/builder/i18n/pt.ts +668 -0
- package/src/builder/routes.ts +119 -117
- package/src/builder/shared.ts +88 -79
- package/src/builder/users.ts +123 -118
- package/src/builder/workspaces.ts +143 -135
package/src/builder/i18n/en.ts
CHANGED
|
@@ -1046,4 +1046,672 @@ export const en = {
|
|
|
1046
1046
|
'te.failed_stmt': 'Failed statement',
|
|
1047
1047
|
'te.title_table': 'Table {table}',
|
|
1048
1048
|
'te.title_create': 'Create table',
|
|
1049
|
+
// ------------------------------------------------------------ Shared Components (sprint 124)
|
|
1050
|
+
'comp.nav_entry': 'Navigation entry',
|
|
1051
|
+
'comp.nav_entry.plural': 'Navigation menu',
|
|
1052
|
+
'comp.authz_scheme': 'Authorization scheme',
|
|
1053
|
+
'comp.authz_scheme.plural': 'Authorization schemes',
|
|
1054
|
+
'comp.build_option': 'Build option',
|
|
1055
|
+
'comp.build_option.plural': 'Build options',
|
|
1056
|
+
'comp.page_group': 'Page group',
|
|
1057
|
+
'comp.page_group.plural': 'Page groups',
|
|
1058
|
+
'comp.lov': 'List of values',
|
|
1059
|
+
'comp.lov.plural': 'Lists of values',
|
|
1060
|
+
'comp.app_item': 'Application item',
|
|
1061
|
+
'comp.app_item.plural': 'Application items',
|
|
1062
|
+
'comp.app_process': 'Application process',
|
|
1063
|
+
'comp.app_process.plural': 'Application processes',
|
|
1064
|
+
'comp.app_computation': 'Application computation',
|
|
1065
|
+
'comp.app_computation.plural': 'Application computations',
|
|
1066
|
+
'comp.shortcut': 'Shortcut',
|
|
1067
|
+
'comp.shortcut.plural': 'Shortcuts',
|
|
1068
|
+
'comp.report_query': 'Report query',
|
|
1069
|
+
'comp.report_query.plural': 'Report queries',
|
|
1070
|
+
'comp.component_group': 'Component group',
|
|
1071
|
+
'comp.component_group.plural': 'Component groups',
|
|
1072
|
+
'comp.automation': 'Automation',
|
|
1073
|
+
'comp.automation.plural': 'Automations',
|
|
1074
|
+
'comp.automation_action': 'Automation action',
|
|
1075
|
+
'comp.automation_action.plural': 'Automation actions',
|
|
1076
|
+
'comp.report_layout': 'Report layout',
|
|
1077
|
+
'comp.report_layout.plural': 'Report layouts',
|
|
1078
|
+
'comp.document_template': 'Document template',
|
|
1079
|
+
'comp.document_template.plural': 'Document templates',
|
|
1080
|
+
'comp.task_definition': 'Task definition',
|
|
1081
|
+
'comp.task_definition.plural': 'Task definitions',
|
|
1082
|
+
'comp.workflow_definition': 'Workflow',
|
|
1083
|
+
'comp.workflow_definition.plural': 'Workflows',
|
|
1084
|
+
'comp.rest_module': 'REST module',
|
|
1085
|
+
'comp.rest_module.plural': 'REST modules',
|
|
1086
|
+
'comp.template_component': 'Template component',
|
|
1087
|
+
'comp.template_component.plural': 'Template components',
|
|
1088
|
+
'comp.web_credential': 'Web credential',
|
|
1089
|
+
'comp.web_credential.plural': 'Web credentials',
|
|
1090
|
+
'comp.rest_source': 'REST data source',
|
|
1091
|
+
'comp.rest_source.plural': 'REST data sources',
|
|
1092
|
+
'comp.data_load_def': 'Data load definition',
|
|
1093
|
+
'comp.data_load_def.plural': 'Data load definitions',
|
|
1094
|
+
'comp.list': 'List',
|
|
1095
|
+
'comp.list.plural': 'Lists',
|
|
1096
|
+
'comp.list_entry': 'List entry',
|
|
1097
|
+
'comp.list_entry.plural': 'List entries',
|
|
1098
|
+
'comp.supporting_script': 'Supporting script',
|
|
1099
|
+
'comp.supporting_script.plural': 'Supporting objects',
|
|
1100
|
+
'comp.search_config': 'Search configuration',
|
|
1101
|
+
'comp.search_config.plural': 'Search configurations',
|
|
1102
|
+
'comp.email_template': 'E-mail template',
|
|
1103
|
+
'comp.email_template.plural': 'E-mail templates',
|
|
1104
|
+
'comp.app_setting': 'Application setting',
|
|
1105
|
+
'comp.app_setting.plural': 'Application settings',
|
|
1106
|
+
'comp.dynamic_translation': 'Dynamic translation',
|
|
1107
|
+
'comp.dynamic_translation.plural': 'Dynamic translations',
|
|
1108
|
+
'sc.group.logic': 'Application Logic',
|
|
1109
|
+
'sc.group.security': 'Security',
|
|
1110
|
+
'sc.group.other': 'Other Components',
|
|
1111
|
+
'sc.group.navigation': 'Navigation and Search',
|
|
1112
|
+
'sc.group.ui': 'User Interface',
|
|
1113
|
+
'sc.group.files': 'Files and Reports',
|
|
1114
|
+
'sc.group.data': 'Data Sources',
|
|
1115
|
+
'sc.group.workflows': 'Workflows and Automations',
|
|
1116
|
+
'sc.group.globalization': 'Globalization',
|
|
1117
|
+
'sc.group.ai': 'Generative AI',
|
|
1118
|
+
'sc.item.application_items': 'Application Items',
|
|
1119
|
+
'sc.item.application_processes': 'Application Processes',
|
|
1120
|
+
'sc.item.application_computations': 'Application Computations',
|
|
1121
|
+
'sc.item.application_settings': 'Application Settings',
|
|
1122
|
+
'sc.item.build_options': 'Build Options',
|
|
1123
|
+
'sc.item.application_definition': 'Application Definition',
|
|
1124
|
+
'sc.item.access_control': 'Access Control',
|
|
1125
|
+
'sc.item.authentication': 'Authentication',
|
|
1126
|
+
'sc.item.authorization_schemes': 'Authorization Schemes',
|
|
1127
|
+
'sc.item.security_attributes': 'Security Attributes',
|
|
1128
|
+
'sc.item.sign_in_and_session_management': 'Sign-in and Session Management',
|
|
1129
|
+
'sc.item.lists_of_values': 'Lists of Values',
|
|
1130
|
+
'sc.item.lists': 'Lists',
|
|
1131
|
+
'sc.item.list_entries': 'List Entries',
|
|
1132
|
+
'sc.item.email_templates': 'Email Templates',
|
|
1133
|
+
'sc.item.shortcuts': 'Shortcuts',
|
|
1134
|
+
'sc.item.component_groups': 'Component Groups',
|
|
1135
|
+
'sc.item.supporting_objects': 'Supporting Objects',
|
|
1136
|
+
'sc.item.subscriptions': 'Subscriptions',
|
|
1137
|
+
'sc.item.navigation_menu': 'Navigation Menu',
|
|
1138
|
+
'sc.item.navigation_bar_list': 'Navigation Bar List',
|
|
1139
|
+
'sc.item.breadcrumbs': 'Breadcrumbs',
|
|
1140
|
+
'sc.item.page_groups': 'Page Groups',
|
|
1141
|
+
'sc.item.search_configurations': 'Search Configurations',
|
|
1142
|
+
'sc.item.themes_and_theme_roller': 'Themes and Theme Roller',
|
|
1143
|
+
'sc.item.user_interface_attributes': 'User Interface Attributes',
|
|
1144
|
+
'sc.item.template_components': 'Template Components',
|
|
1145
|
+
'sc.item.plug_ins': 'Plug-ins',
|
|
1146
|
+
'sc.item.component_settings': 'Component Settings',
|
|
1147
|
+
'sc.item.progressive_web_app': 'Progressive Web App',
|
|
1148
|
+
'sc.item.static_application_files': 'Static Application Files',
|
|
1149
|
+
'sc.item.report_layouts': 'Report Layouts',
|
|
1150
|
+
'sc.item.report_queries': 'Report Queries',
|
|
1151
|
+
'sc.item.document_templates': 'Document Templates',
|
|
1152
|
+
'sc.item.rest_data_sources': 'REST Data Sources',
|
|
1153
|
+
'sc.item.web_credentials': 'Web Credentials',
|
|
1154
|
+
'sc.item.restful_services': 'RESTful Services',
|
|
1155
|
+
'sc.item.data_load_definitions': 'Data Load Definitions',
|
|
1156
|
+
'sc.item.workflows': 'Workflows',
|
|
1157
|
+
'sc.item.task_definitions': 'Task Definitions',
|
|
1158
|
+
'sc.item.automations': 'Automations',
|
|
1159
|
+
'sc.item.translations_and_text_messages': 'Translations and Text Messages',
|
|
1160
|
+
'sc.item.dynamic_translations': 'Dynamic Translations',
|
|
1161
|
+
'sc.item.globalization_attributes': 'Globalization Attributes',
|
|
1162
|
+
'sc.item.ai_services': 'AI Services',
|
|
1163
|
+
'sc.item.ai_agents': 'AI Agents',
|
|
1164
|
+
'sc.entries': 'Entries',
|
|
1165
|
+
'sc.list_sql': 'This list shows the rows of its query; entries below are not used.',
|
|
1166
|
+
'sc.no_entries': 'No entries yet.',
|
|
1167
|
+
'sc.add_entry': '+ Add entry',
|
|
1168
|
+
'sc.breadcrumbs_help': "A page's breadcrumb lists the pages above it: each page names its breadcrumb parent (Page Designer → page → Breadcrumb parent). Pages without one show Home.",
|
|
1169
|
+
'sc.cs_help': "Defaults for the application's built-in component types, used where a component sets nothing itself. Empty: pgkiln's default.",
|
|
1170
|
+
'sc.cs_now': '{help} {min}–{max}; now {now}.',
|
|
1171
|
+
'sc.cs_saved': 'Component settings saved.',
|
|
1172
|
+
'sc.intro': 'The components the pages of {app} share.',
|
|
1173
|
+
'sc.tree_view': 'Tree view',
|
|
1174
|
+
'sc.create': 'Create',
|
|
1175
|
+
'sc.search': 'Search',
|
|
1176
|
+
'sc.name': 'Name',
|
|
1177
|
+
'sc.details': 'Details',
|
|
1178
|
+
'sc.nothing_matches': 'Nothing matches.',
|
|
1179
|
+
'sc.none_yet': 'No {what} yet.',
|
|
1180
|
+
'sc.count': '{n} of {total}',
|
|
1181
|
+
'sc.new': 'New {what}',
|
|
1182
|
+
'sc.save': 'Save',
|
|
1183
|
+
'sc.run_supporting': 'Run supporting objects…',
|
|
1184
|
+
'sc.delete_confirm': 'Delete this {what}?',
|
|
1185
|
+
'sc.delete': 'Delete',
|
|
1186
|
+
'sc.not_found': 'Not found.',
|
|
1187
|
+
'sc.groups_title': 'Identity-provider groups → roles',
|
|
1188
|
+
'sc.groups_help': 'With single sign-on, members of these groups get the role in this app, and may sign in even without being listed above.',
|
|
1189
|
+
'sc.remove_mapping': 'Remove mapping {group} to {role}',
|
|
1190
|
+
'sc.no_groups': 'No group mappings.',
|
|
1191
|
+
'sc.group_label': 'Group (as in the token)',
|
|
1192
|
+
'sc.group_ph': 'e.g. hr-managers',
|
|
1193
|
+
'sc.role_label': 'Role in this app',
|
|
1194
|
+
'sc.role_ph': 'e.g. manager',
|
|
1195
|
+
'sc.add_mapping': 'Add mapping',
|
|
1196
|
+
'sc.access': 'Access control',
|
|
1197
|
+
'sc.who': 'Who may sign in',
|
|
1198
|
+
'sc.who.assigned': 'Only accounts listed below (role-based access)',
|
|
1199
|
+
'sc.who.any': 'Any active account in the directory',
|
|
1200
|
+
'sc.access_help': "Accounts live in the {directory}; here you grant them access to {app} and assign roles, which authorization schemes and {fn} check. Role changes apply at the user's next sign-in (their sessions in this app end).",
|
|
1201
|
+
'sc.directory': 'user directory',
|
|
1202
|
+
'sc.account': 'Account',
|
|
1203
|
+
'sc.roles_in_app': 'Roles in this app',
|
|
1204
|
+
'sc.last_signin': 'Last sign-in',
|
|
1205
|
+
'sc.roles': 'Roles',
|
|
1206
|
+
'sc.inactive': '(inactive)',
|
|
1207
|
+
'sc.roles_of': 'Roles of {user}',
|
|
1208
|
+
'sc.no_roles': 'no roles',
|
|
1209
|
+
'sc.revoke_confirm': "Revoke {user}'s access to {app}?",
|
|
1210
|
+
'sc.revoke': 'Revoke',
|
|
1211
|
+
'sc.no_access': 'No accounts have access yet.',
|
|
1212
|
+
'sc.grant': 'Grant access',
|
|
1213
|
+
'sc.username_ph': 'username',
|
|
1214
|
+
'sc.existing': 'An existing account.',
|
|
1215
|
+
'sc.create_in_users': 'Create accounts in Users.',
|
|
1216
|
+
'sc.roles_ph': 'comma separated, or pick below',
|
|
1217
|
+
'sc.tree.security': 'Security',
|
|
1218
|
+
'sc.tree.globalization': 'Globalization',
|
|
1219
|
+
'sc.tree.translations': 'Translations and text messages',
|
|
1220
|
+
'sc.tree.files': 'Files and plug-ins',
|
|
1221
|
+
'sc.tree.static': 'Static application files',
|
|
1222
|
+
'sc.tree.subscriptions': 'Subscriptions',
|
|
1223
|
+
'sc.tree.subscribers': 'Subscriptions and subscribers',
|
|
1224
|
+
'sc.add_kind': 'Add {what}',
|
|
1225
|
+
'sc.add': '+ Add',
|
|
1226
|
+
'sc.review_run': 'Review and run…',
|
|
1227
|
+
'sc.edit': 'Edit',
|
|
1228
|
+
'sc.saved': '{what} saved.',
|
|
1229
|
+
'sc.deleted': '{what} deleted.',
|
|
1230
|
+
'sc.access_saved': 'Access control saved.',
|
|
1231
|
+
'sc.no_account': 'There is no account "{user}". Create it under Users first.',
|
|
1232
|
+
'sc.granted': 'Access granted to {user}.',
|
|
1233
|
+
'sc.mapping_added': 'Group mapping added. It applies at the next sign-in.',
|
|
1234
|
+
'sc.mapping_removed': 'Group mapping removed. It applies at the next sign-in.',
|
|
1235
|
+
'sc.roles_saved': 'Roles saved. They apply at the next sign-in.',
|
|
1236
|
+
'sc.revoked': 'Access revoked.',
|
|
1237
|
+
// ------------------------------------------------------------ Application settings (sprint 124)
|
|
1238
|
+
'st.tab.definition': 'Definition',
|
|
1239
|
+
'st.tab.security': 'Security',
|
|
1240
|
+
'st.tab.signin': 'Sign-in',
|
|
1241
|
+
'st.tab.ui': 'User Interface',
|
|
1242
|
+
'st.tab.globalization': 'Globalization',
|
|
1243
|
+
'st.tab.errors': 'Errors and Sessions',
|
|
1244
|
+
'st.tab.pwa': 'Progressive Web App',
|
|
1245
|
+
'st.settings': 'Settings',
|
|
1246
|
+
'st.name': 'Name',
|
|
1247
|
+
'st.alias': 'Alias',
|
|
1248
|
+
'st.version': 'Version',
|
|
1249
|
+
'st.version_ph': 'Release 1.0',
|
|
1250
|
+
'st.version_help': "Shown in the footer of the application's pages; empty: none.",
|
|
1251
|
+
'st.home_page': 'Home page',
|
|
1252
|
+
'st.app_type': 'Application type',
|
|
1253
|
+
'st.app_type_help': 'Theme and library applications offer their theme or shared components to other applications (Shared Components → Subscriptions); Create application can start from a boilerplate application.',
|
|
1254
|
+
'st.type.standard': 'Standard',
|
|
1255
|
+
'st.type.theme': 'Theme application',
|
|
1256
|
+
'st.type.library': 'Library application',
|
|
1257
|
+
'st.type.boilerplate': 'Boilerplate application',
|
|
1258
|
+
'st.authentication': 'Authentication',
|
|
1259
|
+
'st.auth.app_users': 'App users (login page)',
|
|
1260
|
+
'st.auth.header': 'HTTP header (reverse proxy)',
|
|
1261
|
+
'st.auth.database': 'Database accounts (PostgreSQL roles)',
|
|
1262
|
+
'st.auth.custom': 'Custom (a PL/pgSQL function)',
|
|
1263
|
+
'st.auth.none': 'None (public)',
|
|
1264
|
+
'st.db_role': 'Database role (parsing schema)',
|
|
1265
|
+
'st.db_role_help': 'All application SQL runs as this role (SET LOCAL ROLE), so grants and row level security apply. Leave empty only for trusted internal apps.',
|
|
1266
|
+
'st.debug': 'Debug mode',
|
|
1267
|
+
'st.debug_help': 'Shows database error details to end users. Development only.',
|
|
1268
|
+
'st.debug_msgs': 'Debug messages',
|
|
1269
|
+
'st.debug_on': 'on, level {level}',
|
|
1270
|
+
'st.off': 'off',
|
|
1271
|
+
'st.debug_msgs_help': "Records every request's steps with timings and the messages of {fn}, kept {days} days.",
|
|
1272
|
+
'st.header_title': 'HTTP header authentication',
|
|
1273
|
+
'st.header_intro': 'Only used when Authentication is "HTTP header". A reverse proxy or single sign-on gateway signs users in and passes the user name in a header; pgkiln trusts it only from the proxy addresses in {env}',
|
|
1274
|
+
'st.header_unset': 'not set on this server: header sign-in is refused',
|
|
1275
|
+
'st.header_name': 'User name header',
|
|
1276
|
+
'st.header_name_help': 'The request header with the user name (APEX: HTTP Header Variable). Empty: X-Remote-User. A changed or missing header ends the session.',
|
|
1277
|
+
'st.logout_url': 'Sign-out URL',
|
|
1278
|
+
'st.logout_url_ph': 'e.g. https://sso.example.com/logout',
|
|
1279
|
+
'st.logout_url_help': "Where \"Sign out\" goes after the session ends, usually the proxy's own sign-out page. Empty: a \"signed out\" page.",
|
|
1280
|
+
'st.header_auto': 'Create accounts automatically',
|
|
1281
|
+
'st.header_auto_help': 'An unknown user name gets a new account with access to this app. Otherwise the account must exist and have access.',
|
|
1282
|
+
'st.db_title': 'Database accounts',
|
|
1283
|
+
'st.db_intro': "Only used when Authentication is \"Database accounts\". Users sign in with a PostgreSQL login role and its password, checked by a short connection to this database as that role. Superusers and pgkiln's own roles are always refused; with neither field set nobody can sign in.",
|
|
1284
|
+
'st.db_roles': 'Allowed roles',
|
|
1285
|
+
'st.db_roles_ph': 'e.g. alice, bob',
|
|
1286
|
+
'st.db_roles_help': 'Login roles that may sign in, comma separated (exact names).',
|
|
1287
|
+
'st.db_member': 'Or members of role',
|
|
1288
|
+
'st.db_member_ph': 'e.g. app_users_group',
|
|
1289
|
+
'st.db_member_help': 'Every member of this role may sign in too.',
|
|
1290
|
+
'st.custom_title': 'Custom authentication',
|
|
1291
|
+
'st.custom_intro': "Only used when Authentication is \"Custom\". Your own PL/pgSQL checks the user name and password on the sign-in form, as the application's database role; the password is passed as a parameter and never logged. Failed attempts are throttled like other sign-ins. With neither field set nobody can sign in.",
|
|
1292
|
+
'st.custom_fn': 'Function name',
|
|
1293
|
+
'st.custom_fn_ph': 'e.g. app.check_login',
|
|
1294
|
+
'st.custom_fn_help': "A function (p_username text, p_password text) returns boolean, in lower case, optionally with its schema. The app's role needs EXECUTE on it. Takes precedence over the body below.",
|
|
1295
|
+
'st.custom_body': 'Or function body',
|
|
1296
|
+
'st.custom_body_help': 'PL/pgSQL with p_username and p_password, returning true for a valid sign-in, e.g. {example}',
|
|
1297
|
+
'st.custom_post': 'Post-authentication code',
|
|
1298
|
+
'st.custom_post_help': 'Optional PL/pgSQL run after a successful check, with p_username (and meta.app_user()), e.g. to record the last sign-in. Raising an exception refuses the sign-in. Application processes "after login" run afterwards as usual.',
|
|
1299
|
+
'st.signin': 'Sign-in',
|
|
1300
|
+
'st.methods': 'Sign-in methods',
|
|
1301
|
+
'st.local': 'Username and password',
|
|
1302
|
+
'st.ldap': 'Passwords from LDAP: {name}',
|
|
1303
|
+
'st.disabled': '(disabled)',
|
|
1304
|
+
'st.no_ldap': 'No LDAP directories configured. {add} to check passwords against LDAP or Active Directory.',
|
|
1305
|
+
'st.add_one': 'Add one',
|
|
1306
|
+
'st.ldap_help': 'LDAP passwords are checked by the username and password form, after local accounts, so keep that method on.',
|
|
1307
|
+
'st.session_group': 'Session sharing group',
|
|
1308
|
+
'st.session_group_ph': 'empty: not shared',
|
|
1309
|
+
'st.session_group_help': 'Applications with the same group (and the user directory as authentication) share a sign-in: after signing in to one, the others open without a new sign-in, each with its own access check and roles; signing out of one signs out of all (APEX: session sharing). Lower case letters, digits and _.',
|
|
1310
|
+
'st.remember': '"Keep me signed in" for (days)',
|
|
1311
|
+
'st.remember_ph': 'empty: not offered',
|
|
1312
|
+
'st.remember_help': 'Offers a checkbox on the sign-in form (APEX: persistent authentication). The browser stays signed in for this many days after the sign-in, also when the session ends; signing out, a new password, deactivation or removed access ends it. 1 to 365.',
|
|
1313
|
+
'st.sso': 'Sign in with {name}',
|
|
1314
|
+
'st.no_sso': 'No identity providers configured. {add} for single sign-on.',
|
|
1315
|
+
'st.theme': 'Theme',
|
|
1316
|
+
'st.base': 'Base style',
|
|
1317
|
+
'st.base.iris': 'Iris (the default for new applications)',
|
|
1318
|
+
'st.base.lavender': 'Lavender (Iris until pgkiln 0.41)',
|
|
1319
|
+
'st.base.standard': 'Standard (pgkiln until 0.28)',
|
|
1320
|
+
'st.base_help': 'Colours, corners, font and shadows of the whole application, light and dark. The colours below override its accent and header.',
|
|
1321
|
+
'st.accent': 'Accent colour',
|
|
1322
|
+
'st.header_colour': 'Header colour',
|
|
1323
|
+
'st.accent_dark': 'Accent colour in dark mode',
|
|
1324
|
+
'st.header_dark': 'Header colour in dark mode',
|
|
1325
|
+
'st.own_colour': "Use this colour (else the base style's dark palette)",
|
|
1326
|
+
'st.nav': 'Navigation menu',
|
|
1327
|
+
'st.nav.side': 'Side (collapsible)',
|
|
1328
|
+
'st.nav.top': 'Top bar',
|
|
1329
|
+
'st.nav_help': 'On tablets and phones the menu is always a drawer.',
|
|
1330
|
+
'st.nav_list': 'Navigation menu list',
|
|
1331
|
+
'st.nav_entries': '- the navigation entries -',
|
|
1332
|
+
'st.nav_list_help': 'A list (Shared Components → Lists) shown as the navigation menu instead of the navigation entries.',
|
|
1333
|
+
'st.navbar_list': 'Navigation bar list',
|
|
1334
|
+
'st.none_option': '- none -',
|
|
1335
|
+
'st.navbar_help': 'A list shown as links in the header, next to the user menu.',
|
|
1336
|
+
'st.missing': '{name} (missing!)',
|
|
1337
|
+
'st.mode': 'Theme style',
|
|
1338
|
+
'st.mode.auto': 'Automatic (light or dark, following the device)',
|
|
1339
|
+
'st.mode.light': 'Light',
|
|
1340
|
+
'st.mode.dark': 'Dark',
|
|
1341
|
+
'st.user_choice': 'Users may choose light or dark',
|
|
1342
|
+
'st.user_choice_help': 'Adds a switch to the user menu and My account; the choice is saved on the account (APEX: "Enable End Users to Choose Theme Style").',
|
|
1343
|
+
'st.roller': 'Theme Roller: style variants…',
|
|
1344
|
+
'st.styles_one': '{n} style',
|
|
1345
|
+
'st.styles': '{n} styles',
|
|
1346
|
+
'st.no_styles': 'no styles yet',
|
|
1347
|
+
'st.language': 'Primary language',
|
|
1348
|
+
'st.language_help': 'The language the app is built in, e.g. en, nl, de, en-GB.',
|
|
1349
|
+
'st.languages': 'Translated languages',
|
|
1350
|
+
'st.languages_ph': 'e.g. nl, de',
|
|
1351
|
+
'st.languages_help': 'Comma separated. Translate texts under Shared Components → Globalization.',
|
|
1352
|
+
'st.language_from': 'Language derived from',
|
|
1353
|
+
'st.from.browser': 'Browser (Accept-Language)',
|
|
1354
|
+
'st.from.user': 'User preference, then browser',
|
|
1355
|
+
'st.from.primary': 'Always the primary language',
|
|
1356
|
+
'st.language_from_help': 'Users can also switch with ?lang=xx or the picker on the login page.',
|
|
1357
|
+
'st.date_format': 'Date format',
|
|
1358
|
+
'st.date_format_ph': 'e.g. DD-MM-YYYY (empty: per language)',
|
|
1359
|
+
'st.date_format_help': 'Masks: YYYY YY MM MON MONTH DD DY DAY HH24 HH MI SS AM',
|
|
1360
|
+
'st.ts_format': 'Date and time format',
|
|
1361
|
+
'st.ts_format_ph': 'e.g. DD-MM-YYYY HH24:MI',
|
|
1362
|
+
'st.save_settings': 'Save settings',
|
|
1363
|
+
'st.delete_confirm': 'Delete application {app} and all its pages?',
|
|
1364
|
+
'st.delete': 'Delete application',
|
|
1365
|
+
'st.error_fn': 'Error handling function',
|
|
1366
|
+
'st.error_fn_ph': 'e.g. sales.error_message',
|
|
1367
|
+
'st.error_fn_help': "schema.function(jsonb) returns jsonb, run as the application's role: it receives the message and what is known of an error (code, constraint, table, column, component, page, user, internal, reference) and may return {\"message\": \"…\"} to show instead. Empty: none.",
|
|
1368
|
+
'st.warning': 'Session timeout warning (seconds)',
|
|
1369
|
+
'st.warning_help': 'Signed-in users are warned this long before their session ends and can stay signed in (0: no warning).',
|
|
1370
|
+
'st.save': 'Save',
|
|
1371
|
+
'st.checklist': 'Security checklist',
|
|
1372
|
+
'st.ck.role': 'Runs as a dedicated database role',
|
|
1373
|
+
'st.ck.runtime': '(runs as the runtime connection)',
|
|
1374
|
+
'st.ck.signin': 'Users must sign in',
|
|
1375
|
+
'st.ck.public': 'Public application',
|
|
1376
|
+
'st.ck.debug_on': 'Debug mode is on: error details are shown to users',
|
|
1377
|
+
'st.ck.debug_off': 'Debug mode is off',
|
|
1378
|
+
'st.ck.msgs_on': 'Debug messages are on (level {level}): every request is recorded',
|
|
1379
|
+
'st.ck.msgs_off': 'Debug messages are off',
|
|
1380
|
+
'st.ck.unprotected': 'Pages without checksum protection: {n}',
|
|
1381
|
+
'st.ck.public_pages': 'Public pages: {n}',
|
|
1382
|
+
'st.title': '{app} settings',
|
|
1383
|
+
'st.err.fn_shape': 'The error handling function is schema.function, e.g. sales.error_message.',
|
|
1384
|
+
'st.err.no_fn': 'There is no function {fn}(jsonb) returning jsonb.',
|
|
1385
|
+
'st.err.warning': 'The session timeout warning is 0 to 3600 seconds.',
|
|
1386
|
+
'st.saved': 'Saved.',
|
|
1387
|
+
'st.settings_saved': 'Settings saved.',
|
|
1388
|
+
'st.app_deleted': 'Application deleted.',
|
|
1389
|
+
// ------------------------------------------------------------ Users and identity providers (sprint 125)
|
|
1390
|
+
'us.hints_none': "This app doesn't check any roles yet. Roles only matter where an authorization scheme or {fn} checks them (Shared Components → Authorization schemes).",
|
|
1391
|
+
'us.hints_label': 'Roles this app checks',
|
|
1392
|
+
'us.hints_add': 'Add',
|
|
1393
|
+
'us.hints_app': '{app} checks',
|
|
1394
|
+
'us.title': 'Users',
|
|
1395
|
+
'us.providers_btn': 'Identity providers (single sign-on)',
|
|
1396
|
+
'us.ldap_btn': 'LDAP directories',
|
|
1397
|
+
'us.intro': "One account per person. Give accounts access to applications, with roles per application, here or under an application's {where}.",
|
|
1398
|
+
'us.access_path': 'Shared Components → Access control',
|
|
1399
|
+
'us.accounts': 'Accounts',
|
|
1400
|
+
'us.search_ph': 'Search name, username or e-mail…',
|
|
1401
|
+
'us.search_label': 'Search accounts',
|
|
1402
|
+
'us.search': 'Search',
|
|
1403
|
+
'us.username': 'Username',
|
|
1404
|
+
'us.name': 'Name',
|
|
1405
|
+
'us.apps_roles': 'Applications (roles)',
|
|
1406
|
+
'us.applications': 'Applications',
|
|
1407
|
+
'us.signin': 'Sign-in',
|
|
1408
|
+
'us.status': 'Status',
|
|
1409
|
+
'us.none': 'none',
|
|
1410
|
+
'us.password': 'password',
|
|
1411
|
+
'us.no_password': 'no password',
|
|
1412
|
+
'us.active': 'active',
|
|
1413
|
+
'us.inactive': 'inactive',
|
|
1414
|
+
'us.last': 'last {at}',
|
|
1415
|
+
'us.no_accounts': 'No accounts found.',
|
|
1416
|
+
'us.create': 'Create account',
|
|
1417
|
+
'us.username_help': 'No spaces or colons; not case-sensitive.',
|
|
1418
|
+
'us.email': 'E-mail',
|
|
1419
|
+
'us.password_label': 'Password',
|
|
1420
|
+
'us.password_help': 'At least 8 characters. Leave empty for accounts that only sign in through single sign-on.',
|
|
1421
|
+
'us.must_change': 'Require change of password on first use',
|
|
1422
|
+
'us.settings': 'Account settings',
|
|
1423
|
+
'us.min_length': 'Minimum password length',
|
|
1424
|
+
'us.lifetime': 'Password lifetime (days)',
|
|
1425
|
+
'us.lifetime_help': 'After this many days users must choose a new password at sign-in. 0 = never.',
|
|
1426
|
+
'us.mixed': 'Passwords need letters and digits',
|
|
1427
|
+
'us.policy_note': 'Passwords may never contain the username. Sign-in is locked for {minutes} minutes after {failures} failed attempts (Workspace utilities → Instance settings); Unlock on an account lifts it.',
|
|
1428
|
+
'us.save_settings': 'Save settings',
|
|
1429
|
+
'us.created': 'Account created. Now give it access to applications.',
|
|
1430
|
+
'us.exists': 'An account with that username already exists.',
|
|
1431
|
+
'us.settings_saved': 'Account settings saved.',
|
|
1432
|
+
'us.details': 'Details',
|
|
1433
|
+
'us.active_label': 'Active',
|
|
1434
|
+
'us.active_help': "Inactive accounts can't sign in to any application; deactivating ends their sessions.",
|
|
1435
|
+
'us.save': 'Save',
|
|
1436
|
+
'us.password_title': 'Password',
|
|
1437
|
+
'us.set': 'Set',
|
|
1438
|
+
'us.set_on': 'Set on {date}',
|
|
1439
|
+
'us.sso_only': 'No password (single sign-on only)',
|
|
1440
|
+
'us.must_next': 'Must be changed at the next sign-in',
|
|
1441
|
+
'us.expires': 'Expires in {n} day(s)',
|
|
1442
|
+
'us.fails': '{n} failed sign-in(s) in the last hour',
|
|
1443
|
+
'us.unexpire': 'Unexpire password',
|
|
1444
|
+
'us.expire': 'Expire password',
|
|
1445
|
+
'us.unlock': 'Unlock sign-in',
|
|
1446
|
+
'us.new_password': 'New password',
|
|
1447
|
+
'us.set_password_label': 'Set a password',
|
|
1448
|
+
'us.ends_sessions': 'Ends the account’s sessions.',
|
|
1449
|
+
'us.set_password': 'Set password',
|
|
1450
|
+
'us.remove_confirm': 'Remove the password? The account can then only sign in through single sign-on.',
|
|
1451
|
+
'us.remove_password': 'Remove password',
|
|
1452
|
+
'us.delete_confirm': 'Delete account {user} and all its application access?',
|
|
1453
|
+
'us.delete': 'Delete account',
|
|
1454
|
+
'us.app_access': 'Application access',
|
|
1455
|
+
'us.application': 'Application',
|
|
1456
|
+
'us.roles': 'Roles',
|
|
1457
|
+
'us.roles_in': 'Roles in {app}',
|
|
1458
|
+
'us.roles_ph': 'no roles (e.g. {example})',
|
|
1459
|
+
'us.revoke_confirm': 'Revoke access to {app}?',
|
|
1460
|
+
'us.revoke': 'Revoke',
|
|
1461
|
+
'us.no_access': 'No access to any application yet.',
|
|
1462
|
+
'us.grant': 'Grant access',
|
|
1463
|
+
'us.roles_comma': 'comma separated, or pick below',
|
|
1464
|
+
'us.saved': 'Account saved.',
|
|
1465
|
+
'us.pw_removed': 'Password removed.',
|
|
1466
|
+
'us.pw_set': 'Password set.',
|
|
1467
|
+
'us.pw_expired': 'Password expired: it must be changed at the next sign-in.',
|
|
1468
|
+
'us.pw_unexpired': 'Password no longer expired.',
|
|
1469
|
+
'us.unlocked': 'Sign-in unlocked.',
|
|
1470
|
+
'us.deleted': 'Account deleted.',
|
|
1471
|
+
'us.granted': 'Access granted.',
|
|
1472
|
+
'us.roles_saved': 'Roles saved. The user gets them at the next sign-in.',
|
|
1473
|
+
'us.revoked': 'Access revoked.',
|
|
1474
|
+
'idp.title': 'Identity providers',
|
|
1475
|
+
'idp.name': 'Name (in URLs)',
|
|
1476
|
+
'idp.name_help': 'lowercase, e.g. entra, google, keycloak',
|
|
1477
|
+
'idp.protocol': 'Protocol',
|
|
1478
|
+
'idp.label': 'Button label',
|
|
1479
|
+
'idp.label_help': 'Shown as "Sign in with …"',
|
|
1480
|
+
'idp.issuer': 'Issuer (OIDC: URL; SAML: the IdP entity ID)',
|
|
1481
|
+
'idp.issuer_help': 'e.g. https://login.microsoftonline.com/<tenant>/v2.0, https://keycloak.example.com/realms/acme, or for SAML the entityID of the IdP metadata',
|
|
1482
|
+
'idp.client_id': "Client ID (SAML: pgkiln's entity ID)",
|
|
1483
|
+
'idp.client_id_help': 'OIDC: required. SAML: empty = the metadata URL of this provider.',
|
|
1484
|
+
'idp.sso_url': 'SAML: IdP sign-in URL',
|
|
1485
|
+
'idp.sso_url_help': 'The SingleSignOnService location (HTTP-Redirect binding) from the IdP metadata.',
|
|
1486
|
+
'idp.cert': 'SAML: IdP signing certificate (PEM)',
|
|
1487
|
+
'idp.cert_help': 'From the IdP metadata (X509Certificate, wrapped in BEGIN/END CERTIFICATE lines). Assertions must be signed with it.',
|
|
1488
|
+
'idp.secret': 'Client secret',
|
|
1489
|
+
'idp.secret_kept': 'A secret is stored. Leave empty to keep it.',
|
|
1490
|
+
'idp.secret_public': 'Leave empty for a public client (PKCE only).',
|
|
1491
|
+
'idp.scopes': 'Scopes',
|
|
1492
|
+
'idp.username_claim': 'Username claim',
|
|
1493
|
+
'idp.username_claim_help': 'Use a claim users cannot change themselves (e.g. preferred_username, upn, email). SAML: an attribute name, or nameID.',
|
|
1494
|
+
'idp.groups_claim': 'Groups claim',
|
|
1495
|
+
'idp.groups_claim_help': 'Dot paths work, e.g. realm_access.roles',
|
|
1496
|
+
'idp.auto_create': 'Create accounts automatically on first sign-in',
|
|
1497
|
+
'idp.auto_create_help': 'Otherwise only people with an account linked to this provider (or allowed below) can sign in.',
|
|
1498
|
+
'idp.link': 'Link existing accounts with the same username on their first sign-in',
|
|
1499
|
+
'idp.link_help': "Only when users can't choose the username claim themselves at this provider: otherwise someone could register the name of an existing account and take it over. With the e-mail claim, only verified addresses link. Turn it off once the accounts are linked.",
|
|
1500
|
+
'idp.enabled': 'Enabled',
|
|
1501
|
+
'idp.remove_secret': 'Remove the stored client secret',
|
|
1502
|
+
'idp.add': 'Add provider',
|
|
1503
|
+
'idp.intro': 'OpenID Connect providers for single sign-on (Microsoft Entra ID, Google, Okta, Keycloak, Auth0, …). Register pgkiln at the provider as a web application with the redirect URI shown, then enable the provider per application under {where}.',
|
|
1504
|
+
'idp.where': 'Settings → Sign-in methods',
|
|
1505
|
+
'idp.providers': 'Providers',
|
|
1506
|
+
'idp.provider': 'Provider',
|
|
1507
|
+
'idp.issuer_col': 'Issuer',
|
|
1508
|
+
'idp.used_by': 'Used by',
|
|
1509
|
+
'idp.linked': 'Linked accounts',
|
|
1510
|
+
'idp.no_apps': 'no apps',
|
|
1511
|
+
'idp.enabled_s': 'enabled',
|
|
1512
|
+
'idp.disabled_s': 'disabled',
|
|
1513
|
+
'idp.auto_s': 'auto-create',
|
|
1514
|
+
'idp.links_s': 'links existing accounts',
|
|
1515
|
+
'idp.none': 'No identity providers yet.',
|
|
1516
|
+
'idp.settings': 'Settings',
|
|
1517
|
+
'idp.delete_confirm': 'Delete {name}? Linked identities are removed; accounts stay.',
|
|
1518
|
+
'idp.delete': 'Delete provider',
|
|
1519
|
+
'idp.register_idp': 'Register at the identity provider',
|
|
1520
|
+
'idp.sp_metadata': 'Service provider metadata (import it at the IdP):',
|
|
1521
|
+
'idp.by_hand': 'Or by hand: entity ID {entity}, assertion consumer service (HTTP-POST) {acs}.',
|
|
1522
|
+
'idp.saml_note': 'Based on {env}. Sign the assertions; send the groups in the {claim} attribute to map them to roles.',
|
|
1523
|
+
'idp.register': 'Register at the provider',
|
|
1524
|
+
'idp.redirect': 'Redirect URI (callback):',
|
|
1525
|
+
'idp.public_url': 'Based on {env}; set it to the address users see (e.g. https://apps.example.com).',
|
|
1526
|
+
'idp.grant': 'Grant type: {type} with PKCE. Scopes: {scopes}. Include a {claim} claim in the ID token to map groups to roles.',
|
|
1527
|
+
'idp.auth_code': 'authorization code',
|
|
1528
|
+
'idp.test': 'Test discovery',
|
|
1529
|
+
'idp.added': 'Provider added. Register the redirect URI at the provider, then test the connection.',
|
|
1530
|
+
'idp.saved': 'Provider saved.',
|
|
1531
|
+
'idp.works': 'Discovery works. Authorization endpoint: {url}',
|
|
1532
|
+
'idp.failed': 'Discovery failed: {error}',
|
|
1533
|
+
'idp.deleted': 'Provider deleted.',
|
|
1534
|
+
// ------------------------------------------------------------ Workspaces (sprint 125)
|
|
1535
|
+
'wsp.title': 'Workspaces',
|
|
1536
|
+
'wsp.admins_only': 'Only administrators manage workspaces.',
|
|
1537
|
+
'wsp.err.exists': 'A workspace with this name exists already.',
|
|
1538
|
+
'wsp.err.name_check': 'The name is 1 to 60 characters, without spaces at the start or end.',
|
|
1539
|
+
'wsp.err.name': 'The name is 1 to 60 characters.',
|
|
1540
|
+
'wsp.iso.secret': "set PGKILN_SECRET_KEY (at least 32 characters) in the server's environment: the workspace's database logins get passwords derived from it.",
|
|
1541
|
+
'wsp.iso.runtime': 'set RUNTIME_DATABASE_URL: applications run on the owner connection, so no workspace can be isolated.',
|
|
1542
|
+
'wsp.err.role_taken': 'this role belongs to another workspace already.',
|
|
1543
|
+
'wsp.err.role_has': 'the workspace has this role already.',
|
|
1544
|
+
'wsp.isolated_tag': 'isolated',
|
|
1545
|
+
'wsp.iso.on': "Its applications run as {run} and its developers' SQL (SQL Workshop, code checks, the Advisor) as {dev}. Both reach only the roles below, and see only this workspace's applications, sessions and accounts in pgkiln's own tables. Developers who also belong to a shared workspace keep that workspace's rights there.",
|
|
1546
|
+
'wsp.db_role': 'Database role',
|
|
1547
|
+
'wsp.used_by': 'Used by',
|
|
1548
|
+
'wsp.missing': 'missing',
|
|
1549
|
+
'wsp.no_app': 'no application',
|
|
1550
|
+
'wsp.remove': 'Remove',
|
|
1551
|
+
'wsp.no_roles': "No database roles: applications here can't run as a role of their own.",
|
|
1552
|
+
'wsp.add_role': 'Add a database role',
|
|
1553
|
+
'wsp.add_role_help': "An existing role (not a superuser, not one that creates roles or bypasses row-level security). Its rights become this workspace's; it can't belong to another workspace.",
|
|
1554
|
+
'wsp.add_role_btn': 'Add role',
|
|
1555
|
+
'wsp.make_shared_confirm': "Make {name} shared again? Its applications then run on the shared runtime connection, and its developers' SQL as the owner.",
|
|
1556
|
+
'wsp.make_shared': 'Make shared',
|
|
1557
|
+
'wsp.shared_text': "Shared: the applications run on the shared runtime connection and the developers' SQL as the owner, like every shared workspace's.",
|
|
1558
|
+
'wsp.iso_help': "Isolating gives the workspace two database logins of its own and the database roles its applications use now. Application code then reaches only those roles and this workspace's applications; its developers' SQL Workshop runs on the workspace's login instead of the owner. New applications get a new role and schema of their own.",
|
|
1559
|
+
'wsp.to_isolate': 'To isolate a workspace, {problem}',
|
|
1560
|
+
'wsp.isolate_confirm': 'Isolate {name}?',
|
|
1561
|
+
'wsp.isolate': 'Isolate this workspace',
|
|
1562
|
+
'wsp.isolation': 'Isolation',
|
|
1563
|
+
'wsp.service': 'Manage service',
|
|
1564
|
+
'wsp.message': 'Workspace message',
|
|
1565
|
+
'wsp.message_help': "Shown to this workspace's developers on the App Builder home, e.g. a maintenance window. Plain text.",
|
|
1566
|
+
'wsp.banner': 'Environment banner',
|
|
1567
|
+
'wsp.banner_help': 'A short label shown at the top of every builder page while this workspace is current. Empty: no banner.',
|
|
1568
|
+
'wsp.banner_colour': 'Banner colour',
|
|
1569
|
+
'wsp.save': 'Save',
|
|
1570
|
+
'wsp.prefs': 'Workspace preferences',
|
|
1571
|
+
'wsp.sql_on': 'Enable the SQL Workshop',
|
|
1572
|
+
'wsp.sql_on_help': 'Off: the SQL Worksheet, the Object Browser, SQL scripts, data loading and unloading, Quick SQL, the query builder, DDL, Compare and AI are refused while this workspace is current, for every developer.',
|
|
1573
|
+
'wsp.rest_on': 'Enable RESTful services',
|
|
1574
|
+
'wsp.rest_on_help': "Off: the REST modules of this workspace's applications answer 404 (Not found) at {path}; they can still be edited.",
|
|
1575
|
+
'wsp.builder_home': 'Builder links open',
|
|
1576
|
+
'wsp.home.apps': 'App Builder',
|
|
1577
|
+
'wsp.home.home': 'Workspace home',
|
|
1578
|
+
'wsp.builder_home_help': 'Where a link to /builder (a bookmark from before the Workspace home) leads in this workspace. Signing in always opens the Workspace home; the App Builder is at /builder/apps.',
|
|
1579
|
+
'wsp.save_prefs': 'Save preferences',
|
|
1580
|
+
'wsp.links': 'Extension links',
|
|
1581
|
+
'wsp.links_help': "Links to other tools this workspace's developers use (monitoring, a wiki, a ticket system), in the builder's {menu} menu while the workspace is current. They open in a new tab.",
|
|
1582
|
+
'wsp.extensions': 'Extensions',
|
|
1583
|
+
'wsp.label': 'Label',
|
|
1584
|
+
'wsp.url': 'URL',
|
|
1585
|
+
'wsp.order': 'Order',
|
|
1586
|
+
'wsp.delete_link_confirm': 'Delete the link {label}?',
|
|
1587
|
+
'wsp.delete': 'Delete',
|
|
1588
|
+
'wsp.no_links': 'No extension links.',
|
|
1589
|
+
'wsp.label_ph': 'Monitoring',
|
|
1590
|
+
'wsp.description': 'Description',
|
|
1591
|
+
'wsp.add_link': 'Add link',
|
|
1592
|
+
'wsp.switched': 'Workspace {name}.',
|
|
1593
|
+
'wsp.intro': "A workspace groups applications and the developers who build them. Developers see and change the applications of their own workspaces; administrators see all of them. A shared workspace is not a security boundary between developers who write SQL: its SQL Workshop and application code run with this installation's rights. An {isolated} workspace is: its applications and SQL run on database logins of its own that reach only its database roles and its own applications.",
|
|
1594
|
+
'wsp.isolated_word': 'isolated',
|
|
1595
|
+
'wsp.workspace': 'Workspace',
|
|
1596
|
+
'wsp.applications': 'Applications',
|
|
1597
|
+
'wsp.developers': 'Developers',
|
|
1598
|
+
'wsp.admins_text': 'administrators only',
|
|
1599
|
+
'wsp.add': 'Add workspace',
|
|
1600
|
+
'wsp.name': 'Name',
|
|
1601
|
+
'wsp.name_help': 'For example the team or department that builds its applications here.',
|
|
1602
|
+
'wsp.first_dev': 'You become its first developer; add others on its page.',
|
|
1603
|
+
'wsp.added': 'Workspace {name} added.',
|
|
1604
|
+
'wsp.settings': 'Settings',
|
|
1605
|
+
'wsp.default_no_delete': "The Default workspace can't be deleted: imported applications and applications made with the command line start here.",
|
|
1606
|
+
'wsp.delete_confirm': 'Delete workspace {name}?',
|
|
1607
|
+
'wsp.delete_ws': 'Delete workspace',
|
|
1608
|
+
'wsp.move_first': 'Move its applications to another workspace first.',
|
|
1609
|
+
'wsp.devs_help': 'Developers of this workspace see and change its applications. Administrators see every workspace.',
|
|
1610
|
+
'wsp.administrator': '(administrator)',
|
|
1611
|
+
'wsp.ws_admins': 'Workspace administrators',
|
|
1612
|
+
'wsp.ws_admins_help': "They manage this workspace's name and developers. Isolation, database roles, moving applications and deleting the workspace stay with administrators.",
|
|
1613
|
+
'wsp.save_devs': 'Save developers',
|
|
1614
|
+
'wsp.mail_net': 'Mail and network access',
|
|
1615
|
+
'wsp.mail_net_text': "This workspace's own {mail} for its applications without one of their own, its {network} list (which hosts its applications may call, within the installation's list), and the {queue}.",
|
|
1616
|
+
'wsp.mail_service': 'mail service',
|
|
1617
|
+
'wsp.network': 'network access',
|
|
1618
|
+
'wsp.queue': 'mail queue',
|
|
1619
|
+
'wsp.iso_short_on': 'Isolated: its applications and SQL run on database logins of its own.',
|
|
1620
|
+
'wsp.iso_short_off': 'Shared.',
|
|
1621
|
+
'wsp.admins_change': 'Administrators change it.',
|
|
1622
|
+
'wsp.application': 'Application',
|
|
1623
|
+
'wsp.move_to': 'Move to',
|
|
1624
|
+
'wsp.move_label': 'Move {app} to',
|
|
1625
|
+
'wsp.move': 'Move',
|
|
1626
|
+
'wsp.no_other': 'no other workspace',
|
|
1627
|
+
'wsp.no_apps': 'No applications.',
|
|
1628
|
+
'wsp.saved': 'Workspace saved.',
|
|
1629
|
+
'wsp.not_found': 'Not found.',
|
|
1630
|
+
'wsp.devs_saved': 'Developers saved.',
|
|
1631
|
+
'wsp.not_moved': 'Not moved: {why}',
|
|
1632
|
+
'wsp.moved': 'Application moved to {name}.',
|
|
1633
|
+
'wsp.err.default': 'The Default workspace cannot be deleted.',
|
|
1634
|
+
'wsp.err.isolated': 'Make the workspace shared (not isolated) before deleting it.',
|
|
1635
|
+
'wsp.err.has_apps': 'Move the applications of this workspace to another workspace first.',
|
|
1636
|
+
'wsp.deleted': 'Workspace {name} deleted.',
|
|
1637
|
+
'wsp.isolated_now': 'The workspace is isolated: its applications and SQL now run on its own database logins.',
|
|
1638
|
+
'wsp.shared_now': 'The workspace is shared again: its applications run on the shared runtime connection.',
|
|
1639
|
+
'wsp.not_isolated': 'Not isolated: {why}',
|
|
1640
|
+
'wsp.not_changed': 'Not changed: {why}',
|
|
1641
|
+
'wsp.err.role_name': 'A role name is a letter or _ followed by letters, digits, _ or $ (at most 63).',
|
|
1642
|
+
'wsp.err.no_role': 'There is no database role {role}.',
|
|
1643
|
+
'wsp.err.role_used_one': '{apps} runs as {role}: give it another role first.',
|
|
1644
|
+
'wsp.err.role_used': '{apps} run as {role}: give them another role first.',
|
|
1645
|
+
'wsp.role_removed': 'Role {role} removed.',
|
|
1646
|
+
'wsp.role_added': 'Role {role} added.',
|
|
1647
|
+
'wsp.not_saved': 'Not saved: {why}',
|
|
1648
|
+
'wsp.err.message': 'The message is at most 2000 characters.',
|
|
1649
|
+
'wsp.err.banner': 'The banner label is at most 40 characters.',
|
|
1650
|
+
'wsp.service_saved': 'Message and banner saved.',
|
|
1651
|
+
'wsp.prefs_saved': 'Preferences saved.',
|
|
1652
|
+
'wsp.err.label': 'The label is 1 to 60 characters.',
|
|
1653
|
+
'wsp.err.url': 'The URL starts with http:// or https://.',
|
|
1654
|
+
'wsp.err.description': 'The description is at most 500 characters.',
|
|
1655
|
+
'wsp.err.order': 'The order is a whole number.',
|
|
1656
|
+
'wsp.link_added': 'Link {label} added.',
|
|
1657
|
+
'wsp.link_exists': 'There is a link {label} already.',
|
|
1658
|
+
'wsp.link_not_saved': 'The link was not saved.',
|
|
1659
|
+
'wsp.link_deleted': 'Link deleted.',
|
|
1660
|
+
'wsp.util_title': 'Workspace utilization: {name}',
|
|
1661
|
+
'wsp.pages': 'Pages',
|
|
1662
|
+
'wsp.views30': 'Page views (30 days)',
|
|
1663
|
+
'wsp.scripts': 'SQL scripts',
|
|
1664
|
+
'wsp.regions': 'Regions',
|
|
1665
|
+
'wsp.items': 'Items',
|
|
1666
|
+
'wsp.users30': 'Users (30 days)',
|
|
1667
|
+
'wsp.static': 'Static files',
|
|
1668
|
+
'wsp.views': 'Page views',
|
|
1669
|
+
'wsp.users': 'Users',
|
|
1670
|
+
'wsp.schemas': 'Schemas',
|
|
1671
|
+
'wsp.schemas_help': "The schemas the workspace's database roles may use, with the storage of their tables, indexes and TOAST data.",
|
|
1672
|
+
'wsp.schema': 'Schema',
|
|
1673
|
+
'wsp.owner': 'Owner',
|
|
1674
|
+
'wsp.tables': 'Tables',
|
|
1675
|
+
'wsp.storage': 'Storage',
|
|
1676
|
+
'wsp.no_schemas': "No schemas: the workspace's applications have no database role of their own.",
|
|
1677
|
+
'wsp.utilization': 'Utilization',
|
|
1678
|
+
'wsp.util_crumb': 'Utilization: {name}',
|
|
1679
|
+
// ------------------------------------------------------------ Developers (sprint 125)
|
|
1680
|
+
'dev.title': 'Developers',
|
|
1681
|
+
'dev.change_pw': 'Change your password',
|
|
1682
|
+
'dev.current': 'Current password',
|
|
1683
|
+
'dev.new': 'New password',
|
|
1684
|
+
'dev.min8': 'At least 8 characters.',
|
|
1685
|
+
'dev.change_btn': 'Change password',
|
|
1686
|
+
'dev.your_email': 'Your e-mail address',
|
|
1687
|
+
'dev.email': 'E-mail address',
|
|
1688
|
+
'dev.email_help': '"Find my workspace" on the sign-in page sends your workspaces to it. Empty: none.',
|
|
1689
|
+
'dev.save': 'Save',
|
|
1690
|
+
'dev.accounts': 'Developer accounts',
|
|
1691
|
+
'dev.accounts_help': "Administrators add and remove developers and can break other developers' page and application locks.",
|
|
1692
|
+
'dev.username': 'Username',
|
|
1693
|
+
'dev.role': 'Role',
|
|
1694
|
+
'dev.email_col': 'E-mail',
|
|
1695
|
+
'dev.you': '(you)',
|
|
1696
|
+
'dev.administrator': 'Administrator',
|
|
1697
|
+
'dev.developer': 'Developer',
|
|
1698
|
+
'dev.email_of': 'E-mail address of {user}',
|
|
1699
|
+
'dev.none': 'none',
|
|
1700
|
+
'dev.make_dev': 'Make developer',
|
|
1701
|
+
'dev.make_admin': 'Make administrator',
|
|
1702
|
+
'dev.remove_confirm': 'Remove developer {user}?',
|
|
1703
|
+
'dev.remove': 'Remove',
|
|
1704
|
+
'dev.add': 'Add developer',
|
|
1705
|
+
'dev.password': 'Password',
|
|
1706
|
+
'dev.optional_email': 'Optional: for "Find my workspace".',
|
|
1707
|
+
'dev.admins_only': 'Only administrators add and remove developers.',
|
|
1708
|
+
'dev.err.email': 'The e-mail address is not valid.',
|
|
1709
|
+
'dev.added_ws': 'Developer added to workspace {name}.',
|
|
1710
|
+
'dev.added': 'Developer added.',
|
|
1711
|
+
'dev.err.current': 'The current password is not correct.',
|
|
1712
|
+
'dev.pw_changed': 'Password changed.',
|
|
1713
|
+
'dev.email_saved': 'E-mail address saved.',
|
|
1714
|
+
'dev.not_found': 'Not found.',
|
|
1715
|
+
'dev.role_changed': 'Role changed.',
|
|
1716
|
+
'dev.removed': 'Developer removed.',
|
|
1049
1717
|
} as const;
|