800 lines
38 KiB
Plaintext
800 lines
38 KiB
Plaintext
# ============================================================================
|
|
# English (en) — SOURCE locale.
|
|
#
|
|
# Every key that exists here MUST also exist in locales/sk/main.ftl and
|
|
# locales/cs/main.ftl. Do NOT translate this file.
|
|
#
|
|
# Key naming: <page-or-area>-<element> (kebab-case, grouped by comment
|
|
# blocks). Templates call `nav.tr("key")`; Rust calls `tr!(locale, "key")`.
|
|
# ============================================================================
|
|
|
|
# --- Common / shared words ------------------------------------------------
|
|
common-cancel = Cancel
|
|
common-no = No
|
|
common-remove = Remove
|
|
common-yes = Yes
|
|
|
|
# --- Page chrome (ui/, navbar) --------------------------------------------
|
|
ui-back-to-admin = Back to the admin panel
|
|
ui-back-to-admin-panel = ← Admin panel
|
|
ui-back-to-form = Back to the form
|
|
ui-close-dialog = Close dialog
|
|
ui-err-invalid-redirect = The page could not be reloaded. Go back and try again.
|
|
ui-dismiss-alert = dismiss alert
|
|
notice-log-in-first = Please <a href="/login">log in</a> first.
|
|
services-cross-site-rejected = Cross-site form submission rejected
|
|
|
|
nav-admin = Admin
|
|
nav-permissions = Permissions
|
|
nav-analytics = Analytics
|
|
nav-rates = Rates
|
|
nav-import = Import
|
|
nav-export = Export
|
|
nav-password = Password
|
|
nav-log-out = Log out
|
|
nav-login = Login
|
|
nav-register = Register
|
|
nav-main-menu = main menu
|
|
nav-mobile-menu = mobile menu
|
|
|
|
# --- Field labels used inside composed messages ----------------------------
|
|
label-profile = profile
|
|
label-table = table
|
|
label-column = column
|
|
label-set-name = set name
|
|
label-rule-name = rule name
|
|
label-validation-set-name = validation set name
|
|
label-minimum = Minimum
|
|
label-maximum = Maximum
|
|
label-warning-threshold = Warning threshold
|
|
label-precision = Precision
|
|
label-scale = Scale
|
|
label-column-name = Column name
|
|
label-table-name = Table name
|
|
label-linked-table = Linked table
|
|
label-column-alias = Column alias
|
|
label-profile-name = Profile name
|
|
|
|
# --- Column badges ---------------------------------------------------------
|
|
column-flag-system = system
|
|
column-flag-primary-key = primary key
|
|
column-flag-nullable = nullable
|
|
column-flag-required = required
|
|
column-flag-quantity-ledger = quantity ledger
|
|
column-flag-half-up = half-up
|
|
column-flag-read-only = read only
|
|
column-flag-generated = generated
|
|
column-flag-generated-from = generated from { $source }
|
|
|
|
# --- Login / register / change password ------------------------------------
|
|
login-title = Sign in
|
|
login-username-or-email = Username or email
|
|
login-password = Password
|
|
login-optional = (optional)
|
|
login-button-login = Login
|
|
login-no-account = No account yet?
|
|
login-error-title = Could not sign in
|
|
login-error-identifier-required = Username or email is required
|
|
login-error-invalid-token = The server returned an invalid access token
|
|
|
|
register-title = Register
|
|
register-button-register = Register
|
|
register-confirm-password = Confirm password
|
|
register-have-account = Already have an account?
|
|
register-error-title = Could not register
|
|
register-success-title = Registration successful. You can sign in now.
|
|
register-success-message =
|
|
User ID: { $id }
|
|
Username: { $username }
|
|
Email: { $email }
|
|
Role: { $role }
|
|
Timezone: { $timezone }
|
|
Phone country: { $phone_country }
|
|
|
|
field-username = Username
|
|
field-email = Email
|
|
field-timezone = Timezone
|
|
field-phone-country = Phone country
|
|
field-current-password = Current password
|
|
field-new-password = New password
|
|
field-confirm-new-password = Confirm new password
|
|
|
|
password-title = Change password
|
|
password-button-change = Change password
|
|
password-empty-current-hint = For a freshly seeded admin or superadmin account, leave the current password empty.
|
|
password-error-title = Could not change password
|
|
password-success-title = Password changed
|
|
password-changed-message = Your new password is active.
|
|
|
|
# --- Admin panel (workspace browser) ---------------------------------------
|
|
admin-title = Admin panel
|
|
admin-eyebrow-workspace = Workspace
|
|
admin-description = Browse profiles, tables, and their physical columns. Pick a table to reach what can be done to it.
|
|
admin-add-table = Add table
|
|
admin-add-logic = Add logic
|
|
admin-add-validation = Add validation
|
|
admin-add-rule = Add rule
|
|
admin-export = Export
|
|
admin-exchange-rates = Exchange rates
|
|
admin-unavailable-title = Admin panel unavailable
|
|
admin-forbidden = This account is not allowed to open the admin panel.
|
|
|
|
admin-profiles = Profiles
|
|
admin-global-label = Global
|
|
admin-err-unknown-profile = Unknown profile '{ $name }'
|
|
admin-err-table-not-in-profile = Table '{ $name }' is not part of the selected profile
|
|
admin-err-backend-no-structure = The backend did not return the structure for '{ $name }'
|
|
admin-no-profiles-available = No profiles available.
|
|
admin-table-count = { $count ->
|
|
[one] { $count } table
|
|
*[other] { $count } tables
|
|
}
|
|
admin-shared-by-every-profile = shared by every profile
|
|
admin-tables-heading = Tables
|
|
admin-select-profile-first = Select a profile to see its tables.
|
|
admin-no-global-tables = There are no global tables.
|
|
admin-no-profile-tables = This profile has no tables of its own.
|
|
admin-no-dependencies = No dependencies
|
|
admin-depends-on-prefix = Depends on
|
|
admin-row-display-prefix = display:
|
|
admin-add-columns = Add columns
|
|
admin-column-presentation = Column aliases
|
|
admin-delete-table = Delete table
|
|
admin-who-may-use-it = Who may use it
|
|
admin-pick-table-hint = Pick a table to add columns to it, delete it, or say who may use it.
|
|
admin-new-global-table = New global table
|
|
admin-new-table = New table
|
|
admin-from-template = From template
|
|
admin-copy-profile = Copy profile
|
|
admin-rename-history = Rename history
|
|
admin-columns = Columns
|
|
admin-column-counts = { $user ->
|
|
[one] { $user } user
|
|
*[other] { $user } users
|
|
} · { $system ->
|
|
[one] { $system } system
|
|
*[other] { $system } system
|
|
}
|
|
admin-select-table-inspect = Select a table to inspect its columns.
|
|
admin-no-visible-columns = This table has no visible columns.
|
|
admin-system-columns-label = System columns · hidden from users
|
|
|
|
# --- Table definition pages (add columns / presentation / delete / copy / template / history) -
|
|
td-add-columns-title = Add columns
|
|
td-presentation-title = Column presentation
|
|
td-add-columns-to = Add columns to
|
|
td-append-hint = Columns are appended. Nothing that already exists is changed, and the new columns can be indexed as they are added.
|
|
td-rename-column = Column aliases and order
|
|
td-rename-hint = Renames what the column is called, not the physical column underneath, so stored data and scripts are untouched.
|
|
td-column-label = Column
|
|
td-choose-column = Choose a column
|
|
td-new-name = New name
|
|
td-rename-button = Save presentation
|
|
td-columns-now = Columns it has now
|
|
td-col-column = Column
|
|
td-col-type = Type
|
|
td-col-notes = Notes
|
|
td-scripts = Scripts
|
|
td-col-target-column = Target column
|
|
td-col-description = Description
|
|
td-source = source
|
|
|
|
td-could-not-add-column = Could not add the column
|
|
td-staged = Staged
|
|
td-link-alias = Link alias
|
|
td-column-name = Column name
|
|
td-link-alias-hint = The alias is the column name used to distinguish this relationship.
|
|
td-column-type = Column type
|
|
td-choose-type = Choose a type
|
|
td-fk-link = FKlink
|
|
td-temporal-type = Temporal type
|
|
td-choose-temporal-type = Choose a temporal type
|
|
td-gtin-type = GTIN type
|
|
td-choose-gtin-length = Choose a GTIN length
|
|
td-precision = Precision
|
|
td-precision-hint = Total digits stored, at least 1.
|
|
td-scale = Scale
|
|
td-scale-hint = Digits after the point, no more than the precision.
|
|
td-referenced-table = Referenced table
|
|
td-choose-table = Choose a table
|
|
td-group-global = Global
|
|
td-group-user = User-created
|
|
td-group-system = System-created
|
|
td-no-eligible-tables = No eligible tables exist in this scope.
|
|
td-currency = Currency
|
|
td-rounding = Rounding
|
|
td-rounding-none = none
|
|
td-rounding-half-up = half-up
|
|
td-indexing = Indexing
|
|
td-indexed-automatically = Indexed automatically — a link is a foreign key, and the server indexes every one of them.
|
|
td-required = Required
|
|
td-required-hint = A row must carry a value for it.
|
|
td-quantity-ledger = Quantity ledger
|
|
td-ql-only = { $types } only.
|
|
td-shared-no-quantity-ledger = A shared table keeps no books of its own, so it cannot hold a quantity-ledger column.
|
|
td-stage-column = Stage column
|
|
td-no-staged-columns = No columns staged yet. Describe one above and press
|
|
td-col-name = Name
|
|
td-col-indexed = Indexed
|
|
td-col-options = Options
|
|
td-indexed-automatically-tag = indexed automatically
|
|
td-money-exact = exact
|
|
td-money-half-up = half-up
|
|
td-add-columns-button = { $count ->
|
|
[one] Add { $count } column to the table
|
|
*[other] Add { $count } columns to the table
|
|
}
|
|
|
|
td-eyebrow-table-definition = Table definition
|
|
td-columns-count = { $count ->
|
|
[one] { $count } column
|
|
*[other] { $count } columns
|
|
}
|
|
td-identified-by = identified by
|
|
td-its-id = its id
|
|
td-depends-on-prefix = depends on
|
|
td-acts-on-profile = Everything on this page acts on this profile.
|
|
td-global-label = Global — all profiles
|
|
td-tab-aria = table actions
|
|
td-tab-add-columns = Add columns
|
|
td-tab-add-columns-sub = Append new columns
|
|
td-tab-presentation = Presentation
|
|
td-tab-presentation-sub = Change aliases and order
|
|
td-tab-delete = Delete
|
|
td-tab-delete-sub = Drop this table
|
|
td-tab-access = Access
|
|
td-tab-access-sub = Which roles may read and write it
|
|
td-tab-copy = Copy profile
|
|
td-tab-copy-sub = Duplicate its structure
|
|
td-tab-template = From template
|
|
td-tab-template-sub = Create tables from a Typst invoice
|
|
td-tab-history = Rename history
|
|
td-tab-history-sub = How columns got their names
|
|
td-backend-managed-title = Backend-managed
|
|
td-backend-managed-hint = This table is the backend's own. Its definition is visible in the <a href="/admin">admin panel</a>, but it can only be changed through the backend's own APIs, so none of the write actions apply to it.
|
|
|
|
td-could-not-continue = Could not continue
|
|
td-done = Done
|
|
td-sql-ran = SQL the backend ran
|
|
td-delete-title = Delete table
|
|
td-delete-table = Delete table
|
|
td-delete-hint = Drops the table and its definition, and the profile too when this was its last table. The backend refuses to delete a table that still has rows.
|
|
td-links-to = It links to { $tables }.
|
|
td-type-to-confirm = Type <code>{ $table }</code> to confirm
|
|
td-no-table-chosen = No table chosen
|
|
td-pick-table-delete = Pick the table to delete in the <a href="/admin">admin panel</a> first.
|
|
td-copy-title = Copy profile
|
|
td-copy-into = Copy
|
|
td-copy-hint = Copies structure — tables, links and scripts — and no rows. Leave every table unticked to copy the whole profile.
|
|
td-new-profile-name = New profile name
|
|
td-copy-button = Copy profile
|
|
td-template-title = Create from template
|
|
td-template-created-tables = Tables created from the template
|
|
td-col-table = Table
|
|
td-col-collection = Collection
|
|
td-col-parent = Parent
|
|
td-root = root
|
|
td-template-create-heading = Create tables from an invoice template
|
|
td-template-hint = Reads the <code>#let komp_ac_fields = (…)</code> contract out of a Typst template. A path that matches an existing table and column becomes a reference to it; anything else becomes a TEXT column to refine later, and every <code>[]</code> becomes a child table.
|
|
td-table-name = Table name
|
|
td-row-display-columns = Row display columns
|
|
td-row-display-hint = Comma-separated, and only for the root table.
|
|
td-template-source = Template source
|
|
td-template-create-button = Create from template
|
|
td-history-title = Rename history
|
|
td-history-heading = Column rename history
|
|
td-history-empty = No column in { $scope } has been renamed.
|
|
td-history-empty-this-profile = No column in this profile has been renamed.
|
|
td-col-was = Was
|
|
td-col-is = Is
|
|
td-col-when = When
|
|
|
|
td-columns-added = { $count ->
|
|
[one] { $count } column added to `{ $table }`.
|
|
*[other] { $count } columns added to `{ $table }`.
|
|
}
|
|
td-profile-copied = { $message } — { $tables ->
|
|
[one] { $tables } table
|
|
*[other] { $tables } tables
|
|
} and { $scripts ->
|
|
[one] { $scripts } script
|
|
*[other] { $scripts } scripts
|
|
} copied.
|
|
td-template-tables-created = { $count ->
|
|
[one] { $count } table created from the template.
|
|
*[other] { $count } tables created from the template.
|
|
}
|
|
td-err-select-table-first = Select a table first.
|
|
td-err-profile-gone = Profile `{ $missing }` no longer exists.
|
|
td-err-not-a-table = `{ $missing }` is not a table of { $scope }.
|
|
td-err-describe-column = Describe at least one column before adding.
|
|
td-err-backend-no-columns = The backend did not add the columns.
|
|
td-err-choose-rename = Choose a column and type its new name.
|
|
td-err-backend-no-rename = The backend did not rename the column.
|
|
td-err-type-name = Type the table's name exactly to confirm the deletion.
|
|
td-err-backend-no-delete = The backend did not delete the table.
|
|
td-err-name-profile = Name the profile to copy into.
|
|
td-err-backend-no-copy = The backend did not copy the profile.
|
|
td-err-template-required = A table name and the template's source are both required.
|
|
td-err-backend-no-template = The backend did not create the template's tables.
|
|
td-err-permission = Table-management permission is required.
|
|
td-unavailable-title = Table definition unavailable
|
|
|
|
# --- ECB reference rates ---------------------------------------------------
|
|
ecb-title = Exchange rates
|
|
ecb-heading = ECB reference rates
|
|
ecb-description = The importer fetches the ECB's published rates once a day and records every attempt. Conversions read only what it has verified, so coverage is what decides whether a foreign-currency amount can be posted at all.
|
|
ecb-unavailable-title = Exchange rates unavailable
|
|
ecb-forbidden = Reading exchange-rate data is required to open this page.
|
|
ecb-import-attempts = Import attempts
|
|
ecb-failed-count = { $count ->
|
|
[one] { $count } failed
|
|
*[other] { $count } failed
|
|
}
|
|
ecb-no-attempts-hint = The importer has not recorded an attempt. It runs on startup and then daily, so an empty log means the server has not completed a run since this table was created.
|
|
ecb-th-result = Result
|
|
ecb-th-started = Started
|
|
ecb-th-finished = Finished
|
|
ecb-th-took = Took
|
|
ecb-th-window = Window
|
|
ecb-th-observations = Observations
|
|
ecb-th-verified-through = Verified through
|
|
ecb-batch-succeeded = succeeded
|
|
ecb-batch-running = running
|
|
ecb-batch-failed = failed
|
|
ecb-still-running = still running
|
|
ecb-audit-hint = Attempts are an audit record: they cannot be edited or deleted, and a batch that re-fetched a day an earlier one already owned inserts nothing, which is why the new count can be lower than the total.
|
|
ecb-import-running = import running
|
|
ecb-postable-lead = What can be posted right now
|
|
ecb-ordinary-transactions = Ordinary transactions
|
|
ecb-statements-title = Statements & decisive dates
|
|
ecb-dated-up-to = dated up to and including
|
|
ecb-ordinary-rate-hint = Converted at the rate published the business day before the transaction.
|
|
ecb-statements-rate-hint = Converted at the rate published on that day, or the last business day before it.
|
|
ecb-postable-limit-hint = A foreign-currency amount dated after its limit is refused outright until the importer catches up — it is not converted at a stale rate.
|
|
ecb-nothing = Nothing.
|
|
ecb-no-publication-hint = No publication has ever been verified, so every foreign-currency amount is refused whatever its date.
|
|
ecb-verified-through = Verified through
|
|
ecb-never = never
|
|
ecb-up-to-date = up to date
|
|
ecb-behind-count = { $count ->
|
|
[one] { $count } publication day behind
|
|
*[other] { $count } publication days behind
|
|
}
|
|
ecb-no-coverage = no coverage
|
|
ecb-should-reach = Should reach
|
|
ecb-last-attempt = Last attempt
|
|
ecb-none-recorded = none recorded
|
|
ecb-last-success = Last success
|
|
ecb-none = none
|
|
ecb-next-import = Next import
|
|
ecb-currencies-on = Currencies on { $date }
|
|
ecb-the-covered-day = the covered day
|
|
ecb-most-recent-failure = Most recent failure — batch { $batch }, started { $started }:
|
|
ecb-no-reason-recorded = no reason was recorded.
|
|
ecb-headline-current = Rates are current
|
|
ecb-headline-never-ran = No rates have ever been imported
|
|
ecb-headline-behind = Rates are behind
|
|
ecb-explanation-current = Every publication day up to the latest one is verified, so conversions post normally.
|
|
ecb-explanation-never-ran = Until one succeeds, every conversion in a foreign currency is refused for want of coverage.
|
|
ecb-explanation-behind = { $count ->
|
|
[one] { $count } publication day is missing.
|
|
*[other] { $count } publication days are missing.
|
|
} A conversion dated inside the gap is refused until the importer catches up.
|
|
ecb-new-of = { $inserted } new of { $total }
|
|
ecb-in = in { $time }
|
|
ecb-ago = { $time } ago
|
|
ecb-less-than-1s = <1s
|
|
|
|
# --- Permissions (roles / users / grants) ----------------------------------
|
|
perm-eyebrow = Permissions
|
|
perm-tabs-aria = permission sections
|
|
perm-tab-roles = Roles
|
|
perm-tab-roles-sub = Create roles and their inheritance
|
|
perm-tab-people = People
|
|
perm-tab-people-sub = Give a user a role
|
|
perm-tab-access = Access
|
|
perm-tab-access-sub = What a role may do
|
|
perm-unavailable-title = Permissions unavailable
|
|
perm-update-error = Could not update permissions
|
|
perm-forbidden = This account manages neither roles nor users.
|
|
perm-err-missing-session = Missing session
|
|
perm-err-nothing-to-change = Nothing to change: the form carried no permissions.
|
|
perm-err-bad-pair = '{ $value }' is not an object|action pair.
|
|
perm-err-not-editable-role = '{ $role }' is not a role you may edit.
|
|
perm-err-neither-grant-nor-revoke = '{ $value }' is neither grant nor revoke.
|
|
perm-err-grant-failed = Granting { $action } on { $object } failed: { $error }
|
|
perm-err-revoke-failed = Revoking { $action } on { $object } failed: { $error }
|
|
perm-err-bad-starter-access = '{ $value }' is not a starter access level.
|
|
perm-role-created-grant-failed = Role '{ $role }' was created, but granting { $action } on { $object } failed: { $error }
|
|
perm-role-reason-outranks-you = outranks you
|
|
perm-role-reason-built-in = built in
|
|
perm-role-reason-still-assigned = still assigned
|
|
|
|
roles-description = A role is a named set of permissions. People are given roles; roles are given access.
|
|
roles-updated-notice = Roles updated. Signed-in sessions stay valid and pick up the change on their next request.
|
|
roles-new-heading = New role
|
|
roles-new-hint = Inheriting from another role starts the new one with everything that role has, and keeps it in step as that role changes. Starter access is a shortcut for the two common cases; anything narrower is a few clicks on the Access tab.
|
|
roles-name = Name
|
|
roles-inherits-from = Inherits from
|
|
roles-inherits-none = Nothing — starts empty
|
|
roles-starter-access = Starter access
|
|
roles-access-none = None — grant it on the Access tab
|
|
roles-access-read = Read everything
|
|
roles-access-full = Read and write everything
|
|
roles-create-button = Create role
|
|
roles-existing = Existing roles
|
|
roles-th-role = Role
|
|
roles-th-kind = Kind
|
|
roles-th-inherits = Inherits from
|
|
roles-th-people = People
|
|
roles-th-access = Access
|
|
roles-th-remove = Remove
|
|
roles-built-in = built in
|
|
roles-edit-access = Edit access
|
|
|
|
users-description = Give a user a role. What that role may do is decided once, on the Access tab.
|
|
users-updated-notice = Updated. The person's next request uses the new role; they do not have to sign in again.
|
|
users-heading = Users
|
|
users-outrank-hint = You can only change someone whose role you outrank — { $editable } of { $total } here.
|
|
users-th-user = User
|
|
users-th-email = Email
|
|
users-th-role = Role
|
|
users-th-change = Change role
|
|
users-th-reset = Reset password
|
|
users-assign = Assign
|
|
users-confirm = Confirm
|
|
users-reset = Reset
|
|
|
|
grants-description = What a role may do with the data. Everyone holding the role gets exactly this.
|
|
grants-updated-notice = Access updated. It applies to the next request every holder of the role makes.
|
|
grants-no-role = No role to edit
|
|
grants-no-role-hint = There is no role here you outrank. <a href="/permissions/roles">Create one</a> first.
|
|
grants-role-heading = Role
|
|
grants-editing = Editing
|
|
grants-inherits-prefix = → inherits
|
|
grants-inherits-parent = <strong>{ $role }</strong> inherits everything <strong>{ $parent }</strong> has. Inherited access shows below but is changed on the parent.
|
|
grants-inherits-none = <strong>{ $role }</strong> inherits from nothing, so what you see below is all it has.
|
|
grants-structural-hint = This role designs the system and may never write row data, so only the read column is open.
|
|
grants-shortcuts = Shortcuts
|
|
grants-shortcuts-hint = These grant the wildcard objects, so they keep covering profiles and tables created later.
|
|
grants-full-access-everything = Full access to everything
|
|
grants-remove-all-access = Remove all access
|
|
grants-everything-everywhere = Everything, everywhere
|
|
grants-profile-prefix = Profile:
|
|
grants-read-only = Read only
|
|
grants-full-access = Full access
|
|
grants-clear = Clear
|
|
grants-th-object = Object
|
|
grants-th-row = Row
|
|
grants-cell-unavailable = Not available for this role
|
|
grants-cell-direct = Held directly — click to revoke
|
|
grants-cell-inherited = inherited: covered by the parent role or a wider grant
|
|
grants-cell-grant = Click to grant
|
|
grants-all = All
|
|
grants-none = None
|
|
grants-read-everything-hint = Read on every profile, journal and exchange rate
|
|
grants-full-everything-hint = Every action the role may hold, on every profile
|
|
grants-remove-all-hint = Revoke every grant this role holds directly
|
|
grants-read-only-hint = Read on everything in here
|
|
grants-full-access-hint = Every action the role may hold, on everything in here
|
|
grants-clear-hint = Revoke everything this role holds directly in here
|
|
grants-all-hint = Grant every action available on this object
|
|
grants-none-hint = Revoke this object's direct grants
|
|
grants-everything-title = Everything
|
|
grants-label-all-tables = All tables
|
|
grants-note-all-tables = Every table in every profile, including ones added later.
|
|
grants-label-all-journals = All journals
|
|
grants-note-all-journals = Every profile's accounting journal.
|
|
grants-label-all-rates = All exchange rates
|
|
grants-note-all-rates = ECB rates are imported by the server, so they can only be read.
|
|
grants-note-profile-tables = Every table in this profile, including ones added later.
|
|
grants-label-journal = Journal
|
|
grants-note-journal = This profile's accounting journal.
|
|
grants-label-rates = Exchange rates
|
|
grants-note-rates = Imported by the server, so read is the only grant.
|
|
grants-note-table = This table and its whole template family.
|
|
|
|
# --- Analytics -------------------------------------------------------------
|
|
analytics-title = Analytics
|
|
analytics-eyebrow = Reporting
|
|
analytics-description = Query the read-only analytics API and chart the result.
|
|
analytics-available-data = Available data
|
|
analytics-load-hint = Load a profile to see the table and column aliases accepted by analytics SQL.
|
|
analytics-profile = Profile
|
|
analytics-loading-profiles = Loading profiles…
|
|
analytics-load-schema = Load schema
|
|
analytics-no-schema = No schema loaded.
|
|
analytics-chart = Chart
|
|
analytics-chart-bar = Bar
|
|
analytics-chart-line = Line
|
|
analytics-chart-pie = Pie
|
|
analytics-chart-scatter = Scatter
|
|
analytics-chart-table = Table
|
|
analytics-max-rows = Max rows
|
|
analytics-sql = SQL
|
|
analytics-sql-placeholder = Load the schema, then choose a starter query or write a SELECT query
|
|
analytics-run-query = Run query
|
|
analytics-running = Running…
|
|
analytics-no-tables = This profile has no analytics tables.
|
|
analytics-tables-available = { $count ->
|
|
[one] { $count } table available
|
|
*[other] { $count } tables available
|
|
}
|
|
analytics-use-starter = Use starter query
|
|
analytics-links = Links
|
|
analytics-required = required
|
|
analytics-llm-context = LLM schema context
|
|
analytics-llm-hint = Copy this entire text and include it when asking an LLM to write a query.
|
|
analytics-copy-context = Copy context
|
|
analytics-copied = Copied
|
|
analytics-load-error = Could not load profiles: { $message }
|
|
analytics-no-profiles = No profiles available
|
|
analytics-choose-profile = Choose a profile…
|
|
analytics-sign-in = Sign in to list the profiles you may read.
|
|
analytics-err-profile-required = Enter a profile name to load its schema
|
|
analytics-err-input-required = Profile name and SQL are required
|
|
analytics-err-chart-columns = Charts require at least two result columns
|
|
analytics-err-chart-type = Unknown chart type
|
|
analytics-not-signed-in = You are not signed in for { $action }.
|
|
analytics-action-loading-schema = loading the schema
|
|
analytics-action-running-query = running a query
|
|
analytics-result-meta = { $rows ->
|
|
[one] { $rows } row
|
|
*[other] { $rows } rows
|
|
} in { $elapsed } ms
|
|
analytics-result-meta-truncated = { $rows ->
|
|
[one] { $rows } row
|
|
*[other] { $rows } rows
|
|
} in { $elapsed } ms (truncated)
|
|
|
|
# --- Import / export -------------------------------------------------------
|
|
transfer-eyebrow = Data transfer
|
|
import-title = Import CSV
|
|
import-lead = Choose a browser-local file or paste CSV. Rows are validated against live table structures before gRPC bulk insertion.
|
|
import-profile = Profile
|
|
import-target-tables = Target tables
|
|
import-csv-file = CSV file
|
|
import-csv-data = CSV data
|
|
import-error-title = Could not import CSV
|
|
import-import-rows = Import rows
|
|
import-success-title = Import complete
|
|
import-success-message = Inserted { $inserted ->
|
|
[one] { $inserted } record
|
|
*[other] { $inserted } records
|
|
} from { $source_rows ->
|
|
[one] { $source_rows } CSV row
|
|
*[other] { $source_rows } CSV rows
|
|
} across { $table_count ->
|
|
[one] { $table_count } table
|
|
*[other] { $table_count } tables
|
|
}.
|
|
import-err-select-profile = Select a profile.
|
|
import-err-tables-required = Enter at least one target table.
|
|
import-err-csv-required = Choose a CSV file or paste CSV data.
|
|
import-err-unknown-profile = Unknown profile.
|
|
import-err-tables-not-in-profile = One or more target tables do not belong to the profile.
|
|
import-err-missing-structure = The backend omitted a requested table structure.
|
|
import-err-no-importable-columns = CSV has no importable columns for table '{ $table }'.
|
|
import-err-column-not-importable = Column '{ $column }' is not importable for table '{ $table }'.
|
|
import-err-csv-row = CSV row { $row }: { $error }
|
|
import-err-multi-headers = Multi-table CSV needs a table-header row and a column-header row.
|
|
import-err-first-row = The first CSV row must contain only selected table names.
|
|
import-err-header-lengths = Table and column header rows have different lengths.
|
|
import-err-row-width = A CSV data row has a different number of fields than the header.
|
|
import-err-no-data-rows = CSV contains headers but no data rows.
|
|
import-err-missing-type = Missing type for column '{ $column }'
|
|
import-err-permission = Insert permission is required for at least one readable table.
|
|
import-err-unterminated-quote = CSV contains an unterminated quoted value.
|
|
import-err-empty = CSV is empty.
|
|
import-err-bad-boolean = Invalid boolean value '{ $value }'
|
|
import-err-bad-integer = Invalid integer value '{ $value }'
|
|
|
|
export-title = Export CSV
|
|
export-lead = The download is generated from live table data through gRPC.
|
|
export-profile = Profile
|
|
export-choose-profile = Choose a profile
|
|
export-tables = Tables
|
|
export-comma-hint = Separate multiple tables with commas.
|
|
export-error-title = Could not export CSV
|
|
export-download = Download CSV
|
|
export-err-select-profile = Select a profile.
|
|
export-err-tables-required = Enter at least one table.
|
|
export-err-unknown-profile = Unknown profile.
|
|
export-err-tables-not-in-profile = One or more tables do not belong to the selected profile.
|
|
export-err-missing-structure = The backend omitted a requested table structure.
|
|
export-err-negative-count = The backend returned a negative row count.
|
|
export-err-range = The export exceeds the supported row-position range.
|
|
export-err-permission = Read permission is required for at least one table.
|
|
|
|
# --- Add logic -------------------------------------------------------------
|
|
add-logic-title = Add logic
|
|
add-logic-eyebrow = Computed column
|
|
add-logic-lead = Create or update a Steel script through the existing table-script service.
|
|
add-logic-table = Table
|
|
add-logic-choose-table = Choose a table
|
|
add-logic-name = Logic name
|
|
add-logic-target-column = Target column
|
|
add-logic-script = Steel expression
|
|
add-logic-description = Description
|
|
add-logic-error-title = Could not save the logic
|
|
add-logic-save = Save logic
|
|
add-logic-success-title = Logic saved
|
|
add-logic-saved = Script #{ $id } was saved.
|
|
add-logic-saved-warnings = Script #{ $id } was saved. Warnings: { $warnings }
|
|
add-logic-err-select-table = Select a target table.
|
|
add-logic-err-target-column = Enter the target column.
|
|
add-logic-err-script = Enter a Steel expression.
|
|
add-logic-err-script-paren = The Steel expression must start with `(`.
|
|
add-logic-err-permission = Script-management permission is required.
|
|
|
|
# --- Add table builder -----------------------------------------------------
|
|
add-table-title = Add table
|
|
add-table-eyebrow = Table definition
|
|
add-table-lead = Choose whether the table belongs to one profile or is available to all profiles, then add its columns. After creation, you can assign the initial role permissions.
|
|
builder-err-title = Could not create the table
|
|
builder-err-permission = Table-management permission is required.
|
|
builder-err-backend-no-create = The backend did not create the table.
|
|
builder-could-not-continue = Could not continue
|
|
builder-draft-updated = Draft updated
|
|
builder-table-details = Table details
|
|
builder-scope-question = Where should this table be available?
|
|
builder-scope-profile = One profile
|
|
builder-scope-profile-hint = Only the selected profile can use this table.
|
|
builder-scope-global = All profiles
|
|
builder-scope-global-hint = Every profile can use this shared table.
|
|
builder-which-profile = Which profile?
|
|
builder-choose-profile = Choose a profile
|
|
builder-new-profile = New profile…
|
|
builder-new-profile-name = New profile name
|
|
builder-accounting-currency = Accounting currency
|
|
builder-accounting-currency-hint = Books are kept in EUR for now — other currencies are listed but the server still refuses them.
|
|
builder-table-name = Table name
|
|
builder-add-column-heading = Add a column
|
|
builder-add-column-button = Add column
|
|
builder-shared-table-hint = A shared table keeps no books of its own, so ACCOUNTING, ACCOUNTING_TRANSFER and quantity-ledger columns are not offered here — each of them posts to one profile's ledger.
|
|
builder-compound-intro = is a definition row, not a column of its own. Adding it gives the table:
|
|
builder-inherits-currency-hint = kept in the currency and rounding chosen above
|
|
builder-account-system-hint = system column — the account each row is posted to, written as <code>account</code>
|
|
builder-rename-generated-hint = Each of these can be given a name of your own under <em>Rename generated columns</em> once the row is added; leave a field empty to keep the name shown here.
|
|
builder-reserved-hint = These names are reserved: no column of your own may use them, and the table may hold only one <code>{ $type }</code>. They land where this row sits in the column list, and can be moved with it.
|
|
builder-columns-heading = Columns
|
|
builder-no-columns = No columns yet. Describe one above and press
|
|
builder-columns-order-hint = Columns are created in this order. Use the arrows to move one.
|
|
builder-th-order = Order
|
|
builder-th-name = Name
|
|
builder-th-type = Type
|
|
builder-th-indexed = Indexed
|
|
builder-th-options = Options
|
|
builder-move-up = Move { $name } up
|
|
builder-move-down = Move { $name } down
|
|
builder-renamed-to = renamed to { $alias }
|
|
builder-rename-generated = Rename generated columns
|
|
builder-rename-generated-hint2 = These columns come from the definition rows above. Give one a name of your own, or leave it empty to keep the name shown.
|
|
builder-rename-aria = Rename { $name }
|
|
builder-apply-names = Apply names
|
|
builder-row-display = Row display columns
|
|
builder-row-display-hint = What identifies a row to users, in the order chosen. Pick <code>id</code> to clear the list.
|
|
builder-preview = Table definition preview
|
|
builder-preview-th-column = Column
|
|
builder-preview-th-type = Type
|
|
builder-preview-th-options = Options
|
|
builder-preview-th-source = Source
|
|
builder-preview-primary-key = primary key
|
|
builder-preview-default-false = default false
|
|
builder-preview-not-null-1 = not null, default 1
|
|
builder-preview-current-time = current time
|
|
builder-preview-account-option = not null, → accounts, written as { $field }
|
|
builder-option-indexed = indexed
|
|
builder-create-table = Create table
|
|
builder-status-generated-keep = The generated columns keep their own names.
|
|
builder-status-generated-one = 1 generated column renamed.
|
|
builder-status-generated-many = { $count } generated columns renamed.
|
|
|
|
draft-err-profile-name = Enter a name for the new profile.
|
|
draft-err-table-conflict-global = A table named `{ $name }` already exists. A shared table's name has to be free in every profile.
|
|
draft-err-table-conflict = A table named `{ $name }` already exists in profile `{ $profile }`, or is shared by every profile.
|
|
draft-err-no-columns = Add at least one column before saving.
|
|
draft-err-ragged-columns = The posted column data is incomplete: { $posted } columns were sent, but only { $kept } carry every field. Each column needs a name, type, indexing, quantity-ledger, required, rounding and currency value.
|
|
draft-err-alias-taken = Alias `{ $alias }` for generated column `{ $source }` is already taken by another column.
|
|
draft-err-accounting-currency = Accounting currency must be a three-letter ISO-4217 code
|
|
|
|
schema-status-column-added = Column `{ $name }` added.
|
|
schema-status-column-removed = Column `{ $name }` removed.
|
|
schema-status-column-moved-up = Column `{ $name }` moved up.
|
|
schema-status-column-moved-down = Column `{ $name }` moved down.
|
|
|
|
schema-err-both-name-type = Both a column name and a column type are required.
|
|
schema-err-creation-only = A { $type } column can only be chosen while the table is being created.
|
|
schema-err-column-exists = A column named `{ $name }` already exists.
|
|
schema-err-generated-exists = `{ $type }` generates a column named `{ $generated }`, and the table already has one.
|
|
schema-err-ql-types = Quantity-ledger columns must use { $types }
|
|
schema-err-column-ql-types = Column `{ $name }`: quantity-ledger columns must use { $types }
|
|
schema-err-column-prefix = Column `{ $name }`: { $error }
|
|
schema-err-decimal-not-valid = `decimal` is not a valid field type.
|
|
schema-err-link-not-valid = `link` is not a valid field type.
|
|
schema-err-decimal-args-needed = `{ $type }` needs both a precision and a scale.
|
|
schema-err-link-target-needed = `link` needs a referenced table.
|
|
schema-err-generated-type = `{ $type }` is a column type the backend generates itself.
|
|
schema-err-invalid-type = `{ $type }` is not a valid field type.
|
|
schema-err-account-link = The account relationship is built into ACCOUNTING and cannot be declared as a link.
|
|
schema-err-link-self = Link `{ $column }` cannot point at the table being created.
|
|
schema-err-column-gone = That column no longer exists.
|
|
schema-err-link-indexed = Link `{ $name }` is indexed automatically and cannot be indexed again.
|
|
schema-err-definition-indexed = `{ $name }` is a definition row, not a column, so it cannot be indexed.
|
|
schema-err-currency-only = Column `{ $name }`: a currency belongs only to a column type that requires one.
|
|
schema-err-name-twice = `{ $name }` names more than one of this table's columns.
|
|
schema-err-currency-code = Currency must be a three-letter ISO-4217 code
|
|
schema-err-profile-only-type = A shared table cannot use { $type }: it posts to one profile's books, and a shared table belongs to every profile.
|
|
schema-err-shared-ql = Column `{ $name }`: a shared table cannot keep a quantity ledger, which belongs to one profile.
|
|
schema-err-profile-reserved = That profile name is reserved by PostgreSQL.
|
|
schema-err-table-name-too-long = Table name cannot be longer than { $limit } characters, because the indexes on its columns are named after it.
|
|
schema-err-table-name-reserved = `{ $name }` is the name of a table every profile is given, so it cannot be reused.
|
|
|
|
error-identifier-empty = { $label } cannot be empty.
|
|
error-identifier-whitespace = { $label } cannot start or end with a space.
|
|
error-identifier-underscore = { $label } cannot start with an underscore.
|
|
error-identifier-number = { $label } cannot start with a number.
|
|
error-identifier-too-long = { $label } cannot be longer than { $limit } characters.
|
|
error-identifier-charset = { $label } may only use lowercase letters, digits and underscores.
|
|
error-identifier-reserved = { $label } uses a reserved name.
|
|
error-decimal-required = { $label } is required for a decimal column.
|
|
error-decimal-sign = { $label } cannot carry a sign.
|
|
error-decimal-whole = { $label } must be a whole number.
|
|
error-decimal-leading-zeros = { $label } cannot have leading zeros.
|
|
error-precision-min = Precision must be at least 1.
|
|
error-scale-gt-precision = Scale cannot be greater than precision.
|
|
|
|
# --- Add validation --------------------------------------------------------
|
|
validation-eyebrow = Validation
|
|
validation-library-eyebrow = Global validation library
|
|
validation-field-title = Add field validation
|
|
validation-field-lead = Attach validation to one column of one table.
|
|
validation-rule-title = Add reusable validation rule
|
|
validation-rule-lead = A named rule that validation sets can compose, independent of any table.
|
|
validation-set-title = Add validation set
|
|
validation-set-lead = Compose an ordered set from existing reusable rule names.
|
|
validation-profile = Profile
|
|
validation-table = Table
|
|
validation-column = Column
|
|
validation-apply-set = Apply named validation set instead
|
|
validation-apply-set-placeholder = Leave empty to save the rules below
|
|
validation-error-title = Could not save validation
|
|
validation-success-title = Validation saved
|
|
validation-save = Save validation
|
|
validation-rule-name = Rule name
|
|
validation-description = Description
|
|
validation-save-rule = Save rule
|
|
validation-set-name = Set name
|
|
validation-reusable-rules = Reusable rules
|
|
validation-reusable-rules-hint = Comma-separated and applied in this order.
|
|
validation-save-set = Save set
|
|
validation-position-rules = Position rules
|
|
validation-position-rules-hint = One per line: position | constraint. Positions: 0, 0-3, 4+, or 1,3,5. Constraints: alphabetic, numeric, alphanumeric, exact=x, one-of=a,b, regex=…
|
|
validation-pattern-description = Pattern description
|
|
validation-min-length = Minimum length
|
|
validation-max-length = Maximum length
|
|
validation-warn-at = Warning threshold
|
|
validation-count-mode = Count mode
|
|
validation-count-chars = Characters
|
|
validation-count-bytes = Bytes
|
|
validation-count-display-width = Display width
|
|
validation-allowed-values = Allowed values
|
|
validation-display-mask = Display mask
|
|
validation-mask-input-char = Mask input character
|
|
validation-mask-template-char = Mask template character
|
|
validation-required = Required
|
|
validation-allow-empty = Allow empty
|
|
validation-case-insensitive = Case insensitive
|
|
validation-external = External validation
|
|
validation-lock = Lock configuration
|
|
validation-err-at-least-one-rule = Enter at least one reusable rule name.
|
|
validation-err-enter = Enter a { $label }.
|
|
validation-err-non-negative = { $label } must be a non-negative integer.
|
|
validation-err-min-max = Minimum cannot be greater than maximum.
|
|
validation-err-pattern-line = Pattern line { $line } must use `position | constraint`.
|
|
validation-err-range-start = Pattern range start cannot exceed its end.
|
|
validation-err-bad-position = Invalid pattern position '{ $value }'.
|
|
validation-err-bad-constraint = Unknown character constraint '{ $value }'.
|
|
validation-err-permission = Validation-management permission is required.
|