diff --git a/Dockerfile b/Dockerfile index 870de37f6d..ac4df82016 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,5 +34,5 @@ RUN npm install WORKDIR /directus/api -CMD ["sh", "-c", "node ./cli.js bootstrap; node ./dist/start.js;"] +CMD ["sh", "-c", "node ./cli.js bootstrap; node ./start.js;"] EXPOSE 8055/tcp diff --git a/api/package.json b/api/package.json index 3ceffbb4d4..2ab9aa3754 100644 --- a/api/package.json +++ b/api/package.json @@ -96,6 +96,7 @@ "cors": "^2.8.5", "csv-parser": "^3.0.0", "date-fns": "^2.22.1", + "deep-diff": "^1.0.2", "deep-map": "^2.0.0", "destroy": "^1.0.4", "dotenv": "^10.0.0", @@ -169,6 +170,7 @@ "@types/busboy": "0.2.4", "@types/cookie-parser": "1.4.2", "@types/cors": "2.8.12", + "@types/deep-diff": "1.0.1", "@types/destroy": "1.0.0", "@types/express": "4.17.13", "@types/express-pino-logger": "4.0.2", @@ -187,9 +189,9 @@ "@types/node": "15.12.2", "@types/node-cron": "2.0.4", "@types/nodemailer": "6.4.4", - "@types/object-hash": "2.2.0", + "@types/object-hash": "2.2.1", "@types/qs": "6.9.7", - "@types/sharp": "0.29.1", + "@types/sharp": "0.29.2", "@types/stream-json": "1.7.1", "@types/supertest": "2.0.11", "@types/uuid": "8.3.1", diff --git a/api/src/cli/commands/schema/apply.ts b/api/src/cli/commands/schema/apply.ts new file mode 100644 index 0000000000..ee53de58ee --- /dev/null +++ b/api/src/cli/commands/schema/apply.ts @@ -0,0 +1,136 @@ +import chalk from 'chalk'; +import { promises as fs } from 'fs'; +import inquirer from 'inquirer'; +import { load as loadYaml } from 'js-yaml'; +import path from 'path'; +import getDatabase from '../../../database'; +import logger from '../../../logger'; +import { Snapshot } from '../../../types'; +import { getSnapshot } from '../../../utils/get-snapshot'; +import { getSnapshotDiff } from '../../../utils/get-snapshot-diff'; +import { applySnapshot } from '../../../utils/apply-snapshot'; + +export async function apply(snapshotPath: string, options?: { yes: boolean }): Promise { + const filename = path.resolve(process.cwd(), snapshotPath); + + const database = getDatabase(); + + let snapshot: Snapshot; + + try { + const fileContents = await fs.readFile(filename, 'utf8'); + + if (filename.endsWith('.yaml') || filename.endsWith('.yml')) { + snapshot = (await loadYaml(fileContents)) as Snapshot; + } else { + snapshot = JSON.parse(fileContents) as Snapshot; + } + + const currentSnapshot = await getSnapshot({ database }); + const snapshotDiff = getSnapshotDiff(currentSnapshot, snapshot); + + if ( + snapshotDiff.collections.length === 0 && + snapshotDiff.fields.length === 0 && + snapshotDiff.relations.length === 0 + ) { + logger.info('No changes to apply.'); + database.destroy(); + process.exit(0); + } + + if (options?.yes !== true) { + let message = ''; + + if (snapshotDiff.collections.length > 0) { + message += chalk.black.underline.bold('Collections:'); + + for (const { collection, diff } of snapshotDiff.collections) { + if (diff[0]?.kind === 'E') { + message += `\n - ${chalk.blue('Update')} ${collection}`; + + for (const change of diff) { + if (change.kind === 'E') { + const path = change.path!.slice(1).join('.'); + message += `\n - Set ${path} to ${change.rhs}`; + } + } + } else if (diff[0]?.kind === 'D') { + message += `\n - ${chalk.red('Delete')} ${collection}`; + } else if (diff[0]?.kind === 'N') { + message += `\n - ${chalk.green('Create')} ${collection}`; + } + } + } + + if (snapshotDiff.fields.length > 0) { + message += '\n\n' + chalk.black.underline.bold('Fields:'); + + for (const { collection, field, diff } of snapshotDiff.fields) { + if (diff[0]?.kind === 'E') { + message += `\n - ${chalk.blue('Update')} ${collection}.${field}`; + + for (const change of diff) { + if (change.kind === 'E') { + const path = change.path!.slice(1).join('.'); + message += `\n - Set ${path} to ${change.rhs}`; + } + } + } else if (diff[0]?.kind === 'D') { + message += `\n - ${chalk.red('Delete')} ${collection}.${field}`; + } else if (diff[0]?.kind === 'N') { + message += `\n - ${chalk.green('Create')} ${collection}.${field}`; + } + } + } + + if (snapshotDiff.relations.length > 0) { + message += '\n\n' + chalk.black.underline.bold('Relations:'); + + for (const { collection, field, related_collection, diff } of snapshotDiff.relations) { + if (diff[0]?.kind === 'E') { + message += `\n - ${chalk.blue('Update')} ${collection}.${field} -> ${related_collection}`; + + for (const change of diff) { + if (change.kind === 'E') { + const path = change.path!.slice(1).join('.'); + message += `\n - Set ${path} to ${change.rhs}`; + } + } + } else if (diff[0]?.kind === 'D') { + message += `\n - ${chalk.red('Delete')} ${collection}.${field} -> ${related_collection}`; + } else if (diff[0]?.kind === 'N') { + message += `\n - ${chalk.green('Create')} ${collection}.${field} -> ${related_collection}`; + } + } + } + + const { proceed } = await inquirer.prompt([ + { + type: 'confirm', + name: 'proceed', + message: + 'The following changes will be applied:\n\n' + + chalk.black(message) + + '\n\n' + + 'Would you like to continue?', + }, + ]); + + if (proceed === false) { + process.exit(0); + } + } + + await applySnapshot(snapshot, { current: currentSnapshot, diff: snapshotDiff, database }); + + logger.info(`Snapshot applied successfully`); + + database.destroy(); + process.exit(0); + } catch (err: any) { + logger.error(err); + database.destroy(); + process.exit(1); + } +} diff --git a/api/src/cli/commands/schema/snapshot.ts b/api/src/cli/commands/schema/snapshot.ts new file mode 100644 index 0000000000..910da71679 --- /dev/null +++ b/api/src/cli/commands/schema/snapshot.ts @@ -0,0 +1,58 @@ +import getDatabase from '../../../database'; +import logger from '../../../logger'; +import { getSnapshot } from '../../../utils/get-snapshot'; +import { constants as fsConstants, promises as fs } from 'fs'; +import path from 'path'; +import inquirer from 'inquirer'; +import { dump as toYaml } from 'js-yaml'; + +export async function snapshot( + snapshotPath: string, + options?: { yes: boolean; format: 'json' | 'yaml' } +): Promise { + const filename = path.resolve(process.cwd(), snapshotPath); + + let snapshotExists: boolean; + + try { + await fs.access(filename, fsConstants.F_OK); + snapshotExists = true; + } catch { + snapshotExists = false; + } + + if (snapshotExists && options?.yes === false) { + const { overwrite } = await inquirer.prompt([ + { + type: 'confirm', + name: 'overwrite', + message: 'Snapshot already exists. Do you want to overwrite the file?', + }, + ]); + + if (overwrite === false) { + process.exit(0); + } + } + + const database = getDatabase(); + + const snapshot = await getSnapshot({ database }); + + try { + if (options?.format === 'yaml') { + await fs.writeFile(filename, toYaml(snapshot)); + } else { + await fs.writeFile(filename, JSON.stringify(snapshot)); + } + + logger.info(`Snapshot saved to ${filename}`); + + database.destroy(); + process.exit(0); + } catch (err: any) { + logger.error(err); + database.destroy(); + process.exit(1); + } +} diff --git a/api/src/cli/index.ts b/api/src/cli/index.ts index b09e1ec57a..f7539ed935 100644 --- a/api/src/cli/index.ts +++ b/api/src/cli/index.ts @@ -1,5 +1,5 @@ -import { Command } from 'commander'; -import start from '../start'; +import { Command, Option } from 'commander'; +import { startServer } from '../server'; import { emitAsyncSafe } from '../emitter'; import { initializeExtensions, registerExtensionHooks } from '../extensions'; import bootstrap from './commands/bootstrap'; @@ -10,6 +10,8 @@ import init from './commands/init'; import rolesCreate from './commands/roles/create'; import usersCreate from './commands/users/create'; import usersPasswd from './commands/users/passwd'; +import { snapshot } from './commands/schema/snapshot'; +import { apply } from './commands/schema/apply'; const pkg = require('../../package.json'); @@ -24,7 +26,7 @@ export async function createCli(): Promise { program.name('directus').usage('[command] [options]'); program.version(pkg.version, '-v, --version'); - program.command('start').description('Start the Directus API').action(start); + program.command('start').description('Start the Directus API').action(startServer); program.command('init').description('Create a new Directus Project').action(init); const dbCommand = program.command('database'); @@ -75,6 +77,23 @@ export async function createCli(): Promise { .option('--skipAdminInit', 'Skips the creation of the default Admin Role and User') .action(bootstrap); + const schemaCommands = program.command('schema'); + + schemaCommands + .command('snapshot') + .description('Create a new Schema Snapshot') + .option('-y, --yes', `Assume "yes" as answer to all prompts and run non-interactively`, false) + .addOption(new Option('--format ', 'JSON or YAML format').choices(['json', 'yaml']).default('yaml')) + .argument('', 'Path to snapshot file') + .action(snapshot); + + schemaCommands + .command('apply') + .description('Apply a snapshot file to the current database') + .option('-y, --yes', `Assume "yes" as answer to all prompts and run non-interactively`) + .argument('', 'Path to snapshot file') + .action(apply); + await emitAsyncSafe('cli.init.after', { program }); return program; diff --git a/api/src/database/migrations/20210910A-move-module-setup.ts b/api/src/database/migrations/20210910A-move-module-setup.ts new file mode 100644 index 0000000000..774430cbcc --- /dev/null +++ b/api/src/database/migrations/20210910A-move-module-setup.ts @@ -0,0 +1,55 @@ +import { Knex } from 'knex'; + +export async function up(knex: Knex): Promise { + await knex.schema.alterTable('directus_roles', (table) => { + table.dropColumn('module_list'); + }); + + await knex.schema.alterTable('directus_settings', (table) => { + table.json('module_bar').defaultTo( + JSON.stringify([ + { + type: 'module', + id: 'collections', + enabled: true, + }, + { + type: 'module', + id: 'users', + enabled: true, + }, + { + type: 'module', + id: 'files', + enabled: true, + }, + { + type: 'module', + id: 'insights', + enabled: false, + }, + { + type: 'module', + id: 'docs', + enabled: true, + }, + { + type: 'module', + id: 'settings', + enabled: true, + locked: true, + }, + ]) + ); + }); +} + +export async function down(knex: Knex): Promise { + await knex.schema.alterTable('directus_roles', (table) => { + table.json('module_list'); + }); + + await knex.schema.alterTable('directus_settings', (table) => { + table.dropColumn('module_bar'); + }); +} diff --git a/api/src/database/system-data/collections/collections.yaml b/api/src/database/system-data/collections/collections.yaml index 6ea3ddae42..80c9e85c9a 100644 --- a/api/src/database/system-data/collections/collections.yaml +++ b/api/src/database/system-data/collections/collections.yaml @@ -57,3 +57,4 @@ data: display_template: '{{ first_name }} {{ last_name }}' - collection: directus_webhooks note: $t:directus_collection.directus_webhooks + - collection: directus_migrations diff --git a/api/src/database/system-data/fields/migrations.yaml b/api/src/database/system-data/fields/migrations.yaml new file mode 100644 index 0000000000..5e1202374f --- /dev/null +++ b/api/src/database/system-data/fields/migrations.yaml @@ -0,0 +1,10 @@ +# directus_migrations isn't surfaced in the app, nor accessible from the API +table: directus_migrations + +fields: + - collection: directus_migrations + field: version + - collection: directus_migrations + field: name + - collection: directus_migrations + field: timestamp diff --git a/api/src/database/system-data/fields/presets.yaml b/api/src/database/system-data/fields/presets.yaml index cbfebfd09b..c454de2974 100644 --- a/api/src/database/system-data/fields/presets.yaml +++ b/api/src/database/system-data/fields/presets.yaml @@ -33,3 +33,5 @@ fields: - field: layout width: half + + - field: refresh_interval diff --git a/api/src/database/system-data/fields/roles.yaml b/api/src/database/system-data/fields/roles.yaml index 85880b0956..bb820c8be6 100644 --- a/api/src/database/system-data/fields/roles.yaml +++ b/api/src/database/system-data/fields/roles.yaml @@ -54,39 +54,6 @@ fields: - last_name width: full - - field: module_list - interface: list - options: - template: '{{ name }}' - addLabel: Add New Module... - fields: - - name: $t:field_options.directus_roles.fields.icon_name - field: icon - type: string - meta: - interface: select-icon - width: half - - name: $t:field_options.directus_roles.fields.name_name - field: name - type: string - meta: - interface: input - width: half - options: - iconRight: title - placeholder: - - name: $t:field_options.directus_roles.fields.link_name - field: link - type: string - meta: - interface: input - width: full - options: - iconRight: link - placeholder: $t:field_options.directus_roles.fields.link_placeholder - special: json - width: full - - field: collection_list interface: list options: diff --git a/api/src/database/system-data/fields/settings.yaml b/api/src/database/system-data/fields/settings.yaml index 442cf0df05..88b2cdd7a5 100644 --- a/api/src/database/system-data/fields/settings.yaml +++ b/api/src/database/system-data/fields/settings.yaml @@ -332,3 +332,7 @@ fields: type: _neq: 'raster' hidden: true + + - field: module_bar + interface: system-modules + special: json diff --git a/api/src/database/system-data/relations/relations.yaml b/api/src/database/system-data/relations/relations.yaml index 41d14cbb68..07ab2220bb 100644 --- a/api/src/database/system-data/relations/relations.yaml +++ b/api/src/database/system-data/relations/relations.yaml @@ -58,3 +58,21 @@ data: many_field: dashboard one_collection: directus_dashboards one_field: panels + - many_collection: directus_files + many_field: modified_by + one_collection: directus_users + - many_collection: directus_fields + many_field: group + one_collection: directus_fields + - many_collection: directus_permissions + many_field: role + one_collection: directus_roles + - many_collection: directus_revisions + many_field: parent + one_collection: directus_revisions + - many_collection: directus_sessions + many_field: user + one_collection: directus_users + - many_collection: directus_settings + many_field: storage_default_folder + one_collection: directus_files diff --git a/api/src/server.ts b/api/src/server.ts index ca90b90cfb..517f9fa105 100644 --- a/api/src/server.ts +++ b/api/src/server.ts @@ -7,11 +7,13 @@ import qs from 'qs'; import url from 'url'; import createApp from './app'; import getDatabase from './database'; -import { emitAsyncSafe } from './emitter'; import env from './env'; import logger from './logger'; +import emitter, { emitAsyncSafe } from './emitter'; +import checkForUpdate from 'update-check'; +import pkg from '../package.json'; -export default async function createServer(): Promise { +export async function createServer(): Promise { const server = http.createServer(await createApp()); server.on('request', function (req: http.IncomingMessage & Request, res: http.ServerResponse) { @@ -106,3 +108,35 @@ export default async function createServer(): Promise { } } } + +export async function startServer(): Promise { + const server = await createServer(); + + await emitter.emitAsync('server.start.before', { server }); + + const port = env.PORT; + + server + .listen(port, () => { + checkForUpdate(pkg) + .then((update) => { + if (update) { + logger.warn(`Update available: ${pkg.version} -> ${update.latest}`); + } + }) + .catch(() => { + // No need to log/warn here. The update message is only an informative nice-to-have + }); + + logger.info(`Server started at http://localhost:${port}`); + emitAsyncSafe('server.start'); + }) + .once('error', (err: any) => { + if (err?.code === 'EADDRINUSE') { + logger.error(`Port ${port} is already in use`); + process.exit(1); + } else { + throw err; + } + }); +} diff --git a/api/src/services/assets.ts b/api/src/services/assets.ts index ef38f019c0..d9ac903e1d 100644 --- a/api/src/services/assets.ts +++ b/api/src/services/assets.ts @@ -2,7 +2,7 @@ import { Range, StatResponse } from '@directus/drive'; import { Semaphore } from 'async-mutex'; import { Knex } from 'knex'; import { contentType } from 'mime-types'; -import ObjectHash from 'object-hash'; +import hash from 'object-hash'; import path from 'path'; import sharp from 'sharp'; import getDatabase from '../database'; @@ -124,5 +124,5 @@ export class AssetsService { const getAssetSuffix = (transforms: Transformation[]) => { if (Object.keys(transforms).length === 0) return ''; - return `__${ObjectHash.sha1(transforms)}`; + return `__${hash(transforms)}`; }; diff --git a/api/src/services/collections.ts b/api/src/services/collections.ts index 7bf1995a84..d1a208f5a3 100644 --- a/api/src/services/collections.ts +++ b/api/src/services/collections.ts @@ -16,7 +16,7 @@ import { Accountability, FieldMeta, RawField } from '@directus/shared/types'; export type RawCollection = { collection: string; fields?: RawField[]; - meta?: Partial; + meta?: Partial | null; }; export class CollectionsService { diff --git a/api/src/services/fields.ts b/api/src/services/fields.ts index 18b2f643c1..9bf21670b9 100644 --- a/api/src/services/fields.ts +++ b/api/src/services/fields.ts @@ -133,7 +133,11 @@ export class FieldsService { return data; }) as Field[]; - const result = [...columnsWithSystem, ...aliasFieldsAsField]; + const knownCollections = Object.keys(this.schema.collections); + + const result = [...columnsWithSystem, ...aliasFieldsAsField].filter((field) => + knownCollections.includes(field.collection) + ); // Filter the result so we only return the fields you have read access to if (this.accountability && this.accountability.admin !== true) { diff --git a/api/src/start.ts b/api/src/start.ts index 9079617f2d..14f398d03a 100644 --- a/api/src/start.ts +++ b/api/src/start.ts @@ -1,44 +1,3 @@ -import emitter, { emitAsyncSafe } from './emitter'; -import env from './env'; -import logger from './logger'; -import checkForUpdate from 'update-check'; -import pkg from '../package.json'; +import { startServer } from './server'; -// If this file is called directly using node, start the server -if (require.main === module) { - start(); -} - -export default async function start(): Promise { - const createServer = require('./server').default; - - const server = await createServer(); - - await emitter.emitAsync('server.start.before', { server }); - - const port = env.PORT; - - server - .listen(port, () => { - checkForUpdate(pkg) - .then((update) => { - if (update) { - logger.warn(`Update available: ${pkg.version} -> ${update.latest}`); - } - }) - .catch(() => { - // No need to log/warn here. The update message is only an informative nice-to-have - }); - - logger.info(`Server started at http://localhost:${port}`); - emitAsyncSafe('server.start'); - }) - .once('error', (err: any) => { - if (err?.code === 'EADDRINUSE') { - logger.error(`Port ${port} is already in use`); - process.exit(1); - } else { - throw err; - } - }); -} +startServer(); diff --git a/api/src/types/index.ts b/api/src/types/index.ts index d789825013..e1db29d509 100644 --- a/api/src/types/index.ts +++ b/api/src/types/index.ts @@ -15,4 +15,5 @@ export * from './revision'; export * from './schema'; export * from './services'; export * from './sessions'; +export * from './snapshot'; export * from './webhooks'; diff --git a/api/src/types/snapshot.ts b/api/src/types/snapshot.ts new file mode 100644 index 0000000000..6999d2b329 --- /dev/null +++ b/api/src/types/snapshot.ts @@ -0,0 +1,30 @@ +import { Collection } from './collection'; +import { Relation } from './relation'; +import { Field } from '@directus/shared/types'; +import { Diff } from 'deep-diff'; + +export type Snapshot = { + version: number; + directus: string; + collections: Collection[]; + fields: Field[]; + relations: Relation[]; +}; + +export type SnapshotDiff = { + collections: { + collection: string; + diff: Diff[]; + }[]; + fields: { + collection: string; + field: string; + diff: Diff[]; + }[]; + relations: { + collection: string; + field: string; + related_collection: string | null; + diff: Diff[]; + }[]; +}; diff --git a/api/src/utils/apply-snapshot.ts b/api/src/utils/apply-snapshot.ts new file mode 100644 index 0000000000..f482878505 --- /dev/null +++ b/api/src/utils/apply-snapshot.ts @@ -0,0 +1,112 @@ +import { Snapshot, SnapshotDiff, SchemaOverview, Relation } from '../types'; +import { getSnapshot } from './get-snapshot'; +import { getSnapshotDiff } from './get-snapshot-diff'; +import { Knex } from 'knex'; +import getDatabase from '../database'; +import { getSchema } from './get-schema'; +import { CollectionsService, FieldsService, RelationsService } from '../services'; +import { set } from 'lodash'; +import { DiffNew } from 'deep-diff'; +import { Field } from '@directus/shared/types'; + +export async function applySnapshot( + snapshot: Snapshot, + options?: { database?: Knex; schema?: SchemaOverview; current?: Snapshot; diff?: SnapshotDiff } +): Promise { + const database = options?.database ?? getDatabase(); + const schema = options?.schema ?? (await getSchema({ database })); + + const current = options?.current ?? (await getSnapshot({ database, schema })); + const snapshotDiff = options?.diff ?? getSnapshotDiff(current, snapshot); + + await database.transaction(async (trx) => { + const collectionsService = new CollectionsService({ knex: trx, schema }); + + for (const { collection, diff } of snapshotDiff.collections) { + if (diff?.[0].kind === 'D') { + await collectionsService.deleteOne(collection); + } + + if (diff?.[0].kind === 'N' && diff[0].rhs) { + // We'll nest the to-be-created fields in the same collection creation, to prevent + // creating a collection without a primary key + const fields = snapshotDiff.fields + .filter((fieldDiff) => fieldDiff.collection === collection) + .map((fieldDiff) => (fieldDiff.diff[0] as DiffNew).rhs); + + await collectionsService.createOne({ + ...diff[0].rhs, + fields, + }); + + // Now that the fields are in for this collection, we can strip them from the field + // edits + snapshotDiff.fields = snapshotDiff.fields.filter((fieldDiff) => fieldDiff.collection !== collection); + } + + if (diff?.[0].kind === 'E') { + const updates = diff.reduce((acc, edit) => { + if (edit.kind !== 'E') return acc; + set(acc, edit.path!, edit.rhs); + return acc; + }, {}); + + await collectionsService.updateOne(collection, updates); + } + } + + const fieldsService = new FieldsService({ knex: trx, schema: await getSchema({ database: trx }) }); + + for (const { collection, field, diff } of snapshotDiff.fields) { + if (diff?.[0].kind === 'N') { + await fieldsService.createField(collection, (diff[0] as DiffNew).rhs); + } + + if (diff?.[0].kind === 'E') { + const updates = diff.reduce((acc, edit) => { + if (edit.kind !== 'E') return acc; + set(acc, edit.path!, edit.rhs); + return acc; + }, {}); + + await fieldsService.updateField(collection, { + field, + type: 'unknown', // If the type was updated, the updates spread will overwrite it + ...updates, + }); + } + + if (diff?.[0].kind === 'D') { + await fieldsService.deleteField(collection, field); + + // Field deletion also cleans up the relationship. We should ignore any relationship + // changes attached to this now non-existing field + snapshotDiff.relations = snapshotDiff.relations.filter( + (relation) => (relation.collection === collection && relation.field === field) === false + ); + } + } + + const relationsService = new RelationsService({ knex: trx, schema: await getSchema({ database: trx }) }); + + for (const { collection, field, diff } of snapshotDiff.relations) { + if (diff?.[0].kind === 'N') { + await relationsService.createOne((diff[0] as DiffNew).rhs); + } + + if (diff?.[0].kind === 'E') { + const updates = diff.reduce((acc, edit) => { + if (edit.kind !== 'E') return acc; + set(acc, edit.path!, edit.rhs); + return acc; + }, {}); + + await relationsService.updateOne(collection, field, updates); + } + + if (diff?.[0].kind === 'D') { + await relationsService.deleteOne(collection, field); + } + } + }); +} diff --git a/api/src/utils/get-cache-key.ts b/api/src/utils/get-cache-key.ts index 9056fdeeed..99087518bd 100644 --- a/api/src/utils/get-cache-key.ts +++ b/api/src/utils/get-cache-key.ts @@ -14,7 +14,5 @@ export function getCacheKey(req: Request): string { }; const key = hash(info); - - // hash() only returns a buffer if the encoding is set to 'buffer' - return key as string; + return key; } diff --git a/api/src/utils/get-snapshot-diff.ts b/api/src/utils/get-snapshot-diff.ts new file mode 100644 index 0000000000..c790e84d3b --- /dev/null +++ b/api/src/utils/get-snapshot-diff.ts @@ -0,0 +1,116 @@ +import { Snapshot, SnapshotDiff } from '../types'; +import { diff } from 'deep-diff'; +import { orderBy } from 'lodash'; + +export function getSnapshotDiff(current: Snapshot, after: Snapshot): SnapshotDiff { + const diffedSnapshot: SnapshotDiff = { + collections: orderBy( + [ + ...current.collections.map((currentCollection) => { + const afterCollection = after.collections.find( + (afterCollection) => afterCollection.collection === currentCollection.collection + ); + + return { + collection: currentCollection.collection, + diff: diff(currentCollection, afterCollection), + }; + }), + ...after.collections + .filter((afterCollection) => { + const currentCollection = current.collections.find( + (currentCollection) => currentCollection.collection === afterCollection.collection + ); + + return !!currentCollection === false; + }) + .map((afterCollection) => ({ + collection: afterCollection.collection, + diff: diff(undefined, afterCollection), + })), + ].filter((obj) => Array.isArray(obj.diff)) as SnapshotDiff['collections'], + 'collection' + ), + fields: orderBy( + [ + ...current.fields.map((currentField) => { + const afterField = after.fields.find( + (afterField) => afterField.collection === currentField.collection && afterField.field === currentField.field + ); + + return { + collection: currentField.collection, + field: currentField.field, + diff: diff(currentField, afterField), + }; + }), + ...after.fields + .filter((afterField) => { + const currentField = current.fields.find( + (currentField) => + currentField.collection === afterField.collection && afterField.field === currentField.field + ); + + return !!currentField === false; + }) + .map((afterField) => ({ + collection: afterField.collection, + field: afterField.field, + diff: diff(undefined, afterField), + })), + ].filter((obj) => Array.isArray(obj.diff)) as SnapshotDiff['fields'], + ['collection'] + ), + relations: orderBy( + [ + ...current.relations.map((currentRelation) => { + const afterRelation = after.relations.find( + (afterRelation) => + afterRelation.collection === currentRelation.collection && afterRelation.field === currentRelation.field + ); + + return { + collection: currentRelation.collection, + field: currentRelation.field, + related_collection: currentRelation.related_collection, + diff: diff(currentRelation, afterRelation), + }; + }), + ...after.relations + .filter((afterRelation) => { + const currentRelation = current.relations.find( + (currentRelation) => + currentRelation.collection === afterRelation.collection && afterRelation.field === currentRelation.field + ); + + return !!currentRelation === false; + }) + .map((afterRelation) => ({ + collection: afterRelation.collection, + field: afterRelation.field, + related_collection: afterRelation.related_collection, + diff: diff(undefined, afterRelation), + })), + ].filter((obj) => Array.isArray(obj.diff)) as SnapshotDiff['relations'], + ['collection'] + ), + }; + + /** + * When you delete a collection, we don't have to individually drop all the fields/relations as well + */ + + const deletedCollections = diffedSnapshot.collections + .filter((collection) => collection.diff?.[0].kind === 'D') + .map(({ collection }) => collection); + + diffedSnapshot.fields = diffedSnapshot.fields.filter( + (field) => deletedCollections.includes(field.collection) === false + ); + + diffedSnapshot.relations = diffedSnapshot.relations.filter( + (relation) => deletedCollections.includes(relation.collection) === false + ); + + return diffedSnapshot; +} diff --git a/api/src/utils/get-snapshot.ts b/api/src/utils/get-snapshot.ts new file mode 100644 index 0000000000..928b521567 --- /dev/null +++ b/api/src/utils/get-snapshot.ts @@ -0,0 +1,34 @@ +import getDatabase from '../database'; +import { getSchema } from './get-schema'; +import { CollectionsService, FieldsService, RelationsService } from '../services'; +import { version } from '../../package.json'; +import { SchemaOverview, Snapshot } from '../types'; +import { Knex } from 'knex'; + +export async function getSnapshot(options?: { database?: Knex; schema?: SchemaOverview }): Promise { + const database = options?.database ?? getDatabase(); + const schema = options?.schema ?? (await getSchema({ database })); + + const collectionsService = new CollectionsService({ knex: database, schema }); + const fieldsService = new FieldsService({ knex: database, schema }); + const relationsService = new RelationsService({ knex: database, schema }); + + const [collections, fields, relations] = await Promise.all([ + collectionsService.readByQuery(), + fieldsService.readAll(), + relationsService.readAll(), + ]); + + return { + version: 1, + directus: version, + collections: collections.filter((item: any) => excludeSystem(item)), + fields: fields.filter((item: any) => excludeSystem(item)), + relations: relations.filter((item: any) => excludeSystem(item)), + }; +} + +function excludeSystem(item: { meta?: { system?: boolean } }) { + if (item?.meta?.system === true) return false; + return true; +} diff --git a/api/start.js b/api/start.js new file mode 100644 index 0000000000..ce966f9216 --- /dev/null +++ b/api/start.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require('./dist/start.js'); diff --git a/app/package.json b/app/package.json index 8acb19216d..469e4f7edb 100644 --- a/app/package.json +++ b/app/package.json @@ -76,7 +76,7 @@ "cropperjs": "1.5.12", "date-fns": "2.23.0", "diacritics": "1.3.0", - "dompurify": "2.3.1", + "dompurify": "2.3.2", "escape-string-regexp": "5.0.0", "front-matter": "4.0.2", "html-entities": "2.3.2", @@ -93,7 +93,7 @@ "pretty-ms": "7.0.1", "qrcode": "1.4.4", "rimraf": "3.0.2", - "sass": "1.39.2", + "sass": "1.41.0", "tinymce": "5.9.2", "typescript": "4.4.3", "vite": "2.5.7", diff --git a/app/src/components/v-checkbox/v-checkbox.vue b/app/src/components/v-checkbox/v-checkbox.vue index 573346efd8..395fef1240 100644 --- a/app/src/components/v-checkbox/v-checkbox.vue +++ b/app/src/components/v-checkbox/v-checkbox.vue @@ -175,7 +175,7 @@ body { width: 100%; height: var(--input-height); padding: 10px; // 14 - 4 (border) - border: 2px solid var(--border-normal); + border: var(--border-width) solid var(--border-normal); border-radius: var(--border-radius); transition: all var(--fast) var(--transition); diff --git a/app/src/components/v-chip/v-chip.vue b/app/src/components/v-chip/v-chip.vue index 011f2870e3..cdfd79cdc4 100644 --- a/app/src/components/v-chip/v-chip.vue +++ b/app/src/components/v-chip/v-chip.vue @@ -104,7 +104,7 @@ body { border: var(--border-width) solid var(--v-chip-background-color); border-radius: 16px; - &:hover { + &.clickable:hover { color: var(--v-chip-color-hover); background-color: var(--v-chip-background-color-hover); border-color: var(--v-chip-background-color-hover); @@ -120,7 +120,7 @@ body { background-color: var(--v-chip-background-color); border-color: var(--v-chip-background-color); - &:hover { + &.clickable:hover { color: var(--v-chip-color); background-color: var(--v-chip-background-color); border-color: var(--v-chip-background-color); diff --git a/app/src/components/v-divider/v-divider.vue b/app/src/components/v-divider/v-divider.vue index 37b872a87c..85df25d886 100644 --- a/app/src/components/v-divider/v-divider.vue +++ b/app/src/components/v-divider/v-divider.vue @@ -52,7 +52,7 @@ body { margin-top: 8px; border: solid; border-color: var(--v-divider-color); - border-width: 2px 0 0 0; + border-width: var(--border-width) 0 0 0; } span.wrapper { @@ -101,7 +101,7 @@ body { hr { width: 0px; max-width: 0px; - border-width: 0 2px 0 0; + border-width: 0 var(--border-width) 0 0; } span.wrapper { diff --git a/app/src/components/v-drawer/v-drawer.vue b/app/src/components/v-drawer/v-drawer.vue index c204f26165..92014f6865 100644 --- a/app/src/components/v-drawer/v-drawer.vue +++ b/app/src/components/v-drawer/v-drawer.vue @@ -34,9 +34,11 @@ diff --git a/app/src/components/v-field-select/v-field-select.vue b/app/src/components/v-field-select/v-field-select.vue index 4d81c5dfc9..fd3560ab4e 100644 --- a/app/src/components/v-field-select/v-field-select.vue +++ b/app/src/components/v-field-select/v-field-select.vue @@ -13,7 +13,7 @@ class="v-field-select" > diff --git a/app/src/components/v-form/form-field-label.vue b/app/src/components/v-form/form-field-label.vue index 423520d7cc..1523d1a2ef 100644 --- a/app/src/components/v-form/form-field-label.vue +++ b/app/src/components/v-form/form-field-label.vue @@ -6,11 +6,12 @@ :value="field.field" @update:model-value="$emit('toggle-batch', field)" /> - + {{ field.name }} + {{ badge }} @@ -53,6 +54,10 @@ export default defineComponent({ type: Boolean, default: false, }, + badge: { + type: String, + default: null, + }, }, emits: ['toggle-batch'], setup() { @@ -79,6 +84,11 @@ export default defineComponent({ margin-right: 4px; } + .v-chip { + margin: 0; + margin-left: 8px; + } + .required { --v-icon-color: var(--primary); @@ -88,7 +98,7 @@ export default defineComponent({ .ctx-arrow { position: absolute; top: -3px; - right: -20px; + right: -24px; color: var(--foreground-subdued); opacity: 0; transition: opacity var(--fast) var(--transition); @@ -118,7 +128,7 @@ export default defineComponent({ pointer-events: none; } - > span { + .field-name { margin-left: -16px; padding-left: 16px; } diff --git a/app/src/components/v-form/form-field.vue b/app/src/components/v-form/form-field.vue index 19833c6777..05cefcd4b2 100644 --- a/app/src/components/v-form/form-field.vue +++ b/app/src/components/v-form/form-field.vue @@ -11,6 +11,7 @@ :batch-active="batchActive" :edited="isEdited" :has-error="!!validationError" + :badge="badge" @toggle-batch="$emit('toggle-batch', $event)" /> @@ -111,6 +112,10 @@ export default defineComponent({ type: Boolean, default: false, }, + badge: { + type: String, + default: null, + }, }, emits: ['toggle-batch', 'unset', 'update:modelValue'], setup(props, { emit }) { diff --git a/app/src/components/v-form/v-form.vue b/app/src/components/v-form/v-form.vue index d1bd40ef2b..eb6929ee4a 100644 --- a/app/src/components/v-form/v-form.vue +++ b/app/src/components/v-form/v-form.vue @@ -52,6 +52,7 @@ :primary-key="primaryKey" :loading="loading" :validation-error="validationErrors.find((err) => err.field === field.field)" + :badge="badge" @update:model-value="setValue(field, $event)" @unset="unsetValue(field)" @toggle-batch="toggleBatchField(field)" @@ -124,6 +125,10 @@ export default defineComponent({ type: Number, default: null, }, + badge: { + type: String, + default: null, + }, }, emits: ['update:modelValue'], setup(props, { emit }) { diff --git a/app/src/components/v-input/v-input.vue b/app/src/components/v-input/v-input.vue index d5a9eff132..d63f49d70e 100644 --- a/app/src/components/v-input/v-input.vue +++ b/app/src/components/v-input/v-input.vue @@ -379,6 +379,7 @@ body { } .append { + flex-shrink: 0; margin-left: 8px; } } diff --git a/app/src/components/v-list/v-list-item.vue b/app/src/components/v-list/v-list-item.vue index 1e1ef3aad0..dcdbf90996 100644 --- a/app/src/components/v-list/v-list-item.vue +++ b/app/src/components/v-list/v-list-item.vue @@ -138,6 +138,8 @@ body { --v-list-item-min-height: 32px; --v-list-item-max-height: auto; --v-list-item-border-radius: var(--border-radius); + --v-list-item-border-color: var(--border-subdued); + --v-list-item-border-color-hover: var(--border-normal); --v-list-item-color: var(--v-list-color, var(--foreground-normal)); --v-list-item-color-hover: var(--v-list-color-hover, var(--foreground-normal)); --v-list-item-color-active: var(--v-list-color-active, var(--foreground-normal)); @@ -223,26 +225,27 @@ body { } &.block { + --v-list-item-border-color: var(--border-subdued); + --v-list-item-background-color: var(--background-subdued); + --v-list-item-background-color-hover: var(--background-subdued); + --v-icon-color: var(--foreground-subdued); + position: relative; display: flex; height: var(--input-height); margin: 0; padding: 8px; - background-color: var(--background-subdued); - border: 2px solid var(--border-subdued); + background-color: var(--v-list-item-background-color); + border: var(--border-width) solid var(--v-list-item-border-color); border-radius: var(--border-radius); transition: border-color var(--fast) var(--transition); - :slotted(.v-icon) { - color: var(--foreground-subdued); - - &:hover { - color: var(--foreground-normal); - } - } - :slotted(.drag-handle) { cursor: grab; + + &:hover { + color: var(--foreground-color); + } } :slotted(.drag-handle:active) { @@ -254,12 +257,12 @@ body { } &:hover { - background-color: var(--background-subdued); - border: 2px solid var(--border-normal); + background-color: var(--v-list-item-background-color-hover); + border: var(--border-width) solid var(--v-list-item-border-color-hover); } &.sortable-chosen { - border: 2px solid var(--primary) !important; + border: var(--border-width) solid var(--primary) !important; } & + & { diff --git a/app/src/components/v-progress/linear/v-progress-linear.vue b/app/src/components/v-progress/linear/v-progress-linear.vue index 361db542ae..0afc90d6b7 100644 --- a/app/src/components/v-progress/linear/v-progress-linear.vue +++ b/app/src/components/v-progress/linear/v-progress-linear.vue @@ -1,14 +1,18 @@ diff --git a/app/src/components/v-table/table-header/table-header.vue b/app/src/components/v-table/table-header/table-header.vue index 06a391826d..88dc0bc70b 100644 --- a/app/src/components/v-table/table-header/table-header.vue +++ b/app/src/components/v-table/table-header/table-header.vue @@ -250,7 +250,7 @@ export default defineComponent({ font-weight: 500; font-size: 14px; background-color: var(--v-table-background-color); - border-bottom: 2px solid var(--border-subdued); + border-bottom: var(--border-width) solid var(--border-subdued); &.select, &.manual { @@ -346,7 +346,7 @@ export default defineComponent({ top: 20%; left: 2px; display: block; - width: 2px; + width: var(--border-width); height: 60%; background-color: var(--border-subdued); content: ''; diff --git a/app/src/components/v-table/table-row/table-row.vue b/app/src/components/v-table/table-row/table-row.vue index 1b6b994c82..e9bba979bd 100644 --- a/app/src/components/v-table/table-row/table-row.vue +++ b/app/src/components/v-table/table-row/table-row.vue @@ -102,7 +102,7 @@ export default defineComponent({ white-space: nowrap; text-overflow: ellipsis; background-color: var(--v-table-background-color); - border-bottom: 2px solid var(--border-subdued); + border-bottom: var(--border-width) solid var(--border-subdued); &:last-child { padding: 0 12px 0 12px; diff --git a/app/src/interfaces/_system/system-modules/index.ts b/app/src/interfaces/_system/system-modules/index.ts new file mode 100644 index 0000000000..e0f9904bb3 --- /dev/null +++ b/app/src/interfaces/_system/system-modules/index.ts @@ -0,0 +1,12 @@ +import { defineInterface } from '@directus/shared/utils'; +import InterfaceSystemModules from './system-modules.vue'; + +export default defineInterface({ + id: 'system-modules', + name: '$t:module_bar', + icon: 'arrow_drop_down_circle', + component: InterfaceSystemModules, + types: ['json'], + options: [], + system: true, +}); diff --git a/app/src/interfaces/_system/system-modules/system-modules.vue b/app/src/interfaces/_system/system-modules/system-modules.vue new file mode 100644 index 0000000000..04dbb97801 --- /dev/null +++ b/app/src/interfaces/_system/system-modules/system-modules.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/app/src/interfaces/tags/tags.vue b/app/src/interfaces/tags/tags.vue index 94197e91ff..1375acad76 100644 --- a/app/src/interfaces/tags/tags.vue +++ b/app/src/interfaces/tags/tags.vue @@ -18,6 +18,7 @@ :disabled="disabled" small label + clickable @click="toggleTag(preset)" > {{ preset }} @@ -32,6 +33,7 @@ class="tag" small label + clickable @click="removeTag(val)" > {{ val }} diff --git a/app/src/interfaces/translations/language-select.vue b/app/src/interfaces/translations/language-select.vue new file mode 100644 index 0000000000..0dba1b62ac --- /dev/null +++ b/app/src/interfaces/translations/language-select.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/app/src/interfaces/translations/options.vue b/app/src/interfaces/translations/options.vue index 9cef1c23a6..a32048278f 100644 --- a/app/src/interfaces/translations/options.vue +++ b/app/src/interfaces/translations/options.vue @@ -4,29 +4,8 @@
-

{{ t('language_display_template') }}

- -
- -
-

{{ t('translations_display_template') }}

- +

{{ t('interfaces.translations.language_field') }}

+
@@ -36,7 +15,7 @@ import { useI18n } from 'vue-i18n'; import { Relation } from '@/types'; import { Field } from '@directus/shared/types'; import { defineComponent, PropType, computed } from 'vue'; -import { useCollectionsStore } from '@/stores/'; +import { useFieldsStore } from '@/stores/'; export default defineComponent({ props: { @@ -61,28 +40,16 @@ export default defineComponent({ setup(props, { emit }) { const { t } = useI18n(); - const collectionsStore = useCollectionsStore(); + const fieldsStore = useFieldsStore(); - const translationsTemplate = computed({ + const languageField = computed({ get() { - return props.value?.translationsTemplate; + return props.value?.languageField; }, set(newTemplate: string) { emit('input', { ...(props.value || {}), - translationsTemplate: newTemplate, - }); - }, - }); - - const languageTemplate = computed({ - get() { - return props.value?.languageTemplate; - }, - set(newTemplate: string) { - emit('input', { - ...(props.value || {}), - languageTemplate: newTemplate, + languageField: newTemplate, }); }, }); @@ -109,27 +76,18 @@ export default defineComponent({ ); }); - const translationsCollection = computed(() => translationsRelation.value?.collection ?? null); const languageCollection = computed(() => languageRelation.value?.related_collection ?? null); - const translationsCollectionInfo = computed(() => { - if (!translationsCollection.value) return null; - return collectionsStore.getCollection(translationsCollection.value); - }); - - const languageCollectionInfo = computed(() => { - if (!languageCollection.value) return null; - return collectionsStore.getCollection(languageCollection.value); + const languageCollectionFields = computed(() => { + if (!languageCollection.value) return []; + return fieldsStore.getFieldsForCollection(languageCollection.value); }); return { t, - languageTemplate, - translationsTemplate, - translationsCollection, - translationsCollectionInfo, + languageField, languageCollection, - languageCollectionInfo, + languageCollectionFields, }; }, }); diff --git a/app/src/interfaces/translations/translations.vue b/app/src/interfaces/translations/translations.vue index 1019e33e37..8c776a34ec 100644 --- a/app/src/interfaces/translations/translations.vue +++ b/app/src/interfaces/translations/translations.vue @@ -1,54 +1,66 @@ - diff --git a/app/src/lang/translations/ar-SA.yaml b/app/src/lang/translations/ar-SA.yaml index 56619753f4..7b8ec80593 100644 --- a/app/src/lang/translations/ar-SA.yaml +++ b/app/src/lang/translations/ar-SA.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: تعديل الحقل conditions: الشروط maps: الخرائط @@ -142,9 +122,7 @@ fields_for_role: 'عناصر الدور {role} يمكن أن {action}.' validation_for_role: 'الحقل {action} قواعد الدور {role} يجب أن يطيع.' presets_for_role: 'قيمة الحقل الافتراضية لدور {role}.' presentation_and_aliases: Presentation & Aliases -revision_post_update: إليك ما بدا عليه هذا العنصر بعد التحديث... -changes_made: هذه هي التغييرات المحددة التي تم إجراؤها... -no_relational_data: ولا يغيب عن البال أن هذا لا يشمل بيانات علاقية. +revision_post_update: بسم الله الرحمن الرحيم. hide_field_on_detail: مخفي في التفاصيل show_field_on_detail: أظهر الحقل في التفاصيل delete_field: حذف الحقل @@ -378,7 +356,6 @@ no_files_copy: لا توجد ملفات هنا. user_count: 'لا توجد عناصر | عنصر واحد | {count} العناصر' no_users_copy: لا يوجد مستخدمون في هذه التجزئة. webhooks_count: 'لاتوجد روابط ويب | رابط ويب | {count} روابط ويب' -no_webhooks_copy: لا يوجد أسئلة بعد. all_items: كافة العناصر any: أي csv: CSV @@ -769,10 +746,8 @@ field_options: directus_settings: security_divider_title: الأمان directus_activity: - login: تسجيل الدخول create: انشاء update: تحديث - delete: حذف directus_collections: track_activity_revisions: تتبع النشاط والتنقيحات only_track_activity: تتبع النشاط فقط diff --git a/app/src/lang/translations/bg-BG.yaml b/app/src/lang/translations/bg-BG.yaml index cfdc0fcd3d..308605ad27 100644 --- a/app/src/lang/translations/bg-BG.yaml +++ b/app/src/lang/translations/bg-BG.yaml @@ -1,24 +1,6 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' +draft: Чернова +archived: Архивиран edit_field: Редактиране на поле conditions: Условия maps: Географски карти @@ -142,9 +124,6 @@ fields_for_role: 'Полета, които ролята "{role}" има позв validation_for_role: 'Правила, които ролята "{role}" трябва да спазва, при {action} на полета.' presets_for_role: 'Стойности за полета по подразбиране, за ролята "{role}".' presentation_and_aliases: Презентационни и псевдоними -revision_post_update: Ето как ще изглежда записът след промяната... -changes_made: Направените промени са следните... -no_relational_data: Имайте в предвид, че това не включва данните от релационните записи. hide_field_on_detail: Скриване в детайлен изглед show_field_on_detail: Показване в детайлния изглед delete_field: Изтриване на поле @@ -382,7 +361,6 @@ no_files_copy: Тук не са открити файлове. user_count: 'Няма потребители | Един потребител | {count} потребителя' no_users_copy: Все още няма потребители в тази роля. webhooks_count: "Няма уеб-куки | 1 уеб-кука | {count} уеб-куки\n" -no_webhooks_copy: Все още няма уеб-куки. all_items: Всички записи any: Който и да е csv: CSV @@ -868,7 +846,7 @@ field_options: auth_password_policy: none_text: Без - не се препоръчва weak_text: Слаба - минимум от 8 символа - strong_text: Силна - главни, малки, числа и специални символи + strong_text: Силна - главни, малки, числа и специални символи storage_asset_presets: fit: contain_text: Напасване (запазване на съотношението) diff --git a/app/src/lang/translations/ca-ES.yaml b/app/src/lang/translations/ca-ES.yaml index 64554efc5d..e6d807a34e 100644 --- a/app/src/lang/translations/ca-ES.yaml +++ b/app/src/lang/translations/ca-ES.yaml @@ -1,24 +1,6 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' +draft: Esborrany +archived: Arxivat edit_field: Edita el camp conditions: Condicions maps: Mapes @@ -141,9 +123,6 @@ fields_for_role: 'Camps del {role} poden {action}.' validation_for_role: 'El camp {action} determina que el rol {role} ha de obeir.' presets_for_role: 'Valor de camp predeterminat per al rol {role}.' presentation_and_aliases: Presentació i àlies -revision_post_update: Així és com queda l'element després d'actualitzar... -changes_made: Aquests són els canvis específics que s'han fet... -no_relational_data: Tingues present que això no inclou dades relacionals. hide_field_on_detail: Amaga el camp en el detall show_field_on_detail: Mostra el camp en el detall delete_field: Elimina el camp @@ -381,7 +360,6 @@ no_files_copy: No hi ha fitxers aquí. user_count: 'No hi ha usuaris | Un usuari | {count} usuaris' no_users_copy: Encara no hi ha usuaris en aquest rol. webhooks_count: 'No hi ha webhooks | Un webhook | {count} webhooks' -no_webhooks_copy: Encara no hi ha webhooks. all_items: Tots els elements any: Qualsevol csv: CSV @@ -620,7 +598,7 @@ wysiwyg_options: superscript: Superíndex codeblock: Codi blockquote: Bloc de cita - bullist: Llista amb vinyetes + bullist: Llista amb vinyetes numlist: Llista ordenada hr: Regle horitzontal link: Afegeix / Edita l'enllaç @@ -854,7 +832,6 @@ field_options: files_divider_title: Fitxers i miniatures overrides_divider_title: Substitucións de l'aplicació directus_activity: - login: Entra create: Crear update: Actualitzar delete: Elimina diff --git a/app/src/lang/translations/cs-CZ.yaml b/app/src/lang/translations/cs-CZ.yaml index 58487a4a65..eca5950944 100644 --- a/app/src/lang/translations/cs-CZ.yaml +++ b/app/src/lang/translations/cs-CZ.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Upravit pole conditions: Podmínky maps: Mapy @@ -352,10 +332,8 @@ fields: status: Stav field_options: directus_activity: - login: Login create: Vytořit update: Úpravy - delete: Smazat directus_collections: language: Jazyk archive_divider: Archivovat diff --git a/app/src/lang/translations/da-DK.yaml b/app/src/lang/translations/da-DK.yaml index dda0425e17..a3fabc91fa 100644 --- a/app/src/lang/translations/da-DK.yaml +++ b/app/src/lang/translations/da-DK.yaml @@ -1,35 +1,20 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Rediger Felt conditions: Betingelser item_revision: Genstandsrevision duplicate_field: Dupliker Felt half_width: Halv Bredde full_width: Fuld Bredde +group: Gruppe +and: Og +or: Eller fill_width: Fuld Bredde field_name_translations: Oversættelse af feltnavn enter_password_to_enable_tfa: Indtast dit kodeord for at aktivere To-faktor-godkendelse (2FA) add_field: Tilføj Felt role_name: Rollenavn +exclusive: Eksklusiv +children: Underordnede db_only_click_to_configure: 'Kun i databasen: Klik for at konfigurere ' show_archived_items: Vis arkiverede element edited: Værdi Ændret @@ -41,7 +26,9 @@ create_role: Opret Rolle create_user: Opret bruger create_webhook: Opret Webhook invite_users: Inviter brugere +email_examples: "admin{'@'}example.com, bruger{'@'}example.com..." invite: Inviter +email_already_invited: Email "{email}" er allerede blevet inviteret emails: E-mail connection_excellent: Udmærket forbindelse connection_good: God forbindelse @@ -61,6 +48,7 @@ delete_bookmark_copy: >- logoutReason: SIGN_OUT: Logget ud SESSION_EXPIRED: Sessionen er udløbet +public_label: Offentlig public_description: Kontrollerer, hvilke API-data der er tilgængelige uden godkendelse. not_allowed: Ikke tilladt directus_version: Directus Version @@ -99,9 +87,16 @@ validationError: null: Værdien skal være null nnull: Værdien kan ikke være null required: Værdi er påkrævet + unique: Værdien skal være unik + regex: Værdien har ikke det korrekte format all_access: Alle Adgang no_access: Ingen Adgang use_custom: Brug Brugerdefineret +nullable: Nullbar +allow_null_value: Tillad NULL værdi +allow_multiple: Tillad Flere +allow_multiple_to_be_open: Tillad åbning af flere +enter_value_to_replace_nulls: Indtast venligst en ny værdi for at erstatte eventuelle NULL'er, der er i øjeblikket i dette felt. field_standard: Standard field_presentation: Presentation & Aliases field_m2o: M2O Forhold @@ -117,9 +112,6 @@ fields_for_role: 'Felter {role} Rollen kan {action}.' validation_for_role: 'Felt {action} reglerne for {role} Rollen skal adlyde.' presets_for_role: 'Feltets værdi er standard for {role} Rollen.' presentation_and_aliases: Presentation & Aliases -revision_post_update: Her er hvad dette element så ud som, efter opdateringen... -changes_made: Disse er de specifikke ændringer, der blev lavet... -no_relational_data: Husk, at dette ikke omfatter relationelle data. hide_field_on_detail: Skjul felt på detalje show_field_on_detail: Vis felt på detalje delete_field: Slet Felt @@ -252,6 +244,7 @@ operators: ncontains: Indeholder ikke empty: Er tom loading: Indlæser... +value_unique: Værdien skal være unik no_results: Ingen resultater role: Rolle create: Opret @@ -345,10 +338,8 @@ fields: status: Status field_options: directus_activity: - login: Log ind create: Opret update: Opdater - delete: Slet directus_collections: language: Sprog archive_divider: Arkiver diff --git a/app/src/lang/translations/de-DE.yaml b/app/src/lang/translations/de-DE.yaml index 05d091c1c7..e971e68742 100644 --- a/app/src/lang/translations/de-DE.yaml +++ b/app/src/lang/translations/de-DE.yaml @@ -19,6 +19,9 @@ #'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', #'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', #'Proxy', 'Intl' +published: Veröffentlicht +draft: Entwurf +archived: Archiviert edit_field: Feld bearbeiten conditions: Bedingungen maps: Karten @@ -142,9 +145,6 @@ fields_for_role: 'Felder die von der {role} Rolle {action} werden können.' validation_for_role: 'Feld {action} Regeln welche durch die {role} Rolle befolgt werden muss.' presets_for_role: 'Feld Voreinstellungen für die {role} Rolle.' presentation_and_aliases: Darstellung & Aliasse -revision_post_update: Hier siehst du, wie das Element nach dem Update aussah... -changes_made: Dies sind die spezifischen Änderungen, die vorgenommen wurden... -no_relational_data: Beachten Sie, dass dies keine relationalen Daten enthält. hide_field_on_detail: In Detailansicht ausblenden show_field_on_detail: In Detailansicht einblenden delete_field: Feld löschen @@ -382,7 +382,6 @@ no_files_copy: Keine Dateien vorhanden. user_count: 'Keine Benutzer | Ein Benutzer | {count} Benutzer' no_users_copy: Es gibt noch keine Benutzer in dieser Rolle. webhooks_count: 'Keine Webhooks | Ein Webhook | {count} Webhooks' -no_webhooks_copy: Es gibt noch keine Webhooks. all_items: Alle Elemente any: Irgendein csv: CSV @@ -934,6 +933,7 @@ field_options: group_placeholder: Diese Gruppe benennen... type_name: Typ choices_always: Immer geöffnet + choices_start_open: Geöffnet starten choices_start_collapsed: Eingeklappt starten collections_name: Sammlungen collections_addLabel: Sammlung hinzufügen... @@ -957,6 +957,7 @@ field_options: actions_create: Erstellen actions_update: Aktualisieren actions_delete: Löschen + actions_login: Login no_fields_in_collection: 'Es gibt noch keine Felder in "{collection}"' do_nothing: Keine Aktion generate_and_save_uuid: UUID generieren und speichern @@ -1043,6 +1044,11 @@ interfaces: name: Akkordeon description: Felder oder Gruppen als Akkordeonabschnitte anzeigen start: Start + all_closed: Alle geschlossen + first_opened: Zuerst geöffnet + all_opened: Alle geöffnet + accordion_mode: Akkordeon-Modus + max_one_section_open: Max. einen Abschnitt öffnen presentation-links: presentation-links: Button-Links links: Links @@ -1058,6 +1064,13 @@ interfaces: allow_other: Andere erlauben show_more: 'Zeige {count} mehr' items_shown: Angezeigte Elemente + select-multiple-checkbox-tree: + name: Kontrollkästchen (Baum) + description: Zwischen mehreren Optionen auswählen über Kontrollkästchen + value_combining: Kombination Werte + value_combining_note: Legt fest, welcher Werte gespeichert wird, wenn verschachtelte Selektionen gemacht werden. + show_all: Alle anzeigen + show_selected: Auswahl anzeigen input-code: code: Code description: Code-Snippets schreiben oder teilen @@ -1152,7 +1165,21 @@ interfaces: imageToken: Bild-Token imageToken_label: Welcher (statischer) Token, der an Bildquellen angehängt werden soll map: + map: Karte + description: Ort auf der Karte wählen zoom: Zoom + geometry_type: Geometrie-Typ + geometry_format: Geometrie-Format + default_view: Standardansicht + invalid_options: Ungültige Optionen + invalid_format: Ungültiges Format ({format}) + unexpected_geometry: Erwartete {expected}, erhielt {got}. + fit_bounds: Ansicht an Daten anpassen + native: Nativ + geojson: GeoJSON + lnglat: Längengrad, Breitengrad + wkt: WKT + wkb: WKB presentation-notice: notice: Anmerkung description: Kurze Anmerkung anzeigen @@ -1163,6 +1190,10 @@ interfaces: no_collection: Die Sammlung konnte nicht gefunden werden system-folder: folder: Ordner + description: Ordner auswählen + field_hint: Neu hochgeladene Dateien in den ausgewählten Ordner verschieben. Hat keine Auswirkung auf selektierte Dateien. + root_name: Root-Ordner für Dateien + system_default: System-Standardeinstellungen select-radio: radio-buttons: Radio Buttons description: Eine von mehreren Optionen auswählen @@ -1240,6 +1271,17 @@ interfaces: value_path: Wertpfad trigger: Trigger rate: Rate + group-raw: + name: Rohgruppe + description: Felder so anzeigen wie sie sind + group-detail: + name: Detailgruppe + description: Felder als einklappbaren Abschnitt anzeigen + show_header: Kopfzeile anzeigen + header_icon: Icon Kopfzeile + header_color: Farbe Kopfzeile + start_open: Geöffnet starten + start_closed: Geschlossen starten displays: boolean: boolean: Boolean @@ -1347,4 +1389,16 @@ layouts: start_date_field: Datumsfeld Start end_date_field: Datumsfeld Ende map: + map: Karte + basemap: Basemap + layers: Ebenen + edit_custom_layers: Ebenen bearbeiten + cluster_options: Clustering-Optionen + cluster: Clustering aktivieren + cluster_radius: Cluster-Radius + cluster_minpoints: Minimale Punkte Clustering + cluster_maxzoom: Maximaler Zoom für Clustering field: Dimensionen + invalid_geometry: Ungültige Geometrie + auto_location_filter: Daten immer filtern, um Grenzen anzuzeigen + search_this_area: Diesen Bereich durchsuchen diff --git a/app/src/lang/translations/el-GR.yaml b/app/src/lang/translations/el-GR.yaml index 93aae12c6c..5a5a2342c2 100644 --- a/app/src/lang/translations/el-GR.yaml +++ b/app/src/lang/translations/el-GR.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Επεξεργασία Πεδίου item_revision: Αναθεώρηση Αντικειμένου duplicate_field: Αντίγραφο Πεδίου @@ -229,7 +209,6 @@ field_options: directus_activity: create: Δημιουργία update: Ενημέρωση - delete: Διαγραφή directus_collections: archive_divider: Αρχειοθέτηση directus_roles: diff --git a/app/src/lang/translations/en-US.yaml b/app/src/lang/translations/en-US.yaml index 5d9c9c05c9..85a14bc68f 100644 --- a/app/src/lang/translations/en-US.yaml +++ b/app/src/lang/translations/en-US.yaml @@ -23,10 +23,13 @@ published: Published draft: Draft archived: Archived +module_bar: Module Bar +tile_size: Tile Size edit_field: Edit Field conditions: Conditions maps: Maps item_revision: Item Revision +enter_a_name: Enter a Name... duplicate_field: Duplicate Field half_width: Half Width full_width: Full Width @@ -58,6 +61,7 @@ delete_panel: Delete Panel create_webhook: Create Webhook invite_users: Invite Users email_examples: "admin{'@'}example.com, user{'@'}example.com..." +url_example: "https://example.com" invite: Invite email_already_invited: Email "{email}" has already been invited emails: Emails @@ -236,6 +240,8 @@ add_m2m_to_collection: 'Add Many-to-Many to "{collection}"' choose_a_type: Choose a Type... determined_by_relationship: Determined by Relationship add_note: Add a helpful note for users... +add_link: Add Link +custom_link: Custom Link default_value: Default Value standard_field: Standard Field single_file: Single File @@ -1343,6 +1349,8 @@ interfaces: translations: display_template: Display Template no_collection: No Collection + toggle_split_view: Toggle Split View + language_field: Language Field list-o2m-tree-view: description: Tree view for nested recursive one-to-many items recursive_only: The tree view interface only works for recursive relationships. diff --git a/app/src/lang/translations/es-419.yaml b/app/src/lang/translations/es-419.yaml index abe2f3062e..3cc5314c46 100644 --- a/app/src/lang/translations/es-419.yaml +++ b/app/src/lang/translations/es-419.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Editar Campo conditions: Condiciones item_revision: Revisión de Elemento @@ -136,9 +116,6 @@ fields_for_role: 'Campos que el Rol {role} puede {action}.' validation_for_role: 'Reglas de campo al {action} que el Rol {role} tiene que obedecer.' presets_for_role: 'Valor del campo por defecto para el rol {role}.' presentation_and_aliases: Presentación y Alias -revision_post_update: Así es como se vería este artículo después de la actualización... -changes_made: Estos son los cambios específicos que se hicieron... -no_relational_data: Ten en cuenta que esto no incluye datos relacionales. hide_field_on_detail: Oculto en Detalle show_field_on_detail: Mostrar en Detalle delete_field: Borrar Campo @@ -375,7 +352,6 @@ no_files_copy: Aquí no hay archivos. user_count: 'Sin Usuarios | Un Usuario | {count} Usuarios' no_users_copy: No hay usuarios con este Rol aún. webhooks_count: 'Sin Webhooks | Un Webhook | {count} Webhooks' -no_webhooks_copy: Aún no hay Webhooks. all_items: Todos los Elementos csv: CSV no_collections: Sin Colecciones @@ -815,6 +791,10 @@ fields: name: Nombre status: Estatus field_options: + directus_activity: + create: Crear + update: Actualización + delete: Eliminar directus_collections: track_activity_revisions: Rastrear actividad y revisiones only_track_activity: Sólo seguimiento de actividad @@ -824,11 +804,6 @@ field_options: language: Idioma archive_divider: Archivar divider: Ordenar - directus_activity: - login: Iniciar Sesión - create: Crear - update: Actualización - delete: Eliminar directus_roles: fields: icon_name: Ícono diff --git a/app/src/lang/translations/es-CL.yaml b/app/src/lang/translations/es-CL.yaml index 7e017d8117..d375d639fc 100644 --- a/app/src/lang/translations/es-CL.yaml +++ b/app/src/lang/translations/es-CL.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Editar Campo conditions: Condiciones item_revision: Revisión de Elemento @@ -136,9 +116,6 @@ fields_for_role: 'Campos que el Rol {role} puede {action}.' validation_for_role: 'Reglas de campo al {action} que el Rol {role} tiene que obedecer.' presets_for_role: 'Valores por defecto del Campo para el Rol {role}.' presentation_and_aliases: Presentación y Alias -revision_post_update: Así se vería el elemento después de la actualización... -changes_made: Estos son los cambios específicos que se hicieron... -no_relational_data: Tener en cuenta que esto no incluye datos relacionales. hide_field_on_detail: Ocultar campo en el Detalle show_field_on_detail: Mostrar campo en el Detalle delete_field: Eliminar Campo @@ -375,7 +352,6 @@ no_files_copy: Aquí no hay archivos. user_count: 'Sin Usuarios | Un Usuario | {count} Usuarios' no_users_copy: No hay usuarios con este Rol aún. webhooks_count: 'Sin Webhooks | Un Webhook | {count} Webhooks' -no_webhooks_copy: Aún no hay Webhooks. all_items: Todos los Elementos csv: CSV no_collections: Sin Colecciones @@ -816,7 +792,6 @@ fields: status: Estado field_options: directus_activity: - login: Iniciar sesión create: Crear update: Actualizar delete: Eliminar diff --git a/app/src/lang/translations/es-ES.yaml b/app/src/lang/translations/es-ES.yaml index c96ce53744..259a1c24c5 100644 --- a/app/src/lang/translations/es-ES.yaml +++ b/app/src/lang/translations/es-ES.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Editar Campo conditions: Condiciones item_revision: Revisión de Elemento @@ -135,9 +115,6 @@ fields_for_role: 'Campos que el Rol {role} puede {action}.' validation_for_role: 'Reglas de campo al {action} que el Rol {role} tiene que obedecer.' presets_for_role: 'Valores por defecto del Campo para el Rol {role}.' presentation_and_aliases: Presentación y Alias -revision_post_update: Así se vería el elemento después de la actualización... -changes_made: Estos son los cambios específicos que se hicieron... -no_relational_data: Tener en cuenta que esto no incluye datos relacionales. hide_field_on_detail: Ocultar campo en el Detalle show_field_on_detail: Mostrar campo en el Detalle delete_field: Eliminar Campo @@ -374,7 +351,6 @@ no_files_copy: Aquí no hay archivos. user_count: 'Sin Usuarios | Un Usuario | {count} Usuarios' no_users_copy: No hay usuarios con este Rol aún. webhooks_count: 'Sin Webhooks | Un Webhook | {count} Webhooks' -no_webhooks_copy: Aún no hay Webhooks. all_items: Todos los Elementos csv: CSV no_collections: Sin Colecciones @@ -815,7 +791,6 @@ fields: status: Estado field_options: directus_activity: - login: Iniciar Sesión create: Crear update: Actualización delete: Eliminar diff --git a/app/src/lang/translations/et-EE.yaml b/app/src/lang/translations/et-EE.yaml index a8f89315c8..e5a40bf0f9 100644 --- a/app/src/lang/translations/et-EE.yaml +++ b/app/src/lang/translations/et-EE.yaml @@ -1,24 +1,5 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' +archived: Arhiveeritud edit_field: Muuda välja item_revision: Kirje parandamine duplicate_field: Korduv väli @@ -125,9 +106,6 @@ fields_for_role: '{role} rollil lubatud väljade {action}.' validation_for_role: 'Tegevuse {action} jaoks on vajalik roll {role}.' presets_for_role: 'Välja vaikeväärtuseks on {role} roll.' presentation_and_aliases: Kujundus ja aliased -revision_post_update: Sellisena paistis see objekt pärast uuendamist... -changes_made: Tehti sellised parandused... -no_relational_data: Pea meeles, et see ei sisalda seotud andmeid. hide_field_on_detail: Peida väli detailvaates show_field_on_detail: Näita detailvaates delete_field: Kustuta väli @@ -363,7 +341,6 @@ no_files_copy: Faile pole. user_count: 'Kasutajaid pole | Üks kasutaja | {count} kasutajat' no_users_copy: Selles rollis pole ühtegi kasutajat. webhooks_count: 'Webhooke ei leitud | Üks webhook | {count} webhooki' -no_webhooks_copy: Webhooke ei leitud. all_items: Kõik kirjed csv: CSV no_collections: Andmekogusid pole @@ -662,7 +639,7 @@ page_help_docs_global: >- page_help_files_collection: >- **Failikogu* - Näitab kõiki faile ja pilte selles projektis. Muuta saab vaateid, filtreid jm ning lisada järjehoidjaid page_help_files_item: >- - **Faili detailid* - Vorm, milles saab muuta faili metaandmeid, ligipääse jm + **Faili detailid* - Vorm, milles saab muuta faili metaandmeid, ligipääse jm page_help_settings_project: "**Projekti seaded** - Sinu projekti üldised seaded" page_help_settings_datamodel_collections: >- **Andmekogud** - Näitab kõiki andmekogusid (sh süsteemseid) @@ -798,10 +775,8 @@ fields: status: Staatus field_options: directus_activity: - login: Logi sisse create: Loo update: Uuenda - delete: Kustuta directus_collections: track_activity_revisions: Salvesta muudatuste statistika only_track_activity: Jälgi ainult aktiivsust diff --git a/app/src/lang/translations/fi-FI.yaml b/app/src/lang/translations/fi-FI.yaml index fa6bc294be..08e22b8877 100644 --- a/app/src/lang/translations/fi-FI.yaml +++ b/app/src/lang/translations/fi-FI.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Muokkaa kenttää item_revision: Kohteen versio duplicate_field: Monista kenttä @@ -125,9 +105,6 @@ fields_for_role: 'Kentät joita {role} rooli voi {action}.' validation_for_role: 'Kentän sääntöjä {action} roolille {role} on noudatettava.' presets_for_role: 'Kentän oletusarvot roolille {role}.' presentation_and_aliases: Esitystapa & aliakset -revision_post_update: Tässä on miltä tämä kohde näytti päivityksen jälkeen... -changes_made: Nämä ovat mutokset jotka tarkalleenottaen tehtiin... -no_relational_data: Muista, että tämä ei sisällä relaatiotietoja. hide_field_on_detail: Piilota kenttä yksityiskohdissa show_field_on_detail: Näytä kenttä yksityiskohdissa delete_field: Poista kenttä @@ -363,7 +340,6 @@ no_files_copy: Täällä ei ole tiedostoja. user_count: 'Ei käyttäjiä | Yksi käyttäjä | {count} käyttäjää' no_users_copy: Tässä roolissa ei ole vielä käyttäjiä. webhooks_count: 'Ei webhookkeja | Yksi webhookki | {count} webhookkia' -no_webhooks_copy: Webhookkeja ei ole vielä. all_items: Kaikki kohteet csv: CSV no_collections: Ei kokoelmia @@ -795,10 +771,8 @@ fields: status: Tila field_options: directus_activity: - login: Kirjaudu sisään create: Luo update: Päivitä - delete: Poista directus_collections: track_activity_revisions: Seuraa tapahtumia ja versioita only_track_activity: Seuraa vain tapahtumia diff --git a/app/src/lang/translations/fr-FR.yaml b/app/src/lang/translations/fr-FR.yaml index 986c2f1420..093360d027 100644 --- a/app/src/lang/translations/fr-FR.yaml +++ b/app/src/lang/translations/fr-FR.yaml @@ -19,6 +19,9 @@ #'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', #'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', #'Proxy', 'Intl' +published: Publié +draft: Brouillon +archived: Archivé edit_field: Modifier le champ conditions: Conditions maps: Cartes @@ -38,6 +41,7 @@ role_name: Nom de rôle branch: Branche leaf: Feuille indeterminate: Indéterminé +edit_collection: Modifier la collection exclusive: Exclusif children: Les enfants db_only_click_to_configure: 'Base de données uniquement: cliquez pour configurer ' @@ -141,9 +145,9 @@ fields_for_role: 'Champs dont l''action « {action} » peut être effectué par validation_for_role: 'Règles pour {action} le champ que le rôle {role} doit suivre.' presets_for_role: 'Valeur par défaut du champ pour le rôle {role}.' presentation_and_aliases: Présentation & Alias -revision_post_update: Voici à quoi ressemblait cet élément après la mise à jour... -changes_made: Voici les changements spécifiques qui ont été apportés... -no_relational_data: Gardez à l'esprit que cela n'inclut pas les données relationnelles. +revision_post_update: Voici à quoi ressemblait cet élément après la mise à jour. +changes_made: Vous trouverez ci-dessous les modifications spécifiques apportées à cette révision. +no_relational_data: Gardez à l'esprit que les données relationnelles ne sont pas incluses ici. hide_field_on_detail: Masquer le champ dans le détail show_field_on_detail: Afficher le champ dans le détail delete_field: Supprimer le champ @@ -381,7 +385,7 @@ no_files_copy: Il n'y a aucun fichier ici. user_count: 'Aucun utilisateur | Un seul utilisateur | {count} utilisateurs' no_users_copy: Il n'y a pas encore d'utilisateurs avec ce rôle. webhooks_count: 'Aucun Webhooks | 1 Webhook | {count} Webhooks' -no_webhooks_copy: Il n'y a pas encore de webhooks. +no_webhooks_copy: Aucun webhooks n'a encore été configuré. Commencez par en créer un ci-dessous. all_items: Tous les éléments any: N'importe quel csv: CSV @@ -723,11 +727,28 @@ no_layout_collection_selected_yet: Aucune mise en page/collection sélectionnée batch_delete_confirm: >- Aucun élément n’a été sélectionné | Êtes-vous sûr de bien vouloir supprimer cet élément ? Vous ne pourrez pas revenir en arrière ! | Êtes-vous sûr de bien vouloir supprimer ces {count} éléments ? Vous ne pourrez pas revenir en arrière ! cancel: Annuler +no_upscale: Ne pas agrandir les images collection: Collection collections: Collections singleton: Singleton singleton_label: Est un objet unique system_fields_locked: Les champs système sont verrouillés et ne peuvent pas être modifiés +directus_collection: + directus_activity: Journaux de responsabilité pour tous les événements + directus_collections: Configuration de la collection supplémentaire et métadonnées + directus_fields: Configuration supplémentaire des champs et métadonnées + directus_files: Métadonnées pour tous les fichiers gérés + directus_folders: Fournit des répertoires virtuels pour les fichiers + directus_migrations: Quelle version de la base de données que vous utilisez + directus_permissions: Sélectionner les permissions pour chaque groupe + directus_presets: Préréglages pour la collection par défaut et les signets + directus_relations: Configuration de la relation et métadonnées + directus_revisions: Instantanés de données pour toutes les activités + directus_roles: Groupes de permissions pour les utilisateurs système + directus_sessions: Informations sur la session utilisateur + directus_settings: Options de configuration du projet + directus_users: Utilisateurs du système pour la plateforme + directus_webhooks: Configuration des requêtes HTTP basées sur des événements fields: directus_activity: item: Clé principale de l'élément @@ -810,6 +831,8 @@ fields: png: PNG webP: WebP tiff: Tiff + basemaps_raster: Raster + basemaps_tile: Raster TileJSON basemaps_style: Style de Mapbox mapbox_key: Jeton d'accès Mapbox mapbox_placeholder: pk.eyJ1Ijo..... @@ -865,16 +888,26 @@ field_options: public_note_placeholder: Un message public court qui prend en charge le formatage des démarques... security_divider_title: Sécurité auth_password_policy: + none_text: Aucun - Non Recommandé weak_text: Faible - 8 caractères minimum + strong_text: Fort – Majuscules / minuscules / chiffres / spéciaux + storage_asset_presets: + fit: + contain_text: Contient (préserver le rapport d'aspect) + cover_text: Couverture (force la taille exacte) + fit_text: Ajuster l'intérieur + outside_text: Ajuster à l'extérieur additional_transforms: Transformations supplémentaires transforms_note: Le nom de la méthode Sharp et ses arguments. Voir https://sharp.pixelplumbing.com/api-constructor pour plus d'informations. mapbox_key: Jeton d'accès Mapbox mapbox_placeholder: pk.eyJ1Ijo..... + basemaps_raster: Raster + basemaps_tile: Raster TileJSON basemaps_style: Style de Mapbox files_divider_title: Fichiers et miniatures overrides_divider_title: Remplacer les applications directus_activity: - login: Se connecter + login: Identifiant create: Créer update: Mettre à jour delete: Supprimer @@ -920,7 +953,9 @@ field_options: group_placeholder: Étiquetez ce groupe... type_name: Type choices_always: Toujours ouvert + choices_start_collapsed: Commencer à réduire collections_name: Collections + collections_addLabel: Ajouter une collection... directus_users: preferences_divider: Préférences utilisateur dropdown_auto: Automatique (Basé sur le système) @@ -943,6 +978,7 @@ field_options: actions_delete: Supprimer actions_login: Identifiant no_fields_in_collection: 'Il n''y a pas encore de champs dans "{collection}"' +no_value: Aucune valeur do_nothing: Ne rien faire generate_and_save_uuid: Générer et Enregistrer l'UUID save_current_user_id: Enregistrer l'ID de l'utilisateur actuel @@ -1054,6 +1090,7 @@ interfaces: value_combining: Combinaison de valeurs value_combining_note: Contrôle la valeur stockée lorsque des sélections imbriquées sont faites. show_all: Tout afficher + show_selected: Afficher la sélection input-code: code: Code description: Écrire ou partager des extraits de code @@ -1149,8 +1186,20 @@ interfaces: imageToken_label: Quel token (statique) ajouter aux sources d'images map: map: Carte + description: Sélectionnez un emplacement sur une carte zoom: Zoom + geometry_type: Type de géométrie + geometry_format: Format géométrique + default_view: Vue par défaut + invalid_options: Options non valides + invalid_format: Format invalide ({format}) + unexpected_geometry: '{expected} attendu, reçu {got}.' + fit_bounds: Ajuster la vue aux données native: Natif + geojson: GeoJSON + lnglat: Longitude, Latitude + wkt: WKT + wkb: WKB presentation-notice: notice: Remarque description: Afficher une courte remarque @@ -1162,6 +1211,7 @@ interfaces: system-folder: folder: Dossier description: Sélectionner un dossier + field_hint: Met les fichiers récemment téléchargés dans le dossier sélectionné. Cela n'affecte pas les fichiers existants qui sont sélectionnés. root_name: Bibliothèque de fichiers racine system_default: Paramètres par défaut du système select-radio: @@ -1243,6 +1293,10 @@ interfaces: rate: Débit group-raw: name: Groupe brut + description: Rendre les champs tels qu'ils sont + group-detail: + name: Détail du groupe + description: Rendre les champs comme une section pliable displays: boolean: boolean: Booléen @@ -1352,3 +1406,4 @@ layouts: map: map: Carte field: Géométrie + search_this_area: Chercher dans cette zone diff --git a/app/src/lang/translations/he-IL.yaml b/app/src/lang/translations/he-IL.yaml index ed86529383..79c2a684c6 100644 --- a/app/src/lang/translations/he-IL.yaml +++ b/app/src/lang/translations/he-IL.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: ערוך שדה half_width: חצי עמוד full_width: רוחב מלא diff --git a/app/src/lang/translations/hi-IN.yaml b/app/src/lang/translations/hi-IN.yaml index 43b7d5a80f..d31f6b475b 100644 --- a/app/src/lang/translations/hi-IN.yaml +++ b/app/src/lang/translations/hi-IN.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: एडिट फील्ड item_revision: आइटम संशोधन duplicate_field: डुप्लिकेट फ़ील्ड @@ -123,7 +103,6 @@ fields_for_role: 'फ़ील्ड्स जो {role} भूमिका {action validation_for_role: 'फील्ड {action} नियमों जो {role} भूमिका पालन करना चाहिए' presets_for_role: '{role} भूमिका के लिए फ़ील्ड मान जो डिफ़ॉल्ट होगा' presentation_and_aliases: प्रस्तुति और उपनाम -revision_post_update: यहां देखें कि अपडेट के बाद यह आइटम कैसा दिखता है language: भाषा global: ग्लोबल admins_have_all_permissions: Admins के पास सभी अनुमतियां हैं @@ -242,7 +221,8 @@ fields: name: नाम field_options: directus_activity: - delete: डिलीट + create: Create + update: Update directus_collections: language: भाषा archive_divider: आर्काइव diff --git a/app/src/lang/translations/hu-HU.yaml b/app/src/lang/translations/hu-HU.yaml index f20d9a4e7e..b9d921528d 100644 --- a/app/src/lang/translations/hu-HU.yaml +++ b/app/src/lang/translations/hu-HU.yaml @@ -1,24 +1,6 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' +draft: Vázlat +archived: Archiválva edit_field: Mező szerkesztése conditions: Feltételek maps: Térképek @@ -36,7 +18,7 @@ enter_password_to_enable_tfa: Írja be jelszavát a kétfaktoros ellenőrzés be add_field: Mező Hozzáadása role_name: Szerepkör neve branch: Ág -leaf: Falevél / Leaf +leaf: Leaf indeterminate: Meghatározatlan edit_collection: Gyűjtemény szerkesztése exclusive: Kizárólagos @@ -142,9 +124,6 @@ fields_for_role: 'A {role} szerepkör mezői a következő funkciót hajthatják validation_for_role: 'A {action} mező szabályozza a {role} szerepek által követendő viselkedést.' presets_for_role: 'A {role} szerepkör mezőértékeinek alapértelmezései.' presentation_and_aliases: Prezentációk és Aliasok -revision_post_update: Ez az elem így nézett ki a frissítés után... -changes_made: Ezek a konkrét változtatások, melyeket elvégeztünk... -no_relational_data: Ne feledd, ez nem tartalmaz relációs adatokat! hide_field_on_detail: Mező elrejtése a Részleteken show_field_on_detail: Mező megjelenítése a Részleteken delete_field: Mező törlése @@ -381,14 +360,13 @@ no_files_copy: Nincsenek fileok. user_count: 'Nincsenek felhasználók | Egy felhasználó | {count} felhasználó' no_users_copy: Ez a szerepkör még egy felhasználóhoz sem lett hozzárendelve. webhooks_count: 'Nincsenek webhookok | Egy webhook | {count} webhook' -no_webhooks_copy: Még nincsenek webhookok. all_items: Minden elem any: Bármely csv: CSV no_collections: Nincsenek gyűjtemények create_collection: Gyűjtemény létrehozása no_collections_copy_admin: Még nem hoztál létre gyűjteményt. Kattints az alábbi gombra a kezdéshez. -no_collections_copy: Még nem hoztál létre gyűjteményt. Lépj kapcsolatba a rendszeradminisztrátorral. +no_collections_copy: Ön még nem rendelkezik Gyűjteményekkel. Lépjen kapcsolatba a rendszeradminisztrátorral! relationship_not_setup: Ez a kapcsolat nincs megfelelően beállítva display_template_not_setup: A megjelenítő sablon nem megfelelően van beállítva collection_field_not_setup: A gyűjtemény mező opció nem megfelelően van beállítva @@ -545,7 +523,7 @@ upload_pending: Feltöltés folyamatban drag_file_here: Dobj ide egy fájlt click_to_browse: Kattints a böngészéshez interface_options: Interfész opciók -layout_options: Elrendezési beállítások +layout_options: Elrendezés beállításai rows: Sorok columns: Oszlopok collection_setup: Gyűjtemény beállítások @@ -678,7 +656,7 @@ preset_name_placeholder: Alapértelmezettként szolgál, ha üres... preset_search_placeholder: Keresési lekérdezés... editing_preset: Alapértelmezés szerkesztése layout_preview: Elrendezés előnézet -layout_setup: Elrendezés beállítás +layout_setup: További beállítások unsaved_changes: Nem mentett módosítások unsaved_changes_copy: Biztos, hogy elhagyja az oldalt? discard_changes: Változtatások elvetése @@ -754,7 +732,7 @@ fields: $thumbnail: Miniatűr title: Cím description: Leírás - tags: Cimkék + tags: Címkék location: Pozíció storage: Tároló filename_disk: Fájlnév (tárhely) @@ -783,7 +761,7 @@ fields: location: Pozíció title: Cím description: Leírás - tags: Cimkék + tags: Címkék user_preferences: Felhasználói beállítások language: Nyelv theme: Téma @@ -883,7 +861,7 @@ field_options: files_divider_title: Fájlok és miniatűrök overrides_divider_title: Alkalmazás felülbírálások directus_activity: - login: Belépés + login: Bejelentkezés create: Létrehozás update: Frissítés delete: Törlés @@ -986,7 +964,7 @@ duplicate: Duplikálás email: Email embed: Beágyazás fallback_icon: Tartalék ikon -field: mező | mezők +field: Mező | Mezők file: File file_library: Könyvtár forgot_password: Elfelejtett jelszó @@ -1201,7 +1179,7 @@ interfaces: description: Válasszon számot csúszka segítségével always_show_value: Mindig mutassa az értéket tags: - tags: Cimkék + tags: Címkék description: Címke megadása vagy kiválasztása whitespace: Szóköz hyphen: Helyettesítse kötőjellel @@ -1361,7 +1339,7 @@ layouts: cards: cards: Kártya image_source: Kép forrása - image_fit: Kép poziciója + image_fit: Kép pozíciója crop: Vágás contain: Tartalmaz title: Cím @@ -1372,7 +1350,7 @@ layouts: spacing: Sorköz comfortable: Kényelmes compact: Kompakt - cozy: Kényelmes + cozy: Kellemes calendar: calendar: Naptár start_date_field: Kezdő dátum mező diff --git a/app/src/lang/translations/id-ID.yaml b/app/src/lang/translations/id-ID.yaml index a4fe9b723f..81229cb76d 100644 --- a/app/src/lang/translations/id-ID.yaml +++ b/app/src/lang/translations/id-ID.yaml @@ -1,34 +1,21 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Edit Kolom +conditions: Kondisi +maps: Peta item_revision: Revisi Item duplicate_field: Kolom Duplikat half_width: Lebar Setengah full_width: Lebar Penuh +limit: Batas +group: Grup +and: Dan +or: Atau fill_width: Lebar Penuh field_name_translations: Terjemahan Nama Kolom enter_password_to_enable_tfa: Masukkan password anda untuk Two-Factor Authentication add_field: Tambah Kolom role_name: Nama Peran +branch: Cabang db_only_click_to_configure: 'Khusus Database: Tekan Untuk Konfigurasi ' show_archived_items: Tampilkan Yang Diarsipkan edited: Nilai Diedit @@ -125,9 +112,6 @@ fields_for_role: 'Baris {role} Peran dapat {action}.' validation_for_role: 'Aturan baris {action} Peran {role} harus tunduk.' presets_for_role: 'Nilai bawaan baris untuk Peran {role}.' presentation_and_aliases: Presentasi & Alias -revision_post_update: Ini adalah bagaimana item ini terlihat setelah pembaruan... -changes_made: Ini adalah perubahan spesifik yang telah dibuat... -no_relational_data: Untuk catatan bahwa ini tidak termasuk data relasional. hide_field_on_detail: Sembunyikan Baris pada Rincian show_field_on_detail: Tampilkan Baris pada Rincian delete_field: Hapus Baris @@ -362,7 +346,6 @@ no_files_copy: Tidak ada berkas disini. user_count: 'Tidak Ada Pengguna | Satu Pengguna | {count} Pengguna' no_users_copy: Belum ada pengguna didalam peran ini. webhooks_count: 'Tidak Ada Webhook | Satu Webhook | {count} Webhook' -no_webhooks_copy: Belum ada webhook. all_items: Semua Item csv: CSV no_collections: Tidak ada koleksi @@ -430,11 +413,22 @@ copy_details: Salin Rincian no_app_access: Tidak Ada Akses Aplikasi no_app_access_copy: Pengguna ini tidak diperbolehkan untuk menggunakan aplikasi admin. back: Kembali +rotate: Putar +all_users: Semua Pengguna +delete_collection: Hapus Koleksi +update_collection_success: Perbarui Koleksi placeholder: Tulisan default pada input icon_left: Ikon Kiri icon_right: Ikon Kanan +font: Huruf +sans_serif: Sans Serif +serif: Serif +monospace: Monospace divider: Pembagi/Pemecah color: Warna +circle: Lingkaran +advanced_filter: Filter Lanjutan +delete_advanced_filter: Hapus Filter operators: lt: Kurang dari gt: Lebih besar dari @@ -448,9 +442,11 @@ operators: empty: Kosong nempty: Tidak kosong loading: Memuat... +layout_options: Pilihan Tata Letak value_unique: Nilai harus unik display_template: Tampilan Template no_results: Tidak Ada Hasil +saves_automatically: Menyimpan Secara Otomatis role: Peran create: Buat on_update: Saat Pembaruan @@ -473,6 +469,7 @@ editing_in_batch: 'Mengedit Masal {count} item' settings_permissions: Peran dan Izin settings_project: Pengaturan Proyek settings_webhooks: Webhooks +scope: Lingkup discard_changes: Batalkan Perubahan keep_editing: Tetap Mengedit add_new: Tambah Baru @@ -541,10 +538,8 @@ fields: status: Status field_options: directus_activity: - login: Masuk create: Buat update: Perbarui - delete: Hapus directus_collections: language: Bahasa archive_divider: Arsip @@ -561,6 +556,7 @@ field_options: actions_create: Buat actions_update: Perbarui comment: Komentar +editing_role: 'Peraturan {role}' delete_field_are_you_sure: >- Apakah Anda yakin Anda ingin menghapus bidang "{field}" ini? Tindakan ini tidak dapat dikembalikan. description: Deskripsi @@ -655,6 +651,8 @@ displays: filesize: Ukuran Berkas icon: icon: Ikon + image: + circle: Lingkaran labels: choices_value_placeholder: Masukkan sebuah nilai... user: diff --git a/app/src/lang/translations/it-IT.yaml b/app/src/lang/translations/it-IT.yaml index c25530b025..0ee38b73e3 100644 --- a/app/src/lang/translations/it-IT.yaml +++ b/app/src/lang/translations/it-IT.yaml @@ -19,10 +19,16 @@ #'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', #'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', #'Proxy', 'Intl' +published: Pubblicato +draft: Bozza +archived: Archiviato +module_bar: Barra del modulo +tile_size: Dimensione della casella edit_field: Modifica campo conditions: Condizioni maps: Mappe item_revision: Revisione elemento +enter_a_name: Inserisci un nome... duplicate_field: Campo duplicato half_width: Metà larghezza full_width: Larghezza Massima @@ -53,6 +59,7 @@ create_user: Crea utente create_webhook: Crea webhook invite_users: Invita utenti email_examples: "admin{'@'}example.com, user{'@'}example.com..." +url_example: "https://example.com" invite: Invita email_already_invited: Email "{email}" è già stata invitata emails: Email @@ -142,9 +149,9 @@ fields_for_role: 'Campi che il ruolo {role} può {action}.' validation_for_role: 'Regole per il campo {action} che il ruolo {role} deve rispettare.' presets_for_role: 'Valore predefinito del campo per il ruolo {role}.' presentation_and_aliases: Presentazione e Alias -revision_post_update: Ecco come appariva questo elemento dopo l'aggiornamento... -changes_made: Questi sono i cambiamenti specifici che sono stati fatti... -no_relational_data: Tieni presente che questo non include dati relazionali. +revision_post_update: Ecco come appariva questo elemento dopo l'aggiornamento. +changes_made: Di seguito sono riportate le modifiche apportate in questa revisione. +no_relational_data: Ricorda che qui i dati relazionali non sono inclusi. hide_field_on_detail: Nascondi campo nel dettaglio show_field_on_detail: Mostra campo nel dettaglio delete_field: Elimina campo @@ -211,6 +218,8 @@ add_m2m_to_collection: 'Aggiungi Many-to-Many a "{collection}"' choose_a_type: Seleziona un Tipo... determined_by_relationship: Determinato dalla Relazione add_note: Aggiungi una nota utile per gli utenti ... +add_link: Aggiungi link +custom_link: Link personalizzato default_value: Valore predefinito standard_field: Campo Standard single_file: File Singolo @@ -382,7 +391,7 @@ no_files_copy: Non ci sono file qui. user_count: 'Nessun Utente | Un Utente | {count} Utenti' no_users_copy: Non ci sono ancora utenti in questo ruolo. webhooks_count: 'Nessun webhook | 1 Webhook | {count} Webhook' -no_webhooks_copy: Non ci sono ancora webhook. +no_webhooks_copy: Non sono ancora stati configurati webhook. Inizia creandone uno qui sotto. all_items: Tutti gli Elementi any: Qualsiasi csv: CSV @@ -730,6 +739,22 @@ collections: Raccolte singleton: Singleton singleton_label: Tratta come oggetto singolo system_fields_locked: I campi di sistema sono bloccati e non possono essere modificati +directus_collection: + directus_activity: Log autorizzazioni per tutti gli eventi + directus_collections: Configurazione e metadati aggiuntivi della raccolta + directus_fields: Configurazione e metadati aggiuntivi del campo + directus_files: Metadati per tutti i file degli asset gestiti + directus_folders: Fornisce directory virtuali per i file + directus_migrations: Quale versione del database stai usando + directus_permissions: Autorizzazioni di accesso per ciascun ruolo + directus_presets: Preset per i default della raccolta e i segnalibri + directus_relations: Configurazione e metadati della relazione + directus_revisions: Snapshot dei dati per tutte le attività + directus_roles: Gruppi di autorizzazioni per gli utenti di sistema + directus_sessions: Informazioni sulla sessione dell'utente + directus_settings: Opzioni di configurazione del progetto + directus_users: Utenti di sistema per la piattaforma + directus_webhooks: Configurazione per le richieste HTTP basate su eventi fields: directus_activity: item: Chiave primaria elemento @@ -888,7 +913,7 @@ field_options: files_divider_title: File e miniature overrides_divider_title: Personalizzazioni App directus_activity: - login: Accesso + login: Accedi create: Creare update: Aggiornare delete: Elimina @@ -960,6 +985,7 @@ field_options: actions_delete: Elimina actions_login: Accedi no_fields_in_collection: 'Non ci sono ancora campi in "{collection}"' +no_value: Nessun valore do_nothing: Non Fare Niente generate_and_save_uuid: Genera e Salva UUID save_current_user_id: Salva l'Id Utente Attuale @@ -1038,7 +1064,6 @@ require_value_to_be_set: Richiedi di impostare il valore translation: Traduzione value: Valore view_project: Visualizza Progetto -weeks: { } report_error: Segnala l'errore start: Inizio interfaces: @@ -1404,3 +1429,5 @@ layouts: invalid_geometry: Geometria non valida auto_location_filter: Filtra sempre i dati al rettangolo di selezione search_this_area: Cerca in quest'area + clear_data_filter: Rimuovi il filtro sui dati + clear_location_filter: Rimuovi il filtro sulla posizione diff --git a/app/src/lang/translations/ja-JP.yaml b/app/src/lang/translations/ja-JP.yaml index 1fec170fb1..2a421e798c 100644 --- a/app/src/lang/translations/ja-JP.yaml +++ b/app/src/lang/translations/ja-JP.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: フィールドの編集 item_revision: 履歴 full_width: 最大幅 @@ -384,10 +364,8 @@ fields: status: ステータス field_options: directus_activity: - login: ログイン create: 作成 update: 更新 - delete: 削除 directus_collections: collection_setup: コレクションの作成 singleton: シングルオブジェクトに設定する diff --git a/app/src/lang/translations/ko-KR.yaml b/app/src/lang/translations/ko-KR.yaml index b24df7eab2..5fde7b7adf 100644 --- a/app/src/lang/translations/ko-KR.yaml +++ b/app/src/lang/translations/ko-KR.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: 필드 편집 item_revision: 아이템 리비전 duplicate_field: 중복 필드 diff --git a/app/src/lang/translations/lt-LT.yaml b/app/src/lang/translations/lt-LT.yaml index ce6db90101..c796cf7cd7 100644 --- a/app/src/lang/translations/lt-LT.yaml +++ b/app/src/lang/translations/lt-LT.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Redaguoti lauką item_revision: Elemento pakeitimai duplicate_field: Dubliuoti lauką @@ -133,9 +113,6 @@ fields_for_role: 'Laukai, kuriuos {role} vaidmuo gali {action}.' validation_for_role: 'Lauko {action} taisyklės, kurių {role} vaidmuo turi laikytis.' presets_for_role: 'Lauko vertė pagal nutylėjimą {role} vaidmeniui.' presentation_and_aliases: Atvaizdavimas ir sinonimai -revision_post_update: Taip šis elementas atrodė po paskutinio atnaujinimo... -changes_made: Tai yra konkretūs atlikti pakeitimai... -no_relational_data: Atminkite, kad neįtraukiami sąryšių duomenys. hide_field_on_detail: Slėpti lauką detalėse show_field_on_detail: Rodyti lauką detalėse delete_field: Trinti lauką @@ -358,7 +335,6 @@ no_files_copy: Nėra failų. user_count: 'Nėra vartotojų | Vienas vartotojas | {count} vartotojų' no_users_copy: Nėra vartotojų šioje grupėje. webhooks_count: 'Nėra "Webhook"ų | Vienas "Webhook"as | {count} "Webhook"ų"' -no_webhooks_copy: Dar nėra sukurta "Webhook"ų. all_items: Visi elementai csv: CSV no_collections: Nėra kolekcijų @@ -739,7 +715,6 @@ fields: status: Būsena field_options: directus_activity: - login: Prisijungti create: Kurti update: Atnaujinti directus_collections: diff --git a/app/src/lang/translations/mn-MN.yaml b/app/src/lang/translations/mn-MN.yaml index e198be5eb0..88702645b1 100644 --- a/app/src/lang/translations/mn-MN.yaml +++ b/app/src/lang/translations/mn-MN.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Талбарыг засах item_revision: Хяналт duplicate_field: Талбарыг хувилах diff --git a/app/src/lang/translations/ms-MY.yaml b/app/src/lang/translations/ms-MY.yaml index 2eba71e4d9..95b0b6d4bf 100644 --- a/app/src/lang/translations/ms-MY.yaml +++ b/app/src/lang/translations/ms-MY.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Sunting halaman item_revision: Barang semakan duplicate_field: Halaman salinan @@ -152,10 +132,8 @@ fields: status: Status field_options: directus_activity: - login: Log masuk create: Cipta update: Kemaskini - delete: Padam directus_roles: fields: name_name: Nama diff --git a/app/src/lang/translations/nl-NL.yaml b/app/src/lang/translations/nl-NL.yaml index 37423c695c..acde4a6b2f 100644 --- a/app/src/lang/translations/nl-NL.yaml +++ b/app/src/lang/translations/nl-NL.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Veld Bewerken conditions: Voorwaarden item_revision: Item revisie @@ -137,9 +117,6 @@ fields_for_role: 'Velden die de rol "{role}" kan {action}.' validation_for_role: 'Veld {action} regels die de rol "{role}" moet gehoorzamen.' presets_for_role: 'Standaardwaarden voor de velden voor rol {role}.' presentation_and_aliases: Presentatie & Aliasen -revision_post_update: Hier is hoe dit item eruit zag na de update... -changes_made: Dit zijn de specifieke wijzigingen die zijn aangebracht... -no_relational_data: Houd er rekening mee dat dit geen relationele gegevens omvat. hide_field_on_detail: Veld Verbergen show_field_on_detail: Veld Tonen delete_field: Veld Verwijderen @@ -376,7 +353,6 @@ no_files_copy: Er zijn geen bestanden hier. user_count: 'Geen gebruikers | Één gebruiker | {count} gebruikers' no_users_copy: Er zijn nog geen gebruikers in deze rol. webhooks_count: 'Geen webhooks | 1 Webhook | {count} Webhooks' -no_webhooks_copy: Er zijn nog geen webhooks. all_items: Alle items csv: CSV no_collections: Geen collecties @@ -816,10 +792,8 @@ fields: status: Status field_options: directus_activity: - login: Login create: Maak update: Updaten - delete: Verwijder directus_collections: track_activity_revisions: Track Activiteiten & Revisies only_track_activity: Track alleen activiteiten diff --git a/app/src/lang/translations/no-NO.yaml b/app/src/lang/translations/no-NO.yaml index b513981c68..4401e8c916 100644 --- a/app/src/lang/translations/no-NO.yaml +++ b/app/src/lang/translations/no-NO.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Rediger felt item_revision: Element revisjoner duplicate_field: Dupliser felt @@ -119,9 +99,6 @@ fields_for_role: 'Felter {role} rollen kan {action}.' validation_for_role: 'Felt {action} regler {role} rollen må følge.' presets_for_role: 'Felt standardverdi for rollen {role}.' presentation_and_aliases: Presentation & Aliaser -revision_post_update: Her er hvordan dette produktet så ut etter oppdateringen... -changes_made: Dette er de spesifikke endringene som ble gjort... -no_relational_data: Husk at dette ikke inkluderer relasjonsdata. hide_field_on_detail: Skjul felt ved detaljert visning show_field_on_detail: Vis felt ved detaljert visning delete_field: Slett felt @@ -301,7 +278,6 @@ no_files_copy: Det er ingen filer her. user_count: 'Ingen brukere | En bruker | {count} brukere' no_users_copy: Det er ingen brukere i denne rollen enda. webhooks_count: 'Ingen Webhooks | En Webhook | {count} Webhooks' -no_webhooks_copy: Det finnes ingen webhooks ennå. all_items: Alle elementer csv: CSV no_collections: Ingen kolleksjoner @@ -440,10 +416,8 @@ fields: status: Status field_options: directus_activity: - login: Logg inn create: Opprett update: Oppdater - delete: Slett directus_collections: language: Språk archive_divider: Arkiv diff --git a/app/src/lang/translations/pl-PL.yaml b/app/src/lang/translations/pl-PL.yaml index 800d077b65..b06c29cdc0 100644 --- a/app/src/lang/translations/pl-PL.yaml +++ b/app/src/lang/translations/pl-PL.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Edytuj pole maps: Mapy item_revision: Wersja elementu @@ -141,9 +121,6 @@ fields_for_role: 'Pola roli {role} mogą {action}.' validation_for_role: 'Pole {action} zasad roli {role} musi być przestrzegane.' presets_for_role: 'Wartość domyślna dla roli {role}.' presentation_and_aliases: Prezentacja i aliasy -revision_post_update: Oto jak wyglądał ten element po aktualizacji... -changes_made: To są konkretne zmiany, które zostały wprowadzone... -no_relational_data: Pamiętaj, że nie obejmuje to danych relacyjnych. hide_field_on_detail: Ukryj pole w szczegółach show_field_on_detail: Pokaż pole w szczegółach delete_field: Usuń pole @@ -381,7 +358,6 @@ no_files_copy: Brak plików. user_count: 'Brak użytkowników | Jeden użytkownik | {count} użytkowników' no_users_copy: Nie ma jeszcze użytkowników w tej roli. webhooks_count: 'Brak webhooków | Jeden Webhook | {count} Webhooków' -no_webhooks_copy: Brak webhooków. all_items: Wszystkie elementy any: Dowolny csv: CSV @@ -823,10 +799,8 @@ fields: status: Status field_options: directus_activity: - login: Zaloguj się create: Stwórz update: Zaktualizuj - delete: Usuń directus_collections: track_activity_revisions: Śledź aktywność i rewizje only_track_activity: Tylko Śledź Aktywność diff --git a/app/src/lang/translations/pt-BR.yaml b/app/src/lang/translations/pt-BR.yaml index 3d9b693ae7..08b13d2460 100644 --- a/app/src/lang/translations/pt-BR.yaml +++ b/app/src/lang/translations/pt-BR.yaml @@ -1,25 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' -published: Publicado draft: Rascunho archived: Arquivado edit_field: Editar campo @@ -55,7 +34,7 @@ create_role: Criar Função create_user: Criar usuário create_webhook: Criar Webgancho invite_users: Convidar Usuários -email_examples: "admin{'@'}exemplo.com, usuário{'@'}exemplo.com..." +email_examples: "admin{'@'}exemplo.com, usuario{'@'}exemplo.com..." invite: Convidar email_already_invited: Um convite já foi enviado para o email "{email}" emails: Emails @@ -145,9 +124,6 @@ fields_for_role: 'Campos que o cargo {role} pode {action}.' validation_for_role: 'As regras {action} do campo que o papel {role} deve obedecer.' presets_for_role: 'Valores de campo padrões para a função {role}.' presentation_and_aliases: Apresentação e pseudônimos -revision_post_update: Aqui está como este item ficou após a atualização... -changes_made: Estas são as mudanças específicas que foram feitas... -no_relational_data: Tenha em mente que isso não inclui dados relacionais. hide_field_on_detail: Ocultar Campo em Detalhes show_field_on_detail: Exibir Campo em Detalhes delete_field: Excluir campo @@ -385,7 +361,6 @@ no_files_copy: Ainda não há arquivos aqui. user_count: 'Nenhum usuário | Um usuário | {count} usuários' no_users_copy: Não há usuários neste cargo ainda. webhooks_count: 'Nenhum Webhook | Um Webhook | {count} Webhooks' -no_webhooks_copy: Ainda não possui Webhooks. all_items: Todos os itens any: Qualquer csv: CSV @@ -852,7 +827,7 @@ fields: collection_list: Navegação da Coleção directus_webhooks: name: Nome - method: Método + method: Método status: Status data: Dados data_label: Enviar Dados do Evento @@ -867,7 +842,6 @@ field_options: files_divider_title: Arquivos e Miniaturas overrides_divider_title: Substituições de Aplicativos directus_activity: - login: Entrar create: Criar update: Alteração delete: Excluir diff --git a/app/src/lang/translations/pt-PT.yaml b/app/src/lang/translations/pt-PT.yaml index 70836b798c..2d5a901b52 100644 --- a/app/src/lang/translations/pt-PT.yaml +++ b/app/src/lang/translations/pt-PT.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Editar campo conditions: Condições item_revision: Revisão do documento @@ -137,9 +117,6 @@ fields_for_role: 'Campos que o estatuto {role} pode {action}.' validation_for_role: 'As regras {action} do campo que a função {role} deve obedecer.' presets_for_role: 'Valor do Campo definido por padrão para a função {role}.' presentation_and_aliases: Apresentação & Pseudônimos -revision_post_update: Aqui está como este documento ficou após a atualização... -changes_made: Estas são as mudanças específicas que foram feitas... -no_relational_data: Tenha em atenção que isto não inclui dados relacionais. hide_field_on_detail: Ocultar campo dentro de Detalhe show_field_on_detail: Mostrar campo dentro de Detalhe delete_field: Remover campo @@ -375,7 +352,6 @@ no_files_copy: Não existem ficheiros aqui. user_count: 'Nenhum utilizador | Um utilizador | {count} utilizadores' no_users_copy: Ainda não existem utilizadores neste estatuto. webhooks_count: 'Nenhum webhook | Um webhook | {count} webhooks' -no_webhooks_copy: Ainda não existem webhooks. all_items: Todos os documentos csv: CSV no_collections: Nenhuma coleção @@ -637,10 +613,6 @@ fields: name: Nome status: Estado field_options: - directus_activity: - create: Criar - update: Atualizar - delete: Remover directus_collections: track_activity_revisions: Rastrear Atividades e Revisões only_track_activity: Apenas rastrear Atividade diff --git a/app/src/lang/translations/ro-RO.yaml b/app/src/lang/translations/ro-RO.yaml index 2498ca9eab..6a4d60ef4f 100644 --- a/app/src/lang/translations/ro-RO.yaml +++ b/app/src/lang/translations/ro-RO.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Editează câmp item_revision: Revizuire element duplicate_field: Duplicare câmp diff --git a/app/src/lang/translations/ru-RU.yaml b/app/src/lang/translations/ru-RU.yaml index 46b25f41e0..8907ba6810 100644 --- a/app/src/lang/translations/ru-RU.yaml +++ b/app/src/lang/translations/ru-RU.yaml @@ -19,10 +19,16 @@ #'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', #'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', #'Proxy', 'Intl' +published: Опубликовано +draft: Черновик +archived: В архиве +module_bar: Панель модулей +tile_size: Размер тайла edit_field: Редактировать поле conditions: Условия maps: Карты item_revision: Редакция +enter_a_name: Введите название... duplicate_field: Клонировать поле half_width: Полширины full_width: Вся ширина @@ -36,7 +42,10 @@ enter_password_to_enable_tfa: Введите свой пароль для вкл add_field: Добавить поле role_name: Название роли branch: Ветка +leaf: Лист +indeterminate: Неопределенный edit_collection: Изменить коллекцию +exclusive: Эксклюзивный children: Дочерние элементы db_only_click_to_configure: 'Только База данных: Нажмите для Настройки ' show_archived_items: Показать элементы в архиве @@ -50,6 +59,7 @@ create_user: Создать пользователя create_webhook: Создать веб-хук invite_users: Пригласить пользователей email_examples: "admin{'@'}example.com, user{'@'}example.com..." +url_example: "https://example.com" invite: Пригласить email_already_invited: На адрес "{email}" уже было отправлено приглашение emails: Email-адреса @@ -139,9 +149,9 @@ fields_for_role: 'Поля, которые Роль {role} может {action}.' validation_for_role: 'Правила {action} поля, которые Роль {role} должна соблюдать.' presets_for_role: 'Значения поля по умолчанию для Роли {role}.' presentation_and_aliases: Представление и Алиасы -revision_post_update: Вот как этот элемент выглядел после обновления... -changes_made: Вот конкретные изменения, которые были сделаны... -no_relational_data: Помните, что это не включает относительные данные. +revision_post_update: Вот как этот элемент выглядел после обновления. +changes_made: Ниже приведены конкретные изменения, внесенные в эту редакцию. +no_relational_data: Имейте в виду, что реляционные данные здесь не включены. hide_field_on_detail: Скрыть Поле в Карточке show_field_on_detail: Показать Поле в Карточке delete_field: Удалить поле @@ -157,6 +167,7 @@ exposure: Экспозиция shutter: Затвор iso: ISO focal_length: Фокусное Расстояние +schema_setup_key: Имя столбца базы данных этого поля и API ключ create_field: Создать Поле creating_new_field: 'Новое Поле ({collection})' field_in_collection: '{field} ({collection})' @@ -197,6 +208,7 @@ click_to_manage_translated_fields: >- Полей перевода пока нет. Нажмите здесь, чтобы создать их. | Есть одно поле перевода. Нажмите здесь, чтобы управлять им. | Есть {count} полей перевода. Нажмите здесь, чтобы управлять ими. fields_group: Группа Полей no_collections_found: Нет найденных коллекций. +new_data_alert: 'В вашей модели данных будет создано следующее:' search_collection: Поиск коллекций... new_field: 'Новое поле' new_collection: 'Новая коллекция' @@ -206,6 +218,8 @@ add_m2m_to_collection: 'Добавить Many-to-Many в "{collection}"' choose_a_type: Выберите Тип... determined_by_relationship: Определяется отношением add_note: Добавить заметку для пользователей... +add_link: Добавить ссылку +custom_link: Пользовательская ссылка default_value: Значение По умолчанию standard_field: Стандартное Поле single_file: Один Файл @@ -377,7 +391,7 @@ no_files_copy: Здесь нет файлов. user_count: 'Нет Пользователей | Один Пользователь | {count} Пользователей' no_users_copy: В этой роли пока нет пользователей. webhooks_count: 'Нет Веб-хуков | Один Веб-хук | {count} Веб-хуков' -no_webhooks_copy: Веб-хуков пока нет. +no_webhooks_copy: Веб-хуки еще не настроены. Начните с создания одного из них ниже. all_items: Все Элементы any: Любой csv: CSV @@ -403,6 +417,7 @@ documentation: Документация sidebar: Боковая панель duration: Продолжительность charset: Кодировка +second: секунда file_moved: Файл Перемещен collection_created: Коллекция Создана modified_on: Дата изменения @@ -486,6 +501,7 @@ system_collections: Системные коллекции placeholder: Плейсхолдер icon_left: Значок слева icon_right: Значок справа +count_other_revisions: '{count} других редакций' font: Шрифт sans_serif: Sans Serif serif: Serif @@ -524,6 +540,8 @@ operators: has: Содержит некоторые из этих ключей intersects: Пересекает nintersects: Не пересекает + intersects_bbox: Пересекает ограничивающую рамку + nintersects_bbox: Не пересекает ограничивающую рамку loading: Загрузка... drop_to_upload: Перетащите для Загрузки item: Элемент @@ -546,6 +564,8 @@ value_unique: Значение должно быть уникальным all_activity: Вся Активность create_item: Создать Элемент display_template: Шаблон отображения +language_display_template: Шаблон отображения языка +translations_display_template: Шаблон отображения переводов n_items_selected: 'Не Выбраны Элементы | Выбран 1 Элемент | Выбрано {n} Элементов' per_page: На Страницу all_files: Все Файлы @@ -565,6 +585,7 @@ user: Пользователь no_presets: Нет Пресетов no_presets_copy: Пресеты или закладки пока не были сохранены. no_presets_cta: Добавить Пресет +presets_only: Только пресеты create: Создать on_create: При Создании on_update: Во время обновления @@ -665,6 +686,7 @@ select: Выбрать... layout: Макет tree_view: В виде дерева changes_are_permanent: Изменения необратимы +preset_name_placeholder: Используется по умолчанию, когда пусто... preset_search_placeholder: Строка поиска... editing_preset: Редактирование Пресета layout_preview: Предпросмотр Макета @@ -711,11 +733,28 @@ no_layout_collection_selected_yet: Макет/коллекция пока не batch_delete_confirm: >- Никаких элементов не выбрано | Вы уверены, что хотите удалить этот элемент? Это действие не может быть отменено. | Вы уверены, что хотите удалить эти элементы {count}? Это действие не может быть отменено. cancel: Отмена +no_upscale: Не масштабировать изображения collection: Коллекция collections: Коллекции singleton: Синглтон singleton_label: Считать одним объектом system_fields_locked: Системные поля заблокированы и не могут быть изменены +directus_collection: + directus_activity: Журналы отчетности по всем событиям + directus_collections: Дополнительные настройки коллекции и метаданные + directus_fields: Дополнительные настройки полей и метаданные + directus_files: Метаданные для всех управляемых файлов + directus_folders: Предоставляет виртуальные папки для файлов + directus_migrations: Какую версию базы данных вы используете + directus_permissions: Права доступа для каждой роли + directus_presets: Пресеты для коллекций по умолчанию и закладки + directus_relations: Настройки связей и метаданные + directus_revisions: Снимки данных для всех действий + directus_roles: Группы разрешений для системных пользователей + directus_sessions: Информация о сеансе пользователя + directus_settings: Параметры конфигурации проекта + directus_users: Системные пользователи для платформы + directus_webhooks: Конфигурация для HTTP-запросов на основе событий fields: directus_activity: item: Ключ Элемента @@ -739,6 +778,7 @@ fields: archive_value: Значение для архива unarchive_value: Значение для извлеченных из архива sort_field: Поле сортировки + accountability: Отслеживание активности и редакций directus_files: $thumbnail: Миниатюра title: Заголовок @@ -797,6 +837,13 @@ fields: png: PNG webP: WebP tiff: Tiff + basemaps_raster: Растр + basemaps_tile: Растр TileJSON + basemaps_style: Стиль Mapbox + mapbox_key: Токен доступа Mapbox + mapbox_placeholder: pk.eyJ1Ijo..... + transforms_note: Имя метода Sharp и его аргументы. Дополнительную информацию см. в https://sharp.pixelplumbing.com/api-constructor. + additional_transforms: Дополнительные преобразования project_name: Название проекта project_url: URL проекта project_color: Цвет Проекта @@ -842,7 +889,27 @@ fields: actions: Действия field_options: directus_settings: + project_name_placeholder: Мой проект + project_logo_note: Фон логина и логотипа + public_note_placeholder: Короткое, публичное сообщение, которое поддерживает markdown форматирование... security_divider_title: Безопасность + auth_password_policy: + none_text: Нет — не рекомендуется + weak_text: Слабый – минимум 8 символов + strong_text: Крепкий – строчные, прописные, цифры, специальные + storage_asset_presets: + fit: + contain_text: Вместить (с сохранением пропорций) + cover_text: Покрыть (точный размер) + fit_text: Поместить внутри + outside_text: Поместить вне + additional_transforms: Дополнительные преобразования + transforms_note: Имя метода Sharp и его аргументы. Дополнительную информацию см. в https://sharp.pixelplumbing.com/api-constructor. + mapbox_key: Токен доступа Mapbox + mapbox_placeholder: pk.eyJ1Ijo..... + basemaps_raster: Растр + basemaps_tile: Растр TileJSON + basemaps_style: Стиль Mapbox files_divider_title: Файлы и миниатюры overrides_divider_title: Переопределить заводские настройки directus_activity: @@ -855,25 +922,45 @@ field_options: only_track_activity: Отслеживать только активность do_not_track_anything: Ничего не отслеживать collection_setup: Настройки Коллекции + note_placeholder: Описание этой коллекции... + hidden_label: Скрыть в приложении singleton: Считать одним объектом language: Язык translation: Введите перевод... archive_divider: Архив archive_field: Выберите поле... + archive_app_filter: Включить фильтр архива приложения + archive_value: Значение, установленное при архивировании... + unarchive_value: Значение, установленное при разархивировании... divider: Сортировать sort_field: Выберите поле... + accountability_divider: Подотчетность directus_files: title: Уникальное название... description: Описание (необязательно)... + location: Необязательная локация... + storage_divider: Именование файлов + filename_disk: Имя на диске... + filename_download: Имя при загрузке... directus_roles: + name: Уникальное имя для этой роли... + description: Описание этой роли... + ip_access: Добавьте разрешенные IP-адреса, оставьте поле пустым, чтобы разрешить все... fields: icon_name: Иконка name_name: Имя name_placeholder: Введите название... + link_name: Ссылка + link_placeholder: Относительный или абсолютный URL... collection_list: + group_name_addLabel: Добавить новую группу... fields: + group_name: Название группы + group_placeholder: Обозначьте эту группу... type_name: Тип + choices_always: Всегда открыто choices_start_open: Раскрыта + choices_start_collapsed: Начать свернутым collections_name: Коллекции collections_addLabel: Добавить коллекцию... directus_users: @@ -898,6 +985,7 @@ field_options: actions_delete: Удалить actions_login: Войти no_fields_in_collection: 'В коллекции "{collection}" пока нет полей' +no_value: Нет значения do_nothing: Ничего не Делать generate_and_save_uuid: Создать и Сохранить UUID save_current_user_id: Сохранить ID Текущего Пользователя @@ -906,13 +994,17 @@ save_current_datetime: Сохранить Текущую Дату/Время block: Блокировать inline: Строчный comment: Комментарий +relational_triggers: Реляционные триггеры referential_action_field_label_m2o: При удалении {collection}... referential_action_field_label_o2m: При отмене выбора {collection}... referential_action_no_action: Предотвратить удаление +referential_action_cascade: Удалить элемент {collection} (cascade) referential_action_set_null: Обнулить поле {field} referential_action_set_default: Установить полю {field} значение по умолчанию choose_action: Выбрать действие continue_label: Продолжить +continue_as: >- + {name} в настоящее время аутентифицирован. Если вы узнаете этот аккаунт, нажмите продолжить. editing_role: '{role} Роль' creating_webhook: Создание Веб-хука default_label: По умолчанию @@ -968,6 +1060,7 @@ sort_direction: Направление сортировки sort_asc: По Возрастанию sort_desc: По Убыванию template: Шаблон +require_value_to_be_set: Требовать установки значения translation: Перевод value: Значение view_project: Просмотр Проекта @@ -1033,6 +1126,7 @@ interfaces: use_24: Использовать 24-Часовой Формат system-display-template: display-template: Шаблон отображения + description: Смешивать статический текст и динамические значения полей collection_field: Поле коллекции collection_field_not_setup: Опция поля коллекции настроена некорректно select_a_collection: Выберите Коллекцию @@ -1083,6 +1177,7 @@ interfaces: description: Окно выбора параметров интерфейса list-m2m: many-to-many: Многие ко Многим + description: Выберите несколько связанных элементов select-dropdown-m2o: many-to-one: Многие к Одному description: Выберите один связанный элемент @@ -1106,6 +1201,7 @@ interfaces: invalid_options: Некорректные настройки invalid_format: Некорректный формат ({format}) unexpected_geometry: Ожидалось {expected}, а встретилось {got}. + fit_bounds: Подогнать вид по размеру данных native: Родной geojson: GeoJSON lnglat: Долгота, широта (Lon, Lat) @@ -1130,6 +1226,7 @@ interfaces: description: Выбор одного из нескольких вариантов list: repeater: Повторитель + description: Создать несколько записей одной структуры edit_fields: Редактировать поля add_label: 'Ярлык «Создать новый»' field_name_placeholder: Введите название поля... @@ -1196,11 +1293,16 @@ interfaces: options_override: Переопределение параметров input-autocomplete-api: input-autocomplete-api: Автоматическое дополнение ввода (API) + description: Автодополнение значений поиска через внешний API. results_path: Путь к результатам value_path: Путь значения trigger: Триггер rate: Рейтинг + group-raw: + name: Необработанная группа + description: Отображать поля как есть group-detail: + name: Детали группы description: Отображать поля как сворачиваемую секцию show_header: Показывать заголовок группы header_icon: Иконка заголовка @@ -1231,6 +1333,8 @@ displays: datetime: Дата и время description: Показывать значения, относящиеся ко времени format: Формат + format_note: >- + Пользовательский формат принимает __[Date Field Symbol Table](https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table)__ long: Длинный short: Короткий relative: Относительный @@ -1323,4 +1427,7 @@ layouts: cluster_maxzoom: Максимальный масштаб для кластеров field: Геометрия invalid_geometry: Некорректная геометрия + auto_location_filter: Всегда фильтровать данные к границам отображения search_this_area: Искать в этой области + clear_data_filter: Очистить фильтр данных + clear_location_filter: Очистить фильтр местоположения diff --git a/app/src/lang/translations/sl-SI.yaml b/app/src/lang/translations/sl-SI.yaml index 147deb762a..ce989cd837 100644 --- a/app/src/lang/translations/sl-SI.yaml +++ b/app/src/lang/translations/sl-SI.yaml @@ -1,24 +1,6 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' +draft: Osnutek +archived: Arhivirano edit_field: Uredi polje conditions: Pogoji maps: Zemljevidi @@ -38,6 +20,7 @@ role_name: Ime vloge branch: Veja leaf: List indeterminate: Nedoločeno +edit_collection: Uredi zbirko exclusive: Ekskluzivno children: Podrejeni db_only_click_to_configure: 'Samo podatkovna baza: konfiguriraj ' @@ -141,9 +124,6 @@ fields_for_role: 'Polja, nad katerimi lahko vloga {role} opravlja akcijo {action validation_for_role: 'Pravila, ki jih mora upoštevati vloga {role} za polje {action}.' presets_for_role: 'Privzete vrednosti vloge {role} za polje.' presentation_and_aliases: Predstavitev in aliasi -revision_post_update: Tako je zapis zgledal po popravku ... -changes_made: To so narejeni popravki ... -no_relational_data: Upoštevajte, da to ne vključuje relacijskih podatkov. hide_field_on_detail: Skrij polje v podrobnem pogledu show_field_on_detail: Prikaži polje v podrobnem pogledu delete_field: Izbriši polje @@ -381,7 +361,6 @@ no_files_copy: Ni datotek. user_count: 'Ni uporabnikov | En uporabnik | Dva uporabnika | Trije uporabniki | Štirje uporabniki | {count} uporabnikov' no_users_copy: Ta vloga še nima uporabnikov. webhooks_count: 'Ni prožilnikov | En prožilnik | Dva prožilnika | Trije prožilniki | Štirje prožilniki | {count} prožilnikov' -no_webhooks_copy: Prožilniki ne obstajajo. all_items: Vsi zapisi any: Katerokoli csv: CSV @@ -556,7 +535,7 @@ create_item: Ustvari zapis display_template: Prikaži predlogo language_display_template: Predloga prikaza jezika translations_display_template: Predloga prikaza prevodov -n_items_selected: 'Noben zapis ni izbran | 1 zaois je izbran | {n} zapisov izbranih' +n_items_selected: 'Noben zapis ni izbran | 1 zapis je izbran | {n} zapisov izbranih' per_page: Na stran all_files: Vse datoteke my_files: Moje datoteke @@ -723,6 +702,7 @@ no_layout_collection_selected_yet: Nobena postavitev ali zbirka ni izbrana batch_delete_confirm: >- Noben zapis ni izbran | Ste prepričani, da želite izbrisati ta zapis? | Ste prepričani, da želite izbrisati {count} zapisov? cancel: Prekliči +no_upscale: Brez povečevanja slik collection: Zbirka collections: Zbirke singleton: En zapis @@ -796,6 +776,7 @@ fields: admin_options: Administracijske opcije status: Stanje status_draft: Osnutek + status_invited: Povabljen status_active: Aktivno status_suspended: Zaustavljeno status_archived: Arhivirano @@ -805,13 +786,15 @@ fields: last_page: Zadnja stran last_access: Zadnji dostop directus_settings: + transforms_note: Ime Sharp metode in parametri. Več na https://sharp.pixelplumbing.com/api-constructor. + additional_transforms: Dodatne pretvorbe project_name: Ime projekta project_url: Spletni naslov (URL) projekta project_color: Barva projekta project_logo: Logo projekta public_pages: Javne strani - public_foreground: Barva teksta v javnem delu - public_background: Barva ozadja v javnem delu + public_foreground: Glavna slika v javnem delu, logo + public_background: Slika za ozadje v javnem delu public_note: Sporočilo v javnem delu auth_password_policy: Pravila gesel auth_login_attempts: Število poskusov prijave @@ -850,7 +833,22 @@ fields: actions: Dejanja field_options: directus_settings: + project_name_placeholder: Moj projekt ... + project_logo_note: Ozadje prijave in logotip + public_note_placeholder: Kratko javno sporočilo, ki podpira Markdown oblikovanje ... security_divider_title: Varnost + auth_password_policy: + none_text: Brez - ni priporočljivo + weak_text: Šibko - najmanj 8 znakov + strong_text: Močno - Velike in majhne črke, številke, posebni znaki + storage_asset_presets: + fit: + contain_text: Omejeno (obdrži razmerje) + cover_text: Zapolni (točna velikost) + fit_text: Prilagodi znotraj + outside_text: Prilagodi zunaj + additional_transforms: Dodatne pretvorbe + transforms_note: Ime Sharp metode in parametri. Več na https://sharp.pixelplumbing.com/api-constructor. files_divider_title: Datoteke & sličice overrides_divider_title: Aplikacijske preglasitve directus_activity: @@ -863,20 +861,47 @@ field_options: only_track_activity: Sledi samo aktivnosti do_not_track_anything: Ne sledi ničesar collection_setup: Nastavitve zbirke + note_placeholder: Opis te zbirke ... + hidden_label: Skrij v aplikaciji singleton: Obravnavaj kot en objekt language: Jezik + translation: Vnesite prevod ... archive_divider: Arhiviraj + archive_field: Izberite polje ... + archive_app_filter: Omogoči aplikacijski arhivski filter + archive_value: Nastavljena vrednost pri arhiviranju ... + unarchive_value: Nastavljena vrednost pri dearhiviranju ... divider: Razvrsti + sort_field: Izberite polje ... + accountability_divider: Odgovornost + directus_files: + title: Edinstven naziv ... + description: Opcijski opis ... + location: Opcijska lokacija ... + storage_divider: Imenovanje datotek + filename_disk: Ime na disku ... + filename_download: Ime za prenos ... directus_roles: + name: Edinstveno ime te vloge ... + description: Opis te vloge ... + ip_access: Dovoljeni IP naslovi, pustite prazno za neomejen dostop ... fields: icon_name: Ikona name_name: Ime name_placeholder: Vnesite naslov ... + link_name: Povezava + link_placeholder: Relativni ali absolutni URL naslov ... collection_list: + group_name_addLabel: Dodaj novo skupino ... fields: + group_name: Ime skupine + group_placeholder: Naziv te skupine ... type_name: Tip + choices_always: Vedno odprto choices_start_open: Začni odprto + choices_start_collapsed: Začni zaprto collections_name: Zbirke + collections_addLabel: Dodaj zbirko ... directus_users: preferences_divider: Uporabniške nastavitve dropdown_auto: Avtomatsko (sistemsko) @@ -884,6 +909,7 @@ field_options: dropdown_dark: Temna tema admin_divider: Administracijske opcije status_dropdown_draft: Osnutek + status_dropdown_invited: Povabljen status_dropdown_active: Aktivno status_dropdown_suspended: Zaustavljeno status_dropdown_archived: Arhivirano @@ -896,6 +922,7 @@ field_options: actions_create: Ustvari actions_update: Posodobi actions_delete: Izbriši + actions_login: Prijava no_fields_in_collection: 'Zbirka {collection} še nima polj' do_nothing: Ne stori ničesar generate_and_save_uuid: Ustvari in shrani UUID diff --git a/app/src/lang/translations/sr-CS.yaml b/app/src/lang/translations/sr-CS.yaml index 8305cbfa9b..1dc680808a 100644 --- a/app/src/lang/translations/sr-CS.yaml +++ b/app/src/lang/translations/sr-CS.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Izmijeni item_revision: Revizija stavke duplicate_field: Dupliraj @@ -126,9 +106,6 @@ fields_for_role: 'Sva polja {role} Role mogu {action}.' validation_for_role: 'Polje {action} upravlja ulogom {role}.' presets_for_role: 'Podrazumijevane vrijednosti polja za ulogu {role}.' presentation_and_aliases: Prezentacija & Pseudonimi -revision_post_update: Ovako će ova stavka izgledati nakon ažuriranja... -changes_made: Postoje specifične izmjene koji su napravljene... -no_relational_data: Zapamtite da ovo ne uključuje relacione podatke. hide_field_on_detail: Sakrij Polje u sekciji Detalji show_field_on_detail: Prikaži Polje u sekciji Detalji delete_field: Obriši Polje @@ -364,7 +341,6 @@ no_files_copy: Ovdje nema fajlova. user_count: 'Nema Korisnika | Jedan Korisnik | {count} Korisnika' no_users_copy: Ne postoji nijedan korisnik u ovoj roli. webhooks_count: 'Ne postoje Webhooks | Jedan Webhook | {count} Webhooks' -no_webhooks_copy: Trenutno ne postoji nijedan "webhook". all_items: Sve Stavke csv: CSV no_collections: Nema Kolekcija @@ -798,10 +774,8 @@ fields: status: Status field_options: directus_activity: - login: Prijavi se create: Kreiraj update: Ažuriranje - delete: Obriši directus_collections: track_activity_revisions: Prati Aktivnost & Revizije only_track_activity: Samo Prati Aktivnost diff --git a/app/src/lang/translations/sr-SP.yaml b/app/src/lang/translations/sr-SP.yaml index b59420ecd6..38499e2e98 100644 --- a/app/src/lang/translations/sr-SP.yaml +++ b/app/src/lang/translations/sr-SP.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Уреди поља item_revision: Ревизија итема duplicate_field: Дуплирај поље diff --git a/app/src/lang/translations/sv-SE.yaml b/app/src/lang/translations/sv-SE.yaml index 6fa92382fc..4ff52c33ef 100644 --- a/app/src/lang/translations/sv-SE.yaml +++ b/app/src/lang/translations/sv-SE.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Redigera fält item_revision: Revision objekt duplicate_field: Duplicera fält @@ -122,9 +102,6 @@ fields_for_role: 'Fält {role} rollen kan {action}.' validation_for_role: 'Fältets {action} regler {role} rollen måste lyda.' presets_for_role: 'Förvalt fältvärde för rollen {role}.' presentation_and_aliases: Presentation & alias -revision_post_update: Så här såg objektet ut efter uppdateringen... -changes_made: Dessa är de specifika ändringarna som gjordes... -no_relational_data: Tänk på att detta inte inkluderar datans relationer. hide_field_on_detail: Dölj fältet på detaljnivå show_field_on_detail: Visa fältet på detaljnivå delete_field: Radera fält @@ -352,7 +329,6 @@ no_files_copy: Det finns inga filer här. user_count: 'Inga användare | En användare | {count} användare' no_users_copy: Det finns inga användare i denna roll ännu. webhooks_count: 'Inga webhooks | En webhook | {count} webhooks' -no_webhooks_copy: Det finns inga webhooks ännu. all_items: Alla objekt csv: CSV no_collections: Inga kollektioner @@ -774,10 +750,8 @@ fields: status: Status field_options: directus_activity: - login: Logga in create: Skapa update: Uppdatera - delete: Radera directus_collections: collection_setup: Konfiguration av kollektion singleton: Behandla som ett enskilt objekt diff --git a/app/src/lang/translations/th-TH.yaml b/app/src/lang/translations/th-TH.yaml index f4b4cdcd58..ed68eb2e56 100644 --- a/app/src/lang/translations/th-TH.yaml +++ b/app/src/lang/translations/th-TH.yaml @@ -19,12 +19,15 @@ #'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', #'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', #'Proxy', 'Intl' +published: เผยแพร่แล้ว edit_field: แก้ไขฟิลด์ conditions: เงื่อนไข +maps: แผนที่ item_revision: ประวัติรายการ duplicate_field: สำเนาฟิลด์ half_width: กว้างครึ่งหนึ่ง full_width: กว้างเต็มหน้า +limit: ขีดจำกัด group: กลุ่ม and: และ or: หรือ @@ -36,6 +39,7 @@ role_name: ชื่อบทบาท branch: สาขา leaf: ใบ indeterminate: คลุมเครือ +edit_collection: แก้ไขคอลเลกชัน exclusive: เฉพาะ children: ลูก db_only_click_to_configure: 'ฐานข้อมูลเท่านั้น: คลิกเพื่อกำหนดค่า ' @@ -140,8 +144,8 @@ validation_for_role: 'ฟิลด์ {action} ถูกกำหนดสิท presets_for_role: 'ค่าตั้งต้นของฟิลด์สำหรับบทบาท {role}' presentation_and_aliases: การแสดงผลและนาวแผง revision_post_update: สิ่งที่ไอเท็มจะเป็นหลังจากอัพเดทแล้ว -changes_made: นี่คือการเปลี่ยนแปลงที่ถูกทำ... -no_relational_data: โปรดจำไว้ว่านี่ไม่รวมข้อมูลความสัมพันธ์ +changes_made: การดปลี่ยนแปลงที่เกิดขึ้นในการแก้ไขนี้ +no_relational_data: จำไว้ว่าข้อมูลสัมพันธ์ไม่ถูกรวมอยู่ในนี้ hide_field_on_detail: ซ่อนฟิลด์เมื่อแสดงรายละเอียด show_field_on_detail: แสดงฟิลด์เมื่อแสดงรายละเอียด delete_field: ลบฟิลด์ @@ -182,6 +186,7 @@ time: เวลา timestamp: Timestamp uuid: UUID hash: ค่าแฮช +geometry: เรขาคณิต not_available_for_type: ไม่มีสำหรับชนิดนี้ create_translations: สร้างการแปลใหม่ auto_refresh: รีเฟรซอัตโนมัติ @@ -378,8 +383,9 @@ no_files_copy: ไม่มีไฟล์ที่นี่ user_count: 'ไม่มีผู้ใช้ | ผู้ใช้ 1 คน | ผู้ใช้ {count} คน' no_users_copy: ยังไม่มีผู้ใช้ในบทบาท webhooks_count: 'ไม่มี webhook | มี 1 webhook | มี {count} webhook' -no_webhooks_copy: ยังไม่มี webhook +no_webhooks_copy: ยังไม่มีการกำหนดค่าเว็บฮุค เริ่มต้นด้วยการสร้างด้านล่าง all_items: รายการทั้งหมด +any: ใด ๆ csv: CSV no_collections: ไม่มีคอลเลกชัน create_collection: สร้างคอลเลกชัน @@ -390,6 +396,7 @@ display_template_not_setup: การตั้งค่าของการแ collection_field_not_setup: การตั้งค่าของฟิลด์ยังไม่ถูกต้อง select_a_collection: เลือกคอลเลกชัน active: เปิดใช้งาน +inactive: ไม่ใช้งาน users: ผู้ใช้ activity: กิจกรรม webhooks: Webhooks @@ -402,6 +409,7 @@ documentation: เอกสาร sidebar: แถบด้านข้าง duration: ระยะเวลา charset: 'ชุดอักขระ:' +second: วินาที file_moved: ย้ายไฟล์เสร็จสิ้น collection_created: คอลเลกชันถูกสร้างแล้ว modified_on: ถูกแก้ไขเมื่อ @@ -443,6 +451,7 @@ errors: UNPROCESSABLE_ENTITY: เอ็นติตี้ที่ประมวลผลไม่ได้ INTERNAL_SERVER_ERROR: พบข้อผิดพลาดบางอย่างที่ไม่คาดคิด NOT_NULL_VIOLATION: ต้องไม่เป็นค่า null +security: ความปลอดภัย value_hashed: ข้อมูลถูกเข้ารหัสไว้อย่างปลอดภัย bookmark_name: ชื่อบุ๊กมาร์ก... create_bookmark: สร้างบุ๊กมาร์ก @@ -494,6 +503,7 @@ color: สี circle: วงกลม empty_item: ไอเท็มเปล่า log_in_with: 'ลงชื่อเข้าใช้ด้วย {provider}' +advanced_settings: การตั้งค่าขั้นสูง advanced_filter: ตัวกรองขั้นสูง delete_advanced_filter: ลบตัวกรองนี้ change_advanced_filter_operator: เปลี่ยนตัวดำเนินการ @@ -520,6 +530,10 @@ operators: nempty: ไม่ว่างเปล่า all: ประกอบด้วยคีย์เหล่านี้ has: ประกอบด้วยบางคีย์เหล่านี้ + intersects: ทางแยก + nintersects: ไม่ตัดกัน + intersects_bbox: ตัดขอบกล่อง + nintersects_bbox: ไม่ตัดขอบกล่อง loading: กำลังโหลด... drop_to_upload: วางเพื่ออัพโหลด item: รายการ @@ -563,6 +577,7 @@ user: ผู้ใช้ no_presets: ไม่มีค่าที่ตั้งไว้ล่วงหน้า no_presets_copy: ยังไม่มีค่าที่ตั้งไว้ล่วงหน้าหรือบุ๊กมาร์กที่ถูกบันทึกไว้ no_presets_cta: เพิ่มค่าที่ตั้งไว้ล่วงหน้าใหม่ +presets_only: ที่ตั้งไว้ล่วงหน้าเท่านั้น create: สร้าง on_create: เมื่อสร้าง on_update: เมื่อแก้ไข @@ -578,6 +593,7 @@ label: ป้าย image_url: URL ของรูปภาพ alt_text: ข้อความแสดงแทน media: สื่อ +quality: คุณภาพ width: กว้าง height: สูง source: แหล่งที่มา @@ -817,8 +833,9 @@ fields: name: ชื่อ status: สถานะ field_options: + directus_settings: + security_divider_title: ความปลอดภัย directus_activity: - login: ลงชื่อเข้าใช้ create: สร้าง update: แก้ไข directus_collections: @@ -843,6 +860,7 @@ field_options: status_dropdown_active: เปิดใช้งาน directus_webhooks: status_options_active: เปิดใช้งาน + status_options_inactive: ไม่ใช้งาน actions_create: สร้าง actions_update: แก้ไข no_fields_in_collection: 'ยังไม่มีฟิลด์ใน {collection}' @@ -1224,3 +1242,5 @@ layouts: calendar: ปฏิทิน start_date_field: ฟิลด์วันที่เริ่มต้น end_date_field: ฟิลด์วันที่สิ้นสุด + map: + field: เรขาคณิต diff --git a/app/src/lang/translations/tr-TR.yaml b/app/src/lang/translations/tr-TR.yaml index d3d3cd29ba..84e3cdc47f 100644 --- a/app/src/lang/translations/tr-TR.yaml +++ b/app/src/lang/translations/tr-TR.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Alanı Düzenle item_revision: Revizyonları Göster duplicate_field: Yinelenen Alan @@ -29,6 +9,7 @@ field_name_translations: Alan İsim Çevirileri enter_password_to_enable_tfa: İki Faktörlü Kimlik Doğrulamayı etkinleştirmek için şifrenizi girin add_field: Alan Ekle role_name: Rol Adı +edit_collection: Koleksiyonu düzenle db_only_click_to_configure: 'Yalnızca Veritabanı: Yapılandırmak için Tıklayın ' show_archived_items: Arşivlenmiş Öğeleri Göster edited: Değer Düzenlendi @@ -61,6 +42,7 @@ delete_bookmark_copy: >- logoutReason: SIGN_OUT: Oturum kapatıldı SESSION_EXPIRED: Oturumun süresi doldu +public_label: Herkese Açık public_description: Kimlik doğrulaması olmadan hangi API verilerinin kullanılabileceğini kontrol eder. not_allowed: İzin Verilmedi directus_version: Directus Versiyon @@ -125,9 +107,6 @@ fields_for_role: '{role} rolünün {action} yapabileceği alanlar.' validation_for_role: '{action} alanı, {role} rolünün uyması gereken kuralları belirler.' presets_for_role: '{role} rolü için varsayılan alan değeri.' presentation_and_aliases: Sunum ve Takma Adlar -revision_post_update: İşte güncellemeden sonra bu öğenin nasıl göründüğü... -changes_made: Bunlar yapılan belirli değişiklikler... -no_relational_data: Bunun ilişkisel verileri içermediğini unutmayın. hide_field_on_detail: Alanı Detayda Gizle show_field_on_detail: Alanı Detayda Göster delete_field: Alanı Sil @@ -227,7 +206,7 @@ undo_changes: Değişiklikleri geri al notifications: Bildirimler show_all_activity: Tüm etkinliği göster page_not_found: Sayfa Bulunamadı -page_not_found_body: Aradığınız sayfanın var olduğuna emin misiniz? Biz bulamadık da... +page_not_found_body: Aradığınız sayfa mevcut değil. confirm_revert: Geri Alma İşlemini Onayla confirm_revert_body: Bu, öğeyi seçilen duruma geri döndürecektir. display: Göster @@ -328,6 +307,7 @@ type: Tür creating_new_collection: Yeni Koleksiyon Oluştur created_by: Oluşturan created_on: Oluşturulma tarihi +creating_collection_info: Koleksiyonu isimlendir ve onun benzersiz "anahtar" alanını ayarla... save_and_create_new: Kaydet ve Yeni Oluştur save_and_stay: Kaydet ve Sayfada Kal save_as_copy: Kopya Olarak Kaydet @@ -349,7 +329,6 @@ no_files_copy: Burada dosya yok. user_count: 'Kullanıcı Yok | Bir Kullanıcı | {count} Kullanıcı' no_users_copy: Bu Grupta Kullanıcı Yok. webhooks_count: 'Webhook Yok | Bir Webhook | {count} Webhook' -no_webhooks_copy: Henüz hiç bir webhook yok. all_items: Tüm öğeler csv: CSV no_collections: Koleksiyon Yok @@ -609,6 +588,9 @@ fields: last_page: Son Sayfa last_access: Son Erişim directus_settings: + jpg: JPEG + png: PNG + webP: WebP project_name: Proje Adı custom_css: Özel CSS directus_fields: @@ -632,10 +614,8 @@ fields: status: Durum field_options: directus_activity: - login: Oturum Aç create: Oluştur update: Güncelle - delete: Sil directus_collections: language: Dil archive_divider: Arşiv diff --git a/app/src/lang/translations/uk-UA.yaml b/app/src/lang/translations/uk-UA.yaml index b6dfa60d53..1ac5754f3f 100644 --- a/app/src/lang/translations/uk-UA.yaml +++ b/app/src/lang/translations/uk-UA.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Редагувати поле conditions: Умови maps: Мапи @@ -277,10 +257,8 @@ fields: status: Статус field_options: directus_activity: - login: Вхід create: Створити update: Оновити - delete: Видалити directus_collections: language: Мова archive_divider: Архів diff --git a/app/src/lang/translations/vi-VN.yaml b/app/src/lang/translations/vi-VN.yaml index 58c176bb8e..0160e08aac 100644 --- a/app/src/lang/translations/vi-VN.yaml +++ b/app/src/lang/translations/vi-VN.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: Sửa trường item_revision: Xem Phiên bản duplicate_field: Nhân bản Trường @@ -554,7 +534,6 @@ fields: status: Trạng thái field_options: directus_activity: - login: Đăng nhập create: Tạo update: Cập nhật directus_collections: diff --git a/app/src/lang/translations/zh-CN.yaml b/app/src/lang/translations/zh-CN.yaml index 5d1ed01e5b..2506a68c2e 100644 --- a/app/src/lang/translations/zh-CN.yaml +++ b/app/src/lang/translations/zh-CN.yaml @@ -19,6 +19,9 @@ #'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', #'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', #'Proxy', 'Intl' +published: 已发布 +draft: 草稿 +archived: 已存档 edit_field: 编辑 conditions: 条件 maps: 地图 @@ -38,6 +41,7 @@ role_name: 角色名称 branch: 分支 leaf: Leaf indeterminate: 不确定的状态 +edit_collection: 编辑收藏 exclusive: 唯一的 children: 子页面 db_only_click_to_configure: '仅限数据库:点击配置 ' @@ -88,7 +92,7 @@ archive_confirm: 您确定要归档所选吗? archive_confirm_count: >- 没有选定项目 | 你确定要存档这个项目吗?| 你确定你想要存档这些 {count} 个项目吗? reset_system_permissions_to: '重置系统权限:' -reset_system_permissions_copy: 此操作将覆盖您可能应用到系统集合中的自定义权限。确定吗? +reset_system_permissions_copy: 此操作将覆盖您可能应用到系统收藏中的自定义权限。确定吗? the_following_are_minimum_permissions: 以下是启用"应用访问"时所需的最低权限,您可以对除以下权限外的其他权限进行扩展。 app_access_minimum: 最小权限 recommended_defaults: 推荐设置 @@ -141,9 +145,6 @@ fields_for_role: '{role} 角色能够 {action} 字段。' validation_for_role: '{role} 角色必须遵守字段的 {action} 规则。' presets_for_role: '{role} 角色的默认值。' presentation_and_aliases: 别名 -revision_post_update: 这是更新这个项目后的样式... -changes_made: 这些是所做的具体更改... -no_relational_data: 请记住,这不包括关系数据。 hide_field_on_detail: 在详情中隐藏该字段 show_field_on_detail: 在详情中显示 delete_field: 删除 @@ -199,7 +200,7 @@ to_manually_setup_translations: 手动设置翻译。 click_to_manage_translated_fields: >- 还没有翻译的字段。点击这里创建它们。 点击这里来管理它。| 有 {count} 个翻译的字段。点击这里来管理。 fields_group: 字段组 -no_collections_found: 未找到任何集合 +no_collections_found: 未找到任何收藏 new_data_alert: '以下将在您的数据模型中创建:' search_collection: 搜索数据模型... new_field: '新建字段' @@ -265,11 +266,11 @@ post_comment_success: 评论已发布 item_create_success: 条目已创建 | 条目已创建 item_update_success: 条目已更新 | 条目已更新 item_delete_success: 项目已删除 | 项目已删除 -this_collection: 此集合 -related_collection: 相关集合 -related_collections: 相关集合 +this_collection: 此收藏集 +related_collection: 相关收藏集 +related_collections: 相关收藏集 translations_collection: 翻译收藏 -languages_collection: 语言集合 +languages_collection: 语言收藏 export_data: 导出数据 format: 格式 use_current_filters_settings: 使用当前筛选器和设置 @@ -284,7 +285,7 @@ submit: 提交 move_to_folder: 移动到文件夹 move: 移动 system: 系统 -add_field_related: 将字段添加到关联集合 +add_field_related: 将字段添加到关联收藏 interface_label: 接口 today: 今天 yesterday: 昨天 @@ -339,11 +340,11 @@ replace_from_library: 从库中替换文件 replace_from_url: 从 URL 中替换文件 no_file_selected: 未选择文件 download_file: 下载文件 -collection_key: 集合的键 +collection_key: 收藏的键 name: 名称 primary_key_field: 主键字段 type: 类型 -creating_new_collection: 创建集合 +creating_new_collection: 创建收藏 created_by: 创建自 created_on: 创建于 creating_collection_info: 命名集合并设置唯一键字段... @@ -375,28 +376,27 @@ display_not_found: '未找到显示 "{display}" 。' reset_display: 重置显示 list-m2a: 构建器 (M2A) item_count: '暂无数据 | 找到一条数据 | 找到 {count} 条数据' -no_items_copy: 此集合中没有项目。 +no_items_copy: 此收藏中没有项目。 file_count: '没有文件 | 一个文件 | {count} 个文件' no_files_copy: 没有任何文件。 user_count: '没有用户 | 一个用户 | {count} 个用户' no_users_copy: 该角色下还没有用户。 webhooks_count: '没有 Web钩子 | 一个钩子 | {count} 个Web钩子' -no_webhooks_copy: 还没有任何web钩子。 all_items: 所有项目 any: 任意 csv: CSV -no_collections: 没有任何集合 -create_collection: 创建集合 -no_collections_copy_admin: 您还没有任何集合。点击下面的按钮开始操作。 -no_collections_copy: 您还没有任何集合。请联系您的系统管理员。 +no_collections: 没有任何收藏 +create_collection: 创建收藏 +no_collections_copy_admin: 您还没有任何收藏。点击下面的按钮开始操作。 +no_collections_copy: 您还没有任何收藏。请联系您的系统管理员。 relationship_not_setup: 关系配置不正确 display_template_not_setup: 显示的模板选项配置错误 -collection_field_not_setup: 集合的字段选项配置错误 -select_a_collection: 选择一个集合 +collection_field_not_setup: 收藏的字段选项配置错误 +select_a_collection: 选择一个收藏 active: 激活 inactive: 非活跃 users: 用户 -activity: 活动 +activity: 动态 webhooks: Webhook field_width: 字段宽度 add_filter: 添加过滤器 @@ -409,7 +409,7 @@ duration: 持续时间 charset: 字符集 second: 秒 file_moved: 文件已移动 -collection_created: 集合已创建 +collection_created: 收藏已创建 modified_on: 修改于 card_size: 卡片大小 sort_field: 排序字段 @@ -420,7 +420,7 @@ remove: 移除 toggle_manual_sorting: 切换手动排序 bookmark_doesnt_exist: 书签不存在 bookmark_doesnt_exist_copy: 找不到您试图打开的书签。 -bookmark_doesnt_exist_cta: 返回集合 +bookmark_doesnt_exist_cta: 返回收藏 select_an_item: 选择一个项目... edit: 编辑 enabled: 已启用 @@ -432,7 +432,7 @@ account_created_successfully: 账号成功创建! auto_fill: 自动填充 corresponding_field: 相应字段 errors: - COLLECTION_NOT_FOUND: "集合不存在" + COLLECTION_NOT_FOUND: "收藏不存在" FIELD_NOT_FOUND: 空格未找到 FORBIDDEN: 禁止 INVALID_CREDENTIALS: 错误的用户名或密码 @@ -472,22 +472,22 @@ flip_vertical: 垂直翻转 aspect_ratio: 宽高比 rotate: 旋转 all_users: 全部用户 -delete_collection: 删除集合 -update_collection_success: 集合已更新 -delete_collection_success: 集合已删除 +delete_collection: 删除收藏 +update_collection_success: 收藏已更新 +delete_collection_success: 收藏已删除 start_end_of_count_items: '{count} 个项目中的 {start}-{end}' start_end_of_count_filtered_items: '已过滤后{count} 个项目中的 {start}-{end}' one_item: '1项' one_filtered_item: '1 个已过滤项目' delete_collection_are_you_sure: >- 您确定要删除此收藏吗?这将删除收藏及其中的所有项目。此操作是永久性的。 -collections_shown: 集合展开 -visible_collections: 显示集合 -hidden_collections: 隐藏集合 -show_hidden_collections: 展开隐藏集合 -hide_hidden_collections: 不显示隐藏集合 -unmanaged_collections: 未配置的集合 -system_collections: 系统集合 +collections_shown: 收藏展开 +visible_collections: 显示收藏 +hidden_collections: 隐藏收藏 +show_hidden_collections: 展开隐藏收藏 +hide_hidden_collections: 不显示隐藏收藏 +unmanaged_collections: 未配置的收藏 +system_collections: 系统收藏 placeholder: 占位文本 icon_left: 左图标 icon_right: 右图标 @@ -548,7 +548,7 @@ interface_options: 接口选项 layout_options: 布局选项 rows: 行 columns: 列 -collection_setup: 集合设置 +collection_setup: 收藏设置 optional_system_fields: 可选系统字段 value_unique: 值必须唯一 all_activity: 所有活动的 @@ -685,7 +685,7 @@ unsaved_changes: 修改还未保存 unsaved_changes_copy: 您确定要离开此页面吗? discard_changes: 不保存修改并离开此页 keep_editing: 继续编辑 -page_help_collections_overview: '**集合总览** - 您可以访问的所有集合列表。' +page_help_collections_overview: '**收藏总览** - 您可以访问的所有收藏列表。' page_help_collections_collection: >- **浏览条目** - 列出所有 {collection} 集合中你可以访问的条级数据。 可以通过设置自定义布局、过滤器和排序来调整视图,甚至将不同的设置保存为书签以便快速访问。 page_help_collections_item: >- @@ -700,9 +700,9 @@ page_help_files_item: >- **文件详情** - 管理文件元数据、编辑原始资产和更新访问设置的表格。 page_help_settings_project: "**项目设置** — — 你的项目的全局配置选项。" page_help_settings_datamodel_collections: >- - **数据模型: 集合** - 列出所有可用的集合。这包括可见、隐藏和系统集合,以及可以添加的数据库表(当前还未加入并管理)。 + **数据模型: 收藏** - 列出所有可用的收藏。这包括可见、隐藏和系统收藏,以及可以添加的数据库表(当前还未加入并管理)。 page_help_settings_datamodel_fields: >- - **数据模型: Collection** — 用于管理此集合及其字段的表单 + **数据模型: Collection** — 用于管理此收藏及其字段的表单 page_help_settings_roles_collection: '**Browse Roles** - 列出管理员、公共和自定义用户角色。' page_help_settings_roles_item: "**角色详细** — 管理角色的权限和其他设置。" page_help_settings_presets_collection: >- @@ -719,12 +719,12 @@ add_new: 新增 create_new: 新建 all: 全部 none: 无 -no_layout_collection_selected_yet: 尚未选择布局/集合 +no_layout_collection_selected_yet: 尚未选择布局/收藏 batch_delete_confirm: >- 您还没有选择数据 | 您确定要删除此条数据吗? 此操作无法撤消。 | 您确定要删除这 {count} 条数据吗? 此操作无法撤消。 cancel: 取消 -collection: 集合 -collections: 集合 +collection: 收藏 +collections: 收藏 singleton: 单一 singleton_label: 视为单个对象 system_fields_locked: 系统字段已锁定,无法编辑 @@ -732,7 +732,7 @@ fields: directus_activity: item: 项目主键 action: 操作 - collection: 集合 + collection: 收藏 timestamp: 操作于 user: 操作人 comment: 注释 @@ -740,13 +740,13 @@ fields: ip: IP 地址 revisions: 修订版本 directus_collections: - collection: 集合 + collection: 收藏 icon: 图标 note: 注释 display_template: 显示模板 hidden: 隐藏 singleton: 单一 - translations: 集合名称翻译 + translations: 收藏名称翻译 archive_app_filter: 后台Admin App中归档数据过滤器 archive_value: 归档值 unarchive_value: 取消归档值 @@ -822,8 +822,8 @@ fields: overrides: 应用设置覆盖 custom_css: 自定义 CSS directus_fields: - collection: 集合名称 - icon: 集合 Icon + collection: 收藏名称 + icon: 收藏 Icon note: 注释 hidden: 隐藏 singleton: 单一 @@ -839,7 +839,7 @@ fields: enforce_tfa: 请求两步验证 users: 角色中的用户 module_list: 模块导航 - collection_list: 集合导航 + collection_list: 收藏导航 directus_webhooks: name: 名称 method: 方法 @@ -854,7 +854,6 @@ field_options: files_divider_title: 文件和缩略图 overrides_divider_title: 应用设置覆盖 directus_activity: - login: 登录 create: 创建 update: 更新 delete: 删除 @@ -862,7 +861,7 @@ field_options: track_activity_revisions: 跟踪活动和历史修改版本 only_track_activity: 仅跟踪活动 do_not_track_anything: 不跟踪任何内容 - collection_setup: 集合设置 + collection_setup: 收藏设置 singleton: 视为单个对象 language: 语言 archive_divider: 存档 @@ -875,7 +874,8 @@ field_options: collection_list: fields: type_name: 类型 - collections_name: 集合 + collections_name: 收藏 + collections_addLabel: 添加到收藏集... directus_users: preferences_divider: 用户设置 dropdown_auto: 自动 (系统主题) @@ -940,7 +940,7 @@ normal: 标准 success: 成功 warning: 警示 danger: 危险 -junction_collection: 交叉集合 +junction_collection: 交叉收藏 latency: 延迟 login: 登录 my_activity: 操作记录 @@ -1013,13 +1013,13 @@ interfaces: line_number: 行号 placeholder: 在此输入 system-collection: - collection: 集合 - description: 在现有集合之间选择 - include_system_collections: 包含系统集合 + collection: 收藏 + description: 在现有收藏之间选择 + include_system_collections: 包含系统收藏 system-collections: - collections: 集合 - description: 在现有集合之间选择 - include_system_collections: 包含系统集合 + collections: 收藏 + description: 在现有收藏之间选择 + include_system_collections: 包含系统收藏 select-color: color: 颜色 description: 输入或选择颜色 @@ -1037,8 +1037,8 @@ interfaces: display-template: 显示模板 description: 混合静态文本和动态字段值 collection_field: 收藏字段 - collection_field_not_setup: 集合的字段选项配置错误 - select_a_collection: 选择一个集合 + collection_field_not_setup: 收藏的字段选项配置错误 + select_a_collection: 选择一个收藏 presentation-divider: divider: 分隔线 description: 标记字段并分成多个部分 @@ -1181,7 +1181,7 @@ interfaces: label_default: 已启用 translations: display_template: 显示模板 - no_collection: 暂无集合 + no_collection: 暂无收藏 list-o2m-tree-view: description: 递归显示树状图 recursive_only: 树状图仅适用于递归关系。 @@ -1219,7 +1219,7 @@ displays: color_on: 启用颜色 color_off: 禁用颜色 collection: - collection: 集合 + collection: 收藏 description: 显示收藏 icon_label: 显示收藏的图标 color: diff --git a/app/src/lang/translations/zh-TW.yaml b/app/src/lang/translations/zh-TW.yaml index 64d0cc4a6e..807923e800 100644 --- a/app/src/lang/translations/zh-TW.yaml +++ b/app/src/lang/translations/zh-TW.yaml @@ -1,24 +1,4 @@ --- -## Be aware: -#Due to the way this is imported, JavaScript reserved words, including "delete", "private", -#"void", etc are stripped out. See -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/pluginutils/src/makeLegalIdentifier.ts#L4 -#and -#https://github.com/rollup/plugins/blob/8748b8cd3bbab3c5ac6190556930219f19060e63/packages/yaml/src/index.js#L45 -#Illegal words: -#'break', 'case', 'class', 'catch', 'const', 'continue', 'debugger', 'default', 'delete', 'do', -#'else', 'export', 'extends', 'finally', 'for', 'function', 'if', 'import', 'in', 'instanceof', -#'let', 'new', 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof', 'var', 'void', -#'while', 'with', 'yield', 'enum', 'await', 'implements', 'package', 'protected', 'static', -#'interface', 'private', 'public', 'arguments', 'Infinity', 'NaN', 'undefined', 'null', 'true', -#'false', 'eval', 'uneval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', -#'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'unescape', 'Object', -#'Function', 'Boolean', 'Symbol', 'Error', 'EvalError', 'InternalError', 'RangeError', -#'ReferenceError', 'SyntaxError', 'TypeError', 'URIError', 'Number', 'Math', 'Date', 'String', -#'RegExp', 'Array', 'Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', -#'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array', 'Map', 'Set', 'WeakMap', 'WeakSet', -#'SIMD', 'ArrayBuffer', 'DataView', 'JSON', 'Promise', 'Generator', 'GeneratorFunction', 'Reflect', -#'Proxy', 'Intl' edit_field: 編輯欄位 item_revision: 項目修改 duplicate_field: 複製欄位 @@ -101,8 +81,6 @@ field_validation: 欄位驗證 permissions_for_role: '角色 {role} 可以 {action} 項目' fields_for_role: '角色 {role} 可以 {action} 欄位' validation_for_role: '角色 {role} 必須遵守欄位 {action} 規則' -revision_post_update: 項目更新後看起來像... -changes_made: 這些是具體的變更部分 hide_field_on_detail: 在詳細內容中隱藏 show_field_on_detail: 在詳細內容中顯示 delete_field: 刪除欄位 @@ -278,7 +256,6 @@ no_files_copy: 這裡還沒有任何檔案。 user_count: '沒有使用者 | 1 個使用者 | {count} 個使用者' no_users_copy: 這個角色中還沒有任何使用者。 webhooks_count: '沒有 Webhooks|1 個 Webhook|{count} 個 Webhooks' -no_webhooks_copy: 這裡還沒有任何 Webhooks。 all_items: 所有項目 csv: CSV no_collections: 沒有集合 @@ -546,10 +523,8 @@ fields: status: 狀態 field_options: directus_activity: - login: 登入 create: 新建 update: 更新 - delete: 刪除 directus_collections: language: 語言 archive_divider: 封存 diff --git a/app/src/layouts/cards/components/header.vue b/app/src/layouts/cards/components/header.vue index 1a24869b21..223c3b44cf 100644 --- a/app/src/layouts/cards/components/header.vue +++ b/app/src/layouts/cards/components/header.vue @@ -146,8 +146,8 @@ export default defineComponent({ margin-bottom: 36px; padding: 0 8px; background-color: var(--background-page); - border-top: 2px solid var(--border-subdued); - border-bottom: 2px solid var(--border-subdued); + border-top: var(--border-width) solid var(--border-subdued); + border-bottom: var(--border-width) solid var(--border-subdued); box-shadow: 0 0 0 2px var(--background-page); } diff --git a/app/src/stores/settings.ts b/app/src/stores/settings.ts index 6f467d1c40..ad05ada36c 100644 --- a/app/src/stores/settings.ts +++ b/app/src/stores/settings.ts @@ -4,11 +4,12 @@ import { notify } from '@/utils/notify'; import { unexpectedError } from '@/utils/unexpected-error'; import { merge } from 'lodash'; import { defineStore } from 'pinia'; +import { Settings } from '@directus/shared/types'; export const useSettingsStore = defineStore({ id: 'settingsStore', state: () => ({ - settings: null as null | Record, + settings: null as null | Settings, }), actions: { async hydrate() { diff --git a/app/src/styles/_variables.scss b/app/src/styles/_variables.scss index 7d5bf464fe..4fb49f0f38 100644 --- a/app/src/styles/_variables.scss +++ b/app/src/styles/_variables.scss @@ -1,5 +1,5 @@ :root { - --brand: var(--primary); // will be overriden with directus_settings.project_color + --brand: var(--primary); // will be overridden with directus_settings.project_color --white: #fff; --black: #090c0d; --transition: cubic-bezier(0.4, 0, 0.2, 1); diff --git a/app/src/views/private/components/drawer-collection/drawer-collection.vue b/app/src/views/private/components/drawer-collection/drawer-collection.vue index 69d88d7e63..e7acb82c9a 100644 --- a/app/src/views/private/components/drawer-collection/drawer-collection.vue +++ b/app/src/views/private/components/drawer-collection/drawer-collection.vue @@ -15,6 +15,12 @@ + +