pgkiln 0.56.0 → 0.58.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.
@@ -675,4 +675,715 @@ export const en = {
675
675
  'sql.tool.reports.desc': 'Tables without keys, unindexed foreign keys, row level security gaps and more.',
676
676
  'sql.tool.activity': 'Monitor Activity',
677
677
  'sql.tool.activity.desc': 'Page views, errors and slow pages of the applications.',
678
+ // ------------------------------------------------------------ SQL Worksheet (sprint 123)
679
+ 'ws.title': 'SQL Worksheet',
680
+ 'ws.tab.result': 'Query Result',
681
+ 'ws.tab.chart': 'Chart',
682
+ 'ws.tab.output': 'Script Output',
683
+ 'ws.tab.notices': 'Notices',
684
+ 'ws.tab.explain': 'Explain Plan',
685
+ 'ws.tab.autotrace': 'Autotrace',
686
+ 'ws.tab.history': 'SQL History',
687
+ 'ob.type.all': 'All Objects',
688
+ 'ob.type.table': 'Tables',
689
+ 'ob.type.view': 'Views',
690
+ 'ob.type.matview': 'Materialized Views',
691
+ 'ob.type.index': 'Indexes',
692
+ 'ob.type.sequence': 'Sequences',
693
+ 'ob.type.type': 'Types',
694
+ 'ob.type.function': 'Functions',
695
+ 'ob.type.procedure': 'Procedures',
696
+ 'ob.type.trigger': 'Triggers',
697
+ 'ob.type.policy': 'Policies',
698
+ 'ws.nav.no_schema': 'No schema you may use.',
699
+ 'ws.nav.no_objects': 'No objects in {schema}.',
700
+ 'ws.nav.no_type': 'No {type} in {schema}.',
701
+ 'ws.nav.drag': '{type}: drag into the editor for a SELECT',
702
+ 'ws.nav.open': 'Open',
703
+ 'ws.nav.cols_limit': 'Columns are listed for the first {n} tables and views.',
704
+ 'ws.rows_one': '{n} row',
705
+ 'ws.rows': '{n} rows',
706
+ 'ws.stmt_one': '{n} statement',
707
+ 'ws.stmt': '{n} statements',
708
+ 'ws.download': 'Download',
709
+ 'ws.dl.sql': 'SQL inserts',
710
+ 'ws.result.showing': 'showing the first {n}',
711
+ 'ws.line': 'line {n}',
712
+ 'ws.all_rows': 'All rows',
713
+ 'ws.all_rows.title': 'Run the statement again and show up to {n} rows',
714
+ 'ws.chart.title': 'Create Chart (Ctrl+F11)',
715
+ 'ws.copy': 'Copy',
716
+ 'ws.value': 'Value',
717
+ 'ws.close': 'Close',
718
+ 'ws.result.failed': 'The statement failed: see Script Output.',
719
+ 'ws.result.no_rows': 'No rows: the last statement was not a query. See Script Output.',
720
+ 'ws.result.empty': 'Run a query (Ctrl+Enter) to see its rows here.',
721
+ 'ws.log.not_run': '-- {n}. line {line}: not run (an earlier statement failed)',
722
+ 'ws.log.head': '-- {n}. line {line}: {sql}',
723
+ 'ws.error': 'Error: {error}',
724
+ 'ws.error_at': 'Error at line {line}: {error}',
725
+ 'ws.error_at_col': 'Error at line {line}, column {col}: {error}',
726
+ 'ws.log.first': '(first {n} of {rows} rows)',
727
+ 'ws.log.summary_one': '{n} statement run, {failed} failed, {ms} ms.',
728
+ 'ws.log.summary': '{n} statements run, {failed} failed, {ms} ms.',
729
+ 'ws.log.empty': 'Run Script (F5) runs every statement and logs each one here.',
730
+ 'ws.notice.meta': 'statement {n} · {at}',
731
+ 'ws.notice.empty': 'RAISE NOTICE, INFO and WARNING messages of the last run show here.',
732
+ 'ws.no_plan': 'No plan.',
733
+ 'ws.hist.search': 'Search the history',
734
+ 'ws.hist.status': 'Status',
735
+ 'ws.hist.all': 'All',
736
+ 'ws.hist.ok': 'Succeeded',
737
+ 'ws.hist.failed': 'Failed',
738
+ 'ws.hist.failed_title': 'Failed: {error}',
739
+ 'ws.hist.insert': 'Insert at the cursor: {sql}',
740
+ 'ws.hist.run_title': 'Put it in the editor and run it',
741
+ 'ws.hist.empty': 'Your statements show here after you run them.',
742
+ 'ws.ready': 'Ready.',
743
+ 'ws.status.explain': 'Explain plan in {ms} ms.',
744
+ 'ws.status.autotrace': 'Autotrace in {ms} ms.',
745
+ 'ws.status.rows_one': '{n} row in {ms} ms.',
746
+ 'ws.status.rows': '{n} rows in {ms} ms.',
747
+ 'ws.status.stmts_one': '{n} statement in {ms} ms.',
748
+ 'ws.status.stmts': '{n} statements in {ms} ms.',
749
+ 'ws.errors': 'Errors',
750
+ 'ws.warnings': 'Warnings',
751
+ 'ws.running': 'Running…',
752
+ 'ws.chart.empty': 'Create Chart (Ctrl+F11) draws the last query: a label column and number columns.',
753
+ 'ws.explain.empty': 'Explain Plan (F10) shows how PostgreSQL would run the statement at the cursor; nothing runs.',
754
+ 'ws.autotrace.empty': 'Autotrace (F6) runs the statement at the cursor with EXPLAIN ANALYZE and rolls it back: actual rows, time and buffers per step.',
755
+ 'ws.idle.seconds': '{n} seconds',
756
+ 'ws.idle.minute': '{n} minute',
757
+ 'ws.idle.minutes': '{n} minutes',
758
+ 'ws.txn.none': 'No open transaction',
759
+ 'ws.txn.failed': 'Transaction failed',
760
+ 'ws.txn.open': 'Transaction open',
761
+ 'ws.txn.under_minute': 'under a minute',
762
+ 'ws.txn.min': '{n} min',
763
+ 'ws.txn.no_txn': 'This worksheet has no open transaction.',
764
+ 'ws.txn.busy': 'A run is still going on in this worksheet: wait for it to finish.',
765
+ 'ws.txn.end_failed': '{action} failed: {error}. The connection was closed, so the transaction is rolled back.',
766
+ 'ws.txn.commit_rolled': 'The transaction had failed, so COMMIT rolled it back: nothing was saved.',
767
+ 'ws.txn.committed': 'Committed ({what}).',
768
+ 'ws.txn.rolled_back': 'Rolled back ({what} undone).',
769
+ 'ws.txn.rolled_back_failed': 'Rolled back ({what} undone; the transaction had failed).',
770
+ 'ws.file.name_long': 'A name has at most 200 characters.',
771
+ 'ws.file.too_big': 'A script holds at most 5 MB.',
772
+ 'ws.file.new_name': 'Enter the new name.',
773
+ 'ws.file.need_name': 'Name the worksheet to save it as a script.',
774
+ 'ws.file.exists': 'A script named “{name}” already exists.',
775
+ 'ws.file.renamed': 'Renamed to “{name}”.',
776
+ 'ws.file.saved': 'Saved as the script “{name}”.',
777
+ 'ws.txn.switched': 'You switched workspaces: the transaction was rolled back.',
778
+ 'ws.txn.open_first': 'This worksheet has an open transaction: Commit or Rollback it first, or switch back to Transaction.',
779
+ 'ws.txn.needs_js': 'Transaction mode needs JavaScript (the worksheet tab it belongs to); this run was refused.',
780
+ 'ws.txn.runs_as': "This worksheet's transaction runs as {who}: Commit or Rollback it before changing Run as.",
781
+ 'ws.txn.not_in_txn': "Line {line}: {what} can't run inside a transaction. Switch the worksheet to Autocommit to run it.",
782
+ 'ws.txn.new_started': '{note} A new transaction started.',
783
+ 'ws.txn.begin_left': 'The transaction started with BEGIN was still open at the end of the run and was rolled back. Switch the worksheet to Transaction to keep a transaction open between runs.',
784
+ 'ws.txn.ended_editor': 'The transaction ended with the COMMIT or ROLLBACK in the editor; the next run starts a new one.',
785
+ 'ws.txn.aborted': 'A statement failed, so the transaction is aborted: Rollback ends it (COMMIT would roll it back too).',
786
+ 'ws.chart.nothing': 'Nothing to draw: the query needs a number column next to its labels.',
787
+ 'ws.chart.again': 'Draw again',
788
+ 'ws.chart.name': 'Chart name',
789
+ 'ws.chart.save': 'Save chart',
790
+ 'ws.binds.title': 'Values for the run',
791
+ 'ws.binds.help': 'Bind variables ({bind}) get a value as a quoted literal; substitution variables ({sub}) put the text into the statement as it is. Empty is NULL for a bind variable.',
792
+ 'ws.runs_as_role': 'the role {role} of {app}',
793
+ 'ws.refresh_nav': 'Refresh the navigator',
794
+ 'ws.navigator': 'Navigator',
795
+ 'ws.objects': 'Objects',
796
+ 'ws.files': 'Files',
797
+ 'ws.schema': 'Schema',
798
+ 'ws.object_type': 'Object type',
799
+ 'ws.search_objects': 'Search objects',
800
+ 'ws.refresh': 'Refresh',
801
+ 'ws.sql_scripts': '(SQL Scripts)',
802
+ 'ws.no_scripts': 'No scripts yet: Save a worksheet to make one.',
803
+ 'ws.resize_nav': 'Resize the navigator',
804
+ 'ws.worksheet': 'Worksheet',
805
+ 'ws.toggle_nav': 'Hide or show the navigator',
806
+ 'ws.file.menu': 'Save, open, rename or download the worksheet (Ctrl+S saves)',
807
+ 'ws.untitled': 'Untitled',
808
+ 'ws.name': 'Name',
809
+ 'ws.save_title': 'Save (Ctrl+S)',
810
+ 'ws.save_as': 'Save as new',
811
+ 'ws.rename': 'Rename',
812
+ 'ws.new': 'New',
813
+ 'ws.open_file': 'Open…',
814
+ 'ws.pin_title': 'Pin this worksheet to the SQL Workshop home',
815
+ 'ws.pin': 'Pin',
816
+ 'ws.run_statement': 'Run Statement',
817
+ 'ws.run_script': 'Run Script',
818
+ 'ws.continue': 'Continue on error',
819
+ 'ws.format': 'Format',
820
+ 'ws.format_title': 'Format (Ctrl+F7)',
821
+ 'ws.case_title': 'Convert case of the selection (Ctrl+B)',
822
+ 'ws.case': 'Convert case',
823
+ 'ws.find_title': 'Find and replace (Ctrl+F, Ctrl+H)',
824
+ 'ws.find': 'Find',
825
+ 'ws.load_title': 'Load data into a table',
826
+ 'ws.load': 'Load data',
827
+ 'ws.keys': 'Keyboard shortcuts',
828
+ 'ws.key.save': 'Save',
829
+ 'ws.key.find': 'Find / replace',
830
+ 'ws.key.goto': 'Go to line',
831
+ 'ws.key.comment': 'Comment the lines',
832
+ 'ws.key.suggest': 'Suggestions',
833
+ 'ws.key.help': 'Help',
834
+ 'ws.key.fullscreen': 'Leave fullscreen',
835
+ 'ws.kwcase': 'Format keywords in',
836
+ 'ws.lower': 'lower case',
837
+ 'ws.upper': 'UPPER CASE',
838
+ 'ws.help': 'Help on the SQL Worksheet',
839
+ 'ws.commit_label': 'Commit',
840
+ 'ws.txn.mode_title': 'Autocommit: each statement commits on its own. Transaction: the statements stay in one transaction until Commit or Rollback.',
841
+ 'ws.autocommit': 'Autocommit',
842
+ 'ws.transaction': 'Transaction',
843
+ 'ws.txn.runs_as_title': 'Runs as {who}',
844
+ 'ws.txn.commit_title': "Commit the worksheet's transaction",
845
+ 'ws.txn.rollback_title': "Roll back the worksheet's transaction",
846
+ 'ws.rollback': 'Rollback',
847
+ 'ws.run_as': 'Run as',
848
+ 'ws.run_as_title': 'Who the statements run as',
849
+ 'ws.owner_conn': 'Owner connection',
850
+ 'ws.ws_login': 'Workspace login',
851
+ 'ws.clear_title': 'Clear the editor',
852
+ 'ws.clear': 'Clear',
853
+ 'ws.fullscreen_title': 'Fullscreen (Escape leaves)',
854
+ 'ws.fullscreen': 'Fullscreen',
855
+ 'ws.runs_as': 'Runs as {who}',
856
+ 'ws.search_path': '{schema} first in the search path ({change})',
857
+ 'ws.change': 'change',
858
+ 'ws.commit.txn': 'The statements stay in one transaction until Commit or Rollback; it is rolled back after {idle} without a run.',
859
+ 'ws.commit.auto': 'Each statement commits on its own.',
860
+ 'ws.worksheets': 'Worksheets',
861
+ 'ws.replace_with': 'Replace with',
862
+ 'ws.regex': 'Regex',
863
+ 'ws.match_case': 'Match case',
864
+ 'ws.next': 'Next',
865
+ 'ws.replace': 'Replace',
866
+ 'ws.replace_all': 'Replace all',
867
+ 'ws.line_ph': 'Line',
868
+ 'ws.close_esc': 'Close (Escape)',
869
+ 'ws.resize_out': 'Resize the output',
870
+ 'ws.output': 'Output',
871
+ 'js.ws.copied': '{what} copied.',
872
+ 'js.ws.no_copy': 'Copying is not allowed here.',
873
+ 'js.ws.the_statement': 'The statement',
874
+ 'js.ws.rows': '{n} rows',
875
+ 'js.ws.untitled': 'Untitled {n}',
876
+ 'js.ws.script': 'Script “{name}”',
877
+ 'js.ws.unsaved': '(unsaved changes)',
878
+ 'js.ws.not_saved': 'Not saved as a script',
879
+ 'js.ws.close_tab': 'Close {name}',
880
+ 'js.ws.new_tab': 'New worksheet',
881
+ 'js.ws.close_unsaved': 'Close “{name}” without saving?',
882
+ 'js.ws.txn_unknown': 'Transaction state unknown',
883
+ 'js.ws.txn_not_ended': 'The transaction could not be ended: reload the page.',
884
+ 'js.ws.txn_confirm': 'Switching to Autocommit rolls back the open transaction. Roll it back?',
885
+ 'js.ws.formatted': 'Formatted.',
886
+ 'js.ws.format_failed': 'Formatting failed.',
887
+ 'js.ws.bad_pattern': 'Not a valid pattern: {error}',
888
+ 'js.ws.not_found': 'Not found.',
889
+ 'js.ws.open_ob': 'Open in the Object Browser',
890
+ 'js.ws.close': 'Close',
891
+ 'js.ws.open_failed': 'The object could not be opened.',
892
+ 'js.ws.replaced': '{n} replaced.',
893
+ // ------------------------------------------------------------ SQL Worksheet, the browser's transaction texts (sprint 123)
894
+ 'js.ws.close_txn': '“{name}” has an open transaction. Close it and roll the transaction back?',
895
+ 'js.ws.commit_txn': 'The statements stay in one transaction until Commit or Rollback; it is rolled back after {idle} without a run.',
896
+ 'js.ws.commit_auto': 'Each statement commits on its own.',
897
+ 'js.ws.idle_seconds': '{n} seconds',
898
+ 'js.ws.idle_minute': '{n} minute',
899
+ 'js.ws.idle_minutes': '{n} minutes',
900
+ 'js.ws.txn_none': 'No open transaction',
901
+ 'js.ws.txn_failed': 'Transaction failed',
902
+ 'js.ws.txn_open': 'Transaction open',
903
+ 'js.ws.stmt_one': '{n} statement',
904
+ 'js.ws.stmt': '{n} statements',
905
+ 'js.ws.under_minute': 'under a minute',
906
+ 'js.ws.min': '{n} min',
907
+ // ------------------------------------------------------------ Object Browser (sprint 123)
908
+ 'ob.title': 'Object Browser',
909
+ 'ob.tab.columns': 'Columns',
910
+ 'ob.tab.data': 'Data',
911
+ 'ob.tab.indexes': 'Indexes',
912
+ 'ob.tab.constraints': 'Constraints',
913
+ 'ob.tab.triggers': 'Triggers',
914
+ 'ob.tab.grants': 'Grants',
915
+ 'ob.tab.rls': 'Row level security',
916
+ 'ob.tab.dependencies': 'Dependencies',
917
+ 'ob.tab.statistics': 'Statistics',
918
+ 'ob.tab.ddl': 'DDL',
919
+ 'ob.filter_label': 'Filter objects',
920
+ 'ob.filter': 'Filter',
921
+ 'ob.extension': 'extension',
922
+ 'ob.no_schema': 'No schema you may use.',
923
+ 'ob.create_in': 'Create database objects in {schema}',
924
+ 'ob.tile.table_form': 'Table (form)',
925
+ 'ob.tile.table_form.desc': 'Columns, keys, indexes and security in a form',
926
+ 'ob.kind.table': 'Table',
927
+ 'ob.kind.view': 'View',
928
+ 'ob.kind.function': 'Function',
929
+ 'ob.kind.sequence': 'Sequence',
930
+ 'ob.kind.index': 'Index',
931
+ 'ob.tile.start': 'Start a CREATE {what} statement',
932
+ 'ob.tile.quick': 'Quick SQL',
933
+ 'ob.tile.quick.desc': 'A data model in shorthand',
934
+ 'ob.tile.load': 'Load data',
935
+ 'ob.tile.load.desc': 'A table from a file',
936
+ 'ob.select_hint': 'Select an object in the tree, or filter it by name.',
937
+ 'ob.schema': 'Schema',
938
+ 'ob.system': 'Show system objects',
939
+ 'ob.create': 'Create',
940
+ 'ob.db_objects': 'Database objects',
941
+ 'ob.err.table': 'Choose a table you may use.',
942
+ 'ob.err.col_name': 'A column name is a letter or _ followed by letters, digits, _ or $.',
943
+ 'ob.err.col_exists': '{column} is a column already.',
944
+ 'ob.err.type': 'A type is a name with an optional size, e.g. text, numeric(9,2), varchar(40), int[].',
945
+ 'ob.err.choose_col': 'Choose a column of the table.',
946
+ 'ob.err.new_name': "The new name must be a valid name that the table doesn't have yet.",
947
+ 'ob.err.default': "A default is one expression (at most 200 characters, without ; or comments), e.g. now(), 0 or 'new'.",
948
+ 'ob.err.nothing': 'Nothing to change: choose a new type, nulls or a default.',
949
+ 'ob.err.action': 'Unknown action.',
950
+ 'ob.review': 'Review the statement and press Run: nothing has been changed yet.',
951
+ 'ob.none': 'None.',
952
+ 'ob.ddl_of': 'DDL of {name}',
953
+ 'ob.no_ddl': "No DDL (an extension's object, or not readable with this connection).",
954
+ 'ob.source_of': 'Source of {name}',
955
+ 'ob.no_source': 'An aggregate or window function: no source.',
956
+ 'ob.definition_of': 'Definition of {name}',
957
+ 'ob.size': 'Size: {size}',
958
+ 'ob.more': 'More',
959
+ 'ob.column': 'Column',
960
+ 'ob.add_col': 'Add column',
961
+ 'ob.name': 'Name',
962
+ 'ob.type': 'Type',
963
+ 'ob.show_sql': 'Show the SQL',
964
+ 'ob.modify_col': 'Modify column',
965
+ 'ob.new_type': 'New type',
966
+ 'ob.the_same': 'the same',
967
+ 'ob.nulls': 'Nulls',
968
+ 'ob.allowed': 'allowed',
969
+ 'ob.default': 'Default',
970
+ 'ob.set_to': 'set to',
971
+ 'ob.default_none': 'none',
972
+ 'ob.default_expr': 'Default expression',
973
+ 'ob.rename_col': 'Rename column',
974
+ 'ob.new_name': 'New name',
975
+ 'ob.new_name_ph': 'new name',
976
+ 'ob.drop_col': 'Drop column',
977
+ 'ob.toolbar_note': 'Each writes the ALTER TABLE statement into the SQL Worksheet: review it there and run it.',
978
+ 'ob.no_rows': 'No rows.',
979
+ 'ob.pages': 'Pages',
980
+ 'ob.previous': '‹ Previous',
981
+ 'ob.next': 'Next ›',
982
+ 'ob.rows_range': 'Rows {from}–{to}',
983
+ 'ob.change_rows': 'To change rows, use the SQL Worksheet, or an interactive grid on the table in an application.',
984
+ 'ob.rls_on': 'Row level security is on',
985
+ 'ob.rls_forced': '(forced for the owner too)',
986
+ 'ob.rls_off': 'Row level security is off.',
987
+ 'ob.no_policies': 'No policies.',
988
+ 'ob.used_by': 'Used by',
989
+ 'ob.nothing_refers': 'Nothing refers to it.',
990
+ 'ob.uses': 'Uses',
991
+ 'ob.refers_nothing': 'It refers to nothing else.',
992
+ 'ob.edit_table': 'Edit table',
993
+ 'ob.security': 'Security',
994
+ // ------------------------------------------------------------ Table Properties (sprint 123)
995
+ 'te.move_up': 'Move up',
996
+ 'te.move_down': 'Move down',
997
+ 'te.name': 'Name',
998
+ 'te.type': 'Type',
999
+ 'te.key': 'Key',
1000
+ 'te.pk': 'Primary key',
1001
+ 'te.not_null': 'Not null',
1002
+ 'te.generated': 'Generated (stored)',
1003
+ 'te.default': 'Default',
1004
+ 'te.identity': 'Identity',
1005
+ 'te.comment': 'Comment',
1006
+ 'te.remove': 'Remove',
1007
+ 'te.columns': 'Columns',
1008
+ 'te.add_col': 'Add column',
1009
+ 'te.pk_name': 'Primary key name',
1010
+ 'te.pk_help': 'Tick Key on the columns of the primary key.',
1011
+ 'te.uniques': 'Unique keys',
1012
+ 'te.cols_comma': 'Columns (comma-separated)',
1013
+ 'te.fks': 'Foreign keys',
1014
+ 'te.references': 'References',
1015
+ 'te.their_cols': 'Their columns',
1016
+ 'te.its_pk': 'its primary key',
1017
+ 'te.on_delete': 'On delete',
1018
+ 'te.checks': 'Checks',
1019
+ 'te.condition': 'Condition',
1020
+ 'te.indexes': 'Indexes',
1021
+ 'te.cols_exprs': 'Columns or expressions',
1022
+ 'te.unique': 'Unique',
1023
+ 'te.kept': 'Kept as they are (another method or a condition):',
1024
+ 'te.more': 'Comment and security',
1025
+ 'te.rls': 'Row level security: rows only through policies',
1026
+ 'te.force_rls': "Force it for the table's owner too",
1027
+ 'te.partitioning': 'Partitioning',
1028
+ 'te.partition_by': 'Partition by',
1029
+ 'te.not_partitioned': 'Not partitioned',
1030
+ 'te.part_help': 'The partitions themselves are tables made with CREATE TABLE … PARTITION OF in the worksheet.',
1031
+ 'te.no_changes': 'No changes yet: the table is as the form shows it.',
1032
+ 'te.fill_in': 'Fill in the table and press Preview DDL.',
1033
+ 'te.output': 'Output',
1034
+ 'te.output_empty': 'Apply shows what happened here.',
1035
+ 'te.schema': 'Schema',
1036
+ 'te.table_name': 'Table name',
1037
+ 'te.props': 'Table properties',
1038
+ 'te.preview': 'Preview DDL',
1039
+ 'te.apply': 'Apply',
1040
+ 'te.open_ws': 'Open in the worksheet',
1041
+ 'te.review': 'Review the statements and run them: nothing has been changed yet.',
1042
+ 'te.changed': 'Changed {table}: {what}.',
1043
+ 'te.created': 'Created {table}: {what}.',
1044
+ 'te.nothing_changed': 'Nothing was changed',
1045
+ 'te.rolled_back': 'the statements ran in one transaction, which was rolled back.',
1046
+ 'te.failed_stmt': 'Failed statement',
1047
+ 'te.title_table': 'Table {table}',
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.',
678
1389
  } as const;