From e14270023938ea3e6d6f5fcfd870d6bdd5ac8e47 Mon Sep 17 00:00:00 2001 From: swissky <30409887+swissky@users.noreply.github.com> Date: Mon, 20 Jul 2026 23:35:35 +0200 Subject: [PATCH 01/33] feat(core): built-in SMTP email transport for generic SMTP credentials MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds an email:deliver provider that works with any standard SMTP server (Brevo relay, Office365, Fastmail, Amazon SES, self-hosted Postfix) via raw TCP — the one network primitive sandboxed plugins cannot use. Configuration is env-only (EMAIL_SMTP_HOST/PORT/USER/PASS/FROM). Supports STARTTLS (587) and implicit TLS (465); port 25 is refused because Cloudflare blocks it. TLS is always required. Works on Cloudflare Workers (cloudflare:sockets) and Node (node:net/node:tls). Registered as a built-in plugin so it participates in exclusive hook resolution like any other provider — explicitly selected plugin transports still take precedence. Closes #1541 --- .changeset/smtp-email-transport.md | 5 + .../content/docs/deployment/cloudflare.mdx | 38 ++ packages/core/src/emdash-runtime.ts | 28 + packages/core/src/plugins/email-smtp.ts | 501 ++++++++++++++++++ .../tests/unit/plugins/email-smtp.test.ts | 268 ++++++++++ 5 files changed, 840 insertions(+) create mode 100644 .changeset/smtp-email-transport.md create mode 100644 packages/core/src/plugins/email-smtp.ts create mode 100644 packages/core/tests/unit/plugins/email-smtp.test.ts diff --git a/.changeset/smtp-email-transport.md b/.changeset/smtp-email-transport.md new file mode 100644 index 0000000000..74bcd41b22 --- /dev/null +++ b/.changeset/smtp-email-transport.md @@ -0,0 +1,5 @@ +--- +"emdash": minor +--- + +Adds a built-in SMTP email transport for generic SMTP credentials (Brevo relay, Office365, Fastmail, Amazon SES, self-hosted Postfix). Configure via `EMAIL_SMTP_HOST`, `EMAIL_SMTP_PORT`, `EMAIL_SMTP_USER`, `EMAIL_SMTP_PASS`, and optional `EMAIL_SMTP_FROM` env vars. Supports STARTTLS (port 587) and implicit TLS (port 465); port 25 is refused with a clear error because Cloudflare blocks it. Works on Cloudflare Workers (via `cloudflare:sockets`) and Node (via `node:net`/`node:tls`). Sandboxed plugins cannot open TCP sockets, so this lives in core — explicitly selected plugin transports still take precedence. diff --git a/docs/src/content/docs/deployment/cloudflare.mdx b/docs/src/content/docs/deployment/cloudflare.mdx index 14f3729241..6d9ecc4827 100644 --- a/docs/src/content/docs/deployment/cloudflare.mdx +++ b/docs/src/content/docs/deployment/cloudflare.mdx @@ -274,6 +274,44 @@ the provider under **Settings → Email**. Email. +### Built-in SMTP transport + +If you don't want to use Cloudflare Email Sending (e.g. you already have SMTP +credentials for Brevo relay, Office365, Fastmail, Amazon SES, or a self-hosted +Postfix relay), EmDash includes a built-in SMTP transport that works with any +standard SMTP server. Sandboxed plugins cannot open TCP sockets, so this lives +in core and uses `cloudflare:sockets` on Workers or `node:net`/`node:tls` on +Node. + +Configure via environment variables: + +```bash title=".env" +EMAIL_SMTP_HOST=smtp-relay.brevo.com +EMAIL_SMTP_PORT=587 +EMAIL_SMTP_USER=you@example.com +EMAIL_SMTP_PASS=xsmtpsib-your-key-here +EMAIL_SMTP_FROM="My Site " +``` + +| Variable | Example | Notes | +| ----------------- | ------------------------------ | --------------------------------------------------------- | +| `EMAIL_SMTP_HOST` | `smtp-relay.brevo.com` | Any SMTP server reachable from your deployment | +| `EMAIL_SMTP_PORT` | `587` or `465` | 587 = STARTTLS, 465 = implicit TLS. Port 25 is refused. | +| `EMAIL_SMTP_USER` | `you@example.com` | SMTP auth username | +| `EMAIL_SMTP_PASS` | `xsmtpsib-…` | SMTP auth password (store as a secret) | +| `EMAIL_SMTP_FROM` | `My Site ` | Optional default sender; falls back to `EMAIL_SMTP_USER` | + + + +When configured, the SMTP transport registers as a built-in `email:deliver` +provider. Explicitly selected plugin transports (like `cloudflareEmail()`) still +take precedence — the built-in SMTP provider only wins when it's the sole +registered provider or when you explicitly select it under **Settings → Email**. + ## Environment Variables ### Recommended: encryption key diff --git a/packages/core/src/emdash-runtime.ts b/packages/core/src/emdash-runtime.ts index 803e4295f5..f2dfe3a97f 100644 --- a/packages/core/src/emdash-runtime.ts +++ b/packages/core/src/emdash-runtime.ts @@ -172,6 +172,7 @@ import { getDb } from "./loader.js"; import { CronExecutor, type InvokeCronHookFn } from "./plugins/cron.js"; import { definePlugin } from "./plugins/define-plugin.js"; import { DEV_CONSOLE_EMAIL_PLUGIN_ID, devConsoleEmailDeliver } from "./plugins/email-console.js"; +import { createSmtpEmailDeliver, loadSmtpConfigFromEnv, SMTP_EMAIL_PLUGIN_ID } from "./plugins/email-smtp.js"; import { EmailPipeline } from "./plugins/email.js"; import { createHookPipeline, @@ -1298,6 +1299,33 @@ export class EmDashRuntime { } } + // Register built-in SMTP email provider when EMAIL_SMTP_* env vars are + // present. This is the only transport that works with generic SMTP + // credentials (Brevo relay, Office365, Fastmail, self-hosted Postfix) + // because sandboxed plugins cannot open TCP sockets. Registered as a + // built-in so it participates in exclusive hook resolution like any + // other provider — explicitly-selected plugin transports still win. + const smtpConfig = loadSmtpConfigFromEnv(); + if (smtpConfig) { + try { + const smtpPlugin = definePlugin({ + id: SMTP_EMAIL_PLUGIN_ID, + version: "1.0.0", + capabilities: ["hooks.email-transport:register"], + hooks: { + "email:deliver": { + exclusive: true, + handler: createSmtpEmailDeliver(smtpConfig), + }, + }, + }); + allPipelinePlugins.push(smtpPlugin); + enabledPlugins.add(smtpPlugin.id); + } catch (error) { + console.warn("[email] Failed to register SMTP email provider:", error); + } + } + // Register built-in default comment moderator. // Always present — auto-selected as the sole comment:moderate provider // unless a plugin (e.g. AI moderation) provides its own. diff --git a/packages/core/src/plugins/email-smtp.ts b/packages/core/src/plugins/email-smtp.ts new file mode 100644 index 0000000000..501c64a338 --- /dev/null +++ b/packages/core/src/plugins/email-smtp.ts @@ -0,0 +1,501 @@ +/** + * Built-in SMTP Email Transport + * + * Delivers EmDash emails through any standard SMTP server (Brevo relay, + * Office365, Google Workspace, Fastmail, Amazon SES, self-hosted Postfix) + * via raw TCP — the one network primitive sandboxed plugins cannot use. + * + * Registered as a built-in `email:deliver` provider when SMTP env vars are + * present. On Cloudflare Workers it uses `cloudflare:sockets`; on Node it + * uses `node:net` / `node:tls`. Configuration is env-only for the first + * iteration — no admin UI yet. + * + * Env vars: + * EMAIL_SMTP_HOST smtp-relay.brevo.com + * EMAIL_SMTP_PORT 587 (STARTTLS) or 465 (implicit TLS) + * EMAIL_SMTP_SECURE "starttls" | "tls" (default: inferred from port) + * EMAIL_SMTP_USER you@example.com + * EMAIL_SMTP_PASS xsmtpsib-… + * EMAIL_SMTP_FROM Site (optional default sender) + * + * Cloudflare blocks outbound port 25 — this transport refuses port 25 with + * a clear error. TLS is always required; plaintext auth is never attempted. + */ + +import type { EmailDeliverEvent, PluginContext } from "./types.js"; + +/** Plugin ID for the built-in SMTP email provider */ +export const SMTP_EMAIL_PLUGIN_ID = "emdash-smtp"; + +// --------------------------------------------------------------------------- +// Socket abstraction — cloudflare:sockets on Workers, node:net/tls on Node +// --------------------------------------------------------------------------- + +interface SocketReader { + read(): Promise<{ value?: Uint8Array; done: boolean }>; +} + +export interface SmtpSocket { + writer: { write(data: Uint8Array): Promise; close(): Promise }; + reader: SocketReader; + startTls?(): Promise; + close(): Promise; +} + +type ConnectFn = ( + host: string, + port: number, + secure: "starttls" | "tls", +) => Promise; + +function encodeUtf8(input: string): Uint8Array { + return new TextEncoder().encode(input); +} + +function decodeUtf8(input: Uint8Array): string { + return new TextDecoder().decode(input); +} + +/** Concatenate chunks into one buffer. */ +function concat(chunks: Uint8Array[]): Uint8Array { + const total = chunks.reduce((n, c) => n + c.length, 0); + const out = new Uint8Array(total); + let offset = 0; + for (const c of chunks) { + out.set(c, offset); + offset += c.length; + } + return out; +} + +/** Read until CRLF or buffer exceeds limit. Returns decoded line without CRLF. */ +async function readLine(reader: SocketReader, buffered: Uint8Array[]): Promise { + const LIMIT = 8192; + while (true) { + const joined = concat(buffered); + const text = decodeUtf8(joined); + const idx = text.indexOf("\r\n"); + if (idx >= 0) { + const line = text.slice(0, idx); + const rest = joined.slice(idx + 2); + buffered.length = 0; + if (rest.length > 0) buffered.push(rest); + return line; + } + if (joined.length > LIMIT) { + throw new Error("SMTP line too long"); + } + const { value, done } = await reader.read(); + if (done) throw new Error("SMTP connection closed unexpectedly"); + if (value) buffered.push(value); + } +} + +/** Read a full SMTP reply (possibly multi-line: "250-...", "250 ..."). */ +async function readReply(reader: SocketReader, buffered: Uint8Array[]): Promise<{ code: number; lines: string[] }> { + const lines: string[] = []; + while (true) { + const line = await readLine(reader, buffered); + lines.push(line); + // "250 OK" (space) = final line; "250-..." (hyphen) = more to come + if (line.length < 4 || line[3] !== "-") break; + } + const code = Number.parseInt(lines[0]?.slice(0, 3) ?? "0", 10); + return { code, lines }; +} + +/** Assert reply code matches expectation; throw with server message otherwise. */ +function expectCode(reply: { code: number; lines: string[] }, expected: number | number[], context: string): void { + const codes = Array.isArray(expected) ? expected : [expected]; + if (!codes.includes(reply.code)) { + throw new Error(`SMTP ${context} failed: expected ${codes.join("/")}, got ${reply.code} — ${reply.lines.join(" | ")}`); + } +} + +/** Base64 encode ASCII string (SMTP AUTH). */ +function b64(input: string): string { + // Workers + Node both have btoa + return btoa(input); +} + +const CRLF_REGEX = /[\r\n]/g; + +/** Sanitize a header value against CRLF injection. */ +function sanitizeHeader(value: string): string { + return value.replace(CRLF_REGEX, " "); +} + +const ADDRESS_REGEX = /^\s*(?:"([^"]*)"|([^<]*))?\s*<([^>]+)>\s*$/; + +/** Parse "Name " or bare "email@example.com". */ +function parseAddress(input: string): { email: string; name?: string } { + const match = input.match(ADDRESS_REGEX); + if (match) { + const name = (match[1] ?? match[2] ?? "").trim(); + return { email: match[3].trim(), ...(name ? { name } : {}) }; + } + return { email: input.trim() }; +} + +/** Build a dot-stuffed MIME body. */ +function buildMime(params: { + from: { email: string; name?: string }; + to: string; + subject: string; + text: string; + html?: string; +}): string { + const { from, to, subject, text, html } = params; + const headers: string[] = [ + `From: ${from.name ? `"${sanitizeHeader(from.name)}" <${from.email}>` : from.email}`, + `To: ${to}`, + `Subject: ${sanitizeHeader(subject)}`, + `Date: ${new Date().toUTCString()}`, + `Message-ID: <${crypto.randomUUID()}@emdash>`, + `MIME-Version: 1.0`, + ]; + + let body: string; + if (html) { + const boundary = `----=_emdash_${crypto.randomUUID()}`; + headers.push(`Content-Type: multipart/alternative; boundary="${boundary}"`); + body = [ + `--${boundary}`, + `Content-Type: text/plain; charset=utf-8`, + `Content-Transfer-Encoding: 7bit`, + ``, + text, + `--${boundary}`, + `Content-Type: text/html; charset=utf-8`, + `Content-Transfer-Encoding: 7bit`, + ``, + html, + `--${boundary}--`, + ].join("\r\n"); + } else { + headers.push(`Content-Type: text/plain; charset=utf-8`); + headers.push(`Content-Transfer-Encoding: 7bit`); + body = text; + } + + const message = `${headers.join("\r\n")}\r\n\r\n${body}`; + // Dot-stuffing: lines starting with "." get an extra "." + return message.replace(/^\./gm, ".."); +} + +// --------------------------------------------------------------------------- +// Runtime-specific connect implementations +// --------------------------------------------------------------------------- + +async function connectCloudflare(host: string, port: number, secure: "starttls" | "tls"): Promise { + // @ts-expect-error — virtual module only available on Cloudflare Workers + const { connect } = await import("cloudflare:sockets"); + + if (secure === "tls") { + const sock = connect(`${host}:${port}`, { secureTransport: "on", allowHalfOpen: false }); + const reader = sock.readable.getReader(); + return { + writer: { + write: async (data) => sock.writable.getWriter().write(data), + close: async () => sock.writable.getWriter().close(), + }, + reader, + close: () => sock.close(), + }; + } + + // STARTTLS: connect plaintext, upgrade after EHLO + const sock = connect(`${host}:${port}`, { secureTransport: "off", allowHalfOpen: false }); + const reader = sock.readable.getReader(); + + return { + writer: { + write: async (data) => sock.writable.getWriter().write(data), + close: async () => sock.writable.getWriter().close(), + }, + reader, + startTls: async () => { + const tlsSock = sock.startTls(); + const tlsReader = tlsSock.readable.getReader(); + return { + writer: { + write: async (data) => tlsSock.writable.getWriter().write(data), + close: async () => tlsSock.writable.getWriter().close(), + }, + reader: tlsReader, + close: () => tlsSock.close(), + }; + }, + close: () => sock.close(), + }; +} + +async function connectNode(host: string, port: number, secure: "starttls" | "tls"): Promise { + if (secure === "tls") { + const { connect: tlsConnect } = await import("node:tls"); + return new Promise((resolve, reject) => { + const sock = tlsConnect({ host, port, servername: host }, () => { + const chunks: Uint8Array[] = []; + let resolveRead: ((r: { value?: Uint8Array; done: boolean }) => void) | null = null; + sock.on("data", (chunk: Buffer) => { + const u8 = new Uint8Array(chunk); + if (resolveRead) { + resolveRead({ value: u8, done: false }); + resolveRead = null; + } else { + chunks.push(u8); + } + }); + sock.on("end", () => resolveRead?.({ done: true })); + sock.on("error", reject); + // eslint-disable-next-line promise/no-multiple-resolved -- resolve happens once in connect callback + resolve({ + writer: { + write: (data) => + new Promise((res, rej) => + sock.write(data, (e: Error | null | undefined) => (e ? rej(e) : res())), + ), + close: () => new Promise((res) => sock.end(res)), + }, + reader: { + read: () => + new Promise((res) => { + if (chunks.length > 0) return res({ value: chunks.shift()!, done: false }); + resolveRead = res; + }), + }, + close: () => new Promise((res) => sock.end(res)), + }); + }); + sock.on("error", reject); + }); + } + + // STARTTLS on Node: plain socket, upgrade after EHLO + const { connect: netConnect } = await import("node:net"); + const { connect: tlsConnect, TLSSocket } = await import("node:tls"); + + return new Promise((resolve, reject) => { + const sock = netConnect({ host, port }, () => { + const chunks: Uint8Array[] = []; + let resolveRead: ((r: { value?: Uint8Array; done: boolean }) => void) | null = null; + sock.on("data", (chunk: Buffer) => { + const u8 = new Uint8Array(chunk); + if (resolveRead) { + resolveRead({ value: u8, done: false }); + resolveRead = null; + } else { + chunks.push(u8); + } + }); + sock.on("end", () => resolveRead?.({ done: true })); + sock.on("error", reject); + + // eslint-disable-next-line promise/no-multiple-resolved -- resolve happens once in connect callback + const makeSocket = (s: InstanceType | typeof sock): SmtpSocket => ({ + writer: { + write: (data) => + new Promise((res, rej) => + s.write(data, (e: Error | null | undefined) => (e ? rej(e) : res())), + ), + close: () => new Promise((res) => s.end(res)), + }, + reader: { + read: () => + new Promise((res) => { + if (chunks.length > 0) return res({ value: chunks.shift()!, done: false }); + resolveRead = res; + }), + }, + close: () => new Promise((res) => s.end(res)), + }); + + resolve({ + ...makeSocket(sock), + startTls: () => + new Promise((res, rej) => { + const tlsSock = tlsConnect({ socket: sock, servername: host }, () => { + chunks.length = 0; + tlsSock.on("data", (chunk: Buffer) => { + const u8 = new Uint8Array(chunk); + if (resolveRead) { + resolveRead({ value: u8, done: false }); + resolveRead = null; + } else { + chunks.push(u8); + } + }); + tlsSock.on("end", () => resolveRead?.({ done: true })); + tlsSock.on("error", rej); + res(makeSocket(tlsSock)); + }); + tlsSock.on("error", rej); + }), + }); + }); + sock.on("error", reject); + }); +} + +// --------------------------------------------------------------------------- +// SMTP session +// --------------------------------------------------------------------------- + +export interface SmtpConfig { + host: string; + port: number; + secure: "starttls" | "tls"; + user: string; + pass: string; + from?: string; + /** Connect + overall timeout in ms (default 30s) */ + timeoutMs?: number; +} + +/** Load SMTP config from env; returns null if not configured. */ +export function loadSmtpConfigFromEnv(): SmtpConfig | null { + const host = process.env.EMAIL_SMTP_HOST; + if (!host) return null; + const port = Number.parseInt(process.env.EMAIL_SMTP_PORT ?? "587", 10); + if (port === 25) { + throw new Error( + "EMAIL_SMTP_PORT=25 is not supported: Cloudflare blocks outbound port 25. " + + "Use 587 (STARTTLS) or 465 (implicit TLS) instead.", + ); + } + const secure = (process.env.EMAIL_SMTP_SECURE ?? (port === 465 ? "tls" : "starttls")) as "starttls" | "tls"; + if (secure !== "starttls" && secure !== "tls") { + throw new Error(`EMAIL_SMTP_SECURE must be "starttls" or "tls", got "${secure}"`); + } + const user = process.env.EMAIL_SMTP_USER; + const pass = process.env.EMAIL_SMTP_PASS; + if (!user || !pass) { + throw new Error("EMAIL_SMTP_USER and EMAIL_SMTP_PASS are required when EMAIL_SMTP_HOST is set"); + } + return { + host, + port, + secure, + user, + pass, + ...(process.env.EMAIL_SMTP_FROM ? { from: process.env.EMAIL_SMTP_FROM } : {}), + }; +} + +/** Deliver one message over SMTP. Throws on any protocol or network error. */ +export async function deliverSmtp( + config: SmtpConfig, + message: EmailDeliverEvent["message"], + ctx: PluginContext, + connectFn?: ConnectFn, +): Promise { + const from = config.from ? parseAddress(config.from) : { email: config.user }; + const timeoutMs = config.timeoutMs ?? 30_000; + + const connect: ConnectFn = + connectFn ?? + (async (host, port, secure) => { + // Prefer Cloudflare sockets when available (Workers runtime) + try { + return await connectCloudflare(host, port, secure); + } catch (cfError) { + // Fall back to Node sockets (astro dev, Node deployments) + try { + return await connectNode(host, port, secure); + } catch (nodeError) { + throw new Error( + `Failed to connect to SMTP server ${host}:${port} — ` + + `Cloudflare sockets: ${cfError instanceof Error ? cfError.message : String(cfError)}; ` + + `Node sockets: ${nodeError instanceof Error ? nodeError.message : String(nodeError)}`, + { cause: nodeError }, + ); + } + } + }); + + let socket: SmtpSocket | null = null; + const timer = setTimeout(() => { + socket?.close().catch(() => {}); + throw new Error(`SMTP operation timed out after ${timeoutMs}ms`); + }, timeoutMs); + + try { + socket = await connect(config.host, config.port, config.secure); + const buffered: Uint8Array[] = []; + + // Greeting + expectCode(await readReply(socket.reader, buffered), 220, "greeting"); + + const send = async (line: string) => { + await socket!.writer.write(encodeUtf8(`${line}\r\n`)); + }; + + // EHLO + await send(`EHLO emdash`); + expectCode(await readReply(socket.reader, buffered), 250, "EHLO"); + + // STARTTLS upgrade + if (config.secure === "starttls") { + if (!socket.startTls) throw new Error("STARTTLS requested but socket does not support upgrade"); + await send("STARTTLS"); + expectCode(await readReply(socket.reader, buffered), 220, "STARTTLS"); + socket = await socket.startTls(); + buffered.length = 0; + // Re-EHLO after TLS upgrade + await send(`EHLO emdash`); + expectCode(await readReply(socket.reader, buffered), 250, "EHLO after STARTTLS"); + } + + // AUTH LOGIN + await send("AUTH LOGIN"); + expectCode(await readReply(socket.reader, buffered), 334, "AUTH LOGIN"); + await send(b64(config.user)); + expectCode(await readReply(socket.reader, buffered), 334, "AUTH username"); + await send(b64(config.pass)); + expectCode(await readReply(socket.reader, buffered), 235, "AUTH password"); + + // Envelope + await send(`MAIL FROM:<${from.email}>`); + expectCode(await readReply(socket.reader, buffered), 250, "MAIL FROM"); + await send(`RCPT TO:<${message.to}>`); + expectCode(await readReply(socket.reader, buffered), [250, 251], "RCPT TO"); + + // Data + await send("DATA"); + expectCode(await readReply(socket.reader, buffered), 354, "DATA"); + const mime = buildMime({ + from, + to: message.to, + subject: message.subject, + text: message.text, + ...(message.html ? { html: message.html } : {}), + }); + await socket.writer.write(encodeUtf8(`${mime}\r\n.\r\n`)); + expectCode(await readReply(socket.reader, buffered), 250, "message accepted"); + + // Quit + await send("QUIT"); + + ctx.log.info("email delivered via SMTP", { + to: message.to, + subject: message.subject, + host: config.host, + port: config.port, + }); + } finally { + clearTimeout(timer); + await socket?.close().catch(() => {}); + } +} + +/** + * Build the email:deliver handler. + * + * Exported for testing — production code should use {@link createSmtpPlugin}. + */ +export function createSmtpEmailDeliver( + config: SmtpConfig, + connectFn?: ConnectFn, +): (event: EmailDeliverEvent, ctx: PluginContext) => Promise { + return async (event, ctx) => deliverSmtp(config, event.message, ctx, connectFn); +} diff --git a/packages/core/tests/unit/plugins/email-smtp.test.ts b/packages/core/tests/unit/plugins/email-smtp.test.ts new file mode 100644 index 0000000000..35c019a685 --- /dev/null +++ b/packages/core/tests/unit/plugins/email-smtp.test.ts @@ -0,0 +1,268 @@ +/** + * Unit tests for the built-in SMTP email transport. + * + * Mocks the socket layer to verify protocol flow (EHLO → STARTTLS → AUTH → + * MAIL FROM → RCPT TO → DATA → QUIT), error handling on bad reply codes, + * and config parsing from env vars. + */ + +import { describe, expect, it, vi } from "vitest"; + +import { createSmtpEmailDeliver, deliverSmtp, loadSmtpConfigFromEnv, type SmtpConfig } from "../../../src/plugins/email-smtp.js"; +import type { EmailDeliverEvent, PluginContext } from "../../../src/plugins/types.js"; + +// --------------------------------------------------------------------------- +// Mock socket helpers +// --------------------------------------------------------------------------- + +function makeReply(code: number, message = "OK"): string { + return `${code} ${message}\r\n`; +} + +/** Build a mock SmtpSocket that replays a scripted server conversation. */ +function mockSocket(script: string[]): { + socket: import("../../../src/plugins/email-smtp.js").SmtpSocket; + written: string[]; +} { + const written: string[] = []; + const incoming = script.map((s) => new TextEncoder().encode(s)); + let readIndex = 0; + + const makeReader = () => ({ + read: async () => { + if (readIndex >= incoming.length) return { done: true }; + return { value: incoming[readIndex++], done: false }; + }, + }); + + const socket: import("../../../src/plugins/email-smtp.js").SmtpSocket = { + writer: { + write: async (data: Uint8Array) => { + written.push(new TextDecoder().decode(data)); + }, + close: async () => {}, + }, + reader: makeReader(), + startTls: async () => { + // TLS upgrade: same underlying stream, continue with same reader queue + return { + writer: socket.writer, + reader: makeReader(), + close: socket.close, + }; + }, + close: async () => {}, + }; + + return { written, socket }; +} + +const baseConfig: SmtpConfig = { + host: "smtp.example.com", + port: 587, + secure: "starttls", + user: "user@example.com", + pass: "secret", + from: "Site ", +}; + +const mockCtx = { + log: { + info: vi.fn(), + warn: vi.fn(), + error: vi.fn(), + }, +} as unknown as PluginContext; + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe("loadSmtpConfigFromEnv", () => { + it("returns null when EMAIL_SMTP_HOST is unset", () => { + delete process.env.EMAIL_SMTP_HOST; + expect(loadSmtpConfigFromEnv()).toBeNull(); + }); + + it("parses a complete config", () => { + process.env.EMAIL_SMTP_HOST = "smtp-relay.brevo.com"; + process.env.EMAIL_SMTP_PORT = "587"; + process.env.EMAIL_SMTP_USER = "u"; + process.env.EMAIL_SMTP_PASS = "p"; + process.env.EMAIL_SMTP_FROM = "Site "; + + const config = loadSmtpConfigFromEnv(); + expect(config).toEqual({ + host: "smtp-relay.brevo.com", + port: 587, + secure: "starttls", + user: "u", + pass: "p", + from: "Site ", + }); + }); + + it("infers secure=tls for port 465", () => { + process.env.EMAIL_SMTP_HOST = "smtp.example.com"; + process.env.EMAIL_SMTP_PORT = "465"; + process.env.EMAIL_SMTP_USER = "u"; + process.env.EMAIL_SMTP_PASS = "p"; + delete process.env.EMAIL_SMTP_SECURE; + + const config = loadSmtpConfigFromEnv(); + expect(config?.secure).toBe("tls"); + }); + + it("refuses port 25", () => { + process.env.EMAIL_SMTP_HOST = "smtp.example.com"; + process.env.EMAIL_SMTP_PORT = "25"; + process.env.EMAIL_SMTP_USER = "u"; + process.env.EMAIL_SMTP_PASS = "p"; + + expect(() => loadSmtpConfigFromEnv()).toThrow(/port 25/); + }); + + it("throws when credentials are missing", () => { + process.env.EMAIL_SMTP_HOST = "smtp.example.com"; + process.env.EMAIL_SMTP_PORT = "587"; + delete process.env.EMAIL_SMTP_USER; + delete process.env.EMAIL_SMTP_PASS; + + expect(() => loadSmtpConfigFromEnv()).toThrow(/EMAIL_SMTP_USER/); + }); +}); + +describe("deliverSmtp", () => { + const message: EmailDeliverEvent["message"] = { + to: "recipient@example.com", + subject: "Hello", + text: "Plain body", + html: "

HTML body

", + }; + + it("completes a full STARTTLS session", async () => { + const script = [ + makeReply(220, "smtp.example.com ESMTP ready"), + makeReply(250, "smtp.example.com greets emdash"), + makeReply(220, "Go ahead with TLS"), + makeReply(250, "smtp.example.com greets emdash"), + makeReply(334, "VXNlciBOYW1lAA=="), + makeReply(334, "UGFzc3dvcmQA"), + makeReply(235, "Authentication successful"), + makeReply(250, "Sender OK"), + makeReply(250, "Recipient OK"), + makeReply(354, "End data with ."), + makeReply(250, "Message accepted"), + ]; + + const { socket, written } = mockSocket(script); + const connectFn = vi.fn(async () => socket); + + await deliverSmtp(baseConfig, message, mockCtx, connectFn); + + expect(connectFn).toHaveBeenCalledWith("smtp.example.com", 587, "starttls"); + + const transcript = written.join(""); + expect(transcript).toContain("EHLO emdash\r\n"); + expect(transcript).toContain("STARTTLS\r\n"); + expect(transcript).toContain("AUTH LOGIN\r\n"); + expect(transcript).toContain("MAIL FROM:\r\n"); + expect(transcript).toContain("RCPT TO:\r\n"); + expect(transcript).toContain("DATA\r\n"); + expect(transcript).toContain("Subject: Hello\r\n"); + expect(transcript).toContain("QUIT\r\n"); + + expect(mockCtx.log.info).toHaveBeenCalledWith( + "email delivered via SMTP", + expect.objectContaining({ to: "recipient@example.com", subject: "Hello" }), + ); + }); + + it("throws on AUTH failure", async () => { + const script = [ + makeReply(220, "ready"), + makeReply(250, "EHLO ok"), + makeReply(220, "TLS go"), + makeReply(250, "EHLO ok"), + makeReply(334, "Username"), + makeReply(334, "Password"), + makeReply(535, "Authentication failed"), + ]; + + const { socket } = mockSocket(script); + const connectFn = vi.fn(async () => socket); + + await expect(deliverSmtp(baseConfig, message, mockCtx, connectFn)).rejects.toThrow( + /AUTH password failed.*535/, + ); + }); + + it("throws on bad greeting", async () => { + const script = [makeReply(554, "Service unavailable")]; + const { socket } = mockSocket(script); + const connectFn = vi.fn(async () => socket); + + await expect(deliverSmtp(baseConfig, message, mockCtx, connectFn)).rejects.toThrow( + /greeting failed.*554/, + ); + }); + + it("dot-stuffs lines starting with a period", async () => { + const script = [ + makeReply(220, "ready"), + makeReply(250, "EHLO ok"), + makeReply(220, "TLS go"), + makeReply(250, "EHLO ok"), + makeReply(334, "Username"), + makeReply(334, "Password"), + makeReply(235, "Auth ok"), + makeReply(250, "Sender OK"), + makeReply(250, "Recipient OK"), + makeReply(354, "Go ahead"), + makeReply(250, "Accepted"), + ]; + + const { socket, written } = mockSocket(script); + const connectFn = vi.fn(async () => socket); + + await deliverSmtp( + baseConfig, + { ...message, text: "Line one\n.Line two starts with dot\nLine three" }, + mockCtx, + connectFn, + ); + + const transcript = written.join(""); + expect(transcript).toContain("..Line two starts with dot"); + }); +}); + +describe("createSmtpEmailDeliver", () => { + it("returns a handler that calls deliverSmtp", async () => { + const script = [ + makeReply(220, "ready"), + makeReply(250, "EHLO ok"), + makeReply(220, "TLS go"), + makeReply(250, "EHLO ok"), + makeReply(334, "Username"), + makeReply(334, "Password"), + makeReply(235, "Auth ok"), + makeReply(250, "Sender OK"), + makeReply(250, "Recipient OK"), + makeReply(354, "Go ahead"), + makeReply(250, "Accepted"), + ]; + + const { socket } = mockSocket(script); + const connectFn = vi.fn(async () => socket); + const handler = createSmtpEmailDeliver(baseConfig, connectFn); + + const event: EmailDeliverEvent = { + message: { to: "a@b.com", subject: "S", text: "T" }, + source: "test", + }; + + await expect(handler(event, mockCtx)).resolves.toBeUndefined(); + expect(connectFn).toHaveBeenCalled(); + }); +}); From 854f2b8d478ad687eb62af45605251ada3ad3ae9 Mon Sep 17 00:00:00 2001 From: "emdashbot[bot]" Date: Mon, 20 Jul 2026 21:42:10 +0000 Subject: [PATCH 02/33] style: format --- packages/core/src/emdash-runtime.ts | 6 +- packages/core/src/plugins/email-smtp.ts | 80 +++++++++++-------- .../tests/unit/plugins/email-smtp.test.ts | 7 +- 3 files changed, 59 insertions(+), 34 deletions(-) diff --git a/packages/core/src/emdash-runtime.ts b/packages/core/src/emdash-runtime.ts index f2dfe3a97f..8c7f68a2df 100644 --- a/packages/core/src/emdash-runtime.ts +++ b/packages/core/src/emdash-runtime.ts @@ -172,7 +172,11 @@ import { getDb } from "./loader.js"; import { CronExecutor, type InvokeCronHookFn } from "./plugins/cron.js"; import { definePlugin } from "./plugins/define-plugin.js"; import { DEV_CONSOLE_EMAIL_PLUGIN_ID, devConsoleEmailDeliver } from "./plugins/email-console.js"; -import { createSmtpEmailDeliver, loadSmtpConfigFromEnv, SMTP_EMAIL_PLUGIN_ID } from "./plugins/email-smtp.js"; +import { + createSmtpEmailDeliver, + loadSmtpConfigFromEnv, + SMTP_EMAIL_PLUGIN_ID, +} from "./plugins/email-smtp.js"; import { EmailPipeline } from "./plugins/email.js"; import { createHookPipeline, diff --git a/packages/core/src/plugins/email-smtp.ts b/packages/core/src/plugins/email-smtp.ts index 501c64a338..a2194edf51 100644 --- a/packages/core/src/plugins/email-smtp.ts +++ b/packages/core/src/plugins/email-smtp.ts @@ -42,11 +42,7 @@ export interface SmtpSocket { close(): Promise; } -type ConnectFn = ( - host: string, - port: number, - secure: "starttls" | "tls", -) => Promise; +type ConnectFn = (host: string, port: number, secure: "starttls" | "tls") => Promise; function encodeUtf8(input: string): Uint8Array { return new TextEncoder().encode(input); @@ -92,7 +88,10 @@ async function readLine(reader: SocketReader, buffered: Uint8Array[]): Promise { +async function readReply( + reader: SocketReader, + buffered: Uint8Array[], +): Promise<{ code: number; lines: string[] }> { const lines: string[] = []; while (true) { const line = await readLine(reader, buffered); @@ -105,10 +104,16 @@ async function readReply(reader: SocketReader, buffered: Uint8Array[]): Promise< } /** Assert reply code matches expectation; throw with server message otherwise. */ -function expectCode(reply: { code: number; lines: string[] }, expected: number | number[], context: string): void { +function expectCode( + reply: { code: number; lines: string[] }, + expected: number | number[], + context: string, +): void { const codes = Array.isArray(expected) ? expected : [expected]; if (!codes.includes(reply.code)) { - throw new Error(`SMTP ${context} failed: expected ${codes.join("/")}, got ${reply.code} — ${reply.lines.join(" | ")}`); + throw new Error( + `SMTP ${context} failed: expected ${codes.join("/")}, got ${reply.code} — ${reply.lines.join(" | ")}`, + ); } } @@ -187,7 +192,11 @@ function buildMime(params: { // Runtime-specific connect implementations // --------------------------------------------------------------------------- -async function connectCloudflare(host: string, port: number, secure: "starttls" | "tls"): Promise { +async function connectCloudflare( + host: string, + port: number, + secure: "starttls" | "tls", +): Promise { // @ts-expect-error — virtual module only available on Cloudflare Workers const { connect } = await import("cloudflare:sockets"); @@ -230,7 +239,11 @@ async function connectCloudflare(host: string, port: number, secure: "starttls" }; } -async function connectNode(host: string, port: number, secure: "starttls" | "tls"): Promise { +async function connectNode( + host: string, + port: number, + secure: "starttls" | "tls", +): Promise { if (secure === "tls") { const { connect: tlsConnect } = await import("node:tls"); return new Promise((resolve, reject) => { @@ -246,18 +259,18 @@ async function connectNode(host: string, port: number, secure: "starttls" | "tls chunks.push(u8); } }); - sock.on("end", () => resolveRead?.({ done: true })); - sock.on("error", reject); - // eslint-disable-next-line promise/no-multiple-resolved -- resolve happens once in connect callback - resolve({ - writer: { - write: (data) => - new Promise((res, rej) => - sock.write(data, (e: Error | null | undefined) => (e ? rej(e) : res())), - ), - close: () => new Promise((res) => sock.end(res)), - }, - reader: { + sock.on("end", () => resolveRead?.({ done: true })); + sock.on("error", reject); + // eslint-disable-next-line promise/no-multiple-resolved -- resolve happens once in connect callback + resolve({ + writer: { + write: (data) => + new Promise((res, rej) => + sock.write(data, (e: Error | null | undefined) => (e ? rej(e) : res())), + ), + close: () => new Promise((res) => sock.end(res)), + }, + reader: { read: () => new Promise((res) => { if (chunks.length > 0) return res({ value: chunks.shift()!, done: false }); @@ -363,7 +376,9 @@ export function loadSmtpConfigFromEnv(): SmtpConfig | null { "Use 587 (STARTTLS) or 465 (implicit TLS) instead.", ); } - const secure = (process.env.EMAIL_SMTP_SECURE ?? (port === 465 ? "tls" : "starttls")) as "starttls" | "tls"; + const secure = (process.env.EMAIL_SMTP_SECURE ?? (port === 465 ? "tls" : "starttls")) as + | "starttls" + | "tls"; if (secure !== "starttls" && secure !== "tls") { throw new Error(`EMAIL_SMTP_SECURE must be "starttls" or "tls", got "${secure}"`); } @@ -402,14 +417,14 @@ export async function deliverSmtp( // Fall back to Node sockets (astro dev, Node deployments) try { return await connectNode(host, port, secure); - } catch (nodeError) { - throw new Error( - `Failed to connect to SMTP server ${host}:${port} — ` + - `Cloudflare sockets: ${cfError instanceof Error ? cfError.message : String(cfError)}; ` + - `Node sockets: ${nodeError instanceof Error ? nodeError.message : String(nodeError)}`, - { cause: nodeError }, - ); - } + } catch (nodeError) { + throw new Error( + `Failed to connect to SMTP server ${host}:${port} — ` + + `Cloudflare sockets: ${cfError instanceof Error ? cfError.message : String(cfError)}; ` + + `Node sockets: ${nodeError instanceof Error ? nodeError.message : String(nodeError)}`, + { cause: nodeError }, + ); + } } }); @@ -436,7 +451,8 @@ export async function deliverSmtp( // STARTTLS upgrade if (config.secure === "starttls") { - if (!socket.startTls) throw new Error("STARTTLS requested but socket does not support upgrade"); + if (!socket.startTls) + throw new Error("STARTTLS requested but socket does not support upgrade"); await send("STARTTLS"); expectCode(await readReply(socket.reader, buffered), 220, "STARTTLS"); socket = await socket.startTls(); diff --git a/packages/core/tests/unit/plugins/email-smtp.test.ts b/packages/core/tests/unit/plugins/email-smtp.test.ts index 35c019a685..7d5f244bb4 100644 --- a/packages/core/tests/unit/plugins/email-smtp.test.ts +++ b/packages/core/tests/unit/plugins/email-smtp.test.ts @@ -8,7 +8,12 @@ import { describe, expect, it, vi } from "vitest"; -import { createSmtpEmailDeliver, deliverSmtp, loadSmtpConfigFromEnv, type SmtpConfig } from "../../../src/plugins/email-smtp.js"; +import { + createSmtpEmailDeliver, + deliverSmtp, + loadSmtpConfigFromEnv, + type SmtpConfig, +} from "../../../src/plugins/email-smtp.js"; import type { EmailDeliverEvent, PluginContext } from "../../../src/plugins/types.js"; // --------------------------------------------------------------------------- From c64a20b72cebc1c95745f8b9480f23c20306b1e4 Mon Sep 17 00:00:00 2001 From: swissky <30409887+swissky@users.noreply.github.com> Date: Tue, 21 Jul 2026 08:41:10 +0200 Subject: [PATCH 03/33] feat(core): SMTP email transport with admin UI configuration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends the built-in SMTP email provider to be configurable via Settings → Email in the admin UI, not just environment variables. - DB-backed SMTP config (encrypted with EMDASH_ENCRYPTION_KEY) - Provider selection dropdown (None / SMTP / Cloudflare Email) - PUT /_emdash/api/settings/email endpoint for saving config - SMTP form with host, port, security, user, password, sender - Cloudflare Email option (requires astro.config.mjs + wrangler binding) - Test email button for verifying the full pipeline - Unit tests for DB config save/load/clear/encrypt The password is AES-GCM encrypted with the same key used for plugin secrets. Environment variables remain as a fallback when no DB config is stored. --- .changeset/smtp-email-transport.md | 2 +- .../src/components/settings/EmailSettings.tsx | 229 +++++++++++++++++- packages/admin/src/lib/api/email-settings.ts | 38 +++ .../src/astro/routes/api/settings/email.ts | 143 +++++++++++ packages/core/src/emdash-runtime.ts | 18 +- packages/core/src/plugins/email-smtp.ts | 85 +++++++ .../tests/unit/plugins/email-smtp.test.ts | 144 ++++++++++- 7 files changed, 648 insertions(+), 11 deletions(-) diff --git a/.changeset/smtp-email-transport.md b/.changeset/smtp-email-transport.md index 74bcd41b22..04dec3fdd9 100644 --- a/.changeset/smtp-email-transport.md +++ b/.changeset/smtp-email-transport.md @@ -2,4 +2,4 @@ "emdash": minor --- -Adds a built-in SMTP email transport for generic SMTP credentials (Brevo relay, Office365, Fastmail, Amazon SES, self-hosted Postfix). Configure via `EMAIL_SMTP_HOST`, `EMAIL_SMTP_PORT`, `EMAIL_SMTP_USER`, `EMAIL_SMTP_PASS`, and optional `EMAIL_SMTP_FROM` env vars. Supports STARTTLS (port 587) and implicit TLS (port 465); port 25 is refused with a clear error because Cloudflare blocks it. Works on Cloudflare Workers (via `cloudflare:sockets`) and Node (via `node:net`/`node:tls`). Sandboxed plugins cannot open TCP sockets, so this lives in core — explicitly selected plugin transports still take precedence. +Adds a built-in SMTP email transport for generic SMTP credentials (Brevo relay, Office365, Fastmail, Amazon SES, self-hosted Postfix). Configure via `EMAIL_SMTP_HOST`, `EMAIL_SMTP_PORT`, `EMAIL_SMTP_USER`, `EMAIL_SMTP_PASS`, and optional `EMAIL_SMTP_FROM` env vars, or via the new Settings → Email admin UI (password stored encrypted). Supports STARTTLS (port 587) and implicit TLS (port 465); port 25 is refused with a clear error. Works on Cloudflare Workers and Node. diff --git a/packages/admin/src/components/settings/EmailSettings.tsx b/packages/admin/src/components/settings/EmailSettings.tsx index 07c3e9f90a..edcfe414dd 100644 --- a/packages/admin/src/components/settings/EmailSettings.tsx +++ b/packages/admin/src/components/settings/EmailSettings.tsx @@ -2,34 +2,53 @@ * Email settings page * * Shows current email pipeline status, provider info, and allows - * sending a test email through the full pipeline. + * configuring the active email provider and sending a test email. */ -import { Button, Input, Loader, useKumoToastManager } from "@cloudflare/kumo"; +import { Button, Input, Loader, Select, useKumoToastManager } from "@cloudflare/kumo"; import { useLingui } from "@lingui/react/macro"; import { CheckCircle, Envelope, + Gear, PaperPlaneTilt, PlugsConnected, WarningCircle, } from "@phosphor-icons/react"; -import { useMutation, useQuery } from "@tanstack/react-query"; +import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import * as React from "react"; import { fetchEmailSettings, + saveEmailSettings, sendTestEmail, + type EmailProviderChoice, type EmailSettings as EmailSettingsData, } from "../../lib/api/email-settings.js"; import { getMutationError } from "../DialogError.js"; import { BackToSettingsLink } from "./BackToSettingsLink.js"; +const PROVIDER_OPTIONS: { value: EmailProviderChoice; label: string }[] = [ + { value: "none", label: "None" }, + { value: "smtp", label: "SMTP" }, + { value: "cloudflare", label: "Cloudflare Email" }, +]; + export function EmailSettings() { const { t } = useLingui(); const toastManager = useKumoToastManager(); + const queryClient = useQueryClient(); const [testEmail, setTestEmail] = React.useState(""); + // Provider selection + SMTP form state + const [provider, setProvider] = React.useState("none"); + const [smtpHost, setSmtpHost] = React.useState(""); + const [smtpPort, setSmtpPort] = React.useState("587"); + const [smtpSecure, setSmtpSecure] = React.useState<"starttls" | "tls">("starttls"); + const [smtpUser, setSmtpUser] = React.useState(""); + const [smtpPass, setSmtpPass] = React.useState(""); + const [smtpFrom, setSmtpFrom] = React.useState(""); + const { data: settings, isLoading, @@ -39,6 +58,39 @@ export function EmailSettings() { queryFn: fetchEmailSettings, }); + // Sync form state from fetched settings + React.useEffect(() => { + if (!settings) return; + if (settings.selectedProviderId === "emdash-smtp") { + setProvider("smtp"); + if (settings.smtp.host) setSmtpHost(settings.smtp.host); + if (settings.smtp.port) setSmtpPort(String(settings.smtp.port)); + if (settings.smtp.secure) setSmtpSecure(settings.smtp.secure); + if (settings.smtp.from) setSmtpFrom(settings.smtp.from); + } else if (settings.selectedProviderId === "emdash-cloudflare-email") { + setProvider("cloudflare"); + } else { + setProvider("none"); + } + }, [settings]); + + const saveMutation = useMutation({ + mutationFn: saveEmailSettings, + onSuccess: (result) => { + toastManager.add({ title: result.message, variant: "success", timeout: 5000 }); + setSmtpPass(""); // clear password field after save + void queryClient.invalidateQueries({ queryKey: ["email-settings"] }); + }, + onError: (error) => { + toastManager.add({ + title: t`Failed to save email settings`, + description: getMutationError(error) || t`An error occurred`, + variant: "error", + timeout: 5000, + }); + }, + }); + const testMutation = useMutation({ mutationFn: (to: string) => sendTestEmail(to), onSuccess: (result) => { @@ -55,6 +107,43 @@ export function EmailSettings() { }, }); + const handleSave = () => { + if (provider === "smtp") { + if (!smtpHost || !smtpUser) { + toastManager.add({ + title: t`Missing SMTP configuration`, + description: t`Host and user are required.`, + variant: "error", + timeout: 5000, + }); + return; + } + const port = Number.parseInt(smtpPort, 10); + if (Number.isNaN(port) || port < 1 || port > 65535) { + toastManager.add({ + title: t`Invalid port`, + description: t`Port must be between 1 and 65535.`, + variant: "error", + timeout: 5000, + }); + return; + } + saveMutation.mutate({ + provider: "smtp", + smtp: { + host: smtpHost, + port, + secure: smtpSecure, + user: smtpUser, + ...(smtpPass ? { pass: smtpPass } : {}), + ...(smtpFrom ? { from: smtpFrom } : {}), + }, + }); + } else { + saveMutation.mutate({ provider }); + } + }; + const handleTestSubmit = (e: React.FormEvent) => { e.preventDefault(); if (!testEmail) return; @@ -84,6 +173,10 @@ export function EmailSettings() { ); } + const hasCloudflareProvider = settings?.providers.some( + (p) => p.pluginId === "emdash-cloudflare-email", + ); + return (
{/* Header */} @@ -92,6 +185,97 @@ export function EmailSettings() {

{t`Email Settings`}

+ {/* Provider configuration */} +
+
+ +

{t`Email Provider`}

+
+ +
+ setSmtpHost(e.target.value)} + placeholder="smtp-relay.brevo.com" + required + /> + setSmtpPort(e.target.value)} + placeholder="587" + required + /> + setSmtpUser(e.target.value)} + placeholder="you@example.com" + required + /> + setSmtpPass(e.target.value)} + placeholder={ + settings?.smtp.configured && settings.smtp.source === "db" + ? t`Leave empty to keep current password` + : t`Enter SMTP password` + } + /> + setSmtpFrom(e.target.value)} + placeholder="Site Name " + /> +
+

+ {t`SMTP credentials are encrypted and stored in the database. The password field is write-only — leave it empty to keep the current password.`} +

+
+ )} + + {provider === "cloudflare" && ( +
+

+ {t`Cloudflare Email uses the native send_email binding. Configure the sender address in your astro.config.mjs and add the EMAIL binding to wrangler.jsonc.`} +

+
+ )} + + + + + {/* Pipeline status */}
@@ -102,6 +286,45 @@ export function EmailSettings() {
+ {/* SMTP transport status */} + {settings?.smtp.configured && ( +
+
+ +

{t`SMTP Transport`}

+
+
+
+
+

{t`Host`}

+

{settings.smtp.host}

+
+
+

{t`Port`}

+

{settings.smtp.port}

+
+
+

{t`Security`}

+

+ {settings.smtp.secure === "tls" ? t`Implicit TLS` : t`STARTTLS`} +

+
+ {settings.smtp.from && ( +
+

{t`Default sender`}

+

{settings.smtp.from}

+
+ )} +
+

+ {settings.smtp.source === "db" + ? t`SMTP is configured in the admin UI. Credentials are encrypted in the database.` + : t`SMTP is configured via environment variables on the server.`} +

+
+
+ )} + {/* Test email */} {settings?.available && (
diff --git a/packages/admin/src/lib/api/email-settings.ts b/packages/admin/src/lib/api/email-settings.ts index 2b64874beb..2367938a6a 100644 --- a/packages/admin/src/lib/api/email-settings.ts +++ b/packages/admin/src/lib/api/email-settings.ts @@ -15,6 +15,15 @@ export interface EmailProvider { pluginId: string; } +export interface SmtpConfigStatus { + configured: boolean; + source: "db" | "env" | null; + host?: string; + port?: number; + secure?: "starttls" | "tls"; + from?: string; +} + export interface EmailSettings { available: boolean; providers: EmailProvider[]; @@ -23,6 +32,7 @@ export interface EmailSettings { beforeSend: string[]; afterSend: string[]; }; + smtp: SmtpConfigStatus; } // ============================================================================= @@ -45,3 +55,31 @@ export async function sendTestEmail(to: string): Promise<{ success: boolean; mes i18n._(msg`Failed to send test email`), ); } + +export type EmailProviderChoice = "none" | "smtp" | "cloudflare"; + +export interface SaveEmailSettingsInput { + provider: EmailProviderChoice; + smtp?: { + host: string; + port: number; + secure: "starttls" | "tls"; + user: string; + pass?: string; + from?: string; + }; +} + +export async function saveEmailSettings( + input: SaveEmailSettingsInput, +): Promise<{ success: boolean; message: string }> { + const res = await apiFetch(`${API_BASE}/settings/email`, { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(input), + }); + return parseApiResponse<{ success: boolean; message: string }>( + res, + i18n._(msg`Failed to save email settings`), + ); +} diff --git a/packages/core/src/astro/routes/api/settings/email.ts b/packages/core/src/astro/routes/api/settings/email.ts index ce50c88ff3..8a19c466af 100644 --- a/packages/core/src/astro/routes/api/settings/email.ts +++ b/packages/core/src/astro/routes/api/settings/email.ts @@ -13,6 +13,13 @@ import { requirePerm } from "#api/authorize.js"; import { apiError, apiSuccess, handleError } from "#api/error.js"; import { isParseError, parseBody } from "#api/parse.js"; import { OptionsRepository } from "#db/repositories/options.js"; +import { + clearSmtpConfigFromDb, + loadSmtpConfigFromDb, + loadSmtpConfigFromEnv, + saveSmtpConfigToDb, + SMTP_EMAIL_PLUGIN_ID, +} from "#plugins/email-smtp.js"; export const prerender = false; @@ -58,6 +65,44 @@ export const GET: APIRoute = async ({ locals }) => { .getHookProviders(EMAIL_AFTER_SEND_HOOK) .map((p) => p.pluginId); + // SMTP transport status — DB config takes precedence over env vars + let smtpStatus: { + configured: boolean; + source: "db" | "env" | null; + host?: string; + port?: number; + secure?: "starttls" | "tls"; + from?: string; + } = { configured: false, source: null }; + try { + const encryptionKey = + import.meta.env.EMDASH_ENCRYPTION_KEY ?? process.env.EMDASH_ENCRYPTION_KEY; + const dbConfig = encryptionKey ? await loadSmtpConfigFromDb(emdash.db, encryptionKey) : null; + const envConfig = loadSmtpConfigFromEnv(); + + if (dbConfig) { + smtpStatus = { + configured: true, + source: "db", + host: dbConfig.host, + port: dbConfig.port, + secure: dbConfig.secure, + ...(dbConfig.from ? { from: dbConfig.from } : {}), + }; + } else if (envConfig) { + smtpStatus = { + configured: true, + source: "env", + host: envConfig.host, + port: envConfig.port, + secure: envConfig.secure, + ...(envConfig.from ? { from: envConfig.from } : {}), + }; + } + } catch { + // Invalid SMTP config — show as unconfigured rather than breaking the page + } + return apiSuccess({ available: emdash.email?.isAvailable() ?? false, providers: providers.map((p) => ({ @@ -68,6 +113,7 @@ export const GET: APIRoute = async ({ locals }) => { beforeSend: beforeSendPlugins, afterSend: afterSendPlugins, }, + smtp: smtpStatus, }); } catch (error) { return handleError(error, "Failed to get email settings", "EMAIL_SETTINGS_READ_ERROR"); @@ -143,3 +189,100 @@ export const POST: APIRoute = async ({ request, locals }) => { return handleError(error, "Failed to send test email", "EMAIL_TEST_ERROR"); } }; + +// --------------------------------------------------------------------------- +// PUT /_emdash/api/settings/email — configure email provider +// --------------------------------------------------------------------------- + +const smtpConfigSchema = z.object({ + host: z.string().min(1), + port: z.number().int().min(1).max(65535), + secure: z.enum(["starttls", "tls"]), + user: z.string().min(1), + pass: z.string().min(1).optional(), // undefined = keep existing password + from: z.string().optional(), +}); + +const emailSettingsBody = z.discriminatedUnion("provider", [ + z.object({ provider: z.literal("none") }), + z.object({ provider: z.literal("smtp"), smtp: smtpConfigSchema }), + z.object({ provider: z.literal("cloudflare") }), +]); + +export const PUT: APIRoute = async ({ request, locals }) => { + const { emdash, user } = locals; + + if (!emdash?.db) { + return apiError("NOT_CONFIGURED", "EmDash is not initialized", 500); + } + + const denied = requirePerm(user, "settings:manage"); + if (denied) return denied; + + try { + const body = await parseBody(request, emailSettingsBody); + if (isParseError(body)) return body; + + const encryptionKey = + import.meta.env.EMDASH_ENCRYPTION_KEY ?? process.env.EMDASH_ENCRYPTION_KEY; + + switch (body.provider) { + case "none": { + // Clear SMTP config and deselect provider + await clearSmtpConfigFromDb(emdash.db); + emdash.hooks.clearExclusiveSelection(EMAIL_DELIVER_HOOK); + return apiSuccess({ success: true, message: "Email provider disabled" }); + } + + case "smtp": { + if (!encryptionKey) { + return apiError( + "ENCRYPTION_KEY_MISSING", + "EMDASH_ENCRYPTION_KEY is required to store SMTP credentials securely", + 500, + ); + } + + // If no new password provided, keep the existing one from DB + let pass = body.smtp.pass; + if (!pass) { + const existing = await loadSmtpConfigFromDb(emdash.db, encryptionKey); + if (!existing) { + return apiError( + "VALIDATION_ERROR", + "Password is required for initial SMTP configuration", + 400, + ); + } + pass = existing.pass; + } + + await saveSmtpConfigToDb(emdash.db, encryptionKey, { + host: body.smtp.host, + port: body.smtp.port, + secure: body.smtp.secure, + user: body.smtp.user, + pass, + ...(body.smtp.from ? { from: body.smtp.from } : {}), + }); + + // Select SMTP as the active provider + emdash.hooks.setExclusiveSelection(EMAIL_DELIVER_HOOK, SMTP_EMAIL_PLUGIN_ID); + + return apiSuccess({ success: true, message: "SMTP configured and activated" }); + } + + case "cloudflare": { + // Cloudflare Email is configured via astro.config.mjs (from, replyTo, binding) + // and the send_email binding in wrangler.jsonc. Nothing to store in DB. + emdash.hooks.setExclusiveSelection(EMAIL_DELIVER_HOOK, "emdash-cloudflare-email"); + return apiSuccess({ + success: true, + message: "Cloudflare Email selected (configure in astro.config.mjs)", + }); + } + } + } catch (error) { + return handleError(error, "Failed to save email settings", "EMAIL_SETTINGS_SAVE_ERROR"); + } +}; diff --git a/packages/core/src/emdash-runtime.ts b/packages/core/src/emdash-runtime.ts index 8c7f68a2df..698896b05b 100644 --- a/packages/core/src/emdash-runtime.ts +++ b/packages/core/src/emdash-runtime.ts @@ -174,6 +174,7 @@ import { definePlugin } from "./plugins/define-plugin.js"; import { DEV_CONSOLE_EMAIL_PLUGIN_ID, devConsoleEmailDeliver } from "./plugins/email-console.js"; import { createSmtpEmailDeliver, + loadSmtpConfig, loadSmtpConfigFromEnv, SMTP_EMAIL_PLUGIN_ID, } from "./plugins/email-smtp.js"; @@ -1304,12 +1305,17 @@ export class EmDashRuntime { } // Register built-in SMTP email provider when EMAIL_SMTP_* env vars are - // present. This is the only transport that works with generic SMTP - // credentials (Brevo relay, Office365, Fastmail, self-hosted Postfix) - // because sandboxed plugins cannot open TCP sockets. Registered as a - // built-in so it participates in exclusive hook resolution like any - // other provider — explicitly-selected plugin transports still win. - const smtpConfig = loadSmtpConfigFromEnv(); + // present or when configured in the admin UI (stored in DB). This is the + // only transport that works with generic SMTP credentials (Brevo relay, + // Office365, Fastmail, self-hosted Postfix) because sandboxed plugins + // cannot open TCP sockets. Registered as a built-in so it participates + // in exclusive hook resolution like any other provider — explicitly- + // selected plugin transports still win. + const encryptionKey = + import.meta.env.EMDASH_ENCRYPTION_KEY ?? process.env.EMDASH_ENCRYPTION_KEY; + const smtpConfig = encryptionKey + ? await loadSmtpConfig(db, encryptionKey) + : loadSmtpConfigFromEnv(); if (smtpConfig) { try { const smtpPlugin = definePlugin({ diff --git a/packages/core/src/plugins/email-smtp.ts b/packages/core/src/plugins/email-smtp.ts index a2194edf51..e612bb79e0 100644 --- a/packages/core/src/plugins/email-smtp.ts +++ b/packages/core/src/plugins/email-smtp.ts @@ -22,11 +22,20 @@ * a clear error. TLS is always required; plaintext auth is never attempted. */ +import { decrypt, encrypt } from "@emdash-cms/auth"; +import type { Kysely } from "kysely"; + +import { OptionsRepository } from "../database/repositories/options.js"; +import type { Database } from "../database/types.js"; import type { EmailDeliverEvent, PluginContext } from "./types.js"; /** Plugin ID for the built-in SMTP email provider */ export const SMTP_EMAIL_PLUGIN_ID = "emdash-smtp"; +/** Options key prefix for SMTP settings */ +const SMTP_OPTION_PREFIX = "emdash:email:smtp:"; +const SMTP_OPTION_PASSWORD = `${SMTP_OPTION_PREFIX}password`; + // --------------------------------------------------------------------------- // Socket abstraction — cloudflare:sockets on Workers, node:net/tls on Node // --------------------------------------------------------------------------- @@ -397,6 +406,82 @@ export function loadSmtpConfigFromEnv(): SmtpConfig | null { }; } +/** Load SMTP config from DB, decrypting the password with the encryption key. */ +export async function loadSmtpConfigFromDb( + db: Kysely, + encryptionKey: string, +): Promise { + const repo = new OptionsRepository(db); + const host = await repo.get(`${SMTP_OPTION_PREFIX}host`); + if (!host) return null; + + const port = await repo.get(`${SMTP_OPTION_PREFIX}port`); + const secure = await repo.get<"starttls" | "tls">(`${SMTP_OPTION_PREFIX}secure`); + const user = await repo.get(`${SMTP_OPTION_PREFIX}user`); + const encryptedPass = await repo.get(SMTP_OPTION_PASSWORD); + const from = await repo.get(`${SMTP_OPTION_PREFIX}from`); + + if (!port || !secure || !user || !encryptedPass) { + return null; + } + + const pass = await decrypt(encryptedPass, encryptionKey); + return { + host, + port, + secure, + user, + pass, + ...(from ? { from } : {}), + }; +} + +/** Save SMTP config to DB, encrypting the password with the encryption key. */ +export async function saveSmtpConfigToDb( + db: Kysely, + encryptionKey: string, + config: SmtpConfig, +): Promise { + const repo = new OptionsRepository(db); + await repo.set(`${SMTP_OPTION_PREFIX}host`, config.host); + await repo.set(`${SMTP_OPTION_PREFIX}port`, config.port); + await repo.set(`${SMTP_OPTION_PREFIX}secure`, config.secure); + await repo.set(`${SMTP_OPTION_PREFIX}user`, config.user); + await repo.set(SMTP_OPTION_PASSWORD, await encrypt(config.pass, encryptionKey)); + if (config.from) { + await repo.set(`${SMTP_OPTION_PREFIX}from`, config.from); + } else { + await repo.delete(`${SMTP_OPTION_PREFIX}from`); + } +} + +/** Clear all SMTP config from DB. */ +export async function clearSmtpConfigFromDb(db: Kysely): Promise { + const repo = new OptionsRepository(db); + await repo.delete(`${SMTP_OPTION_PREFIX}host`); + await repo.delete(`${SMTP_OPTION_PREFIX}port`); + await repo.delete(`${SMTP_OPTION_PREFIX}secure`); + await repo.delete(`${SMTP_OPTION_PREFIX}user`); + await repo.delete(SMTP_OPTION_PASSWORD); + await repo.delete(`${SMTP_OPTION_PREFIX}from`); +} + +/** + * Load SMTP config from DB first, then fall back to env vars. + * Returns null if neither is configured. + * + * The encryption key is the same `EMDASH_ENCRYPTION_KEY` used for plugin + * secrets — the SMTP password is a plugin secret in spirit. + */ +export async function loadSmtpConfig( + db: Kysely, + encryptionKey: string, +): Promise { + const dbConfig = await loadSmtpConfigFromDb(db, encryptionKey); + if (dbConfig) return dbConfig; + return loadSmtpConfigFromEnv(); +} + /** Deliver one message over SMTP. Throws on any protocol or network error. */ export async function deliverSmtp( config: SmtpConfig, diff --git a/packages/core/tests/unit/plugins/email-smtp.test.ts b/packages/core/tests/unit/plugins/email-smtp.test.ts index 7d5f244bb4..c22920c8cc 100644 --- a/packages/core/tests/unit/plugins/email-smtp.test.ts +++ b/packages/core/tests/unit/plugins/email-smtp.test.ts @@ -6,15 +6,22 @@ * and config parsing from env vars. */ -import { describe, expect, it, vi } from "vitest"; +import { describe, expect, it, vi, beforeEach, afterEach } from "vitest"; import { createSmtpEmailDeliver, deliverSmtp, + loadSmtpConfig, + loadSmtpConfigFromDb, loadSmtpConfigFromEnv, + saveSmtpConfigToDb, + clearSmtpConfigFromDb, type SmtpConfig, } from "../../../src/plugins/email-smtp.js"; import type { EmailDeliverEvent, PluginContext } from "../../../src/plugins/types.js"; +import { setupTestDatabase, teardownTestDatabase } from "../../utils/test-db.js"; +import type { Kysely } from "kysely"; +import type { Database as DatabaseSchema } from "../../../src/database/types.js"; // --------------------------------------------------------------------------- // Mock socket helpers @@ -271,3 +278,138 @@ describe("createSmtpEmailDeliver", () => { expect(connectFn).toHaveBeenCalled(); }); }); + +// --------------------------------------------------------------------------- +// DB-backed config +// --------------------------------------------------------------------------- + +const TEST_ENCRYPTION_KEY = + "emdash_enc_v1_SWmb1wDbtOn-lO8UJgsKIdNps4cwuN8IulWSqsspuM"; + +describe("loadSmtpConfigFromDb / saveSmtpConfigToDb / clearSmtpConfigFromDb", () => { + let db: Kysely; + + beforeEach(async () => { + db = await setupTestDatabase(); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("returns null when no config is stored", async () => { + const config = await loadSmtpConfigFromDb(db, TEST_ENCRYPTION_KEY); + expect(config).toBeNull(); + }); + + it("saves and loads a full config", async () => { + const input: SmtpConfig = { + host: "smtp.example.com", + port: 587, + secure: "starttls", + user: "user@example.com", + pass: "super-secret", + from: "Site ", + }; + + await saveSmtpConfigToDb(db, TEST_ENCRYPTION_KEY, input); + const loaded = await loadSmtpConfigFromDb(db, TEST_ENCRYPTION_KEY); + + expect(loaded).toEqual(input); + }); + + it("encrypts the password in the database", async () => { + const input: SmtpConfig = { + host: "smtp.example.com", + port: 587, + secure: "starttls", + user: "user@example.com", + pass: "super-secret", + }; + + await saveSmtpConfigToDb(db, TEST_ENCRYPTION_KEY, input); + + const repo = new (await import("../../../src/database/repositories/options.js")).OptionsRepository(db); + const raw = await repo.get("emdash:email:smtp:password"); + expect(raw).toBeDefined(); + expect(raw).not.toBe("super-secret"); + expect(typeof raw).toBe("string"); + }); + + it("clears all config", async () => { + const input: SmtpConfig = { + host: "smtp.example.com", + port: 587, + secure: "starttls", + user: "user@example.com", + pass: "super-secret", + }; + + await saveSmtpConfigToDb(db, TEST_ENCRYPTION_KEY, input); + await clearSmtpConfigFromDb(db); + + const loaded = await loadSmtpConfigFromDb(db, TEST_ENCRYPTION_KEY); + expect(loaded).toBeNull(); + }); +}); + +describe("loadSmtpConfig", () => { + let db: Kysely; + + beforeEach(async () => { + db = await setupTestDatabase(); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("prefers DB config over env vars", async () => { + // Set env vars + process.env.EMAIL_SMTP_HOST = "env-smtp.example.com"; + process.env.EMAIL_SMTP_PORT = "587"; + process.env.EMAIL_SMTP_USER = "env-user"; + process.env.EMAIL_SMTP_PASS = "env-pass"; + + // Set DB config + const dbConfig: SmtpConfig = { + host: "db-smtp.example.com", + port: 465, + secure: "tls", + user: "db-user", + pass: "db-pass", + }; + await saveSmtpConfigToDb(db, TEST_ENCRYPTION_KEY, dbConfig); + + const loaded = await loadSmtpConfig(db, TEST_ENCRYPTION_KEY); + expect(loaded?.host).toBe("db-smtp.example.com"); + expect(loaded?.port).toBe(465); + + // Cleanup env + delete process.env.EMAIL_SMTP_HOST; + delete process.env.EMAIL_SMTP_PORT; + delete process.env.EMAIL_SMTP_USER; + delete process.env.EMAIL_SMTP_PASS; + }); + + it("falls back to env vars when DB is empty", async () => { + process.env.EMAIL_SMTP_HOST = "env-smtp.example.com"; + process.env.EMAIL_SMTP_PORT = "587"; + process.env.EMAIL_SMTP_USER = "env-user"; + process.env.EMAIL_SMTP_PASS = "env-pass"; + + const loaded = await loadSmtpConfig(db, TEST_ENCRYPTION_KEY); + expect(loaded?.host).toBe("env-smtp.example.com"); + + delete process.env.EMAIL_SMTP_HOST; + delete process.env.EMAIL_SMTP_PORT; + delete process.env.EMAIL_SMTP_USER; + delete process.env.EMAIL_SMTP_PASS; + }); + + it("returns null when neither DB nor env is configured", async () => { + delete process.env.EMAIL_SMTP_HOST; + const loaded = await loadSmtpConfig(db, TEST_ENCRYPTION_KEY); + expect(loaded).toBeNull(); + }); +}); From 7d3d6c6acd5f4ec1fe713cbd3f2b8efbfed074c4 Mon Sep 17 00:00:00 2001 From: "emdashbot[bot]" Date: Tue, 21 Jul 2026 06:51:09 +0000 Subject: [PATCH 04/33] style: format --- packages/core/tests/unit/plugins/email-smtp.test.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/core/tests/unit/plugins/email-smtp.test.ts b/packages/core/tests/unit/plugins/email-smtp.test.ts index c22920c8cc..18e54787b1 100644 --- a/packages/core/tests/unit/plugins/email-smtp.test.ts +++ b/packages/core/tests/unit/plugins/email-smtp.test.ts @@ -6,8 +6,10 @@ * and config parsing from env vars. */ +import type { Kysely } from "kysely"; import { describe, expect, it, vi, beforeEach, afterEach } from "vitest"; +import type { Database as DatabaseSchema } from "../../../src/database/types.js"; import { createSmtpEmailDeliver, deliverSmtp, @@ -20,8 +22,6 @@ import { } from "../../../src/plugins/email-smtp.js"; import type { EmailDeliverEvent, PluginContext } from "../../../src/plugins/types.js"; import { setupTestDatabase, teardownTestDatabase } from "../../utils/test-db.js"; -import type { Kysely } from "kysely"; -import type { Database as DatabaseSchema } from "../../../src/database/types.js"; // --------------------------------------------------------------------------- // Mock socket helpers @@ -283,8 +283,7 @@ describe("createSmtpEmailDeliver", () => { // DB-backed config // --------------------------------------------------------------------------- -const TEST_ENCRYPTION_KEY = - "emdash_enc_v1_SWmb1wDbtOn-lO8UJgsKIdNps4cwuN8IulWSqsspuM"; +const TEST_ENCRYPTION_KEY = "emdash_enc_v1_SWmb1wDbtOn-lO8UJgsKIdNps4cwuN8IulWSqsspuM"; describe("loadSmtpConfigFromDb / saveSmtpConfigToDb / clearSmtpConfigFromDb", () => { let db: Kysely; @@ -329,7 +328,9 @@ describe("loadSmtpConfigFromDb / saveSmtpConfigToDb / clearSmtpConfigFromDb", () await saveSmtpConfigToDb(db, TEST_ENCRYPTION_KEY, input); - const repo = new (await import("../../../src/database/repositories/options.js")).OptionsRepository(db); + const repo = new ( + await import("../../../src/database/repositories/options.js") + ).OptionsRepository(db); const raw = await repo.get("emdash:email:smtp:password"); expect(raw).toBeDefined(); expect(raw).not.toBe("super-secret"); From 348260aa40f0ade01780b0c59b1aa98015747d4d Mon Sep 17 00:00:00 2001 From: swissky <30409887+swissky@users.noreply.github.com> Date: Tue, 21 Jul 2026 15:59:04 +0200 Subject: [PATCH 05/33] feat(core): email settings UI with SMTP + Cloudflare Email providers - Admin Email Settings: provider selection (none/SMTP/Cloudflare), structured sender fields (fromName/fromEmail/replyTo) for both - Built-in Cloudflare Email provider via send_email binding, always registered so it appears in Settings; config from DB or env vars - Explicit "none" selection persists (__none__ sentinel) so exclusive-hook resolution never auto-selects a provider again after restart - Test Binding button checks the send_email binding in the Worker runtime - Fix: strip emdash_enc_v1_ prefix before encrypt()/decrypt() for SMTP password storage (auth helpers expect raw base64url key material) --- .../src/components/settings/EmailSettings.tsx | 165 ++++++++++-- packages/admin/src/lib/api/email-settings.ts | 30 ++- packages/core/src/astro/integration/routes.ts | 6 + .../src/astro/routes/api/settings/email.ts | 98 +++++-- .../routes/api/settings/email/test-binding.ts | 61 +++++ packages/core/src/emdash-runtime.ts | 17 ++ packages/core/src/plugins/email-cloudflare.ts | 215 +++++++++++++++ packages/core/src/plugins/email-smtp.ts | 125 ++++++--- packages/core/src/plugins/hooks.ts | 36 ++- .../unit/plugins/email-cloudflare.test.ts | 252 ++++++++++++++++++ .../tests/unit/plugins/email-smtp.test.ts | 48 +++- .../unit/plugins/exclusive-hooks.test.ts | 59 +++- 12 files changed, 1010 insertions(+), 102 deletions(-) create mode 100644 packages/core/src/astro/routes/api/settings/email/test-binding.ts create mode 100644 packages/core/src/plugins/email-cloudflare.ts create mode 100644 packages/core/tests/unit/plugins/email-cloudflare.test.ts diff --git a/packages/admin/src/components/settings/EmailSettings.tsx b/packages/admin/src/components/settings/EmailSettings.tsx index edcfe414dd..1e00e490a2 100644 --- a/packages/admin/src/components/settings/EmailSettings.tsx +++ b/packages/admin/src/components/settings/EmailSettings.tsx @@ -22,6 +22,7 @@ import { fetchEmailSettings, saveEmailSettings, sendTestEmail, + testCloudflareBinding, type EmailProviderChoice, type EmailSettings as EmailSettingsData, } from "../../lib/api/email-settings.js"; @@ -47,7 +48,13 @@ export function EmailSettings() { const [smtpSecure, setSmtpSecure] = React.useState<"starttls" | "tls">("starttls"); const [smtpUser, setSmtpUser] = React.useState(""); const [smtpPass, setSmtpPass] = React.useState(""); - const [smtpFrom, setSmtpFrom] = React.useState(""); + const [smtpFromName, setSmtpFromName] = React.useState(""); + const [smtpFromEmail, setSmtpFromEmail] = React.useState(""); + const [smtpReplyTo, setSmtpReplyTo] = React.useState(""); + // Cloudflare form state + const [cfFromName, setCfFromName] = React.useState(""); + const [cfFromEmail, setCfFromEmail] = React.useState(""); + const [cfReplyTo, setCfReplyTo] = React.useState(""); const { data: settings, @@ -66,9 +73,14 @@ export function EmailSettings() { if (settings.smtp.host) setSmtpHost(settings.smtp.host); if (settings.smtp.port) setSmtpPort(String(settings.smtp.port)); if (settings.smtp.secure) setSmtpSecure(settings.smtp.secure); - if (settings.smtp.from) setSmtpFrom(settings.smtp.from); + if (settings.smtp.fromName) setSmtpFromName(settings.smtp.fromName); + if (settings.smtp.fromEmail) setSmtpFromEmail(settings.smtp.fromEmail); + if (settings.smtp.replyTo) setSmtpReplyTo(settings.smtp.replyTo); } else if (settings.selectedProviderId === "emdash-cloudflare-email") { setProvider("cloudflare"); + if (settings.cloudflare.fromName) setCfFromName(settings.cloudflare.fromName); + if (settings.cloudflare.fromEmail) setCfFromEmail(settings.cloudflare.fromEmail); + if (settings.cloudflare.replyTo) setCfReplyTo(settings.cloudflare.replyTo); } else { setProvider("none"); } @@ -107,6 +119,30 @@ export function EmailSettings() { }, }); + const bindingMutation = useMutation({ + mutationFn: testCloudflareBinding, + onSuccess: (result) => { + if (result.available) { + toastManager.add({ title: result.message, variant: "success", timeout: 5000 }); + } else { + toastManager.add({ + title: t`Binding not available`, + description: result.message, + variant: "warning", + timeout: 8000, + }); + } + }, + onError: (error) => { + toastManager.add({ + title: t`Failed to test binding`, + description: getMutationError(error) || t`An error occurred`, + variant: "error", + timeout: 5000, + }); + }, + }); + const handleSave = () => { if (provider === "smtp") { if (!smtpHost || !smtpUser) { @@ -136,7 +172,27 @@ export function EmailSettings() { secure: smtpSecure, user: smtpUser, ...(smtpPass ? { pass: smtpPass } : {}), - ...(smtpFrom ? { from: smtpFrom } : {}), + ...(smtpFromName.trim() ? { fromName: smtpFromName.trim() } : {}), + ...(smtpFromEmail.trim() ? { fromEmail: smtpFromEmail.trim() } : {}), + ...(smtpReplyTo.trim() ? { replyTo: smtpReplyTo.trim() } : {}), + }, + }); + } else if (provider === "cloudflare") { + if (!cfFromName.trim() || !cfFromEmail.trim()) { + toastManager.add({ + title: t`Missing Cloudflare Email configuration`, + description: t`Sender name and email are required.`, + variant: "error", + timeout: 5000, + }); + return; + } + saveMutation.mutate({ + provider: "cloudflare", + cloudflare: { + fromName: cfFromName.trim(), + fromEmail: cfFromEmail.trim(), + ...(cfReplyTo.trim() ? { replyTo: cfReplyTo.trim() } : {}), }, }); } else { @@ -250,10 +306,24 @@ export function EmailSettings() { } /> setSmtpFrom(e.target.value)} - placeholder="Site Name " + label={t`Sender name (optional)`} + value={smtpFromName} + onChange={(e) => setSmtpFromName(e.target.value)} + placeholder="Site Name" + /> + setSmtpFromEmail(e.target.value)} + placeholder="noreply@example.com" + /> + setSmtpReplyTo(e.target.value)} + placeholder="support@example.com" />

@@ -263,16 +333,51 @@ export function EmailSettings() { )} {provider === "cloudflare" && ( -

-

- {t`Cloudflare Email uses the native send_email binding. Configure the sender address in your astro.config.mjs and add the EMAIL binding to wrangler.jsonc.`} +

+
+ setCfFromName(e.target.value)} + placeholder="John Doe" + required + /> + setCfFromEmail(e.target.value)} + placeholder="noreply@example.com" + required + /> + setCfReplyTo(e.target.value)} + placeholder="support@example.com" + /> +
+

+ {t`Cloudflare Email uses the native send_email binding. Add the EMAIL binding to wrangler.jsonc. The sender must be a verified address on your Cloudflare account.`}

)} - +
+ + {provider === "cloudflare" && ( + + )} +
@@ -286,8 +391,8 @@ export function EmailSettings() { - {/* SMTP transport status */} - {settings?.smtp.configured && ( + {/* SMTP transport status — only shown when SMTP is the active provider */} + {settings?.smtp.configured && settings.selectedProviderId === "emdash-smtp" && (
@@ -309,10 +414,20 @@ export function EmailSettings() { {settings.smtp.secure === "tls" ? t`Implicit TLS` : t`STARTTLS`}

- {settings.smtp.from && ( + {settings.smtp.fromEmail && ( +
+

{t`Sender email`}

+

+ {settings.smtp.fromName + ? `${settings.smtp.fromName} <${settings.smtp.fromEmail}>` + : settings.smtp.fromEmail} +

+
+ )} + {settings.smtp.replyTo && (
-

{t`Default sender`}

-

{settings.smtp.from}

+

{t`Reply-to`}

+

{settings.smtp.replyTo}

)}
@@ -393,12 +508,14 @@ function PipelineStatus({ settings }: { settings: EmailSettingsData | undefined

{t`Email provider active`}

-

- {t`Provider:`}{" "} - - {settings.selectedProviderId || "default"} - -

+ {settings.selectedProviderId && ( +

+ {t`Provider:`}{" "} + + {settings.selectedProviderId} + +

+ )}
diff --git a/packages/admin/src/lib/api/email-settings.ts b/packages/admin/src/lib/api/email-settings.ts index 2367938a6a..ccf1133c04 100644 --- a/packages/admin/src/lib/api/email-settings.ts +++ b/packages/admin/src/lib/api/email-settings.ts @@ -21,7 +21,17 @@ export interface SmtpConfigStatus { host?: string; port?: number; secure?: "starttls" | "tls"; + fromName?: string; + fromEmail?: string; + replyTo?: string; +} + +export interface CloudflareConfigStatus { + configured: boolean; from?: string; + fromName?: string; + fromEmail?: string; + replyTo?: string; } export interface EmailSettings { @@ -33,6 +43,7 @@ export interface EmailSettings { afterSend: string[]; }; smtp: SmtpConfigStatus; + cloudflare: CloudflareConfigStatus; } // ============================================================================= @@ -66,7 +77,14 @@ export interface SaveEmailSettingsInput { secure: "starttls" | "tls"; user: string; pass?: string; - from?: string; + fromName?: string; + fromEmail?: string; + replyTo?: string; + }; + cloudflare?: { + fromName: string; + fromEmail: string; + replyTo?: string; }; } @@ -83,3 +101,13 @@ export async function saveEmailSettings( i18n._(msg`Failed to save email settings`), ); } + +export async function testCloudflareBinding(): Promise<{ available: boolean; message: string }> { + const res = await apiFetch(`${API_BASE}/settings/email/test-binding`, { + method: "POST", + }); + return parseApiResponse<{ available: boolean; message: string }>( + res, + i18n._(msg`Failed to test Cloudflare Email binding`), + ); +} diff --git a/packages/core/src/astro/integration/routes.ts b/packages/core/src/astro/integration/routes.ts index 82932bb271..3ff85e6381 100644 --- a/packages/core/src/astro/integration/routes.ts +++ b/packages/core/src/astro/integration/routes.ts @@ -351,6 +351,12 @@ export function injectCoreRoutes( entrypoint: resolveRoute("api/settings/email.ts"), }); + // Cloudflare Email binding check (sub-action of email settings) + injectRoute({ + pattern: "/_emdash/api/settings/email/test-binding", + entrypoint: resolveRoute("api/settings/email/test-binding.ts"), + }); + // Backup routes injectRoute({ pattern: "/_emdash/api/settings/backups", diff --git a/packages/core/src/astro/routes/api/settings/email.ts b/packages/core/src/astro/routes/api/settings/email.ts index 8a19c466af..192a7a7122 100644 --- a/packages/core/src/astro/routes/api/settings/email.ts +++ b/packages/core/src/astro/routes/api/settings/email.ts @@ -14,12 +14,18 @@ import { apiError, apiSuccess, handleError } from "#api/error.js"; import { isParseError, parseBody } from "#api/parse.js"; import { OptionsRepository } from "#db/repositories/options.js"; import { - clearSmtpConfigFromDb, + CLOUDFLARE_EMAIL_PLUGIN_ID, + loadCloudflareConfigFromDb, + loadCloudflareConfigFromEnv, + saveCloudflareConfigToDb, +} from "#plugins/email-cloudflare.js"; +import { loadSmtpConfigFromDb, loadSmtpConfigFromEnv, saveSmtpConfigToDb, SMTP_EMAIL_PLUGIN_ID, } from "#plugins/email-smtp.js"; +import { EXCLUSIVE_HOOK_NONE_VALUE } from "#plugins/hooks.js"; export const prerender = false; @@ -65,6 +71,36 @@ export const GET: APIRoute = async ({ locals }) => { .getHookProviders(EMAIL_AFTER_SEND_HOOK) .map((p) => p.pluginId); + // Cloudflare Email config — DB takes precedence over env vars + let cloudflareStatus: { + configured: boolean; + source: "db" | "env" | null; + fromName?: string; + fromEmail?: string; + replyTo?: string; + } = { configured: false, source: null }; + const dbCfConfig = await loadCloudflareConfigFromDb(emdash.db); + if (dbCfConfig) { + cloudflareStatus = { + configured: true, + source: "db", + fromName: dbCfConfig.fromName, + fromEmail: dbCfConfig.fromEmail, + ...(dbCfConfig.replyTo ? { replyTo: dbCfConfig.replyTo } : {}), + }; + } else { + const envCfConfig = loadCloudflareConfigFromEnv(); + if (envCfConfig) { + cloudflareStatus = { + configured: true, + source: "env", + fromName: envCfConfig.fromName, + fromEmail: envCfConfig.fromEmail, + ...(envCfConfig.replyTo ? { replyTo: envCfConfig.replyTo } : {}), + }; + } + } + // SMTP transport status — DB config takes precedence over env vars let smtpStatus: { configured: boolean; @@ -72,7 +108,9 @@ export const GET: APIRoute = async ({ locals }) => { host?: string; port?: number; secure?: "starttls" | "tls"; - from?: string; + fromName?: string; + fromEmail?: string; + replyTo?: string; } = { configured: false, source: null }; try { const encryptionKey = @@ -87,7 +125,9 @@ export const GET: APIRoute = async ({ locals }) => { host: dbConfig.host, port: dbConfig.port, secure: dbConfig.secure, - ...(dbConfig.from ? { from: dbConfig.from } : {}), + ...(dbConfig.fromName ? { fromName: dbConfig.fromName } : {}), + ...(dbConfig.fromEmail ? { fromEmail: dbConfig.fromEmail } : {}), + ...(dbConfig.replyTo ? { replyTo: dbConfig.replyTo } : {}), }; } else if (envConfig) { smtpStatus = { @@ -96,24 +136,29 @@ export const GET: APIRoute = async ({ locals }) => { host: envConfig.host, port: envConfig.port, secure: envConfig.secure, - ...(envConfig.from ? { from: envConfig.from } : {}), + ...(envConfig.fromName ? { fromName: envConfig.fromName } : {}), + ...(envConfig.fromEmail ? { fromEmail: envConfig.fromEmail } : {}), + ...(envConfig.replyTo ? { replyTo: envConfig.replyTo } : {}), }; } } catch { // Invalid SMTP config — show as unconfigured rather than breaking the page } + const explicitlyDisabled = selectedProviderId === EXCLUSIVE_HOOK_NONE_VALUE; + return apiSuccess({ - available: emdash.email?.isAvailable() ?? false, + available: explicitlyDisabled ? false : (emdash.email?.isAvailable() ?? false), providers: providers.map((p) => ({ pluginId: p.pluginId, })), - selectedProviderId: selectedProviderId ?? null, + selectedProviderId: explicitlyDisabled ? null : (selectedProviderId ?? null), middleware: { beforeSend: beforeSendPlugins, afterSend: afterSendPlugins, }, smtp: smtpStatus, + cloudflare: cloudflareStatus, }); } catch (error) { return handleError(error, "Failed to get email settings", "EMAIL_SETTINGS_READ_ERROR"); @@ -200,13 +245,21 @@ const smtpConfigSchema = z.object({ secure: z.enum(["starttls", "tls"]), user: z.string().min(1), pass: z.string().min(1).optional(), // undefined = keep existing password - from: z.string().optional(), + fromName: z.string().optional(), + fromEmail: z.string().email().optional(), + replyTo: z.string().email().optional(), +}); + +const cloudflareConfigSchema = z.object({ + fromName: z.string().min(1), + fromEmail: z.string().email(), + replyTo: z.string().email().optional(), }); const emailSettingsBody = z.discriminatedUnion("provider", [ z.object({ provider: z.literal("none") }), z.object({ provider: z.literal("smtp"), smtp: smtpConfigSchema }), - z.object({ provider: z.literal("cloudflare") }), + z.object({ provider: z.literal("cloudflare"), cloudflare: cloudflareConfigSchema }), ]); export const PUT: APIRoute = async ({ request, locals }) => { @@ -225,11 +278,15 @@ export const PUT: APIRoute = async ({ request, locals }) => { const encryptionKey = import.meta.env.EMDASH_ENCRYPTION_KEY ?? process.env.EMDASH_ENCRYPTION_KEY; + const optionsRepo = new OptionsRepository(emdash.db); + const optionKey = `emdash:exclusive_hook:${EMAIL_DELIVER_HOOK}`; switch (body.provider) { case "none": { - // Clear SMTP config and deselect provider - await clearSmtpConfigFromDb(emdash.db); + // Explicitly disable: store the none-sentinel (not a delete) so + // exclusive-hook resolution does not auto-select a provider again + // on the next startup. SMTP/Cloudflare config is kept for re-use. + await optionsRepo.set(optionKey, EXCLUSIVE_HOOK_NONE_VALUE); emdash.hooks.clearExclusiveSelection(EMAIL_DELIVER_HOOK); return apiSuccess({ success: true, message: "Email provider disabled" }); } @@ -263,22 +320,31 @@ export const PUT: APIRoute = async ({ request, locals }) => { secure: body.smtp.secure, user: body.smtp.user, pass, - ...(body.smtp.from ? { from: body.smtp.from } : {}), + ...(body.smtp.fromName ? { fromName: body.smtp.fromName } : {}), + ...(body.smtp.fromEmail ? { fromEmail: body.smtp.fromEmail } : {}), + ...(body.smtp.replyTo ? { replyTo: body.smtp.replyTo } : {}), }); - // Select SMTP as the active provider + // Persist and activate SMTP as the selected provider + await optionsRepo.set(optionKey, SMTP_EMAIL_PLUGIN_ID); emdash.hooks.setExclusiveSelection(EMAIL_DELIVER_HOOK, SMTP_EMAIL_PLUGIN_ID); return apiSuccess({ success: true, message: "SMTP configured and activated" }); } case "cloudflare": { - // Cloudflare Email is configured via astro.config.mjs (from, replyTo, binding) - // and the send_email binding in wrangler.jsonc. Nothing to store in DB. - emdash.hooks.setExclusiveSelection(EMAIL_DELIVER_HOOK, "emdash-cloudflare-email"); + // Save Cloudflare config to DB and select as active provider + await saveCloudflareConfigToDb(emdash.db, { + fromName: body.cloudflare.fromName, + fromEmail: body.cloudflare.fromEmail, + ...(body.cloudflare.replyTo ? { replyTo: body.cloudflare.replyTo } : {}), + }); + + await optionsRepo.set(optionKey, CLOUDFLARE_EMAIL_PLUGIN_ID); + emdash.hooks.setExclusiveSelection(EMAIL_DELIVER_HOOK, CLOUDFLARE_EMAIL_PLUGIN_ID); return apiSuccess({ success: true, - message: "Cloudflare Email selected (configure in astro.config.mjs)", + message: "Cloudflare Email configured and activated", }); } } diff --git a/packages/core/src/astro/routes/api/settings/email/test-binding.ts b/packages/core/src/astro/routes/api/settings/email/test-binding.ts new file mode 100644 index 0000000000..575bda9cfd --- /dev/null +++ b/packages/core/src/astro/routes/api/settings/email/test-binding.ts @@ -0,0 +1,61 @@ +/** + * Email Settings — Cloudflare Email binding check + * + * POST /_emdash/api/settings/email/test-binding + * + * Reports whether the Cloudflare `send_email` binding is present in the + * Worker runtime. Does not send an email — only checks the binding exists, + * so admins can validate their wrangler.jsonc before configuring the provider. + */ + +import type { APIRoute } from "astro"; + +import { requirePerm } from "#api/authorize.js"; +import { apiError, apiSuccess, handleError } from "#api/error.js"; + +export const prerender = false; + +export const POST: APIRoute = async ({ locals }) => { + const { emdash, user } = locals; + + if (!emdash?.db) { + return apiError("NOT_CONFIGURED", "EmDash is not initialized", 500); + } + + const denied = requirePerm(user, "settings:manage"); + if (denied) return denied; + + try { + // Check the actual send_email binding from the Cloudflare Workers runtime. + // The built-in provider is always registered, so we must verify the + // binding itself rather than the plugin's presence. + // @ts-ignore - virtual module, generated by the Astro integration + const { env } = (await import("virtual:emdash/env")) as { + env?: Record; + }; + if (!env) { + return apiSuccess({ + available: false, + message: + "Cloudflare Workers runtime not detected. The send_email binding only works on Cloudflare Workers (deployed or via astro dev with the Cloudflare adapter).", + }); + } + // eslint-disable-next-line typescript/no-unsafe-type-assertion -- binding shape validated by the send() check below + const binding = env.EMAIL as { send?: unknown } | undefined; + + if (!binding || typeof binding.send !== "function") { + return apiSuccess({ + available: false, + message: + 'send_email binding "EMAIL" not found. Add it to wrangler.jsonc: "send_email": [{ "name": "EMAIL" }], then redeploy.', + }); + } + + return apiSuccess({ + available: true, + message: "Cloudflare Email binding is available.", + }); + } catch (error) { + return handleError(error, "Failed to test binding", "EMAIL_BINDING_TEST_ERROR"); + } +}; diff --git a/packages/core/src/emdash-runtime.ts b/packages/core/src/emdash-runtime.ts index 698896b05b..ed15c8de3b 100644 --- a/packages/core/src/emdash-runtime.ts +++ b/packages/core/src/emdash-runtime.ts @@ -172,6 +172,10 @@ import { getDb } from "./loader.js"; import { CronExecutor, type InvokeCronHookFn } from "./plugins/cron.js"; import { definePlugin } from "./plugins/define-plugin.js"; import { DEV_CONSOLE_EMAIL_PLUGIN_ID, devConsoleEmailDeliver } from "./plugins/email-console.js"; +import { + createCloudflareEmailPlugin, + loadCloudflareConfig, +} from "./plugins/email-cloudflare.js"; import { createSmtpEmailDeliver, loadSmtpConfig, @@ -1336,6 +1340,19 @@ export class EmDashRuntime { } } + // Register built-in Cloudflare Email provider. Always registered + // (even unconfigured) so it appears in the Settings → Email list. + // Config comes from DB (Settings UI) or env vars; the send_email + // binding is checked at delivery time with a clear error message. + try { + const cloudflareConfig = await loadCloudflareConfig(db); + const cloudflarePlugin = createCloudflareEmailPlugin(cloudflareConfig); + allPipelinePlugins.push(cloudflarePlugin); + enabledPlugins.add(cloudflarePlugin.id); + } catch (error) { + console.warn("[email] Failed to register Cloudflare Email provider:", error); + } + // Register built-in default comment moderator. // Always present — auto-selected as the sole comment:moderate provider // unless a plugin (e.g. AI moderation) provides its own. diff --git a/packages/core/src/plugins/email-cloudflare.ts b/packages/core/src/plugins/email-cloudflare.ts new file mode 100644 index 0000000000..9bc94b5451 --- /dev/null +++ b/packages/core/src/plugins/email-cloudflare.ts @@ -0,0 +1,215 @@ +/** + * Built-in Cloudflare Email Provider + * + * Delivers EmDash emails through Cloudflare Email Sending via a + * `send_email` Worker binding. Registered as a built-in provider so it + * always appears in the Settings → Email provider list — no plugin + * registration in astro.config.mjs required. + * + * Configuration (in priority order): + * 1. Database (Settings → Email UI): fromName, fromEmail, replyTo + * 2. Env vars: EMAIL_FROM_NAME, EMAIL_FROM_EMAIL, EMAIL_REPLY_TO + * + * The `send_email` binding is checked at delivery time (and via the + * "Test binding" button in Settings → Email). If missing, delivery + * fails with a clear, actionable error message. + */ + +import type { Kysely } from "kysely"; + +import { OptionsRepository } from "../database/repositories/options.js"; +import type { Database } from "../database/types.js"; +import { definePlugin } from "./define-plugin.js"; +import type { EmailDeliverEvent, PluginContext, ResolvedPlugin } from "./types.js"; + +/** Plugin ID for the built-in Cloudflare Email provider */ +export const CLOUDFLARE_EMAIL_PLUGIN_ID = "emdash-cloudflare-email"; + +/** Options key prefix for Cloudflare Email settings */ +export const CLOUDFLARE_OPTION_PREFIX = "emdash:email:cloudflare:"; + +/** Cloudflare Email configuration */ +export interface CloudflareEmailConfig { + fromName: string; + fromEmail: string; + replyTo?: string; + /** Name of the send_email binding (default "EMAIL") */ + binding?: string; +} + +/** Minimal shape of the Email Sending binding (`send_email` in wrangler). */ +interface SendEmailBinding { + send(message: { + to: string | string[]; + from: { email: string; name?: string }; + subject: string; + text?: string; + html?: string; + replyTo?: string; + }): Promise<{ messageId?: string }>; +} + +/** + * Resolve the Worker env at delivery time. + * + * Hooks run without request context, so the binding cannot come from + * `Astro.locals.runtime`. The `cloudflare:workers` module exposes the + * same env to any code bundled into the Worker. + */ +async function loadWorkerEnv(): Promise> { + // Virtual module resolves to the Worker's `env` under @astrojs/cloudflare + // and to `undefined` on Node — never imports `cloudflare:workers` directly. + // @ts-ignore - virtual module, generated by the Astro integration + const { env } = (await import("virtual:emdash/env")) as { + env?: Record; + }; + if (!env) { + throw new Error( + "[cloudflare-email] Cloudflare Worker env is not available — this provider " + + "only runs on the Cloudflare Workers runtime (deployed or via astro dev " + + "with the Cloudflare adapter).", + ); + } + return env; +} + +/** + * Build the email:deliver handler for Cloudflare Email Sending. + * + * Exported for testing — production code should use the built-in plugin + * registration in the runtime. + */ +export function createCloudflareEmailDeliver( + config: CloudflareEmailConfig, + loadEnv: () => Promise> = loadWorkerEnv, +): (event: EmailDeliverEvent, ctx: PluginContext) => Promise { + const bindingName = config.binding ?? "EMAIL"; + const from = { email: config.fromEmail, name: config.fromName }; + + return async (event, ctx) => { + const { message } = event; + const env = await loadEnv(); + // eslint-disable-next-line typescript/no-unsafe-type-assertion -- Worker binding accessed from untyped env object; the send() check below validates the shape + const binding = env[bindingName] as SendEmailBinding | undefined; + if (!binding || typeof binding.send !== "function") { + throw new Error( + `[cloudflare-email] send_email binding "${bindingName}" not found — ` + + `declare it in the wrangler config ("send_email": [{ "name": "${bindingName}" }]).`, + ); + } + + const result = await binding.send({ + from, + to: message.to, + subject: message.subject, + text: message.text, + ...(message.html ? { html: message.html } : {}), + ...(config.replyTo ? { replyTo: config.replyTo } : {}), + }); + + ctx.log.info("email delivered via Cloudflare Email Sending", { + to: message.to, + subject: message.subject, + messageId: result?.messageId, + }); + }; +} + +/** + * Load Cloudflare Email config from DB (options table). + * Returns null if not configured. + */ +export async function loadCloudflareConfigFromDb( + db: Kysely, +): Promise { + const repo = new OptionsRepository(db); + const fromName = await repo.get(`${CLOUDFLARE_OPTION_PREFIX}fromName`); + const fromEmail = await repo.get(`${CLOUDFLARE_OPTION_PREFIX}fromEmail`); + const replyTo = await repo.get(`${CLOUDFLARE_OPTION_PREFIX}replyTo`); + + if (!fromName || !fromEmail) return null; + return { + fromName, + fromEmail, + ...(replyTo ? { replyTo } : {}), + }; +} + +/** + * Save Cloudflare Email config to DB (options table). + */ +export async function saveCloudflareConfigToDb( + db: Kysely, + config: CloudflareEmailConfig, +): Promise { + const repo = new OptionsRepository(db); + await repo.set(`${CLOUDFLARE_OPTION_PREFIX}fromName`, config.fromName); + await repo.set(`${CLOUDFLARE_OPTION_PREFIX}fromEmail`, config.fromEmail); + // Keep the combined "from" for backward compat with the old API shape + await repo.set( + `${CLOUDFLARE_OPTION_PREFIX}from`, + `${config.fromName} <${config.fromEmail}>`, + ); + if (config.replyTo) { + await repo.set(`${CLOUDFLARE_OPTION_PREFIX}replyTo`, config.replyTo); + } else { + await repo.delete(`${CLOUDFLARE_OPTION_PREFIX}replyTo`); + } +} + +/** + * Load Cloudflare Email config from env vars. + * Returns null if not configured. + */ +export function loadCloudflareConfigFromEnv(): CloudflareEmailConfig | null { + const fromName = process.env.EMAIL_FROM_NAME; + const fromEmail = process.env.EMAIL_FROM_EMAIL; + if (!fromName || !fromEmail) return null; + return { + fromName, + fromEmail, + ...(process.env.EMAIL_REPLY_TO ? { replyTo: process.env.EMAIL_REPLY_TO } : {}), + }; +} + +/** + * Load Cloudflare Email config: DB first, then env fallback. + * Returns null if neither is configured. + */ +export async function loadCloudflareConfig( + db: Kysely, +): Promise { + const dbConfig = await loadCloudflareConfigFromDb(db); + if (dbConfig) return dbConfig; + return loadCloudflareConfigFromEnv(); +} + +/** + * Create the built-in Cloudflare Email provider plugin. + * + * Always registered (even without config) so it appears in the provider + * list. The handler fails with a clear error if the binding is missing + * or the config is incomplete. + */ +export function createCloudflareEmailPlugin(config: CloudflareEmailConfig | null): ResolvedPlugin { + return definePlugin({ + id: CLOUDFLARE_EMAIL_PLUGIN_ID, + version: "1.0.0", + capabilities: ["hooks.email-transport:register"], + hooks: { + "email:deliver": { + exclusive: true, + handler: async (event: EmailDeliverEvent, ctx: PluginContext) => { + if (!config) { + throw new Error( + "[cloudflare-email] Not configured — set sender name and email in " + + "Settings → Email, or set EMAIL_FROM_NAME / EMAIL_FROM_EMAIL env vars.", + ); + } + const deliver = createCloudflareEmailDeliver(config); + await deliver(event, ctx); + }, + }, + }, + }); +} diff --git a/packages/core/src/plugins/email-smtp.ts b/packages/core/src/plugins/email-smtp.ts index e612bb79e0..23000179de 100644 --- a/packages/core/src/plugins/email-smtp.ts +++ b/packages/core/src/plugins/email-smtp.ts @@ -22,6 +22,8 @@ * a clear error. TLS is always required; plaintext auth is never attempted. */ +import { promisify } from "node:util"; + import { decrypt, encrypt } from "@emdash-cms/auth"; import type { Kysely } from "kysely"; @@ -36,6 +38,18 @@ export const SMTP_EMAIL_PLUGIN_ID = "emdash-smtp"; const SMTP_OPTION_PREFIX = "emdash:email:smtp:"; const SMTP_OPTION_PASSWORD = `${SMTP_OPTION_PREFIX}password`; +/** + * `EMDASH_ENCRYPTION_KEY` carries the `emdash_enc_v1_` version prefix, but + * `encrypt()`/`decrypt()` from `@emdash-cms/auth` expect the raw base64url + * key material. Strip the version prefix before use. + */ +const ENCRYPTION_KEY_PREFIX = "emdash_enc_v1_"; +function toKeyMaterial(encryptionKey: string): string { + return encryptionKey.startsWith(ENCRYPTION_KEY_PREFIX) + ? encryptionKey.slice(ENCRYPTION_KEY_PREFIX.length) + : encryptionKey; +} + // --------------------------------------------------------------------------- // Socket abstraction — cloudflare:sockets on Workers, node:net/tls on Node // --------------------------------------------------------------------------- @@ -154,12 +168,13 @@ function parseAddress(input: string): { email: string; name?: string } { /** Build a dot-stuffed MIME body. */ function buildMime(params: { from: { email: string; name?: string }; + replyTo?: string; to: string; subject: string; text: string; html?: string; }): string { - const { from, to, subject, text, html } = params; + const { from, replyTo, to, subject, text, html } = params; const headers: string[] = [ `From: ${from.name ? `"${sanitizeHeader(from.name)}" <${from.email}>` : from.email}`, `To: ${to}`, @@ -168,6 +183,9 @@ function buildMime(params: { `Message-ID: <${crypto.randomUUID()}@emdash>`, `MIME-Version: 1.0`, ]; + if (replyTo) { + headers.push(`Reply-To: ${sanitizeHeader(replyTo)}`); + } let body: string; if (html) { @@ -270,14 +288,12 @@ async function connectNode( }); sock.on("end", () => resolveRead?.({ done: true })); sock.on("error", reject); - // eslint-disable-next-line promise/no-multiple-resolved -- resolve happens once in connect callback + const sockWrite = promisify(sock.write.bind(sock)); + const sockEnd = promisify(sock.end.bind(sock)); resolve({ writer: { - write: (data) => - new Promise((res, rej) => - sock.write(data, (e: Error | null | undefined) => (e ? rej(e) : res())), - ), - close: () => new Promise((res) => sock.end(res)), + write: (data: Uint8Array) => sockWrite(data), + close: () => sockEnd(), }, reader: { read: () => @@ -286,7 +302,7 @@ async function connectNode( resolveRead = res; }), }, - close: () => new Promise((res) => sock.end(res)), + close: () => sockEnd(), }); }); sock.on("error", reject); @@ -313,24 +329,24 @@ async function connectNode( sock.on("end", () => resolveRead?.({ done: true })); sock.on("error", reject); - // eslint-disable-next-line promise/no-multiple-resolved -- resolve happens once in connect callback - const makeSocket = (s: InstanceType | typeof sock): SmtpSocket => ({ - writer: { - write: (data) => - new Promise((res, rej) => - s.write(data, (e: Error | null | undefined) => (e ? rej(e) : res())), - ), - close: () => new Promise((res) => s.end(res)), - }, - reader: { - read: () => - new Promise((res) => { - if (chunks.length > 0) return res({ value: chunks.shift()!, done: false }); - resolveRead = res; - }), - }, - close: () => new Promise((res) => s.end(res)), - }); + const makeSocket = (s: InstanceType | typeof sock): SmtpSocket => { + const sWrite = promisify(s.write.bind(s)); + const sEnd = promisify(s.end.bind(s)); + return { + writer: { + write: (data: Uint8Array) => sWrite(data), + close: () => sEnd(), + }, + reader: { + read: () => + new Promise((res) => { + if (chunks.length > 0) return res({ value: chunks.shift()!, done: false }); + resolveRead = res; + }), + }, + close: () => sEnd(), + }; + }; resolve({ ...makeSocket(sock), @@ -369,7 +385,9 @@ export interface SmtpConfig { secure: "starttls" | "tls"; user: string; pass: string; - from?: string; + fromName?: string; + fromEmail?: string; + replyTo?: string; /** Connect + overall timeout in ms (default 30s) */ timeoutMs?: number; } @@ -396,13 +414,26 @@ export function loadSmtpConfigFromEnv(): SmtpConfig | null { if (!user || !pass) { throw new Error("EMAIL_SMTP_USER and EMAIL_SMTP_PASS are required when EMAIL_SMTP_HOST is set"); } + // Support both structured fields and legacy EMAIL_SMTP_FROM + let fromName: string | undefined; + let fromEmail: string | undefined; + if (process.env.EMAIL_SMTP_FROM_NAME && process.env.EMAIL_SMTP_FROM_EMAIL) { + fromName = process.env.EMAIL_SMTP_FROM_NAME; + fromEmail = process.env.EMAIL_SMTP_FROM_EMAIL; + } else if (process.env.EMAIL_SMTP_FROM) { + const parsed = parseAddress(process.env.EMAIL_SMTP_FROM); + fromName = parsed.name; + fromEmail = parsed.email; + } return { host, port, secure, user, pass, - ...(process.env.EMAIL_SMTP_FROM ? { from: process.env.EMAIL_SMTP_FROM } : {}), + ...(fromName ? { fromName } : {}), + ...(fromEmail ? { fromEmail } : {}), + ...(process.env.EMAIL_SMTP_REPLY_TO ? { replyTo: process.env.EMAIL_SMTP_REPLY_TO } : {}), }; } @@ -419,20 +450,24 @@ export async function loadSmtpConfigFromDb( const secure = await repo.get<"starttls" | "tls">(`${SMTP_OPTION_PREFIX}secure`); const user = await repo.get(`${SMTP_OPTION_PREFIX}user`); const encryptedPass = await repo.get(SMTP_OPTION_PASSWORD); - const from = await repo.get(`${SMTP_OPTION_PREFIX}from`); + const fromName = await repo.get(`${SMTP_OPTION_PREFIX}fromName`); + const fromEmail = await repo.get(`${SMTP_OPTION_PREFIX}fromEmail`); + const replyTo = await repo.get(`${SMTP_OPTION_PREFIX}replyTo`); if (!port || !secure || !user || !encryptedPass) { return null; } - const pass = await decrypt(encryptedPass, encryptionKey); + const pass = await decrypt(encryptedPass, toKeyMaterial(encryptionKey)); return { host, port, secure, user, pass, - ...(from ? { from } : {}), + ...(fromName ? { fromName } : {}), + ...(fromEmail ? { fromEmail } : {}), + ...(replyTo ? { replyTo } : {}), }; } @@ -447,11 +482,21 @@ export async function saveSmtpConfigToDb( await repo.set(`${SMTP_OPTION_PREFIX}port`, config.port); await repo.set(`${SMTP_OPTION_PREFIX}secure`, config.secure); await repo.set(`${SMTP_OPTION_PREFIX}user`, config.user); - await repo.set(SMTP_OPTION_PASSWORD, await encrypt(config.pass, encryptionKey)); - if (config.from) { - await repo.set(`${SMTP_OPTION_PREFIX}from`, config.from); + await repo.set(SMTP_OPTION_PASSWORD, await encrypt(config.pass, toKeyMaterial(encryptionKey))); + if (config.fromName) { + await repo.set(`${SMTP_OPTION_PREFIX}fromName`, config.fromName); + } else { + await repo.delete(`${SMTP_OPTION_PREFIX}fromName`); + } + if (config.fromEmail) { + await repo.set(`${SMTP_OPTION_PREFIX}fromEmail`, config.fromEmail); } else { - await repo.delete(`${SMTP_OPTION_PREFIX}from`); + await repo.delete(`${SMTP_OPTION_PREFIX}fromEmail`); + } + if (config.replyTo) { + await repo.set(`${SMTP_OPTION_PREFIX}replyTo`, config.replyTo); + } else { + await repo.delete(`${SMTP_OPTION_PREFIX}replyTo`); } } @@ -463,7 +508,9 @@ export async function clearSmtpConfigFromDb(db: Kysely): Promise await repo.delete(`${SMTP_OPTION_PREFIX}secure`); await repo.delete(`${SMTP_OPTION_PREFIX}user`); await repo.delete(SMTP_OPTION_PASSWORD); - await repo.delete(`${SMTP_OPTION_PREFIX}from`); + await repo.delete(`${SMTP_OPTION_PREFIX}fromName`); + await repo.delete(`${SMTP_OPTION_PREFIX}fromEmail`); + await repo.delete(`${SMTP_OPTION_PREFIX}replyTo`); } /** @@ -489,7 +536,10 @@ export async function deliverSmtp( ctx: PluginContext, connectFn?: ConnectFn, ): Promise { - const from = config.from ? parseAddress(config.from) : { email: config.user }; + const from = { + email: config.fromEmail ?? config.user, + ...(config.fromName ? { name: config.fromName } : {}), + }; const timeoutMs = config.timeoutMs ?? 30_000; const connect: ConnectFn = @@ -566,6 +616,7 @@ export async function deliverSmtp( expectCode(await readReply(socket.reader, buffered), 354, "DATA"); const mime = buildMime({ from, + ...(config.replyTo ? { replyTo: config.replyTo } : {}), to: message.to, subject: message.subject, text: message.text, diff --git a/packages/core/src/plugins/hooks.ts b/packages/core/src/plugins/hooks.ts index a63eab1bf8..2c90ae24c2 100644 --- a/packages/core/src/plugins/hooks.ts +++ b/packages/core/src/plugins/hooks.ts @@ -1340,6 +1340,8 @@ export interface ExclusiveHookResolutionOptions { /** Write an option value to persistent storage. */ setOption: (key: string, value: string) => Promise; /** Delete an option from persistent storage. */ + /** Delete an option from persistent storage. Unused since selections + * are preserved when a provider is temporarily unregistered. */ deleteOption: (key: string) => Promise; /** * Map of pluginId → hook names the plugin prefers to handle. @@ -1351,6 +1353,14 @@ export interface ExclusiveHookResolutionOptions { /** Options table key prefix for exclusive hook selections */ const EXCLUSIVE_HOOK_KEY_PREFIX = "emdash:exclusive_hook:"; +/** + * Sentinel value stored in the options table when the admin explicitly + * chooses "no provider" for an exclusive hook. Distinguishes "explicitly + * disabled" from "no selection yet" so resolution does not auto-select + * a provider again on the next startup. + */ +export const EXCLUSIVE_HOOK_NONE_VALUE = "__none__"; + /** * Resolve exclusive hook selections. * @@ -1362,8 +1372,7 @@ const EXCLUSIVE_HOOK_KEY_PREFIX = "emdash:exclusive_hook:"; * 5. If multiple providers and no hint → leave unselected (admin must choose). */ export async function resolveExclusiveHooks(opts: ExclusiveHookResolutionOptions): Promise { - const { pipeline, isActive, getOption, getOptions, setOption, deleteOption, preferredHints } = - opts; + const { pipeline, isActive, getOption, getOptions, setOption, preferredHints } = opts; const exclusiveHookNames = pipeline.getRegisteredExclusiveHooks(); if (exclusiveHookNames.length === 0) return; @@ -1402,22 +1411,31 @@ export async function resolveExclusiveHooks(opts: ExclusiveHookResolutionOptions } } + // Explicitly disabled by the admin ("None") — never auto-select. + if (currentSelection === EXCLUSIVE_HOOK_NONE_VALUE) { + pipeline.clearExclusiveSelection(hookName); + continue; + } + // If selection exists and the plugin is still active → keep it if (currentSelection && activeProviderIds.has(currentSelection)) { pipeline.setExclusiveSelection(hookName, currentSelection); continue; } - // Selection is stale or missing — clear it + // Selection exists but the provider is not currently registered. + // Do NOT delete the DB selection — the provider may be a built-in + // that is registered conditionally (e.g. SMTP only when env vars + // are present). Deleting would silently revert the user's choice + // on every deploy/restart. Instead, keep the DB selection and + // leave the in-memory selection unset; delivery will fail with a + // clear "provider not available" error until the provider is + // registered again. if (currentSelection) { - try { - await deleteOption(key); - } catch { - // Non-fatal - } + continue; } - // Auto-select if only one active provider + // No selection at all — auto-select if only one active provider if (activeProviderIds.size === 1) { const [onlyProvider] = activeProviderIds; try { diff --git a/packages/core/tests/unit/plugins/email-cloudflare.test.ts b/packages/core/tests/unit/plugins/email-cloudflare.test.ts new file mode 100644 index 0000000000..dd3ad3cde7 --- /dev/null +++ b/packages/core/tests/unit/plugins/email-cloudflare.test.ts @@ -0,0 +1,252 @@ +/** + * Unit tests for the built-in Cloudflare Email provider. + * + * Covers config loading (DB / env / fallback), the deliver handler, + * and the built-in plugin registration. + */ + +import { describe, expect, it, vi, beforeEach, afterEach } from "vitest"; +import type { Kysely } from "kysely"; + +import { + CLOUDFLARE_EMAIL_PLUGIN_ID, + createCloudflareEmailDeliver, + createCloudflareEmailPlugin, + loadCloudflareConfig, + loadCloudflareConfigFromDb, + loadCloudflareConfigFromEnv, + saveCloudflareConfigToDb, + type CloudflareEmailConfig, +} from "../../../src/plugins/email-cloudflare.js"; +import type { EmailDeliverEvent, PluginContext } from "../../../src/plugins/types.js"; +import type { Database as DatabaseSchema } from "../../../src/database/types.js"; +import { setupTestDatabase, teardownTestDatabase } from "../../utils/test-db.js"; + +// --------------------------------------------------------------------------- +// Helpers +// --------------------------------------------------------------------------- + +const baseConfig: CloudflareEmailConfig = { + fromName: "Site", + fromEmail: "noreply@example.com", + replyTo: "support@example.com", +}; + +const mockCtx = { + log: { + info: vi.fn(), + warn: vi.fn(), + error: vi.fn(), + }, +} as unknown as PluginContext; + +function makeMessage(): EmailDeliverEvent["message"] { + return { + to: "recipient@example.com", + subject: "Hello", + text: "Plain body", + html: "

HTML body

", + }; +} + +/** Create a mock send_email binding. */ +function makeBinding() { + const send = vi.fn(async () => ({ messageId: "msg-123" })); + return { send }; +} + +// --------------------------------------------------------------------------- +// Tests +// --------------------------------------------------------------------------- + +describe("loadCloudflareConfigFromEnv", () => { + it("returns null when EMAIL_FROM_NAME is unset", () => { + delete process.env.EMAIL_FROM_NAME; + delete process.env.EMAIL_FROM_EMAIL; + expect(loadCloudflareConfigFromEnv()).toBeNull(); + }); + + it("returns null when EMAIL_FROM_EMAIL is unset", () => { + process.env.EMAIL_FROM_NAME = "Site"; + delete process.env.EMAIL_FROM_EMAIL; + expect(loadCloudflareConfigFromEnv()).toBeNull(); + delete process.env.EMAIL_FROM_NAME; + }); + + it("parses a complete config", () => { + process.env.EMAIL_FROM_NAME = "Site"; + process.env.EMAIL_FROM_EMAIL = "noreply@example.com"; + process.env.EMAIL_REPLY_TO = "support@example.com"; + + const config = loadCloudflareConfigFromEnv(); + expect(config).toEqual({ + fromName: "Site", + fromEmail: "noreply@example.com", + replyTo: "support@example.com", + }); + + delete process.env.EMAIL_FROM_NAME; + delete process.env.EMAIL_FROM_EMAIL; + delete process.env.EMAIL_REPLY_TO; + }); + + it("omits replyTo when not set", () => { + process.env.EMAIL_FROM_NAME = "Site"; + process.env.EMAIL_FROM_EMAIL = "noreply@example.com"; + delete process.env.EMAIL_REPLY_TO; + + const config = loadCloudflareConfigFromEnv(); + expect(config).toEqual({ + fromName: "Site", + fromEmail: "noreply@example.com", + }); + + delete process.env.EMAIL_FROM_NAME; + delete process.env.EMAIL_FROM_EMAIL; + }); +}); + +describe("loadCloudflareConfigFromDb / saveCloudflareConfigToDb", () => { + let db: Kysely; + + beforeEach(async () => { + db = await setupTestDatabase(); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("returns null when no config is stored", async () => { + const config = await loadCloudflareConfigFromDb(db); + expect(config).toBeNull(); + }); + + it("saves and loads a full config", async () => { + await saveCloudflareConfigToDb(db, baseConfig); + const loaded = await loadCloudflareConfigFromDb(db); + + expect(loaded).toEqual(baseConfig); + }); + + it("clears replyTo when not provided on save", async () => { + await saveCloudflareConfigToDb(db, baseConfig); + await saveCloudflareConfigToDb(db, { + fromName: "Site", + fromEmail: "noreply@example.com", + }); + const loaded = await loadCloudflareConfigFromDb(db); + expect(loaded?.replyTo).toBeUndefined(); + }); +}); + +describe("loadCloudflareConfig", () => { + let db: Kysely; + + beforeEach(async () => { + db = await setupTestDatabase(); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("prefers DB config over env vars", async () => { + process.env.EMAIL_FROM_NAME = "Env Site"; + process.env.EMAIL_FROM_EMAIL = "env@example.com"; + + await saveCloudflareConfigToDb(db, baseConfig); + const loaded = await loadCloudflareConfig(db); + expect(loaded?.fromName).toBe("Site"); + + delete process.env.EMAIL_FROM_NAME; + delete process.env.EMAIL_FROM_EMAIL; + }); + + it("falls back to env vars when DB is empty", async () => { + process.env.EMAIL_FROM_NAME = "Env Site"; + process.env.EMAIL_FROM_EMAIL = "env@example.com"; + + const loaded = await loadCloudflareConfig(db); + expect(loaded?.fromName).toBe("Env Site"); + + delete process.env.EMAIL_FROM_NAME; + delete process.env.EMAIL_FROM_EMAIL; + }); + + it("returns null when neither DB nor env is configured", async () => { + delete process.env.EMAIL_FROM_NAME; + delete process.env.EMAIL_FROM_EMAIL; + const loaded = await loadCloudflareConfig(db); + expect(loaded).toBeNull(); + }); +}); + +describe("createCloudflareEmailDeliver", () => { + it("delivers via the send_email binding", async () => { + const binding = makeBinding(); + const deliver = createCloudflareEmailDeliver(baseConfig, async () => ({ + EMAIL: binding, + })); + + await deliver({ message: makeMessage(), source: "test" }, mockCtx); + + expect(binding.send).toHaveBeenCalledWith({ + from: { email: "noreply@example.com", name: "Site" }, + to: "recipient@example.com", + subject: "Hello", + text: "Plain body", + html: "

HTML body

", + replyTo: "support@example.com", + }); + expect(mockCtx.log.info).toHaveBeenCalledWith( + "email delivered via Cloudflare Email Sending", + expect.objectContaining({ to: "recipient@example.com", subject: "Hello" }), + ); + }); + + it("throws when the binding is missing", async () => { + const deliver = createCloudflareEmailDeliver(baseConfig, async () => ({})); + + await expect( + deliver({ message: makeMessage(), source: "test" }, mockCtx), + ).rejects.toThrow(/send_email binding "EMAIL" not found/); + }); + + it("throws when the binding has no send method", async () => { + const deliver = createCloudflareEmailDeliver(baseConfig, async () => ({ + EMAIL: { notSend: true }, + })); + + await expect( + deliver({ message: makeMessage(), source: "test" }, mockCtx), + ).rejects.toThrow(/send_email binding "EMAIL" not found/); + }); + + it("uses a custom binding name when configured", async () => { + const binding = makeBinding(); + const deliver = createCloudflareEmailDeliver( + { ...baseConfig, binding: "MY_EMAIL" }, + async () => ({ MY_EMAIL: binding }), + ); + + await deliver({ message: makeMessage(), source: "test" }, mockCtx); + expect(binding.send).toHaveBeenCalled(); + }); +}); + +describe("createCloudflareEmailPlugin", () => { + it("returns a plugin with the correct ID", () => { + const plugin = createCloudflareEmailPlugin(baseConfig); + expect(plugin.id).toBe(CLOUDFLARE_EMAIL_PLUGIN_ID); + }); + + it("throws when config is null and handler is invoked", async () => { + const plugin = createCloudflareEmailPlugin(null); + const hook = plugin.hooks["email:deliver"]; + expect(hook).toBeDefined(); + await expect( + hook!.handler({ message: makeMessage(), source: "test" }, mockCtx), + ).rejects.toThrow(/Not configured/); + }); +}); diff --git a/packages/core/tests/unit/plugins/email-smtp.test.ts b/packages/core/tests/unit/plugins/email-smtp.test.ts index 18e54787b1..accf016d34 100644 --- a/packages/core/tests/unit/plugins/email-smtp.test.ts +++ b/packages/core/tests/unit/plugins/email-smtp.test.ts @@ -75,7 +75,9 @@ const baseConfig: SmtpConfig = { secure: "starttls", user: "user@example.com", pass: "secret", - from: "Site ", + fromName: "Site", + fromEmail: "noreply@example.com", + replyTo: "support@example.com", }; const mockCtx = { @@ -96,7 +98,33 @@ describe("loadSmtpConfigFromEnv", () => { expect(loadSmtpConfigFromEnv()).toBeNull(); }); - it("parses a complete config", () => { + it("parses a complete config with structured sender fields", () => { + process.env.EMAIL_SMTP_HOST = "smtp-relay.brevo.com"; + process.env.EMAIL_SMTP_PORT = "587"; + process.env.EMAIL_SMTP_USER = "u"; + process.env.EMAIL_SMTP_PASS = "p"; + process.env.EMAIL_SMTP_FROM_NAME = "Site"; + process.env.EMAIL_SMTP_FROM_EMAIL = "noreply@example.com"; + process.env.EMAIL_SMTP_REPLY_TO = "support@example.com"; + + const config = loadSmtpConfigFromEnv(); + expect(config).toEqual({ + host: "smtp-relay.brevo.com", + port: 587, + secure: "starttls", + user: "u", + pass: "p", + fromName: "Site", + fromEmail: "noreply@example.com", + replyTo: "support@example.com", + }); + + delete process.env.EMAIL_SMTP_FROM_NAME; + delete process.env.EMAIL_SMTP_FROM_EMAIL; + delete process.env.EMAIL_SMTP_REPLY_TO; + }); + + it("parses legacy EMAIL_SMTP_FROM into structured fields", () => { process.env.EMAIL_SMTP_HOST = "smtp-relay.brevo.com"; process.env.EMAIL_SMTP_PORT = "587"; process.env.EMAIL_SMTP_USER = "u"; @@ -110,8 +138,11 @@ describe("loadSmtpConfigFromEnv", () => { secure: "starttls", user: "u", pass: "p", - from: "Site ", + fromName: "Site", + fromEmail: "noreply@example.com", }); + + delete process.env.EMAIL_SMTP_FROM; }); it("infers secure=tls for port 465", () => { @@ -182,6 +213,8 @@ describe("deliverSmtp", () => { expect(transcript).toContain("RCPT TO:\r\n"); expect(transcript).toContain("DATA\r\n"); expect(transcript).toContain("Subject: Hello\r\n"); + expect(transcript).toContain('From: "Site" \r\n'); + expect(transcript).toContain("Reply-To: support@example.com\r\n"); expect(transcript).toContain("QUIT\r\n"); expect(mockCtx.log.info).toHaveBeenCalledWith( @@ -283,7 +316,8 @@ describe("createSmtpEmailDeliver", () => { // DB-backed config // --------------------------------------------------------------------------- -const TEST_ENCRYPTION_KEY = "emdash_enc_v1_SWmb1wDbtOn-lO8UJgsKIdNps4cwuN8IulWSqsspuM"; +const TEST_ENCRYPTION_KEY = + "emdash_enc_v1_U-1To8mS9tyTfAFz8KHAsCVo1fvktqbq0y5JxBiXgIU"; describe("loadSmtpConfigFromDb / saveSmtpConfigToDb / clearSmtpConfigFromDb", () => { let db: Kysely; @@ -301,14 +335,16 @@ describe("loadSmtpConfigFromDb / saveSmtpConfigToDb / clearSmtpConfigFromDb", () expect(config).toBeNull(); }); - it("saves and loads a full config", async () => { + it("saves and loads a full config with structured sender fields", async () => { const input: SmtpConfig = { host: "smtp.example.com", port: 587, secure: "starttls", user: "user@example.com", pass: "super-secret", - from: "Site ", + fromName: "Site", + fromEmail: "noreply@example.com", + replyTo: "support@example.com", }; await saveSmtpConfigToDb(db, TEST_ENCRYPTION_KEY, input); diff --git a/packages/core/tests/unit/plugins/exclusive-hooks.test.ts b/packages/core/tests/unit/plugins/exclusive-hooks.test.ts index d0b16a905e..e86a776cd2 100644 --- a/packages/core/tests/unit/plugins/exclusive-hooks.test.ts +++ b/packages/core/tests/unit/plugins/exclusive-hooks.test.ts @@ -17,7 +17,11 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { extractManifest } from "../../../src/cli/commands/bundle-utils.js"; import { runMigrations } from "../../../src/database/migrations/runner.js"; import type { Database as DbSchema } from "../../../src/database/types.js"; -import { HookPipeline, resolveExclusiveHooks } from "../../../src/plugins/hooks.js"; +import { + EXCLUSIVE_HOOK_NONE_VALUE, + HookPipeline, + resolveExclusiveHooks, +} from "../../../src/plugins/hooks.js"; import { PluginManager } from "../../../src/plugins/manager.js"; import { normalizeManifestHook } from "../../../src/plugins/manifest-schema.js"; import type { @@ -573,7 +577,37 @@ describe("resolveExclusiveHooks — shared function", () => { expect(pipeline.getExclusiveSelection("content:beforeSave")).toBe("active-provider"); }); - it("clears stale selection when selected provider is inactive", async () => { + it("does not auto-select when admin explicitly chose none", async () => { + const plugin = createTestPlugin({ + id: "only-provider", + hooks: { + "content:beforeSave": createTestHook("only-provider", vi.fn(), { exclusive: true }), + }, + }); + const pipeline = new HookPipeline([plugin]); + + const store = new Map([ + ["emdash:exclusive_hook:content:beforeSave", EXCLUSIVE_HOOK_NONE_VALUE], + ]); + + await resolveExclusiveHooks({ + pipeline, + isActive: () => true, + getOption: async (key) => store.get(key) ?? null, + setOption: async (key, value) => { + store.set(key, value); + }, + deleteOption: async (key) => { + store.delete(key); + }, + }); + + // Explicit "none" must survive resolution — no auto-select, no overwrite + expect(pipeline.getExclusiveSelection("content:beforeSave")).toBeUndefined(); + expect(store.get("emdash:exclusive_hook:content:beforeSave")).toBe(EXCLUSIVE_HOOK_NONE_VALUE); + }); + + it("preserves stale selection when selected provider is inactive", async () => { const pluginA = createTestPlugin({ id: "provider-a", hooks: { @@ -605,8 +639,11 @@ describe("resolveExclusiveHooks — shared function", () => { }, }); - // provider-a was stale, cleared. provider-b is the only active one → auto-selected - expect(pipeline.getExclusiveSelection("content:beforeSave")).toBe("provider-b"); + // provider-a is preserved in DB — not deleted. In-memory selection + // stays unset so delivery fails with a clear error until provider-a + // is registered again. + expect(store.get("emdash:exclusive_hook:content:beforeSave")).toBe("provider-a"); + expect(pipeline.getExclusiveSelection("content:beforeSave")).toBeUndefined(); }); }); @@ -707,7 +744,7 @@ describe("PluginManager — resolveExclusiveHooks", () => { expect(selection).toBeNull(); }); - it("clears stale selection when selected plugin is deactivated", async () => { + it("preserves stale selection when selected plugin is deactivated", async () => { const handlerA = vi.fn() as unknown as ContentBeforeSaveHandler; const handlerB = vi.fn() as unknown as ContentBeforeSaveHandler; @@ -735,9 +772,10 @@ describe("PluginManager — resolveExclusiveHooks", () => { // Deactivate the selected plugin await manager.deactivate("provider-a"); - // After deactivation, provider-b is the only one left → auto-selects + // Selection is preserved in DB — not deleted. provider-b is NOT + // auto-selected because a selection already exists. const selection = await manager.getExclusiveHookSelection("content:beforeSave"); - expect(selection).toBe("provider-b"); + expect(selection).toBe("provider-a"); }); it("uses preferred hints when no selection exists", async () => { @@ -832,7 +870,7 @@ describe("resolveExclusiveHooks — batched option reads", () => { /** * Three plugins / three exclusive hooks covering every resolution branch: * - content:beforeSave: providers a+b active, valid stored selection (kept) - * - content:afterSave: provider c stale (inactive), a remains (auto-select) + * - content:afterSave: provider c stale (inactive) — selection preserved * - content:beforeDelete: providers a+b active, no selection (unselected) */ function createScenarioPipeline(): HookPipeline { @@ -936,7 +974,10 @@ describe("resolveExclusiveHooks — batched option reads", () => { // Sanity-check the actual outcomes, not just parity expect(batchedPipeline.getExclusiveSelection("content:beforeSave")).toBe("provider-a"); - expect(batchedPipeline.getExclusiveSelection("content:afterSave")).toBe("provider-a"); + // content:afterSave selection is preserved in DB (provider-c) but not + // set in-memory since provider-c is inactive + expect(batchedPipeline.getExclusiveSelection("content:afterSave")).toBeUndefined(); + expect(batchedStore.get("emdash:exclusive_hook:content:afterSave")).toBe("provider-c"); expect(batchedPipeline.getExclusiveSelection("content:beforeDelete")).toBeUndefined(); }); From a657f84c51381995866ff8f716fa49a557ed48fe Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Mon, 20 Jul 2026 21:12:34 +0200 Subject: [PATCH 06/33] i18n(fr): translate 138 missing keys + consistency around media library (#2102) * i18n(fr): translate 138 missing keys + consistency around media library * consistency around media library Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * reword download backup heading --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- packages/admin/src/locales/fr/messages.po | 286 +++++++++++----------- 1 file changed, 143 insertions(+), 143 deletions(-) diff --git a/packages/admin/src/locales/fr/messages.po b/packages/admin/src/locales/fr/messages.po index b1cf957203..f469949065 100644 --- a/packages/admin/src/locales/fr/messages.po +++ b/packages/admin/src/locales/fr/messages.po @@ -86,7 +86,7 @@ msgstr "{0, plural, one {# collection} other {# collections}}" #. placeholder {0}: result.comments.imported #: packages/admin/src/components/WordPressImport.tsx:2263 msgid "{0, plural, one {# comment imported} other {# comments imported}}" -msgstr "" +msgstr "{0, plural, one {# commentaire importé} other {# commentaires importés}}" #. placeholder {0}: result.affected #: packages/admin/src/router.tsx:1464 @@ -128,7 +128,7 @@ msgstr "{0, plural, one {# fichier multimédia importé} other {# fichiers multi #. placeholder {0}: result.menus.created #: packages/admin/src/components/WordPressImport.tsx:2255 msgid "{0, plural, one {# menu imported} other {# menus imported}}" -msgstr "" +msgstr "{0, plural, one {# menu importé} other {# menus importés}}" #. placeholder {0}: navMenus.length #: packages/admin/src/components/WordPressImport.tsx:1903 @@ -164,12 +164,12 @@ msgstr "{0, plural, one {# élément ignoré (existe déjà)} other {# élément #. placeholder {0}: result.taxonomyAssignments #: packages/admin/src/components/WordPressImport.tsx:2247 msgid "{0, plural, one {# taxonomy assignment} other {# taxonomy assignments}}" -msgstr "" +msgstr "{0, plural, one {# attribution de taxonomie} other {# attributions de taxonomie}}" #. placeholder {0}: result.taxonomiesCreated.length #: packages/admin/src/components/WordPressImport.tsx:2239 msgid "{0, plural, one {# taxonomy created} other {# taxonomies created}}" -msgstr "" +msgstr "{0, plural, one {# taxonomie créée} other {# taxonomies créées}}" #. placeholder {0}: fields.length #: packages/admin/src/components/ContentTypeEditor.tsx:585 @@ -179,12 +179,12 @@ msgstr "{0, plural, one {champ} other {champs}}" #. placeholder {0}: stats.mediaCount #: packages/admin/src/components/Dashboard.tsx:160 msgid "{0, plural, one {Media file} other {Media files}}" -msgstr "" +msgstr "{0, plural, one {Fichier multimédia} other {Fichiers multimédias}}" #. placeholder {0}: stats.userCount #: packages/admin/src/components/Dashboard.tsx:165 msgid "{0, plural, one {User} other {Users}}" -msgstr "" +msgstr "{0, plural, one {Utilisateur} other {Utilisateurs}}" #. placeholder {0}: envLabel(m.key) #. placeholder {1}: m.required @@ -248,17 +248,17 @@ msgstr "{0} éléments seront importés" #. placeholder {0}: failedIds.length #: packages/admin/src/router.tsx:534 msgid "{0} of {total} could not be deleted" -msgstr "" +msgstr "{0} sur {total} n'ont pas pu être supprimés" #. placeholder {0}: failedIds.length #: packages/admin/src/router.tsx:490 msgid "{0} of {total} could not be published" -msgstr "" +msgstr "{0} sur {total} n'ont pas pu être publiés" #. placeholder {0}: failedIds.length #: packages/admin/src/router.tsx:513 msgid "{0} of {total} could not be updated" -msgstr "" +msgstr "{0} sur {total} n'ont pas pu être mis à jour" #. placeholder {0}: plugins?.length ?? 0 #: packages/admin/src/components/PluginManager.tsx:170 @@ -365,15 +365,15 @@ msgstr "{pluginName} nécessite les autorisations suivantes :" #: packages/admin/src/components/MediaLibrary.tsx:298 msgid "{resultCount, plural, one {# item} other {# items}}" -msgstr "" +msgstr "{resultCount, plural, one {# élément} other {# éléments}}" #: packages/admin/src/components/ContentList.tsx:405 msgid "{selectedCount, plural, one {# selected} other {# selected}}" -msgstr "" +msgstr "{selectedCount, plural, one {# sélectionné} other {# sélectionnés}}" #: packages/admin/src/components/ContentList.tsx:446 msgid "{selectedCount, plural, one {Move # item to trash? You can restore it later.} other {Move # items to trash? You can restore them later.}}" -msgstr "" +msgstr "{selectedCount, plural, one {Déplacer # élément vers la corbeille ? Vous pourrez le restaurer plus tard.} other {Déplacer # éléments vers la corbeille ? Vous pourrez les restaurer plus tard.}}" #: packages/admin/src/components/ContentList.tsx:928 msgid "{total, plural, one {# item} other {# items}}" @@ -395,11 +395,11 @@ msgstr "{total, plural, one {Échec du téléversement} other {Échec de # tél #: packages/admin/src/components/Dashboard.tsx:146 msgid "{totalDrafts, plural, one {Draft} other {Drafts}}" -msgstr "" +msgstr "{totalDrafts, plural, one {Brouillon} other {Brouillons}}" #: packages/admin/src/components/Dashboard.tsx:153 msgid "{totalScheduled, plural, one {Scheduled} other {Scheduled}}" -msgstr "" +msgstr "{totalScheduled, plural, one {Programmé} other {Programmés}}" #: packages/admin/src/components/RevisionHistory.tsx:357 msgid "{unchangedCount, plural, one {Hide # unchanged} other {Hide # unchanged}}" @@ -560,7 +560,7 @@ msgstr "Accès refusé" #: packages/admin/src/lib/api/marketplace.ts:225 #: packages/admin/src/lib/api/marketplace.ts:233 msgid "Access your media library" -msgstr "Accédez à votre médiathèque" +msgstr "Accédez à votre bibliothèque de fichiers multimédias" #: packages/admin/src/components/SetupWizard.tsx:354 msgid "Account" @@ -580,7 +580,7 @@ msgstr "Informations sur le compte" #: packages/admin/src/components/WordPressImport.tsx:1158 msgid "ACF Fields" -msgstr "" +msgstr "Champs ACF" #: packages/admin/src/components/comments/CommentInbox.tsx:299 #: packages/admin/src/components/ContentList.tsx:528 @@ -757,7 +757,7 @@ msgstr "Données supplémentaires à importer." #: packages/admin/src/components/WordPressImport.tsx:1483 msgid "admin" -msgstr "" +msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 #: packages/admin/src/components/Sidebar.tsx:491 @@ -1124,11 +1124,11 @@ msgstr "Généré automatiquement à partir du nom (vous pouvez le modifier)" #: packages/admin/src/components/settings/BackupSettings.tsx:167 msgid "Automatic Backups" -msgstr "" +msgstr "Sauvegardes automatiques" #: packages/admin/src/components/settings/BackupSettings.tsx:207 msgid "Automatic backups need a storage backend (R2, S3, or local storage). Configure storage in your EmDash config to enable them." -msgstr "" +msgstr "Les sauvegardes automatiques nécessitent un backend de stockage (R2, S3 ou stockage local). Configurez le stockage dans votre configuration EmDash pour les activer." #: packages/admin/src/router.tsx:994 msgid "Autosave failed" @@ -1199,30 +1199,30 @@ msgstr "Retour aux thèmes" #: packages/admin/src/components/settings/BackupSettings.tsx:199 msgid "Back up now" -msgstr "" +msgstr "Sauvegarder maintenant" #: packages/admin/src/components/settings/BackupSettings.tsx:199 msgid "Backing up..." -msgstr "" +msgstr "Sauvegarde en cours..." #. placeholder {0}: archive.name #: packages/admin/src/components/settings/BackupSettings.tsx:97 msgid "Backup created: {0}" -msgstr "" +msgstr "Sauvegarde créée : {0}" #: packages/admin/src/components/settings/BackupSettings.tsx:80 msgid "Backup settings saved" -msgstr "" +msgstr "Paramètres de sauvegarde enregistrés" #: packages/admin/src/components/Settings.tsx:122 #: packages/admin/src/components/settings/BackupSettings.tsx:133 #: packages/admin/src/components/settings/BackupSettings.tsx:148 msgid "Backups" -msgstr "" +msgstr "Sauvegardes" #: packages/admin/src/components/settings/BackupSettings.tsx:182 msgid "Backups to keep" -msgstr "" +msgstr "Sauvegardes à conserver" #: packages/admin/src/components/editor/codeBlockLanguages.ts:29 msgid "Bash" @@ -1423,7 +1423,7 @@ msgstr "Catégories ({0})" #: packages/admin/src/components/WordPressImport.tsx:1146 msgid "Categories & Tags" -msgstr "" +msgstr "Catégories et étiquettes" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:161 msgid "Center" @@ -1507,7 +1507,7 @@ msgstr "Choisir votre langue d'administration préférée" #: packages/admin/src/components/ContentList.tsx:481 msgid "Clear" -msgstr "" +msgstr "Effacer" #: packages/admin/src/components/ContentList.tsx:825 #: packages/admin/src/components/MediaLibrary.tsx:497 @@ -1518,7 +1518,7 @@ msgstr "Effacer les filtres" #: packages/admin/src/components/MediaLibrary.tsx:497 #: packages/admin/src/components/MediaLibrary.tsx:521 msgid "Clear search" -msgstr "" +msgstr "Effacer la recherche" #: packages/admin/src/components/SignupPage.tsx:139 msgid "Click the link in the email to continue setting up your account." @@ -1599,7 +1599,7 @@ msgstr "Fermer le panneau" #: packages/admin/src/components/ContentEditor.tsx:1030 msgid "Close settings" -msgstr "" +msgstr "Fermer les paramètres" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 @@ -1841,7 +1841,7 @@ msgstr "Impossible de copier automatiquement. Veuillez sélectionner l'URL ci-de #: packages/admin/src/components/Dashboard.tsx:84 msgid "Could not load dashboard data" -msgstr "" +msgstr "Impossible de charger les données du tableau de bord" #: packages/admin/src/components/MediaPickerModal.tsx:438 msgid "Could not load image from URL" @@ -2101,11 +2101,11 @@ msgstr "Section personnalisée" #: packages/admin/src/components/WordPressImport.tsx:1147 msgid "Custom Taxonomies" -msgstr "" +msgstr "Taxonomies personnalisées" #: packages/admin/src/components/settings/BackupSettings.tsx:176 msgid "Daily automatic backups" -msgstr "" +msgstr "Sauvegardes automatiques quotidiennes" #: packages/admin/src/components/ThemeToggle.tsx:22 msgid "dark" @@ -2249,7 +2249,7 @@ msgstr "Supprimer {0} ?" #: packages/admin/src/components/settings/BackupSettings.tsx:282 msgid "Delete backup?" -msgstr "" +msgstr "Supprimer la sauvegarde ?" #: packages/admin/src/routes/byline-schema.tsx:358 msgid "Delete byline field?" @@ -2496,7 +2496,7 @@ msgstr "Désactivation en cours..." #: packages/admin/src/components/MediaDetailPanel.tsx:438 msgid "Discard" -msgstr "" +msgstr "Abandonner" #: packages/admin/src/components/ContentSettingsPanel.tsx:71 #: packages/admin/src/components/ContentSettingsPanel.tsx:91 @@ -2505,7 +2505,7 @@ msgstr "Ignorer les modifications" #: packages/admin/src/components/MediaDetailPanel.tsx:436 msgid "Discard changes?" -msgstr "" +msgstr "Abandonner les modifications ?" #: packages/admin/src/components/ContentSettingsPanel.tsx:76 msgid "Discard draft changes?" @@ -2513,7 +2513,7 @@ msgstr "Supprimer les brouillons de modifications ?" #: packages/admin/src/components/MediaDetailPanel.tsx:439 msgid "Discarding..." -msgstr "" +msgstr "En cours d'abandon..." #: packages/admin/src/components/settings/ApiTokenSettings.tsx:231 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:233 @@ -2522,7 +2522,7 @@ msgstr "Fermer" #: packages/admin/src/components/Widgets.tsx:125 msgid "Display a list of recent posts" -msgstr "" +msgstr "Afficher une liste des articles récents" #: packages/admin/src/components/Widgets.tsx:103 msgid "Display a navigation menu" @@ -2530,7 +2530,7 @@ msgstr "Afficher un menu de navigation" #: packages/admin/src/components/Widgets.tsx:134 msgid "Display category list" -msgstr "" +msgstr "Afficher la liste des catégories" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 @@ -2549,7 +2549,7 @@ msgstr "Taille d'affichage" #: packages/admin/src/components/Widgets.tsx:142 msgid "Display tag cloud" -msgstr "" +msgstr "Afficher le nuage d'étiquettes" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:356 #: packages/admin/src/components/editor/ImageDetailPanel.tsx:545 @@ -2605,23 +2605,23 @@ msgstr "Vers le bas" #. placeholder {0}: archive.name #: packages/admin/src/components/settings/BackupSettings.tsx:238 msgid "Download {0}" -msgstr "" +msgstr "Télécharger {0}" #: packages/admin/src/components/settings/BackupSettings.tsx:158 msgid "Download a complete backup of your site: all content (including drafts and trash), collections, taxonomies, menus, widgets, media metadata, and site settings. User accounts and secrets are never included." -msgstr "" +msgstr "Téléchargez une sauvegarde complète de votre site : tout le contenu (y compris les brouillons et la corbeille), les collections, les taxonomies, les menus, les widgets, les métadonnées des fichiers multimédias et les paramètres du site. Les comptes utilisateurs et les secrets ne sont jamais inclus." #: packages/admin/src/components/settings/BackupSettings.tsx:160 msgid "Download backup" -msgstr "" +msgstr "Télécharger la sauvegarde" #: packages/admin/src/components/settings/BackupSettings.tsx:155 msgid "Download Backup" -msgstr "" +msgstr "Télécharger une sauvegarde" #: packages/admin/src/components/Settings.tsx:123 msgid "Download backups and schedule automatic backups to storage" -msgstr "" +msgstr "Téléchargez des sauvegardes et planifiez des sauvegardes automatiques vers le stockage" #: packages/admin/src/components/RegistryPluginDetail.tsx:479 msgid "Download SBOM" @@ -2653,7 +2653,7 @@ msgstr "Brouillons" #: packages/admin/src/components/WordPressImport.tsx:1166 msgid "Drafts & Private" -msgstr "" +msgstr "Brouillons et contenu privé" #: packages/admin/src/components/WordPressImport.tsx:1119 msgid "Drag and drop or click to browse (.xml)" @@ -2817,7 +2817,7 @@ msgstr "" #: packages/admin/src/components/WordPressImport.tsx:1044 msgid "em1.…" -msgstr "" +msgstr "em1.…" #: packages/admin/src/components/InviteAcceptPage.tsx:62 #: packages/admin/src/components/Settings.tsx:116 @@ -3050,7 +3050,7 @@ msgstr "Échec lors de l'ajout du domaine" #: packages/admin/src/components/settings/SecuritySettings.tsx:188 msgid "Failed to add passkey" -msgstr "" +msgstr "Échec lors de l'ajout de la clé d'accès" #: packages/admin/src/components/WordPressImport.tsx:413 msgid "Failed to analyze WordPress site" @@ -3071,7 +3071,7 @@ msgstr "Échec lors de la création de l'administrateur" #: packages/admin/src/components/settings/BackupSettings.tsx:104 #: packages/admin/src/lib/api/backups.ts:51 msgid "Failed to create backup" -msgstr "" +msgstr "Échec lors de la création de la sauvegarde" #: packages/admin/src/components/ContentSettingsPanel.tsx:957 msgid "Failed to create byline" @@ -3114,7 +3114,7 @@ msgstr "Échec lors de la suppression du domaine autorisé" #: packages/admin/src/lib/api/backups.ts:58 msgid "Failed to delete backup" -msgstr "" +msgstr "Échec lors de la suppression de la sauvegarde" #: packages/admin/src/lib/api/bylines.ts:143 msgid "Failed to delete byline" @@ -3230,7 +3230,7 @@ msgstr "Échec lors de la récupération du mode d'authentification" #: packages/admin/src/lib/api/backups.ts:37 msgid "Failed to fetch backup settings" -msgstr "" +msgstr "Échec lors de la récupération des paramètres de sauvegarde" #: packages/admin/src/lib/api/schema.ts:170 #: packages/admin/src/lib/api/schema.ts:174 @@ -3359,7 +3359,7 @@ msgstr "Échec lors du chargement des domaines autorisés" #: packages/admin/src/components/settings/BackupSettings.tsx:135 msgid "Failed to load backup settings" -msgstr "" +msgstr "Échec lors du chargement des paramètres de sauvegarde" #. placeholder {0}: error.message #: packages/admin/src/routes/bylines.tsx:366 @@ -3487,7 +3487,7 @@ msgstr "Échec lors de l'enregistrement" #: packages/admin/src/components/settings/BackupSettings.tsx:84 msgid "Failed to save backup settings" -msgstr "" +msgstr "Échec lors de l'enregistrement des paramètres de sauvegarde" #: packages/admin/src/routes/byline-schema.tsx:122 msgid "Failed to save field" @@ -3540,7 +3540,7 @@ msgstr "Échec lors de la déprogrammation" #: packages/admin/src/router.tsx:512 msgid "Failed to update" -msgstr "" +msgstr "Échec lors de la mise à jour" #. placeholder {0}: taxonomy.label.toLowerCase() #: packages/admin/src/components/TaxonomySidebar.tsx:351 @@ -3549,7 +3549,7 @@ msgstr "Échec lors de la mise à jour de {0}" #: packages/admin/src/lib/api/backups.ts:46 msgid "Failed to update backup settings" -msgstr "" +msgstr "Échec lors de la mise à jour des paramètres de sauvegarde" #: packages/admin/src/components/ContentSettingsPanel.tsx:1007 msgid "Failed to update byline" @@ -3619,7 +3619,7 @@ msgstr "Fonctionnalité" #: packages/admin/src/components/WordPressImport.tsx:1148 msgid "Featured Images" -msgstr "" +msgstr "Images mises en avant" #: packages/admin/src/components/ContentTypeEditor.tsx:440 #: packages/admin/src/components/ContentTypeList.tsx:103 @@ -3677,7 +3677,7 @@ msgstr "Fichier {0}" #: packages/admin/src/components/FieldEditor.tsx:211 msgid "File from media library" -msgstr "Fichier de la médiathèque" +msgstr "Fichier de la bibliothèque de fichiers multimédias" #: packages/admin/src/components/MediaDetailPanel.tsx:325 #: packages/admin/src/components/MediaDetailPanel.tsx:342 @@ -3812,7 +3812,7 @@ msgstr "Groupe (facultatif)" #: packages/admin/src/components/Widgets.tsx:160 msgid "Group by" -msgstr "" +msgstr "Regrouper par" #: packages/admin/src/routes/bylines.tsx:556 msgid "Guest byline" @@ -3842,19 +3842,19 @@ msgstr "Titre 3" #: packages/admin/src/components/editor/HeadingDropdownMenu.tsx:35 msgid "Heading 4" -msgstr "" +msgstr "Titre 4" #: packages/admin/src/components/editor/HeadingDropdownMenu.tsx:36 msgid "Heading 5" -msgstr "" +msgstr "Titre 5" #: packages/admin/src/components/editor/HeadingDropdownMenu.tsx:37 msgid "Heading 6" -msgstr "" +msgstr "Titre 6" #: packages/admin/src/components/editor/HeadingDropdownMenu.tsx:154 msgid "Headings" -msgstr "" +msgstr "Titres" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:308 #: packages/admin/src/components/editor/ImageDetailPanel.tsx:497 @@ -3916,7 +3916,7 @@ msgstr "Code source HTML" #: packages/admin/src/components/PortableTextEditor.tsx:3049 #: packages/admin/src/components/PortableTextEditor.tsx:3558 msgid "https://..." -msgstr "" +msgstr "https://..." #: packages/admin/src/components/MenuEditor.tsx:424 msgid "https://example.com or /about" @@ -3928,7 +3928,7 @@ msgstr "https://example.com/image.jpg" #: packages/admin/src/components/WordPressImport.tsx:1089 msgid "https://yoursite.com" -msgstr "" +msgstr "https://votresite.com" #: packages/admin/src/components/MarketplaceBrowse.tsx:241 #: packages/admin/src/components/MarketplacePluginDetail.tsx:142 @@ -3951,7 +3951,7 @@ msgstr "Image" #: packages/admin/src/components/FieldEditor.tsx:205 msgid "Image from media library" -msgstr "Image de la médiathèque" +msgstr "Image provenant de la bibliothèque de fichiers multimédias" #: packages/admin/src/components/BlockKitMediaPickerField.tsx:67 #: packages/admin/src/components/ImageFieldRenderer.tsx:124 @@ -4055,7 +4055,7 @@ msgstr "Importé par Collection" #. placeholder {0}: wpImportProgress.comments #: packages/admin/src/components/WordPressImport.tsx:903 msgid "Importing comments... {0}" -msgstr "" +msgstr "En cours d'importation des commentaires... {0}" #: packages/admin/src/components/WordPressImport.tsx:920 msgid "Importing content..." @@ -4064,12 +4064,12 @@ msgstr "En cours d'importation de contenu..." #. placeholder {0}: wpImportProgress.processed #: packages/admin/src/components/WordPressImport.tsx:901 msgid "Importing content... {0}" -msgstr "" +msgstr "En cours d'importation du contenu... {0}" #. placeholder {0}: wpImportProgress.processed #: packages/admin/src/components/WordPressImport.tsx:900 msgid "Importing content... {0} of {totalSelectedPosts}" -msgstr "" +msgstr "En cours d'importation du contenu... {0} sur {totalSelectedPosts}" #: packages/admin/src/components/WordPressImport.tsx:2139 msgid "Importing Media" @@ -4077,7 +4077,7 @@ msgstr "Importation de fichiers multimédias" #: packages/admin/src/components/WordPressImport.tsx:904 msgid "Importing menus and site settings..." -msgstr "" +msgstr "En cours d'importation des menus et des paramètres du site..." #: packages/admin/src/components/SetupWizard.tsx:138 msgid "Include sample content (recommended for new sites)" @@ -4131,15 +4131,15 @@ msgstr "Insérer une image" #: packages/admin/src/components/PortableTextEditor.tsx:1356 msgid "Insert block" -msgstr "" +msgstr "Insérer un bloc" #: packages/admin/src/components/PortableTextEditor.tsx:3412 msgid "Insert block after current block" -msgstr "" +msgstr "Insérer un bloc après le bloc actuel" #: packages/admin/src/components/editor/DragHandleWrapper.tsx:170 msgid "Insert block below" -msgstr "" +msgstr "Insérer un bloc en dessous" #: packages/admin/src/components/MediaPickerModal.tsx:501 msgid "Insert from URL" @@ -4176,7 +4176,7 @@ msgstr "Installation bloquée" #: packages/admin/src/components/WordPressImport.tsx:1039 msgid "Install the EmDash Exporter plugin on your WordPress site and generate a key under Tools → EmDash Migration." -msgstr "" +msgstr "Installez le module d'extension EmDash Exporter dans votre site WordPress et générez une clé dans Outils → EmDash Migration." #: packages/admin/src/components/RegistryPluginDetail.tsx:791 msgid "Installation" @@ -4295,7 +4295,7 @@ msgstr "JSX" #: packages/admin/src/components/WordPressImport.tsx:916 msgid "Keep this tab open. The import runs in small steps and can be safely re-run if interrupted." -msgstr "" +msgstr "Gardez cet onglet ouvert. L'importation s'exécute par petites étapes et peut être relancée en toute sécurité en cas d'interruption." #: packages/admin/src/components/ContentSettingsPanel.tsx:836 msgid "Keep typing to narrow down more bylines." @@ -4375,7 +4375,7 @@ msgstr "Dernière utilisation le {0}" #: packages/admin/src/components/settings/BackupSettings.tsx:274 msgid "Learn more" -msgstr "" +msgstr "En savoir plus" #: packages/admin/src/components/auth/PasskeyLogin.tsx:339 msgid "Leave blank to use a discoverable passkey." @@ -4411,7 +4411,7 @@ msgstr "Clair" #: packages/admin/src/components/Widgets.tsx:163 msgid "Limit" -msgstr "" +msgstr "Limite" #: packages/admin/src/components/SignupPage.tsx:258 msgid "Link expired" @@ -4654,11 +4654,11 @@ msgstr "Gérer vos clés d'accès et votre authentification" #: packages/admin/src/components/MediaDetailPanel.tsx:317 msgid "Managed by {providerName}" -msgstr "" +msgstr "Géré par {providerName}" #: packages/admin/src/components/MediaDetailPanel.tsx:318 msgid "Managed by an external media provider" -msgstr "" +msgstr "Géré par un fournisseur de médias externe" #: packages/admin/src/components/Redirects.tsx:424 msgid "Manual" @@ -4715,7 +4715,7 @@ msgstr "Valeur maximale" #: packages/admin/src/components/Widgets.tsx:145 msgid "Maximum tags" -msgstr "" +msgstr "Nombre maximal d'étiquettes" #: packages/admin/src/components/editor/codeBlockLanguages.ts:45 msgid "MDX" @@ -4731,7 +4731,7 @@ msgstr "Médias" #: packages/admin/src/components/MediaDetailPanel.tsx:222 msgid "Media Details" -msgstr "Détails des fichiers multimédias" +msgstr "Détails du fichier multimédia" #. placeholder {0}: mediaResult.failed.length #: packages/admin/src/components/WordPressImport.tsx:2400 @@ -4753,7 +4753,7 @@ msgstr "L'importation des fichiers multimédias a été ignorée" #: packages/admin/src/components/AdminCommandPalette.tsx:160 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" -msgstr "Médiathèque" +msgstr "Bibliothèque de fichiers multimédias" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:55 msgid "Media Read" @@ -4846,7 +4846,7 @@ msgstr "Méta titres, descriptions et images sociales" #: packages/admin/src/components/WordPressImport.tsx:1051 msgid "Migration key" -msgstr "" +msgstr "Clé de migration" #: packages/admin/src/components/FieldEditor.tsx:620 msgid "Min Items" @@ -4878,11 +4878,11 @@ msgstr "Modifier les schémas de collections" #: packages/admin/src/components/Widgets.tsx:161 msgid "Monthly" -msgstr "" +msgstr "Mois" #: packages/admin/src/components/Widgets.tsx:157 msgid "Monthly/yearly archives" -msgstr "" +msgstr "Archives mensuelles/annuelles" #: packages/admin/src/components/ImageFieldRenderer.tsx:111 msgid "More information about {label}" @@ -4916,7 +4916,7 @@ msgstr "Descendre" #: packages/admin/src/components/ContentList.tsx:439 msgid "Move to trash" -msgstr "" +msgstr "Déplacer vers la corbeille" #: packages/admin/src/components/ContentList.tsx:466 #: packages/admin/src/components/ContentList.tsx:1059 @@ -4937,11 +4937,11 @@ msgstr "Monter" #: packages/admin/src/router.tsx:509 msgid "Moved {total} items to draft" -msgstr "" +msgstr "{total} éléments déplacés vers les brouillons" #: packages/admin/src/router.tsx:530 msgid "Moved {total} items to trash" -msgstr "" +msgstr "{total} éléments déplacés vers la corbeille" #: packages/admin/src/components/FieldEditor.tsx:192 msgid "Multi Select" @@ -5229,7 +5229,7 @@ msgstr "Aucun auteur correspondant." #: packages/admin/src/components/MediaLibrary.tsx:489 #: packages/admin/src/components/MediaLibrary.tsx:517 msgid "No matching media" -msgstr "" +msgstr "Aucun fichier multimédia correspondant" #: packages/admin/src/components/auth/PasskeyLogin.tsx:264 msgid "No matching passkey found for this account." @@ -5246,7 +5246,7 @@ msgstr "Aucun fichier multimédia disponible auprès de ce fournisseur" #: packages/admin/src/components/MediaLibrary.tsx:540 msgid "No media available from this provider." -msgstr "" +msgstr "Aucun fichier multimédia disponible auprès de ce fournisseur." #: packages/admin/src/components/MediaLibrary.tsx:539 #: packages/admin/src/components/MediaPickerModal.tsx:639 @@ -5272,7 +5272,7 @@ msgstr "Pas de modération (tout approuver automatiquement)" #: packages/admin/src/components/MenuEditor.tsx:329 msgid "No parent (top level)" -msgstr "" +msgstr "Aucun parent (niveau supérieur)" #: packages/admin/src/components/users/UserDetail.tsx:248 msgid "No passkeys registered" @@ -5304,7 +5304,7 @@ msgstr "Aucun aperçu" #: packages/admin/src/components/MediaDetailPanel.tsx:304 msgid "No public URL available" -msgstr "" +msgstr "Aucune URL publique disponible" #: packages/admin/src/components/Dashboard.tsx:304 msgid "No recent activity" @@ -5390,7 +5390,7 @@ msgstr "Nombre" #: packages/admin/src/components/Widgets.tsx:127 msgid "Number of posts" -msgstr "" +msgstr "Nombre d'articles" #: packages/admin/src/components/settings/GeneralSettings.tsx:278 msgid "Number of posts to show per page on list views" @@ -5404,7 +5404,7 @@ msgstr "Liste numérotée" #: packages/admin/src/components/WordPressImport.tsx:494 msgid "OAuth authorization requires HTTPS. Please use manual credentials." -msgstr "" +msgstr "L'autorisation OAuth nécessite HTTPS. Veuillez utiliser des informations d'identification manuelles." #: packages/admin/src/components/SeoImageField.tsx:46 msgid "OG Image" @@ -5491,7 +5491,7 @@ msgstr "Ou cliquez pour parcourir. Accepte les fichiers .xml exportés depuis Wo #: packages/admin/src/components/WordPressImport.tsx:1071 msgid "or connect by URL" -msgstr "" +msgstr "ou se connecter via une URL" #: packages/admin/src/components/InviteAcceptPage.tsx:97 #: packages/admin/src/components/LoginPage.tsx:263 @@ -5557,7 +5557,7 @@ msgstr "Partie d'une boucle de redirection" #: packages/admin/src/components/WordPressImport.tsx:1153 msgid "Partial" -msgstr "" +msgstr "Partiel" #: packages/admin/src/components/MarketplaceBrowse.tsx:322 msgid "Pass" @@ -5622,7 +5622,7 @@ msgstr "Les clés d'accès nécessitent HTTPS ou http://localhost (avec votre po #: packages/admin/src/components/WordPressImport.tsx:1037 msgid "Paste your migration key" -msgstr "" +msgstr "Collez votre clé de migration" #: packages/admin/src/components/Redirects.tsx:224 msgid "Path" @@ -5682,7 +5682,7 @@ msgstr "Choisissez n’importe quelle méthode pour créer votre compte administ #: packages/admin/src/components/Widgets.tsx:152 msgid "Placeholder text" -msgstr "" +msgstr "Texte substituable" #: packages/admin/src/components/auth/PasskeyLogin.tsx:311 #: packages/admin/src/components/auth/PasskeyRegistration.tsx:310 @@ -5791,7 +5791,7 @@ msgstr "Modules d'extension" #: packages/admin/src/components/settings/BackupSettings.tsx:264 msgid "Point-in-Time Restore" -msgstr "" +msgstr "Restauration à un instant précis" #: packages/admin/src/components/SeoPanel.tsx:208 msgid "Points search engines to the original version of this page, if it's duplicated from another URL" @@ -5808,7 +5808,7 @@ msgstr "Articles" #: packages/admin/src/components/WordPressImport.tsx:1144 msgid "Posts & Pages" -msgstr "" +msgstr "Articles et pages" #: packages/admin/src/components/settings/GeneralSettings.tsx:272 msgid "Posts Per Page" @@ -5864,7 +5864,7 @@ msgstr "Navigation principale" #: packages/admin/src/components/Dashboard.tsx:349 msgid "Private" -msgstr "" +msgstr "Privé" #: packages/admin/src/components/settings/EmailSettings.tsx:174 msgid "Provider:" @@ -5904,7 +5904,7 @@ msgstr "Publié {0}" #: packages/admin/src/router.tsx:486 msgid "Published {total} items" -msgstr "" +msgstr "{total} éléments publiés" #: packages/admin/src/components/ContentTypeEditor.tsx:135 msgid "Published At" @@ -5935,7 +5935,7 @@ msgstr "Citation" #: packages/admin/src/components/WordPressImport.tsx:1162 msgid "Raw meta" -msgstr "" +msgstr "Métadonnées brutes" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:66 msgid "Read collection schemas" @@ -5965,7 +5965,7 @@ msgstr "Lire votre contenu" #: packages/admin/src/lib/api/marketplace.ts:224 msgid "Read your taxonomies and terms" -msgstr "" +msgstr "Lire vos taxonomies et termes" #: packages/admin/src/components/settings/GeneralSettings.tsx:269 msgid "Reading" @@ -5981,7 +5981,7 @@ msgstr "Activité récente" #: packages/admin/src/components/Widgets.tsx:124 msgid "Recent Posts" -msgstr "" +msgstr "Articles récents" #: packages/admin/src/components/MarketplaceBrowse.tsx:43 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:35 @@ -6025,7 +6025,7 @@ msgstr "Favicon référencée indisponible." #: packages/admin/src/components/Dashboard.tsx:85 msgid "Refresh the page or try again." -msgstr "" +msgstr "Actualisez la page ou réessayez." #: packages/admin/src/components/ContentTypeList.tsx:78 msgid "Register" @@ -6580,7 +6580,7 @@ msgstr "Optimisation et vérification pour les moteurs de recherche" #: packages/admin/src/components/Widgets.tsx:150 msgid "Search form" -msgstr "" +msgstr "Formulaire de recherche" #: packages/admin/src/components/MediaLibrary.tsx:416 #: packages/admin/src/components/MediaPickerModal.tsx:578 @@ -6738,7 +6738,7 @@ msgstr "Sélectionner {label}" #: packages/admin/src/components/ContentList.tsx:973 msgid "Select {title}" -msgstr "" +msgstr "Sélectionner {title}" #: packages/admin/src/components/Widgets.tsx:939 msgid "Select a component..." @@ -6754,7 +6754,7 @@ msgstr "Tout sélectionner" #: packages/admin/src/components/ContentList.tsx:497 msgid "Select all on this page" -msgstr "" +msgstr "Tout sélectionner sur cette page" #. placeholder {0}: comment.authorName #: packages/admin/src/components/comments/CommentInbox.tsx:456 @@ -6821,7 +6821,7 @@ msgstr "Sélectionner..." #: packages/admin/src/components/PortableTextEditor.tsx:1372 msgid "Selected {selectedItemTitle}" -msgstr "" +msgstr "{selectedItemTitle} sélectionné" #: packages/admin/src/components/MediaPickerModal.tsx:733 msgid "Selected:" @@ -6913,7 +6913,7 @@ msgstr "Définissez sur 0 pour que les commentaires ne soient jamais fermés aut #: packages/admin/src/components/ContentList.tsx:425 msgid "Set to draft" -msgstr "" +msgstr "Convertir en brouillon" #: packages/admin/src/components/SetupWizard.tsx:559 msgid "Set up your site" @@ -6970,23 +6970,23 @@ msgstr "Texte court" #: packages/admin/src/components/Widgets.tsx:144 msgid "Show count" -msgstr "" +msgstr "Afficher le total" #: packages/admin/src/components/Widgets.tsx:129 msgid "Show date" -msgstr "" +msgstr "Afficher la date" #: packages/admin/src/components/Widgets.tsx:137 msgid "Show hierarchy" -msgstr "" +msgstr "Afficher la hiérarchie" #: packages/admin/src/components/Widgets.tsx:136 msgid "Show post count" -msgstr "" +msgstr "Afficher le nombre d'articles" #: packages/admin/src/components/Widgets.tsx:128 msgid "Show thumbnails" -msgstr "" +msgstr "Afficher les vignettes" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:210 msgid "Show token" @@ -7057,7 +7057,7 @@ msgstr "Identité du site" #: packages/admin/src/components/WordPressImport.tsx:2270 msgid "site identity applied (title, tagline, logo)" -msgstr "" +msgstr "identité du site appliquée (titre, slogan, logo)" #: packages/admin/src/components/Settings.tsx:71 msgid "Site identity, logo, favicon, and reading preferences" @@ -7087,7 +7087,7 @@ msgstr "URL du site" #: packages/admin/src/components/settings/BackupSettings.tsx:267 msgid "Sites on Cloudflare D1 can additionally restore the database to any minute within the last 30 days using D1 Time Travel — always on, no setup required." -msgstr "" +msgstr "Les sites hébergés sur Cloudflare D1 peuvent également restaurer la base de données à n'importe quel moment des 30 derniers jours grâce à « D1 Time Travel » — toujours actif, sans configuration requise." #: packages/admin/src/components/MediaLibrary.tsx:588 msgid "Size" @@ -7213,7 +7213,7 @@ msgstr "Démarrer l'importation" #: packages/admin/src/components/PortableTextEditor.tsx:2201 #: packages/admin/src/components/PortableTextEditor.tsx:2202 msgid "Start writing, or type '/' for commands" -msgstr "" +msgstr "Commencez à écrire, ou saisissez « / » pour les commandes" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 @@ -7229,15 +7229,15 @@ msgstr "Code d'état" #: packages/admin/src/components/Dashboard.tsx:357 msgid "Status: {status}" -msgstr "" +msgstr "Statut : {status}" #: packages/admin/src/components/settings/BackupSettings.tsx:173 msgid "Store a daily backup in your site's storage bucket. Old backups are removed automatically." -msgstr "" +msgstr "Enregistrez une sauvegarde quotidienne dans le compartiment de stockage de votre site. Les anciennes sauvegardes sont supprimées automatiquement." #: packages/admin/src/components/settings/BackupSettings.tsx:218 msgid "Stored Backups" -msgstr "" +msgstr "Sauvegardes conservées" #: packages/admin/src/components/BylineFieldEditor.tsx:293 msgid "Stored per locale — each translation of a byline gets its own value." @@ -7254,7 +7254,7 @@ msgstr "Structure" #: packages/admin/src/components/WordPressImport.tsx:1164 msgid "Structured" -msgstr "" +msgstr "Structuré" #: packages/admin/src/components/FieldEditor.tsx:523 msgid "Sub-Fields" @@ -7299,7 +7299,7 @@ msgstr "Tableau" #: packages/admin/src/components/PortableTextEditor.tsx:3181 msgid "Table controls" -msgstr "" +msgstr "Contrôles du tableau" #: packages/admin/src/components/settings/GeneralSettings.tsx:139 #: packages/admin/src/components/SetupWizard.tsx:127 @@ -7466,7 +7466,7 @@ msgstr "Cette collection est définie dans le code. Certains paramètres ne peuv #: packages/admin/src/components/WordPressImport.tsx:1059 msgid "This doesn't look like a valid migration key. Generate a new one in the plugin and paste the full string starting with \"em1.\"." -msgstr "" +msgstr "Cela ne ressemble pas à une clé de migration valide. Générez-en une nouvelle dans le module d'extension et collez la chaîne de caractères complète commençant par « em1. »." #: packages/admin/src/components/MediaPickerModal.tsx:417 msgid "This field does not accept {sniffedMime} files." @@ -7500,7 +7500,7 @@ msgstr "Cette clé d'accès est déjà enregistrée sur cet appareil." #. placeholder {0}: archiveToDelete?.name ?? "" #: packages/admin/src/components/settings/BackupSettings.tsx:283 msgid "This permanently deletes {0} from storage." -msgstr "" +msgstr "Cela supprime définitivement {0} du stockage." #: packages/admin/src/components/MarketplacePluginDetail.tsx:276 msgid "This plugin requires no special permissions." @@ -7709,7 +7709,7 @@ msgstr "Bascule vrai/faux" #: packages/admin/src/components/MediaLibrary.tsx:493 msgid "Try a broader media type or clear your filters." -msgstr "" +msgstr "Essayez un type de média plus large ou effacez vos filtres." #: packages/admin/src/components/MediaPickerModal.tsx:642 msgid "Try a different search term" @@ -7738,11 +7738,11 @@ msgstr "Essayez un autre code" #: packages/admin/src/components/MediaLibrary.tsx:518 msgid "Try another filename or clear your search." -msgstr "" +msgstr "Essayez un autre nom de fichier ou effacez votre recherche." #: packages/admin/src/components/MediaLibrary.tsx:492 msgid "Try another filename, or clear your search and filters." -msgstr "" +msgstr "Essayez un autre nom de fichier, ou effacez votre recherche et vos filtres." #: packages/admin/src/components/WordPressImport.tsx:1286 #: packages/admin/src/components/WordPressImport.tsx:1408 @@ -8001,7 +8001,7 @@ msgstr "Téléverser une image" #: packages/admin/src/components/MediaLibrary.tsx:505 msgid "Upload images, videos, and documents to keep reusable assets in one place." -msgstr "" +msgstr "Téléversez des images, des vidéos et des documents pour conserver vos ressources réutilisables au même endroit." #: packages/admin/src/components/Dashboard.tsx:111 msgid "Upload Media" @@ -8009,7 +8009,7 @@ msgstr "Téléverser des fichiers multimédias" #: packages/admin/src/components/MediaLibrary.tsx:529 msgid "Upload media to keep reusable assets in one place." -msgstr "" +msgstr "Téléversez des fichiers multimédias pour conserver vos ressources réutilisables au même endroit." #. placeholder {0}: activeProviderInfo?.name || t`Library` #: packages/admin/src/components/MediaLibrary.tsx:356 @@ -8315,31 +8315,31 @@ msgstr "Nombre entier" #: packages/admin/src/components/MediaDetailPanel.tsx:121 msgid "Why can't this be changed?" -msgstr "" +msgstr "Pourquoi cela ne peut-il pas être modifié ?" #: packages/admin/src/components/SeoPanel.tsx:209 msgid "Why is this important for duplicate pages?" -msgstr "" +msgstr "Pourquoi est-ce important pour les pages en double ?" #: packages/admin/src/components/SeoPanel.tsx:185 msgid "Why is this important for search result summaries?" -msgstr "" +msgstr "Pourquoi est-ce important pour les résumés des résultats de recherche ?" #: packages/admin/src/components/SeoPanel.tsx:165 msgid "Why is this important for search result titles?" -msgstr "" +msgstr "Pourquoi est-ce important pour les titres des résultats de recherche ?" #: packages/admin/src/components/SeoPanel.tsx:228 msgid "Why is this important for search visibility?" -msgstr "" +msgstr "Pourquoi est-ce important pour la visibilité dans les résultats de recherche ?" #: packages/admin/src/components/SeoImageField.tsx:44 msgid "Why is this important for social sharing?" -msgstr "" +msgstr "Pourquoi est-ce important pour le partage sur les réseaux sociaux ?" #: packages/admin/src/components/MediaDetailPanel.tsx:123 msgid "Why is this important?" -msgstr "" +msgstr "Pourquoi est-ce important ?" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:163 msgid "Wide" @@ -8401,7 +8401,7 @@ msgstr "Sans fournisseur de messagerie, les liens d'invitation doivent être par #: packages/admin/src/components/WordPressImport.tsx:210 msgid "WordPress authorization was rejected" -msgstr "" +msgstr "L'autorisation WordPress a été refusée" #: packages/admin/src/components/WordPressImport.tsx:1476 msgid "WordPress Username" @@ -8409,7 +8409,7 @@ msgstr "Nom d'utilisateur WordPress" #: packages/admin/src/components/ContentList.tsx:404 msgid "Working on {selectedCount} items…" -msgstr "" +msgstr "Traitement de {selectedCount} éléments en cours…" #: packages/admin/src/components/Widgets.tsx:887 msgid "Write widget content..." @@ -8425,7 +8425,7 @@ msgstr "XML" #: packages/admin/src/components/WordPressImport.tsx:1497 msgid "xxxx xxxx xxxx xxxx xxxx xxxx" -msgstr "" +msgstr "xxxx xxxx xxxx xxxx xxxx xxxx" #: packages/admin/src/components/editor/codeBlockLanguages.ts:59 msgid "YAML" @@ -8433,7 +8433,7 @@ msgstr "YAML" #: packages/admin/src/components/Widgets.tsx:161 msgid "Yearly" -msgstr "" +msgstr "Année" #: packages/admin/src/components/users/UserDetail.tsx:236 #: packages/admin/src/routes/byline-schema.tsx:420 @@ -8443,7 +8443,7 @@ msgstr "Oui" #: packages/admin/src/components/WordPressImport.tsx:1160 msgid "Yoast/RankMath" -msgstr "" +msgstr "Yoast/RankMath" #: packages/admin/src/components/DeviceAuthorizePage.tsx:188 msgid "You can close this page and return to your terminal." @@ -8561,7 +8561,7 @@ msgstr "Le nom d'utilisateur de votre compte LinkedIn" #: packages/admin/src/components/MediaLibrary.tsx:504 #: packages/admin/src/components/MediaLibrary.tsx:528 msgid "Your media library is empty" -msgstr "" +msgstr "Votre bibliothèque de fichiers multimédias est vide" #: packages/admin/src/components/SetupWizard.tsx:209 msgid "Your Name" @@ -8587,7 +8587,7 @@ msgstr "Votre identifiant Twitter/X (p. ex. @username)" #: packages/admin/src/components/MediaDetailPanel.tsx:437 msgid "Your unsaved media changes will be lost." -msgstr "" +msgstr "Vos modifications non enregistrées seront perdues." #. placeholder {0}: attachments.count #: packages/admin/src/components/WordPressImport.tsx:2062 From c8a5ac8f1ccf6f8bb3c668ffb2d57613c8ac45fe Mon Sep 17 00:00:00 2001 From: Kevin Kyburz <30409887+swissky@users.noreply.github.com> Date: Mon, 20 Jul 2026 21:18:01 +0200 Subject: [PATCH 07/33] feat(seo): getSeoMeta accepts defaultTitle/defaultDescription (#1518) (#1957) Pages with computed titles/descriptions had to drop down to getContentSeo and merge panel-vs-default by hand, because getSeoMeta's only fallbacks were data.title/data.excerpt. The new options rank between the SEO panel value and the data fallback, so editor-set panel values still win. --- .changeset/seo-meta-defaults.md | 5 +++ packages/core/src/seo/index.ts | 23 ++++++++-- .../core/tests/unit/seo/get-seo-meta.test.ts | 43 +++++++++++++++++++ 3 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 .changeset/seo-meta-defaults.md diff --git a/.changeset/seo-meta-defaults.md b/.changeset/seo-meta-defaults.md new file mode 100644 index 0000000000..b6ef0cbe84 --- /dev/null +++ b/.changeset/seo-meta-defaults.md @@ -0,0 +1,5 @@ +--- +"emdash": minor +--- + +Adds `defaultTitle` and `defaultDescription` options to `getSeoMeta` so pages with computed titles or descriptions can pass their own fallbacks while values set in the admin SEO panel still take precedence. Previously such pages had to drop down to `getContentSeo` and merge panel values by hand. diff --git a/packages/core/src/seo/index.ts b/packages/core/src/seo/index.ts index bd053b42b5..f1e56f2851 100644 --- a/packages/core/src/seo/index.ts +++ b/packages/core/src/seo/index.ts @@ -83,6 +83,17 @@ export interface SeoMetaOptions { path?: string; /** Default OG image URL if content has none */ defaultOgImage?: string; + /** + * Default page title used when the SEO panel has none. Ranks above the + * `data.title` fallback, so computed titles (e.g. `` `${title} (cover of + * ${artist})` ``) apply while an editor-set SEO title still wins. + */ + defaultTitle?: string; + /** + * Default description used when the SEO panel has none. Ranks above the + * `data.excerpt` fallback; an editor-set SEO description still wins. + */ + defaultDescription?: string; } /** @@ -96,7 +107,7 @@ export interface SeoMetaOptions { * @returns Resolved meta tags ready for template use */ export function getSeoMeta(content: SeoContentInput, options: SeoMetaOptions = {}): SeoMeta { - const { siteTitle, siteUrl, path, defaultOgImage } = options; + const { siteTitle, siteUrl, path, defaultOgImage, defaultTitle, defaultDescription } = options; const separator = options.titleSeparator || " | "; // SEO can be in content.seo (ContentItem) or content.data.seo (ContentEntry) const seo = content.seo ?? @@ -108,15 +119,19 @@ export function getSeoMeta(content: SeoContentInput, options: SeoMetaOptio noIndex: false, }; - // Title: SEO title > content title > fallback + // Title: SEO panel title > caller default > content title const pageTitle = - seo.title || (typeof content.data.title === "string" ? content.data.title : null) || ""; + seo.title || + defaultTitle || + (typeof content.data.title === "string" ? content.data.title : null) || + ""; const fullTitle = siteTitle && pageTitle ? `${pageTitle}${separator}${siteTitle}` : pageTitle; - // Description: SEO description > excerpt + // Description: SEO panel description > caller default > excerpt const description = seo.description || + defaultDescription || (typeof content.data.excerpt === "string" ? content.data.excerpt : null) || null; diff --git a/packages/core/tests/unit/seo/get-seo-meta.test.ts b/packages/core/tests/unit/seo/get-seo-meta.test.ts index a17bda4abe..30020b41cf 100644 --- a/packages/core/tests/unit/seo/get-seo-meta.test.ts +++ b/packages/core/tests/unit/seo/get-seo-meta.test.ts @@ -47,3 +47,46 @@ describe("getSeoMeta ogImage URL building", () => { expect(meta.ogImage).toBe("https://example.com/_emdash/api/media/file/01KS.svg"); }); }); + +describe("getSeoMeta defaultTitle / defaultDescription (#1518)", () => { + const entry = { + data: { title: "Raw Title", excerpt: "Raw excerpt" }, + }; + + it("uses computed defaults over data.title / data.excerpt", () => { + const meta = getSeoMeta(entry, { + defaultTitle: "Raw Title (cover of Artist)", + defaultDescription: "A computed description", + }); + expect(meta.title).toBe("Raw Title (cover of Artist)"); + expect(meta.description).toBe("A computed description"); + }); + + it("lets an editor-set SEO panel value win over the caller default", () => { + const meta = getSeoMeta( + { + data: { + ...entry.data, + seo: { title: "Panel Title", description: "Panel description" }, + }, + }, + { + defaultTitle: "Computed default", + defaultDescription: "Computed description", + }, + ); + expect(meta.title).toBe("Panel Title"); + expect(meta.description).toBe("Panel description"); + }); + + it("still falls back to data.title / data.excerpt without defaults", () => { + const meta = getSeoMeta(entry, {}); + expect(meta.title).toBe("Raw Title"); + expect(meta.description).toBe("Raw excerpt"); + }); + + it("applies the siteTitle suffix to the default title", () => { + const meta = getSeoMeta(entry, { defaultTitle: "Computed", siteTitle: "My Site" }); + expect(meta.title).toBe("Computed | My Site"); + }); +}); From 918bffc16656564bf5ea86e8d1c40bc44924f817 Mon Sep 17 00:00:00 2001 From: Kevin Kyburz <30409887+swissky@users.noreply.github.com> Date: Mon, 20 Jul 2026 21:47:55 +0200 Subject: [PATCH 08/33] feat(mcp): add media_upload tool for programmatic media management (#1954) * feat(mcp): add media_upload tool for programmatic media management Adds a media_upload MCP tool that accepts base64-encoded file data or a public URL, runs the same pipeline as the REST upload route (global MIME allowlist, size limit, content-hash dedupe, storage upload, image metadata enrichment), and returns the media item ready to reference from content fields. URL fetches go through ssrfSafeFetch so redirects and private hosts are rejected. Closes #620, closes #1825. * fix(mcp): validate MIME string before allowlist and storage upload The prefix-based allowlist check let a crafted contentType like 'image/png\r\nX-Evil: 1' through to the storage backend's ContentType header (echoed by the media file route). Validate against the existing CONTENT_TYPE_RE first, and tighten the MCP input schema (regex on contentType, .url() on url) so malformed input is rejected before any bytes are buffered or fetched. --------- Co-authored-by: Matt Kane --- .changeset/mcp-media-upload.md | 5 + docs/src/content/docs/guides/ai-tools.mdx | 2 +- .../src/content/docs/reference/mcp-server.mdx | 27 +- .../core/src/api/handlers/media-upload.ts | 210 +++++++++++++++ packages/core/src/api/schemas/media.ts | 2 +- packages/core/src/mcp/server.ts | 70 ++++- packages/core/src/utils/base64.ts | 9 +- .../unit/api/handlers/media-upload.test.ts | 245 ++++++++++++++++++ .../core/tests/unit/mcp/authorization.test.ts | 59 +++++ 9 files changed, 619 insertions(+), 10 deletions(-) create mode 100644 .changeset/mcp-media-upload.md create mode 100644 packages/core/src/api/handlers/media-upload.ts create mode 100644 packages/core/tests/unit/api/handlers/media-upload.test.ts diff --git a/.changeset/mcp-media-upload.md b/.changeset/mcp-media-upload.md new file mode 100644 index 0000000000..333642f8e3 --- /dev/null +++ b/.changeset/mcp-media-upload.md @@ -0,0 +1,5 @@ +--- +"emdash": minor +--- + +Adds a `media_upload` MCP tool that uploads a file from base64-encoded data or a public URL and registers it in the media library, so agent workflows can create media without dropping to the CLI or raw API. Uploads are deduplicated by content hash and respect the global MIME allowlist and maximum upload size. diff --git a/docs/src/content/docs/guides/ai-tools.mdx b/docs/src/content/docs/guides/ai-tools.mdx index eb177017c4..fbf9e970dd 100644 --- a/docs/src/content/docs/guides/ai-tools.mdx +++ b/docs/src/content/docs/guides/ai-tools.mdx @@ -131,7 +131,7 @@ Once connected, you can ask the AI assistant to perform any of these operations - **Inspect** -- "What's the current site title?" or "Show me the social links" - **Update identity** -- "Set the site title to 'Acme Blog' and tagline to 'Stories from the team'" -- **Set logo / favicon** -- "Use this image as the site logo" (after registering it with `media_create`) +- **Set logo / favicon** -- "Use this image as the site logo" (after uploading it with `media_upload`) - **SEO defaults** -- "Set the default OG image to the new banner" or "Update the title separator to a vertical bar" - **Social handles** -- "Add our Mastodon and YouTube links to the social settings" diff --git a/docs/src/content/docs/reference/mcp-server.mdx b/docs/src/content/docs/reference/mcp-server.mdx index 05d8f44621..4a72e4042f 100644 --- a/docs/src/content/docs/reference/mcp-server.mdx +++ b/docs/src/content/docs/reference/mcp-server.mdx @@ -63,7 +63,8 @@ In addition to scopes, some tools require a minimum RBAC role. Both must be sati | Menus manage | Editor (40) | | Settings read | Editor (40) | | Settings manage | Admin (50) | -| Media upload (`media_create`) | Author (30) | +| Media upload (`media_upload`) | Contributor (20) | +| Media register (`media_create`) | Author (30) | | Media usage repair | Admin (50) | See the [Authentication guide](/guides/authentication#user-roles) for role definitions. @@ -80,7 +81,7 @@ Responses follow the [JSON-RPC 2.0](https://www.jsonrpc.org/specification) forma ## Tools -The server exposes 52 tools across eight domains: content, schema, media, search, taxonomies, menus, revisions, and settings. Each tool returns results as JSON text content, or an error message with `isError: true` on failure. +The server exposes tools across eight domains: content, schema, media, search, taxonomies, menus, revisions, and settings. Each tool returns results as JSON text content, or an error message with `isError: true` on failure. ### Content Tools @@ -379,12 +380,32 @@ List uploaded media files with optional MIME type filtering and pagination. **Scope:** `media:read` | **Read-only:** Yes +#### `media_upload` + +Upload a media file from base64-encoded data or an external URL and register it in the media library. Returns the media item with `id`, `storageKey`, and `url` -- ready to reference from content fields (e.g. `featured_image`) via `content_create` / `content_update`. + +Uploads are deduplicated by content hash: re-uploading identical bytes returns the existing item with `deduplicated: true`. Image uploads are enriched automatically with dimensions, a blurhash placeholder, and the dominant color. + +| Parameter | Type | Required | Description | +| --- | --- | --- | --- | +| `filename` | `string` | Yes | Filename including extension (e.g. `cover.png`) | +| `base64` | `string` | One of `base64` / `url` | Base64-encoded file contents | +| `url` | `string` | One of `base64` / `url` | Public http(s) URL to fetch the file from | +| `contentType` | `string` | With `base64` | MIME type (e.g. `image/png`). With `url` it defaults to the response's `Content-Type` header. | +| `alt` | `string` | No | Alt text for accessibility | + + + +**Scope:** `media:write` | **Minimum role:** Contributor + #### `media_create` Register a media file that has already been uploaded to storage. The caller is responsible for placing the file at `storageKey` (typically using a signed upload URL from the admin UI or a separate API). This tool persists the metadata record so the file is discoverable via `media_list` / `media_get` and can be referenced by content. | Parameter | Type | Required | Description | diff --git a/packages/core/src/api/handlers/media-upload.ts b/packages/core/src/api/handlers/media-upload.ts new file mode 100644 index 0000000000..8d128eb300 --- /dev/null +++ b/packages/core/src/api/handlers/media-upload.ts @@ -0,0 +1,210 @@ +/** + * Programmatic media upload handler (MCP `media_upload` tool). + * + * Accepts file bytes as base64 or fetches them from an external URL + * (SSRF-guarded), then runs the same pipeline as the multipart REST + * upload route: allowlist + size validation, content-hash deduplication, + * storage upload, image metadata enrichment, and record creation. + */ + +import * as path from "node:path"; + +import type { Kysely } from "kysely"; +import { ulid } from "ulidx"; + +import { MediaRepository, type MediaItem } from "../../database/repositories/media.js"; +import type { Database } from "../../database/types.js"; +import { enrichImageMetadata } from "../../media/enrich.js"; +import { matchesMimeAllowlist, normalizeMime } from "../../media/mime.js"; +import { SsrfError, ssrfSafeFetch } from "../../security/ssrf.js"; +import type { Storage } from "../../storage/types.js"; +import { decodeBase64Bytes } from "../../utils/base64.js"; +import { computeContentHash } from "../../utils/hash.js"; +import { CONTENT_TYPE_RE, DEFAULT_MAX_UPLOAD_SIZE, formatFileSize } from "../schemas/media.js"; +import type { ApiResult } from "../types.js"; +import { GLOBAL_UPLOAD_ALLOWLIST } from "./media-allowlist.js"; + +export interface MediaUploadInput { + /** Original filename (e.g. 'logo.png'); the extension is kept on the storage key. */ + filename: string; + /** Base64-encoded file contents. Exactly one of `base64` / `url` must be set. */ + base64?: string; + /** External http(s) URL to fetch the file from. Exactly one of `base64` / `url` must be set. */ + url?: string; + /** + * MIME type. Required with `base64`; optional with `url` (falls back to + * the response's Content-Type header). + */ + contentType?: string; + /** Alt text stored on the media record. */ + alt?: string; + authorId?: string; + /** Upload size limit in bytes (defaults to DEFAULT_MAX_UPLOAD_SIZE). */ + maxUploadSize?: number; +} + +export type MediaUploadResult = ApiResult<{ + item: MediaItem & { url: string }; + deduplicated?: boolean; +}>; + +function fail(code: string, message: string): MediaUploadResult { + return { success: false, error: { code, message } }; +} + +/** Same relative-URL shape the REST media routes return. */ +function withUrl(item: MediaItem): MediaItem & { url: string } { + return { ...item, url: `/_emdash/api/media/file/${item.storageKey}` }; +} + +/** Strip parameters from a Content-Type header value (e.g. '; charset=...'). */ +function bareMime(headerValue: string): string { + return (headerValue.split(";")[0] ?? "").trim(); +} + +/** + * Acquire the file bytes and MIME type from either the base64 payload or + * the external URL. Returns an error result on any validation failure. + */ +async function acquireBytes( + input: MediaUploadInput, + maxUploadSize: number, +): Promise<{ bytes: Uint8Array; mimeType: string } | MediaUploadResult> { + if (input.base64) { + if (!input.contentType) { + return fail("VALIDATION_ERROR", "contentType is required when uploading base64 data"); + } + // Cheap size precheck on the encoded string (decoded size is ~3/4 of + // the base64 length) before allocating the decoded buffer. + if ((input.base64.length * 3) / 4 > maxUploadSize) { + return fail( + "PAYLOAD_TOO_LARGE", + `File exceeds maximum size of ${formatFileSize(maxUploadSize)}`, + ); + } + try { + return { bytes: decodeBase64Bytes(input.base64), mimeType: input.contentType }; + } catch { + return fail("VALIDATION_ERROR", "Invalid base64 data"); + } + } + + // url mode — the caller guarantees exactly one source, so url is set here + const url = input.url; + if (!url) { + return fail("VALIDATION_ERROR", "Provide exactly one of 'base64' or 'url'"); + } + let response: Response; + try { + response = await ssrfSafeFetch(url, { headers: { accept: "*/*" } }); + } catch (error) { + if (error instanceof SsrfError) { + return fail("VALIDATION_ERROR", `URL not allowed: ${error.message}`); + } + return fail("FETCH_ERROR", "Failed to fetch file from URL"); + } + if (!response.ok) { + return fail("FETCH_ERROR", `Failed to fetch file from URL (HTTP ${response.status})`); + } + + const contentLength = response.headers.get("Content-Length"); + if (contentLength && parseInt(contentLength, 10) > maxUploadSize) { + return fail( + "PAYLOAD_TOO_LARGE", + `File exceeds maximum size of ${formatFileSize(maxUploadSize)}`, + ); + } + + const mimeType = input.contentType ?? bareMime(response.headers.get("Content-Type") ?? ""); + if (!mimeType) { + return fail("VALIDATION_ERROR", "Could not determine MIME type — pass contentType explicitly"); + } + + const bytes = new Uint8Array(await response.arrayBuffer()); + return { bytes, mimeType }; +} + +/** + * Upload a media file from base64 data or an external URL. + * + * Mirrors the REST `POST /_emdash/api/media` route: global MIME allowlist, + * size limit, content-hash dedupe (returns the existing item with + * `deduplicated: true`), storage upload with cleanup on failure, and + * image metadata enrichment (dimensions, blurhash, dominant color). + */ +export async function handleMediaUpload( + db: Kysely, + storage: Storage, + input: MediaUploadInput, +): Promise { + if (!input.base64 === !input.url) { + return fail("VALIDATION_ERROR", "Provide exactly one of 'base64' or 'url'"); + } + + const rawMax = input.maxUploadSize ?? DEFAULT_MAX_UPLOAD_SIZE; + if (!Number.isFinite(rawMax) || rawMax <= 0) { + return fail("CONFIGURATION_ERROR", "Invalid maxUploadSize configuration"); + } + + const acquired = await acquireBytes(input, rawMax); + if ("success" in acquired) return acquired; + const { bytes } = acquired; + + // Validate the raw MIME string before normalize/allowlist: normalizeMime + // only strips parameters and matchesMimeAllowlist only checks startsWith, + // so without this a crafted value like "image/png\r\nX-Evil: 1" would + // reach the storage backend's ContentType header and be echoed by the + // media file serving route. + if (!CONTENT_TYPE_RE.test(acquired.mimeType)) { + return fail("VALIDATION_ERROR", "Invalid content type"); + } + const mimeType = normalizeMime(acquired.mimeType); + + if (!matchesMimeAllowlist(mimeType, GLOBAL_UPLOAD_ALLOWLIST)) { + return fail("INVALID_TYPE", "File type not allowed"); + } + if (bytes.byteLength > rawMax) { + return fail("PAYLOAD_TOO_LARGE", `File exceeds maximum size of ${formatFileSize(rawMax)}`); + } + + try { + const contentHash = await computeContentHash(bytes); + const repo = new MediaRepository(db); + + const existing = await repo.findByContentHash(contentHash); + if (existing) { + return { success: true, data: { item: withUrl(existing), deduplicated: true } }; + } + + const storageKey = `${ulid()}${path.extname(input.filename)}`; + await storage.upload({ key: storageKey, body: bytes, contentType: mimeType }); + + try { + const enriched = await enrichImageMetadata(bytes, mimeType); + const item = await repo.create({ + filename: input.filename, + mimeType, + size: bytes.byteLength, + width: enriched.width, + height: enriched.height, + alt: input.alt, + storageKey, + contentHash, + blurhash: enriched.blurhash, + dominantColor: enriched.dominantColor, + authorId: input.authorId, + }); + return { success: true, data: { item: withUrl(item) } }; + } catch (error) { + // Don't leave an orphaned object in storage when record creation fails + try { + await storage.delete(storageKey); + } catch { + // Ignore cleanup errors + } + throw error; + } + } catch { + return fail("UPLOAD_ERROR", "Upload failed"); + } +} diff --git a/packages/core/src/api/schemas/media.ts b/packages/core/src/api/schemas/media.ts index cdcfee3598..d95ad0a8ca 100644 --- a/packages/core/src/api/schemas/media.ts +++ b/packages/core/src/api/schemas/media.ts @@ -58,7 +58,7 @@ export function formatFileSize(bytes: number): string { // Matches a full MIME type (type/subtype) with an optional semicolon-delimited // parameter section. Forbids CR/LF to prevent header injection. -const CONTENT_TYPE_RE = /^[a-z0-9][a-z0-9!#$&^_+\-.]*\/[a-z0-9!#$&^_+\-.]+(\s*;[^\r\n]*)?$/i; +export const CONTENT_TYPE_RE = /^[a-z0-9][a-z0-9!#$&^_+\-.]*\/[a-z0-9!#$&^_+\-.]+(\s*;[^\r\n]*)?$/i; export function mediaUploadUrlBody(maxSize: number) { if (!Number.isFinite(maxSize) || maxSize <= 0) { diff --git a/packages/core/src/mcp/server.ts b/packages/core/src/mcp/server.ts index c77c873787..ab07182805 100644 --- a/packages/core/src/mcp/server.ts +++ b/packages/core/src/mcp/server.ts @@ -17,6 +17,7 @@ import { z } from "zod"; import { bylineCreateBody, bylineUpdateBody, + CONTENT_TYPE_RE, contentBylineInputSchema, contentSeoInput, } from "#api/schemas.js"; @@ -1824,9 +1825,8 @@ export function createMcpServer(): McpServer { "caller is responsible for placing the file at `storageKey` (typically " + "using a signed upload URL obtained from the admin UI or a separate API). " + "This tool persists the metadata record so the file is discoverable via " + - "media_list / media_get and can be referenced by content. For binary " + - "uploads the MCP transport is not appropriate — use the signed-upload " + - "flow instead.", + "media_list / media_get and can be referenced by content. To upload the " + + "file itself, use media_upload (base64 data or a public URL) instead.", inputSchema: z.object({ filename: z.string().describe("Original filename (e.g. 'logo.png')"), mimeType: z.string().describe("MIME type (e.g. 'image/png')"), @@ -1863,6 +1863,70 @@ export function createMcpServer(): McpServer { }, ); + server.registerTool( + "media_upload", + { + title: "Upload Media", + description: + "Upload a media file from base64-encoded data or an external URL and " + + "register it in the media library. Returns the media item with id, " + + "storageKey, and url — ready to reference from content fields (e.g. " + + "featured_image) via content_create / content_update. Uploads are " + + "deduplicated by content hash: re-uploading identical bytes returns " + + "the existing item with deduplicated: true. URL fetches must resolve " + + "to a public http(s) host (SSRF-guarded). Subject to the global " + + "upload MIME allowlist and the configured maximum upload size.", + inputSchema: z.object({ + filename: z.string().min(1).describe("Filename including extension (e.g. 'cover.png')"), + base64: z + .string() + .optional() + .describe("Base64-encoded file contents. Provide exactly one of base64 / url."), + url: z + .string() + .url() + .optional() + .describe( + "Public http(s) URL to fetch the file from. Provide exactly one of base64 / url.", + ), + contentType: z + .string() + .regex(CONTENT_TYPE_RE, "Invalid content type") + .optional() + .describe( + "MIME type (e.g. 'image/png'). Required with base64; with url it " + + "defaults to the response's Content-Type header.", + ), + alt: z.string().optional().describe("Alt text for accessibility"), + }), + annotations: { destructiveHint: false }, + }, + async (args, extra) => { + requireScope(extra, "media:write"); + requireRole(extra, Role.CONTRIBUTOR); + const { emdash, userId } = getExtra(extra); + if (!emdash.storage) { + return respondError("NO_STORAGE", "Storage not configured"); + } + try { + const { handleMediaUpload } = await import("../api/handlers/media-upload.js"); + return unwrap( + await handleMediaUpload(emdash.db, emdash.storage, { + filename: args.filename, + base64: args.base64, + url: args.url, + contentType: args.contentType, + alt: args.alt, + authorId: userId, + maxUploadSize: emdash.config.maxUploadSize, + }), + ); + } catch (error) { + return respondHandlerError(error, "UPLOAD_ERROR"); + } + }, + ); + server.registerTool( "media_get", { diff --git a/packages/core/src/utils/base64.ts b/packages/core/src/utils/base64.ts index 0ea8c7a1f1..9dae6dade2 100644 --- a/packages/core/src/utils/base64.ts +++ b/packages/core/src/utils/base64.ts @@ -37,11 +37,16 @@ export function encodeBase64(str: string): string { /** Decode a standard base64 string to a UTF-8 string. */ export function decodeBase64(base64: string): string { - if (hasNative) return new TextDecoder().decode(Uint8Array.fromBase64(base64)); + return new TextDecoder().decode(decodeBase64Bytes(base64)); +} + +/** Decode a standard base64 string to raw bytes (for binary payloads). */ +export function decodeBase64Bytes(base64: string): Uint8Array { + if (hasNative) return Uint8Array.fromBase64(base64); const binary = atob(base64); const bytes = new Uint8Array(binary.length); for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); - return new TextDecoder().decode(bytes); + return bytes; } // --------------------------------------------------------------------------- diff --git a/packages/core/tests/unit/api/handlers/media-upload.test.ts b/packages/core/tests/unit/api/handlers/media-upload.test.ts new file mode 100644 index 0000000000..4bca1afd3e --- /dev/null +++ b/packages/core/tests/unit/api/handlers/media-upload.test.ts @@ -0,0 +1,245 @@ +/** + * Tests for the programmatic media upload handler backing the + * `media_upload` MCP tool (#620). + * + * Covers base64 and URL modes, input validation, the global MIME + * allowlist, size limits, SSRF rejection, and content-hash dedupe. + */ + +import type { Kysely } from "kysely"; +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; + +import { handleMediaUpload } from "../../../../src/api/handlers/media-upload.js"; +import type { Database } from "../../../../src/database/types.js"; +import { setDefaultDnsResolver } from "../../../../src/security/ssrf.js"; +import type { Storage } from "../../../../src/storage/types.js"; +import { setupTestDatabase, teardownTestDatabase } from "../../../utils/test-db.js"; + +// 1x1 transparent PNG +const PNG_BASE64 = + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg=="; +const PNG_BYTES = Uint8Array.from(atob(PNG_BASE64), (c) => c.charCodeAt(0)); + +function createFakeStorage() { + const uploads = new Map(); + const storage = { + uploads, + async upload(options: { key: string; body: Uint8Array; contentType: string }) { + uploads.set(options.key, options.body); + return { key: options.key, url: `/${options.key}`, size: options.body.byteLength }; + }, + async download(): Promise { + throw new Error("not implemented"); + }, + async delete(key: string) { + uploads.delete(key); + }, + async exists(key: string) { + return uploads.has(key); + }, + async list() { + return { items: [] }; + }, + async getSignedUploadUrl(): Promise { + throw new Error("not implemented"); + }, + }; + // ponytail: structural stand-in covers the Storage surface this handler uses + return storage as unknown as Storage & { uploads: Map }; +} + +describe("handleMediaUpload (#620)", () => { + let db: Kysely; + let storage: ReturnType; + let previousResolver: ReturnType; + + beforeEach(async () => { + db = await setupTestDatabase(); + storage = createFakeStorage(); + // Resolve every hostname to a public IP so ssrfSafeFetch doesn't hit DNS + previousResolver = setDefaultDnsResolver(async () => ["93.184.216.34"]); + }); + + afterEach(async () => { + setDefaultDnsResolver(previousResolver ?? null); + vi.unstubAllGlobals(); + await teardownTestDatabase(db); + }); + + it("uploads base64 data and creates a media record", async () => { + const result = await handleMediaUpload(db, storage, { + filename: "pixel.png", + base64: PNG_BASE64, + contentType: "image/png", + alt: "a pixel", + authorId: "user_1", + }); + + expect(result.success).toBe(true); + if (!result.success) return; + const { item } = result.data; + expect(item.filename).toBe("pixel.png"); + expect(item.mimeType).toBe("image/png"); + expect(item.alt).toBe("a pixel"); + expect(item.authorId).toBe("user_1"); + expect(item.width).toBe(1); + expect(item.height).toBe(1); + expect(item.storageKey).toMatch(/\.png$/); + expect(item.url).toBe(`/_emdash/api/media/file/${item.storageKey}`); + expect(storage.uploads.get(item.storageKey)).toEqual(PNG_BYTES); + }); + + it("deduplicates identical bytes by content hash", async () => { + const first = await handleMediaUpload(db, storage, { + filename: "a.png", + base64: PNG_BASE64, + contentType: "image/png", + }); + const second = await handleMediaUpload(db, storage, { + filename: "b.png", + base64: PNG_BASE64, + contentType: "image/png", + }); + + expect(first.success && second.success).toBe(true); + if (!first.success || !second.success) return; + expect(second.data.deduplicated).toBe(true); + expect(second.data.item.id).toBe(first.data.item.id); + expect(storage.uploads.size).toBe(1); + }); + + it("rejects when neither or both of base64/url are provided", async () => { + const neither = await handleMediaUpload(db, storage, { filename: "x.png" }); + const both = await handleMediaUpload(db, storage, { + filename: "x.png", + base64: PNG_BASE64, + url: "https://example.com/x.png", + contentType: "image/png", + }); + for (const result of [neither, both]) { + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("VALIDATION_ERROR"); + } + }); + + it("requires contentType with base64 data", async () => { + const result = await handleMediaUpload(db, storage, { + filename: "x.png", + base64: PNG_BASE64, + }); + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("VALIDATION_ERROR"); + }); + + it("rejects invalid base64 data", async () => { + const result = await handleMediaUpload(db, storage, { + filename: "x.png", + base64: "!!!not-base64!!!", + contentType: "image/png", + }); + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("VALIDATION_ERROR"); + }); + + it("rejects malformed MIME strings that would pass the prefix allowlist", async () => { + // "image/png\r\nX-Evil: 1" starts with "image/" but must never reach + // the storage ContentType header or the file-serving response. + const crafted = await handleMediaUpload(db, storage, { + filename: "x.png", + base64: PNG_BASE64, + contentType: "image/png\r\nX-Evil: 1", + }); + expect(crafted.success).toBe(false); + if (!crafted.success) expect(crafted.error.code).toBe("VALIDATION_ERROR"); + expect(storage.uploads.size).toBe(0); + }); + + it("rejects a malformed Content-Type header from a remote host", async () => { + vi.stubGlobal( + "fetch", + vi.fn(async () => { + const response = new Response(PNG_BYTES); + // Response normalizes header values, so inject the raw string + vi.spyOn(response.headers, "get").mockReturnValue("image/png\r\nX-Evil: 1"); + return response; + }), + ); + + const result = await handleMediaUpload(db, storage, { + filename: "remote.png", + url: "https://example.com/remote.png", + }); + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("VALIDATION_ERROR"); + expect(storage.uploads.size).toBe(0); + }); + + it("rejects MIME types outside the global allowlist", async () => { + const result = await handleMediaUpload(db, storage, { + filename: "evil.exe", + base64: PNG_BASE64, + contentType: "application/x-msdownload", + }); + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("INVALID_TYPE"); + expect(storage.uploads.size).toBe(0); + }); + + it("rejects payloads over the size limit", async () => { + const result = await handleMediaUpload(db, storage, { + filename: "big.png", + base64: PNG_BASE64, + contentType: "image/png", + maxUploadSize: 8, + }); + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("PAYLOAD_TOO_LARGE"); + }); + + it("fetches from a URL, using the response Content-Type", async () => { + vi.stubGlobal( + "fetch", + vi.fn(async () => new Response(PNG_BYTES, { headers: { "Content-Type": "image/png" } })), + ); + + const result = await handleMediaUpload(db, storage, { + filename: "remote.png", + url: "https://example.com/remote.png", + }); + + expect(result.success).toBe(true); + if (!result.success) return; + expect(result.data.item.mimeType).toBe("image/png"); + expect(storage.uploads.get(result.data.item.storageKey)).toEqual(PNG_BYTES); + }); + + it("surfaces HTTP errors from the remote host", async () => { + vi.stubGlobal( + "fetch", + vi.fn(async () => new Response("nope", { status: 404 })), + ); + + const result = await handleMediaUpload(db, storage, { + filename: "missing.png", + url: "https://example.com/missing.png", + }); + expect(result.success).toBe(false); + if (!result.success) { + expect(result.error.code).toBe("FETCH_ERROR"); + expect(result.error.message).toContain("404"); + } + }); + + it("rejects URLs that resolve to private addresses (SSRF)", async () => { + const fetchSpy = vi.fn(); + vi.stubGlobal("fetch", fetchSpy); + + const result = await handleMediaUpload(db, storage, { + filename: "metadata.json", + url: "http://169.254.169.254/latest/meta-data", + }); + expect(result.success).toBe(false); + if (!result.success) expect(result.error.code).toBe("VALIDATION_ERROR"); + expect(fetchSpy).not.toHaveBeenCalled(); + }); +}); diff --git a/packages/core/tests/unit/mcp/authorization.test.ts b/packages/core/tests/unit/mcp/authorization.test.ts index 179864abad..294edc23af 100644 --- a/packages/core/tests/unit/mcp/authorization.test.ts +++ b/packages/core/tests/unit/mcp/authorization.test.ts @@ -628,6 +628,65 @@ describe("MCP Authorization", () => { }); }); + // ----------------------------------------------------------------------- + // media_upload guards + // ----------------------------------------------------------------------- + + describe("media_upload guards", () => { + const uploadArgs = { + filename: "x.png", + base64: "aGVsbG8=", + contentType: "image/png", + }; + + it("SUBSCRIBER cannot upload media", async () => { + const handlers = createMockHandlers(AUTHOR_USER_ID); + ({ client, cleanup } = await setupMcpPair({ + userId: OTHER_USER_ID, + userRole: Role.SUBSCRIBER, + handlers, + })); + + const result = await client.callTool({ name: "media_upload", arguments: uploadArgs }); + + expect(result.isError).toBe(true); + const text = (result.content as Array<{ text: string }>)[0]?.text ?? ""; + expect(text).toMatch(INSUFFICIENT_PERMISSIONS_RE); + }); + + it("rejects media_upload without media:write scope", async () => { + const handlers = createMockHandlers(AUTHOR_USER_ID); + ({ client, cleanup } = await setupMcpPair({ + userId: AUTHOR_USER_ID, + userRole: Role.ADMIN, + handlers, + tokenScopes: ["media:read"], + })); + + const result = await client.callTool({ name: "media_upload", arguments: uploadArgs }); + + expect(result.isError).toBe(true); + const text = (result.content as Array<{ text: string }>)[0]?.text ?? ""; + expect(text).toMatch(INSUFFICIENT_SCOPE_RE); + }); + + it("returns NO_STORAGE when storage is not configured", async () => { + // createMockHandlers has no storage adapter attached + const handlers = createMockHandlers(AUTHOR_USER_ID); + ({ client, cleanup } = await setupMcpPair({ + userId: AUTHOR_USER_ID, + userRole: Role.CONTRIBUTOR, + handlers, + })); + + const result = await client.callTool({ name: "media_upload", arguments: uploadArgs }); + + expect(result.isError).toBe(true); + const text = (result.content as Array<{ text: string }>)[0]?.text ?? ""; + expect(text).toContain("NO_STORAGE"); + }); + }); + // ----------------------------------------------------------------------- // Token scope enforcement // ----------------------------------------------------------------------- From b4035ac4d9efc1be633062f2e0121798df8318c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ey=C3=BCp=20Can=20Akman?= Date: Mon, 20 Jul 2026 23:11:29 +0300 Subject: [PATCH 09/33] fix(core): surface missing deleted_at column in admin content list (#1079) handleContentList only special-cased a missing table, so a backing ec_{collection} table without the deleted_at column threw "no such column" and fell through to a generic CONTENT_LIST_ERROR, hiding published content from editors with no diagnostic. Detect the missing deleted_at column and return COLLECTION_SCHEMA_MISMATCH naming the collection. isMissingColumnError mirrors isMissingTableError and takes an optional column scope so an unrelated unknown-column error still returns the generic error. Closes #709 Co-authored-by: Matt Kane --- ...-content-list-missing-deleted-at-column.md | 5 ++ packages/core/src/api/errors.ts | 2 + packages/core/src/api/handlers/content.ts | 11 +++- packages/core/src/utils/db-errors.ts | 4 +- .../tests/unit/api/content-handlers.test.ts | 64 ++++++++++++++++++- .../core/tests/unit/utils/db-errors.test.ts | 38 ++++++++++- 6 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 .changeset/fix-content-list-missing-deleted-at-column.md diff --git a/.changeset/fix-content-list-missing-deleted-at-column.md b/.changeset/fix-content-list-missing-deleted-at-column.md new file mode 100644 index 0000000000..e086b2f24c --- /dev/null +++ b/.changeset/fix-content-list-missing-deleted-at-column.md @@ -0,0 +1,5 @@ +--- +"emdash": patch +--- + +Fixes the admin content list returning a generic `CONTENT_LIST_ERROR` when a collection's backing table is missing the `deleted_at` column. It now returns `COLLECTION_SCHEMA_MISMATCH` naming the affected collection, so the schema problem is visible instead of an opaque failure. diff --git a/packages/core/src/api/errors.ts b/packages/core/src/api/errors.ts index 49fdbd1d5d..793f4bae8f 100644 --- a/packages/core/src/api/errors.ts +++ b/packages/core/src/api/errors.ts @@ -70,6 +70,7 @@ export const ErrorCode = { ORPHAN_REGISTER_ERROR: "ORPHAN_REGISTER_ERROR", COLLECTION_EXISTS: "COLLECTION_EXISTS", COLLECTION_NOT_FOUND: "COLLECTION_NOT_FOUND", + COLLECTION_SCHEMA_MISMATCH: "COLLECTION_SCHEMA_MISMATCH", TABLE_NOT_FOUND: "TABLE_NOT_FOUND", FIELD_EXISTS: "FIELD_EXISTS", FIELD_TYPE_COLUMN_CHANGE: "FIELD_TYPE_COLUMN_CHANGE", @@ -467,6 +468,7 @@ export function mapErrorStatus(code: string | undefined): number { case ErrorCode.NO_DB: case ErrorCode.STORAGE_NOT_CONFIGURED: case ErrorCode.EMAIL_NOT_CONFIGURED: + case ErrorCode.COLLECTION_SCHEMA_MISMATCH: return 500; // 501 Not Implemented diff --git a/packages/core/src/api/handlers/content.ts b/packages/core/src/api/handlers/content.ts index 9544e27cea..33826b4604 100644 --- a/packages/core/src/api/handlers/content.ts +++ b/packages/core/src/api/handlers/content.ts @@ -34,7 +34,7 @@ import { getI18nConfig, isI18nEnabled } from "../../i18n/config.js"; import { invalidateRedirectCache } from "../../redirects/cache.js"; import { FTSManager } from "../../search/fts-manager.js"; import { invalidateTermCache } from "../../taxonomies/index.js"; -import { isMissingTableError } from "../../utils/db-errors.js"; +import { isMissingColumnError, isMissingTableError } from "../../utils/db-errors.js"; import { encodeRev, validateRev } from "../rev.js"; import type { ApiResult, ContentListResponse, ContentResponse } from "../types.js"; import { validateMediaFields } from "./validate-media-fields.js"; @@ -485,6 +485,15 @@ export async function handleContentList( }, }; } + if (isMissingColumnError(error, "deleted_at")) { + return { + success: false, + error: { + code: "COLLECTION_SCHEMA_MISMATCH", + message: `Collection '${collection}' backing table is missing the 'deleted_at' column`, + }, + }; + } if (error instanceof EmDashValidationError) { // e.g. invalid orderBy field return { diff --git a/packages/core/src/utils/db-errors.ts b/packages/core/src/utils/db-errors.ts index 9a97ec35c1..d0a051ad9d 100644 --- a/packages/core/src/utils/db-errors.ts +++ b/packages/core/src/utils/db-errors.ts @@ -26,10 +26,12 @@ function messageOf(error: unknown): string { * Returns true when `error` is a "column does not exist" error. * Used to handle where filters that reference non-existent field names * gracefully (return empty results) instead of propagating a SQL error. + * When `column` is given, only errors naming that column match. */ -export function isMissingColumnError(error: unknown): boolean { +export function isMissingColumnError(error: unknown, column?: string): boolean { const message = messageOf(error); if (!message) return false; + if (column && !message.includes(column.toLowerCase())) return false; // SQLite / D1: "no such column: foo" if (message.includes("no such column")) return true; diff --git a/packages/core/tests/unit/api/content-handlers.test.ts b/packages/core/tests/unit/api/content-handlers.test.ts index f8e0093813..c6c03d50fa 100644 --- a/packages/core/tests/unit/api/content-handlers.test.ts +++ b/packages/core/tests/unit/api/content-handlers.test.ts @@ -15,7 +15,11 @@ import { UserRepository } from "../../../src/database/repositories/user.js"; import type { Database } from "../../../src/database/types.js"; import { setI18nConfig } from "../../../src/i18n/config.js"; import { SchemaRegistry } from "../../../src/schema/registry.js"; -import { setupTestDatabaseWithCollections, teardownTestDatabase } from "../../utils/test-db.js"; +import { + setupTestDatabase, + setupTestDatabaseWithCollections, + teardownTestDatabase, +} from "../../utils/test-db.js"; describe("Content Handlers — auto-slug generation", () => { let db: Kysely; @@ -820,3 +824,61 @@ describe("Content Handlers — slug-change auto-redirect on publish", () => { expect(published.error.message).toContain(taken.data!.item.id); }); }); + +describe("handleContentList — backing table missing deleted_at column", () => { + let db: Kysely; + + beforeEach(async () => { + db = await setupTestDatabase(); + await sql` + CREATE TABLE ec_repro_test ( + id TEXT PRIMARY KEY, + slug TEXT NOT NULL, + title TEXT NOT NULL, + content JSON, + excerpt TEXT, + status TEXT NOT NULL, + locale TEXT NOT NULL DEFAULT 'en', + published_at TEXT, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ) + `.execute(db); + await sql` + INSERT INTO ec_repro_test (id, slug, title, content, excerpt, status, locale, published_at, created_at, updated_at) + VALUES ('01KPQZA8J1E206F60QSNFRX3Y2', 'repro', 'Repro entry', '[]', 'x', 'published', 'en', + '2026-05-01T00:00:00.000Z', '2026-05-01T00:00:00.000Z', '2026-05-01T00:00:00.000Z') + `.execute(db); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("reports a schema mismatch instead of a generic list error", async () => { + const res = await handleContentList(db, "repro_test", {}); + expect(res.success).toBe(false); + if (res.success) return; + expect(res.error.code).toBe("COLLECTION_SCHEMA_MISMATCH"); + expect(res.error.message).toContain("repro_test"); + }); +}); + +describe("handleContentList — unknown orderBy column on a healthy collection", () => { + let db: Kysely; + + beforeEach(async () => { + db = await setupTestDatabaseWithCollections(); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("does not report a schema mismatch when ordering by a field the collection lacks", async () => { + const res = await handleContentList(db, "post", { orderBy: "name" }); + expect(res.success).toBe(false); + if (res.success) return; + expect(res.error.code).not.toBe("COLLECTION_SCHEMA_MISMATCH"); + }); +}); diff --git a/packages/core/tests/unit/utils/db-errors.test.ts b/packages/core/tests/unit/utils/db-errors.test.ts index a4d9ecadd9..a83a56cfa6 100644 --- a/packages/core/tests/unit/utils/db-errors.test.ts +++ b/packages/core/tests/unit/utils/db-errors.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest"; -import { isMissingTableError } from "../../../src/utils/db-errors.js"; +import { isMissingColumnError, isMissingTableError } from "../../../src/utils/db-errors.js"; describe("isMissingTableError", () => { it("detects SQLite / D1 phrasing", () => { @@ -44,3 +44,39 @@ describe("isMissingTableError", () => { expect(isMissingTableError({})).toBe(false); }); }); + +describe("isMissingColumnError", () => { + it("detects SQLite / D1 phrasing", () => { + expect(isMissingColumnError(new Error('no such column: "deleted_at"'))).toBe(true); + expect(isMissingColumnError(new Error("SQLITE_ERROR: no such column: deleted_at"))).toBe(true); + }); + + it("detects PostgreSQL phrasing", () => { + expect(isMissingColumnError(new Error('column "deleted_at" does not exist'))).toBe(true); + }); + + it("is case-insensitive", () => { + expect(isMissingColumnError(new Error('COLUMN "deleted_at" DOES NOT EXIST'))).toBe(true); + }); + + it("rejects unrelated errors", () => { + expect(isMissingColumnError(new Error("no such table: ec_posts"))).toBe(false); + expect(isMissingColumnError(new Error("permission denied"))).toBe(false); + expect(isMissingColumnError(new Error("does not exist"))).toBe(false); + expect(isMissingColumnError(new Error('relation "ec_columns" does not exist'))).toBe(false); + }); + + it("handles non-Error inputs safely", () => { + expect(isMissingColumnError("no such column: x")).toBe(true); + expect(isMissingColumnError(null)).toBe(false); + expect(isMissingColumnError(undefined)).toBe(false); + expect(isMissingColumnError(42)).toBe(false); + }); + + it("scopes to a named column when given", () => { + expect(isMissingColumnError(new Error('no such column: "deleted_at"'), "deleted_at")).toBe( + true, + ); + expect(isMissingColumnError(new Error("no such column: name"), "deleted_at")).toBe(false); + }); +}); From ebed9fbd4bcd20361a316bd7108deffa0bf05dbe Mon Sep 17 00:00:00 2001 From: Kevin Kyburz <30409887+swissky@users.noreply.github.com> Date: Mon, 20 Jul 2026 22:35:59 +0200 Subject: [PATCH 10/33] fix(core): draft-only saves no longer bump updated_at on published entries (#2153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On revision-supporting collections, staging a draft (Save/Autosave) on a published entry previously stamped updated_at on the live content row even though no public-facing column changed. Public SEO surfaces that read updated_at as "content last modified" — sitemap , JSON-LD dateModified — therefore registered a phantom modification every time an editor staged or discarded a draft. Skip the updated_at stamp on column-no-op writes. version still increments on every update so the _rev optimistic-concurrency token (version:updated_at) continues to catch concurrent editors with a 409. Fixes #2143 --- .changeset/draft-save-updated-at.md | 5 + .../core/src/database/repositories/content.ts | 35 ++- packages/core/src/emdash-runtime.ts | 15 +- .../content/draft-save-updated-at.test.ts | 212 ++++++++++++++++++ 4 files changed, 250 insertions(+), 17 deletions(-) create mode 100644 .changeset/draft-save-updated-at.md create mode 100644 packages/core/tests/integration/content/draft-save-updated-at.test.ts diff --git a/.changeset/draft-save-updated-at.md b/.changeset/draft-save-updated-at.md new file mode 100644 index 0000000000..260e8d8079 --- /dev/null +++ b/.changeset/draft-save-updated-at.md @@ -0,0 +1,5 @@ +--- +"emdash": patch +--- + +Stops draft-only saves and autosaves on published entries from advancing `updatedAt`. On revision-supporting collections, staging or discarding a pending draft leaves live content untouched, so sitemap `` and JSON-LD `dateModified` no longer register a modification until Publish actually changes the live entry. diff --git a/packages/core/src/database/repositories/content.ts b/packages/core/src/database/repositories/content.ts index 92c192cb2f..351a49538c 100644 --- a/packages/core/src/database/repositories/content.ts +++ b/packages/core/src/database/repositories/content.ts @@ -590,11 +590,16 @@ export class ContentRepository { const tableName = getTableName(type); const now = new Date().toISOString(); - // Build update object with parameterized values - const updates: Record = { - updated_at: now, - version: sql`version + 1`, - }; + // Build update object with parameterized values. `version` bumps on + // every update so the _rev optimistic-concurrency token + // (version:updated_at) always moves — concurrent editors still get a + // 409 on stale saves. `updated_at` is stamped only when the request + // actually carries column writes: a draft-only save on a + // revision-supporting collection resolves to a column no-op here (all + // data went into draft storage), and stamping it anyway would register + // a phantom modification for public "last modified" consumers like + // sitemap and JSON-LD dateModified (#2143). + const updates: Record = {}; if (input.status !== undefined) { updates.status = input.status; @@ -630,6 +635,12 @@ export class ContentRepository { } } + const hasColumnWrites = Object.keys(updates).length > 0; + if (hasColumnWrites) { + updates.updated_at = now; + } + updates.version = sql`version + 1`; + await this.db .updateTable(tableName as keyof Database) .set(updates) @@ -1519,7 +1530,6 @@ export class ContentRepository { */ async setDraftRevision(type: string, id: string, revisionId: string): Promise { const tableName = getTableName(type); - const now = new Date().toISOString(); const existing = await this.findById(type, id); if (!existing) { @@ -1536,10 +1546,12 @@ export class ContentRepository { throw new EmDashValidationError("Revision does not belong to the specified content item"); } + // Draft staging leaves live content untouched, so it must not bump + // updated_at — public "content last modified" consumers (sitemap + // , dateModified) would see a phantom modification (#2143). await sql` UPDATE ${sql.ref(tableName)} - SET draft_revision_id = ${revisionId}, - updated_at = ${now} + SET draft_revision_id = ${revisionId} WHERE id = ${id} AND deleted_at IS NULL `.execute(this.db); @@ -1555,7 +1567,6 @@ export class ContentRepository { */ async discardDraft(type: string, id: string): Promise { const tableName = getTableName(type); - const now = new Date().toISOString(); const existing = await this.findById(type, id); if (!existing) { @@ -1567,10 +1578,12 @@ export class ContentRepository { return existing; } + // Discarding a draft restores the state from before the draft was + // staged — nothing about the live entry changed in between, so + // updated_at stays at its pre-draft value (#2143). await sql` UPDATE ${sql.ref(tableName)} - SET draft_revision_id = NULL, - updated_at = ${now} + SET draft_revision_id = NULL WHERE id = ${id} AND deleted_at IS NULL `.execute(this.db); diff --git a/packages/core/src/emdash-runtime.ts b/packages/core/src/emdash-runtime.ts index ed15c8de3b..a937c13aa1 100644 --- a/packages/core/src/emdash-runtime.ts +++ b/packages/core/src/emdash-runtime.ts @@ -2853,13 +2853,14 @@ export class EmDashRuntime { authorId: bodyWithoutRev.authorId ?? undefined, }); - // Update entry to point to new draft (metadata only, not data columns) + // Update entry to point to new draft (metadata only, not data columns). + // No updated_at stamp: draft staging leaves live content untouched, + // so public "last modified" consumers must not see a change (#2143). validateIdentifier(collection, "collection"); const tableName = `ec_${collection}`; await sql` UPDATE ${sql.ref(tableName)} - SET draft_revision_id = ${revision.id}, - updated_at = ${new Date().toISOString()} + SET draft_revision_id = ${revision.id} WHERE id = ${resolvedId} `.execute(this.db); draftStorageChanged = true; @@ -3251,7 +3252,10 @@ export class EmDashRuntime { // Revision-capable collections: restore is "make this revision the // current draft". The live row's data columns are left untouched - // (only `draft_revision_id` and `updated_at` change). The caller + // (only `draft_revision_id` changes — no `updated_at` stamp, since + // restoring to draft is the same kind of draft-only staging as + // Save/Autosave and must not register a phantom modification for + // sitemap / JSON-LD dateModified, #2143). The caller // must then `content_publish` to promote the restored draft to // live, matching the documented tool contract. try { @@ -3266,8 +3270,7 @@ export class EmDashRuntime { const tableName = `ec_${revision.collection}`; await sql` UPDATE ${sql.ref(tableName)} - SET draft_revision_id = ${newDraft.id}, - updated_at = ${new Date().toISOString()} + SET draft_revision_id = ${newDraft.id} WHERE id = ${revision.entryId} `.execute(this.db); diff --git a/packages/core/tests/integration/content/draft-save-updated-at.test.ts b/packages/core/tests/integration/content/draft-save-updated-at.test.ts new file mode 100644 index 0000000000..64a9bfe4e7 --- /dev/null +++ b/packages/core/tests/integration/content/draft-save-updated-at.test.ts @@ -0,0 +1,212 @@ +/** + * Draft saves on published entries must not advance the content row's + * `updated_at` (#2143). + * + * On revision-supporting collections, **Save** and **Autosave** on an + * already-published entry store changes as a pending draft — live public + * content is unchanged until **Publish**. Those draft-only writes previously + * bumped `updated_at` anyway, which public SEO surfaces (sitemap , + * JSON-LD dateModified) treat as "content last modified" — a phantom + * modification for crawlers. + * + * The fix skips the `updated_at` stamp on content-row writes that touch no + * live columns (pure draft staging / discard), and restores the pre-save + * timestamp when a draft-only update request resolves to a metadata no-op. + */ + +import type { Kysely } from "kysely"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; + +import type { Database } from "../../../src/database/types.js"; +import type { EmDashRuntime } from "../../../src/emdash-runtime.js"; +import { SchemaRegistry } from "../../../src/schema/registry.js"; +import { createTestRuntime } from "../../utils/mcp-runtime.js"; +import { setupTestDatabase, teardownTestDatabase } from "../../utils/test-db.js"; + +describe("draft saves on published entries keep updated_at (#2143)", () => { + let db: Kysely; + let runtime: EmDashRuntime; + + beforeEach(async () => { + db = await setupTestDatabase(); + const registry = new SchemaRegistry(db); + // Default supports: drafts + revisions. + await registry.createCollection({ slug: "posts", label: "Posts" }); + await registry.createField("posts", { slug: "title", label: "Title", type: "string" }); + // No revision support: updates land directly on the live row. + await registry.createCollection({ + slug: "plain_posts", + label: "Plain Posts", + supports: [], + }); + await registry.createField("plain_posts", { + slug: "title", + label: "Title", + type: "string", + }); + runtime = createTestRuntime(db); + }); + + afterEach(async () => { + await teardownTestDatabase(db); + }); + + it("Save (draft staging) on a published entry does not bump updated_at", async () => { + const created = await runtime.handleContentCreate("posts", { + data: { title: "Live Post" }, + slug: "live-post", + }); + expect(created.success).toBe(true); + const id = created.data!.item.id; + + const published = await runtime.handleContentPublish("posts", id); + expect(published.success).toBe(true); + const publishedUpdatedAt = published.data!.item.updatedAt; + + // Manual Save: no skipRevision → creates a new draft revision and + // points draft_revision_id at it. Live columns are untouched. + const saved = await runtime.handleContentUpdate("posts", id, { + data: { title: "Live Post (edited, unpublished)" }, + }); + expect(saved.success).toBe(true); + expect(saved.data!.item.draftRevisionId).not.toBeNull(); + + expect(saved.data!.item.updatedAt).toBe(publishedUpdatedAt); + }); + + it("Autosave (skipRevision) on an existing draft does not bump updated_at", async () => { + const created = await runtime.handleContentCreate("posts", { + data: { title: "Live Post" }, + slug: "live-post", + }); + const id = created.data!.item.id; + const published = await runtime.handleContentPublish("posts", id); + const publishedUpdatedAt = published.data!.item.updatedAt; + + const firstSave = await runtime.handleContentUpdate("posts", id, { + data: { title: "Draft v1" }, + }); + expect(firstSave.success).toBe(true); + expect(firstSave.data!.item.updatedAt).toBe(publishedUpdatedAt); + + // Autosave: updates the existing draft revision in place. + const autosaved = await runtime.handleContentUpdate("posts", id, { + data: { title: "Draft v2" }, + skipRevision: true, + }); + expect(autosaved.success).toBe(true); + expect(autosaved.data!.item.updatedAt).toBe(publishedUpdatedAt); + }); + + it("Discard Draft restores updated_at from before the draft saves", async () => { + const created = await runtime.handleContentCreate("posts", { + data: { title: "Live Post" }, + slug: "live-post", + }); + const id = created.data!.item.id; + const published = await runtime.handleContentPublish("posts", id); + const publishedUpdatedAt = published.data!.item.updatedAt; + + const saved = await runtime.handleContentUpdate("posts", id, { + data: { title: "Unwanted edit" }, + }); + expect(saved.success).toBe(true); + + const discarded = await runtime.handleContentDiscardDraft("posts", id); + expect(discarded.success).toBe(true); + expect(discarded.data!.item.draftRevisionId).toBeNull(); + expect(discarded.data!.item.updatedAt).toBe(publishedUpdatedAt); + }); + + it("a subsequent Publish advances updated_at exactly once", async () => { + const created = await runtime.handleContentCreate("posts", { + data: { title: "Live Post" }, + slug: "live-post", + }); + const id = created.data!.item.id; + const published = await runtime.handleContentPublish("posts", id); + const publishedUpdatedAt = published.data!.item.updatedAt; + + const saved = await runtime.handleContentUpdate("posts", id, { + data: { title: "Ready to go live" }, + }); + expect(saved.data!.item.updatedAt).toBe(publishedUpdatedAt); + + // The draft saves left updated_at untouched, so comparing with Date.now() + // proves publish moves it forward (same-millisecond collisions impossible). + const republished = await runtime.handleContentPublish("posts", id); + expect(republished.success).toBe(true); + expect(republished.data!.item.draftRevisionId).toBeNull(); + expect(Date.parse(republished.data!.item.updatedAt)).toBeGreaterThan( + Date.parse(publishedUpdatedAt), + ); + }); + + it("draft-only saves still bump version so _rev concurrency detection keeps working", async () => { + const created = await runtime.handleContentCreate("posts", { + data: { title: "Live Post" }, + slug: "live-post", + }); + const id = created.data!.item.id; + const published = await runtime.handleContentPublish("posts", id); + const publishedUpdatedAt = published.data!.item.updatedAt; + const publishedVersion = published.data!.item.version; + + const saved = await runtime.handleContentUpdate("posts", id, { + data: { title: "Edited" }, + }); + expect(saved.success).toBe(true); + // updated_at frozen (no phantom modification), but version moved so a + // second editor holding the pre-save _rev gets a 409. + expect(saved.data!.item.updatedAt).toBe(publishedUpdatedAt); + expect(saved.data!.item.version).toBe(publishedVersion + 1); + + const stale = await runtime.handleContentUpdate("posts", id, { + data: { title: "Conflicting edit" }, + _rev: Buffer.from(`${publishedVersion}:${publishedUpdatedAt}`).toString("base64"), + }); + expect(stale.success).toBe(false); + expect(stale.success === false && stale.error.code).toBe("CONFLICT"); + }); + + it("Restore Revision (to draft) on a published entry does not bump updated_at", async () => { + const created = await runtime.handleContentCreate("posts", { + data: { title: "Original" }, + slug: "restore-post", + }); + const id = created.data!.item.id; + const published = await runtime.handleContentPublish("posts", id); + const publishedUpdatedAt = published.data!.item.updatedAt; + + // Find the published revision to restore from. + const revisions = await runtime.handleRevisionList("posts", id); + expect(revisions.success).toBe(true); + const liveRevisionId = published.data!.item.liveRevisionId; + const targetRevision = revisions.data!.items.find((r) => r.id === liveRevisionId); + expect(targetRevision).toBeDefined(); + + // Restore that revision as the current draft — draft-only staging, + // live columns untouched, so updated_at must not move. + const restored = await runtime.handleRevisionRestore(targetRevision!.id, "author-1"); + expect(restored.success).toBe(true); + expect(restored.data!.item.updatedAt).toBe(publishedUpdatedAt); + expect(restored.data!.item.draftRevisionId).not.toBeNull(); + }); + + it("collections without revision support keep the bump-on-write behavior", async () => { + const created = await runtime.handleContentCreate("plain_posts", { + data: { title: "Plain" }, + slug: "plain", + }); + const id = created.data!.item.id; + const beforeUpdate = created.data!.item.updatedAt; + + const updated = await runtime.handleContentUpdate("plain_posts", id, { + data: { title: "Plain (edited)" }, + }); + expect(updated.success).toBe(true); + expect(Date.parse(updated.data!.item.updatedAt)).toBeGreaterThanOrEqual( + Date.parse(beforeUpdate), + ); + }); +}); From 2971102730ba903d60c3dd18809dc5e47b0a9a81 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Mon, 20 Jul 2026 22:09:04 +0100 Subject: [PATCH 11/33] docs: strengthen agent guidance on logged-out query counts, comments, and test quality (#2155) --- AGENTS.md | 34 ++++++++++++++++++- .../flue-review/.flue/skills/review/SKILL.md | 6 ++-- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 019add4f36..710f3e82d7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,6 +14,10 @@ For human-facing contributor info (setup, repo layout, PR policy, changesets, i1 **Scope discipline.** No drive-by refactors, no bulk lint/type cleanups, no "while I'm here" edits in unrelated files. If you see a systemic issue, open a Discussion. See [CONTRIBUTING.md § Contribution Policy](CONTRIBUTING.md#contribution-policy). +**Never add queries to the logged-out hot path.** Any change that increases the query count of a logged-out route needs a _really_ good reason -- and that includes cold-start or first-request-only queries, not just steady state. See [Performance](#performance-caching-and-query-patterns). + +**Comments are for code readers, not reviewers.** Write a comment only when the code can't be made clearer, or to give a non-obvious "why". Never justification, narrative, or issue/PR references. See [Comments](#comments). + ## Workflow Run `pnpm lint:json | jq '.diagnostics | length'` before starting and confirm it's clean -- if it's failing after your edits, your changes caused it. @@ -177,6 +181,8 @@ When adding content-table features, ask: per-locale (display fields) or per-tran EmDash runs on D1 with the Sessions API. Anonymous reads go to the nearest replica; writes and authenticated reads route to the primary. Every round-trip matters. +**The logged-out hot path only ratchets down.** Anonymous page renders are what visitors actually hit; their query count is the product's performance envelope. Any change that adds a query to a logged-out route needs a _really_ good reason -- including queries that only run on cold start or first request. Before accepting a new round-trip, look for a way to piggyback on an existing query, batch, defer with `after()`, or cache. + **Wrap query helpers in `requestCached`.** Per-request cache (`src/request-cache.ts`) dedupes identical calls within a render. If a helper takes stable args (slug, key, id) and may be called from multiple components, wrap it. The cache key must include every argument that changes the result. The promise is cached, so concurrent callers share the in-flight query. ```typescript @@ -208,7 +214,7 @@ after(async () => { **One query beats two.** Use `LEFT JOIN` for parent+children. Batch with `WHERE id IN (...)`, chunked at `SQL_BATCH_SIZE` (from `utils/chunks.ts`) for D1's bind-parameter limit. -**Query-count snapshots.** `pnpm query-counts` (see `scripts/query-counts.mjs`) records per-route query counts in `scripts/query-counts.snapshot.{sqlite,d1}.json`. CI auto-updates on PRs -- review the diff. Fewer is always right; more needs a conversation. +**Query-count snapshots.** `pnpm query-counts` (see `scripts/query-counts.mjs`) records per-route query counts in `scripts/query-counts.snapshot.{sqlite,d1}.json`. CI auto-updates on PRs -- review the diff. Fewer is always right; more needs a conversation. An increase on a logged-out route is presumed wrong: the snapshot diff makes it visible, it does not make it acceptable. # Admin UI @@ -315,6 +321,23 @@ For directional icons (chevrons, arrows), flip them with `rtl:-scale-x-100` or u # Conventions +## Comments + +Comments are evergreen and addressed to a future reader of the code -- not to whoever reviews the PR. Most comments agents write should not exist. A comment earns its place only when: + +- the code is unclear and genuinely can't be made clearer (first try making it clearer), or +- there's a non-obvious reason for something the reader would otherwise get wrong (an ordering constraint, a footgun, an invariant). + +Comments are **not**: + +- PR descriptions or summaries of the change +- messages to the reviewer +- justification for a decision ("intentionally", "for safety", "we accept", "unlike X") +- narrative about what you tried and rejected +- restatements of what the code plainly does + +Never reference issues, PRs, or review threads in comments -- they're stale narrative the moment the change merges; that context belongs in the commit message and PR description. Never number comments. + ## Imports - **Internal imports** use `.js` extensions (ESM): `import { X } from "../foo.js"`. @@ -346,6 +369,15 @@ In libraries used in a Worker but not themselves Workers, install `@cloudflare/w - **Utilities:** `tests/utils/test-db.ts` exposes `setupTestDatabase()`, `setupTestDatabaseWithCollections()`, `teardownTestDatabase()` for SQLite and `setupTestPostgresDatabase()` etc. for Postgres. Dialect-agnostic: `setupForDialect`, `setupForDialectWithCollections`, `teardownForDialect`, plus `describeEachDialect(name, fn)`. Use the dialect wrapper for query-builder code -- regressions tend to be dialect-specific. - **Structure:** `tests/unit/`, `tests/integration/`, `tests/e2e/` (Playwright). Test files mirror source structure. Each test gets a fresh DB. +**A test must be able to fail on a real regression.** If it can't, it's not a test -- delete it. The common offenders: + +- **Config-pin tests**: asserting a config literal, constant, or schema shape back at itself. It re-states the source file and fails only when someone makes an intentional change. +- **Tautological tests**: asserting the implementation detail you just wrote straight back -- add a CSS class to a component, then test the component has that class; call a function with arguments, then assert it was called with those arguments. This re-states the diff, not the behavior. Test what the change does for the user (the element is hidden, the query is filtered), not that the code you wrote is the code you wrote. +- **Mocking the unit under test**, or a mock that returns the very value the assertion checks. The test then verifies the mock, not the code. +- **Tests that only exercise third-party code**: Kysely, Zod, and Lingui have their own test suites. Test your behavior, not theirs. + +**Never change a test just to make it pass.** Understand why it's failing first -- the test may be the only thing that's right. If you can't work out why, stop and say so. + # Toolchain - **pnpm** -- package manager diff --git a/infra/flue-review/.flue/skills/review/SKILL.md b/infra/flue-review/.flue/skills/review/SKILL.md index 0fc3d0f294..2c57811d7c 100644 --- a/infra/flue-review/.flue/skills/review/SKILL.md +++ b/infra/flue-review/.flue/skills/review/SKILL.md @@ -9,7 +9,7 @@ You are reviewing a pull request on **emdash-cms/emdash**. Find real bugs, regre Review **statically**. Do not run the test suite, linter, builds, or install anything (you have no shell anyway). Read code, trace with searches, and reason. If confirming something would require running tooling, say it's unverified rather than guessing. -The repo's AGENTS.md is at the repo root in your context. Check the PR against its conventions (Lingui localization, RTL-safe Tailwind, SQL safety, API envelope shape, authorization, locale filtering on content tables, index discipline, changesets). A violation is a real finding, not a nit. +The repo's AGENTS.md is at the repo root in your context. Check the PR against its conventions (Lingui localization, RTL-safe Tailwind, SQL safety, API envelope shape, authorization, locale filtering on content tables, index discipline, changesets, query counts on logged-out routes, comment discipline). A violation is a real finding, not a nit. ## Your only tool: `code` @@ -54,7 +54,9 @@ Breadth first, depth second. The two most common ways to fail are to grade the i - **Security**: unsanitized input reaching SQL/HTML/shell/paths, missing/wrong authorization, secret/info leakage, open redirect, path traversal. - **Data integrity**: validation at boundaries, partial writes without transactions, cascading deletes that orphan rows, schema/code mismatch, a missing `locale` filter on a content-table query. - **Resources**: leaked handles/timers/listeners, unbounded growth, missing timeouts, retry without backoff. -- **Tests**: a fix without a reproducing test is not fixed; a mock that returns the thing the test claims to verify is false confidence. +- **Tests**: a fix without a reproducing test is not fixed; a mock that returns the thing the test claims to verify is false confidence. A test that cannot fail on a real regression -- a config literal asserted back at itself, an implementation detail asserted straight back (adding a CSS class and testing the class is present), a mocked unit under test, a test exercising only third-party code -- is worse than no test: it inflates coverage and pins intentional changes. Flag it for deletion, or for rewriting against observable behavior. +- **Logged-out query counts**: any new query on a route an anonymous visitor can hit -- including cold-start or first-request-only queries -- needs a _really_ good reason. Check whether it could piggyback on an existing query, batch, defer with `after()`, or use `requestCached`. A query-count snapshot diff that increases a logged-out route is a finding, not bookkeeping. +- **Comments**: comments that restate what the code does, justify the decision ("intentionally", "for safety"), address the reviewer, narrate rejected alternatives, or reference issues/PRs/review threads. Comments are evergreen and for future readers of the code; almost all of these should be deleted (or the code made clearer instead). Numbered comments are always wrong. - **AGENTS.md conventions** (see above). ## Severity and verdict From cf670e01386967e56f4c43b332804b7f7474471a Mon Sep 17 00:00:00 2001 From: "Noah (Nguyen Pham)" <137921741+khoinguyenpham04@users.noreply.github.com> Date: Mon, 20 Jul 2026 22:17:28 +0100 Subject: [PATCH 12/33] Update admin navigation icon vocabulary (#2151) * Update admin icon vocabulary * Refine admin icon overrides * Optimize admin icon lookup --- .changeset/admin-navigation-icons.md | 5 + .../src/components/AdminCommandPalette.tsx | 61 +++--- packages/admin/src/components/Dashboard.tsx | 4 +- .../src/components/MarketplaceBrowse.tsx | 4 +- packages/admin/src/components/MenuList.tsx | 5 +- .../admin/src/components/PluginManager.tsx | 6 +- packages/admin/src/components/Redirects.tsx | 3 +- .../admin/src/components/RegistryBrowse.tsx | 5 +- .../src/components/SectionPickerModal.tsx | 7 +- packages/admin/src/components/Sidebar.tsx | 204 +++++------------- .../src/components/admin-navigation-icons.ts | 153 +++++++++++++ .../src/components/comments/CommentInbox.tsx | 5 +- packages/admin/src/routes/bylines.tsx | 3 +- .../components/AdminCommandPalette.test.ts | 46 ++++ .../admin/tests/components/Sidebar.test.tsx | 25 ++- .../components/admin-navigation-icons.test.ts | 72 +++++++ 16 files changed, 394 insertions(+), 214 deletions(-) create mode 100644 .changeset/admin-navigation-icons.md create mode 100644 packages/admin/src/components/admin-navigation-icons.ts create mode 100644 packages/admin/tests/components/AdminCommandPalette.test.ts create mode 100644 packages/admin/tests/components/admin-navigation-icons.test.ts diff --git a/.changeset/admin-navigation-icons.md b/.changeset/admin-navigation-icons.md new file mode 100644 index 0000000000..179ee2689d --- /dev/null +++ b/.changeset/admin-navigation-icons.md @@ -0,0 +1,5 @@ +--- +"@emdash-cms/admin": patch +--- + +Updates admin icons so pages, posts, media, comments, menus, redirects, widgets, sections, taxonomies, bylines, imports, and plugins are easier to distinguish across navigation and related views. diff --git a/packages/admin/src/components/AdminCommandPalette.tsx b/packages/admin/src/components/AdminCommandPalette.tsx index 1a23026c31..061811fe10 100644 --- a/packages/admin/src/components/AdminCommandPalette.tsx +++ b/packages/admin/src/components/AdminCommandPalette.tsx @@ -10,20 +10,7 @@ import type { MessageDescriptor } from "@lingui/core"; import { msg } from "@lingui/core/macro"; import { useLingui as useLinguiContext } from "@lingui/react"; import { useLingui } from "@lingui/react/macro"; -import { - SquaresFour, - FileText, - Image, - Gear, - PuzzlePiece, - Upload, - Database, - List, - GridFour, - Users, - Stack, - MagnifyingGlass, -} from "@phosphor-icons/react"; +import { Gear, Users, MagnifyingGlass } from "@phosphor-icons/react"; import { useQuery } from "@tanstack/react-query"; import { useNavigate } from "@tanstack/react-router"; import * as React from "react"; @@ -31,7 +18,13 @@ import { useHotkeys } from "react-hotkeys-hook"; import { apiFetch, type AdminManifest } from "../lib/api/client.js"; import { useCurrentUser } from "../lib/api/current-user"; -import { resolvePluginPageLabel } from "./Sidebar"; +import { + ADMIN_NAV_ICONS, + getCollectionNavIcon, + getTaxonomyNavIcon, + resolveNavIcon, +} from "./admin-navigation-icons.js"; +import { resolvePluginPageLabel } from "./Sidebar.js"; /** Subset of manifest fields used by the palette (matches `Shell` props shape). */ type CommandPaletteManifest = { @@ -126,7 +119,7 @@ async function searchContent(query: string): Promise { return body.data; } -function buildNavItems( +export function buildNavItems( manifest: CommandPaletteManifest, userRole: number, translateLabel: (id: string) => string, @@ -136,7 +129,7 @@ function buildNavItems( id: "dashboard", title: msg`Dashboard`, to: "/", - icon: SquaresFour, + icon: ADMIN_NAV_ICONS.dashboard, keywords: ["home", "overview"], }, ]; @@ -148,7 +141,7 @@ function buildNavItems( title: config.label, to: "/content/$collection", params: { collection: name }, - icon: FileText, + icon: getCollectionNavIcon(name), keywords: ["content", name], }); } @@ -159,14 +152,14 @@ function buildNavItems( id: "media", title: msg`Media Library`, to: "/media", - icon: Image, + icon: ADMIN_NAV_ICONS.media, keywords: ["images", "files", "uploads"], }, { id: "menus", title: msg`Menus`, to: "/menus", - icon: List, + icon: ADMIN_NAV_ICONS.menus, minRole: ROLE_EDITOR, keywords: ["navigation"], }, @@ -174,7 +167,7 @@ function buildNavItems( id: "widgets", title: msg`Widgets`, to: "/widgets", - icon: GridFour, + icon: ADMIN_NAV_ICONS.widgets, minRole: ROLE_EDITOR, keywords: ["sidebar", "footer"], }, @@ -182,7 +175,7 @@ function buildNavItems( id: "sections", title: msg`Sections`, to: "/sections", - icon: Stack, + icon: ADMIN_NAV_ICONS.sections, minRole: ROLE_EDITOR, keywords: ["page builder", "blocks"], }, @@ -190,7 +183,7 @@ function buildNavItems( id: "content-types", title: msg`Content Types`, to: "/content-types", - icon: Database, + icon: ADMIN_NAV_ICONS.contentTypes, minRole: ROLE_ADMIN, keywords: ["schema", "collections"], }, @@ -199,7 +192,7 @@ function buildNavItems( title: msg`Categories`, to: "/taxonomies/$taxonomy", params: { taxonomy: "category" }, - icon: FileText, + icon: getTaxonomyNavIcon("category"), minRole: ROLE_EDITOR, keywords: ["taxonomy"], }, @@ -208,7 +201,7 @@ function buildNavItems( title: msg`Tags`, to: "/taxonomies/$taxonomy", params: { taxonomy: "tag" }, - icon: FileText, + icon: getTaxonomyNavIcon("tag"), minRole: ROLE_EDITOR, keywords: ["taxonomy"], }, @@ -224,7 +217,7 @@ function buildNavItems( id: "plugins", title: msg`Plugins`, to: "/plugins-manager", - icon: PuzzlePiece, + icon: ADMIN_NAV_ICONS.plugins, minRole: ROLE_ADMIN, keywords: ["extensions", "add-ons"], }, @@ -232,7 +225,7 @@ function buildNavItems( id: "import", title: msg`Import`, to: "/import/wordpress", - icon: Upload, + icon: ADMIN_NAV_ICONS.import, minRole: ROLE_ADMIN, keywords: ["wordpress", "migrate"], }, @@ -267,7 +260,7 @@ function buildNavItems( id: `plugin-${pluginId}-${page.path}`, title: label, to: `/plugins/${pluginId}${page.path}`, - icon: PuzzlePiece, + icon: resolveNavIcon(page.icon), keywords: ["plugin", pluginId], }); } @@ -350,7 +343,13 @@ export function AdminCommandPalette({ manifest }: AdminCommandPaletteProps) { title: typeof item.title === "string" ? item.title : t(item.title), to: item.to, params: item.params, - icon: , + icon: ( + + ), })), }); } @@ -366,7 +365,9 @@ export function AdminCommandPalette({ manifest }: AdminCommandPaletteProps) { title: result.title || result.slug, to: "/content/$collection/$id", params: { collection: result.collection, id: result.id }, - icon: , + icon: React.createElement(getCollectionNavIcon(result.collection), { + className: "h-4 w-4", + }), description: collectionLabel, collection: result.collection, }; diff --git a/packages/admin/src/components/Dashboard.tsx b/packages/admin/src/components/Dashboard.tsx index c1ff227e84..6fcd4fd321 100644 --- a/packages/admin/src/components/Dashboard.tsx +++ b/packages/admin/src/components/Dashboard.tsx @@ -8,7 +8,6 @@ import { CheckCircle, PencilSimple, CalendarBlank, - Image, Users, } from "@phosphor-icons/react"; import { useQuery } from "@tanstack/react-query"; @@ -19,6 +18,7 @@ import type { CollectionStats, DashboardStats, RecentItem } from "../lib/api/das import { fetchDashboardStats } from "../lib/api/dashboard"; import { usePluginWidget } from "../lib/plugin-context"; import { formatRelativeTime } from "../lib/utils"; +import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ArrowNext } from "./ArrowIcons"; import { RouterLinkButton } from "./RouterLinkButton"; import { SandboxedPluginWidget } from "./SandboxedPluginWidget"; @@ -156,7 +156,7 @@ function SummaryMetrics({ stats, loading }: { stats?: DashboardStats; loading: b ] : []), { - icon: Image, + icon: ADMIN_NAV_ICONS.media, label: plural(stats.mediaCount, { one: "Media file", other: "Media files" }), value: stats.mediaCount, }, diff --git a/packages/admin/src/components/MarketplaceBrowse.tsx b/packages/admin/src/components/MarketplaceBrowse.tsx index 938c098a11..a6611767b7 100644 --- a/packages/admin/src/components/MarketplaceBrowse.tsx +++ b/packages/admin/src/components/MarketplaceBrowse.tsx @@ -11,7 +11,6 @@ import { msg, plural } from "@lingui/core/macro"; import { useLingui } from "@lingui/react/macro"; import { MagnifyingGlass, - PuzzlePiece, DownloadSimple, ShieldCheck, ShieldWarning, @@ -29,6 +28,7 @@ import { type MarketplaceSearchOpts, } from "../lib/api/marketplace.js"; import { safeIconUrl } from "../lib/url.js"; +import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; type SortOption = "installs" | "updated" | "created" | "name"; @@ -169,7 +169,7 @@ export function MarketplaceBrowse({ installedPluginIds = new Set() }: Marketplac <> {plugins.length === 0 ? (
- +

{t`No plugins found`}

{debouncedQuery diff --git a/packages/admin/src/components/MenuList.tsx b/packages/admin/src/components/MenuList.tsx index 1bd265965f..c46f8f5604 100644 --- a/packages/admin/src/components/MenuList.tsx +++ b/packages/admin/src/components/MenuList.tsx @@ -8,7 +8,7 @@ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; -import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; +import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; @@ -16,6 +16,7 @@ import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; +import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; @@ -182,7 +183,7 @@ export function MenuList() { {!menus || menus.length === 0 ? (

- +

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

)} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -383,7 +383,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, zero {لا عناصر} one {عنصر واحد} two {عنصران} few {# عناصر} many {# عنصرًا} other {# عنصر}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, other {إجمالي #}}" @@ -418,11 +418,11 @@ msgstr "{unchangedCount, plural, other {إظهار # لم تتغير}}" msgid "{uploaded} uploaded, {failed} failed" msgstr "تم رفع {uploaded}، وفشل {failed}" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/صفحة-جديدة أو /مقالات/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/صفحة-قديمة أو /مدونة/[slug]" @@ -477,19 +477,19 @@ msgstr "3. قم بتحديد \"كل المحتوى\"" msgid "30 days" msgstr "30 يوم" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 دائم" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 مؤقت" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 مؤقت (صارم)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 دائم (صارم)" @@ -501,15 +501,15 @@ msgstr "4. اضغط على \"تنزيل ملف التصدير\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. قم بإدخال \"EmDash\" واضغط على \"إضافة جديد\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "أخطاء 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -586,7 +586,7 @@ msgstr "معلومات الحساب" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -764,12 +764,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "مسؤول" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "تنقل لوحة الإدارة" @@ -807,7 +807,7 @@ msgstr "الكل" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "جميع الكُتّاب" @@ -815,7 +815,7 @@ msgstr "جميع الكُتّاب" msgid "All capabilities" msgstr "جميع الصلاحيات" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "جميع المجموعات" @@ -841,12 +841,12 @@ msgid "All Sources" msgstr "جميع المصادر" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "جميع الحالات" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "جميع الأنواع" @@ -984,8 +984,8 @@ msgid "Apply link" msgstr "تطبيق الرابط" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "موافقة" @@ -993,7 +993,7 @@ msgstr "موافقة" msgid "approved" msgstr "موافق عليه" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "موافق عليه" @@ -1030,7 +1030,7 @@ msgstr "هل أنت متأكد من رغبتك بحذف \"{0}\"؟ سيؤدي ه msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "هل أنت متأكد من حذف الحقل \"{0}\"؟" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "هل أنت متأكد من رغبتك بحذف هذه القائمة؟ سيؤدي هذا إلى حذف جميع عناصر القائمة كذلك. لا يمكن التراجع عن هذا الإجراء." @@ -1075,7 +1075,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "تم إلغاء المصادقة أو انتهت مهلتها. يرجى المحاولة مجددًا." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1110,11 +1110,11 @@ msgstr "جاري التفويض..." msgid "Authors" msgstr "المؤلفون" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "تلقائي" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "تلقائي (تغيير جزء الرابط)" @@ -1240,7 +1240,7 @@ msgstr "قبل الإرسال:" msgid "Bing Verification" msgstr "تحقق Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "نبذة" @@ -1263,7 +1263,7 @@ msgstr "منطقي" msgid "Brief summary shown below the title in search results" msgstr "ملخص مختصر يظهر أسفل العنوان في نتائج البحث" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "تصفّح وثبّت الإضافات المنشورة في المستودع اللامركزي." @@ -1291,17 +1291,17 @@ msgid "Bullet List" msgstr "قائمة نقطية" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "الكُتّاب" @@ -1356,11 +1356,11 @@ msgstr "يمكنه عرض المحتوى" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1415,7 +1415,7 @@ msgstr "التسمية التوضيحية" msgid "Captions / Subtitles" msgstr "التسميات التوضيحية / الترجمات" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "الفئات" @@ -1558,17 +1558,17 @@ msgstr "إضغط على الرابط في البريد الإلكتروني لت #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1607,7 +1607,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "كود" @@ -1650,7 +1650,7 @@ msgid "Comma-separated keywords for search." msgstr "كلمات مفتاحية مفصولة بفاصلة للبحث." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "تعليق" @@ -1658,9 +1658,9 @@ msgstr "تعليق" msgid "Comment Detail" msgstr "تفاصيل التعليق" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "التعليقات" @@ -1711,13 +1711,13 @@ msgstr "متصل {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "محتوى" @@ -1775,9 +1775,9 @@ msgstr "لقطة المحتوى:" msgid "Content to Import" msgstr "المحتوى المراد استيراده" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "أنواع المحتوى" @@ -1859,7 +1859,7 @@ msgstr "تعذّر اكتشاف WordPress" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1881,12 +1881,12 @@ msgid "Count" msgstr "العدد" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "إنشاء" @@ -1917,7 +1917,7 @@ msgid "Create an account" msgstr "إنشاء حساب" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "إنشاء كاتب" @@ -1929,12 +1929,12 @@ msgstr "إنشاء نوع محتوى" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "إنشاء قائمة" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "إنشاء قائمة جديدة" @@ -1956,15 +1956,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "إنشاء رمز وصول شخصي للوصول إلى API برمجيًا" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "إنشاء إعادة توجيه لـ {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "إنشاء إعادة توجيه لهذا الرابط" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "قم بإنشاء قواعد إعادة التوجيه للتحكم بتغييرات الروابط." @@ -1977,7 +1977,7 @@ msgstr "إنشاء المخطط والاستيراد" msgid "Create Section" msgstr "إنشاء قسم" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "قم بإنشاء أقسام في مكتبة الأقسام لاستخدامها هنا" @@ -1999,7 +1999,7 @@ msgstr "إنشاء منطقة عناصر الواجهة" msgid "Create your account" msgstr "قم بإنشاء حسابك" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "قم بإنشاء أول قائمة تنقل خاصة بك للبدء" @@ -2066,8 +2066,8 @@ msgid "Creating collections and fields..." msgstr "جاري إنشاء المجموعات والحقول..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2119,15 +2119,15 @@ msgstr "داكن" msgid "Dark" msgstr "داكن" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "لوحة المعلومات" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "التاريخ" @@ -2190,8 +2190,8 @@ msgstr "حدد هيكل محتواك" msgid "Defined in code" msgstr "مُعرَّف في الكود" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2200,16 +2200,16 @@ msgstr "مُعرَّف في الكود" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "حذف" @@ -2237,7 +2237,7 @@ msgid "Delete {0} field" msgstr "حذف حقل {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "حذف قائمة {0}" @@ -2259,7 +2259,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "حذف الكاتب؟" @@ -2267,7 +2267,7 @@ msgstr "حذف الكاتب؟" msgid "Delete column" msgstr "حذف العمود" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "حذف التعليق؟" @@ -2296,11 +2296,11 @@ msgstr "حذف الصورة" msgid "Delete Media?" msgstr "حذف الوسائط؟" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "حذف القائمة" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "حذف نهائي" @@ -2313,16 +2313,16 @@ msgstr "حذف نهائي" msgid "Delete Permanently?" msgstr "حذف نهائي؟" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "حذف إعادة التوجيه" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "حذف إعادة التوجيه {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "حذف إعادة التوجيه؟" @@ -2352,18 +2352,18 @@ msgstr "محذوف" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "جاري الحذف..." @@ -2418,11 +2418,11 @@ msgstr "الوصف" msgid "Description (optional)" msgstr "الوصف (اختياري)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "الوجهة" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "رابط الوجهة" @@ -2466,7 +2466,7 @@ msgstr "تعطيل" msgid "Disable plugin" msgstr "تعطيل الإضافة" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "تعطيل إعادة التوجيه" @@ -2479,7 +2479,7 @@ msgid "Disable User?" msgstr "تعطيل المستخدم؟" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2538,11 +2538,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "اسم العرض" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "اسم العرض لواجهة الإدارة" @@ -2710,7 +2710,7 @@ msgstr "استنساخ {title}" msgid "e.g. application/zip or .pdf" msgstr "مثال: application/zip أو .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "مثال: استيراد، مدونة" @@ -2726,7 +2726,7 @@ msgstr "مثال: MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2741,7 +2741,7 @@ msgstr "تعديل" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "تعديل {0}" @@ -2786,16 +2786,16 @@ msgstr "تعديل عنصر القائمة" msgid "Edit menu items" msgstr "تعديل عناصر القائمة" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "تعديل إعادة التوجيه" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "تعديل إعادة التوجيه" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "تعديل إعادة التوجيه {0}" @@ -2900,12 +2900,12 @@ msgstr "تفعيل البحث النصي الكامل على هذه المجمو msgid "Enable plugin" msgstr "تفعيل الإضافة" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "تفعيل إعادة التوجيه" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "مُفعَّل" @@ -3363,7 +3363,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "فشل تحميل الكُتّاب: {0}" @@ -3388,7 +3388,7 @@ msgstr "فشل في تحميل الإضافة" msgid "Failed to load plugins: {0}" msgstr "فشل في تحميل الإضافات: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "فشل تحميل الإضافات. قد يكون مجمّع المستودع غير متاح." @@ -3702,7 +3702,7 @@ msgstr "" msgid "Filter by capability" msgstr "تصفية حسب الإمكانية" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "تصفية حسب المجموعة" @@ -3715,16 +3715,16 @@ msgid "Filter by source" msgstr "تصفية حسب المصدر" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "تصفية حسب الحالة" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "تصفية حسب النوع" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "تصفية حسب نوع الكاتب" @@ -3807,7 +3807,7 @@ msgstr "" msgid "Grid view" msgstr "عرض شبكي" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "المجموعة (اختياري)" @@ -3815,11 +3815,11 @@ msgstr "المجموعة (اختياري)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "كاتب ضيف" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "ضيف فقط" @@ -3883,8 +3883,8 @@ msgstr "إخفاء الرمز" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "هرمي (مثل الفئات، بعلاقات أب/ابن)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "الزيارات" @@ -3986,8 +3986,8 @@ msgstr "تم تحديث روابط الصور في" msgid "Images" msgstr "الصور" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "استيراد" @@ -4154,7 +4154,7 @@ msgstr "إدراج رابط" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "إدراج قسم" @@ -4185,7 +4185,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "مثبَّت" @@ -4317,7 +4317,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4355,7 +4355,7 @@ msgstr "آخر تسجيل دخول" msgid "Last Login" msgstr "آخر تسجيل دخول" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "آخر ظهور" @@ -4427,11 +4427,11 @@ msgstr "الربط مع عنصر محتوى آخر" msgid "Linked Accounts ({0})" msgstr "الحسابات المربوطة ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "مرتبط فقط" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "مستخدم مرتبط" @@ -4455,9 +4455,9 @@ msgstr "العرض المباشر" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "تحميل المزيد" @@ -4481,7 +4481,7 @@ msgstr "" msgid "Loading collections..." msgstr "جاري تحميل المجموعات..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "جاري تحميل التعليقات..." @@ -4502,7 +4502,7 @@ msgstr "جارٍ تحميل المحرر..." msgid "Loading menu..." msgstr "جاري تحميل القائمة..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "جاري تحميل القوائم..." @@ -4510,11 +4510,11 @@ msgstr "جاري تحميل القوائم..." msgid "Loading plugins..." msgstr "جاري تحميل الإضافات..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "جاري تحميل إعادات التوجيه..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "جاري تحميل الأقسام..." @@ -4546,7 +4546,7 @@ msgstr "جارٍ تحميل عناصر الواجهة..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4555,7 +4555,7 @@ msgstr "جارٍ تحميل عناصر الواجهة..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "جاري التحميل..." @@ -4619,7 +4619,7 @@ msgstr "إجراء طلبات الشبكة" msgid "Make network requests to any host (unrestricted)" msgstr "إجراء طلبات الشبكة لأي مضيف (بدون قيود)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "إدارة" @@ -4641,11 +4641,11 @@ msgstr "إدارة عناصر واجهة المحتوى في مناطق الوا msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "إدارة الإضافات المثبَّتة. فعّل أو عطّل الإضافات للتحكم في وظائفها." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "إدارة قوائم التنقل لموقعك" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "إدارة إعادات توجيه الروابط وعرض أخطاء 404." @@ -4661,7 +4661,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "يدوي" @@ -4675,15 +4675,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "ربط مستخدم ووردبريس {0} بمستخدم EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "تحديد كغير مرغوب فيه" @@ -4698,7 +4698,7 @@ msgstr "السوق" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "السوق" @@ -4723,7 +4723,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4751,7 +4751,7 @@ msgstr "اكتمل استيراد الوسائط" msgid "Media import was skipped" msgstr "تم تخطي استيراد الوسائط" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "مكتبة الوسائط" @@ -4780,15 +4780,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "تم إنشاء القائمة \"{0}\" ({1})." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "تم إنشاء القائمة \"{0}\"." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "تم إنشاء القائمة" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "تم حذف القائمة" @@ -4812,9 +4812,9 @@ msgstr "لم يتم العثور على القائمة" msgid "Menu order has been updated." msgstr "تم تحديث ترتيب القائمة." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "القوائم" @@ -4962,7 +4962,7 @@ msgstr "مدونتي الرائعة" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4980,7 +4980,7 @@ msgstr "الاسم والتسمية مطلوبان" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "يجب أن يبدأ الاسم بحرف ويحتوي فقط على أحرف صغيرة وأرقام وشرطات سفلية" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "التنقل" @@ -4993,7 +4993,7 @@ msgstr "أبدًا" msgid "new" msgstr "جديد" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "جديد" @@ -5031,8 +5031,8 @@ msgstr "" msgid "New public routes" msgstr "مسارات عامة جديدة" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "إعادة توجيه جديدة" @@ -5040,7 +5040,7 @@ msgstr "إعادة توجيه جديدة" msgid "New Section" msgstr "قسم جديد" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "علامة تبويب جديدة" @@ -5068,7 +5068,7 @@ msgstr "أخبار" msgid "Next" msgstr "التالي" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "الصفحة التالية" @@ -5101,7 +5101,7 @@ msgstr "لا يوجد {0} بعد." msgid "No {0} yet. Create one to get started." msgstr "لا يوجد {0} بعد. قم بإنشاء أحدها للبدء." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "لم يتم تسجيل أخطاء 404 بعد." @@ -5114,7 +5114,7 @@ msgstr "لا يوجد نص بديل" msgid "No API tokens yet. Create one to get started." msgstr "لا يوجد رموز API بعد. قم بإنشاء أحدها للبدء." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "لا توجد تعليقات موافق عليها بعد." @@ -5126,7 +5126,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "لا يوجد كُتّاب متاحون في {entryLocale}. أنشئ نسخة من صفحة الكُتّاب قبل إسناد كاتب لهذا المدخل." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "لم يُعثر على كُتّاب" @@ -5138,11 +5138,11 @@ msgstr "لم يتم اختيار أي كاتب." msgid "No collections configured" msgstr "لم يتم تهيئة مجموعات" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "لا توجد تعليقات في انتظار الإشراف." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "لا توجد تعليقات مطابقة لبحثك." @@ -5215,7 +5215,7 @@ msgstr "لا توجد عناصر بعد" msgid "No limit" msgstr "بدون حد" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "لا يوجد مستخدم مرتبط" @@ -5258,7 +5258,7 @@ msgstr "لم يتم العثور على وسائط" msgid "No menu items yet" msgstr "لا توجد عناصر قائمة بعد" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "لا توجد قوائم بعد" @@ -5291,11 +5291,11 @@ msgstr "لم يتم تهيئة إضافات" msgid "No plugins found" msgstr "لم يتم العثور على إضافات" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "لم يُنشر بعد أي إضافة في هذا المستودع." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "لا توجد إضافات تطابق \"{debouncedQuery}\"." @@ -5311,7 +5311,7 @@ msgstr "" msgid "No recent activity" msgstr "لا يوجد نشاط حديث" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "لا توجد إعادات توجيه بعد" @@ -5330,7 +5330,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "لا يوجد نتائج لـ \"{debouncedQuery}\". جرّب مصطلح بحث مختلف." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "لم يتم العثور على نتائج" @@ -5338,11 +5338,11 @@ msgstr "لم يتم العثور على نتائج" msgid "No revisions yet" msgstr "لا توجد مراجعات بعد" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "لا توجد أقسام متاحة" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "لم يتم العثور على أقسام" @@ -5351,7 +5351,7 @@ msgstr "لم يتم العثور على أقسام" msgid "No sections yet" msgstr "لا توجد أقسام بعد" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "لا توجد تعليقات غير مرغوب فيها." @@ -5424,7 +5424,7 @@ msgstr "قم بتفويض الرموز التي تعرفها فقط." msgid "Only email addresses from allowed domains can sign up." msgstr "يمكن فقط لعناوين البريد الإلكتروني من النطاقات المسموح بها التسجيل." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "أحرف صغيرة وأرقام وشرطات فقط" @@ -5551,8 +5551,8 @@ msgstr "فقرة" msgid "Parent" msgstr "الأب" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "جزء من حلقة إعادة توجيه لا منتهية" @@ -5625,7 +5625,7 @@ msgstr "مفاتيح المرور تتطلب HTTPS أو http://localhost (مع msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "الرابط النسبي" @@ -5652,7 +5652,7 @@ msgstr "PDF" msgid "pending" msgstr "معلّق" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "معلّق" @@ -5756,7 +5756,7 @@ msgstr "إضافة على موقع WordPress الخاص بك." msgid "Plugin Permissions" msgstr "صلاحيات الإضافة" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "مستودع الإضافات" @@ -5781,12 +5781,12 @@ msgstr "تم تحديث الإضافة" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "الإضافات" @@ -5850,7 +5850,7 @@ msgstr "معاينة المسودة" msgid "Previous" msgstr "السابق" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "الصفحة السابقة" @@ -5859,7 +5859,7 @@ msgstr "الصفحة السابقة" msgid "Previous screenshot" msgstr "لقطة الشاشة السابقة" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "التنقل الرئيسي" @@ -5998,7 +5998,7 @@ msgstr "بريد المستلم" msgid "Recovery link sent to {0}" msgstr "تم إرسال رابط الاستعادة إلى {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "تم اكتشاف حلقة إعادة توجيه لا منتهية" @@ -6006,9 +6006,9 @@ msgstr "تم اكتشاف حلقة إعادة توجيه لا منتهية" msgid "Redirecting to login..." msgstr "جاري إعادة التوجيه إلى تسجيل الدخول..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "إعادات التوجيه" @@ -6049,7 +6049,7 @@ msgstr "فشل التسجيل" msgid "Registration was cancelled or timed out. Please try again." msgstr "تم إلغاء التسجيل أو انتهت مهلته. يرجى المحاولة مجددًا." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "المستودع" @@ -6351,11 +6351,11 @@ msgstr "نفس النافذة" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "حفظ" @@ -6411,7 +6411,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6423,7 +6423,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "جاري الحفظ..." @@ -6551,7 +6551,7 @@ msgid "Search by name or email..." msgstr "ابحث بالاسم أو البريد الإلكتروني..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "البحث في الكُتّاب" @@ -6559,11 +6559,11 @@ msgstr "البحث في الكُتّاب" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "البحث في التعليقات" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "البحث في التعليقات..." @@ -6588,26 +6588,26 @@ msgstr "" msgid "Search media" msgstr "البحث في الوسائط" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "البحث في الصفحات والمحتوى..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "البحث في الإضافات" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "البحث في الإضافات..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "البحث في الأقسام..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "البحث في المصدر أو الوجهة..." @@ -6665,9 +6665,9 @@ msgstr "القسم غير موجود" msgid "Section title" msgstr "عنوان القسم" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "أقسام" @@ -6718,7 +6718,7 @@ msgstr "جهات الاتصال الأمني" msgid "Security error. Make sure you're on a secure connection." msgstr "خطأ أمني. تأكد من أنك على اتصال آمن." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6749,7 +6749,7 @@ msgstr "اختر مكوّنًا..." msgid "Select a menu..." msgstr "اختر قائمة..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "اختيار الكل" @@ -6758,7 +6758,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "اختيار تعليق {0}" @@ -6924,14 +6924,14 @@ msgstr "إعداد موقعك" msgid "Setting up..." msgstr "جاري الإعداد..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "الإعدادات" @@ -7119,7 +7119,7 @@ msgstr "تم التخطي" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "جزء الرابط" @@ -7175,12 +7175,12 @@ msgstr "ترتيب المظاهر" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "المصدر" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "الرابط النسبي للمصدر" @@ -7189,8 +7189,8 @@ msgid "spam" msgstr "غير مرغوب فيه" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "غير مرغوب فيه" @@ -7219,12 +7219,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "الحالة" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "رمز الحالة" @@ -7307,7 +7307,7 @@ msgstr "" msgid "Tagline" msgstr "الشعار" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "الوسوم" @@ -7399,7 +7399,7 @@ msgstr "ستنتهي صلاحية الرابط بعد 15 دقيقة." msgid "The marketplace is empty. Check back later for new plugins." msgstr "السوق فارغ. تحقق لاحقًا للعثور على إضافات جديدة." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "تم حذف القائمة." @@ -7456,7 +7456,7 @@ msgstr "لا يمكن حذف الأقسام المزودة من مظهر. قم msgid "Theme: {label}" msgstr "المظهر: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "المظاهر" @@ -7511,7 +7511,7 @@ msgstr "لا تتطلب هذه الإضافة صلاحيات خاصة." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "يدّعي هذا الناشر اسمًا لم يتمكن من إثبات ملكيته — ربما ينتحل هوية شخص آخر. التثبيت معطّل. إن كنت تعرف هذا الناشر وتثق به، فاطلب منه إصلاح إعدادات هويته والمحاولة مجددًا." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "سيتم إزالة قاعدة إعادة التوجيه هذه بشكل نهائي." @@ -7519,7 +7519,7 @@ msgstr "سيتم إزالة قاعدة إعادة التوجيه هذه بشكل msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "سيُزال ملف الكاتب. ستُحذف روابط الكُتّاب في المحتوى وتُمسح مؤشرات القيادة." @@ -7557,7 +7557,7 @@ msgstr "سيؤدي هذا إلى حذف \"{0}\" نهائيًا وإزالته م msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "سيؤدي هذا إلى حذف \"{0}\" نهائيًا. لا يمكن التراجع عن هذا الإجراء." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "سيؤدي هذا إلى حذف هذا التعليق نهائيًا. لا يمكن التراجع عن هذا الإجراء." @@ -7602,7 +7602,7 @@ msgstr "فاصل العنوان" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "للإغلاق" @@ -7614,7 +7614,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "لتثبيت الإضافات، أو أضفها إلى ملف astro.config.mjs الخاص بك." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "للإختيار" @@ -7689,9 +7689,9 @@ msgid "trash" msgstr "سلة المحذوفات" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "سلة المحذوفات" @@ -7700,7 +7700,7 @@ msgstr "سلة المحذوفات" msgid "Trash is empty" msgstr "سلة المحذوفات فارغة" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "سلة المحذوفات فارغة." @@ -7717,7 +7717,7 @@ msgid "Try a different search term" msgstr "جرّب مصطلح بحث مختلف" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "جرّب تعديل بحثك" @@ -7917,7 +7917,7 @@ msgstr "تحديث إعدادات الموقع" msgid "Update the {0} details" msgstr "تحديث تفاصيل {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "تحديث قاعدة التحويل هذه." @@ -8060,7 +8060,7 @@ msgstr "نمط الرابط" msgid "URL-friendly identifier" msgstr "معرف مناسب للروابط" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "معرف مناسب للروابط (مثال: \"primary\"، \"footer\")" @@ -8068,7 +8068,7 @@ msgstr "معرف مناسب للروابط (مثال: \"primary\"، \"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "استخدم [param] أو [...rest] في الروابط النسبية لمطابقة الأنماط." @@ -8125,8 +8125,8 @@ msgstr "تفاصيل المستخدم" msgid "User not found" msgstr "لم يتم العثور على المستخدم" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "المستخدمين" @@ -8149,7 +8149,7 @@ msgstr "الإصدار {0} متاح" msgid "Validation" msgstr "التحقق" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "ناشر موثَّق" @@ -8222,7 +8222,7 @@ msgstr "عرض المصدر" msgid "View the {license} license on spdx.org" msgstr "عرض رخصة {license} على spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "الزوار الذين يصلون إلى هذه المسارات سيرون خطأً." @@ -8274,7 +8274,7 @@ msgstr "WebAuthn غير مدعوم في هذا المتصفح" msgid "Website" msgstr "الموقع الإلكتروني" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "رابط الموقع الإلكتروني" @@ -8375,9 +8375,9 @@ msgstr "عنوان عنصر الواجهة" msgid "Widget updated" msgstr "تم تحديث عنصر الواجهة" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8458,7 +8458,7 @@ msgstr "يمكنك إنشاء وتحرير محتواك الخاص." msgid "You can manage content, media, menus, and taxonomies." msgstr "يمكنك إدارة المحتوى، الوسائط، القوائم، والتصنيفات." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/ca/messages.po b/packages/admin/src/locales/ca/messages.po index e2b5613cd3..a6bf133b76 100644 --- a/packages/admin/src/locales/ca/messages.po +++ b/packages/admin/src/locales/ca/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Convidat" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Enllaçat" @@ -35,7 +35,7 @@ msgstr " (s'obre en una finestra nova)" msgid " (selected)" msgstr " (seleccionat)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Selecciona --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# comentari actualitzat} other {# comentaris actualitzats}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# comentari} other {# comentaris}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# element de contingut importat} other {# elements de c #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# element} other {# elements}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# entrada} other {# entrades}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# redirecció forma part d'un bucle.} other {# redireccions formen part d'un bucle.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# seleccionat} other {# seleccionats}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "Cal {0} {1}: tens {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# element} other {# elements}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# en total} other {# en total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Mostra'n # sense canvis} other {Mostra'n # msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} pujats, {failed} fallits" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. Selecciona «Tot el contingut»" msgid "30 days" msgstr "30 dies" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporal" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporal (estricte)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (estricte)" @@ -497,15 +497,15 @@ msgstr "4. Fes clic a «Baixa el fitxer d'exportació»" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Introdueix «EmDash» i fes clic a «Afegeix-ne un de nou»" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Errors 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Contingut suprimit (Gone)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 No disponible per motius legals" @@ -582,7 +582,7 @@ msgstr "Informació del compte" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Administració" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Navegació d'administració" @@ -803,7 +803,7 @@ msgstr "Tots" msgid "All authors" msgstr "Tots els autors" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Totes les signatures" @@ -811,7 +811,7 @@ msgstr "Totes les signatures" msgid "All capabilities" msgstr "Totes les capacitats" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Totes les col·leccions" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Totes les fonts" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Tots els estats" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Tots els tipus" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Aplica l'enllaç" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Aprova" @@ -989,7 +989,7 @@ msgstr "Aprova" msgid "approved" msgstr "aprovat" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Aprovat" @@ -1026,7 +1026,7 @@ msgstr "Segur que vols eliminar «{0}»? Això també eliminarà tot el contingu msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Segur que vols eliminar el camp «{0}»?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Segur que vols eliminar aquest menú? Això també eliminarà tots els elements del menú. Aquesta acció no es pot desfer." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "L'autenticació s'ha cancel·lat o ha excedit el temps d'espera. Torna-ho a provar." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "S'està autoritzant..." msgid "Authors" msgstr "Autors" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "automàtic" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Automàtic (canvi de slug)" @@ -1236,7 +1236,7 @@ msgstr "Abans d'enviar:" msgid "Bing Verification" msgstr "Verificació de Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biografia" @@ -1259,7 +1259,7 @@ msgstr "Booleà" msgid "Brief summary shown below the title in search results" msgstr "Resum breu que es mostra sota el títol als resultats de cerca" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Explora i instal·la connectors publicats al registre descentralitzat." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Llista de vinyetes" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Esquema de signatures" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Esquema de signatures" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Signatures" @@ -1352,11 +1352,11 @@ msgstr "Pot veure el contingut" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Llegenda" msgid "Captions / Subtitles" msgstr "Llegendes / Subtítols" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categories" @@ -1554,17 +1554,17 @@ msgstr "Fes clic a l'enllaç del correu electrònic per iniciar la sessió." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Codi" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Paraules clau separades per comes per a la cerca." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Comentari" @@ -1654,9 +1654,9 @@ msgstr "Comentari" msgid "Comment Detail" msgstr "Detall del comentari" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Comentaris" @@ -1707,13 +1707,13 @@ msgstr "{0} connectat" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Contingut" @@ -1771,9 +1771,9 @@ msgstr "Instantània del contingut:" msgid "Content to Import" msgstr "Contingut per importar" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tipus de contingut" @@ -1855,7 +1855,7 @@ msgstr "No s'ha pogut detectar WordPress" msgid "Couldn't load byline fields." msgstr "No s'han pogut carregar els camps de signatura." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "No s'han pogut carregar els camps personalitzats." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Recompte" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Crea" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Crea un compte" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Crea una signatura" @@ -1925,12 +1925,12 @@ msgstr "Crea un tipus de contingut" msgid "Create field" msgstr "Crea un camp" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Crea un menú" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Crea un menú nou" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Crea testimonis d'accés personals per a l'accés programàtic a l'API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Crea una redirecció per a {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Crea una redirecció per a aquesta ruta" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Crea regles de redirecció per gestionar els canvis d'URL." @@ -1973,7 +1973,7 @@ msgstr "Crea l'esquema i importa" msgid "Create Section" msgstr "Crea una secció" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Crea seccions a la biblioteca de seccions per utilitzar-les aquí" @@ -1995,7 +1995,7 @@ msgstr "Crea una àrea de ginys" msgid "Create your account" msgstr "Crea el teu compte" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Crea el teu primer menú de navegació per començar" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "S'estan creant les col·leccions i els camps..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "fosc" msgid "Dark" msgstr "Fosc" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Tauler" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Data" @@ -2186,8 +2186,8 @@ msgstr "Defineix l'estructura del teu contingut" msgid "Defined in code" msgstr "Definit al codi" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Definit al codi" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Elimina" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Elimina el camp {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Elimina el menú {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "Vols eliminar el camp de signatura?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Vols eliminar la signatura?" @@ -2263,7 +2263,7 @@ msgstr "Vols eliminar la signatura?" msgid "Delete column" msgstr "Elimina la columna" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Vols eliminar el comentari?" @@ -2292,11 +2292,11 @@ msgstr "Elimina la imatge" msgid "Delete Media?" msgstr "Vols eliminar el fitxer multimèdia?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Elimina el menú" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Elimina permanentment" @@ -2309,16 +2309,16 @@ msgstr "Elimina permanentment" msgid "Delete Permanently?" msgstr "Vols eliminar-ho permanentment?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Elimina la redirecció" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Elimina la redirecció {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Vols eliminar la redirecció?" @@ -2348,18 +2348,18 @@ msgstr "Eliminat" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "En eliminar «{0}» també se suprimirà {1, plural, one {# valor emmagatzemat} other {# valors emmagatzemats}} de totes les signatures. Aquesta acció no es pot desfer." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "S'està eliminant..." @@ -2414,11 +2414,11 @@ msgstr "Descripció" msgid "Description (optional)" msgstr "Descripció (opcional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destinació" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Ruta de destinació" @@ -2462,7 +2462,7 @@ msgstr "Desactiva" msgid "Disable plugin" msgstr "Desactiva el connector" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Desactiva la redirecció" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Vols desactivar l'usuari?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nom visible" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nom visible per a la interfície d'administració" @@ -2706,7 +2706,7 @@ msgstr "Duplica {title}" msgid "e.g. application/zip or .pdf" msgstr "p. ex. application/zip o .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "p. ex. import, blog" @@ -2722,7 +2722,7 @@ msgstr "p. ex. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Edita" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Edita {0}" @@ -2782,16 +2782,16 @@ msgstr "Edita l'element del menú" msgid "Edit menu items" msgstr "Edita els elements del menú" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Edita la redirecció" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Edita la redirecció" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Edita la redirecció {0}" @@ -2899,12 +2899,12 @@ msgstr "Activa la cerca de text complet en aquesta col·lecció" msgid "Enable plugin" msgstr "Activa el connector" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Activa la redirecció" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Activat" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "No s'han pogut carregar les signatures: {0}" @@ -3387,7 +3387,7 @@ msgstr "No s'ha pogut carregar el connector" msgid "Failed to load plugins: {0}" msgstr "No s'han pogut carregar els connectors: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "No s'han pogut carregar els connectors. Pot ser que l'agregador del registre no sigui accessible." @@ -3701,7 +3701,7 @@ msgstr "Filtra per autor" msgid "Filter by capability" msgstr "Filtra per capacitat" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtra per col·lecció" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filtra per font" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filtra per estat" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filtra per tipus" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filtra per tipus de signatura" @@ -3806,7 +3806,7 @@ msgstr "" msgid "Grid view" msgstr "Vista de graella" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grup (opcional)" @@ -3814,11 +3814,11 @@ msgstr "Grup (opcional)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Signatura de convidat" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Només convidats" @@ -3882,8 +3882,8 @@ msgstr "Amaga el testimoni" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Jeràrquic (com les categories, amb relacions pare/fill)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Coincidències" @@ -3985,8 +3985,8 @@ msgstr "URL d'imatge actualitzats a" msgid "Images" msgstr "Imatges" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importa" @@ -4153,7 +4153,7 @@ msgstr "Insereix un enllaç" msgid "Insert raw HTML" msgstr "Insereix HTML pur" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Insereix una secció" @@ -4184,7 +4184,7 @@ msgstr "Instal·lació" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Instal·lat" @@ -4316,7 +4316,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Últim inici de sessió" msgid "Last Login" msgstr "Últim inici de sessió" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Vist per última vegada" @@ -4426,11 +4426,11 @@ msgstr "Enllaça amb un altre element de contingut" msgid "Linked Accounts ({0})" msgstr "Comptes enllaçats ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Només enllaçats" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Usuari enllaçat" @@ -4454,9 +4454,9 @@ msgstr "Vista en directe" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Carrega'n més" @@ -4480,7 +4480,7 @@ msgstr "S'estan carregant els camps de signatura…" msgid "Loading collections..." msgstr "S'estan carregant les col·leccions..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "S'estan carregant els comentaris..." @@ -4501,7 +4501,7 @@ msgstr "S'està carregant l'editor..." msgid "Loading menu..." msgstr "S'està carregant el menú..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "S'estan carregant els menús..." @@ -4509,11 +4509,11 @@ msgstr "S'estan carregant els menús..." msgid "Loading plugins..." msgstr "S'estan carregant els connectors..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "S'estan carregant les redireccions..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "S'estan carregant les seccions..." @@ -4545,7 +4545,7 @@ msgstr "S'estan carregant els ginys..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "S'estan carregant els ginys..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "S'està carregant..." @@ -4618,7 +4618,7 @@ msgstr "Fes sol·licituds de xarxa" msgid "Make network requests to any host (unrestricted)" msgstr "Fes sol·licituds de xarxa a qualsevol amfitrió (sense restriccions)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Gestiona" @@ -4640,11 +4640,11 @@ msgstr "Gestiona els ginys de contingut de les teves àrees de ginys" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Gestiona els connectors instal·lats. Activa o desactiva connectors per controlar-ne les funcions." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Gestiona els menús de navegació del teu lloc" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Gestiona les redireccions d'URL i consulta els errors 404." @@ -4660,7 +4660,7 @@ msgstr "Gestionat per {providerName}" msgid "Managed by an external media provider" msgstr "Gestionat per un proveïdor multimèdia extern" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Assigna l'usuari {0} de WordPress a un usuari d'EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Marca {0} com a Gone (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Marca com a Gone (410): indica als motors de cerca que s'ha eliminat permanentment" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Marca com a brossa" @@ -4697,7 +4697,7 @@ msgstr "mercat" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Mercat" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Importació multimèdia completada" msgid "Media import was skipped" msgstr "S'ha omès la importació multimèdia" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Biblioteca multimèdia" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "S'ha creat el menú «{0}» ({1})." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "S'ha creat el menú «{0}»." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "S'ha creat el menú" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "S'ha eliminat el menú" @@ -4811,9 +4811,9 @@ msgstr "No s'ha trobat el menú" msgid "Menu order has been updated." msgstr "S'ha actualitzat l'ordre del menú." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menús" @@ -4961,7 +4961,7 @@ msgstr "El meu blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "El nom i l'etiqueta són obligatoris" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "El nom ha de començar per una lletra i contenir només lletres minúscules, números i guions baixos" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navegació" @@ -4992,7 +4992,7 @@ msgstr "Mai" msgid "new" msgstr "nou" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Nou" @@ -5030,8 +5030,8 @@ msgstr "Camp nou" msgid "New public routes" msgstr "Rutes públiques noves" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Redirecció nova" @@ -5039,7 +5039,7 @@ msgstr "Redirecció nova" msgid "New Section" msgstr "Secció nova" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "pestanya nova" @@ -5067,7 +5067,7 @@ msgstr "Notícies" msgid "Next" msgstr "Següent" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Pàgina següent" @@ -5100,7 +5100,7 @@ msgstr "Encara no hi ha cap {0}." msgid "No {0} yet. Create one to get started." msgstr "Encara no hi ha cap {0}. Crea'n un per començar." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Encara no s'ha registrat cap error 404." @@ -5113,7 +5113,7 @@ msgstr "Sense text alternatiu" msgid "No API tokens yet. Create one to get started." msgstr "Encara no hi ha cap testimoni d'API. Crea'n un per començar." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Encara no hi ha cap comentari aprovat." @@ -5125,7 +5125,7 @@ msgstr "Encara no hi ha cap camp de signatura." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "No hi ha cap signatura disponible en {entryLocale}. Crea una variant des de la pàgina de signatures abans d'atribuir-ne una en aquesta entrada." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "No s'ha trobat cap signatura" @@ -5137,11 +5137,11 @@ msgstr "No s'ha seleccionat cap signatura." msgid "No collections configured" msgstr "No hi ha cap col·lecció configurada" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "No hi ha cap comentari pendent de moderació." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Cap comentari coincideix amb la teva cerca." @@ -5214,7 +5214,7 @@ msgstr "Encara no hi ha cap element" msgid "No limit" msgstr "Sense límit" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Cap usuari enllaçat" @@ -5257,7 +5257,7 @@ msgstr "No s'ha trobat cap fitxer multimèdia" msgid "No menu items yet" msgstr "Encara no hi ha cap element del menú" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Encara no hi ha cap menú" @@ -5290,11 +5290,11 @@ msgstr "No hi ha cap connector configurat" msgid "No plugins found" msgstr "No s'ha trobat cap connector" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Encara no s'ha publicat cap connector en aquest registre." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Cap connector coincideix amb «{debouncedQuery}»." @@ -5310,7 +5310,7 @@ msgstr "No hi ha cap URL públic disponible" msgid "No recent activity" msgstr "No hi ha activitat recent" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Encara no hi ha cap redirecció" @@ -5329,7 +5329,7 @@ msgstr "Cap resultat per a «{activeSearch}»" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Cap resultat per a «{debouncedQuery}». Prova un altre terme de cerca." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "No s'ha trobat cap resultat" @@ -5337,11 +5337,11 @@ msgstr "No s'ha trobat cap resultat" msgid "No revisions yet" msgstr "Encara no hi ha cap revisió" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "No hi ha cap secció disponible" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "No s'ha trobat cap secció" @@ -5350,7 +5350,7 @@ msgstr "No s'ha trobat cap secció" msgid "No sections yet" msgstr "Encara no hi ha cap secció" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "No hi ha comentaris de brossa." @@ -5423,7 +5423,7 @@ msgstr "Autoritza només els codis que reconeguis." msgid "Only email addresses from allowed domains can sign up." msgstr "Només es poden registrar les adreces electròniques de dominis permesos." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Només lletres minúscules, números i guions" @@ -5550,8 +5550,8 @@ msgstr "Paràgraf" msgid "Parent" msgstr "Pare" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Forma part d'un bucle de redirecció" @@ -5624,7 +5624,7 @@ msgstr "Les claus d'accés requereixen HTTPS o http://localhost (amb el teu port msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Ruta" @@ -5651,7 +5651,7 @@ msgstr "" msgid "pending" msgstr "pendent" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Pendent" @@ -5755,7 +5755,7 @@ msgstr "connector al teu lloc de WordPress." msgid "Plugin Permissions" msgstr "Permisos del connector" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Registre de connectors" @@ -5780,12 +5780,12 @@ msgstr "S'ha actualitzat el connector" msgid "Plugin widget error" msgstr "Error del giny del connector" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Connectors" @@ -5849,7 +5849,7 @@ msgstr "Previsualitza l'esborrany" msgid "Previous" msgstr "Anterior" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Pàgina anterior" @@ -5858,7 +5858,7 @@ msgstr "Pàgina anterior" msgid "Previous screenshot" msgstr "Captura de pantalla anterior" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Navegació principal" @@ -5997,7 +5997,7 @@ msgstr "Correu electrònic del destinatari" msgid "Recovery link sent to {0}" msgstr "S'ha enviat l'enllaç de recuperació a {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "S'ha detectat un bucle de redirecció" @@ -6005,9 +6005,9 @@ msgstr "S'ha detectat un bucle de redirecció" msgid "Redirecting to login..." msgstr "S'està redirigint a l'inici de sessió..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redireccions" @@ -6048,7 +6048,7 @@ msgstr "Ha fallat el registre" msgid "Registration was cancelled or timed out. Please try again." msgstr "El registre s'ha cancel·lat o ha excedit el temps d'espera. Torna-ho a provar." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registre" @@ -6350,11 +6350,11 @@ msgstr "Mateixa finestra" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Desa" @@ -6410,7 +6410,7 @@ msgstr "S'ha desat «{0}»." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "S'ha desat «{0}»." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "S'està desant..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Cerca per nom o correu electrònic..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Cerca signatures" @@ -6558,11 +6558,11 @@ msgstr "Cerca signatures" msgid "Search bylines to add..." msgstr "Cerca signatures per afegir..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Cerca comentaris" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Cerca comentaris..." @@ -6587,26 +6587,26 @@ msgstr "" msgid "Search media" msgstr "Cerca fitxers multimèdia" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Cerca pàgines i contingut..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Cerca connectors" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Cerca connectors..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Cerca seccions..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Cerca origen o destinació..." @@ -6664,9 +6664,9 @@ msgstr "No s'ha trobat la secció" msgid "Section title" msgstr "Títol de la secció" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Seccions" @@ -6717,7 +6717,7 @@ msgstr "Contactes de seguretat" msgid "Security error. Make sure you're on a secure connection." msgstr "Error de seguretat. Assegura't que estàs en una connexió segura." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Selecciona un component..." msgid "Select a menu..." msgstr "Selecciona un menú..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Selecciona-ho tot" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Selecciona el comentari de {0}" @@ -6923,14 +6923,14 @@ msgstr "Configura el teu lloc" msgid "Setting up..." msgstr "S'està configurant..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Configuració" @@ -7118,7 +7118,7 @@ msgstr "Omès" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Ordena els temes" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Origen" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Ruta d'origen" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "brossa" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Brossa" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Estat" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Codi d'estat" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "Eslògan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Etiquetes" @@ -7398,7 +7398,7 @@ msgstr "L'enllaç caducarà d'aquí a 15 minuts." msgid "The marketplace is empty. Check back later for new plugins." msgstr "El mercat és buit. Torna-hi més tard per veure connectors nous." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "S'ha eliminat el menú." @@ -7455,7 +7455,7 @@ msgstr "Les seccions proporcionades pel tema no es poden eliminar. Edita la secc msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Temes" @@ -7510,7 +7510,7 @@ msgstr "Aquest connector no requereix cap permís especial." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Aquest editor reclama un nom que no ha pogut demostrar que li pertany, possiblement suplantant algú altre. La instal·lació està desactivada. Si coneixes l'editor i hi confies, demana-li que arregli la configuració de la seva identitat abans de tornar-ho a provar." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Aquesta regla de redirecció s'eliminarà permanentment." @@ -7518,7 +7518,7 @@ msgstr "Aquesta regla de redirecció s'eliminarà permanentment." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Aquesta versió requereix un entorn més nou del que executa actualment el teu lloc. Actualitza'l abans d'instal·lar-la." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Això elimina el perfil de signatura. S'eliminen els enllaços de signatura del contingut i s'esborren els punters principals." @@ -7556,7 +7556,7 @@ msgstr "Això eliminarà permanentment «{0}» i el traurà de tot el contingut. msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Això eliminarà permanentment «{0}». Aquesta acció no es pot desfer." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Això eliminarà permanentment aquest comentari. Aquesta acció no es pot desfer." @@ -7601,7 +7601,7 @@ msgstr "Separador del títol" msgid "to" msgstr "a" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "per tancar" @@ -7613,7 +7613,7 @@ msgstr "Data final" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "per instal·lar connectors, o afegeix-los al teu astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "per seleccionar" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "paperera" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Paperera" @@ -7699,7 +7699,7 @@ msgstr "Paperera" msgid "Trash is empty" msgstr "La paperera és buida" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "La paperera és buida." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Prova un altre terme de cerca" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Prova d'ajustar la teva cerca" @@ -7916,7 +7916,7 @@ msgstr "Actualitza la configuració del lloc" msgid "Update the {0} details" msgstr "Actualitza els detalls de {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Actualitza aquesta regla de redirecció." @@ -8059,7 +8059,7 @@ msgstr "Patró d'URL" msgid "URL-friendly identifier" msgstr "Identificador apte per a URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Identificador apte per a URL (p. ex. «primary», «footer»)" @@ -8067,7 +8067,7 @@ msgstr "Identificador apte per a URL (p. ex. «primary», «footer»)" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Utilitza [param] o [...rest] a les rutes per fer coincidència de patrons." @@ -8124,8 +8124,8 @@ msgstr "Detalls de l'usuari" msgid "User not found" msgstr "No s'ha trobat l'usuari" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Usuaris" @@ -8148,7 +8148,7 @@ msgstr "v{0} disponible" msgid "Validation" msgstr "Validació" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Editor verificat" @@ -8221,7 +8221,7 @@ msgstr "Mostra el codi font" msgid "View the {license} license on spdx.org" msgstr "Mostra la llicència {license} a spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Els visitants que accedeixin a aquestes rutes veuran un error." @@ -8273,7 +8273,7 @@ msgstr "Aquest navegador no admet WebAuthn" msgid "Website" msgstr "Lloc web" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL del lloc web" @@ -8374,9 +8374,9 @@ msgstr "Títol del giny" msgid "Widget updated" msgstr "S'ha actualitzat el giny" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Pots crear i editar el teu propi contingut." msgid "You can manage content, media, menus, and taxonomies." msgstr "Pots gestionar contingut, fitxers multimèdia, menús i taxonomies." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Encara pots editar els camps fixos de dalt. En desar, no es modificarà cap valor de camp personalitzat emmagatzemat." diff --git a/packages/admin/src/locales/de/messages.po b/packages/admin/src/locales/de/messages.po index 07483d9de7..80b7365a37 100644 --- a/packages/admin/src/locales/de/messages.po +++ b/packages/admin/src/locales/de/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Gast" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Zugeordnet" @@ -35,7 +35,7 @@ msgstr " (öffnet in neuem Tab)" msgid " (selected)" msgstr " (ausgewählt)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# Kommentar aktualisiert} other {# Kommentare aktualisiert}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# Kommentar} other {# Kommentare}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# Inhaltselement importiert} other {# Inhaltselemente i #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# Element} other {# Elemente}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# Beitrag} other {# Beiträge}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# Weiterleitung ist Teil einer Schleife.} other {# Weiterleitungen sind Teil einer Schleife.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# ausgewählt} other {# ausgewählt}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# Element} other {# Elemente}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# insgesamt} other {# insgesamt}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {# unverändertes Element einblenden} other msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} hochgeladen, {failed} fehlgeschlagen" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/neue-seite oder /artikel/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/alte-seite oder /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Wähle \"Alle Inhalte\"" msgid "30 days" msgstr "30 Tage" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporär" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporär (Strikt)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (Strikt)" @@ -497,15 +497,15 @@ msgstr "4. Klicke \"Export-Datei herunterladen\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Gib \"EmDash\" ein und klicke \"Neu hinzufügen\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404-Fehler" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Kontoinformationen" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Admin-Navigation" @@ -803,7 +803,7 @@ msgstr "Alle" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Alle Autorenzeilen" @@ -811,7 +811,7 @@ msgstr "Alle Autorenzeilen" msgid "All capabilities" msgstr "Alle Berechtigungen" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Alle Kollektionen" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Alle Quellen" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Alle Status" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Alle Typen" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Link erstellen" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Freigeben" @@ -989,7 +989,7 @@ msgstr "Freigeben" msgid "approved" msgstr "freigegeben" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Freigegeben" @@ -1026,7 +1026,7 @@ msgstr "Bist du sicher, dass du „{0}“ entfernen möchtest? Dadurch werden au msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Möchtest du das Feld „{0}“ wirklich entfernen?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Möchtest du dieses Menü wirklich entfernen? Dadurch werden auch alle Menüeinträge entfernt. Diese Aktion kann nicht rückgängig gemacht werden." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Die Anmeldung wurde abgebrochen oder hat zu lange gedauert. Bitte versuche es erneut." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autorisieren..." msgid "Authors" msgstr "Autoren" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "automatisch" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Automatisch (Slug-Änderung)" @@ -1236,7 +1236,7 @@ msgstr "Vor dem Senden:" msgid "Bing Verification" msgstr "Bing-Verifizierung" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Bio" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Kurze Zusammenfassung, die unter dem Titel in den Suchergebnissen gezeigt wird" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Durchsuche und installiere Erweiterungen, die im dezentralen Verzeichnis veröffentlicht wurden." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Aufzählungsliste" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Autorenzeilen" @@ -1352,11 +1352,11 @@ msgstr "Kann Inhalte ansehen" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Bildunterschrift" msgid "Captions / Subtitles" msgstr "Untertitel" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategorien" @@ -1554,17 +1554,17 @@ msgstr "Klicke auf den Link in der E-Mail, um dich anzumelden." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Code" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Durch Kommas getrennte Suchbegriffe." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Kommentar" @@ -1654,9 +1654,9 @@ msgstr "Kommentar" msgid "Comment Detail" msgstr "Kommentardetails" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Kommentare" @@ -1707,13 +1707,13 @@ msgstr "{0} verbunden" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Inhalt" @@ -1771,9 +1771,9 @@ msgstr "Momentaufnahme des Inhalts:" msgid "Content to Import" msgstr "Zu importierender Inhalt" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Inhaltstypen" @@ -1855,7 +1855,7 @@ msgstr "WordPress wurde nicht erkannt" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Anzahl" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Erstellen" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Erstelle ein Benutzerkonto" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Autorenzeile erstellen" @@ -1925,12 +1925,12 @@ msgstr "Inhaltstyp erstellen" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Menü erstellen" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Neues Menü erstellen" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Persönliche Zugangstokens für programmatischen API-Zugriff erstellen" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Weiterleitung für {0} erstellen" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Weiterleitung für diesen Pfad erstellen" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Weiterleitungsregeln erstellen, um URL-Änderungen zu verwalten." @@ -1973,7 +1973,7 @@ msgstr "Schema erstellen & importieren" msgid "Create Section" msgstr "Abschnitt erstellen" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Erstelle Abschnitte in der Kollektion deiner Abschnitte, um sie hier zu nutzen" @@ -1995,7 +1995,7 @@ msgstr "Widget-Bereich erstellen" msgid "Create your account" msgstr "Erstelle dein Benutzerkonto" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Erstelle dein erstes Navigationsmenü, um zu beginnen" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Erstelle Kollektionen und Felder..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "dunkel" msgid "Dark" msgstr "Dunkel" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Dashboard" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Datum" @@ -2186,8 +2186,8 @@ msgstr "Definiere die Struktur deiner Inhalte" msgid "Defined in code" msgstr "Definiert mittels Code" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Definiert mittels Code" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Entfernen" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Feld {0} entfernen" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Menü {0} entfernen" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Autorenzeile entfernen?" @@ -2263,7 +2263,7 @@ msgstr "Autorenzeile entfernen?" msgid "Delete column" msgstr "Spalte entfernen" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Kommentar entfernen?" @@ -2292,11 +2292,11 @@ msgstr "Bild entfernen" msgid "Delete Media?" msgstr "Datei entfernen?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Menü entfernen" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Endgültig entfernen" @@ -2309,16 +2309,16 @@ msgstr "Endgültig entfernen" msgid "Delete Permanently?" msgstr "Endgültig entfernen?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Weiterleitung entfernen" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Weiterleitung {0} entfernen" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Weiterleitung entfernen?" @@ -2348,18 +2348,18 @@ msgstr "Entfernt" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Entfernen..." @@ -2414,11 +2414,11 @@ msgstr "Beschreibung" msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Ziel" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Zielpfad" @@ -2462,7 +2462,7 @@ msgstr "Deaktivieren" msgid "Disable plugin" msgstr "Erweiterung deaktivieren" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Weiterleitung deaktivieren" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Benutzer deaktivieren?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Anzeigename" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Anzeigename für den Adminbereich" @@ -2706,7 +2706,7 @@ msgstr "{title} duplizieren" msgid "e.g. application/zip or .pdf" msgstr "z. B. application/zip oder .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "z. B. importiert, blog" @@ -2722,7 +2722,7 @@ msgstr "z. B. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "{0} bearbeiten" @@ -2782,16 +2782,16 @@ msgstr "Menüeintrag bearbeiten" msgid "Edit menu items" msgstr "Menüeintrag bearbeiten" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Weiterleitung bearbeiten" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Weiterleitung bearbeiten" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Weiterleitung {0} bearbeiten" @@ -2896,12 +2896,12 @@ msgstr "Volltextsuche für diese Kollektion aktivieren" msgid "Enable plugin" msgstr "Erweiterung aktivieren" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Weiterleitung aktivieren" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Aktiviert" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Laden der Autorenzeilen fehlgeschlagen: {0}" @@ -3384,7 +3384,7 @@ msgstr "Laden der Erweiterung fehlgeschlagen" msgid "Failed to load plugins: {0}" msgstr "Laden der Erweiterungen fehlgeschlagen: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Laden der Erweiterungen fehlgeschlagen. Der Verzeichnisaggregator ist möglicherweise nicht erreichbar." @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "Nach Berechtigung filtern" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Nach Kollektion filtern" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "Nach Quelle filtern" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Nach Status filtern" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Nach Typ filtern" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Autorenzeilen-Typ filtern" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "Rasteransicht" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Gruppe (optional)" @@ -3811,11 +3811,11 @@ msgstr "Gruppe (optional)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Gast-Autorenzeile" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Nur Gäste" @@ -3879,8 +3879,8 @@ msgstr "Token ausblenden" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarchisch (wie Kategorien, mit Über-/Unterordnungsbeziehungen)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Aufrufe" @@ -3982,8 +3982,8 @@ msgstr "Bild-URLs angepasst in" msgid "Images" msgstr "Bilder" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Import" @@ -4150,7 +4150,7 @@ msgstr "Link einfügen" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Abschnitt einfügen" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Installiert" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "Letzte Anmeldung" msgid "Last Login" msgstr "Letzte Anmeldung" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Zuletzt aufgerufen" @@ -4423,11 +4423,11 @@ msgstr "Link zu anderem Inhaltselement" msgid "Linked Accounts ({0})" msgstr "Verbundene Konten ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Nur Zugeordnete" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Zugeordneter Benutzer" @@ -4451,9 +4451,9 @@ msgstr "Live-Ansicht" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Mehr laden" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "Lade Kollektionen..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Lade Kommentare..." @@ -4498,7 +4498,7 @@ msgstr "Lade Editor..." msgid "Loading menu..." msgstr "Lade Menü..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Lade Menüs..." @@ -4506,11 +4506,11 @@ msgstr "Lade Menüs..." msgid "Loading plugins..." msgstr "Lade Erweiterungen..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Lade Weiterleitungen..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Lade Abschnitte..." @@ -4542,7 +4542,7 @@ msgstr "Lade Widgets..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "Lade Widgets..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Laden..." @@ -4615,7 +4615,7 @@ msgstr "Netzwerkanfragen senden" msgid "Make network requests to any host (unrestricted)" msgstr "Netzwerkanfragen an beliebige Hosts senden (uneingeschränkt)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Verwalten" @@ -4637,11 +4637,11 @@ msgstr "Verwalte Widgets für Inhalte in deinen Widget-Bereichen" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Installierte Erweiterungen verwalten. Aktiviere oder deaktiviere Erweiterungen, um ihre Funktionalität zu kontrollieren." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Verwalte Navigationsmenüs für deine Webseite" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Verwalte URL-Weiterleitungen und prüfe 404-Fehler." @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manuell" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Ordne dem WordPress-Benutzer {0} einen EmDash-Benutzer zu" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Als Spam markieren" @@ -4694,7 +4694,7 @@ msgstr "Marktplatz" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marktplatz" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "Medienimport abgeschlossen" msgid "Media import was skipped" msgstr "Medienimport wurde übersprungen" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Medienbibliothek" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menü \"{0}\" ({1}) erstellt." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menü \"{0}\" wurde erstellt." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menü erstellt" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menü entfernt" @@ -4808,9 +4808,9 @@ msgstr "Menü nicht gefunden" msgid "Menu order has been updated." msgstr "Menüsortierung wurde aktualisiert." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menüs" @@ -4958,7 +4958,7 @@ msgstr "Mein wunderbarer Blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "Name und Bezeichnung sind erforderlich" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Der Name muss mit einem Buchstaben beginnen und darf nur Kleinbuchstaben, Zahlen und Unterstriche enthalten" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigation" @@ -4989,7 +4989,7 @@ msgstr "Nie" msgid "new" msgstr "neu" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Neu" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "Neue öffentliche Routen" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Neue Weiterleitung" @@ -5036,7 +5036,7 @@ msgstr "Neue Weiterleitung" msgid "New Section" msgstr "Neuer Abschnitt" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "neuer Tab" @@ -5064,7 +5064,7 @@ msgstr "News" msgid "Next" msgstr "Nächstes" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Nächste Seite" @@ -5097,7 +5097,7 @@ msgstr "Noch keine {0} vorhanden." msgid "No {0} yet. Create one to get started." msgstr "Noch keine {0} vorhanden. Erstelle einen Begriff, um loszulegen." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Noch keine 404-Fehler aufgezeichnet." @@ -5110,7 +5110,7 @@ msgstr "Kein Alt-Text" msgid "No API tokens yet. Create one to get started." msgstr "Noch keine API-Tokens. Erstelle ein Token, um loszulegen." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Noch keine freigegebenen Kommentare." @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Keine Autorenzeile in {entryLocale} verfügbar. Erstelle zuerst auf der Seite Autorenzeilen eine Variante, bevor du sie diesem Eintrag zuweist." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Keine Autorenzeile gefunden" @@ -5134,11 +5134,11 @@ msgstr "Keine Autorenzeile ausgewählt." msgid "No collections configured" msgstr "Keine Kollektionen konfiguriert" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Keine Kommentare erfordern eine Moderation." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Keine Kommentare entsprechen deiner Suche." @@ -5211,7 +5211,7 @@ msgstr "Noch keine Elemente" msgid "No limit" msgstr "Kein Limit" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Kein zugeordneter Benutzer" @@ -5254,7 +5254,7 @@ msgstr "Kein Medium gefunden" msgid "No menu items yet" msgstr "Noch kein Menüeintrag" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Noch keine Menüs" @@ -5287,11 +5287,11 @@ msgstr "Keine Erweiterungen konfiguriert" msgid "No plugins found" msgstr "Keine Erweiterungen gefunden" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "In diesem Verzeichnis wurden bislang keine Erweiterungen veröffentlicht." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Keine Erweiterungen stimmen überein mit \"{debouncedQuery}\"." @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "Keine aktuellen Aktivitäten" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Noch keine Weiterleitungen" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Keine Ergebnisse für \"{debouncedQuery}\". Versuche es mit einem anderen Suchbegriff." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Keine Ergebnisse gefunden" @@ -5334,11 +5334,11 @@ msgstr "Keine Ergebnisse gefunden" msgid "No revisions yet" msgstr "Noch keine Revisionen" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Keine Abschnitte verfügbar" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Keine Abschnitte gefunden" @@ -5347,7 +5347,7 @@ msgstr "Keine Abschnitte gefunden" msgid "No sections yet" msgstr "Noch keine Abschnitte" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Keine Spam-Kommentare." @@ -5420,7 +5420,7 @@ msgstr "Autorisiere nur Codes, die du wiedererkennst." msgid "Only email addresses from allowed domains can sign up." msgstr "Nur E-Mail-Adressen von erlaubten Domains können sich registrieren." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Nur Kleinbuchstaben, Zahlen und Bindestriche" @@ -5547,8 +5547,8 @@ msgstr "Absatz" msgid "Parent" msgstr "Übergeordnetes Element" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Teil einer Weiterleitungsschleife" @@ -5621,7 +5621,7 @@ msgstr "Passkeys erfordern HTTPS oder http://localhost (mit deinem Port); dieser msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Pfad" @@ -5648,7 +5648,7 @@ msgstr "PDF" msgid "pending" msgstr "Ausstehend" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Ausstehend" @@ -5752,7 +5752,7 @@ msgstr "Erweiterung für deine WordPress-Webseite, um von einem reibungslosen Im msgid "Plugin Permissions" msgstr "Erweiterungsberechtigungen" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Erweiterungsverzeichnis" @@ -5777,12 +5777,12 @@ msgstr "Erweiterung aktualisiert" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Erweiterungen" @@ -5846,7 +5846,7 @@ msgstr "Entwurf-Vorschau" msgid "Previous" msgstr "Vorheriges" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Vorherige Seite" @@ -5855,7 +5855,7 @@ msgstr "Vorherige Seite" msgid "Previous screenshot" msgstr "Vorheriges Bildschirmfoto" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Hauptnavigation" @@ -5994,7 +5994,7 @@ msgstr "E-Mail-Adresse des Empfängers" msgid "Recovery link sent to {0}" msgstr "Link zur Wiederherstellung wurde an {0} gesendet" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Weiterleitungsschleife erkannt" @@ -6002,9 +6002,9 @@ msgstr "Weiterleitungsschleife erkannt" msgid "Redirecting to login..." msgstr "Weiterleiten zur Anmeldung..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Weiterleitungen" @@ -6045,7 +6045,7 @@ msgstr "Registrieren fehlgeschlagen" msgid "Registration was cancelled or timed out. Please try again." msgstr "Die Registrierung wurde abgebrochen oder ist abgelaufen. Bitte versuche es erneut." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Verzeichnis" @@ -6347,11 +6347,11 @@ msgstr "Aktueller Tab" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Speichern" @@ -6407,7 +6407,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6419,7 +6419,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Speichern..." @@ -6547,7 +6547,7 @@ msgid "Search by name or email..." msgstr "Suche anhand von Name oder E-Mail-Adresse" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Autorenzeilen durchsuchen" @@ -6555,11 +6555,11 @@ msgstr "Autorenzeilen durchsuchen" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Kommentare durchsuchen" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Kommentare durchsuchen..." @@ -6584,26 +6584,26 @@ msgstr "" msgid "Search media" msgstr "Medien durchsuchen" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Seiten und Inhalte durchsuchen..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Erweiterungen durchsuchen" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Erweiterungen durchsuchen..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Abschnitte durchsuchen..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Suche nach Quelle oder Ziel..." @@ -6661,9 +6661,9 @@ msgstr "Abschnitt nicht gefunden" msgid "Section title" msgstr "Abschnittstitel" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Abschnitte" @@ -6714,7 +6714,7 @@ msgstr "Sicherheitskontakte" msgid "Security error. Make sure you're on a secure connection." msgstr "Sicherheitsfehler. Bitte stelle sicher, dass du eine sichere Verbindung verwendest." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6745,7 +6745,7 @@ msgstr "Eine Komponente auswählen..." msgid "Select a menu..." msgstr "Ein Menü auswählen..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Alle auswählen" @@ -6754,7 +6754,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Kommentar von {0} auswählen" @@ -6920,14 +6920,14 @@ msgstr "Richte deine Webseite ein" msgid "Setting up..." msgstr "Einrichten..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Einstellungen" @@ -7115,7 +7115,7 @@ msgstr "Übersprungen" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7171,12 +7171,12 @@ msgstr "Designs sortieren" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Quelle" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Quellpfad" @@ -7185,8 +7185,8 @@ msgid "spam" msgstr "Spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7215,12 +7215,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Statuscode" @@ -7303,7 +7303,7 @@ msgstr "" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Schlagwörter" @@ -7395,7 +7395,7 @@ msgstr "Der Link ist 15 Minuten lang gültig." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Der Marktplatz ist leer. Bitte versuche es später erneut, um neue Erweiterungen zu entdecken." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Das Menü wurde entfernt." @@ -7452,7 +7452,7 @@ msgstr "Vom Design bereitgestellte Abschnitte können nicht gelöscht werden. Be msgid "Theme: {label}" msgstr "Design: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Designs" @@ -7507,7 +7507,7 @@ msgstr "Diese Erweiterung benötigt keine speziellen Berechtigungen." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Dieser Herausgeber beansprucht einen Namen, dessen Eigentumsrechte er nicht nachweisen kann – möglicherweise gibt er sich als jemand anderes aus. Die Installation ist deaktiviert. Wenn du den Herausgeber kennst und ihm vertraust, bitte ihn, seine Identitätsangaben zu korrigieren, bevor du es erneut versuchst." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Diese Weiterleitungsregel wird endgültig gelöscht." @@ -7515,7 +7515,7 @@ msgstr "Diese Weiterleitungsregel wird endgültig gelöscht." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Hierdurch wird das Autorenprofil entfernt. Links zu Autorenbeiträgen und Verweise werden ebenfalls entfernt." @@ -7553,7 +7553,7 @@ msgstr "Hierdurch wird \"{0}\" endgültig gelöscht und aus allen Inhalten entfe msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Hierdurch wird \"{0}\" endgültig entfernt. Dieser Vorgang kann nicht rückgängig gemacht werden." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Dieser Kommentar wird endgültig entfernt. Diese Aktion kann nicht rückgängig gemacht werden." @@ -7598,7 +7598,7 @@ msgstr "Titel-Trennzeichen" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "zum Schließen" @@ -7610,7 +7610,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "um Erweiterungen zu installieren. Alternativ kannst du sie zu deiner astro.config.mjs-Datei hinzufügen." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "zum Auswählen" @@ -7685,9 +7685,9 @@ msgid "trash" msgstr "Papierkorb" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Papierkorb" @@ -7696,7 +7696,7 @@ msgstr "Papierkorb" msgid "Trash is empty" msgstr "Papierkorb ist leer" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Papierkorb ist leer." @@ -7713,7 +7713,7 @@ msgid "Try a different search term" msgstr "Versuche einen anderen Suchbegriff" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Versuche deine Suche anzupassen" @@ -7913,7 +7913,7 @@ msgstr "Webseiten-Einstellungen ändern" msgid "Update the {0} details" msgstr "Aktualisiere Details zu {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Ändere diese Weiterleitungsregel." @@ -8056,7 +8056,7 @@ msgstr "URL-Muster" msgid "URL-friendly identifier" msgstr "URL-freundlicher Bezeichner" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-freundliche Kennung (z. B. \"hauptbereich\", \"fusszeile\")" @@ -8064,7 +8064,7 @@ msgstr "URL-freundliche Kennung (z. B. \"hauptbereich\", \"fusszeile\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Nutze [param] oder [...rest] in Pfaden für Musterabgleiche (Regex)." @@ -8121,8 +8121,8 @@ msgstr "Benutzerdetails" msgid "User not found" msgstr "Benutzer nicht gefunden" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Benutzer" @@ -8145,7 +8145,7 @@ msgstr "v{0} verfügbar" msgid "Validation" msgstr "Validierung" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Verifizierter Herausgeber" @@ -8218,7 +8218,7 @@ msgstr "Quellcode anzeigen" msgid "View the {license} license on spdx.org" msgstr "{license}-Lizenz auf spdx.org anzeigen" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Besucher, die diese Pfade aufrufen, erhalten eine Fehlermeldung." @@ -8270,7 +8270,7 @@ msgstr "WebAuthn wird von diesem Browser nicht unterstützt" msgid "Website" msgstr "Webseite" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Webseiten-URL" @@ -8371,9 +8371,9 @@ msgstr "Widget-Titel" msgid "Widget updated" msgstr "Widget aktualisiert" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8454,7 +8454,7 @@ msgstr "Du kannst eigene Inhalte erstellen und bearbeiten." msgid "You can manage content, media, menus, and taxonomies." msgstr "Du kannst Inhalte, Medien, Menüs und Taxonomien verwalten." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/en-GB/messages.po b/packages/admin/src/locales/en-GB/messages.po index b4234be413..488b678bef 100644 --- a/packages/admin/src/locales/en-GB/messages.po +++ b/packages/admin/src/locales/en-GB/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Guest" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Linked" @@ -35,7 +35,7 @@ msgstr " (opens in new window)" msgid " (selected)" msgstr " (selected)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Select --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# comment updated} other {# comments updated}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# comment} other {# comments}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# content item imported} other {# content items importe #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# item} other {# items}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# post} other {# posts}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# selected} other {# selected}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} required — you have {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# item} other {# items}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# total} other {# total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Show # unchanged} other {Show # unchanged} msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} uploaded, {failed} failed" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page or /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page or /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Select \"All content\"" msgid "30 days" msgstr "30 days" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporary" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporary (Strict)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (Strict)" @@ -497,15 +497,15 @@ msgstr "4. Click \"Download Export File\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Enter \"EmDash\" and click \"Add New\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 Errors" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Account Info" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Admin navigation" @@ -803,7 +803,7 @@ msgstr "All" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "All bylines" @@ -811,7 +811,7 @@ msgstr "All bylines" msgid "All capabilities" msgstr "All capabilities" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "All collections" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "All Sources" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "All statuses" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "All types" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Apply link" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Approve" @@ -989,7 +989,7 @@ msgstr "Approve" msgid "approved" msgstr "approved" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Approved" @@ -1026,7 +1026,7 @@ msgstr "Are you sure you want to delete \"{0}\"? This will also delete all conte msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Are you sure you want to delete the \"{0}\" field?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Authentication was cancelled or timed out. Please try again." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Authorising..." msgid "Authors" msgstr "Authors" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (slug change)" @@ -1236,7 +1236,7 @@ msgstr "Before send:" msgid "Bing Verification" msgstr "Bing Verification" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Bio" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Brief summary shown below the title in search results" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Browse and install plugins published to the decentralised registry." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Bullet List" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Byline schema" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Bylines" @@ -1352,11 +1352,11 @@ msgstr "Can view content" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Caption" msgid "Captions / Subtitles" msgstr "Captions / Subtitles" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categories" @@ -1554,17 +1554,17 @@ msgstr "Click the link in the email to sign in." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Code" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Comma-separated keywords for search." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Comment" @@ -1654,9 +1654,9 @@ msgstr "Comment" msgid "Comment Detail" msgstr "Comment Detail" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Comments" @@ -1707,13 +1707,13 @@ msgstr "Connected {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Content" @@ -1771,9 +1771,9 @@ msgstr "Content snapshot:" msgid "Content to Import" msgstr "Content to Import" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Content Types" @@ -1855,7 +1855,7 @@ msgstr "Couldn't detect WordPress" msgid "Couldn't load byline fields." msgstr "Couldn't load byline fields." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Couldn't load custom fields." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Count" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Create" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Create an account" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Create byline" @@ -1925,12 +1925,12 @@ msgstr "Create Content Type" msgid "Create field" msgstr "Create field" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Create Menu" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Create New Menu" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Create personal access tokens for programmatic API access" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Create redirect for {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Create redirect for this path" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Create redirect rules to manage URL changes." @@ -1973,7 +1973,7 @@ msgstr "Create Schema & Import" msgid "Create Section" msgstr "Create Section" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Create sections in the Sections library to use them here" @@ -1995,7 +1995,7 @@ msgstr "Create Widget Area" msgid "Create your account" msgstr "Create your account" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Create your first navigation menu to get started" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Creating collections and fields..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "dark" msgid "Dark" msgstr "Dark" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Dashboard" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Date" @@ -2186,8 +2186,8 @@ msgstr "Define the structure of your content" msgid "Defined in code" msgstr "Defined in code" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Defined in code" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Delete" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Delete {0} field" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Delete {0} menu" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "Delete byline field?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Delete Byline?" @@ -2263,7 +2263,7 @@ msgstr "Delete Byline?" msgid "Delete column" msgstr "Delete column" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Delete Comment?" @@ -2292,11 +2292,11 @@ msgstr "Delete image" msgid "Delete Media?" msgstr "Delete Media?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Delete Menu" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Delete permanently" @@ -2309,16 +2309,16 @@ msgstr "Delete Permanently" msgid "Delete Permanently?" msgstr "Delete Permanently?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Delete redirect" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Delete redirect {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Delete Redirect?" @@ -2348,18 +2348,18 @@ msgstr "Deleted" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Deleting..." @@ -2414,11 +2414,11 @@ msgstr "Description" msgid "Description (optional)" msgstr "Description (optional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destination" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Destination path" @@ -2462,7 +2462,7 @@ msgstr "Disable" msgid "Disable plugin" msgstr "Disable plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Disable redirect" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Disable User?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Display name" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Display name for admin interface" @@ -2706,7 +2706,7 @@ msgstr "Duplicate {title}" msgid "e.g. application/zip or .pdf" msgstr "e.g. application/zip or .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "e.g. import, blog" @@ -2722,7 +2722,7 @@ msgstr "e.g., MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Edit" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Edit {0}" @@ -2782,16 +2782,16 @@ msgstr "Edit Menu Item" msgid "Edit menu items" msgstr "Edit menu items" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Edit redirect" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Edit Redirect" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Edit redirect {0}" @@ -2899,12 +2899,12 @@ msgstr "Enable full-text search on this collection" msgid "Enable plugin" msgstr "Enable plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Enable redirect" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Enabled" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Failed to load bylines: {0}" @@ -3387,7 +3387,7 @@ msgstr "Failed to load plugin" msgid "Failed to load plugins: {0}" msgstr "Failed to load plugins: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Failed to load plugins. The registry aggregator may be unreachable." @@ -3701,7 +3701,7 @@ msgstr "" msgid "Filter by capability" msgstr "Filter by capability" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filter by collection" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filter by source" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filter by status" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filter by type" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filter byline type" @@ -3806,7 +3806,7 @@ msgstr "" msgid "Grid view" msgstr "Grid view" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Group (optional)" @@ -3814,11 +3814,11 @@ msgstr "Group (optional)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Guest byline" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Guest only" @@ -3882,8 +3882,8 @@ msgstr "Hide token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarchical (like categories, with parent/child relationships)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Hits" @@ -3985,8 +3985,8 @@ msgstr "image URLs updated in" msgid "Images" msgstr "Images" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Import" @@ -4153,7 +4153,7 @@ msgstr "Insert Link" msgid "Insert raw HTML" msgstr "Insert raw HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Insert Section" @@ -4184,7 +4184,7 @@ msgstr "Installation" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Installed" @@ -4316,7 +4316,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Last login" msgid "Last Login" msgstr "Last Login" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Last seen" @@ -4426,11 +4426,11 @@ msgstr "Link to another content item" msgid "Linked Accounts ({0})" msgstr "Linked Accounts ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Linked only" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Linked user" @@ -4454,9 +4454,9 @@ msgstr "Live View" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Load more" @@ -4480,7 +4480,7 @@ msgstr "Loading byline fields…" msgid "Loading collections..." msgstr "Loading collections..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Loading comments..." @@ -4501,7 +4501,7 @@ msgstr "Loading editor..." msgid "Loading menu..." msgstr "Loading menu..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Loading menus..." @@ -4509,11 +4509,11 @@ msgstr "Loading menus..." msgid "Loading plugins..." msgstr "Loading plugins..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Loading redirects..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Loading sections..." @@ -4545,7 +4545,7 @@ msgstr "Loading widgets..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Loading widgets..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Loading..." @@ -4618,7 +4618,7 @@ msgstr "Make network requests" msgid "Make network requests to any host (unrestricted)" msgstr "Make network requests to any host (unrestricted)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Manage" @@ -4640,11 +4640,11 @@ msgstr "Manage content widgets in your widget areas" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Manage installed plugins. Enable or disable plugins to control their functionality." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Manage navigation menus for your site" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Manage URL redirects and view 404 errors." @@ -4660,7 +4660,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Map WordPress user {0} to EmDash user" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Mark as spam" @@ -4697,7 +4697,7 @@ msgstr "marketplace" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Media Import Complete" msgid "Media import was skipped" msgstr "Media import was skipped" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Media Library" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menu \"{0}\" ({1}) created." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menu \"{0}\" has been created." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu created" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu deleted" @@ -4811,9 +4811,9 @@ msgstr "Menu not found" msgid "Menu order has been updated." msgstr "Menu order has been updated." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menus" @@ -4961,7 +4961,7 @@ msgstr "My Awesome Blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Name and label are required" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Name must start with a letter and contain only lowercase letters, numbers, and underscores" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigation" @@ -4992,7 +4992,7 @@ msgstr "Never" msgid "new" msgstr "new" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "New" @@ -5030,8 +5030,8 @@ msgstr "New field" msgid "New public routes" msgstr "New public routes" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "New Redirect" @@ -5039,7 +5039,7 @@ msgstr "New Redirect" msgid "New Section" msgstr "New Section" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "new tab" @@ -5067,7 +5067,7 @@ msgstr "News" msgid "Next" msgstr "Next" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Next page" @@ -5100,7 +5100,7 @@ msgstr "No {0} yet." msgid "No {0} yet. Create one to get started." msgstr "No {0} yet. Create one to get started." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "No 404 errors recorded yet." @@ -5113,7 +5113,7 @@ msgstr "No alt text" msgid "No API tokens yet. Create one to get started." msgstr "No API tokens yet. Create one to get started." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "No approved comments yet." @@ -5125,7 +5125,7 @@ msgstr "No byline fields yet." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "No bylines found" @@ -5137,11 +5137,11 @@ msgstr "No bylines selected." msgid "No collections configured" msgstr "No collections configured" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "No comments awaiting moderation." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "No comments match your search." @@ -5214,7 +5214,7 @@ msgstr "No items yet" msgid "No limit" msgstr "No limit" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "No linked user" @@ -5257,7 +5257,7 @@ msgstr "No media found" msgid "No menu items yet" msgstr "No menu items yet" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "No menus yet" @@ -5290,11 +5290,11 @@ msgstr "No plugins configured" msgid "No plugins found" msgstr "No plugins found" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "No plugins have been published to this registry yet." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "No plugins match \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "" msgid "No recent activity" msgstr "No recent activity" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "No redirects yet" @@ -5329,7 +5329,7 @@ msgstr "No results for \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "No results for \"{debouncedQuery}\". Try a different search term." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "No results found" @@ -5337,11 +5337,11 @@ msgstr "No results found" msgid "No revisions yet" msgstr "No revisions yet" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "No sections available" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "No sections found" @@ -5350,7 +5350,7 @@ msgstr "No sections found" msgid "No sections yet" msgstr "No sections yet" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "No spam comments." @@ -5423,7 +5423,7 @@ msgstr "Only authorise codes you recognise." msgid "Only email addresses from allowed domains can sign up." msgstr "Only email addresses from allowed domains can sign up." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Only lowercase letters, numbers, and hyphens" @@ -5550,8 +5550,8 @@ msgstr "Paragraph" msgid "Parent" msgstr "Parent" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Part of a redirect loop" @@ -5624,7 +5624,7 @@ msgstr "Passkeys require HTTPS or http://localhost (with your port); this hostna msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Path" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "pending" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Pending" @@ -5755,7 +5755,7 @@ msgstr "plugin on your WordPress site." msgid "Plugin Permissions" msgstr "Plugin Permissions" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Plugin Registry" @@ -5780,12 +5780,12 @@ msgstr "Plugin updated" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugins" @@ -5849,7 +5849,7 @@ msgstr "Preview draft" msgid "Previous" msgstr "Previous" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Previous page" @@ -5858,7 +5858,7 @@ msgstr "Previous page" msgid "Previous screenshot" msgstr "Previous screenshot" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Primary Navigation" @@ -5997,7 +5997,7 @@ msgstr "Recipient email" msgid "Recovery link sent to {0}" msgstr "Recovery link sent to {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Redirect loop detected" @@ -6005,9 +6005,9 @@ msgstr "Redirect loop detected" msgid "Redirecting to login..." msgstr "Redirecting to login..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redirects" @@ -6048,7 +6048,7 @@ msgstr "Registration failed" msgid "Registration was cancelled or timed out. Please try again." msgstr "Registration was cancelled or timed out. Please try again." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registry" @@ -6350,11 +6350,11 @@ msgstr "Same window" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Save" @@ -6410,7 +6410,7 @@ msgstr "Saved \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "Saved \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Saving..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Search by name or email..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Search bylines" @@ -6558,11 +6558,11 @@ msgstr "Search bylines" msgid "Search bylines to add..." msgstr "Search bylines to add..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Search comments" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Search comments..." @@ -6587,26 +6587,26 @@ msgstr "" msgid "Search media" msgstr "Search media" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Search pages and content..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Search plugins" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Search plugins..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Search sections..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Search source or destination..." @@ -6664,9 +6664,9 @@ msgstr "Section Not Found" msgid "Section title" msgstr "Section title" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Sections" @@ -6717,7 +6717,7 @@ msgstr "Security contacts" msgid "Security error. Make sure you're on a secure connection." msgstr "Security error. Make sure you're on a secure connection." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Select a component..." msgid "Select a menu..." msgstr "Select a menu..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Select all" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Select comment by {0}" @@ -6923,14 +6923,14 @@ msgstr "Set up your site" msgid "Setting up..." msgstr "Setting up..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Settings" @@ -7118,7 +7118,7 @@ msgstr "Skipped" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Sort themes" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Source" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Source path" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Status code" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "Tagline" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Tags" @@ -7398,7 +7398,7 @@ msgstr "The link will expire in 15 minutes." msgid "The marketplace is empty. Check back later for new plugins." msgstr "The marketplace is empty. Check back later for new plugins." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "The menu has been deleted." @@ -7455,7 +7455,7 @@ msgstr "Theme-provided sections cannot be deleted. Edit the section to create a msgid "Theme: {label}" msgstr "Theme: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Themes" @@ -7510,7 +7510,7 @@ msgstr "This plugin requires no special permissions." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "This redirect rule will be permanently removed." @@ -7518,7 +7518,7 @@ msgstr "This redirect rule will be permanently removed." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "This release requires a newer environment than your site currently runs. Upgrade before installing." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "This removes the byline profile. Content byline links are removed and lead pointers are cleared." @@ -7556,7 +7556,7 @@ msgstr "This will permanently delete \"{0}\" and remove it from all content." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "This will permanently delete \"{0}\". This action cannot be undone." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "This will permanently delete this comment. This action cannot be undone." @@ -7601,7 +7601,7 @@ msgstr "Title Separator" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "to close" @@ -7613,7 +7613,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "to install plugins, or add them to your astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "to select" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "trash" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Trash" @@ -7699,7 +7699,7 @@ msgstr "Trash" msgid "Trash is empty" msgstr "Trash is empty" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Trash is empty." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Try a different search term" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Try adjusting your search" @@ -7916,7 +7916,7 @@ msgstr "Update site settings" msgid "Update the {0} details" msgstr "Update the {0} details" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Update this redirect rule." @@ -8059,7 +8059,7 @@ msgstr "URL Pattern" msgid "URL-friendly identifier" msgstr "URL-friendly identifier" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-friendly identifier (e.g., \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Use [param] or [...rest] in paths for pattern matching." @@ -8124,8 +8124,8 @@ msgstr "User Details" msgid "User not found" msgstr "User not found" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Users" @@ -8148,7 +8148,7 @@ msgstr "v{0} available" msgid "Validation" msgstr "Validation" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Verified publisher" @@ -8221,7 +8221,7 @@ msgstr "View source" msgid "View the {license} license on spdx.org" msgstr "View the {license} licence on spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Visitors hitting these paths will see an error." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn is not supported in this browser" msgid "Website" msgstr "Website" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Website URL" @@ -8374,9 +8374,9 @@ msgstr "Widget title" msgid "Widget updated" msgstr "Widget updated" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "You can create and edit your own content." msgid "You can manage content, media, menus, and taxonomies." msgstr "You can manage content, media, menus, and taxonomies." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." diff --git a/packages/admin/src/locales/en/messages.po b/packages/admin/src/locales/en/messages.po index d9a272bf2d..dc5fa8f49b 100644 --- a/packages/admin/src/locales/en/messages.po +++ b/packages/admin/src/locales/en/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Guest" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Linked" @@ -35,7 +35,7 @@ msgstr " (opens in new window)" msgid " (selected)" msgstr " (selected)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Select --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# comment updated} other {# comments updated}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# comment} other {# comments}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# content item imported} other {# content items importe #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# item} other {# items}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# post} other {# posts}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# selected} other {# selected}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} required — you have {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {Move # item to trash? You can restore it la msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# item} other {# items}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# total} other {# total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Show # unchanged} other {Show # unchanged} msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} uploaded, {failed} failed" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page or /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page or /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Select \"All content\"" msgid "30 days" msgstr "30 days" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporary" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporary (Strict)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (Strict)" @@ -497,15 +497,15 @@ msgstr "4. Click \"Download Export File\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Enter \"EmDash\" and click \"Add New\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 Errors" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Content Deleted (Gone)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Unavailable for legal reasons" @@ -582,7 +582,7 @@ msgstr "Account Info" msgid "ACF Fields" msgstr "ACF Fields" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Admin navigation" @@ -803,7 +803,7 @@ msgstr "All" msgid "All authors" msgstr "All authors" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "All bylines" @@ -811,7 +811,7 @@ msgstr "All bylines" msgid "All capabilities" msgstr "All capabilities" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "All collections" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "All Sources" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "All statuses" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "All types" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Apply link" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Approve" @@ -989,7 +989,7 @@ msgstr "Approve" msgid "approved" msgstr "approved" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Approved" @@ -1026,7 +1026,7 @@ msgstr "Are you sure you want to delete \"{0}\"? This will also delete all conte msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Are you sure you want to delete the \"{0}\" field?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Authentication was cancelled or timed out. Please try again." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Authorizing..." msgid "Authors" msgstr "Authors" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (slug change)" @@ -1236,7 +1236,7 @@ msgstr "Before send:" msgid "Bing Verification" msgstr "Bing Verification" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Bio" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Brief summary shown below the title in search results" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Browse and install plugins published to the decentralized registry." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Bullet List" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Byline schema" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Byline Schema" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Bylines" @@ -1352,11 +1352,11 @@ msgstr "Can view content" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Caption" msgid "Captions / Subtitles" msgstr "Captions / Subtitles" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categories" @@ -1554,17 +1554,17 @@ msgstr "Click the link in the email to sign in." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Close settings" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Code" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Comma-separated keywords for search." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Comment" @@ -1654,9 +1654,9 @@ msgstr "Comment" msgid "Comment Detail" msgstr "Comment Detail" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Comments" @@ -1707,13 +1707,13 @@ msgstr "Connected {0}" msgid "content" msgstr "content" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Content" @@ -1771,9 +1771,9 @@ msgstr "Content snapshot:" msgid "Content to Import" msgstr "Content to Import" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Content Types" @@ -1855,7 +1855,7 @@ msgstr "Couldn't detect WordPress" msgid "Couldn't load byline fields." msgstr "Couldn't load byline fields." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Couldn't load custom fields." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Count" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Create" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Create an account" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Create byline" @@ -1925,12 +1925,12 @@ msgstr "Create Content Type" msgid "Create field" msgstr "Create field" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Create Menu" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Create New Menu" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Create personal access tokens for programmatic API access" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Create redirect for {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Create redirect for this path" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Create redirect rules to manage URL changes." @@ -1973,7 +1973,7 @@ msgstr "Create Schema & Import" msgid "Create Section" msgstr "Create Section" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Create sections in the Sections library to use them here" @@ -1995,7 +1995,7 @@ msgstr "Create Widget Area" msgid "Create your account" msgstr "Create your account" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Create your first navigation menu to get started" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Creating collections and fields..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "dark" msgid "Dark" msgstr "Dark" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Dashboard" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Date" @@ -2186,8 +2186,8 @@ msgstr "Define the structure of your content" msgid "Defined in code" msgstr "Defined in code" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Defined in code" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Delete" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Delete {0} field" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Delete {0} menu" @@ -2255,7 +2255,7 @@ msgstr "Delete backup?" msgid "Delete byline field?" msgstr "Delete byline field?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Delete Byline?" @@ -2263,7 +2263,7 @@ msgstr "Delete Byline?" msgid "Delete column" msgstr "Delete column" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Delete Comment?" @@ -2292,11 +2292,11 @@ msgstr "Delete image" msgid "Delete Media?" msgstr "Delete Media?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Delete Menu" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Delete permanently" @@ -2309,16 +2309,16 @@ msgstr "Delete Permanently" msgid "Delete Permanently?" msgstr "Delete Permanently?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Delete redirect" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Delete redirect {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Delete Redirect?" @@ -2348,18 +2348,18 @@ msgstr "Deleted" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Deleting..." @@ -2414,11 +2414,11 @@ msgstr "Description" msgid "Description (optional)" msgstr "Description (optional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destination" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Destination path" @@ -2462,7 +2462,7 @@ msgstr "Disable" msgid "Disable plugin" msgstr "Disable plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Disable redirect" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Disable User?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Display category list" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Display name" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Display name for admin interface" @@ -2706,7 +2706,7 @@ msgstr "Duplicate {title}" msgid "e.g. application/zip or .pdf" msgstr "e.g. application/zip or .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "e.g. import, blog" @@ -2722,7 +2722,7 @@ msgstr "e.g., MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Edit" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Edit {0}" @@ -2782,16 +2782,16 @@ msgstr "Edit Menu Item" msgid "Edit menu items" msgstr "Edit menu items" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Edit redirect" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Edit Redirect" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Edit redirect {0}" @@ -2899,12 +2899,12 @@ msgstr "Enable full-text search on this collection" msgid "Enable plugin" msgstr "Enable plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Enable redirect" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Enabled" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Failed to load backup settings" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Failed to load bylines: {0}" @@ -3387,7 +3387,7 @@ msgstr "Failed to load plugin" msgid "Failed to load plugins: {0}" msgstr "Failed to load plugins: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Failed to load plugins. The registry aggregator may be unreachable." @@ -3701,7 +3701,7 @@ msgstr "Filter by author" msgid "Filter by capability" msgstr "Filter by capability" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filter by collection" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filter by source" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filter by status" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filter by type" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filter byline type" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Grid view" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Group (optional)" @@ -3814,11 +3814,11 @@ msgstr "Group (optional)" msgid "Group by" msgstr "Group by" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Guest byline" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Guest only" @@ -3882,8 +3882,8 @@ msgstr "Hide token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarchical (like categories, with parent/child relationships)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Hits" @@ -3985,8 +3985,8 @@ msgstr "image URLs updated in" msgid "Images" msgstr "Images" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Import" @@ -4153,7 +4153,7 @@ msgstr "Insert Link" msgid "Insert raw HTML" msgstr "Insert raw HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Insert Section" @@ -4184,7 +4184,7 @@ msgstr "Installation" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Installed" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Last login" msgid "Last Login" msgstr "Last Login" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Last seen" @@ -4426,11 +4426,11 @@ msgstr "Link to another content item" msgid "Linked Accounts ({0})" msgstr "Linked Accounts ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Linked only" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Linked user" @@ -4454,9 +4454,9 @@ msgstr "Live View" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Load more" @@ -4480,7 +4480,7 @@ msgstr "Loading byline fields…" msgid "Loading collections..." msgstr "Loading collections..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Loading comments..." @@ -4501,7 +4501,7 @@ msgstr "Loading editor..." msgid "Loading menu..." msgstr "Loading menu..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Loading menus..." @@ -4509,11 +4509,11 @@ msgstr "Loading menus..." msgid "Loading plugins..." msgstr "Loading plugins..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Loading redirects..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Loading sections..." @@ -4545,7 +4545,7 @@ msgstr "Loading widgets..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Loading widgets..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Loading..." @@ -4618,7 +4618,7 @@ msgstr "Make network requests" msgid "Make network requests to any host (unrestricted)" msgstr "Make network requests to any host (unrestricted)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Manage" @@ -4640,11 +4640,11 @@ msgstr "Manage content widgets in your widget areas" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Manage installed plugins. Enable or disable plugins to control their functionality." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Manage navigation menus for your site" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Manage URL redirects and view 404 errors." @@ -4660,7 +4660,7 @@ msgstr "Managed by {providerName}" msgid "Managed by an external media provider" msgstr "Managed by an external media provider" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Map WordPress user {0} to EmDash user" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Mark {0} as Gone (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Mark as Gone (410) — tells search engines it was permanently deleted" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Mark as spam" @@ -4697,7 +4697,7 @@ msgstr "marketplace" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Media Import Complete" msgid "Media import was skipped" msgstr "Media import was skipped" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Media Library" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menu \"{0}\" ({1}) created." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menu \"{0}\" has been created." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu created" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu deleted" @@ -4811,9 +4811,9 @@ msgstr "Menu not found" msgid "Menu order has been updated." msgstr "Menu order has been updated." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menus" @@ -4961,7 +4961,7 @@ msgstr "My Awesome Blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Name and label are required" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Name must start with a letter and contain only lowercase letters, numbers, and underscores" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigation" @@ -4992,7 +4992,7 @@ msgstr "Never" msgid "new" msgstr "new" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "New" @@ -5030,8 +5030,8 @@ msgstr "New field" msgid "New public routes" msgstr "New public routes" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "New Redirect" @@ -5039,7 +5039,7 @@ msgstr "New Redirect" msgid "New Section" msgstr "New Section" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "new tab" @@ -5067,7 +5067,7 @@ msgstr "News" msgid "Next" msgstr "Next" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Next page" @@ -5100,7 +5100,7 @@ msgstr "No {0} yet." msgid "No {0} yet. Create one to get started." msgstr "No {0} yet. Create one to get started." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "No 404 errors recorded yet." @@ -5113,7 +5113,7 @@ msgstr "No alt text" msgid "No API tokens yet. Create one to get started." msgstr "No API tokens yet. Create one to get started." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "No approved comments yet." @@ -5125,7 +5125,7 @@ msgstr "No byline fields yet." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "No bylines found" @@ -5137,11 +5137,11 @@ msgstr "No bylines selected." msgid "No collections configured" msgstr "No collections configured" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "No comments awaiting moderation." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "No comments match your search." @@ -5214,7 +5214,7 @@ msgstr "No items yet" msgid "No limit" msgstr "No limit" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "No linked user" @@ -5257,7 +5257,7 @@ msgstr "No media found" msgid "No menu items yet" msgstr "No menu items yet" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "No menus yet" @@ -5290,11 +5290,11 @@ msgstr "No plugins configured" msgid "No plugins found" msgstr "No plugins found" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "No plugins have been published to this registry yet." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "No plugins match \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "No public URL available" msgid "No recent activity" msgstr "No recent activity" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "No redirects yet" @@ -5329,7 +5329,7 @@ msgstr "No results for \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "No results for \"{debouncedQuery}\". Try a different search term." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "No results found" @@ -5337,11 +5337,11 @@ msgstr "No results found" msgid "No revisions yet" msgstr "No revisions yet" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "No sections available" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "No sections found" @@ -5350,7 +5350,7 @@ msgstr "No sections found" msgid "No sections yet" msgstr "No sections yet" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "No spam comments." @@ -5423,7 +5423,7 @@ msgstr "Only authorize codes you recognize." msgid "Only email addresses from allowed domains can sign up." msgstr "Only email addresses from allowed domains can sign up." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Only lowercase letters, numbers, and hyphens" @@ -5550,8 +5550,8 @@ msgstr "Paragraph" msgid "Parent" msgstr "Parent" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Part of a redirect loop" @@ -5624,7 +5624,7 @@ msgstr "Passkeys require HTTPS or http://localhost (with your port); this hostna msgid "Paste your migration key" msgstr "Paste your migration key" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Path" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "pending" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Pending" @@ -5755,7 +5755,7 @@ msgstr "plugin on your WordPress site." msgid "Plugin Permissions" msgstr "Plugin Permissions" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Plugin Registry" @@ -5780,12 +5780,12 @@ msgstr "Plugin updated" msgid "Plugin widget error" msgstr "Plugin widget error" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugins" @@ -5849,7 +5849,7 @@ msgstr "Preview draft" msgid "Previous" msgstr "Previous" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Previous page" @@ -5858,7 +5858,7 @@ msgstr "Previous page" msgid "Previous screenshot" msgstr "Previous screenshot" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Primary Navigation" @@ -5997,7 +5997,7 @@ msgstr "Recipient email" msgid "Recovery link sent to {0}" msgstr "Recovery link sent to {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Redirect loop detected" @@ -6005,9 +6005,9 @@ msgstr "Redirect loop detected" msgid "Redirecting to login..." msgstr "Redirecting to login..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redirects" @@ -6048,7 +6048,7 @@ msgstr "Registration failed" msgid "Registration was cancelled or timed out. Please try again." msgstr "Registration was cancelled or timed out. Please try again." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registry" @@ -6350,11 +6350,11 @@ msgstr "Same window" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Save" @@ -6410,7 +6410,7 @@ msgstr "Saved \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "Saved \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Saving..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Search by name or email..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Search bylines" @@ -6558,11 +6558,11 @@ msgstr "Search bylines" msgid "Search bylines to add..." msgstr "Search bylines to add..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Search comments" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Search comments..." @@ -6587,26 +6587,26 @@ msgstr "Search form" msgid "Search media" msgstr "Search media" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Search pages and content..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Search plugins" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Search plugins..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Search sections..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Search source or destination..." @@ -6664,9 +6664,9 @@ msgstr "Section Not Found" msgid "Section title" msgstr "Section title" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Sections" @@ -6717,7 +6717,7 @@ msgstr "Security contacts" msgid "Security error. Make sure you're on a secure connection." msgstr "Security error. Make sure you're on a secure connection." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Select a component..." msgid "Select a menu..." msgstr "Select a menu..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Select all" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Select all on this page" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Select comment by {0}" @@ -6923,14 +6923,14 @@ msgstr "Set up your site" msgid "Setting up..." msgstr "Setting up..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Settings" @@ -7118,7 +7118,7 @@ msgstr "Skipped" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Sort themes" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Source" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Source path" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7218,12 +7218,12 @@ msgstr "Start writing, or type '/' for commands" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Status code" @@ -7306,7 +7306,7 @@ msgstr "Table controls" msgid "Tagline" msgstr "Tagline" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Tags" @@ -7398,7 +7398,7 @@ msgstr "The link will expire in 15 minutes." msgid "The marketplace is empty. Check back later for new plugins." msgstr "The marketplace is empty. Check back later for new plugins." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "The menu has been deleted." @@ -7455,7 +7455,7 @@ msgstr "Theme-provided sections cannot be deleted. Edit the section to create a msgid "Theme: {label}" msgstr "Theme: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Themes" @@ -7510,7 +7510,7 @@ msgstr "This plugin requires no special permissions." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "This redirect rule will be permanently removed." @@ -7518,7 +7518,7 @@ msgstr "This redirect rule will be permanently removed." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "This release requires a newer environment than your site currently runs. Upgrade before installing." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "This removes the byline profile. Content byline links are removed and lead pointers are cleared." @@ -7556,7 +7556,7 @@ msgstr "This will permanently delete \"{0}\" and remove it from all content." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "This will permanently delete \"{0}\". This action cannot be undone." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "This will permanently delete this comment. This action cannot be undone." @@ -7601,7 +7601,7 @@ msgstr "Title Separator" msgid "to" msgstr "to" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "to close" @@ -7613,7 +7613,7 @@ msgstr "To date" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "to install plugins, or add them to your astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "to select" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "trash" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Trash" @@ -7699,7 +7699,7 @@ msgstr "Trash" msgid "Trash is empty" msgstr "Trash is empty" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Trash is empty." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Try a different search term" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Try adjusting your search" @@ -7916,7 +7916,7 @@ msgstr "Update site settings" msgid "Update the {0} details" msgstr "Update the {0} details" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Update this redirect rule." @@ -8059,7 +8059,7 @@ msgstr "URL Pattern" msgid "URL-friendly identifier" msgstr "URL-friendly identifier" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-friendly identifier (e.g., \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Use [param] or [...rest] in paths for pattern matching." @@ -8124,8 +8124,8 @@ msgstr "User Details" msgid "User not found" msgstr "User not found" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Users" @@ -8148,7 +8148,7 @@ msgstr "v{0} available" msgid "Validation" msgstr "Validation" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Verified publisher" @@ -8221,7 +8221,7 @@ msgstr "View source" msgid "View the {license} license on spdx.org" msgstr "View the {license} license on spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Visitors hitting these paths will see an error." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn is not supported in this browser" msgid "Website" msgstr "Website" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Website URL" @@ -8374,9 +8374,9 @@ msgstr "Widget title" msgid "Widget updated" msgstr "Widget updated" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "You can create and edit your own content." msgid "You can manage content, media, menus, and taxonomies." msgstr "You can manage content, media, menus, and taxonomies." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." diff --git a/packages/admin/src/locales/es-419/messages.po b/packages/admin/src/locales/es-419/messages.po index 51075f8188..302750b351 100644 --- a/packages/admin/src/locales/es-419/messages.po +++ b/packages/admin/src/locales/es-419/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr " (se abre en una nueva ventana)" msgid " (selected)" msgstr " (seleccionado)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# comentario} other {# comentarios}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# elemento de contenido importado} other {# elementos d #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# elemento} other {# elementos}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# entrada} other {# entradas}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# redirección es parte de un bucle.} other {# redirecciones son parte de un bucle.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# seleccionado} other {# seleccionados}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# total} other {# total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Mostrar # sin cambios} other {Mostrar # si msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} subido, {failed} falló" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. Seleccione \"Todo el contenido\"" msgid "30 days" msgstr "30 dias" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanente" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporal" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporal (Estricto)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanente (Estricto)" @@ -497,15 +497,15 @@ msgstr "4. Haga clic en \"Descargar archivo de exportación\"." msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Ingrese \"EmDash\" y haga clic en \"Agregar nuevo\"." -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Errores 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Información de cuenta" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Navegación de administrador" @@ -803,7 +803,7 @@ msgstr "Todo" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "Todas las capacidades" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Todas las colecciones" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Todas las fuentes" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Todos los estados" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Todos los tipos" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Aprobar" @@ -989,7 +989,7 @@ msgstr "Aprobar" msgid "approved" msgstr "aprobado" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Aprobado" @@ -1026,7 +1026,7 @@ msgstr "¿Está seguro de que desea eliminar \"{0}\"? Esto también eliminará t msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "¿Está seguro de que desea eliminar este menú? Esto también eliminará todos los elementos del menú. Esta acción no se puede deshacer." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "La autenticación fue cancelada o se agotó el tiempo de espera. Por favor inténtalo de nuevo." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autorizando..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (cambio de slug)" @@ -1236,7 +1236,7 @@ msgstr "Antes de enviar:" msgid "Bing Verification" msgstr "Verificación de Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "Booleano" msgid "Brief summary shown below the title in search results" msgstr "Breve resumen que se muestra debajo del título en los resultados de búsqueda." -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Lista de viñetas" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Firmas" @@ -1352,11 +1352,11 @@ msgstr "Puede ver contenido" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Leyenda" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categorías" @@ -1554,17 +1554,17 @@ msgstr "Haga clic en el enlace del correo electrónico para iniciar sesión." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Código" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Palabras clave de búsqueda separadas por comas." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Comentario" @@ -1654,9 +1654,9 @@ msgstr "Comentario" msgid "Comment Detail" msgstr "Detalle del comentario" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Comentarios" @@ -1707,13 +1707,13 @@ msgstr "Conectado {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Contenido" @@ -1771,9 +1771,9 @@ msgstr "Instantánea del contenido:" msgid "Content to Import" msgstr "Contenido para importar" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tipos de contenido" @@ -1855,7 +1855,7 @@ msgstr "No se pudo detectar WordPress" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Contar" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Crear" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Crea una cuenta" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Crear firma" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Crear menú" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Crear nuevo menú" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Cree tokens de acceso personal para acceso API programático" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Crear redirección para {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Crear redirección para esta ruta" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Cree reglas de redirección para administrar los cambios de URL." @@ -1973,7 +1973,7 @@ msgstr "Crear esquema e importar" msgid "Create Section" msgstr "Crear sección" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Crea secciones en la biblioteca de Secciones para usarlas aquí" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "Crea tu cuenta" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Crea tu primer menú de navegación para comenzar" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Creando colecciones y campos..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "oscuro" msgid "Dark" msgstr "Oscuro" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Escritorio" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Fecha" @@ -2186,8 +2186,8 @@ msgstr "Define la estructura de tu contenido" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Borrar" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Eliminar menú {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "¿Eliminar comentario?" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "¿Eliminar medios?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Eliminar menú" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Eliminar permanentemente" @@ -2309,16 +2309,16 @@ msgstr "Eliminar permanentemente" msgid "Delete Permanently?" msgstr "¿Eliminar permanentemente?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Eliminar redirección" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Eliminar redirección {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "¿Eliminar redirección?" @@ -2348,18 +2348,18 @@ msgstr "Eliminado" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Eliminando..." @@ -2414,11 +2414,11 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destino" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Ruta de destino" @@ -2462,7 +2462,7 @@ msgstr "Desactivar" msgid "Disable plugin" msgstr "Deshabilitar plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Deshabilitar redirección" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nombre para mostrar" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nombre para mostrar para la interfaz de administración" @@ -2706,7 +2706,7 @@ msgstr "Duplicar {title}" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "por ejemplo, MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Editar" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Editar {0}" @@ -2782,16 +2782,16 @@ msgstr "Editar elemento del menú" msgid "Edit menu items" msgstr "Editar elementos del menú" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Editar redirección" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Editar redirección" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Editar redirección {0}" @@ -2896,12 +2896,12 @@ msgstr "Habilitar la búsqueda de texto completo en esta colección" msgid "Enable plugin" msgstr "Habilitar plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Habilitar redirección" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Activado" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "No se pudo cargar el plugin" msgid "Failed to load plugins: {0}" msgstr "No se pudieron cargar los plugins: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "Filtrar por capacidad" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtrar por colección" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "Vista de cuadrícula" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grupo (opcional)" @@ -3811,11 +3811,11 @@ msgstr "Grupo (opcional)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "Ocultar token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Jerárquico (como categorías, con relaciones padre/hijo)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Visitas" @@ -3982,8 +3982,8 @@ msgstr "URL de imágenes actualizadas en" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importar" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Insertar sección" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Instalado" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "Último inicio de sesión" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "visto por última vez" @@ -4423,11 +4423,11 @@ msgstr "Enlace a otro elemento de contenido" msgid "Linked Accounts ({0})" msgstr "Cuentas vinculadas ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "Vista en vivo" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Cargar más" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "Cargando colecciones..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Cargando comentarios..." @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "Cargando menú..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Cargando menús..." @@ -4506,11 +4506,11 @@ msgstr "Cargando menús..." msgid "Loading plugins..." msgstr "Cargando plugins..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Cargando redirecciones..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Cargando secciones..." @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Cargando..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Administrar" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Administrar plugins instalados. Habilite o deshabilite plugins para controlar su funcionalidad." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Administrar menús de navegación para su sitio" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Administre redirecciones de URL y vea errores 404." @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Marcar como spam" @@ -4694,7 +4694,7 @@ msgstr "mercado" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Mercado" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "Importación de medios completada" msgid "Media import was skipped" msgstr "Se omitió la importación de medios" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Biblioteca multimedia" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Se ha creado el menú \"{0}\"." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menú creado" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menú eliminado" @@ -4808,9 +4808,9 @@ msgstr "Menú no encontrado" msgid "Menu order has been updated." msgstr "Se ha actualizado el orden del menú." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menús" @@ -4958,7 +4958,7 @@ msgstr "Mi blog impresionante" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "El nombre y la etiqueta son obligatorios." msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "El nombre debe comenzar con una letra y contener solo letras minúsculas, números y guiones bajos." -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navegación" @@ -4989,7 +4989,7 @@ msgstr "Nunca" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Nueva redirección" @@ -5036,7 +5036,7 @@ msgstr "Nueva redirección" msgid "New Section" msgstr "Nueva sección" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "nueva pestaña" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "Próximo" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Página siguiente" @@ -5097,7 +5097,7 @@ msgstr "Aún no hay {0}." msgid "No {0} yet. Create one to get started." msgstr "Aún no hay {0}. Crea uno para comenzar." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Aún no se han registrado errores 404." @@ -5110,7 +5110,7 @@ msgstr "Sin texto alternativo" msgid "No API tokens yet. Create one to get started." msgstr "Aún no hay tokens API. Crea uno para comenzar." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Aún no hay comentarios aprobados." @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "No se han seleccionado firmas." msgid "No collections configured" msgstr "No hay colecciones configuradas" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "No hay comentarios en espera de moderación." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Ningún comentario coincide con tu búsqueda." @@ -5211,7 +5211,7 @@ msgstr "Aún no hay artículos" msgid "No limit" msgstr "Sin límite" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "No se encontraron medios" msgid "No menu items yet" msgstr "Aún no hay elementos de menú" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Aún no hay menús" @@ -5287,11 +5287,11 @@ msgstr "No hay plugins configurados" msgid "No plugins found" msgstr "No se encontraron plugins" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "Ninguna actividad reciente" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Aún no hay redirecciones" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "No hay resultados para \"{debouncedQuery}\". Pruebe con un término de búsqueda diferente." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "No se encontraron resultados" @@ -5334,11 +5334,11 @@ msgstr "No se encontraron resultados" msgid "No revisions yet" msgstr "Aún no hay revisiones" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "No hay secciones disponibles" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "No se encontraron secciones" @@ -5347,7 +5347,7 @@ msgstr "No se encontraron secciones" msgid "No sections yet" msgstr "Aún no hay secciones" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Sin comentarios spam." @@ -5420,7 +5420,7 @@ msgstr "Sólo autoriza códigos que reconozcas." msgid "Only email addresses from allowed domains can sign up." msgstr "Sólo se pueden registrar direcciones de correo electrónico de dominios permitidos." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Sólo letras minúsculas, números y guiones" @@ -5544,8 +5544,8 @@ msgstr "Párrafo" msgid "Parent" msgstr "Padre" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Parte de un bucle de redirección" @@ -5618,7 +5618,7 @@ msgstr "Las claves de acceso requieren HTTPS o http://localhost (con su puerto); msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Camino" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "pendiente" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Pendiente" @@ -5749,7 +5749,7 @@ msgstr "plugin en su sitio de WordPress." msgid "Plugin Permissions" msgstr "Permisos de plugins" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "Plugin actualizado" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugins" @@ -5843,7 +5843,7 @@ msgstr "Vista previa del borrador" msgid "Previous" msgstr "Anterior" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Pagina anterior" @@ -5852,7 +5852,7 @@ msgstr "Pagina anterior" msgid "Previous screenshot" msgstr "Captura de pantalla anterior" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Navegación primaria" @@ -5991,7 +5991,7 @@ msgstr "Correo electrónico del destinatario" msgid "Recovery link sent to {0}" msgstr "Enlace de recuperación enviado a {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Bucle de redirección detectado" @@ -5999,9 +5999,9 @@ msgstr "Bucle de redirección detectado" msgid "Redirecting to login..." msgstr "Redirigiendo para iniciar sesión..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redirecciones" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "El registro fue cancelado o agotado. Por favor inténtalo de nuevo." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "Misma ventana" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Guardar" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Salvando..." @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Buscar comentarios" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Buscar comentarios..." @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "Buscar medios" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Buscar páginas y contenido..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Buscar plugins..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Buscar secciones..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Buscar origen o destino..." @@ -6658,9 +6658,9 @@ msgstr "Sección no encontrada" msgid "Section title" msgstr "Título de la sección" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Secciones" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "Error de seguridad. Asegúrate de estar en una conexión segura." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Seleccionar todo" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Seleccionar comentario de {0}" @@ -6917,14 +6917,14 @@ msgstr "Configura tu sitio" msgid "Setting up..." msgstr "Configurando..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Ajustes" @@ -7112,7 +7112,7 @@ msgstr "Saltado" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7168,12 +7168,12 @@ msgstr "Ordenar temas" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Fuente" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Ruta de origen" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "correo basura" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Correo basura" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Estado" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Código de estado" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "Lema" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Etiquetas" @@ -7392,7 +7392,7 @@ msgstr "El enlace caducará en 15 minutos." msgid "The marketplace is empty. Check back later for new plugins." msgstr "El mercado está vacío. Vuelve más tarde para ver nuevos plugins." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "El menú ha sido eliminado." @@ -7449,7 +7449,7 @@ msgstr "Las secciones proporcionadas por el tema no se pueden eliminar. Edite la msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Temas" @@ -7504,7 +7504,7 @@ msgstr "Este plugin no requiere permisos especiales." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Esta regla de redirección se eliminará permanentemente." @@ -7512,7 +7512,7 @@ msgstr "Esta regla de redirección se eliminará permanentemente." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "Esto eliminará permanentemente \"{0}\" y ​​lo eliminará de todo el msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Esto eliminará permanentemente \"{0}\". Esta acción no se puede deshacer." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Esto eliminará permanentemente este comentario. Esta acción no se puede deshacer." @@ -7595,7 +7595,7 @@ msgstr "Separador de título" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "cerrar" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "para instalar plugins o agregarlos a su astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "para seleccionar" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "basura" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Basura" @@ -7693,7 +7693,7 @@ msgstr "Basura" msgid "Trash is empty" msgstr "la papelera esta vacia" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "La papelera está vacía." @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "Pruebe con un término de búsqueda diferente" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Intenta ajustar tu búsqueda" @@ -7910,7 +7910,7 @@ msgstr "" msgid "Update the {0} details" msgstr "Actualizar los detalles de {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Actualice esta regla de redirección." @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "Identificador compatible con URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Identificador compatible con URL (por ejemplo, \"principal\", \"pie de página\")" @@ -8061,7 +8061,7 @@ msgstr "Identificador compatible con URL (por ejemplo, \"principal\", \"pie de p msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Utilice [param] o [...rest] en rutas para hacer coincidir patrones." @@ -8118,8 +8118,8 @@ msgstr "Detalles del usuario" msgid "User not found" msgstr "Usuario no encontrado" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Usuarios" @@ -8142,7 +8142,7 @@ msgstr "v{0} disponible" msgid "Validation" msgstr "Validación" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Los visitantes que lleguen a estos caminos verán un error." @@ -8267,7 +8267,7 @@ msgstr "WebAuthn no es compatible con este navegador" msgid "Website" msgstr "Sitio web" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "Puedes crear y editar tu propio contenido." msgid "You can manage content, media, menus, and taxonomies." msgstr "Puede administrar contenido, medios, menús y taxonomías." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/es-ES/messages.po b/packages/admin/src/locales/es-ES/messages.po index 51420a5fca..9e051ef128 100644 --- a/packages/admin/src/locales/es-ES/messages.po +++ b/packages/admin/src/locales/es-ES/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Invitado" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Vinculado" @@ -35,7 +35,7 @@ msgstr " (se abre en una nueva ventana)" msgid " (selected)" msgstr " (seleccionado)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# comentario actualizado} other {# comentarios actualizados}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# comentario} other {# comentarios}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# elemento de contenido importado} other {# elementos d #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# elemento} other {# elementos}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# entrada} other {# entradas}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# redirección es parte de un bucle.} other {# redirecciones son parte de un bucle.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# seleccionado} other {# seleccionados}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} requerido — tienes {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# elemento} other {# elementos}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# total} other {# total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Mostrar # sin cambios} other {Mostrar # si msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} subido, {failed} falló" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/pagina-nueva o /articulos/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/pagina-vieja o /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Selecciona \"Todo el contenido\"" msgid "30 days" msgstr "30 dias" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanente" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporal" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporal (Estricto)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanente (Estricto)" @@ -497,15 +497,15 @@ msgstr "4. Haz clic en \"Descargar archivo de exportación\"." msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Introduce \"EmDash\" y haz clic en \"Agregar nuevo\"." -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Errores 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Información de cuenta" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Navegación de administrador" @@ -803,7 +803,7 @@ msgstr "Todo" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Todas las firmas" @@ -811,7 +811,7 @@ msgstr "Todas las firmas" msgid "All capabilities" msgstr "Todas las capacidades" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Todas las colecciones" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Todas las fuentes" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Todos los estados" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Todos los tipos" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Aplicar enlace" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Aprobar" @@ -989,7 +989,7 @@ msgstr "Aprobar" msgid "approved" msgstr "aprobado" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Aprobado" @@ -1026,7 +1026,7 @@ msgstr "¿Está seguro de que desea eliminar \"{0}\"? Esto también eliminará t msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "¿Seguro que quieres eliminar el campo «{0}»?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "¿Está seguro de que desea eliminar este menú? Esto también eliminará todos los elementos del menú. Esta acción no se puede deshacer." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "La autenticación fue cancelada o se agotó el tiempo de espera. Por favor inténtalo de nuevo." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autorizando..." msgid "Authors" msgstr "Autores" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (cambio de slug)" @@ -1236,7 +1236,7 @@ msgstr "Antes de enviar:" msgid "Bing Verification" msgstr "Verificación de Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biografía" @@ -1259,7 +1259,7 @@ msgstr "Booleano" msgid "Brief summary shown below the title in search results" msgstr "Breve resumen que se muestra debajo del título en los resultados de búsqueda." -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Explora e instala plugins publicados en el registro descentralizado." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Lista de viñetas" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Firmas" @@ -1352,11 +1352,11 @@ msgstr "Puede ver contenido" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Leyenda" msgid "Captions / Subtitles" msgstr "Subtítulos" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categorías" @@ -1554,17 +1554,17 @@ msgstr "Haz clic en el enlace del correo electrónico para iniciar sesión." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Código" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Palabras clave de búsqueda separadas por comas." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Comentario" @@ -1654,9 +1654,9 @@ msgstr "Comentario" msgid "Comment Detail" msgstr "Detalle del comentario" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Comentarios" @@ -1707,13 +1707,13 @@ msgstr "Conectado {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Contenido" @@ -1771,9 +1771,9 @@ msgstr "Instantánea del contenido:" msgid "Content to Import" msgstr "Contenido para importar" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tipos de contenido" @@ -1855,7 +1855,7 @@ msgstr "No se pudo detectar WordPress" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Contar" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Crear" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Crea una cuenta" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Crear firma" @@ -1925,12 +1925,12 @@ msgstr "Crear tipo de contenido" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Crear menú" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Crear nuevo menú" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Cree tokens de acceso personal para acceso API programático" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Crear redirección para {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Crear redirección para esta ruta" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Cree reglas de redirección para gestionar los cambios de URL." @@ -1973,7 +1973,7 @@ msgstr "Crear esquema e importar" msgid "Create Section" msgstr "Crear sección" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Crea secciones en la biblioteca de Secciones para usarlas aquí" @@ -1995,7 +1995,7 @@ msgstr "Crear área de widgets" msgid "Create your account" msgstr "Crea tu cuenta" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Crea tu primer menú de navegación para comenzar" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Creando colecciones y campos..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "oscuro" msgid "Dark" msgstr "Oscuro" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Escritorio" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Fecha" @@ -2186,8 +2186,8 @@ msgstr "Define la estructura de tu contenido" msgid "Defined in code" msgstr "Definido en código" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Definido en código" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Borrar" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Eliminar campo {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Eliminar menú {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "¿Eliminar firma?" @@ -2263,7 +2263,7 @@ msgstr "¿Eliminar firma?" msgid "Delete column" msgstr "Eliminar columna" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "¿Eliminar comentario?" @@ -2292,11 +2292,11 @@ msgstr "Eliminar imagen" msgid "Delete Media?" msgstr "¿Eliminar medios?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Eliminar menú" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Eliminar permanentemente" @@ -2309,16 +2309,16 @@ msgstr "Eliminar permanentemente" msgid "Delete Permanently?" msgstr "¿Eliminar permanentemente?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Eliminar redirección" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Eliminar redirección {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "¿Eliminar redirección?" @@ -2348,18 +2348,18 @@ msgstr "Eliminado" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Eliminando..." @@ -2414,11 +2414,11 @@ msgstr "Descripción" msgid "Description (optional)" msgstr "Descripción (opcional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destino" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Ruta de destino" @@ -2462,7 +2462,7 @@ msgstr "Desactivar" msgid "Disable plugin" msgstr "Deshabilitar plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Deshabilitar redirección" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "¿Desactivar usuario?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nombre para mostrar" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nombre para mostrar para la interfaz de administración" @@ -2706,7 +2706,7 @@ msgstr "Duplicar {title}" msgid "e.g. application/zip or .pdf" msgstr "p. ej. application/zip o .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "p. ej. import, blog" @@ -2722,7 +2722,7 @@ msgstr "por ejemplo, MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Editar" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Editar {0}" @@ -2782,16 +2782,16 @@ msgstr "Editar elemento del menú" msgid "Edit menu items" msgstr "Editar elementos del menú" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Editar redirección" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Editar redirección" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Editar redirección {0}" @@ -2896,12 +2896,12 @@ msgstr "Habilitar la búsqueda de texto completo en esta colección" msgid "Enable plugin" msgstr "Habilitar plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Habilitar redirección" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Activado" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Error al cargar las firmas: {0}" @@ -3384,7 +3384,7 @@ msgstr "No se pudo cargar el plugin" msgid "Failed to load plugins: {0}" msgstr "No se pudieron cargar los plugins: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "No se pudieron cargar los plugins. Puede que el agregador del registro no esté disponible." @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "Filtrar por capacidad" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtrar por colección" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "Filtrar por origen" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filtrar por estado" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filtrar por tipo" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filtrar por tipo de firma" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "Vista de cuadrícula" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grupo (opcional)" @@ -3811,11 +3811,11 @@ msgstr "Grupo (opcional)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Firma invitada" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Solo invitado" @@ -3879,8 +3879,8 @@ msgstr "Ocultar token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Jerárquico (como categorías, con relaciones padre/hijo)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Visitas" @@ -3982,8 +3982,8 @@ msgstr "URL de imágenes actualizadas en" msgid "Images" msgstr "Imágenes" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importar" @@ -4150,7 +4150,7 @@ msgstr "Insertar enlace" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Insertar sección" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Instalado" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "Último inicio de sesión" msgid "Last Login" msgstr "Último inicio de sesión" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "visto por última vez" @@ -4423,11 +4423,11 @@ msgstr "Enlace a otro elemento de contenido" msgid "Linked Accounts ({0})" msgstr "Cuentas vinculadas ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Solo vinculado" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Usuario vinculado" @@ -4451,9 +4451,9 @@ msgstr "Vista en vivo" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Cargar más" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "Cargando colecciones..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Cargando comentarios..." @@ -4498,7 +4498,7 @@ msgstr "Cargando el editor..." msgid "Loading menu..." msgstr "Cargando menú..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Cargando menús..." @@ -4506,11 +4506,11 @@ msgstr "Cargando menús..." msgid "Loading plugins..." msgstr "Cargando plugins..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Cargando redirecciones..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Cargando secciones..." @@ -4542,7 +4542,7 @@ msgstr "Cargando widgets..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "Cargando widgets..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Cargando..." @@ -4615,7 +4615,7 @@ msgstr "Realizar peticiones de red" msgid "Make network requests to any host (unrestricted)" msgstr "Realizar peticiones de red a cualquier host (sin restricciones)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Gestionar" @@ -4637,11 +4637,11 @@ msgstr "Gestiona los widgets de contenido en tus áreas de widgets" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Gestionar plugins instalados. Habilite o deshabilite plugins para controlar su funcionalidad." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Gestionar menús de navegación para tu sitio" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Gestiona redirecciones de URL y vea errores 404." @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Asignar el usuario de WordPress {0} a un usuario de EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Marcar como spam" @@ -4694,7 +4694,7 @@ msgstr "mercado" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Mercado" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "Importación de medios completada" msgid "Media import was skipped" msgstr "Se omitió la importación de medios" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Biblioteca multimedia" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menú «{0}» ({1}) creado." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Se ha creado el menú \"{0}\"." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menú creado" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menú eliminado" @@ -4808,9 +4808,9 @@ msgstr "Menú no encontrado" msgid "Menu order has been updated." msgstr "Se ha actualizado el orden del menú." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menús" @@ -4958,7 +4958,7 @@ msgstr "Mi blog impresionante" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "El nombre y la etiqueta son obligatorios." msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "El nombre debe comenzar con una letra y contener solo letras minúsculas, números y guiones bajos." -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navegación" @@ -4989,7 +4989,7 @@ msgstr "Nunca" msgid "new" msgstr "nuevo" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Nuevo" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "Nuevas rutas públicas" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Nueva redirección" @@ -5036,7 +5036,7 @@ msgstr "Nueva redirección" msgid "New Section" msgstr "Nueva sección" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "nueva pestaña" @@ -5064,7 +5064,7 @@ msgstr "Noticias" msgid "Next" msgstr "Siguiente" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Página siguiente" @@ -5097,7 +5097,7 @@ msgstr "Aún no hay {0}." msgid "No {0} yet. Create one to get started." msgstr "Aún no hay {0}. Crea uno para comenzar." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Aún no se han registrado errores 404." @@ -5110,7 +5110,7 @@ msgstr "Sin texto alternativo" msgid "No API tokens yet. Create one to get started." msgstr "Aún no hay tokens API. Crea uno para comenzar." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Aún no hay comentarios aprobados." @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "No hay firmas disponibles en {entryLocale}. Crea una variante desde la página de Firmas antes de acreditar una en esta entrada." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "No se han encontrado firmas" @@ -5134,11 +5134,11 @@ msgstr "No se han seleccionado firmas." msgid "No collections configured" msgstr "No hay colecciones configuradas" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "No hay comentarios en espera de moderación." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Ningún comentario coincide con tu búsqueda." @@ -5211,7 +5211,7 @@ msgstr "Aún no hay artículos" msgid "No limit" msgstr "Sin límite" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Sin usuario vinculado" @@ -5254,7 +5254,7 @@ msgstr "No se encontraron medios" msgid "No menu items yet" msgstr "Aún no hay elementos de menú" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Aún no hay menús" @@ -5287,11 +5287,11 @@ msgstr "No hay plugins configurados" msgid "No plugins found" msgstr "No se encontraron plugins" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Todavía no se ha publicado ningún plugin en este registro." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Ningún plugin coincide con \"{debouncedQuery}\"." @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "Ninguna actividad reciente" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Aún no hay redirecciones" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "No hay resultados para \"{debouncedQuery}\". Prueba con un término de búsqueda diferente." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "No se encontraron resultados" @@ -5334,11 +5334,11 @@ msgstr "No se encontraron resultados" msgid "No revisions yet" msgstr "Aún no hay revisiones" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "No hay secciones disponibles" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "No se encontraron secciones" @@ -5347,7 +5347,7 @@ msgstr "No se encontraron secciones" msgid "No sections yet" msgstr "Aún no hay secciones" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Sin comentarios spam." @@ -5420,7 +5420,7 @@ msgstr "Sólo autoriza códigos que reconozcas." msgid "Only email addresses from allowed domains can sign up." msgstr "Sólo se pueden registrar direcciones de correo electrónico de dominios permitidos." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Sólo letras minúsculas, números y guiones" @@ -5547,8 +5547,8 @@ msgstr "Párrafo" msgid "Parent" msgstr "Padre" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Parte de un bucle de redirección" @@ -5621,7 +5621,7 @@ msgstr "Las passkeys requieren HTTPS o http://localhost (con tu puerto); este no msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Camino" @@ -5648,7 +5648,7 @@ msgstr "PDF" msgid "pending" msgstr "pendiente" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Pendiente" @@ -5752,7 +5752,7 @@ msgstr "plugin en tu sitio de WordPress." msgid "Plugin Permissions" msgstr "Permisos de plugins" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Registro de plugins" @@ -5777,12 +5777,12 @@ msgstr "Plugin actualizado" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugins" @@ -5846,7 +5846,7 @@ msgstr "Vista previa del borrador" msgid "Previous" msgstr "Anterior" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Pagina anterior" @@ -5855,7 +5855,7 @@ msgstr "Pagina anterior" msgid "Previous screenshot" msgstr "Captura de pantalla anterior" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Navegación primaria" @@ -5994,7 +5994,7 @@ msgstr "Correo electrónico del destinatario" msgid "Recovery link sent to {0}" msgstr "Enlace de recuperación enviado a {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Bucle de redirección detectado" @@ -6002,9 +6002,9 @@ msgstr "Bucle de redirección detectado" msgid "Redirecting to login..." msgstr "Redirigiendo para iniciar sesión..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redirecciones" @@ -6045,7 +6045,7 @@ msgstr "Error en el registro" msgid "Registration was cancelled or timed out. Please try again." msgstr "El registro fue cancelado o agotado. Por favor inténtalo de nuevo." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registro" @@ -6347,11 +6347,11 @@ msgstr "Misma ventana" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Guardar" @@ -6407,7 +6407,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6419,7 +6419,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Salvando..." @@ -6547,7 +6547,7 @@ msgid "Search by name or email..." msgstr "Buscar por nombre o correo..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Buscar firmas" @@ -6555,11 +6555,11 @@ msgstr "Buscar firmas" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Buscar comentarios" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Buscar comentarios..." @@ -6584,26 +6584,26 @@ msgstr "" msgid "Search media" msgstr "Buscar medios" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Buscar páginas y contenido..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Buscar plugins" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Buscar plugins..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Buscar secciones..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Buscar origen o destino..." @@ -6661,9 +6661,9 @@ msgstr "Sección no encontrada" msgid "Section title" msgstr "Título de la sección" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Secciones" @@ -6714,7 +6714,7 @@ msgstr "Contactos de seguridad" msgid "Security error. Make sure you're on a secure connection." msgstr "Error de seguridad. Asegúrate de estar en una conexión segura." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6745,7 +6745,7 @@ msgstr "Selecciona un componente..." msgid "Select a menu..." msgstr "Selecciona un menú..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Seleccionar todo" @@ -6754,7 +6754,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Seleccionar comentario de {0}" @@ -6920,14 +6920,14 @@ msgstr "Configura tu sitio" msgid "Setting up..." msgstr "Configurando..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Ajustes" @@ -7115,7 +7115,7 @@ msgstr "Saltado" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7171,12 +7171,12 @@ msgstr "Ordenar temas" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Fuente" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Ruta de origen" @@ -7185,8 +7185,8 @@ msgid "spam" msgstr "correo basura" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Correo basura" @@ -7215,12 +7215,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Estado" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Código de estado" @@ -7303,7 +7303,7 @@ msgstr "" msgid "Tagline" msgstr "Lema" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Etiquetas" @@ -7395,7 +7395,7 @@ msgstr "El enlace caducará en 15 minutos." msgid "The marketplace is empty. Check back later for new plugins." msgstr "El mercado está vacío. Vuelve más tarde para ver nuevos plugins." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "El menú ha sido eliminado." @@ -7452,7 +7452,7 @@ msgstr "Las secciones proporcionadas por el tema no se pueden eliminar. Edite la msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Temas" @@ -7507,7 +7507,7 @@ msgstr "Este plugin no requiere permisos especiales." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Este editor reclama un nombre cuya propiedad no ha podido demostrar, posiblemente suplantando a otra persona. La instalación está deshabilitada. Si conoces al editor y confías en él, pídele que corrija la configuración de su identidad antes de volver a intentarlo." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Esta regla de redirección se eliminará permanentemente." @@ -7515,7 +7515,7 @@ msgstr "Esta regla de redirección se eliminará permanentemente." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Esta versión requiere un entorno más reciente que el que ejecuta tu sitio actualmente. Actualiza antes de instalar." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Esto elimina el perfil de la firma. Se quitarán los enlaces de firma del contenido y se borrarán los punteros principales." @@ -7553,7 +7553,7 @@ msgstr "Esto eliminará permanentemente \"{0}\" y ​​lo eliminará de todo el msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Esto eliminará permanentemente \"{0}\". Esta acción no se puede deshacer." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Esto eliminará permanentemente este comentario. Esta acción no se puede deshacer." @@ -7598,7 +7598,7 @@ msgstr "Separador de título" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "cerrar" @@ -7610,7 +7610,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "para instalar plugins o agregarlos a su astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "para seleccionar" @@ -7685,9 +7685,9 @@ msgid "trash" msgstr "basura" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Basura" @@ -7696,7 +7696,7 @@ msgstr "Basura" msgid "Trash is empty" msgstr "la papelera esta vacia" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "La papelera está vacía." @@ -7713,7 +7713,7 @@ msgid "Try a different search term" msgstr "Prueba con un término de búsqueda diferente" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Intenta ajustar tu búsqueda" @@ -7913,7 +7913,7 @@ msgstr "Actualizar los ajustes del sitio" msgid "Update the {0} details" msgstr "Actualizar los detalles de {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Actualice esta regla de redirección." @@ -8056,7 +8056,7 @@ msgstr "Patrón de URL" msgid "URL-friendly identifier" msgstr "Identificador compatible con URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Identificador compatible con URL (por ejemplo, \"principal\", \"pie de página\")" @@ -8064,7 +8064,7 @@ msgstr "Identificador compatible con URL (por ejemplo, \"principal\", \"pie de p msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Utiliza [param] o [...rest] en rutas para hacer coincidir patrones." @@ -8121,8 +8121,8 @@ msgstr "Detalles del usuario" msgid "User not found" msgstr "Usuario no encontrado" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Usuarios" @@ -8145,7 +8145,7 @@ msgstr "v{0} disponible" msgid "Validation" msgstr "Validación" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Editor verificado" @@ -8218,7 +8218,7 @@ msgstr "Ver código fuente" msgid "View the {license} license on spdx.org" msgstr "Ver la licencia {license} en spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Los visitantes que lleguen a estos caminos verán un error." @@ -8270,7 +8270,7 @@ msgstr "WebAuthn no es compatible con este navegador" msgid "Website" msgstr "Sitio web" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL del sitio web" @@ -8371,9 +8371,9 @@ msgstr "Título del widget" msgid "Widget updated" msgstr "Widget actualizado" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8454,7 +8454,7 @@ msgstr "Puedes crear y editar tu propio contenido." msgid "You can manage content, media, menus, and taxonomies." msgstr "Puede gestionar contenido, medios, menús y taxonomías." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/eu/messages.po b/packages/admin/src/locales/eu/messages.po index 3bef36b16a..4cb10e161d 100644 --- a/packages/admin/src/locales/eu/messages.po +++ b/packages/admin/src/locales/eu/messages.po @@ -13,11 +13,11 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr "" msgid " (selected)" msgstr "" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "" @@ -111,7 +111,7 @@ msgstr "" #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "" @@ -414,11 +414,11 @@ msgstr "" msgid "{uploaded} uploaded, {failed} failed" msgstr "" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "" msgid "30 days" msgstr "30 egun" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "" @@ -497,15 +497,15 @@ msgstr "" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "" @@ -803,7 +803,7 @@ msgstr "" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "" @@ -989,7 +989,7 @@ msgstr "" msgid "approved" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "" @@ -1026,7 +1026,7 @@ msgstr "" msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "" @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "" msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "" @@ -1236,7 +1236,7 @@ msgstr "" msgid "Bing Verification" msgstr "" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "" msgid "Brief summary shown below the title in search results" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Buleta zerrenda" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "" @@ -1352,11 +1352,11 @@ msgstr "Edukia ikusi dezake" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategoriak" @@ -1554,17 +1554,17 @@ msgstr "Egin klik emailean webgunean sartzeko." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "" @@ -1654,9 +1654,9 @@ msgstr "" msgid "Comment Detail" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "" @@ -1707,13 +1707,13 @@ msgstr "" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Edukia" @@ -1771,9 +1771,9 @@ msgstr "" msgid "Content to Import" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Eduki motak" @@ -1855,7 +1855,7 @@ msgstr "" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Sortu API bidezko sarbiderako sarbide token pertsonala" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "" @@ -1973,7 +1973,7 @@ msgstr "" msgid "Create Section" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "" msgid "Dark" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Lan-lekua" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "" @@ -2186,8 +2186,8 @@ msgstr "" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "" @@ -2309,16 +2309,16 @@ msgstr "" msgid "Delete Permanently?" msgstr "" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "" @@ -2348,18 +2348,18 @@ msgstr "" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "" @@ -2414,11 +2414,11 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "" @@ -2462,7 +2462,7 @@ msgstr "" msgid "Disable plugin" msgstr "" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "" @@ -2706,7 +2706,7 @@ msgstr "" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "" @@ -2782,16 +2782,16 @@ msgstr "" msgid "Edit menu items" msgstr "" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "" @@ -2896,12 +2896,12 @@ msgstr "Aktibatu testu bilaketa bilduma honetan" msgid "Enable plugin" msgstr "" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "" msgid "Failed to load plugins: {0}" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "" @@ -3811,11 +3811,11 @@ msgstr "" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "Ezkutatu tokena" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "" @@ -3982,8 +3982,8 @@ msgstr "" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Inportatu" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "" @@ -4423,11 +4423,11 @@ msgstr "" msgid "Linked Accounts ({0})" msgstr "" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "" @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "" -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "" @@ -4506,11 +4506,11 @@ msgstr "" msgid "Loading plugins..." msgstr "" -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "" @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Kargatzen..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "" -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "" @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "" @@ -4694,7 +4694,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "" msgid "Media import was skipped" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Media liburutegia" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "" @@ -4808,9 +4808,9 @@ msgstr "" msgid "Menu order has been updated." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menuak" @@ -4958,7 +4958,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Nabigazioa" @@ -4989,7 +4989,7 @@ msgstr "" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "" @@ -5036,7 +5036,7 @@ msgstr "" msgid "New Section" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "Fitxa berria" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "" @@ -5097,7 +5097,7 @@ msgstr "" msgid "No {0} yet. Create one to get started." msgstr "" -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "" @@ -5110,7 +5110,7 @@ msgstr "" msgid "No API tokens yet. Create one to get started." msgstr "Ez dago API tokenik oraindik. Sortu bat hasteko." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "" @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "" msgid "No collections configured" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "" @@ -5211,7 +5211,7 @@ msgstr "" msgid "No limit" msgstr "" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "" msgid "No menu items yet" msgstr "" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "" @@ -5287,11 +5287,11 @@ msgstr "" msgid "No plugins found" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Ez da emaitzarik aurkitu" @@ -5334,11 +5334,11 @@ msgstr "Ez da emaitzarik aurkitu" msgid "No revisions yet" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "" @@ -5347,7 +5347,7 @@ msgstr "" msgid "No sections yet" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "" @@ -5420,7 +5420,7 @@ msgstr "" msgid "Only email addresses from allowed domains can sign up." msgstr "" -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "" @@ -5544,8 +5544,8 @@ msgstr "Parrafoa" msgid "Parent" msgstr "" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "" @@ -5618,7 +5618,7 @@ msgstr "" msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "" @@ -5749,7 +5749,7 @@ msgstr "" msgid "Plugin Permissions" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Pluginak" @@ -5843,7 +5843,7 @@ msgstr "" msgid "Previous" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "" @@ -5852,7 +5852,7 @@ msgstr "" msgid "Previous screenshot" msgstr "" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "" @@ -5991,7 +5991,7 @@ msgstr "" msgid "Recovery link sent to {0}" msgstr "" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "" @@ -5999,9 +5999,9 @@ msgstr "" msgid "Redirecting to login..." msgstr "" -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "" -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "" @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "" @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Bilatu orriak eta edukia..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "" -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "" @@ -6658,9 +6658,9 @@ msgstr "" msgid "Section title" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Atalak" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "" @@ -6917,14 +6917,14 @@ msgstr "" msgid "Setting up..." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Ezarpenak" @@ -7112,7 +7112,7 @@ msgstr "" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Sluga" @@ -7168,12 +7168,12 @@ msgstr "" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Egoera" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Etiketak" @@ -7392,7 +7392,7 @@ msgstr "Esteka hau 15 minutuan iraungiko da." msgid "The marketplace is empty. Check back later for new plugins." msgstr "" -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "" @@ -7449,7 +7449,7 @@ msgstr "" msgid "Theme: {label}" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "" @@ -7504,7 +7504,7 @@ msgstr "" msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "" @@ -7512,7 +7512,7 @@ msgstr "" msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "" msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "" @@ -7595,7 +7595,7 @@ msgstr "" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "ixteko" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "aukeratzeko" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "" @@ -7693,7 +7693,7 @@ msgstr "" msgid "Trash is empty" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "" @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "" @@ -7910,7 +7910,7 @@ msgstr "" msgid "Update the {0} details" msgstr "" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "" @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "URLko identifikadorea" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "" @@ -8061,7 +8061,7 @@ msgstr "" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "" @@ -8118,8 +8118,8 @@ msgstr "" msgid "User not found" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Erabiltzaileak" @@ -8142,7 +8142,7 @@ msgstr "" msgid "Validation" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "" @@ -8267,7 +8267,7 @@ msgstr "" msgid "Website" msgstr "" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "Zure edukia sortu eta editatu dezakezu." msgid "You can manage content, media, menus, and taxonomies." msgstr "Edukia, media, menduak eta taxonomiak kudeatu ditzakezu." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/fa/messages.po b/packages/admin/src/locales/fa/messages.po index ce6ffd671d..0269e11679 100644 --- a/packages/admin/src/locales/fa/messages.po +++ b/packages/admin/src/locales/fa/messages.po @@ -15,11 +15,11 @@ msgstr "" "Language: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -37,7 +37,7 @@ msgstr " (در پنجره جدید باز می‌شود)" msgid " (selected)" msgstr " (انتخاب‌شده)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -96,7 +96,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# دیدگاه} other {# دیدگاه}}" @@ -113,7 +113,7 @@ msgstr "{0, plural, one {# مورد محتوا درون‌ریزی شد} other { #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# مورد} other {# مورد}}" @@ -149,12 +149,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# نوشته} other {# نوشته}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# تغییر مسیر بخشی از یک حلقه است.} other {# تغییر مسیر بخشی از یک حلقه هستند.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# انتخاب‌شده} other {# انتخاب‌شده}}" @@ -196,8 +196,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -381,7 +381,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# کل} other {# کل}}" @@ -416,11 +416,11 @@ msgstr "{unchangedCount, plural, one {نمایش # بدون تغییر} other { msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} بارگذاری شد، {failed} ناموفق" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -475,19 +475,19 @@ msgstr "۳. «همه محتوا» را انتخاب کنید" msgid "30 days" msgstr "۳۰ روز" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "۳۰۱ تغییر مسیر دائمی" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "۳۰۲ تغییر مسیر موقت" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "۳۰۷ موقت (سخت‌گیرانه)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "۳۰۸ دائمی (سخت‌گیرانه)" @@ -499,15 +499,15 @@ msgstr "۴. روی «دریافت فایل برون‌ریزی» کلیک کنی msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "۴. «EmDash» را وارد کنید و «افزودن جدید» را بزنید" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "خطاهای ۴۰۴" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -584,7 +584,7 @@ msgstr "اطلاعات حساب کاربری" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -762,12 +762,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "مدیر" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "ناوبری مدیریت" @@ -805,7 +805,7 @@ msgstr "همه" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -813,7 +813,7 @@ msgstr "" msgid "All capabilities" msgstr "همه قابلیت‌ها" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "همه مجموعه‌ها" @@ -839,12 +839,12 @@ msgid "All Sources" msgstr "همه منابع" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "همه وضعیت‌ها" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "همه انواع" @@ -982,8 +982,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "تأیید" @@ -991,7 +991,7 @@ msgstr "تأیید" msgid "approved" msgstr "تأییدشده" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "تأییدشده" @@ -1028,7 +1028,7 @@ msgstr "آیا مطمئن هستید که می‌خواهید «{0}» را حذ msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "آیا مطمئن هستید که می‌خواهید این فهرست را حذف کنید؟ تمام آیتم‌های فهرست نیز حذف خواهند شد. این عمل قابل بازگشت نیست." @@ -1073,7 +1073,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "احراز هویت لغو شد یا زمان آن به پایان رسید. لطفاً دوباره تلاش کنید." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1108,11 +1108,11 @@ msgstr "در حال صدور مجوز..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "خودکار" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "خودکار (تغییر نامک)" @@ -1238,7 +1238,7 @@ msgstr "قبل از ارسال:" msgid "Bing Verification" msgstr "تأیید بینگ" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1261,7 +1261,7 @@ msgstr "منطقی" msgid "Brief summary shown below the title in search results" msgstr "خلاصه کوتاهی که زیر عنوان در نتایج جستجو نمایش داده می‌شود" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1289,17 +1289,17 @@ msgid "Bullet List" msgstr "لیست نشانه‌دار" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "نام نگارندگان" @@ -1354,11 +1354,11 @@ msgstr "می‌تواند محتوا را مشاهده کند" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1413,7 +1413,7 @@ msgstr "زیرنویس" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "دسته‌ها" @@ -1556,17 +1556,17 @@ msgstr "روی لینک ایمیل کلیک کنید تا وارد شوید." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1605,7 +1605,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "کد" @@ -1648,7 +1648,7 @@ msgid "Comma-separated keywords for search." msgstr "کلمات کلیدی جداشده با کاما برای جستجو." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "دیدگاه" @@ -1656,9 +1656,9 @@ msgstr "دیدگاه" msgid "Comment Detail" msgstr "جزئیات دیدگاه" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "دیدگاه‌ها" @@ -1709,13 +1709,13 @@ msgstr "متصل شده در {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "محتوا" @@ -1773,9 +1773,9 @@ msgstr "عکس فوری محتوا:" msgid "Content to Import" msgstr "محتوا برای درون‌ریزی" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "انواع محتوا" @@ -1857,7 +1857,7 @@ msgstr "وردپرس شناسایی نشد" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1879,12 +1879,12 @@ msgid "Count" msgstr "تعداد" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "ساخت جدید" @@ -1915,7 +1915,7 @@ msgid "Create an account" msgstr "ساخت حساب کاربری" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "ساخت نگارنده" @@ -1927,12 +1927,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "ساخت فهرست" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "ساخت فهرستی جدید" @@ -1954,15 +1954,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "توکن‌های دسترسی شخصی برای دسترسی برنامه‌نویسی به API بسازید" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "ساخت تغییر مسیر برای {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "ساخت تغییر مسیر برای این مسیر" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "قوانین تغییر مسیر برای مدیریت تغییرات آدرس بسازید." @@ -1975,7 +1975,7 @@ msgstr "ساخت طرح و درون‌ریزی" msgid "Create Section" msgstr "ساخت بخش" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "بخش‌ها را در کتابخانه بخش‌ها بسازید تا اینجا استفاده شوند" @@ -1997,7 +1997,7 @@ msgstr "" msgid "Create your account" msgstr "حساب کاربری خود را بسازید" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "اولین فهرست ناوبری خود را بسازید تا شروع شود" @@ -2064,8 +2064,8 @@ msgid "Creating collections and fields..." msgstr "در حال ساخت مجموعه‌ها و فیلدها..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2117,15 +2117,15 @@ msgstr "تیره" msgid "Dark" msgstr "تیره" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "داشبورد" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "تاریخ" @@ -2188,8 +2188,8 @@ msgstr "ساختار محتوای خود را تعریف کنید" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2198,16 +2198,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "حذف" @@ -2235,7 +2235,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "حذف فهرستی {0}" @@ -2257,7 +2257,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2265,7 +2265,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "حذف دیدگاه؟" @@ -2294,11 +2294,11 @@ msgstr "" msgid "Delete Media?" msgstr "حذف رسانه؟" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "حذف فهرست" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "حذف دائمی" @@ -2311,16 +2311,16 @@ msgstr "حذف دائمی" msgid "Delete Permanently?" msgstr "حذف دائمی؟" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "حذف تغییر مسیر" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "حذف تغییر مسیر {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "حذف تغییر مسیر؟" @@ -2350,18 +2350,18 @@ msgstr "حذف‌شده" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "در حال حذف..." @@ -2416,11 +2416,11 @@ msgstr "توضیحات" msgid "Description (optional)" msgstr "توضیحات (اختیاری)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "مقصد" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "مسیر مقصد" @@ -2464,7 +2464,7 @@ msgstr "غیرفعال‌سازی" msgid "Disable plugin" msgstr "غیرفعال‌سازی افزونه" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "غیرفعال‌سازی تغییر مسیر" @@ -2477,7 +2477,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2536,11 +2536,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "نام نمایشی" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "نام نمایشی برای رابط مدیریت" @@ -2708,7 +2708,7 @@ msgstr "تکثیر {title}" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2724,7 +2724,7 @@ msgstr "مثلاً MacBook Pro، iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2739,7 +2739,7 @@ msgstr "ویرایش" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "ویرایش {0}" @@ -2784,16 +2784,16 @@ msgstr "ویرایش آیتم فهرست" msgid "Edit menu items" msgstr "ویرایش آیتم‌های فهرست" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "ویرایش تغییر مسیر" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "ویرایش تغییر مسیر" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "ویرایش تغییر مسیر {0}" @@ -2898,12 +2898,12 @@ msgstr "فعال‌سازی جستجوی تمام‌متن روی این مجم msgid "Enable plugin" msgstr "فعال‌سازی افزونه" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "فعال‌سازی تغییر مسیر" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "فعال" @@ -3361,7 +3361,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3386,7 +3386,7 @@ msgstr "بارگذاری افزونه ناموفق بود" msgid "Failed to load plugins: {0}" msgstr "بارگذاری افزونه‌ها ناموفق بود: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3700,7 +3700,7 @@ msgstr "" msgid "Filter by capability" msgstr "فیلتر بر اساس قابلیت" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "فیلتر بر اساس مجموعه" @@ -3713,16 +3713,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3805,7 +3805,7 @@ msgstr "" msgid "Grid view" msgstr "نمای شبکه‌ای" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "گروه (اختیاری)" @@ -3813,11 +3813,11 @@ msgstr "گروه (اختیاری)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3881,8 +3881,8 @@ msgstr "مخفی‌کردن توکن" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "سلسله‌مراتبی (مانند دسته‌ها، با روابط والد/فرزند)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "بازدید" @@ -3984,8 +3984,8 @@ msgstr "آدرس‌های تصویر به‌روزرسانی شده در" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "درون‌ریزی" @@ -4152,7 +4152,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "درج بخش" @@ -4183,7 +4183,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "نصب‌شده" @@ -4315,7 +4315,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4353,7 +4353,7 @@ msgstr "آخرین ورود" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "آخرین مشاهده" @@ -4425,11 +4425,11 @@ msgstr "لینک به محتوای دیگر" msgid "Linked Accounts ({0})" msgstr "حساب‌های کاربری متصل ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4453,9 +4453,9 @@ msgstr "نمای زنده" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "بارگذاری بیشتر" @@ -4479,7 +4479,7 @@ msgstr "" msgid "Loading collections..." msgstr "در حال بارگذاری مجموعه‌ها..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "در حال بارگذاری دیدگاه‌ها..." @@ -4500,7 +4500,7 @@ msgstr "" msgid "Loading menu..." msgstr "در حال بارگذاری فهرست..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "در حال بارگذاری فهرستها..." @@ -4508,11 +4508,11 @@ msgstr "در حال بارگذاری فهرستها..." msgid "Loading plugins..." msgstr "در حال بارگذاری افزونه‌ها..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "در حال بارگذاری تغییر مسیر‌ها..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "در حال بارگذاری بخش‌ها..." @@ -4544,7 +4544,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4553,7 +4553,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "در حال بارگذاری..." @@ -4617,7 +4617,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "مدیریت" @@ -4639,11 +4639,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "افزونه‌های نصب‌شده را مدیریت کنید. افزونه‌ها را فعال یا غیرفعال کنید تا عملکرد آن‌ها را کنترل کنید." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "مدیریت فهرستهای ناوبری وبسایت شما" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "مدیریت تغییر مسیر‌های آدرس و مشاهده خطاهای ۴۰۴." @@ -4659,7 +4659,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "دستی" @@ -4673,15 +4673,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "علامت‌گذاری به‌عنوان هرزنامه" @@ -4696,7 +4696,7 @@ msgstr "فروشگاه" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "فروشگاه" @@ -4721,7 +4721,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4749,7 +4749,7 @@ msgstr "درون‌ریزی رسانه کامل شد" msgid "Media import was skipped" msgstr "درون‌ریزی رسانه رد شد" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "کتابخانه رسانه" @@ -4778,15 +4778,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "فهرست «{0}» ساخته شد." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "فهرست ساخته شد" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "فهرست حذف شد" @@ -4810,9 +4810,9 @@ msgstr "فهرست یافت نشد" msgid "Menu order has been updated." msgstr "ترتیب فهرست به‌روزرسانی شد." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "فهرستها" @@ -4960,7 +4960,7 @@ msgstr "وبلاگ عالی من" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4978,7 +4978,7 @@ msgstr "نام و برچسب الزامی هستند" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "نام باید با حرف شروع شود و فقط شامل حروف کوچک، اعداد و زیرخط باشد" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "ناوبری" @@ -4991,7 +4991,7 @@ msgstr "هرگز" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5029,8 +5029,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "تغییر مسیر جدید" @@ -5038,7 +5038,7 @@ msgstr "تغییر مسیر جدید" msgid "New Section" msgstr "بخش جدید" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "زبانه جدید" @@ -5066,7 +5066,7 @@ msgstr "" msgid "Next" msgstr "بعدی" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "صفحه بعدی" @@ -5099,7 +5099,7 @@ msgstr "هنوز {0} موجود نیست." msgid "No {0} yet. Create one to get started." msgstr "هنوز {0} موجود نیست. برای شروع یکی بسازید." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "هنوز خطای ۴۰۴ ثبت نشده است." @@ -5112,7 +5112,7 @@ msgstr "بدون متن جایگزین" msgid "No API tokens yet. Create one to get started." msgstr "هنوز توکن API موجود نیست. برای شروع یکی بسازید." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "هنوز دیدگاه تأییدشده‌ای وجود ندارد." @@ -5124,7 +5124,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5136,11 +5136,11 @@ msgstr "هیچ نگارنده‌ای انتخاب نشده." msgid "No collections configured" msgstr "مجموعه‌ای پیکربندی نشده" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "هیچ دیدگاهی در انتظار تعدیل نیست." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "هیچ دیدگاهی با جستجوی شما مطابقت ندارد." @@ -5213,7 +5213,7 @@ msgstr "هنوز موردی نیست" msgid "No limit" msgstr "بدون حد" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5256,7 +5256,7 @@ msgstr "رسانه‌ای یافت نشد" msgid "No menu items yet" msgstr "هنوز آیتم فهرستیی نیست" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "هنوز فهرستیی نیست" @@ -5289,11 +5289,11 @@ msgstr "افزونه‌ای پیکربندی نشده" msgid "No plugins found" msgstr "افزونه‌ای یافت نشد" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5309,7 +5309,7 @@ msgstr "" msgid "No recent activity" msgstr "فعالیت اخیری نیست" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "هنوز تغییر مسیری نیست" @@ -5328,7 +5328,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "نتیجه‌ای برای «{debouncedQuery}» یافت نشد. عبارت جستجوی دیگری را امتحان کنید." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "نتیجه‌ای یافت نشد" @@ -5336,11 +5336,11 @@ msgstr "نتیجه‌ای یافت نشد" msgid "No revisions yet" msgstr "هنوز بازبینی‌ای نیست" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "بخشی موجود نیست" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "بخشی یافت نشد" @@ -5349,7 +5349,7 @@ msgstr "بخشی یافت نشد" msgid "No sections yet" msgstr "هنوز بخشی نیست" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "دیدگاه هرزنامه‌ای نیست." @@ -5422,7 +5422,7 @@ msgstr "فقط کدهایی را تأیید کنید که می‌شناسید." msgid "Only email addresses from allowed domains can sign up." msgstr "فقط آدرس‌های ایمیل از دامنه‌های مجاز می‌توانند ثبت‌نام کنند." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "فقط حروف کوچک، اعداد و خط تیره" @@ -5546,8 +5546,8 @@ msgstr "پاراگراف" msgid "Parent" msgstr "مادر" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "بخشی از حلقه تغییر مسیر" @@ -5620,7 +5620,7 @@ msgstr "شاه‌کلیدها نیاز به HTTPS یا http://localhost (با پ msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "مسیر" @@ -5647,7 +5647,7 @@ msgstr "" msgid "pending" msgstr "در انتظار" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "در انتظار" @@ -5751,7 +5751,7 @@ msgstr "افزونه در وبسایت وردپرس شما." msgid "Plugin Permissions" msgstr "مجوزهای افزونه" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5776,12 +5776,12 @@ msgstr "افزونه به‌روزرسانی شد" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "پلاگین‌ها" @@ -5845,7 +5845,7 @@ msgstr "پیش‌نمایش پیش‌نویس" msgid "Previous" msgstr "قبلی" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "صفحه قبلی" @@ -5854,7 +5854,7 @@ msgstr "صفحه قبلی" msgid "Previous screenshot" msgstr "تصویر قبلی" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "ناوبری اصلی" @@ -5993,7 +5993,7 @@ msgstr "ایمیل گیرنده" msgid "Recovery link sent to {0}" msgstr "لینک بازیابی به {0} ارسال شد" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "حلقه تغییر مسیر شناسایی شد" @@ -6001,9 +6001,9 @@ msgstr "حلقه تغییر مسیر شناسایی شد" msgid "Redirecting to login..." msgstr "در حال هدایت به صفحه ورود..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "تغییر مسیر‌ها" @@ -6044,7 +6044,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "ثبت‌نام لغو شد یا زمان آن به پایان رسید. لطفاً دوباره تلاش کنید." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6346,11 +6346,11 @@ msgstr "همین پنجره" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "ذخیره" @@ -6406,7 +6406,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6418,7 +6418,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "درحال ذخیره‌سازی …" @@ -6546,7 +6546,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6554,11 +6554,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "جستجوی دیدگاه‌ها" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "جستجوی دیدگاه‌ها..." @@ -6583,26 +6583,26 @@ msgstr "" msgid "Search media" msgstr "جستجوی رسانه" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "جستجوی صفحات و محتوا..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "جستجوی افزونه‌ها..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "جستجوی بخش‌ها..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "جستجوی مبدأ یا مقصد..." @@ -6660,9 +6660,9 @@ msgstr "بخش یافت نشد" msgid "Section title" msgstr "عنوان بخش" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "بخش‌ها" @@ -6713,7 +6713,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "خطای امنیتی. مطمئن شوید که روی یک اتصال امن هستید." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6744,7 +6744,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "انتخاب همه" @@ -6753,7 +6753,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "انتخاب دیدگاه توسط {0}" @@ -6919,14 +6919,14 @@ msgstr "وبسایت خود را راه‌اندازی کنید" msgid "Setting up..." msgstr "در حال راه‌اندازی..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "تنظیمات" @@ -7114,7 +7114,7 @@ msgstr "رد شده" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "اسلاگ" @@ -7170,12 +7170,12 @@ msgstr "مرتب‌سازی قالب‌ها" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "منبع" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "مسیر مبدأ" @@ -7184,8 +7184,8 @@ msgid "spam" msgstr "جفنگ" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "اسپم" @@ -7214,12 +7214,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "وضعیت" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "کد وضعیت" @@ -7302,7 +7302,7 @@ msgstr "" msgid "Tagline" msgstr "شعار" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "برچسب‌ها" @@ -7394,7 +7394,7 @@ msgstr "لینک در ۱۵ دقیقه منقضی خواهد شد." msgid "The marketplace is empty. Check back later for new plugins." msgstr "فروشگاه خالی است. بعداً برای افزونه‌های جدید مراجعه کنید." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "فهرست حذف شد." @@ -7451,7 +7451,7 @@ msgstr "بخش‌های ارائه‌شده توسط قالب قابل حذف ن msgid "Theme: {label}" msgstr "قالب: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "پوسته‌ها" @@ -7506,7 +7506,7 @@ msgstr "این افزونه نیاز به مجوز خاصی ندارد." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "این قانون تغییر مسیر برای همیشه حذف خواهد شد." @@ -7514,7 +7514,7 @@ msgstr "این قانون تغییر مسیر برای همیشه حذف خو msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7552,7 +7552,7 @@ msgstr "این «{0}» را برای همیشه حذف کرده و از همه msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "این «{0}» را برای همیشه حذف می‌کند. این عمل قابل بازگشت نیست." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "این دیدگاه برای همیشه حذف خواهد شد. این عمل قابل بازگشت نیست." @@ -7597,7 +7597,7 @@ msgstr "جداکننده عنوان" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "برای بستن" @@ -7609,7 +7609,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "برای نصب افزونه‌ها، یا آن‌ها را به astro.config.mjs خود بیفزایید." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "برای انتخاب" @@ -7684,9 +7684,9 @@ msgid "trash" msgstr "زباله‌دان" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "زباله‌دان" @@ -7695,7 +7695,7 @@ msgstr "زباله‌دان" msgid "Trash is empty" msgstr "سطل زباله خالی است" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "سطل زباله خالی است." @@ -7712,7 +7712,7 @@ msgid "Try a different search term" msgstr "عبارت جستجوی دیگری را امتحان کنید" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "جستجوی خود را تنظیم کنید" @@ -7912,7 +7912,7 @@ msgstr "" msgid "Update the {0} details" msgstr "به‌روزرسانی جزئیات {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "این قانون تغییر مسیر را به‌روزرسانی کنید." @@ -8055,7 +8055,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "شناسه سازگار با آدرس" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "شناسه سازگار با آدرس (مثلاً «primary»، «footer»)" @@ -8063,7 +8063,7 @@ msgstr "شناسه سازگار با آدرس (مثلاً «primary»، «footer msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "از [param] یا [...rest] در مسیرها برای تطبیق الگو استفاده کنید." @@ -8120,8 +8120,8 @@ msgstr "جزئیات کاربر" msgid "User not found" msgstr "کاربر یافت نشد" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "کاربران" @@ -8144,7 +8144,7 @@ msgstr "v{0} در دسترس" msgid "Validation" msgstr "اعتبارسنجی" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8217,7 +8217,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "بازدیدکنندگانی که به این مسیرها می‌رسند خطا خواهند دید." @@ -8269,7 +8269,7 @@ msgstr "WebAuthn در این مرورگر پشتیبانی نمی‌شود" msgid "Website" msgstr "وبسایت" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8370,9 +8370,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8453,7 +8453,7 @@ msgstr "می‌توانید محتوای خود را بسازید و ویرای msgid "You can manage content, media, menus, and taxonomies." msgstr "می‌توانید محتوا، رسانه، فهرستها و دسته‌بندی‌ها را مدیریت کنید." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/fr/messages.po b/packages/admin/src/locales/fr/messages.po index f469949065..9c0df04e62 100644 --- a/packages/admin/src/locales/fr/messages.po +++ b/packages/admin/src/locales/fr/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "- Invité" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "- Lié" @@ -35,7 +35,7 @@ msgstr " (s'ouvre dans une nouvelle fenêtre)" msgid " (selected)" msgstr " (sélectionné)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Sélectionner --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# commentaire mis a jour} other {# commentaires mis a jour}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# commentaire} other {# commentaires}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# élément de contenu importé} other {# éléments de #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# élément} other {# éléments}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# article} other {# articles}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {Une redirection fait partie d'une boucle.} other {# redirections font partie d'une boucle.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# commentaire sélectionné} other {# commentaires sélectionnés}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} requis — vous avez {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {Déplacer # élément vers la corbeille ? msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# élément} other {# éléments}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# au total} other {# au total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Afficher # champ inchangé} other {Affiche msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} téléversés, {failed} en échec" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/nouvelle-page ou /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/ancienne page ou /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Sélectionnez « Tout le contenu »" msgid "30 days" msgstr "30 jours" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporaire" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporaire (Strict)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (Strict)" @@ -497,15 +497,15 @@ msgstr "4. Cliquez sur « Télécharger le fichier d'exportation »" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Saisissez « EmDash » et cliquez sur « Ajouter »." -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Erreurs 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Contenu supprimé (Disparu)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Indisponible pour raisons légales" @@ -582,7 +582,7 @@ msgstr "Informations sur le compte" msgid "ACF Fields" msgstr "Champs ACF" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Navigation administrateur" @@ -803,7 +803,7 @@ msgstr "Tous" msgid "All authors" msgstr "Tous les auteurs" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Tous les auteurs" @@ -811,7 +811,7 @@ msgstr "Tous les auteurs" msgid "All capabilities" msgstr "Toutes les capacités" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Toutes les collections" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Toutes les sources" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Tous les statuts" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Tous les types" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Appliquer le lien" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Approuver" @@ -989,7 +989,7 @@ msgstr "Approuver" msgid "approved" msgstr "approuvé" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Approuvé" @@ -1026,7 +1026,7 @@ msgstr "Êtes-vous sûr de vouloir supprimer « {0} » ? Cela supprimera éga msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Êtes-vous sûr de vouloir supprimer le champ « {0} » ?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Êtes-vous sûr de vouloir supprimer ce menu ? Cela supprimera également tous les éléments de menu. Cette action ne peut pas être annulée." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "L'authentification a été annulée ou a expiré. Veuillez réessayer." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "En cours d'autorisation..." msgid "Authors" msgstr "Auteurs" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (changement de slug)" @@ -1236,7 +1236,7 @@ msgstr "Avant l'envoi :" msgid "Bing Verification" msgstr "Vérification Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biographie" @@ -1259,7 +1259,7 @@ msgstr "Booléen" msgid "Brief summary shown below the title in search results" msgstr "Bref résumé affiché sous le titre dans les résultats de recherche" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Parcourez et installez les modules d'extension publiés dans le registre décentralisé." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Liste à puces" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Schéma des auteurs" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Schéma des auteurs" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Auteurs" @@ -1352,11 +1352,11 @@ msgstr "Peut consulter le contenu" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Légende" msgid "Captions / Subtitles" msgstr "Légendes / Sous-titres" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Catégories" @@ -1554,17 +1554,17 @@ msgstr "Cliquez sur le lien dans l'e-mail pour vous connecter." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Fermer les paramètres" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Code" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Mots-clés séparés par des virgules pour la recherche." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Commentaire" @@ -1654,9 +1654,9 @@ msgstr "Commentaire" msgid "Comment Detail" msgstr "Détail du commentaire" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Commentaires" @@ -1707,13 +1707,13 @@ msgstr "Connecté {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Contenu" @@ -1771,9 +1771,9 @@ msgstr "Instantané du contenu :" msgid "Content to Import" msgstr "Contenu à importer" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Types de contenu" @@ -1855,7 +1855,7 @@ msgstr "Impossible de détecter WordPress" msgid "Couldn't load byline fields." msgstr "Impossible de charger les champs d'auteur." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Impossible de charger les champs personnalisés." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Nombre" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Créer" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Créer un compte" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Créer un auteur" @@ -1925,12 +1925,12 @@ msgstr "Créer un type de contenu" msgid "Create field" msgstr "Créer un champ" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Créer un menu" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Créer un nouveau menu" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Créer des jetons d'accès personnels pour un accès programmatique à l'API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Créer une redirection pour {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Créer une redirection pour ce chemin" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Créer des règles de redirection pour gérer les modifications d'URL." @@ -1973,7 +1973,7 @@ msgstr "Créer un schéma et l'importer" msgid "Create Section" msgstr "Créer une section" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Créer des sections dans la bibliothèque Sections pour les utiliser ici" @@ -1995,7 +1995,7 @@ msgstr "Créer une zone de widget" msgid "Create your account" msgstr "Créez votre compte" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Créer votre premier menu de navigation pour commencer" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "En cours de création de collections et de champs..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "sombre" msgid "Dark" msgstr "Sombre" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Tableau de bord" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Date" @@ -2186,8 +2186,8 @@ msgstr "Définir la structure de votre contenu" msgid "Defined in code" msgstr "Défini dans le code" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Défini dans le code" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Supprimer" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Supprimer le champ {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Supprimer le menu {0}" @@ -2255,7 +2255,7 @@ msgstr "Supprimer la sauvegarde ?" msgid "Delete byline field?" msgstr "Supprimer le champ d'auteur ?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Supprimer l'auteur ?" @@ -2263,7 +2263,7 @@ msgstr "Supprimer l'auteur ?" msgid "Delete column" msgstr "Supprimer la colonne" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Supprimer le commentaire ?" @@ -2292,11 +2292,11 @@ msgstr "Supprimer l'image" msgid "Delete Media?" msgstr "Supprimer le fichier multimédia ?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Supprimer le menu" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Supprimer définitivement" @@ -2309,16 +2309,16 @@ msgstr "Supprimer définitivement" msgid "Delete Permanently?" msgstr "Supprimer définitivement ?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Supprimer la redirection" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Supprimer la redirection {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Supprimer la redirection ?" @@ -2348,18 +2348,18 @@ msgstr "Supprimé" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "La suppression de « {0} » supprimera également {1, plural, one {# valeur enregistrée} other {# valeurs enregistrées}} dans tous les auteurs. Cette action est irréversible." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "En cours de suppression..." @@ -2414,11 +2414,11 @@ msgstr "Description" msgid "Description (optional)" msgstr "Description (facultatif)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destination" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Chemin d'arrivée" @@ -2462,7 +2462,7 @@ msgstr "Désactiver" msgid "Disable plugin" msgstr "Désactiver le module d'extension" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Désactiver la redirection" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Désactiver l'utilisateur ?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Afficher la liste des catégories" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nom affiché" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nom affiché dans l'interface d'administration" @@ -2706,7 +2706,7 @@ msgstr "Dupliquer {title}" msgid "e.g. application/zip or .pdf" msgstr "p. ex. : application/zip ou .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "p. ex. : importer, bloguer" @@ -2722,7 +2722,7 @@ msgstr "p. ex. : MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Modifier" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Modifier {0}" @@ -2782,16 +2782,16 @@ msgstr "Modifier l'élément de menu" msgid "Edit menu items" msgstr "Modifier les éléments du menu" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Modifier la redirection" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Modifier la redirection" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Modifier la redirection {0}" @@ -2899,12 +2899,12 @@ msgstr "Permettre la recherche dans le contenu de cette collection" msgid "Enable plugin" msgstr "Activer le module d'extension" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Activer la redirection" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Activé" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Échec lors du chargement des paramètres de sauvegarde" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Échec lors du chargement des auteurs : {0}" @@ -3387,7 +3387,7 @@ msgstr "Échec lors du chargement du module d'extension" msgid "Failed to load plugins: {0}" msgstr "Échec lors du chargement des modules d'extension : {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Échec lors du chargement des modules d'extension. L'agrégateur de registres est peut-être injoignable." @@ -3701,7 +3701,7 @@ msgstr "Filtrer par auteur" msgid "Filter by capability" msgstr "Filtrer par capacité" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtrer par collection" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filtrer par source" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filtrer par statut" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filtrer par type" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filtrer le type d'auteur" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Vue en grille" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Groupe (facultatif)" @@ -3814,11 +3814,11 @@ msgstr "Groupe (facultatif)" msgid "Group by" msgstr "Regrouper par" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Auteur invité" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Invité seulement" @@ -3882,8 +3882,8 @@ msgstr "Masquer le jeton" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hiérarchique (comme les catégories, avec des relations parent/enfant)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Clics" @@ -3985,8 +3985,8 @@ msgstr "URL des images mises à jour dans" msgid "Images" msgstr "Images" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importer" @@ -4153,7 +4153,7 @@ msgstr "Insérer un lien" msgid "Insert raw HTML" msgstr "Insérer du HTML brut" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Insérer une section" @@ -4184,7 +4184,7 @@ msgstr "Installation" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Installé" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Dernière connexion" msgid "Last Login" msgstr "Dernière connexion" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Vu pour la dernière fois" @@ -4426,11 +4426,11 @@ msgstr "Lien vers un autre élément de contenu" msgid "Linked Accounts ({0})" msgstr "Comptes associés ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Lié uniquement" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Utilisateur lié" @@ -4454,9 +4454,9 @@ msgstr "Affichage en direct" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Charger davantage" @@ -4480,7 +4480,7 @@ msgstr "En cours de chargement des champs d'auteur…" msgid "Loading collections..." msgstr "En cours de chargement des collections..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "En cours de chargement des commentaires..." @@ -4501,7 +4501,7 @@ msgstr "Chargement de l'éditeur en cours..." msgid "Loading menu..." msgstr "En cours de chargement du menu..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "En cours de chargement des menus..." @@ -4509,11 +4509,11 @@ msgstr "En cours de chargement des menus..." msgid "Loading plugins..." msgstr "En cours de chargement des modules d'extension..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "En cours de chargement des redirections..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "En cours de chargement des rubriques..." @@ -4545,7 +4545,7 @@ msgstr "Chargement des widgets en cours..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Chargement des widgets en cours..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "En cours de chargement..." @@ -4618,7 +4618,7 @@ msgstr "Effectuer des requêtes réseau" msgid "Make network requests to any host (unrestricted)" msgstr "Effectuer des requêtes réseau vers n'importe quel hôte (sans restriction)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Gérer" @@ -4640,11 +4640,11 @@ msgstr "Gérer les widgets de contenu dans vos zones de widgets" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Gérer les modules d'extension installés. Activer ou désactiver les modules d'extension pour contrôler leurs fonctionnalités." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Gérer les menus de navigation de votre site" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Gérer les redirections d'URL et afficher les erreurs 404." @@ -4660,7 +4660,7 @@ msgstr "Géré par {providerName}" msgid "Managed by an external media provider" msgstr "Géré par un fournisseur de médias externe" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manuel" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Associer l'utilisateur WordPress {0} à l'utilisateur EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Marquer {0} comme disparu (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Marquer comme disparu (410) — indique aux moteurs de recherche que le contenu a été définitivement supprimé" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Marquer comme indésirable" @@ -4697,7 +4697,7 @@ msgstr "place de marché" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Place de marché" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Importation des fichiers multimédias terminée" msgid "Media import was skipped" msgstr "L'importation des fichiers multimédias a été ignorée" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Bibliothèque de fichiers multimédias" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menu « {0} » ({1}) créé." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Le menu « {0} » a été créé." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu créé" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu supprimé" @@ -4811,9 +4811,9 @@ msgstr "Menu introuvable" msgid "Menu order has been updated." msgstr "L'ordre des menus a été mis à jour." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menus" @@ -4961,7 +4961,7 @@ msgstr "Mon super blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Le nom et le libellé sont requis" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Le nom doit commencer par une lettre et contenir uniquement des lettres minuscules, des chiffres et des traits de soulignement." -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigation" @@ -4992,7 +4992,7 @@ msgstr "Jamais" msgid "new" msgstr "nouveau" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Nouveau" @@ -5030,8 +5030,8 @@ msgstr "Nouveau champ" msgid "New public routes" msgstr "Nouvelles routes publiques" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Nouvelle redirection" @@ -5039,7 +5039,7 @@ msgstr "Nouvelle redirection" msgid "New Section" msgstr "Nouvelle section" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "nouvel onglet" @@ -5067,7 +5067,7 @@ msgstr "Nouvelles" msgid "Next" msgstr "Suivant" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Page suivante" @@ -5100,7 +5100,7 @@ msgstr "Pas encore de {0}." msgid "No {0} yet. Create one to get started." msgstr "Pas encore de {0}. Créez-en un pour commencer." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Aucune erreur 404 enregistrée pour le moment." @@ -5113,7 +5113,7 @@ msgstr "Aucun texte alternatif" msgid "No API tokens yet. Create one to get started." msgstr "Aucun jeton d'API pour l'instant. Créez-en un pour commencer." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Aucun commentaire approuvé pour l'instant." @@ -5125,7 +5125,7 @@ msgstr "Aucun champ d'auteur pour le moment." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Aucun auteur disponible en {entryLocale}. Créez une variante depuis la page Auteurs avant d'en mentionner un dans cette entrée." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Aucun auteur trouvé" @@ -5137,11 +5137,11 @@ msgstr "Aucun auteur sélectionné." msgid "No collections configured" msgstr "Aucune collection configurée" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Aucun commentaire en attente de modération." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Aucun commentaire ne correspond à votre recherche." @@ -5214,7 +5214,7 @@ msgstr "Aucun élément pour l'instant" msgid "No limit" msgstr "Aucune limite" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Aucun utilisateur lié" @@ -5257,7 +5257,7 @@ msgstr "Aucun fichier multimédia trouvé" msgid "No menu items yet" msgstr "Aucun élément de menu pour l'instant" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Pas encore de menus" @@ -5290,11 +5290,11 @@ msgstr "Aucun module d'extension configuré" msgid "No plugins found" msgstr "Aucun module d'extension trouvé" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Aucun module d'extension n'a été publié dans ce registre pour l'instant." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Aucun module d'extension ne correspond à « {debouncedQuery} »." @@ -5310,7 +5310,7 @@ msgstr "Aucune URL publique disponible" msgid "No recent activity" msgstr "Aucune activité récente" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Aucune redirection pour l'instant" @@ -5329,7 +5329,7 @@ msgstr "Aucun résultat pour « {activeSearch} »" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Aucun résultat pour « {debouncedQuery} ». Essayez un autre terme de recherche." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Aucun résultat trouvé" @@ -5337,11 +5337,11 @@ msgstr "Aucun résultat trouvé" msgid "No revisions yet" msgstr "Aucune révision pour l'instant" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Aucune section disponible" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Aucune section trouvée" @@ -5350,7 +5350,7 @@ msgstr "Aucune section trouvée" msgid "No sections yet" msgstr "Aucune section pour l'instant" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Aucun commentaire indésirable." @@ -5423,7 +5423,7 @@ msgstr "Autorisez uniquement les codes que vous reconnaissez." msgid "Only email addresses from allowed domains can sign up." msgstr "Seules les adresses e-mail des domaines autorisés peuvent s'inscrire." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Uniquement les lettres minuscules, les chiffres et les traits d'union" @@ -5550,8 +5550,8 @@ msgstr "Paragraphe" msgid "Parent" msgstr "Parent" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Partie d'une boucle de redirection" @@ -5624,7 +5624,7 @@ msgstr "Les clés d'accès nécessitent HTTPS ou http://localhost (avec votre po msgid "Paste your migration key" msgstr "Collez votre clé de migration" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Chemin" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "en attente" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "En attente" @@ -5755,7 +5755,7 @@ msgstr "module d'extension sur votre site WordPress." msgid "Plugin Permissions" msgstr "Autorisations du module d'extension" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Registre des modules d'extension" @@ -5780,12 +5780,12 @@ msgstr "Module d'extension mis à jour" msgid "Plugin widget error" msgstr "Erreur de widget de module d'extension" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Modules d'extension" @@ -5849,7 +5849,7 @@ msgstr "Aperçu du brouillon" msgid "Previous" msgstr "Précédent" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Page précédente" @@ -5858,7 +5858,7 @@ msgstr "Page précédente" msgid "Previous screenshot" msgstr "Capture d'écran précédente" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Navigation principale" @@ -5997,7 +5997,7 @@ msgstr "E-mail du destinataire" msgid "Recovery link sent to {0}" msgstr "Lien de récupération envoyé à {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Boucle de redirection détectée" @@ -6005,9 +6005,9 @@ msgstr "Boucle de redirection détectée" msgid "Redirecting to login..." msgstr "En cours de redirection vers le formulaire de connexion..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redirections" @@ -6048,7 +6048,7 @@ msgstr "L'inscription a échoué" msgid "Registration was cancelled or timed out. Please try again." msgstr "L'inscription a été annulée ou a expiré. Veuillez réessayer." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registre" @@ -6350,11 +6350,11 @@ msgstr "Même fenêtre" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Enregistrer" @@ -6410,7 +6410,7 @@ msgstr "« {0} » enregistré." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "« {0} » enregistré." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "En cours d'enregistrement..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Rechercher par nom ou par email..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Rechercher des auteurs" @@ -6558,11 +6558,11 @@ msgstr "Rechercher des auteurs" msgid "Search bylines to add..." msgstr "Rechercher des auteurs à ajouter..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Rechercher des commentaires" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Rechercher des commentaires..." @@ -6587,26 +6587,26 @@ msgstr "Formulaire de recherche" msgid "Search media" msgstr "Rechercher des fichiers multimédias" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Rechercher des pages et du contenu..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Rechercher des modules d'extension" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Rechercher des modules d'extension..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Rechercher des sections..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Rechercher une source ou une destination..." @@ -6664,9 +6664,9 @@ msgstr "Section introuvable" msgid "Section title" msgstr "Titre de la section" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Sections" @@ -6717,7 +6717,7 @@ msgstr "Contacts de sécurité" msgid "Security error. Make sure you're on a secure connection." msgstr "Erreur de sécurité. Assurez-vous que vous êtes sur une connexion sécurisée." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Sélectionnez un composant..." msgid "Select a menu..." msgstr "Sélectionnez un menu..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Tout sélectionner" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Tout sélectionner sur cette page" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Sélectionner le commentaire par {0}" @@ -6923,14 +6923,14 @@ msgstr "Configurer votre site" msgid "Setting up..." msgstr "Mise en place en cours..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Paramètres" @@ -7118,7 +7118,7 @@ msgstr "Ignoré" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Trier les thèmes" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Source" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Chemin source" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "indésirable" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Indésirable" @@ -7218,12 +7218,12 @@ msgstr "Commencez à écrire, ou saisissez « / » pour les commandes" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Statut" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Code d'état" @@ -7306,7 +7306,7 @@ msgstr "Contrôles du tableau" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Étiquettes" @@ -7398,7 +7398,7 @@ msgstr "Le lien expirera dans 15 minutes." msgid "The marketplace is empty. Check back later for new plugins." msgstr "La place de marché est vide. Revenez plus tard pour de nouveaux modules d'extension." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Le menu a été supprimé." @@ -7455,7 +7455,7 @@ msgstr "Les sections fournies par un thème ne peuvent pas être supprimées. Mo msgid "Theme: {label}" msgstr "Thème : {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Thèmes" @@ -7510,7 +7510,7 @@ msgstr "Ce module d'extension ne nécessite aucune autorisation particulière." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Cet éditeur revendique un nom dont il ne peut prouver être propriétaire — il pourrait s'agir d'une usurpation d'identité. L'installation est désactivée. Si vous connaissez l'éditeur et lui faites confiance, demandez-lui de corriger la configuration de son identité avant de réessayer." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Cette règle de redirection sera définitivement supprimée." @@ -7518,7 +7518,7 @@ msgstr "Cette règle de redirection sera définitivement supprimée." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Cette version nécessite un environnement plus récent que celui actuellement utilisé par votre site. Mettez à niveau avant l'installation." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Cela supprime le profil de l'auteur. Les liens vers l'auteur des contenus sont supprimés et les liens vers les pages de destination sont effacés." @@ -7556,7 +7556,7 @@ msgstr "Cela supprimera définitivement « {0} » et le supprimera de tout con msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Cela supprimera définitivement « {0} ». Cette action ne peut pas être annulée." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Cela supprimera définitivement ce commentaire. Cette action ne peut pas être annulée." @@ -7601,7 +7601,7 @@ msgstr "Séparateur de titre" msgid "to" msgstr "au" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "pour fermer" @@ -7613,7 +7613,7 @@ msgstr "Date de fin" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "pour installer des modules d'extension, ou ajoutez-les à votre fichier astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "pour sélectionner" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "corbeille" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Corbeille" @@ -7699,7 +7699,7 @@ msgstr "Corbeille" msgid "Trash is empty" msgstr "La corbeille est vide" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "La corbeille est vide." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Essayer un autre terme de recherche" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Essayez d'ajuster votre recherche" @@ -7916,7 +7916,7 @@ msgstr "Mettre à jour les paramètres du site" msgid "Update the {0} details" msgstr "Mettre à jour les détails de {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Mettez à jour cette règle de redirection." @@ -8059,7 +8059,7 @@ msgstr "Modèle d'URL" msgid "URL-friendly identifier" msgstr "Identifiant adapté aux URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Identifiant adapté aux URL (p. ex. « principal », « pied-de-page »)" @@ -8067,7 +8067,7 @@ msgstr "Identifiant adapté aux URL (p. ex. « principal », « pied-de-page msgid "URL:" msgstr "URL :" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Utilisez [param] ou [...rest] dans les chemins pour la correspondance de modèles." @@ -8124,8 +8124,8 @@ msgstr "Détails de l'utilisateur" msgid "User not found" msgstr "Utilisateur introuvable" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Utilisateurs" @@ -8148,7 +8148,7 @@ msgstr "v{0} disponible" msgid "Validation" msgstr "Validation" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Éditeur vérifié" @@ -8221,7 +8221,7 @@ msgstr "Voir la source" msgid "View the {license} license on spdx.org" msgstr "Voir la licence {license} sur spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Les visiteurs qui empruntent ces chemins verront une erreur." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn n'est pas pris en charge dans ce navigateur" msgid "Website" msgstr "Site web" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL du site web" @@ -8374,9 +8374,9 @@ msgstr "Titre du widget" msgid "Widget updated" msgstr "Widget mis à jour" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Vous pouvez créer et modifier votre propre contenu." msgid "You can manage content, media, menus, and taxonomies." msgstr "Vous pouvez gérer le contenu, les fichiers multimédias, les menus et les taxonomies." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Vous pouvez toujours modifier les champs fixes ci-dessus. L'enregistrement ne touchera aucune valeur de champ personnalisé enregistrée." diff --git a/packages/admin/src/locales/hu/messages.po b/packages/admin/src/locales/hu/messages.po index 2bcc0cdf52..f70e83ab2a 100644 --- a/packages/admin/src/locales/hu/messages.po +++ b/packages/admin/src/locales/hu/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - vendég" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - összekapcsolva" @@ -35,7 +35,7 @@ msgstr " (új ablakban nyílik meg)" msgid " (selected)" msgstr " (kijelölve)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Válassz --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# hozzászólás frissítve} other {# hozzászólás frissítve}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# hozzászólás} other {# hozzászólás}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# tartalmi elem importálva} other {# tartalmi elem imp #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# elem} other {# elem}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# bejegyzés} other {# bejegyzés}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# átirányítás egy hurok része.} other {# átirányítás egy hurok része.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# kijelölve} other {# kijelölve}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} szükséges — jelenleg {2} van." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# elem} other {# elem}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# összesen} other {# összesen}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {# változatlan megjelenítése} other {# v msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} feltöltve, {failed} sikertelen" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/uj-oldal vagy /cikkek/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/regi-oldal vagy /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Válaszd az \"Összes tartalom\" (All content) lehetőséget" msgid "30 days" msgstr "30 nap" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 végleges" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 ideiglenes" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 ideiglenes (szigorú)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 végleges (szigorú)" @@ -497,15 +497,15 @@ msgstr "4. Kattints az \"Exportfájl letöltése\" gombra" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Írd be, hogy \"EmDash\", majd kattints az \"Alkalmazás-jelszó hozzáadása\" gombra" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 hibák" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 tartalom törölve (eltűnt)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 jogi okokból nem elérhető" @@ -582,7 +582,7 @@ msgstr "Fiókadatok" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Admin navigáció" @@ -803,7 +803,7 @@ msgstr "Összes" msgid "All authors" msgstr "Összes szerző" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Összes szerző" @@ -811,7 +811,7 @@ msgstr "Összes szerző" msgid "All capabilities" msgstr "Összes engedély" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Összes tartalom" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Összes forrás" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Összes állapot" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Összes típus" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Link alkalmazása" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Jóváhagyás" @@ -989,7 +989,7 @@ msgstr "Jóváhagyás" msgid "approved" msgstr "jóváhagyva" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Jóváhagyva" @@ -1026,7 +1026,7 @@ msgstr "Biztosan törlöd ezt: \"{0}\"? Ez a gyűjtemény összes tartalmát is msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Biztosan törlöd a(z) \"{0}\" mezőt?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Biztosan törlöd ezt a menüt? Ez az összes menüelemet is törli. A művelet nem vonható vissza." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "A hitelesítés megszakadt vagy időtúllépés történt. Próbáld újra." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Engedélyezés..." msgid "Authors" msgstr "Szerzők" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "automatikus" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Automatikus (slug módosítás)" @@ -1236,7 +1236,7 @@ msgstr "Küldés előtt:" msgid "Bing Verification" msgstr "Bing Verification" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Bemutatkozás" @@ -1259,7 +1259,7 @@ msgstr "Logikai érték" msgid "Brief summary shown below the title in search results" msgstr "A keresési találatokban a cím alatt megjelenő rövid összefoglaló" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "A decentralizált regiszterben közzétett pluginek böngészése és telepítése." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Felsorolás" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Szerző sémája" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Szerzők" @@ -1352,11 +1352,11 @@ msgstr "Tartalmat tekinthet meg" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Képaláírás" msgid "Captions / Subtitles" msgstr "Feliratok" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategóriák" @@ -1554,17 +1554,17 @@ msgstr "A bejelentkezéshez kattints az e-mailben lévő linkre." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kód" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Vesszővel elválasztott keresési kulcsszavak." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Hozzászólás" @@ -1654,9 +1654,9 @@ msgstr "Hozzászólás" msgid "Comment Detail" msgstr "Hozzászólás részletei" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Hozzászólások" @@ -1707,13 +1707,13 @@ msgstr "Kapcsolódva: {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Tartalom" @@ -1771,9 +1771,9 @@ msgstr "Tartalom-pillanatkép:" msgid "Content to Import" msgstr "Importálandó tartalom" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tartalomtípusok" @@ -1855,7 +1855,7 @@ msgstr "Nem sikerült felismerni a WordPresst" msgid "Couldn't load byline fields." msgstr "Nem sikerült betölteni a szerző mezőit." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Nem sikerült betölteni az egyéni mezőket." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Darab" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Létrehozás" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Fiók létrehozása" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Szerző létrehozása" @@ -1925,12 +1925,12 @@ msgstr "Tartalomtípus létrehozása" msgid "Create field" msgstr "Mező létrehozása" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Menü létrehozása" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Új menü létrehozása" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Személyes hozzáférési tokenek létrehozása programozott API-hozzáféréshez" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Átirányítás létrehozása ehhez: {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Átirányítás létrehozása ehhez az útvonalhoz" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Átirányítási szabályok létrehozása az URL-változások kezeléséhez." @@ -1973,7 +1973,7 @@ msgstr "Séma létrehozása és importálás" msgid "Create Section" msgstr "Szakasz létrehozása" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Hozz létre szakaszokat a Szakaszok könyvtárban, hogy itt használhasd őket" @@ -1995,7 +1995,7 @@ msgstr "Widgetterület létrehozása" msgid "Create your account" msgstr "Fiók létrehozása" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Első navigációs menü létrehozása a kezdéshez" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Gyűjtemények és mezők létrehozása..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "sötét" msgid "Dark" msgstr "Sötét" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Vezérlőpult" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Dátum" @@ -2186,8 +2186,8 @@ msgstr "A tartalom szerkezetének meghatározása" msgid "Defined in code" msgstr "Kódban definiálva" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Kódban definiálva" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Törlés" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "{0} mező törlése" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "{0} menü törlése" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "Törlöd a szerzői leírás mezőjét?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Törlöd a szerzőt?" @@ -2263,7 +2263,7 @@ msgstr "Törlöd a szerzőt?" msgid "Delete column" msgstr "Oszlop törlése" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Törlöd a hozzászólást?" @@ -2292,11 +2292,11 @@ msgstr "Kép törlése" msgid "Delete Media?" msgstr "Törlöd a médiát?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Menü törlése" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Végleges törlés" @@ -2309,16 +2309,16 @@ msgstr "Végleges törlés" msgid "Delete Permanently?" msgstr "Végleges törlés?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Átirányítás törlése" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "{0} átirányítás törlése" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Törlöd az átirányítást?" @@ -2348,18 +2348,18 @@ msgstr "Törölve" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "\"{0}\" törlése az összes szerzői leírásból eltávolítja a hozzá tartozó {1, plural, one {# tárolt értéket} other {# tárolt értéket}} is. Ez nem vonható vissza." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Törlés..." @@ -2414,11 +2414,11 @@ msgstr "Leírás" msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Cél" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Célútvonal" @@ -2462,7 +2462,7 @@ msgstr "Letiltás" msgid "Disable plugin" msgstr "Plugin letiltása" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Átirányítás letiltása" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Letiltod a felhasználót?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Megjelenített név" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Az adminfelületen megjelenő név" @@ -2706,7 +2706,7 @@ msgstr "{title} duplikálása" msgid "e.g. application/zip or .pdf" msgstr "pl. application/zip vagy .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "pl. import, blog" @@ -2722,7 +2722,7 @@ msgstr "pl. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Szerkesztés" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "{0} szerkesztése" @@ -2782,16 +2782,16 @@ msgstr "Menüelem szerkesztése" msgid "Edit menu items" msgstr "Menüelemek szerkesztése" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Átirányítás szerkesztése" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Átirányítás szerkesztése" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "{0} átirányítás szerkesztése" @@ -2899,12 +2899,12 @@ msgstr "Teljes szövegű keresés engedélyezése ebben a gyűjteményben" msgid "Enable plugin" msgstr "Plugin engedélyezése" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Átirányítás engedélyezése" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Engedélyezve" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Nem sikerült betölteni a szerzőket: {0}" @@ -3387,7 +3387,7 @@ msgstr "Nem sikerült plugint betölteni" msgid "Failed to load plugins: {0}" msgstr "Nem sikerült betölteni a plugineket: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Nem sikerült betölteni a plugineket. Lehet, hogy a regiszteraggregátor nem érhető el." @@ -3701,7 +3701,7 @@ msgstr "Szűrés szerző szerint" msgid "Filter by capability" msgstr "Szűrés engedély szerint" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Szűrés gyűjtemény szerint" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Szűrés forrás szerint" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Szűrés állapot szerint" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Szűrés típus szerint" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Szerző típus szűrése" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Rácsnézet" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Kategória (opcionális)" @@ -3814,11 +3814,11 @@ msgstr "Kategória (opcionális)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Vendég szerző" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Csak vendég" @@ -3882,8 +3882,8 @@ msgstr "Token elrejtése" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarchikus (mint a kategóriák, szülő-gyermek kapcsolatokkal)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Átirányítások" @@ -3985,8 +3985,8 @@ msgstr "kép URL frissítve ebben:" msgid "Images" msgstr "Képek" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importálás" @@ -4153,7 +4153,7 @@ msgstr "Link beszúrása" msgid "Insert raw HTML" msgstr "Nyers HTML beszúrása" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Szakasz beszúrása" @@ -4184,7 +4184,7 @@ msgstr "Telepítés" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Telepítve" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Utolsó bejelentkezés" msgid "Last Login" msgstr "Utolsó bejelentkezés" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Utoljára látva" @@ -4426,11 +4426,11 @@ msgstr "Hivatkozás másik tartalmi elemre" msgid "Linked Accounts ({0})" msgstr "Összekapcsolt fiókok ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Csak összekapcsolt" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Szerzőhöz kapcsolt felhasználó" @@ -4454,9 +4454,9 @@ msgstr "Élő nézet" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Továbbiak betöltése" @@ -4480,7 +4480,7 @@ msgstr "Szerző mezőinek betöltése…" msgid "Loading collections..." msgstr "Gyűjtemények betöltése..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Hozzászólások betöltése..." @@ -4501,7 +4501,7 @@ msgstr "Szerkesztő betöltése..." msgid "Loading menu..." msgstr "Menü betöltése..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Menük betöltése..." @@ -4509,11 +4509,11 @@ msgstr "Menük betöltése..." msgid "Loading plugins..." msgstr "Pluginek betöltése..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Átirányítások betöltése..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Szakaszok betöltése..." @@ -4545,7 +4545,7 @@ msgstr "Widgetek betöltése..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Widgetek betöltése..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Betöltés..." @@ -4618,7 +4618,7 @@ msgstr "Hálózati kérések indítása" msgid "Make network requests to any host (unrestricted)" msgstr "Hálózati kérések indítása bármely hosztra (korlátozás nélkül)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Kezelés" @@ -4640,11 +4640,11 @@ msgstr "Tartalmi widgetek kezelése a widgetterületeken" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Telepített pluginek kezelése. A működésük szabályozásához engedélyezd vagy tiltsd le őket." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "A weboldal navigációs menüinek kezelése" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "URL-átirányítások kezelése és 404 hibák megtekintése." @@ -4660,7 +4660,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Kézi" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "WordPress-felhasználó ({0}) megfeleltetése EmDash-felhasználónak" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "{0} megjelölése eltűntként (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Megjelölés eltűntként (410) — jelzi a keresőmotoroknak, hogy véglegesen törölve lett" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Megjelölés spamként" @@ -4697,7 +4697,7 @@ msgstr "piactér" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Piactér" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Médiaimport kész" msgid "Media import was skipped" msgstr "A médiaimport kihagyva" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Médiatár" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "\"{0}\" ({1}) menü létrehozva." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "\"{0}\" menü létrehozva." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menü létrehozva" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menü törölve" @@ -4811,9 +4811,9 @@ msgstr "A menü nem található" msgid "Menu order has been updated." msgstr "A menü sorrendje frissítve." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menük" @@ -4961,7 +4961,7 @@ msgstr "My Awesome Blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "A név és a címke kötelező" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "A névnek betűvel kell kezdődnie, és csak kisbetűket, számokat és aláhúzásokat tartalmazhat" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigáció" @@ -4992,7 +4992,7 @@ msgstr "Soha" msgid "new" msgstr "új" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Új" @@ -5030,8 +5030,8 @@ msgstr "Új mező" msgid "New public routes" msgstr "Új nyilvános útvonalak" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Új átirányítás" @@ -5039,7 +5039,7 @@ msgstr "Új átirányítás" msgid "New Section" msgstr "Új szakasz" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "új lap" @@ -5067,7 +5067,7 @@ msgstr "Hírek" msgid "Next" msgstr "Következő" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Következő oldal" @@ -5100,7 +5100,7 @@ msgstr "Még nincs {0}." msgid "No {0} yet. Create one to get started." msgstr "Még nincs {0}. Hozz létre egyet a kezdéshez." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Nincsenek 404-es hibák." @@ -5113,7 +5113,7 @@ msgstr "Nincs alternatív szöveg" msgid "No API tokens yet. Create one to get started." msgstr "Még nincsenek API tokenek. Hozz létre egyet a kezdéshez." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Még nincs jóváhagyott hozzászólás." @@ -5125,7 +5125,7 @@ msgstr "Még nincsenek szerzői sor mezők." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Nincs elérhető szerző ezen a nyelven: {entryLocale}. Hozz létre egy változatot a Szerzők oldalon, mielőtt hozzárendelnéd ehhez a bejegyzéshez." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Nem találhatók szerzők" @@ -5137,11 +5137,11 @@ msgstr "Nincs kiválasztott szerző." msgid "No collections configured" msgstr "Nincs beállított gyűjtemény" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Nincs moderálásra váró hozzászólás." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Nincs a keresésnek megfelelő hozzászólás." @@ -5214,7 +5214,7 @@ msgstr "Még nincsenek elemek" msgid "No limit" msgstr "Nincs korlát" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Nincs szerzőhöz kapcsolt felhasználó" @@ -5257,7 +5257,7 @@ msgstr "Nem található média" msgid "No menu items yet" msgstr "Még nincsenek menüelemek" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Még nincsenek menük" @@ -5290,11 +5290,11 @@ msgstr "Nincsenek beállított pluginek" msgid "No plugins found" msgstr "Nem találhatók pluginek" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Még nem tettek közzé plugint ebben a regiszterben." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Nincs \"{debouncedQuery}\" keresésnek megfelelő plugin." @@ -5310,7 +5310,7 @@ msgstr "" msgid "No recent activity" msgstr "Nincs friss tevékenység" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Még nincsenek átirányítások" @@ -5329,7 +5329,7 @@ msgstr "Nincs találat erre: \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Nincs találat erre: \"{debouncedQuery}\". Próbálj másik keresőkifejezést." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Nem található találat" @@ -5337,11 +5337,11 @@ msgstr "Nem található találat" msgid "No revisions yet" msgstr "Még nincsenek verziók" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Nincs elérhető szakasz" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Nem találhatók szakaszok" @@ -5350,7 +5350,7 @@ msgstr "Nem találhatók szakaszok" msgid "No sections yet" msgstr "Még nincsenek szakaszok" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Nincs spam hozzászólás." @@ -5423,7 +5423,7 @@ msgstr "Csak olyan kódokat engedélyezz, amelyeket felismeresz." msgid "Only email addresses from allowed domains can sign up." msgstr "Csak engedélyezett domainekhez tartozó e-mail címekkel lehet regisztrálni." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Csak kisbetűk, számok és kötőjelek" @@ -5550,8 +5550,8 @@ msgstr "Bekezdés" msgid "Parent" msgstr "Szülő" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Átirányítási hurok része" @@ -5624,7 +5624,7 @@ msgstr "A passkey használatához HTTPS vagy http://localhost szükséges (a saj msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Útvonal" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "függőben" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Függőben" @@ -5755,7 +5755,7 @@ msgstr "plugint a WordPress weboldaleden." msgid "Plugin Permissions" msgstr "Plugin engedélyei" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Pluginregiszter" @@ -5780,12 +5780,12 @@ msgstr "Plugin frissítve" msgid "Plugin widget error" msgstr "Plugin widgethiba" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Pluginek" @@ -5849,7 +5849,7 @@ msgstr "Vázlat előnézete" msgid "Previous" msgstr "Előző" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Előző oldal" @@ -5858,7 +5858,7 @@ msgstr "Előző oldal" msgid "Previous screenshot" msgstr "Előző képernyőkép" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Elsődleges navigáció" @@ -5997,7 +5997,7 @@ msgstr "Címzett e-mail címe" msgid "Recovery link sent to {0}" msgstr "Helyreállítási link elküldve ide: {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Átirányítási hurok észlelve" @@ -6005,9 +6005,9 @@ msgstr "Átirányítási hurok észlelve" msgid "Redirecting to login..." msgstr "Átirányítás a bejelentkezéshez..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Átirányítások" @@ -6048,7 +6048,7 @@ msgstr "A regisztráció sikertelen" msgid "Registration was cancelled or timed out. Please try again." msgstr "A regisztráció megszakadt vagy időtúllépés történt. Próbáld újra." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Regiszter" @@ -6350,11 +6350,11 @@ msgstr "Azonos ablak" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Mentés" @@ -6410,7 +6410,7 @@ msgstr "\"{0}\" mentve." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "\"{0}\" mentve." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Mentés..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Keresés név vagy e-mail alapján..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Szerzők keresése" @@ -6558,11 +6558,11 @@ msgstr "Szerzők keresése" msgid "Search bylines to add..." msgstr "Szerző keresése..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Hozzászólás keresése" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Hozzászólás keresése..." @@ -6587,26 +6587,26 @@ msgstr "" msgid "Search media" msgstr "Média keresése" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Oldalak és tartalmak keresése..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Pluginek keresése" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Pluginek keresése..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Szakaszok keresése..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Forrás vagy cél keresése..." @@ -6664,9 +6664,9 @@ msgstr "A szakasz nem található" msgid "Section title" msgstr "Szakasz címe" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Szakaszok" @@ -6717,7 +6717,7 @@ msgstr "Biztonsági kapcsolattartók" msgid "Security error. Make sure you're on a secure connection." msgstr "Biztonsági hiba. Ellenőrizd, hogy biztonságos kapcsolaton vagy-e." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Komponens kiválasztása..." msgid "Select a menu..." msgstr "Menü kiválasztása..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Összes kijelölése" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "{0} hozzászólásának kijelölése" @@ -6923,14 +6923,14 @@ msgstr "Weboldal beállítása" msgid "Setting up..." msgstr "Beállítás..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Beállítások" @@ -7118,7 +7118,7 @@ msgstr "Kihagyva" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Témák rendezése" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Forrás" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Forrásútvonal" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Állapot" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Állapotkód" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "Alcím" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Címkék" @@ -7398,7 +7398,7 @@ msgstr "A link 15 perc múlva lejár." msgid "The marketplace is empty. Check back later for new plugins." msgstr "A piactér üres. Nézz vissza később új pluginekért." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "A menü törölve lett." @@ -7455,7 +7455,7 @@ msgstr "A téma által biztosított szakaszok nem törölhetők. Szerkeszd a sza msgid "Theme: {label}" msgstr "Téma: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Témák" @@ -7510,7 +7510,7 @@ msgstr "Ez a plugin nem igényel különleges engedélyeket." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Ez a kiadó olyan nevet használ, amelynek tulajdonjogát nem tudta igazolni — lehet, hogy másnak adja ki magát. A telepítés le van tiltva. Ha ismered és megbízol a kiadóban, kérd meg, hogy javítsa az identitásbeállításait, mielőtt újra próbálkozol." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Ez az átirányítási szabály véglegesen el lesz távolítva." @@ -7518,7 +7518,7 @@ msgstr "Ez az átirányítási szabály véglegesen el lesz távolítva." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Ehhez a kiadáshoz újabb környezet szükséges, mint amin a weboldal jelenleg fut. Telepítés előtt frissíts." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Ez eltávolítja a szerzői profilt. A tartalom szerzői linkjei megszűnnek, és az elsődleges szerzői megjelölések törlődnek." @@ -7556,7 +7556,7 @@ msgstr "Ez véglegesen törli ezt: \"{0}\", és eltávolítja minden tartalombó msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Ez véglegesen törli ezt: \"{0}\". A művelet nem vonható vissza." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Ez véglegesen törli ezt a hozzászólást. A művelet nem vonható vissza." @@ -7601,7 +7601,7 @@ msgstr "Címelválasztó" msgid "to" msgstr "-" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "bezár" @@ -7613,7 +7613,7 @@ msgstr "Záró dátum" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "pluginek telepítéséhez, vagy add hozzá őket az astro.config.mjs fájlhoz." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "kiválaszt" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "kuka" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Kuka" @@ -7699,7 +7699,7 @@ msgstr "Kuka" msgid "Trash is empty" msgstr "A kuka üres" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "A kuka üres." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Próbálj másik keresőkifejezést" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Próbáld módosítani a keresést" @@ -7916,7 +7916,7 @@ msgstr "Weboldalbeállítások frissítése" msgid "Update the {0} details" msgstr "{0} adatainak frissítése" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Átirányítási szabály frissítése." @@ -8059,7 +8059,7 @@ msgstr "URL-minta" msgid "URL-friendly identifier" msgstr "URL-barát azonosító" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-barát azonosító (pl. \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-barát azonosító (pl. \"primary\", \"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Használj [param] vagy [...rest] mintát az útvonalakban a mintaillesztéshez." @@ -8124,8 +8124,8 @@ msgstr "Felhasználó adatai" msgid "User not found" msgstr "A felhasználó nem található" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Felhasználók" @@ -8148,7 +8148,7 @@ msgstr "v{0} elérhető" msgid "Validation" msgstr "Érvényesítés" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Ellenőrzött kiadó" @@ -8221,7 +8221,7 @@ msgstr "Forrás megtekintése" msgid "View the {license} license on spdx.org" msgstr "A(z) {license} licenc megtekintése az spdx.org oldalon" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Az ezekre az útvonalakra érkező látogatók hibát fognak látni." @@ -8273,7 +8273,7 @@ msgstr "Ez a böngésző nem támogatja a WebAuthn-t" msgid "Website" msgstr "Weboldal" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Weboldal URL" @@ -8374,9 +8374,9 @@ msgstr "Widget címe" msgid "Widget updated" msgstr "Widget frissítve" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Létrehozhatod és szerkesztheted a saját tartalmaidat." msgid "You can manage content, media, menus, and taxonomies." msgstr "Kezelheted a tartalmakat, médiát, menüket és taxonómiákat." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "A fenti rögzített mezőket továbbra is szerkesztheted. A mentés nem módosítja a tárolt egyéni mezőértékeket." diff --git a/packages/admin/src/locales/id/messages.po b/packages/admin/src/locales/id/messages.po index 5230b420bd..d267c34940 100644 --- a/packages/admin/src/locales/id/messages.po +++ b/packages/admin/src/locales/id/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Tamu" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Tertaut" @@ -35,7 +35,7 @@ msgstr " (buka di jendela baru)" msgid " (selected)" msgstr " (terpilih)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Pilih --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0} komentar diperbarui" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, other {# komentar}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, other {# item konten diimpor}}" #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, other {# item}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, other {# pos}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, other {# pengalihan adalah bagian dari loop.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0} dipilih" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} diperlukan — Anda memiliki {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {Pindahkan # item ke tempat sampah? Anda dap msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, other {# item}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total} total" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, other {Tampilkan # tidak berubah}}" msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} berhasil, {failed} gagal" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/halaman-baru atau /artikel/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/halaman-lama atau /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Pilih \"Semua konten\"" msgid "30 days" msgstr "30 hari" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanen" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Sementara" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Sementara (Ketat)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanen (Ketat)" @@ -497,15 +497,15 @@ msgstr "4. Klik \"Unduh File Ekspor\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Masukkan \"EmDash\" dan klik \"Tambah Baru\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Kesalahan 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Konten Dihapus (Gone)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Tidak Tersedia karena Alasan Hukum" @@ -582,7 +582,7 @@ msgstr "Info Akun" msgid "ACF Fields" msgstr "Bidang ACF" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Navigasi admin" @@ -803,7 +803,7 @@ msgstr "Semua" msgid "All authors" msgstr "Semua penulis" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Semua byline" @@ -811,7 +811,7 @@ msgstr "Semua byline" msgid "All capabilities" msgstr "Semua kapabilitas" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Semua koleksi" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Semua Sumber" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Semua status" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Semua tipe" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Terapkan tautan" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Setujui" @@ -989,7 +989,7 @@ msgstr "Setujui" msgid "approved" msgstr "disetujui" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Disetujui" @@ -1026,7 +1026,7 @@ msgstr "Anda yakin ingin menghapus \"{0}\"? Ini juga akan menghapus semua konten msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Anda yakin ingin menghapus bidang \"{0}\"?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Anda yakin ingin menghapus menu ini? Ini juga akan menghapus semua item menu. Tindakan ini tidak dapat dibatalkan." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Autentikasi dibatalkan atau waktu telah habis. Silakan coba lagi." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Mengotorisasi..." msgid "Authors" msgstr "Penulis" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "otomatis" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Otomatis (perubahan slug)" @@ -1236,7 +1236,7 @@ msgstr "Sebelum kirim:" msgid "Bing Verification" msgstr "Verifikasi Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Bio" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Ringkasan singkat di bawah judul di hasil pencarian" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Jelajahi dan pasang plugin yang diterbitkan di registri terdesentralisasi." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Daftar Poin" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Skema byline" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Skema byline" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Byline" @@ -1352,11 +1352,11 @@ msgstr "Dapat melihat konten" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Keterangan" msgid "Captions / Subtitles" msgstr "Takarir / Subtitle" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategori" @@ -1554,17 +1554,17 @@ msgstr "Klik tautan di email untuk masuk." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Tutup pengaturan" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kode" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Kata kunci yang dipisahkan dengan koma untuk pencarian." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Komentar" @@ -1654,9 +1654,9 @@ msgstr "Komentar" msgid "Comment Detail" msgstr "Detail Komentar" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Komentar" @@ -1707,13 +1707,13 @@ msgstr "Terhubung {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Konten" @@ -1771,9 +1771,9 @@ msgstr "Snapshot konten:" msgid "Content to Import" msgstr "Konten untuk Diimpor" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tipe Konten" @@ -1855,7 +1855,7 @@ msgstr "Tidak dapat mendeteksi WordPress" msgid "Couldn't load byline fields." msgstr "Tidak dapat memuat bidang byline." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Tidak dapat memuat bidang kustom." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Jumlah" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Buat" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Buat akun" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Buat kredit penulis" @@ -1925,12 +1925,12 @@ msgstr "Buat Tipe Konten" msgid "Create field" msgstr "Buat bidang" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Buat Menu" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Buat Menu Baru" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Buat token akses pribadi untuk akses API terprogram" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Buat pengalihan untuk {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Buat pengalihan untuk jalur ini" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Buat aturan pengalihan untuk mengelola perubahan URL." @@ -1973,7 +1973,7 @@ msgstr "Buat Skema & Impor" msgid "Create Section" msgstr "Buat Bagian" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Buat bagian di pustaka Bagian untuk digunakan di sini" @@ -1995,7 +1995,7 @@ msgstr "Buat Area Widget" msgid "Create your account" msgstr "Buat akun Anda" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Buat menu navigasi pertama Anda untuk memulai" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Membuat koleksi dan field..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "gelap" msgid "Dark" msgstr "Gelap" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Dasbor" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Tanggal" @@ -2186,8 +2186,8 @@ msgstr "Tentukan struktur konten Anda" msgid "Defined in code" msgstr "Ditetapkan dalam kode" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Ditetapkan dalam kode" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Hapus" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Hapus bidang {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Hapus menu {0}" @@ -2255,7 +2255,7 @@ msgstr "Hapus cadangan?" msgid "Delete byline field?" msgstr "Hapus bidang byline?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Hapus Byline?" @@ -2263,7 +2263,7 @@ msgstr "Hapus Byline?" msgid "Delete column" msgstr "Hapus kolom" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Hapus Komentar?" @@ -2292,11 +2292,11 @@ msgstr "Hapus gambar" msgid "Delete Media?" msgstr "Hapus Media?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Hapus Menu" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Hapus permanen" @@ -2309,16 +2309,16 @@ msgstr "Hapus Permanen" msgid "Delete Permanently?" msgstr "Hapus Permanen?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Hapus pengalihan" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Hapus pengalihan {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Hapus Pengalihan?" @@ -2348,18 +2348,18 @@ msgstr "Dihapus" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Menghapus \"{0}\" juga akan menghapus {1, plural, one {# nilai tersimpan} other {# nilai tersimpan}} di semua byline. Tindakan ini tidak dapat dibatalkan." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Menghapus..." @@ -2414,11 +2414,11 @@ msgstr "Deskripsi" msgid "Description (optional)" msgstr "Deskripsi (opsional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Tujuan" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Jalur tujuan" @@ -2462,7 +2462,7 @@ msgstr "Nonaktifkan" msgid "Disable plugin" msgstr "Nonaktifkan plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Nonaktifkan pengalihan" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Nonaktifkan Pengguna?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Tampilkan daftar kategori" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nama tampilan" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nama tampilan untuk antarmuka admin" @@ -2706,7 +2706,7 @@ msgstr "Duplikasi {title}" msgid "e.g. application/zip or .pdf" msgstr "mis. application/zip atau .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "mis. import, blog" @@ -2722,7 +2722,7 @@ msgstr "mis., MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Sunting" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Sunting {0}" @@ -2782,16 +2782,16 @@ msgstr "Sunting Item Menu" msgid "Edit menu items" msgstr "Sunting item menu" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Sunting pengalihan" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Sunting Pengalihan" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Sunting pengalihan {0}" @@ -2899,12 +2899,12 @@ msgstr "Aktifkan pencarian teks lengkap di koleksi ini" msgid "Enable plugin" msgstr "Aktifkan plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Aktifkan pengalihan" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Diaktifkan" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Gagal memuat pengaturan cadangan" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Gagal memuat byline: {0}" @@ -3387,7 +3387,7 @@ msgstr "Gagal memuat plugin" msgid "Failed to load plugins: {0}" msgstr "Gagal memuat plugin: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Gagal memuat plugin. Agregator registri mungkin tidak dapat dijangkau." @@ -3701,7 +3701,7 @@ msgstr "Filter berdasarkan penulis" msgid "Filter by capability" msgstr "Filter berdasarkan kapabilitas" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filter berdasarkan koleksi" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filter berdasarkan sumber" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filter berdasarkan status" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filter berdasarkan tipe" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filter tipe byline" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Tampilan kisi" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grup (opsional)" @@ -3814,11 +3814,11 @@ msgstr "Grup (opsional)" msgid "Group by" msgstr "Kelompokkan berdasarkan" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Byline tamu" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Hanya tamu" @@ -3882,8 +3882,8 @@ msgstr "Sembunyikan token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarkis (seperti kategori, dengan hubungan induk/anak)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Kunjungan" @@ -3985,8 +3985,8 @@ msgstr "URL gambar diperbarui di" msgid "Images" msgstr "Gambar" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Impor" @@ -4153,7 +4153,7 @@ msgstr "Sisipkan Tautan" msgid "Insert raw HTML" msgstr "Sisipkan HTML mentah" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Sisipkan Bagian" @@ -4184,7 +4184,7 @@ msgstr "Pemasangan" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Terpasang" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Login terakhir" msgid "Last Login" msgstr "Login Terakhir" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Terakhir terlihat" @@ -4426,11 +4426,11 @@ msgstr "Tautkan ke item konten lain" msgid "Linked Accounts ({0})" msgstr "Akun Terhubung ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Hanya tertaut" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Pengguna tertaut" @@ -4454,9 +4454,9 @@ msgstr "Tampilan Langsung" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Muat lebih" @@ -4480,7 +4480,7 @@ msgstr "Memuat bidang byline..." msgid "Loading collections..." msgstr "Memuat koleksi..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Memuat komentar..." @@ -4501,7 +4501,7 @@ msgstr "Memuat editor..." msgid "Loading menu..." msgstr "Memuat menu..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Memuat menu..." @@ -4509,11 +4509,11 @@ msgstr "Memuat menu..." msgid "Loading plugins..." msgstr "Memuat plugin..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Memuat pengalihan..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Memuat bagian..." @@ -4545,7 +4545,7 @@ msgstr "Memuat widget..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Memuat widget..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Memuat..." @@ -4618,7 +4618,7 @@ msgstr "Membuat permintaan jaringan" msgid "Make network requests to any host (unrestricted)" msgstr "Membuat permintaan jaringan ke host mana pun (tidak terbatas)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Kelola" @@ -4640,11 +4640,11 @@ msgstr "Kelola widget konten di area widget Anda" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Kelola plugin yang terpasang. Aktifkan atau nonaktifkan plugin untuk mengontrol fungsinya." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Kelola menu navigasi untuk situs Anda" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Kelola pengalihan URL dan lihat kesalahan 404." @@ -4660,7 +4660,7 @@ msgstr "Dikelola oleh {providerName}" msgid "Managed by an external media provider" msgstr "Dikelola oleh penyedia media eksternal" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Petakan pengguna WordPress {0} ke pengguna EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Tandai {0} sebagai Gone (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Tandai sebagai Gone (410) — memberi tahu mesin pencari bahwa ini telah dihapus secara permanen" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Tandai sebagai spam" @@ -4697,7 +4697,7 @@ msgstr "marketplace" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Impor Media Selesai" msgid "Media import was skipped" msgstr "Impor media dilewati" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Pustaka Media" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menu \"{0}\" ({1}) dibuat." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menu \"{0}\" telah dibuat." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu dibuat" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu dihapus" @@ -4811,9 +4811,9 @@ msgstr "Menu tidak ditemukan" msgid "Menu order has been updated." msgstr "Urutan menu telah diperbarui." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menu" @@ -4961,7 +4961,7 @@ msgstr "Blog Menarik Saya" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Nama dan label wajib diisi" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Nama harus dimulai dengan huruf dan hanya berisi huruf kecil, angka, dan garis bawah" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigasi" @@ -4992,7 +4992,7 @@ msgstr "Tidak Pernah" msgid "new" msgstr "baru" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Baru" @@ -5030,8 +5030,8 @@ msgstr "Bidang baru" msgid "New public routes" msgstr "Rute publik baru" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Pengalihan Baru" @@ -5039,7 +5039,7 @@ msgstr "Pengalihan Baru" msgid "New Section" msgstr "Bagian Baru" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "tab baru" @@ -5067,7 +5067,7 @@ msgstr "Berita" msgid "Next" msgstr "Berikutnya" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Halaman berikutnya" @@ -5100,7 +5100,7 @@ msgstr "Belum ada {0}." msgid "No {0} yet. Create one to get started." msgstr "Belum ada {0}. Buat satu untuk memulai." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Belum ada kesalahan 404 tercatat." @@ -5113,7 +5113,7 @@ msgstr "Tidak ada teks alt" msgid "No API tokens yet. Create one to get started." msgstr "Belum ada token API. Buat satu untuk memulai." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Belum ada komentar disetujui." @@ -5125,7 +5125,7 @@ msgstr "Belum ada bidang byline." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Tidak ada byline yang tersedia di {entryLocale}. Buat varian dari halaman Byline sebelum menambahkan satu pada entri ini." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Tidak ada byline ditemukan" @@ -5137,11 +5137,11 @@ msgstr "Tidak ada kredit penulis yang dipilih." msgid "No collections configured" msgstr "Tidak ada koleksi yang dikonfigurasi" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Tidak ada komentar yang menunggu moderasi." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Tidak ada komentar yang cocok dengan pencarian Anda." @@ -5214,7 +5214,7 @@ msgstr "Belum ada item" msgid "No limit" msgstr "Tanpa batas" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Tidak ada pengguna tertaut" @@ -5257,7 +5257,7 @@ msgstr "Tidak ada media yang ditemukan" msgid "No menu items yet" msgstr "Belum ada item menu" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Belum ada menu" @@ -5290,11 +5290,11 @@ msgstr "Tidak ada plugin yang dikonfigurasi" msgid "No plugins found" msgstr "Tidak ada plugin yang ditemukan" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Belum ada plugin yang diterbitkan di registri ini." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Tidak ada plugin yang cocok dengan \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "Tidak ada URL publik yang tersedia" msgid "No recent activity" msgstr "Tidak ada aktivitas terbaru" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Belum ada pengalihan" @@ -5329,7 +5329,7 @@ msgstr "Tidak ada hasil untuk \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Tidak ada hasil untuk \"{debouncedQuery}\". Coba istilah pencarian lain." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Tidak ada hasil yang ditemukan" @@ -5337,11 +5337,11 @@ msgstr "Tidak ada hasil yang ditemukan" msgid "No revisions yet" msgstr "Belum ada revisi" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Tidak ada bagian yang tersedia" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Tidak ada bagian yang ditemukan" @@ -5350,7 +5350,7 @@ msgstr "Tidak ada bagian yang ditemukan" msgid "No sections yet" msgstr "Belum ada bagian" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Tidak ada komentar spam." @@ -5423,7 +5423,7 @@ msgstr "Hanya berikan otorisasi untuk kode yang Anda kenali." msgid "Only email addresses from allowed domains can sign up." msgstr "Hanya alamat email dari domain yang diizinkan yang dapat mendaftar." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Hanya huruf kecil, angka, dan tanda hubung" @@ -5550,8 +5550,8 @@ msgstr "Paragraf" msgid "Parent" msgstr "Induk" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Bagian dari loop pengalihan" @@ -5624,7 +5624,7 @@ msgstr "Passkey memerlukan HTTPS atau http://localhost (dengan port Anda); hostn msgid "Paste your migration key" msgstr "Tempel kunci migrasi Anda" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Jalur" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "tertunda" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Tertunda" @@ -5755,7 +5755,7 @@ msgstr "plugin di situs WordPress Anda." msgid "Plugin Permissions" msgstr "Izin Plugin" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Registri Plugin" @@ -5780,12 +5780,12 @@ msgstr "Plugin diperbarui" msgid "Plugin widget error" msgstr "Kesalahan widget plugin" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugin" @@ -5849,7 +5849,7 @@ msgstr "Pratinjau draf" msgid "Previous" msgstr "Sebelumnya" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Halaman sebelumnya" @@ -5858,7 +5858,7 @@ msgstr "Halaman sebelumnya" msgid "Previous screenshot" msgstr "Tangkapan layar sebelumnya" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Navigasi Utama" @@ -5997,7 +5997,7 @@ msgstr "Email penerima" msgid "Recovery link sent to {0}" msgstr "Tautan pemulihan dikirim ke {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Loop pengalihan terdeteksi" @@ -6005,9 +6005,9 @@ msgstr "Loop pengalihan terdeteksi" msgid "Redirecting to login..." msgstr "Mengalihkan ke login..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Pengalihan" @@ -6048,7 +6048,7 @@ msgstr "Registrasi gagal" msgid "Registration was cancelled or timed out. Please try again." msgstr "Pendaftaran dibatalkan atau waktu telah habis. Silakan coba lagi." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registri" @@ -6350,11 +6350,11 @@ msgstr "Jendela sama" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Simpan" @@ -6410,7 +6410,7 @@ msgstr "\"{0}\" disimpan." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "\"{0}\" disimpan." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Menyimpan..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Cari berdasarkan nama atau email..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Cari byline" @@ -6558,11 +6558,11 @@ msgstr "Cari byline" msgid "Search bylines to add..." msgstr "Cari byline untuk ditambahkan..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Cari komentar" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Cari komentar..." @@ -6587,26 +6587,26 @@ msgstr "Formulir pencarian" msgid "Search media" msgstr "Cari media" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Cari halaman dan konten..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Cari plugin" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Cari plugin..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Cari bagian..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Cari sumber atau tujuan..." @@ -6664,9 +6664,9 @@ msgstr "Bagian Tidak Ditemukan" msgid "Section title" msgstr "Judul bagian" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Bagian" @@ -6717,7 +6717,7 @@ msgstr "Kontak keamanan" msgid "Security error. Make sure you're on a secure connection." msgstr "Kesalahan keamanan. Pastikan Anda berada di koneksi yang aman." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Pilih komponen..." msgid "Select a menu..." msgstr "Pilih menu..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Pilih semua" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Pilih semua di halaman ini" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Pilih komentar oleh {0}" @@ -6923,14 +6923,14 @@ msgstr "Atur situs Anda" msgid "Setting up..." msgstr "Mengatur..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Pengaturan" @@ -7118,7 +7118,7 @@ msgstr "Dilewati" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Urutkan tema" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Sumber" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Jalur sumber" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7218,12 +7218,12 @@ msgstr "Mulai menulis, atau ketik '/' untuk perintah" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Kode status" @@ -7306,7 +7306,7 @@ msgstr "Kontrol tabel" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Tag" @@ -7398,7 +7398,7 @@ msgstr "Tautan akan kedaluwarsa dalam 15 menit." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Marketplace kosong. Periksa kembali nanti untuk plugin baru." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Menu telah dihapus." @@ -7455,7 +7455,7 @@ msgstr "Bagian yang disediakan tema tidak dapat dihapus. Edit bagian untuk membu msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Tema" @@ -7510,7 +7510,7 @@ msgstr "Plugin ini tidak memerlukan izin khusus." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Penerbit ini mengklaim nama yang tidak dapat mereka buktikan kepemilikannya — mungkin meniru orang lain. Pemasangan dinonaktifkan. Jika Anda mengenal penerbit ini dan mempercayainya, minta mereka memperbaiki pengaturan identitasnya sebelum mencoba lagi." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Aturan pengalihan ini akan dihapus permanen." @@ -7518,7 +7518,7 @@ msgstr "Aturan pengalihan ini akan dihapus permanen." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Rilis ini memerlukan lingkungan yang lebih baru daripada yang saat ini digunakan situs Anda. Tingkatkan sebelum memasang." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Ini menghapus profil byline. Tautan byline konten dihapus dan penunjuk utama dibersihkan." @@ -7556,7 +7556,7 @@ msgstr "Ini akan menghapus permanen \"{0}\" dan menghapusnya dari semua konten." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Ini akan menghapus permanen \"{0}\". Tindakan ini tidak dapat dibatalkan." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Ini akan menghapus permanen komentar ini. Tindakan ini tidak dapat dibatalkan." @@ -7601,7 +7601,7 @@ msgstr "Pemisah Judul" msgid "to" msgstr "sampai" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "untuk menutup" @@ -7613,7 +7613,7 @@ msgstr "Tanggal akhir" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "untuk memasang plugin, atau tambahkan ke astro.config.mjs Anda." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "untuk memilih" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "tempat sampah" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Tempat Sampah" @@ -7699,7 +7699,7 @@ msgstr "Tempat Sampah" msgid "Trash is empty" msgstr "Tempat sampah kosong" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Tempat sampah kosong." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Coba istilah pencarian lain" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Coba sesuaikan pencarian Anda" @@ -7916,7 +7916,7 @@ msgstr "Perbarui pengaturan situs" msgid "Update the {0} details" msgstr "Perbarui detail {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Perbarui aturan pengalihan ini." @@ -8059,7 +8059,7 @@ msgstr "Pola URL" msgid "URL-friendly identifier" msgstr "Pengenal ramah URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Pengenal ramah URL (mis., \"utama\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "Pengenal ramah URL (mis., \"utama\", \"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Gunakan [param] atau [...rest] di jalur untuk pencocokan pola." @@ -8124,8 +8124,8 @@ msgstr "Detail Pengguna" msgid "User not found" msgstr "Pengguna tidak ditemukan" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Pengguna" @@ -8148,7 +8148,7 @@ msgstr "v{0} tersedia" msgid "Validation" msgstr "Validasi" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Penerbit terverifikasi" @@ -8221,7 +8221,7 @@ msgstr "Lihat sumber" msgid "View the {license} license on spdx.org" msgstr "Lihat lisensi {license} di spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Pengunjung yang mengakses jalur ini akan melihat kesalahan." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn tidak didukung di browser ini" msgid "Website" msgstr "Situs Web" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL Situs Web" @@ -8374,9 +8374,9 @@ msgstr "Judul widget" msgid "Widget updated" msgstr "Widget diperbarui" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Anda dapat membuat dan mengedit konten Anda sendiri." msgid "You can manage content, media, menus, and taxonomies." msgstr "Anda dapat mengelola konten, media, menu, dan taksonomi." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Anda masih dapat mengedit bidang tetap di atas. Penyimpanan tidak akan mengubah nilai bidang kustom yang sudah tersimpan." diff --git a/packages/admin/src/locales/ja/messages.po b/packages/admin/src/locales/ja/messages.po index faf36c6bba..e98f90b23a 100644 --- a/packages/admin/src/locales/ja/messages.po +++ b/packages/admin/src/locales/ja/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr "(新しいウィンドウで開く)" msgid " (selected)" msgstr "(選択済み)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {#件のコメント} other {#件のコメント}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {#件のコンテンツをインポート} other {#件 #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {#件} other {#件}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {#件の投稿} other {#件の投稿}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {#件のリダイレクトがループしています。} other {#件のリダイレクトがループしています。}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {#件選択中} other {#件選択中}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {合計#件} other {合計#件}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {変更なし#件を表示} other {変更 msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded}件アップロード、{failed}件失敗" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. 「すべてのコンテンツ」を選択" msgid "30 days" msgstr "30日" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 恒久的" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 一時的" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 一時的(厳密)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 恒久的(厳密)" @@ -497,15 +497,15 @@ msgstr "4. 「エクスポートファイルをダウンロード」をクリッ msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. 「EmDash」と入力し「新規追加」をクリック" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404エラー" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "アカウント情報" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "管理者" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "管理ナビゲーション" @@ -803,7 +803,7 @@ msgstr "すべて" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "すべての権限" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "すべてのコレクション" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "すべてのソース" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "すべてのステータス" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "すべてのタイプ" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "承認" @@ -989,7 +989,7 @@ msgstr "承認" msgid "approved" msgstr "承認済み" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "承認済み" @@ -1026,7 +1026,7 @@ msgstr "\"{0}\"を削除しますか?このコレクション内のすべて msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "このメニューを削除しますか?すべてのメニュー項目も削除されます。この操作は取り消せません。" @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "認証がキャンセルされたかタイムアウトしました。もう一度お試しください。" #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "認可中..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "自動" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "自動(スラッグ変更)" @@ -1236,7 +1236,7 @@ msgstr "送信前:" msgid "Bing Verification" msgstr "Bing認証" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "ブール値" msgid "Brief summary shown below the title in search results" msgstr "検索結果でタイトルの下に表示される概要" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "箇条書きリスト" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "署名" @@ -1352,11 +1352,11 @@ msgstr "コンテンツを閲覧可能" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "キャプション" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "カテゴリ" @@ -1554,17 +1554,17 @@ msgstr "メール内のリンクをクリックしてサインインしてくだ #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "コード" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "検索用のカンマ区切りキーワード。" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "コメント" @@ -1654,9 +1654,9 @@ msgstr "コメント" msgid "Comment Detail" msgstr "コメント詳細" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "コメント" @@ -1707,13 +1707,13 @@ msgstr "{0}に接続済み" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "コンテンツ" @@ -1771,9 +1771,9 @@ msgstr "コンテンツスナップショット:" msgid "Content to Import" msgstr "インポートするコンテンツ" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "コンテンツタイプ" @@ -1855,7 +1855,7 @@ msgstr "WordPressを検出できませんでした" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "件数" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "作成" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "アカウントを作成" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "署名を作成" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "メニューを作成" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "新しいメニューを作成" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "プログラムからのAPIアクセス用にパーソナルアクセストークンを作成" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "{0}のリダイレクトを作成" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "このパスのリダイレクトを作成" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "URL変更を管理するリダイレクトルールを作成できます。" @@ -1973,7 +1973,7 @@ msgstr "スキーマを作成してインポート" msgid "Create Section" msgstr "セクションを作成" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "セクションライブラリでセクションを作成して使用できます" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "アカウントを作成" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "最初のナビゲーションメニューを作成して始めましょう" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "コレクションとフィールドを作成中..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "ダーク" msgid "Dark" msgstr "ダーク" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "ダッシュボード" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "日付" @@ -2186,8 +2186,8 @@ msgstr "コンテンツの構造を定義" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "削除" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "{0}メニューを削除" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "列を削除" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "コメントを削除しますか?" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "メディアを削除しますか?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "メニューを削除" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "完全に削除" @@ -2309,16 +2309,16 @@ msgstr "完全に削除" msgid "Delete Permanently?" msgstr "完全に削除しますか?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "リダイレクトを削除" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "リダイレクト{0}を削除" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "リダイレクトを削除しますか?" @@ -2348,18 +2348,18 @@ msgstr "削除済み" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "削除中..." @@ -2414,11 +2414,11 @@ msgstr "説明" msgid "Description (optional)" msgstr "説明(任意)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "転送先" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "転送先パス" @@ -2462,7 +2462,7 @@ msgstr "無効にする" msgid "Disable plugin" msgstr "プラグインを無効にする" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "リダイレクトを無効にする" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "表示名" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "管理画面の表示名" @@ -2706,7 +2706,7 @@ msgstr "{title}を複製" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "例: MacBook Pro、iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "編集" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "{0}を編集" @@ -2782,16 +2782,16 @@ msgstr "メニュー項目を編集" msgid "Edit menu items" msgstr "メニュー項目を編集" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "リダイレクトを編集" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "リダイレクトを編集" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "リダイレクト{0}を編集" @@ -2896,12 +2896,12 @@ msgstr "このコレクションで全文検索を有効にする" msgid "Enable plugin" msgstr "プラグインを有効にする" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "リダイレクトを有効にする" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "有効" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "プラグインの読み込みに失敗しました" msgid "Failed to load plugins: {0}" msgstr "プラグインの読み込みに失敗しました: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "権限でフィルタ" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "コレクションでフィルタ" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "グリッド表示" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "グループ(任意)" @@ -3811,11 +3811,11 @@ msgstr "グループ(任意)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "トークンを非表示" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "階層型(カテゴリのような親子関係)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "ヒット数" @@ -3982,8 +3982,8 @@ msgstr "画像URLを更新:" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "インポート" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "セクションを挿入" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "インストール済み" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "最終ログイン" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "最終確認" @@ -4423,11 +4423,11 @@ msgstr "他のコンテンツアイテムへのリンク" msgid "Linked Accounts ({0})" msgstr "リンクされたアカウント ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "ライブビュー" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "もっと読み込む" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "コレクションを読み込み中..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "コメントを読み込み中..." @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "メニューを読み込み中..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "メニューを読み込み中..." @@ -4506,11 +4506,11 @@ msgstr "メニューを読み込み中..." msgid "Loading plugins..." msgstr "プラグインを読み込み中..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "リダイレクトを読み込み中..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "セクションを読み込み中..." @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "読み込み中..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "管理" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "インストール済みプラグインを管理します。プラグインを有効または無効にして機能を制御できます。" -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "サイトのナビゲーションメニューを管理" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "URLリダイレクトの管理と404エラーの確認ができます。" @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "手動" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "スパムとしてマーク" @@ -4694,7 +4694,7 @@ msgstr "マーケットプレイス" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "マーケットプレイス" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "メディアインポート完了" msgid "Media import was skipped" msgstr "メディアのインポートはスキップされました" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "メディアライブラリ" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "メニュー\"{0}\"を作成しました。" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "メニューを作成しました" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "メニューを削除しました" @@ -4808,9 +4808,9 @@ msgstr "メニューが見つかりません" msgid "Menu order has been updated." msgstr "メニューの順序を更新しました。" -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "メニュー" @@ -4958,7 +4958,7 @@ msgstr "マイブログ" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "名前とラベルは必須です" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "名前は半角小文字で始まり、半角小文字・数字・アンダースコアのみ使用可能です" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "ナビゲーション" @@ -4989,7 +4989,7 @@ msgstr "なし" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "新しいリダイレクト" @@ -5036,7 +5036,7 @@ msgstr "新しいリダイレクト" msgid "New Section" msgstr "新しいセクション" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "新しいタブ" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "次へ" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "次のページ" @@ -5097,7 +5097,7 @@ msgstr "まだ{0}がありません。" msgid "No {0} yet. Create one to get started." msgstr "まだ{0}がありません。作成して始めましょう。" -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "404エラーはまだ記録されていません。" @@ -5110,7 +5110,7 @@ msgstr "代替テキストなし" msgid "No API tokens yet. Create one to get started." msgstr "APIトークンはまだありません。作成して使い始めましょう。" -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "承認済みのコメントはまだありません。" @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "署名が選択されていません。" msgid "No collections configured" msgstr "コレクションが設定されていません" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "モデレーション待ちのコメントはありません。" -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "検索に一致するコメントはありません。" @@ -5211,7 +5211,7 @@ msgstr "アイテムはまだありません" msgid "No limit" msgstr "制限なし" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "メディアが見つかりません" msgid "No menu items yet" msgstr "メニュー項目はまだありません" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "メニューはまだありません" @@ -5287,11 +5287,11 @@ msgstr "プラグインが設定されていません" msgid "No plugins found" msgstr "プラグインが見つかりません" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "最近のアクティビティはありません" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "リダイレクトはまだありません" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "\"{debouncedQuery}\"の結果はありません。別の検索キーワードをお試しください。" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "結果が見つかりませんでした" @@ -5334,11 +5334,11 @@ msgstr "結果が見つかりませんでした" msgid "No revisions yet" msgstr "リビジョンはまだありません" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "利用可能なセクションはありません" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "セクションが見つかりません" @@ -5347,7 +5347,7 @@ msgstr "セクションが見つかりません" msgid "No sections yet" msgstr "セクションはまだありません" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "スパムコメントはありません。" @@ -5420,7 +5420,7 @@ msgstr "認識したコードのみ認可してください。" msgid "Only email addresses from allowed domains can sign up." msgstr "許可されたドメインのメールアドレスのみ登録できます。" -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "半角小文字、数字、ハイフンのみ" @@ -5544,8 +5544,8 @@ msgstr "段落" msgid "Parent" msgstr "親" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "リダイレクトループの一部" @@ -5618,7 +5618,7 @@ msgstr "パスキーにはHTTPSまたはhttp://localhost(ポート付き)が msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "パス" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "保留中" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "保留中" @@ -5749,7 +5749,7 @@ msgstr "プラグインをWordPressサイトにインストール。" msgid "Plugin Permissions" msgstr "プラグインの権限" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "プラグインを更新しました" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "プラグイン" @@ -5843,7 +5843,7 @@ msgstr "下書きをプレビュー" msgid "Previous" msgstr "前へ" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "前のページ" @@ -5852,7 +5852,7 @@ msgstr "前のページ" msgid "Previous screenshot" msgstr "前のスクリーンショット" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "メインナビゲーション" @@ -5991,7 +5991,7 @@ msgstr "受信者メールアドレス" msgid "Recovery link sent to {0}" msgstr "回復リンクを{0}に送信しました" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "リダイレクトループを検出" @@ -5999,9 +5999,9 @@ msgstr "リダイレクトループを検出" msgid "Redirecting to login..." msgstr "ログインにリダイレクト中..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "リダイレクト" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "登録がキャンセルされたかタイムアウトしました。もう一度お試しください。" -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "同じウィンドウ" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "保存" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "保存中..." @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "コメントを検索" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "コメントを検索..." @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "メディアを検索" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "ページやコンテンツを検索..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "プラグインを検索..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "セクションを検索..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "ソースまたは転送先を検索..." @@ -6658,9 +6658,9 @@ msgstr "セクションが見つかりません" msgid "Section title" msgstr "セクションタイトル" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "セクション" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "セキュリティエラー。安全な接続であることを確認してください。" -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "すべて選択" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "{0}のコメントを選択" @@ -6917,14 +6917,14 @@ msgstr "サイトをセットアップ" msgid "Setting up..." msgstr "セットアップ中..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "設定" @@ -7112,7 +7112,7 @@ msgstr "スキップ済み" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "スラッグ" @@ -7168,12 +7168,12 @@ msgstr "テーマを並べ替え" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "ソース" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "ソースパス" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "スパム" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "スパム" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "ステータス" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "ステータスコード" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "キャッチフレーズ" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "タグ" @@ -7392,7 +7392,7 @@ msgstr "リンクの有効期限は15分です。" msgid "The marketplace is empty. Check back later for new plugins." msgstr "マーケットプレイスは空です。新しいプラグインを後で確認してください。" -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "メニューを削除しました。" @@ -7449,7 +7449,7 @@ msgstr "テーマ提供のセクションは削除できません。セクショ msgid "Theme: {label}" msgstr "テーマ: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "テーマ" @@ -7504,7 +7504,7 @@ msgstr "このプラグインに特別な権限は不要です。" msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "このリダイレクトルールは完全に削除されます。" @@ -7512,7 +7512,7 @@ msgstr "このリダイレクトルールは完全に削除されます。" msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "\"{0}\"を完全に削除し、すべてのコンテンツから削除 msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "\"{0}\"を完全に削除します。この操作は取り消せません。" -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "このコメントを完全に削除します。この操作は取り消せません。" @@ -7595,7 +7595,7 @@ msgstr "タイトル区切り文字" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "閉じる" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "にアクセスしてプラグインをインストールするか、astro.config.mjsに追加してください。" -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "選択" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "ゴミ箱" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "ゴミ箱" @@ -7693,7 +7693,7 @@ msgstr "ゴミ箱" msgid "Trash is empty" msgstr "ゴミ箱は空です" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "ゴミ箱は空です。" @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "別の検索キーワードをお試しください" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "検索条件を変更してみてください" @@ -7910,7 +7910,7 @@ msgstr "" msgid "Update the {0} details" msgstr "{0}の詳細を更新" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "このリダイレクトルールを更新します。" @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "URLに適した識別子" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URLに適した識別子(例: \"primary\"、\"footer\")" @@ -8061,7 +8061,7 @@ msgstr "URLに適した識別子(例: \"primary\"、\"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "パスパターンマッチングには[param]や[...rest]を使用します。" @@ -8118,8 +8118,8 @@ msgstr "ユーザー詳細" msgid "User not found" msgstr "ユーザーが見つかりません" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "ユーザー" @@ -8142,7 +8142,7 @@ msgstr "v{0}が利用可能" msgid "Validation" msgstr "バリデーション" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "これらのパスにアクセスしたユーザーにはエラーが表示されます。" @@ -8267,7 +8267,7 @@ msgstr "このブラウザはWebAuthnに対応していません" msgid "Website" msgstr "ウェブサイト" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "自分のコンテンツを作成・編集できます。" msgid "You can manage content, media, menus, and taxonomies." msgstr "コンテンツ、メディア、メニュー、タクソノミーを管理できます。" -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/ko/messages.po b/packages/admin/src/locales/ko/messages.po index 825cdeebad..270aef6a6a 100644 --- a/packages/admin/src/locales/ko/messages.po +++ b/packages/admin/src/locales/ko/messages.po @@ -13,11 +13,11 @@ msgstr "" "Last-Translator: \n" "Language-Team: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr " (새 창에서 열립니다)" msgid " (selected)" msgstr " (선택됨)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {#개 댓글} other {#개 댓글}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {#개 콘텐츠 항목 가져옴} other {#개 콘텐츠 #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {#개 항목} other {#개 항목}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {#개 글} other {#개 글}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {리디렉션 #개가 루프에 포함되어 있습니다.} other {리디렉션 #개가 루프에 포함되어 있습니다.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {#개 선택됨} other {#개 선택됨}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {총 #개} other {총 #개}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {변경되지 않은 항목 #개 보기} ot msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded}개 업로드됨, {failed}개 실패" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. '모든 콘텐츠'를 선택하세요." msgid "30 days" msgstr "30일" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 영구 이동" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 임시" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 임시(엄격)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 영구 이동(엄격)" @@ -497,15 +497,15 @@ msgstr "4. \"내보내기 파일 다운로드\"를 클릭하세요." msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. \"EmDash\"를 입력하고 \"새로 추가\"를 클릭하세요." -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 오류" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "계정 정보" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "관리자" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "관리자 탐색 메뉴" @@ -803,7 +803,7 @@ msgstr "모두" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "모든 기능" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "전체 항목" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "모든 소스" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "모든 상태" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "모든 유형" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "승인" @@ -989,7 +989,7 @@ msgstr "승인" msgid "approved" msgstr "승인됨" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "승인됨" @@ -1026,7 +1026,7 @@ msgstr "정말로 \"{0}\"을(를) 삭제하시겠습니까? 이 컬렉션의 모 msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "이 메뉴를 삭제하시겠습니까? 그러면 모든 메뉴 항목도 삭제됩니다. 이 작업은 취소할 수 없습니다." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "인증이 취소되었거나 시간이 초과되었습니다. 다시 시도해 주세요." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "승인 중..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "자동" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "자동(슬러그 변경)" @@ -1236,7 +1236,7 @@ msgstr "보내기 전:" msgid "Bing Verification" msgstr "빙 확인" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "불리언" msgid "Brief summary shown below the title in search results" msgstr "검색결과 제목 아래에 간략한 요약이 표시됩니다." -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "글머리 기호 목록" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "작성자 정보" @@ -1352,11 +1352,11 @@ msgstr "콘텐츠 조회 가능" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "캡션" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "카테고리" @@ -1554,17 +1554,17 @@ msgstr "이메일에 있는 링크를 클릭하여 로그인하세요." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "코드" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "쉼표로 구분된 검색 키워드" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "댓글" @@ -1654,9 +1654,9 @@ msgstr "댓글" msgid "Comment Detail" msgstr "댓글 세부정보" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "댓글" @@ -1707,13 +1707,13 @@ msgstr "연결됨 {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "콘텐츠" @@ -1771,9 +1771,9 @@ msgstr "콘텐츠 스냅샷:" msgid "Content to Import" msgstr "가져올 콘텐츠" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "콘텐츠 유형" @@ -1855,7 +1855,7 @@ msgstr "WordPress를 감지할 수 없습니다." msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "수" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "생성" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "계정 만들기" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "바이라인 추가" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "메뉴 만들기" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "새 메뉴 만들기" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "프로그래밍 방식의 API 액세스를 위한 개인 액세스 토큰 만들기" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "{0}에 대한 리디렉션 생성" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "이 경로에 대한 리디렉션 만들기" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "URL 변경을 관리하기 위한 리디렉션 규칙을 만듭니다." @@ -1973,7 +1973,7 @@ msgstr "스키마 생성 및 가져오기" msgid "Create Section" msgstr "섹션 만들기" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "여기에서 사용하려면 섹션 라이브러리에 섹션을 만드세요." @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "계정 만들기" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "시작하려면 첫 번째 탐색 메뉴를 만드세요." @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "컬렉션 및 필드 생성 중..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "어두움" msgid "Dark" msgstr "어두운 테마" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "대시보드" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "날짜" @@ -2186,8 +2186,8 @@ msgstr "콘텐츠 구조 정의" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "삭제" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "{0} 메뉴 삭제" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "댓글을 삭제하시겠습니까?" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "미디어를 삭제하시겠습니까?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "메뉴 삭제" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "완전히 삭제" @@ -2309,16 +2309,16 @@ msgstr "완전히 삭제" msgid "Delete Permanently?" msgstr "완전히 삭제하시겠습니까?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "리디렉션 삭제" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "리디렉션 삭제 {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "리디렉션을 삭제하시겠습니까?" @@ -2348,18 +2348,18 @@ msgstr "삭제됨" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "삭제 중..." @@ -2414,11 +2414,11 @@ msgstr "설명" msgid "Description (optional)" msgstr "설명(선택사항)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "대상" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "대상 경로" @@ -2462,7 +2462,7 @@ msgstr "비활성화" msgid "Disable plugin" msgstr "플러그인 비활성화" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "리디렉션 비활성화" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "표시 이름" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "관리 인터페이스의 표시 이름" @@ -2706,7 +2706,7 @@ msgstr "{title} 복제" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "예: 맥북 프로, 아이폰" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "편집" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "{0} 수정" @@ -2782,16 +2782,16 @@ msgstr "메뉴 항목 편집" msgid "Edit menu items" msgstr "메뉴 항목 편집" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "리디렉션 수정" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "리디렉션 수정" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "리디렉션 수정 {0}" @@ -2896,12 +2896,12 @@ msgstr "이 컬렉션의 전체 텍스트 검색을 활성화합니다" msgid "Enable plugin" msgstr "플러그인 활성화" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "리디렉션 활성화" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "활성화됨" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "플러그인을 로드하지 못했습니다." msgid "Failed to load plugins: {0}" msgstr "플러그인을 로드하지 못했습니다: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "기능별로 필터링" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "컬렉션으로 필터링" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "그리드 보기" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "그룹(선택사항)" @@ -3811,11 +3811,11 @@ msgstr "그룹(선택사항)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "토큰 숨기기" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "계층형(카테고리처럼 상위/하위 관계 지원)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "조회수" @@ -3982,8 +3982,8 @@ msgstr "이미지 URL이 다음에서 업데이트되었습니다." msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "가져오기" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "섹션 삽입" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "설치됨" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "마지막 로그인" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "마지막 조회" @@ -4423,11 +4423,11 @@ msgstr "다른 콘텐츠 항목에 대한 링크" msgid "Linked Accounts ({0})" msgstr "연결된 계정({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "실시간 미리보기" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "더 보기" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "컬렉션 로드 중..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "댓글 로드 중..." @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "메뉴 로드 중..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "메뉴 로드 중..." @@ -4506,11 +4506,11 @@ msgstr "메뉴 로드 중..." msgid "Loading plugins..." msgstr "플러그인 로드 중..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "리디렉션 로드 중..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "섹션 로드 중..." @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "로드 중..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "관리" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "설치된 플러그인을 관리합니다. 기능을 제어하려면 플러그인을 활성화하거나 비활성화하세요." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "사이트의 탐색 메뉴를 관리합니다" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "URL 리디렉션을 관리하고 404 오류를 확인하세요." @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "수동" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "스팸으로 표시" @@ -4694,7 +4694,7 @@ msgstr "마켓플레이스" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "마켓플레이스" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "미디어 가져오기 완료" msgid "Media import was skipped" msgstr "미디어 가져오기를 건너뛰었습니다." -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "미디어 라이브러리" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "메뉴 \"{0}\"이(가) 생성되었습니다." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "메뉴가 생성되었습니다." -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "메뉴가 삭제되었습니다." @@ -4808,9 +4808,9 @@ msgstr "메뉴를 찾을 수 없습니다" msgid "Menu order has been updated." msgstr "메뉴 순서가 업데이트되었습니다." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "메뉴" @@ -4958,7 +4958,7 @@ msgstr "내 멋진 블로그" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "이름과 라벨은 필수 항목입니다." msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "이름은 문자로 시작해야 하며 소문자, 숫자, 밑줄만 포함할 수 있습니다." -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "탐색" @@ -4989,7 +4989,7 @@ msgstr "없음" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "새 리디렉션" @@ -5036,7 +5036,7 @@ msgstr "새 리디렉션" msgid "New Section" msgstr "새 섹션" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "새 탭" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "다음" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "다음 페이지" @@ -5097,7 +5097,7 @@ msgstr "아직 {0}이 없습니다." msgid "No {0} yet. Create one to get started." msgstr "아직 {0}이(가) 없습니다. 하나를 생성하여 시작하세요." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "아직 404 오류가 기록되지 않았습니다." @@ -5110,7 +5110,7 @@ msgstr "대체 텍스트 없음" msgid "No API tokens yet. Create one to get started." msgstr "아직 API 토큰이 없습니다. 하나를 생성하여 시작하세요." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "아직 승인된 댓글이 없습니다." @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "선택된 작성자가 없습니다." msgid "No collections configured" msgstr "구성된 컬렉션이 없습니다." -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "검토를 기다리는 댓글이 없습니다." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "검색어와 일치하는 댓글이 없습니다." @@ -5211,7 +5211,7 @@ msgstr "아직 항목이 없습니다" msgid "No limit" msgstr "제한 없음" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "미디어를 찾을 수 없습니다." msgid "No menu items yet" msgstr "아직 메뉴 항목이 없습니다." -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "아직 메뉴가 없습니다" @@ -5287,11 +5287,11 @@ msgstr "구성된 플러그인 없음" msgid "No plugins found" msgstr "플러그인을 찾을 수 없습니다" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "최근 활동 없음" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "아직 리디렉션이 없습니다." @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "\"{debouncedQuery}\"에 대한 결과가 없습니다. 다른 검색어를 사용해 보세요." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "검색 결과가 없습니다" @@ -5334,11 +5334,11 @@ msgstr "검색 결과가 없습니다" msgid "No revisions yet" msgstr "아직 버전 기록이 없습니다." -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "사용 가능한 섹션이 없습니다." -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "섹션을 찾을 수 없습니다." @@ -5347,7 +5347,7 @@ msgstr "섹션을 찾을 수 없습니다." msgid "No sections yet" msgstr "아직 섹션이 없습니다." -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "스팸 댓글이 없습니다." @@ -5420,7 +5420,7 @@ msgstr "본인이 인식하는 코드만 승인하세요." msgid "Only email addresses from allowed domains can sign up." msgstr "허용된 도메인의 이메일 주소만 가입할 수 있습니다." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "소문자, 숫자, 하이픈만 가능" @@ -5544,8 +5544,8 @@ msgstr "단락" msgid "Parent" msgstr "상위 항목" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "리디렉션 루프의 일부" @@ -5618,7 +5618,7 @@ msgstr "패스키에는 HTTPS 또는 http://localhost(포트 포함)가 필요 msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "경로" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "보류 중" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "보류 중" @@ -5749,7 +5749,7 @@ msgstr "WordPress 사이트의 플러그인." msgid "Plugin Permissions" msgstr "플러그인 권한" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "플러그인이 업데이트되었습니다." msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "플러그인" @@ -5843,7 +5843,7 @@ msgstr "초안 미리보기" msgid "Previous" msgstr "이전" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "이전 페이지" @@ -5852,7 +5852,7 @@ msgstr "이전 페이지" msgid "Previous screenshot" msgstr "이전 스크린샷" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "기본 탐색" @@ -5991,7 +5991,7 @@ msgstr "수신자 이메일" msgid "Recovery link sent to {0}" msgstr "복구 링크가 {0}(으)로 전송되었습니다." -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "리디렉션 루프가 감지되었습니다." @@ -5999,9 +5999,9 @@ msgstr "리디렉션 루프가 감지되었습니다." msgid "Redirecting to login..." msgstr "로그인으로 리디렉션 중..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "리디렉션" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "등록이 취소되었거나 시간이 초과되었습니다. 다시 시도해 주세요." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "현재 창" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "저장" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "저장 중..." @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "댓글 검색" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "댓글 검색..." @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "미디어 검색" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "페이지 및 콘텐츠 검색..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "플러그인 검색..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "섹션 검색..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "소스 또는 대상 검색..." @@ -6658,9 +6658,9 @@ msgstr "섹션을 찾을 수 없음" msgid "Section title" msgstr "섹션 제목" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "섹션" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "보안 오류입니다. 보안 연결 상태인지 확인하세요." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "모두 선택" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "{0}의 댓글 선택" @@ -6917,14 +6917,14 @@ msgstr "사이트 설정" msgid "Setting up..." msgstr "설정 중..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "설정" @@ -7112,7 +7112,7 @@ msgstr "건너뜀" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "슬러그" @@ -7168,12 +7168,12 @@ msgstr "테마 정렬" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "소스" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "소스 경로" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "스팸" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "스팸" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "상태" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "상태 코드" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "사이트 설명" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "태그" @@ -7392,7 +7392,7 @@ msgstr "링크는 15분 후에 만료됩니다." msgid "The marketplace is empty. Check back later for new plugins." msgstr "마켓플레이스가 비어 있습니다. 나중에 새 플러그인이 등록될 예정입니다." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "메뉴가 삭제되었습니다." @@ -7449,7 +7449,7 @@ msgstr "테마가 제공되는 섹션은 삭제할 수 없습니다. 섹션을 msgid "Theme: {label}" msgstr "테마: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "테마 마켓플레이스" @@ -7504,7 +7504,7 @@ msgstr "이 플러그인에는 특별한 권한이 필요하지 않습니다." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "이 리디렉션 규칙은 영구적으로 삭제됩니다." @@ -7512,7 +7512,7 @@ msgstr "이 리디렉션 규칙은 영구적으로 삭제됩니다." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "이렇게 하면 \"{0}\"이(가) 영구적으로 삭제되고 모든 콘 msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "\"{0}\"이(가) 영구적으로 삭제됩니다. 이 작업은 취소할 수 없습니다." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "이 댓글이 영구적으로 삭제됩니다. 이 작업은 취소할 수 없습니다." @@ -7595,7 +7595,7 @@ msgstr "제목 구분 기호" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "닫기" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "플러그인을 설치하거나 astro.config.mjs에 추가하세요." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "선택" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "휴지통" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "휴지통" @@ -7693,7 +7693,7 @@ msgstr "휴지통" msgid "Trash is empty" msgstr "휴지통이 비어 있습니다." -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "휴지통이 비어 있습니다." @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "다른 검색어를 사용해 보세요." #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "검색을 조정해 보세요" @@ -7910,7 +7910,7 @@ msgstr "사이트 설정 업데이트" msgid "Update the {0} details" msgstr "{0} 세부정보 업데이트" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "이 리디렉션 규칙을 업데이트하세요." @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "URL용 식별자" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL용 식별자 (예: \"primary\", \"footer\")" @@ -8061,7 +8061,7 @@ msgstr "URL용 식별자 (예: \"primary\", \"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "패턴 일치를 위해 경로에 [param] 또는 [...rest]를 사용하세요." @@ -8118,8 +8118,8 @@ msgstr "사용자 세부정보" msgid "User not found" msgstr "사용자를 찾을 수 없습니다" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "사용자" @@ -8142,7 +8142,7 @@ msgstr "v{0} 사용 가능" msgid "Validation" msgstr "유효성 검증" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "이 경로를 방문하는 방문자에게는 오류가 표시됩니다." @@ -8267,7 +8267,7 @@ msgstr "이 브라우저에서는 WebAuthn이 지원되지 않습니다." msgid "Website" msgstr "웹사이트" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "본인의 콘텐츠를 작성하고 수정할 수 있습니다." msgid "You can manage content, media, menus, and taxonomies." msgstr "콘텐츠, 미디어, 메뉴, 택소노미를 관리할 수 있습니다." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/nb/messages.po b/packages/admin/src/locales/nb/messages.po index 4827b962c8..94a29156c0 100644 --- a/packages/admin/src/locales/nb/messages.po +++ b/packages/admin/src/locales/nb/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Gjest" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Lenket" @@ -35,7 +35,7 @@ msgstr " (åpnes i nytt vindu)" msgid " (selected)" msgstr " (valgt)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Velg --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# kommentar oppdatert} other {# kommentarer oppdatert}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# kommentar} other {# kommentarer}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# innholdsoppføring importert} other {# innholdsoppfø #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# oppføring} other {# oppføringer}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# innlegg} other {# innlegg}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# omdirigering er del av en løkke.} other {# omdirigeringer er del av en løkke.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# valgt} other {# valgt}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} påkrevd — du har {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# oppføring} other {# oppføringer}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# totalt} other {# totalt}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Vis # uendret} other {Vis # uendret}}" msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} lastet opp, {failed} mislyktes" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page or /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page or /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Velg \"All content\"" msgid "30 days" msgstr "30 dager" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Midlertidig" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Midlertidig (streng)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (streng)" @@ -497,15 +497,15 @@ msgstr "4. Klikk \"Download Export File\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Skriv inn \"EmDash\" og klikk \"Add New\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404-feil" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Kontoinformasjon" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Administrasjon" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Administrasjonsnavigasjon" @@ -803,7 +803,7 @@ msgstr "Alle" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Alle bylines" @@ -811,7 +811,7 @@ msgstr "Alle bylines" msgid "All capabilities" msgstr "Alle tillatelser" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Alle samlinger" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Alle kilder" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Alle statuser" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Alle typer" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Bruk lenke" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Godkjenn" @@ -989,7 +989,7 @@ msgstr "Godkjenn" msgid "approved" msgstr "godkjent" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Godkjent" @@ -1026,7 +1026,7 @@ msgstr "Er du sikker på at du vil slette «{0}»? Dette sletter også alt innho msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Er du sikker på at du vil slette feltet «{0}»?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Er du sikker på at du vil slette denne menyen? Dette sletter også alle menyelementer. Denne handlingen kan ikke angres." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Autentiseringen ble avbrutt eller tidsavbrutt. Prøv på nytt." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autoriserer …" msgid "Authors" msgstr "Forfattere" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (slug-endring)" @@ -1236,7 +1236,7 @@ msgstr "Før sending:" msgid "Bing Verification" msgstr "Bing-verifisering" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biografi" @@ -1259,7 +1259,7 @@ msgstr "Boolsk" msgid "Brief summary shown below the title in search results" msgstr "Kort sammendrag som vises under tittelen i søkeresultater" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Bla gjennom og installer utvidelser publisert til det desentraliserte registeret." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Punktliste" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Byline-skjema" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Bylines" @@ -1352,11 +1352,11 @@ msgstr "Kan vise innhold" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Bildetekst" msgid "Captions / Subtitles" msgstr "Bildetekster / undertekster" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategorier" @@ -1554,17 +1554,17 @@ msgstr "Klikk på lenken i e-posten for å logge inn." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kode" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Kommaseparerte nøkkelord for søk." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Kommentar" @@ -1654,9 +1654,9 @@ msgstr "Kommentar" msgid "Comment Detail" msgstr "Kommentardetaljer" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Kommentarer" @@ -1707,13 +1707,13 @@ msgstr "Koblet til {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Innhold" @@ -1771,9 +1771,9 @@ msgstr "Innholdsøyeblikksbilde:" msgid "Content to Import" msgstr "Innhold som skal importeres" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Innholdstyper" @@ -1855,7 +1855,7 @@ msgstr "Kunne ikke oppdage WordPress" msgid "Couldn't load byline fields." msgstr "Kunne ikke laste byline-felt." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Kunne ikke laste egendefinerte felt." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Antall" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Opprett" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Opprett en konto" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Opprett byline" @@ -1925,12 +1925,12 @@ msgstr "Opprett innholdstype" msgid "Create field" msgstr "Opprett felt" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Opprett meny" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Opprett ny meny" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Opprett personlige tilgangstokener for programmatisk API-tilgang" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Opprett omdirigering for {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Opprett omdirigering for denne stien" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Opprett omdirigeringsregler for å håndtere URL-endringer." @@ -1973,7 +1973,7 @@ msgstr "Opprett skjema og importer" msgid "Create Section" msgstr "Opprett seksjon" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Opprett seksjoner i seksjonsbiblioteket for å bruke dem her" @@ -1995,7 +1995,7 @@ msgstr "Opprett widgetområde" msgid "Create your account" msgstr "Opprett kontoen din" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Opprett din første navigasjonsmeny for å komme i gang" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Oppretter samlinger og felter …" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "mørk" msgid "Dark" msgstr "Mørk" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Dashbord" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Dato" @@ -2186,8 +2186,8 @@ msgstr "Definer strukturen for innholdet ditt" msgid "Defined in code" msgstr "Definert i kode" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Definert i kode" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Slett" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Slett feltet {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Slett menyen {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "Slette byline-felt?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Slette byline?" @@ -2263,7 +2263,7 @@ msgstr "Slette byline?" msgid "Delete column" msgstr "Slett kolonne" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Slette kommentar?" @@ -2292,11 +2292,11 @@ msgstr "Slett bilde" msgid "Delete Media?" msgstr "Slette medier?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Slett meny" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Slett permanent" @@ -2309,16 +2309,16 @@ msgstr "Slett permanent" msgid "Delete Permanently?" msgstr "Slette permanent?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Slett omdirigering" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Slett omdirigering {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Slette omdirigering?" @@ -2348,18 +2348,18 @@ msgstr "Slettet" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Sletting av \"{0}\" fjerner også {1, plural, one {# lagret verdi} other {# lagrede verdier}} på tvers av alle bylines. Dette kan ikke angres." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Sletter …" @@ -2414,11 +2414,11 @@ msgstr "Beskrivelse" msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Mål" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Målsti" @@ -2462,7 +2462,7 @@ msgstr "Deaktiver" msgid "Disable plugin" msgstr "Deaktiver utvidelse" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Deaktiver omdirigering" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Deaktivere bruker?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Visningsnavn" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Visningsnavn for administratorgrensesnittet" @@ -2706,7 +2706,7 @@ msgstr "Dupliser {title}" msgid "e.g. application/zip or .pdf" msgstr "f.eks. application/zip eller .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "f.eks. import, blogg" @@ -2722,7 +2722,7 @@ msgstr "f.eks. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Rediger" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Rediger {0}" @@ -2782,16 +2782,16 @@ msgstr "Rediger menyelement" msgid "Edit menu items" msgstr "Rediger menyelementer" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Rediger omdirigering" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Rediger omdirigering" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Rediger omdirigering {0}" @@ -2899,12 +2899,12 @@ msgstr "Aktiver fulltekstsøk på denne samlingen" msgid "Enable plugin" msgstr "Aktiver utvidelse" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Aktiver omdirigering" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Aktivert" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Kunne ikke laste inn bylines: {0}" @@ -3387,7 +3387,7 @@ msgstr "Kunne ikke laste inn utvidelse" msgid "Failed to load plugins: {0}" msgstr "Kunne ikke laste inn utvidelser: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Kunne ikke laste inn utvidelser. Registeraggregatoren er kanskje utilgjengelig." @@ -3701,7 +3701,7 @@ msgstr "" msgid "Filter by capability" msgstr "Filtrer etter kapabilitet" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtrer etter samling" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filtrer etter kilde" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filtrer etter status" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filtrer etter type" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filtrer byline-type" @@ -3806,7 +3806,7 @@ msgstr "" msgid "Grid view" msgstr "Rutenettvisning" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Gruppe (valgfri)" @@ -3814,11 +3814,11 @@ msgstr "Gruppe (valgfri)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Gjestebyline" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Kun gjest" @@ -3882,8 +3882,8 @@ msgstr "Skjul token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarkisk (som kategorier, med foreldre/barn-relasjoner)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Treff" @@ -3985,8 +3985,8 @@ msgstr "bilde-URL-er oppdatert i" msgid "Images" msgstr "Bilder" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importer" @@ -4153,7 +4153,7 @@ msgstr "Sett inn lenke" msgid "Insert raw HTML" msgstr "Sett inn rå HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Sett inn seksjon" @@ -4184,7 +4184,7 @@ msgstr "Installasjon" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Installert" @@ -4316,7 +4316,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Sist innlogget" msgid "Last Login" msgstr "Sist innlogget" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Sist sett" @@ -4426,11 +4426,11 @@ msgstr "Lenke til et annet innholdselement" msgid "Linked Accounts ({0})" msgstr "Tilknyttede kontoer ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Kun tilknyttet" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Tilknyttet bruker" @@ -4454,9 +4454,9 @@ msgstr "Live-visning" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Last inn mer" @@ -4480,7 +4480,7 @@ msgstr "Laster bylinjefelt…" msgid "Loading collections..." msgstr "Laster samlinger..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Laster kommentarer..." @@ -4501,7 +4501,7 @@ msgstr "Laster redigering..." msgid "Loading menu..." msgstr "Laster meny..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Laster menyer..." @@ -4509,11 +4509,11 @@ msgstr "Laster menyer..." msgid "Loading plugins..." msgstr "Laster utvidelser..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Laster videresendinger..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Laster seksjoner..." @@ -4545,7 +4545,7 @@ msgstr "Laster moduler..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Laster moduler..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Laster..." @@ -4618,7 +4618,7 @@ msgstr "Send nettverksforespørsler" msgid "Make network requests to any host (unrestricted)" msgstr "Send nettverksforespørsler til alle verter (ubegrenset)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Administrer" @@ -4640,11 +4640,11 @@ msgstr "Administrer innholdsmoduler i modulområdene dine" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Administrer installerte utvidelser. Aktiver eller deaktiver utvidelser for å styre funksjonaliteten deres." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Administrer navigasjonsmenyer for nettstedet ditt" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Administrer URL-videresendinger og se 404-feil." @@ -4660,7 +4660,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manuelt" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Tilordne WordPress-bruker {0} til EmDash-bruker" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Merk som spam" @@ -4697,7 +4697,7 @@ msgstr "markedsplass" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Markedsplass" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Medieimport fullført" msgid "Media import was skipped" msgstr "Medieimport ble hoppet over" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Mediebibliotek" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menyen «{0}» ({1}) er opprettet." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menyen «{0}» er opprettet." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Meny opprettet" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Meny slettet" @@ -4811,9 +4811,9 @@ msgstr "Fant ikke menyen" msgid "Menu order has been updated." msgstr "Menyrekkefølgen er oppdatert." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menyer" @@ -4961,7 +4961,7 @@ msgstr "Bloggen min" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Navn og etikett er påkrevd" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Navnet må starte med en bokstav og kan kun inneholde små bokstaver, tall og understreker" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigasjon" @@ -4992,7 +4992,7 @@ msgstr "Aldri" msgid "new" msgstr "ny" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Ny" @@ -5030,8 +5030,8 @@ msgstr "Nytt felt" msgid "New public routes" msgstr "Nye offentlige ruter" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Ny omdirigering" @@ -5039,7 +5039,7 @@ msgstr "Ny omdirigering" msgid "New Section" msgstr "Ny seksjon" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "ny fane" @@ -5067,7 +5067,7 @@ msgstr "Nyheter" msgid "Next" msgstr "Neste" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Neste side" @@ -5100,7 +5100,7 @@ msgstr "Ingen {0} ennå." msgid "No {0} yet. Create one to get started." msgstr "Ingen {0} ennå. Opprett en for å komme i gang." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Ingen 404-feil registrert ennå." @@ -5113,7 +5113,7 @@ msgstr "Ingen alt-tekst" msgid "No API tokens yet. Create one to get started." msgstr "Ingen API-tokener ennå. Opprett en for å komme i gang." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Ingen godkjente kommentarer ennå." @@ -5125,7 +5125,7 @@ msgstr "Ingen byline-felt ennå." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Ingen bylines tilgjengelig på {entryLocale}. Opprett en variant fra Bylines-siden før du krediterer en på denne oppføringen." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Fant ingen bylines" @@ -5137,11 +5137,11 @@ msgstr "Ingen bylines valgt." msgid "No collections configured" msgstr "Ingen samlinger konfigurert" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Ingen kommentarer venter på moderering." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Ingen kommentarer samsvarer med søket ditt." @@ -5214,7 +5214,7 @@ msgstr "Ingen elementer ennå" msgid "No limit" msgstr "Ingen grense" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Ingen tilknyttet bruker" @@ -5257,7 +5257,7 @@ msgstr "Fant ingen medier" msgid "No menu items yet" msgstr "Ingen menyelementer ennå" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Ingen menyer ennå" @@ -5290,11 +5290,11 @@ msgstr "Ingen utvidelser konfigurert" msgid "No plugins found" msgstr "Fant ingen utvidelser" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Ingen utvidelser er publisert til dette registeret ennå." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Ingen utvidelser samsvarer med \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "" msgid "No recent activity" msgstr "Ingen nylig aktivitet" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Ingen omdirigeringer ennå" @@ -5329,7 +5329,7 @@ msgstr "Ingen resultater for \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Ingen resultater for \"{debouncedQuery}\". Prøv et annet søkeord." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Fant ingen resultater" @@ -5337,11 +5337,11 @@ msgstr "Fant ingen resultater" msgid "No revisions yet" msgstr "Ingen revisjoner ennå" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Ingen seksjoner tilgjengelig" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Fant ingen seksjoner" @@ -5350,7 +5350,7 @@ msgstr "Fant ingen seksjoner" msgid "No sections yet" msgstr "Ingen seksjoner ennå" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Ingen useriøse kommentarer." @@ -5423,7 +5423,7 @@ msgstr "Autoriser bare koder du kjenner igjen." msgid "Only email addresses from allowed domains can sign up." msgstr "Bare e-postadresser fra tillatte domener kan registrere seg." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Kun små bokstaver, tall og bindestreker" @@ -5550,8 +5550,8 @@ msgstr "Avsnitt" msgid "Parent" msgstr "Overordnet" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Del av en omdirigeringssløyfe" @@ -5624,7 +5624,7 @@ msgstr "Passnøkler krever HTTPS eller http://localhost (med porten din); dette msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Sti" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "venter" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Venter" @@ -5755,7 +5755,7 @@ msgstr "-utvidelsen på WordPress-nettstedet ditt." msgid "Plugin Permissions" msgstr "Tillatelser for utvidelse" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Utvidelsesregister" @@ -5780,12 +5780,12 @@ msgstr "Utvidelse oppdatert" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Utvidelser" @@ -5849,7 +5849,7 @@ msgstr "Forhåndsvis kladd" msgid "Previous" msgstr "Forrige" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Forrige side" @@ -5858,7 +5858,7 @@ msgstr "Forrige side" msgid "Previous screenshot" msgstr "Forrige skjermbilde" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Hovednavigasjon" @@ -5997,7 +5997,7 @@ msgstr "Mottakerens e-post" msgid "Recovery link sent to {0}" msgstr "Gjenopprettingslenke sendt til {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Omdirigeringssløyfe oppdaget" @@ -6005,9 +6005,9 @@ msgstr "Omdirigeringssløyfe oppdaget" msgid "Redirecting to login..." msgstr "Omdirigerer til innlogging …" -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Omdirigeringer" @@ -6048,7 +6048,7 @@ msgstr "Registrering mislyktes" msgid "Registration was cancelled or timed out. Please try again." msgstr "Registreringen ble avbrutt eller fikk tidsavbrudd. Prøv på nytt." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Register" @@ -6350,11 +6350,11 @@ msgstr "Samme vindu" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Lagre" @@ -6410,7 +6410,7 @@ msgstr "Lagret \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "Lagret \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Lagrer …" @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Søk etter navn eller e-post …" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Søk i bylines" @@ -6558,11 +6558,11 @@ msgstr "Søk i bylines" msgid "Search bylines to add..." msgstr "Søk i bylines for å legge til …" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Søk i kommentarer" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Søk i kommentarer …" @@ -6587,26 +6587,26 @@ msgstr "" msgid "Search media" msgstr "Søk i medier" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Søk i sider og innhold …" #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Søk i utvidelser" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Søk i utvidelser …" -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Søk i seksjoner …" -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Søk i kilde eller destinasjon …" @@ -6664,9 +6664,9 @@ msgstr "Seksjon ikke funnet" msgid "Section title" msgstr "Seksjonstittel" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Seksjoner" @@ -6717,7 +6717,7 @@ msgstr "Sikkerhetskontakter" msgid "Security error. Make sure you're on a secure connection." msgstr "Sikkerhetsfeil. Sørg for at du er på en sikker tilkobling." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Velg en komponent …" msgid "Select a menu..." msgstr "Velg en meny …" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Velg alle" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Velg kommentar fra {0}" @@ -6923,14 +6923,14 @@ msgstr "Sett opp nettstedet ditt" msgid "Setting up..." msgstr "Setter opp …" -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Innstillinger" @@ -7118,7 +7118,7 @@ msgstr "Hoppet over" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Sorter temaer" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Kilde" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Kildesti" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "søppelpost" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Søppelpost" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Statuskode" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "Slagord" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Stikkord" @@ -7398,7 +7398,7 @@ msgstr "Lenken utløper om 15 minutter." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Markedsplassen er tom. Kom tilbake senere for nye utvidelser." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Menyen er slettet." @@ -7455,7 +7455,7 @@ msgstr "Seksjoner fra temaet kan ikke slettes. Rediger seksjonen for å lage en msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Temaer" @@ -7510,7 +7510,7 @@ msgstr "Denne utvidelsen krever ingen spesielle tillatelser." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Denne utgiveren hevder å ha et navn de ikke kunne bevise at de eier — muligens et forsøk på å utgi seg for å være noen andre. Installasjon er deaktivert. Hvis du kjenner utgiveren og stoler på dem, be dem rette opp identitetsoppsettet før du prøver på nytt." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Denne omdirigeringsregelen vil bli fjernet permanent." @@ -7518,7 +7518,7 @@ msgstr "Denne omdirigeringsregelen vil bli fjernet permanent." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Denne versjonen krever et nyere miljø enn nettstedet ditt kjører på nå. Oppgrader før du installerer." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Dette fjerner forfatterprofilen. Lenker til forfattersignaturer i innhold fjernes, og hovedpekere tømmes." @@ -7556,7 +7556,7 @@ msgstr "Dette sletter \"{0}\" permanent og fjerner det fra alt innhold." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Dette sletter \"{0}\" permanent. Denne handlingen kan ikke angres." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Dette sletter denne kommentaren permanent. Denne handlingen kan ikke angres." @@ -7601,7 +7601,7 @@ msgstr "Tittelskilletegn" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "for å lukke" @@ -7613,7 +7613,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "for å installere utvidelser, eller legg dem til i astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "for å velge" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "papirkurv" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Papirkurv" @@ -7699,7 +7699,7 @@ msgstr "Papirkurv" msgid "Trash is empty" msgstr "Papirkurven er tom" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Papirkurven er tom." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Prøv et annet søkeord" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Prøv å justere søket" @@ -7916,7 +7916,7 @@ msgstr "Oppdater nettstedinnstillinger" msgid "Update the {0} details" msgstr "Oppdater detaljene for {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Oppdater denne omdirigeringsregelen." @@ -8059,7 +8059,7 @@ msgstr "URL-mønster" msgid "URL-friendly identifier" msgstr "URL-vennlig identifikator" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-vennlig identifikator (f.eks. \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-vennlig identifikator (f.eks. \"primary\", \"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Bruk [param] eller [...rest] i stier for mønstertilpasning." @@ -8124,8 +8124,8 @@ msgstr "Brukerdetaljer" msgid "User not found" msgstr "Fant ikke brukeren" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Brukere" @@ -8148,7 +8148,7 @@ msgstr "v{0} tilgjengelig" msgid "Validation" msgstr "Validering" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Verifisert utgiver" @@ -8221,7 +8221,7 @@ msgstr "Vis kilde" msgid "View the {license} license on spdx.org" msgstr "Vis {license}-lisensen på spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Besøkende som åpner disse stiene, vil se en feil." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn støttes ikke i denne nettleseren" msgid "Website" msgstr "Nettsted" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Nettsted-URL" @@ -8374,9 +8374,9 @@ msgstr "Widgettittel" msgid "Widget updated" msgstr "Widget oppdatert" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Du kan opprette og redigere ditt eget innhold." msgid "You can manage content, media, menus, and taxonomies." msgstr "Du kan administrere innhold, medier, menyer og taksonomier." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Du kan fortsatt redigere de faste feltene over. Lagring berører ikke lagrede verdier for tilpassede felt." diff --git a/packages/admin/src/locales/nl/messages.po b/packages/admin/src/locales/nl/messages.po index ae1fca81df..de346076e1 100644 --- a/packages/admin/src/locales/nl/messages.po +++ b/packages/admin/src/locales/nl/messages.po @@ -13,11 +13,11 @@ msgstr "" "Last-Translator: \n" "Language-Team: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Gast" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Gekoppeld" @@ -35,7 +35,7 @@ msgstr " (opent in nieuw venster)" msgid " (selected)" msgstr " (geselecteerd)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Selecteer --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# reactie bijgewerkt} other {# reacties bijgewerkt}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# reactie} other {# reacties}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# content-item geïmporteerd} other {# content-items ge #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# item} other {# items}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# bericht} other {# berichten}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# omleiding maakt deel uit van een lus.} other {# omleidingen maken deel uit van een lus.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# geselecteerd} other {# geselecteerd}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} vereist — je hebt {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {# item naar de prullenbak verplaatsen? Je k msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# item} other {# items}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# in totaal} other {# in totaal}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {# ongewijzigde weergeven} other {# ongewij msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} geüpload, {failed} mislukt" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/nieuwe-pagina of /artikelen/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/oude-pagina of /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Selecteer \"Alle content\"" msgid "30 days" msgstr "30 dagen" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Tijdelijk" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Tijdelijk (strikt)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (strikt)" @@ -497,15 +497,15 @@ msgstr "4. Klik op \"Exportbestand downloaden\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Voer \"EmDash\" in en klik op \"Nieuwe toevoegen\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404-fouten" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Content verwijderd (Gone)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Niet beschikbaar om juridische redenen" @@ -582,7 +582,7 @@ msgstr "Accountgegevens" msgid "ACF Fields" msgstr "ACF-velden" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Adminnavigatie" @@ -803,7 +803,7 @@ msgstr "Alle" msgid "All authors" msgstr "Alle auteurs" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Alle auteursvermeldingen" @@ -811,7 +811,7 @@ msgstr "Alle auteursvermeldingen" msgid "All capabilities" msgstr "Alle mogelijkheden" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Alle collecties" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Alle bronnen" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Alle statussen" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Alle types" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Link toepassen" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Goedkeuren" @@ -989,7 +989,7 @@ msgstr "Goedkeuren" msgid "approved" msgstr "goedgekeurd" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Goedgekeurd" @@ -1026,7 +1026,7 @@ msgstr "Weet je zeker dat je \"{0}\" wilt verwijderen? Hiermee wordt ook alle co msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Weet je zeker dat je het veld \"{0}\" wilt verwijderen?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Weet je zeker dat je dit menu wilt verwijderen? Hiermee worden ook alle menu-items verwijderd. Deze actie kan niet ongedaan worden gemaakt." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Authenticatie is geannuleerd of verlopen. Probeer het opnieuw." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autoriseren..." msgid "Authors" msgstr "Auteurs" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "automatisch" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Automatisch (wijziging van slug)" @@ -1236,7 +1236,7 @@ msgstr "Voor verzenden:" msgid "Bing Verification" msgstr "Bing-verificatie" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Bio" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Korte samenvatting die in zoekresultaten onder de titel wordt getoond" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Blader door en installeer plugins die in de gedecentraliseerde registry zijn gepubliceerd." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Opsommingslijst" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Schema voor auteursvermeldingen" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Schema voor auteursvermeldingen" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Auteursvermeldingen" @@ -1352,11 +1352,11 @@ msgstr "Kan content bekijken" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Bijschrift" msgid "Captions / Subtitles" msgstr "Bijschriften / ondertitels" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categorieën" @@ -1554,17 +1554,17 @@ msgstr "Klik op de link in de e-mail om in te loggen." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Instellingen sluiten" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Code" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Door komma's gescheiden trefwoorden voor zoeken." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Reactie" @@ -1654,9 +1654,9 @@ msgstr "Reactie" msgid "Comment Detail" msgstr "Reactiedetails" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Reacties" @@ -1707,13 +1707,13 @@ msgstr "Verbonden op {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Content" @@ -1771,9 +1771,9 @@ msgstr "Snapshot van content:" msgid "Content to Import" msgstr "Te importeren content" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Contenttypes" @@ -1855,7 +1855,7 @@ msgstr "Kan WordPress niet detecteren" msgid "Couldn't load byline fields." msgstr "Kan auteursvermeldingsvelden niet laden." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Kan aangepaste velden niet laden." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Aantal" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Aanmaken" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Een account aanmaken" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Auteursvermelding aanmaken" @@ -1925,12 +1925,12 @@ msgstr "Contenttype aanmaken" msgid "Create field" msgstr "Veld aanmaken" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Menu aanmaken" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Nieuw menu aanmaken" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Maak persoonlijke toegangstokens aan voor programmatische API-toegang" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Omleiding aanmaken voor {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Omleiding aanmaken voor dit pad" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Maak omleidingsregels aan om URL-wijzigingen te beheren." @@ -1973,7 +1973,7 @@ msgstr "Schema aanmaken & importeren" msgid "Create Section" msgstr "Sectie aanmaken" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Maak secties aan in de sectiebibliotheek om ze hier te gebruiken" @@ -1995,7 +1995,7 @@ msgstr "Widgetgebied aanmaken" msgid "Create your account" msgstr "Maak je account aan" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Maak je eerste navigatiemenu aan om te beginnen" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Collecties en velden aanmaken..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "donker" msgid "Dark" msgstr "Donker" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Dashboard" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Datum" @@ -2186,8 +2186,8 @@ msgstr "Definieer de structuur van je content" msgid "Defined in code" msgstr "Gedefinieerd in code" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Gedefinieerd in code" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Verwijderen" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Veld {0} verwijderen" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Menu {0} verwijderen" @@ -2255,7 +2255,7 @@ msgstr "Back-up verwijderen?" msgid "Delete byline field?" msgstr "Auteursvermeldingsveld verwijderen?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Auteursvermelding verwijderen?" @@ -2263,7 +2263,7 @@ msgstr "Auteursvermelding verwijderen?" msgid "Delete column" msgstr "Kolom verwijderen" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Reactie verwijderen?" @@ -2292,11 +2292,11 @@ msgstr "Afbeelding verwijderen" msgid "Delete Media?" msgstr "Media verwijderen?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Menu verwijderen" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Definitief verwijderen" @@ -2309,16 +2309,16 @@ msgstr "Definitief verwijderen" msgid "Delete Permanently?" msgstr "Definitief verwijderen?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Omleiding verwijderen" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Omleiding {0} verwijderen" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Omleiding verwijderen?" @@ -2348,18 +2348,18 @@ msgstr "Verwijderd" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Het verwijderen van \"{0}\" verwijdert ook {1, plural, one {# opgeslagen waarde} other {# opgeslagen waarden}} in alle auteursvermeldingen. Dit kan niet ongedaan worden gemaakt." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Verwijderen..." @@ -2414,11 +2414,11 @@ msgstr "Beschrijving" msgid "Description (optional)" msgstr "Beschrijving (optioneel)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Bestemming" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Bestemmingspad" @@ -2462,7 +2462,7 @@ msgstr "Uitschakelen" msgid "Disable plugin" msgstr "Plugin uitschakelen" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Omleiding uitschakelen" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Gebruiker uitschakelen?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Een lijst met categorieën weergeven" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Weergavenaam" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Weergavenaam voor de admin-interface" @@ -2706,7 +2706,7 @@ msgstr "{title} dupliceren" msgid "e.g. application/zip or .pdf" msgstr "bijv. application/zip of .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "bijv. import, blog" @@ -2722,7 +2722,7 @@ msgstr "bijv. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Bewerken" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "{0} bewerken" @@ -2782,16 +2782,16 @@ msgstr "Menu-item bewerken" msgid "Edit menu items" msgstr "Menu-items bewerken" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Omleiding bewerken" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Omleiding bewerken" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Omleiding {0} bewerken" @@ -2899,12 +2899,12 @@ msgstr "Zoeken in volledige tekst inschakelen voor deze collectie" msgid "Enable plugin" msgstr "Plugin inschakelen" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Omleiding inschakelen" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Ingeschakeld" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Laden van back-upinstellingen mislukt" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Laden van auteursvermeldingen mislukt: {0}" @@ -3387,7 +3387,7 @@ msgstr "Laden van plugin mislukt" msgid "Failed to load plugins: {0}" msgstr "Laden van plugins mislukt: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Laden van plugins mislukt. De registry-aggregator is mogelijk niet bereikbaar." @@ -3701,7 +3701,7 @@ msgstr "Filteren op auteur" msgid "Filter by capability" msgstr "Filteren op mogelijkheid" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filteren op collectie" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filteren op bron" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filteren op status" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filteren op type" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filteren op type auteursvermelding" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Rasterweergave" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Groep (optioneel)" @@ -3814,11 +3814,11 @@ msgstr "Groep (optioneel)" msgid "Group by" msgstr "Groeperen op" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Auteursvermelding voor gast" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Alleen gasten" @@ -3882,8 +3882,8 @@ msgstr "Token verbergen" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hiërarchisch (zoals categorieën, met bovenliggende/onderliggende relaties)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Hits" @@ -3985,8 +3985,8 @@ msgstr "afbeeldings-URL's bijgewerkt in" msgid "Images" msgstr "Afbeeldingen" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importeren" @@ -4153,7 +4153,7 @@ msgstr "Link invoegen" msgid "Insert raw HTML" msgstr "Onbewerkte HTML invoegen" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Sectie invoegen" @@ -4184,7 +4184,7 @@ msgstr "Installatie" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Geïnstalleerd" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Laatst ingelogd" msgid "Last Login" msgstr "Laatst ingelogd" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Laatst gezien" @@ -4426,11 +4426,11 @@ msgstr "Link naar een ander content-item" msgid "Linked Accounts ({0})" msgstr "Gekoppelde accounts ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Alleen gekoppeld" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Gekoppelde gebruiker" @@ -4454,9 +4454,9 @@ msgstr "Live weergave" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Meer laden" @@ -4480,7 +4480,7 @@ msgstr "Auteursvermeldingsvelden laden…" msgid "Loading collections..." msgstr "Collecties laden..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Reacties laden..." @@ -4501,7 +4501,7 @@ msgstr "Editor laden..." msgid "Loading menu..." msgstr "Menu laden..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Menu's laden..." @@ -4509,11 +4509,11 @@ msgstr "Menu's laden..." msgid "Loading plugins..." msgstr "Plugins laden..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Omleidingen laden..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Secties laden..." @@ -4545,7 +4545,7 @@ msgstr "Widgets laden..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Widgets laden..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Laden..." @@ -4618,7 +4618,7 @@ msgstr "Netwerkverzoeken uitvoeren" msgid "Make network requests to any host (unrestricted)" msgstr "Netwerkverzoeken uitvoeren naar elke host (onbeperkt)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Beheren" @@ -4640,11 +4640,11 @@ msgstr "Beheer contentwidgets in je widgetgebieden" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Beheer geïnstalleerde plugins. Schakel plugins in of uit om hun functionaliteit te regelen." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Beheer navigatiemenu's voor je site" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Beheer URL-omleidingen en bekijk 404-fouten." @@ -4660,7 +4660,7 @@ msgstr "Beheerd door {providerName}" msgid "Managed by an external media provider" msgstr "Beheerd door een externe mediaprovider" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Handmatig" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "WordPress-gebruiker {0} koppelen aan EmDash-gebruiker" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "{0} markeren als Gone (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Markeren als Gone (410) — vertelt zoekmachines dat het permanent verwijderd is" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Markeren als spam" @@ -4697,7 +4697,7 @@ msgstr "marketplace" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Media-import voltooid" msgid "Media import was skipped" msgstr "Media-import is overgeslagen" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Mediabibliotheek" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menu \"{0}\" ({1}) aangemaakt." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menu \"{0}\" is aangemaakt." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu aangemaakt" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu verwijderd" @@ -4811,9 +4811,9 @@ msgstr "Menu niet gevonden" msgid "Menu order has been updated." msgstr "Menuvolgorde is bijgewerkt." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menu's" @@ -4961,7 +4961,7 @@ msgstr "Mijn geweldige blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Naam en label zijn verplicht" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Naam moet beginnen met een letter en mag alleen kleine letters, cijfers en underscores bevatten" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigatie" @@ -4992,7 +4992,7 @@ msgstr "Nooit" msgid "new" msgstr "nieuw" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Nieuw" @@ -5030,8 +5030,8 @@ msgstr "Nieuw veld" msgid "New public routes" msgstr "Nieuwe openbare routes" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Nieuwe omleiding" @@ -5039,7 +5039,7 @@ msgstr "Nieuwe omleiding" msgid "New Section" msgstr "Nieuwe sectie" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "nieuw tabblad" @@ -5067,7 +5067,7 @@ msgstr "Nieuws" msgid "Next" msgstr "Volgende" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Volgende pagina" @@ -5100,7 +5100,7 @@ msgstr "Nog geen {0}." msgid "No {0} yet. Create one to get started." msgstr "Nog geen {0}. Maak er een aan om te beginnen." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Nog geen 404-fouten geregistreerd." @@ -5113,7 +5113,7 @@ msgstr "Geen alt-tekst" msgid "No API tokens yet. Create one to get started." msgstr "Nog geen API-tokens. Maak er een aan om te beginnen." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Nog geen goedgekeurde reacties." @@ -5125,7 +5125,7 @@ msgstr "Nog geen auteursvermeldingsvelden." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Geen auteursvermeldingen beschikbaar in {entryLocale}. Maak een variant aan via de pagina Auteursvermeldingen voordat je er een aan dit item toekent." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Geen auteursvermeldingen gevonden" @@ -5137,11 +5137,11 @@ msgstr "Geen auteursvermeldingen geselecteerd." msgid "No collections configured" msgstr "Geen collecties geconfigureerd" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Geen reacties in afwachting van moderatie." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Geen reacties gevonden voor je zoekopdracht." @@ -5214,7 +5214,7 @@ msgstr "Nog geen items" msgid "No limit" msgstr "Geen limiet" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Geen gekoppelde gebruiker" @@ -5257,7 +5257,7 @@ msgstr "Geen media gevonden" msgid "No menu items yet" msgstr "Nog geen menu-items" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Nog geen menu's" @@ -5290,11 +5290,11 @@ msgstr "Geen plugins geconfigureerd" msgid "No plugins found" msgstr "Geen plugins gevonden" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Er zijn nog geen plugins gepubliceerd in deze registry." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Geen plugins komen overeen met \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "Geen openbare URL beschikbaar" msgid "No recent activity" msgstr "Geen recente activiteit" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Nog geen omleidingen" @@ -5329,7 +5329,7 @@ msgstr "Geen resultaten voor \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Geen resultaten voor \"{debouncedQuery}\". Probeer een andere zoekterm." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Geen resultaten gevonden" @@ -5337,11 +5337,11 @@ msgstr "Geen resultaten gevonden" msgid "No revisions yet" msgstr "Nog geen revisies" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Geen secties beschikbaar" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Geen secties gevonden" @@ -5350,7 +5350,7 @@ msgstr "Geen secties gevonden" msgid "No sections yet" msgstr "Nog geen secties" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Geen spamreacties." @@ -5423,7 +5423,7 @@ msgstr "Autoriseer alleen codes die je herkent." msgid "Only email addresses from allowed domains can sign up." msgstr "Alleen e-mailadressen van toegestane domeinen kunnen zich registreren." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Alleen kleine letters, cijfers en koppeltekens" @@ -5550,8 +5550,8 @@ msgstr "Alinea" msgid "Parent" msgstr "Bovenliggend item" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Onderdeel van een omleidingslus" @@ -5624,7 +5624,7 @@ msgstr "Passkeys vereisen HTTPS of http://localhost (met je poort); deze hostnam msgid "Paste your migration key" msgstr "Plak je migratiesleutel" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Pad" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "in afwachting" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "In afwachting" @@ -5755,7 +5755,7 @@ msgstr "plugin op je WordPress-site." msgid "Plugin Permissions" msgstr "Rechten van de plugin" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Plugin Registry" @@ -5780,12 +5780,12 @@ msgstr "Plugin bijgewerkt" msgid "Plugin widget error" msgstr "Fout in plugin-widget" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugins" @@ -5849,7 +5849,7 @@ msgstr "Voorbeeld van concept bekijken" msgid "Previous" msgstr "Vorige" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Vorige pagina" @@ -5858,7 +5858,7 @@ msgstr "Vorige pagina" msgid "Previous screenshot" msgstr "Vorige screenshot" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Primaire navigatie" @@ -5997,7 +5997,7 @@ msgstr "E-mailadres ontvanger" msgid "Recovery link sent to {0}" msgstr "Herstellink verzonden naar {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Omleidingslus gedetecteerd" @@ -6005,9 +6005,9 @@ msgstr "Omleidingslus gedetecteerd" msgid "Redirecting to login..." msgstr "Je wordt doorgestuurd naar de inlogpagina..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Omleidingen" @@ -6048,7 +6048,7 @@ msgstr "Registratie mislukt" msgid "Registration was cancelled or timed out. Please try again." msgstr "Registratie is geannuleerd of verlopen. Probeer het opnieuw." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registry" @@ -6350,11 +6350,11 @@ msgstr "Zelfde venster" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Opslaan" @@ -6410,7 +6410,7 @@ msgstr "\"{0}\" opgeslagen." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "\"{0}\" opgeslagen." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Opslaan..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Zoeken op naam of e-mailadres..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Auteursvermeldingen zoeken" @@ -6558,11 +6558,11 @@ msgstr "Auteursvermeldingen zoeken" msgid "Search bylines to add..." msgstr "Zoek auteursvermeldingen om toe te voegen..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Reacties zoeken" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Reacties zoeken..." @@ -6587,26 +6587,26 @@ msgstr "Zoekformulier" msgid "Search media" msgstr "Media zoeken" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Pagina's en content zoeken..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Plugins zoeken" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Plugins zoeken..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Secties zoeken..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Zoeken op bron of bestemming..." @@ -6664,9 +6664,9 @@ msgstr "Sectie niet gevonden" msgid "Section title" msgstr "Sectietitel" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Secties" @@ -6717,7 +6717,7 @@ msgstr "Beveiligingscontacten" msgid "Security error. Make sure you're on a secure connection." msgstr "Beveiligingsfout. Zorg dat je een beveiligde verbinding gebruikt." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Selecteer een component..." msgid "Select a menu..." msgstr "Selecteer een menu..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Alles selecteren" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Alles op deze pagina selecteren" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Reactie van {0} selecteren" @@ -6923,14 +6923,14 @@ msgstr "Stel je site in" msgid "Setting up..." msgstr "Instellen..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Instellingen" @@ -7118,7 +7118,7 @@ msgstr "Overgeslagen" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Thema's sorteren" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Bron" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Bronpad" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Statuscode" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "Tagline" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Tags" @@ -7398,7 +7398,7 @@ msgstr "De link verloopt over 15 minuten." msgid "The marketplace is empty. Check back later for new plugins." msgstr "De marketplace is leeg. Kom later terug voor nieuwe plugins." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Het menu is verwijderd." @@ -7455,7 +7455,7 @@ msgstr "Secties uit het thema kunnen niet worden verwijderd. Bewerk de sectie om msgid "Theme: {label}" msgstr "Thema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Thema's" @@ -7510,7 +7510,7 @@ msgstr "Deze plugin vereist geen speciale rechten." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Deze uitgever claimt een naam waarvan niet kon worden aangetoond dat die van hem is — mogelijk doet iemand zich voor als een ander. Installeren is uitgeschakeld. Als je de uitgever kent en vertrouwt, vraag dan om de identiteitsconfiguratie te herstellen voordat je het opnieuw probeert." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Deze omleidingsregel wordt permanent verwijderd." @@ -7518,7 +7518,7 @@ msgstr "Deze omleidingsregel wordt permanent verwijderd." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Deze release vereist een nieuwere omgeving dan waar je site momenteel op draait. Voer eerst een upgrade uit voordat je installeert." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Dit verwijdert het profiel van de auteursvermelding. Auteursvermeldingskoppelingen in content worden verwijderd en leadverwijzingen worden gewist." @@ -7556,7 +7556,7 @@ msgstr "Dit verwijdert \"{0}\" permanent en haalt het uit alle content." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Dit verwijdert \"{0}\" permanent. Deze actie kan niet ongedaan worden gemaakt." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Dit verwijdert deze reactie permanent. Deze actie kan niet ongedaan worden gemaakt." @@ -7601,7 +7601,7 @@ msgstr "Titelscheidingsteken" msgid "to" msgstr "tot" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "om te sluiten" @@ -7613,7 +7613,7 @@ msgstr "Einddatum" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "om plugins te installeren, of voeg ze toe aan je astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "om te selecteren" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "prullenbak" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Prullenbak" @@ -7699,7 +7699,7 @@ msgstr "Prullenbak" msgid "Trash is empty" msgstr "Prullenbak is leeg" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Prullenbak is leeg." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Probeer een andere zoekterm" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Pas je zoekopdracht aan" @@ -7916,7 +7916,7 @@ msgstr "Site-instellingen bijwerken" msgid "Update the {0} details" msgstr "Werk de gegevens van de {0} bij" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Werk deze omleidingsregel bij." @@ -8059,7 +8059,7 @@ msgstr "URL-patroon" msgid "URL-friendly identifier" msgstr "URL-vriendelijke identifier" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-vriendelijke identifier (bijv. \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-vriendelijke identifier (bijv. \"primary\", \"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Gebruik [param] of [...rest] in paden voor patroonherkenning." @@ -8124,8 +8124,8 @@ msgstr "Gebruikersgegevens" msgid "User not found" msgstr "Gebruiker niet gevonden" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Gebruikers" @@ -8148,7 +8148,7 @@ msgstr "v{0} beschikbaar" msgid "Validation" msgstr "Validatie" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Geverifieerde uitgever" @@ -8221,7 +8221,7 @@ msgstr "Bron bekijken" msgid "View the {license} license on spdx.org" msgstr "De {license}-licentie op spdx.org bekijken" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Bezoekers van deze paden krijgen een fout te zien." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn wordt niet ondersteund in deze browser" msgid "Website" msgstr "Website" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Website-URL" @@ -8374,9 +8374,9 @@ msgstr "Titel van de widget" msgid "Widget updated" msgstr "Widget bijgewerkt" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Je kunt je eigen content aanmaken en bewerken." msgid "You can manage content, media, menus, and taxonomies." msgstr "Je kunt content, media, menu's en taxonomieën beheren." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Je kunt de vaste velden hierboven nog steeds bewerken. Opslaan wijzigt geen opgeslagen waarden van aangepaste velden." diff --git a/packages/admin/src/locales/pl/messages.po b/packages/admin/src/locales/pl/messages.po index 580c1a4fa3..687e3b73a3 100644 --- a/packages/admin/src/locales/pl/messages.po +++ b/packages/admin/src/locales/pl/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr " (otwiera w nowym oknie)" msgid " (selected)" msgstr " (zaznaczony)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# komentarz} few {# komentarze} other {# komentarzy}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# element treści zaimportowany} few {# elementy treśc #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# element} few {# elementy} other {# elementów}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# wpis} few {# wpisy} other {# wpisów}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# przekierowanie tworzy pętlę.} few {# przekierowania tworzą pętlę.} other {# przekierowań tworzy pętlę.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# zaznaczony} few {# zaznaczone} other {# zaznaczonych}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# łącznie} few {# łącznie} other {# łącznie}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Pokaż # niezmieniony} few {Pokaż # niezm msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} przesłanych, {failed} nieudanych" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. Wybierz „Cała zawartość”" msgid "30 days" msgstr "30 dni" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Stałe" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Tymczasowe" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Tymczasowe (ścisłe)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Stałe (ścisłe)" @@ -497,15 +497,15 @@ msgstr "4. Kliknij „Pobierz plik eksportu”" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Wpisz „EmDash” i kliknij „Dodaj nowe”" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Błędy 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Informacje o koncie" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Nawigacja panelu" @@ -803,7 +803,7 @@ msgstr "Wszystkie" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "Wszystkie uprawnienia" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Wszystkie kolekcje" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Wszystkie źródła" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Wszystkie statusy" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Wszystkie typy" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Zatwierdź" @@ -989,7 +989,7 @@ msgstr "Zatwierdź" msgid "approved" msgstr "zatwierdzony" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Zatwierdzony" @@ -1026,7 +1026,7 @@ msgstr "Czy na pewno chcesz usunąć „{0}”? Spowoduje to również usunięci msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Czy na pewno chcesz usunąć to menu? Spowoduje to również usunięcie wszystkich pozycji menu. Tej operacji nie można cofnąć." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Uwierzytelnianie zostało anulowane lub przekroczyło limit czasu. Spróbuj ponownie." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autoryzowanie..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (zmiana slug)" @@ -1236,7 +1236,7 @@ msgstr "Przed wysłaniem:" msgid "Bing Verification" msgstr "Weryfikacja Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Krótkie podsumowanie wyświetlane pod tytułem w wynikach wyszukiwania" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Lista punktowana" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Autorzy" @@ -1352,11 +1352,11 @@ msgstr "Może przeglądać treści" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Podpis" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategorie" @@ -1554,17 +1554,17 @@ msgstr "Kliknij link w e-mailu, aby się zalogować." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kod" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Słowa kluczowe oddzielone przecinkami." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Komentarz" @@ -1654,9 +1654,9 @@ msgstr "Komentarz" msgid "Comment Detail" msgstr "Szczegóły komentarza" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Komentarze" @@ -1707,13 +1707,13 @@ msgstr "Połączono {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Treść" @@ -1771,9 +1771,9 @@ msgstr "Migawka treści:" msgid "Content to Import" msgstr "Treść do zaimportowania" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Typy treści" @@ -1855,7 +1855,7 @@ msgstr "Nie wykryto WordPressa" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Ilość" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Utwórz" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Utwórz konto" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Utwórz autora" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Utwórz menu" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Utwórz nowe menu" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Twórz osobiste tokeny dostępu do programowego korzystania z API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Utwórz przekierowanie dla {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Utwórz przekierowanie dla tej ścieżki" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Twórz reguły przekierowań, aby zarządzać zmianami URL." @@ -1973,7 +1973,7 @@ msgstr "Utwórz schemat i importuj" msgid "Create Section" msgstr "Utwórz sekcję" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Utwórz sekcje w bibliotece sekcji, aby użyć ich tutaj" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "Utwórz konto" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Utwórz pierwsze menu nawigacji, aby rozpocząć" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Tworzenie kolekcji i pól..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "ciemny" msgid "Dark" msgstr "Ciemny" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Pulpit" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Data" @@ -2186,8 +2186,8 @@ msgstr "Zdefiniuj strukturę swoich treści" msgid "Defined in code" msgstr "Zdefiniowane w kodzie" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Zdefiniowane w kodzie" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Usuń" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Usuń menu {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "Usuń kolumnę" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Usunąć komentarz?" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "Usunąć media?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Usuń menu" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Usuń trwale" @@ -2309,16 +2309,16 @@ msgstr "Usuń trwale" msgid "Delete Permanently?" msgstr "Usunąć trwale?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Usuń przekierowanie" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Usuń przekierowanie {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Usunąć przekierowanie?" @@ -2348,18 +2348,18 @@ msgstr "Usunięto" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Usuwanie..." @@ -2414,11 +2414,11 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opcjonalnie)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Cel" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Ścieżka docelowa" @@ -2462,7 +2462,7 @@ msgstr "Wyłącz" msgid "Disable plugin" msgstr "Wyłącz wtyczkę" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Wyłącz przekierowanie" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nazwa wyświetlana" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nazwa wyświetlana w panelu administracyjnym" @@ -2706,7 +2706,7 @@ msgstr "Duplikuj {title}" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "np. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Edytuj" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Edytuj {0}" @@ -2782,16 +2782,16 @@ msgstr "Edytuj element menu" msgid "Edit menu items" msgstr "Edytuj elementy menu" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Edytuj przekierowanie" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Edytuj przekierowanie" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Edytuj przekierowanie {0}" @@ -2896,12 +2896,12 @@ msgstr "Włącz wyszukiwanie pełnotekstowe w tej kolekcji" msgid "Enable plugin" msgstr "Włącz wtyczkę" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Włącz przekierowanie" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Włączony" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "Nie udało się załadować wtyczki" msgid "Failed to load plugins: {0}" msgstr "Nie udało się załadować wtyczek: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "Filtruj wg możliwości" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtruj wg kolekcji" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "Widok siatki" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grupa (opcjonalnie)" @@ -3811,11 +3811,11 @@ msgstr "Grupa (opcjonalnie)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "Ukryj token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarchiczna (jak kategorie, z relacjami nadrzędny/podrzędny)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Trafienia" @@ -3982,8 +3982,8 @@ msgstr "zaktualizowane URL obrazów w" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importuj" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Wstaw sekcję" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Zainstalowany" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "Ostatnie logowanie" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Ostatnio widziany" @@ -4423,11 +4423,11 @@ msgstr "Link do innego elementu treści" msgid "Linked Accounts ({0})" msgstr "Powiązane konta ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "Podgląd na żywo" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Załaduj więcej" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "Ładowanie kolekcji..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Ładowanie komentarzy..." @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "Ładowanie menu..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Ładowanie menu..." @@ -4506,11 +4506,11 @@ msgstr "Ładowanie menu..." msgid "Loading plugins..." msgstr "Ładowanie wtyczek..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Ładowanie przekierowań..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Ładowanie sekcji..." @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Ładowanie..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Zarządzaj" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Zarządzaj zainstalowanymi pluginami. Włączaj lub wyłączaj pluginy, aby kontrolować ich funkcjonalność." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Zarządzaj menu nawigacyjnymi witryny" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Zarządzaj przekierowaniami URL i przeglądaj błędy 404." @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Ręczne" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Oznacz jako spam" @@ -4694,7 +4694,7 @@ msgstr "sklep" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "Import mediów zakończony" msgid "Media import was skipped" msgstr "Import mediów został pominięty" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Biblioteka mediów" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menu \"{0}\" ({1}) zostało utworzone." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "msgstr “Menu „{0}” zostało utworzone.”" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu utworzone" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu usunięte" @@ -4808,9 +4808,9 @@ msgstr "Nie znaleziono menu" msgid "Menu order has been updated." msgstr "Kolejność menu została zaktualizowana." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menu" @@ -4958,7 +4958,7 @@ msgstr "Mój świetny blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "Nazwa i etykieta są wymagane" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Nazwa musi zaczynać się od litery i zawierać tylko małe litery, cyfry i podkreślenia" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Nawigacja" @@ -4989,7 +4989,7 @@ msgstr "Nigdy" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Nowe przekierowanie" @@ -5036,7 +5036,7 @@ msgstr "Nowe przekierowanie" msgid "New Section" msgstr "Nowa sekcja" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "nowa karta" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "Dalej" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Następna strona" @@ -5097,7 +5097,7 @@ msgstr "Brak {0}." msgid "No {0} yet. Create one to get started." msgstr "Brak {0}. Utwórz, aby rozpocząć." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Nie zarejestrowano jeszcze błędów 404." @@ -5110,7 +5110,7 @@ msgstr "Brak tekstu alternatywnego" msgid "No API tokens yet. Create one to get started." msgstr "Brak tokenów API. Utwórz pierwszy, aby rozpocząć." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Brak zatwierdzonych komentarzy." @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "Nie wybrano autorów." msgid "No collections configured" msgstr "Brak skonfigurowanych kolekcji" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Brak komentarzy oczekujących na moderację." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Brak komentarzy pasujących do wyszukiwania." @@ -5211,7 +5211,7 @@ msgstr "Brak elementów" msgid "No limit" msgstr "Bez limitu" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "Nie znaleziono mediów" msgid "No menu items yet" msgstr "Brak elementów menu" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Brak menu" @@ -5287,11 +5287,11 @@ msgstr "Brak skonfigurowanych pluginów" msgid "No plugins found" msgstr "Nie znaleziono pluginów" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "Brak ostatniej aktywności" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Brak przekierowań" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "msgstr “Brak wyników dla „{debouncedQuery}”. Spróbuj innego zapytania.”" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Nie znaleziono wyników" @@ -5334,11 +5334,11 @@ msgstr "Nie znaleziono wyników" msgid "No revisions yet" msgstr "Brak rewizji" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Brak dostępnych sekcji" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Nie znaleziono sekcji" @@ -5347,7 +5347,7 @@ msgstr "Nie znaleziono sekcji" msgid "No sections yet" msgstr "Brak sekcji" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Brak komentarzy spam." @@ -5420,7 +5420,7 @@ msgstr "Autoryzuj tylko kody, które rozpoznajesz." msgid "Only email addresses from allowed domains can sign up." msgstr "Rejestrować mogą się tylko adresy e-mail z dozwolonych domen." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Tylko małe litery, cyfry i myślniki" @@ -5544,8 +5544,8 @@ msgstr "Akapit" msgid "Parent" msgstr "Nadrzędny" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Część pętli przekierowań" @@ -5618,7 +5618,7 @@ msgstr "Passkeys wymagają HTTPS lub http://localhost (z odpowiednim portem); ta msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Ścieżka" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "oczekujący" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Oczekujące" @@ -5749,7 +5749,7 @@ msgstr "plugin na stronie WordPress." msgid "Plugin Permissions" msgstr "Uprawnienia pluginu" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "Plugin zaktualizowany" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Pluginy" @@ -5843,7 +5843,7 @@ msgstr "Podgląd szkicu" msgid "Previous" msgstr "Wstecz" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Poprzednia strona" @@ -5852,7 +5852,7 @@ msgstr "Poprzednia strona" msgid "Previous screenshot" msgstr "Poprzedni zrzut ekranu" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Nawigacja główna" @@ -5991,7 +5991,7 @@ msgstr "E-mail odbiorcy" msgid "Recovery link sent to {0}" msgstr "Link odzyskiwania wysłany do {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Wykryto pętlę przekierowań" @@ -5999,9 +5999,9 @@ msgstr "Wykryto pętlę przekierowań" msgid "Redirecting to login..." msgstr "Przekierowywanie do logowania..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Przekierowania" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "Rejestracja została anulowana lub przekroczyła limit czasu. Spróbuj ponownie." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "To samo okno" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Zapisz" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Zapisywanie..." @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Szukaj komentarzy" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Szukaj komentarzy..." @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "Szukaj mediów" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Szukaj stron i treści..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Szukaj wtyczek..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Szukaj sekcji..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Szukaj źródła lub celu..." @@ -6658,9 +6658,9 @@ msgstr "Nie znaleziono sekcji" msgid "Section title" msgstr "Tytuł sekcji" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Sekcje" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "Błąd bezpieczeństwa. Upewnij się, że korzystasz z bezpiecznego połączenia." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Zaznacz wszystko" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Zaznacz komentarz od {0}" @@ -6917,14 +6917,14 @@ msgstr "Skonfiguruj swoją stronę" msgid "Setting up..." msgstr "Konfigurowanie..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Ustawienia" @@ -7112,7 +7112,7 @@ msgstr "Pominięto" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7168,12 +7168,12 @@ msgstr "Sortuj motywy" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Źródło" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Ścieżka źródłowa" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Kod statusu" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "Podtytuł" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Tagi" @@ -7392,7 +7392,7 @@ msgstr "Link wygaśnie za 15 minut." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Marketplace jest pusty. Sprawdź ponownie później." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Menu zostało usunięte." @@ -7449,7 +7449,7 @@ msgstr "Sekcji dostarczonych przez motyw nie można usunąć. Edytuj sekcję, ab msgid "Theme: {label}" msgstr "Motyw: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Motywy" @@ -7504,7 +7504,7 @@ msgstr "Ta wtyczka nie wymaga specjalnych uprawnień." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Ta reguła przekierowania zostanie trwale usunięta." @@ -7512,7 +7512,7 @@ msgstr "Ta reguła przekierowania zostanie trwale usunięta." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "This will permanently delete \"{0}\" and remove it from all content." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "This will permanently delete \"{0}\". This action cannot be undone." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "To trwale usunie ten komentarz. Tej operacji nie można cofnąć." @@ -7595,7 +7595,7 @@ msgstr "Separator tytułu" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "aby zamknąć" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "aby zainstalować wtyczki, lub dodaj je do astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "aby wybrać" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "kosz" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Kosz" @@ -7693,7 +7693,7 @@ msgstr "Kosz" msgid "Trash is empty" msgstr "Kosz jest pusty" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Kosz jest pusty." @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "Spróbuj innego wyszukiwania" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Spróbuj zmienić wyszukiwanie" @@ -7910,7 +7910,7 @@ msgstr "Aktualizacja ustawień strony" msgid "Update the {0} details" msgstr "Zaktualizuj szczegóły {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Zaktualizuj tę regułę przekierowania." @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "Identyfikator przyjazny dla URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-friendly identifier (e.g., \"primary\", \"footer\")" @@ -8061,7 +8061,7 @@ msgstr "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Użyj [param] lub [...rest] w ścieżkach do dopasowywania wzorców." @@ -8118,8 +8118,8 @@ msgstr "Szczegóły użytkownika" msgid "User not found" msgstr "Nie znaleziono użytkownika" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Użytkownicy" @@ -8142,7 +8142,7 @@ msgstr "v{0} dostępna" msgid "Validation" msgstr "Walidacja" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Odwiedzający trafiający na te ścieżki zobaczą błąd." @@ -8267,7 +8267,7 @@ msgstr "WebAuthn nie jest obsługiwany w tej przeglądarce" msgid "Website" msgstr "Strona internetowa" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "Możesz tworzyć i edytować własne treści." msgid "You can manage content, media, menus, and taxonomies." msgstr "Możesz zarządzać treścią, mediami, menu i taksonomiami." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/pseudo/messages.po b/packages/admin/src/locales/pseudo/messages.po index 890508ed90..95d5515e53 100644 --- a/packages/admin/src/locales/pseudo/messages.po +++ b/packages/admin/src/locales/pseudo/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr "" msgid " (selected)" msgstr "" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "" @@ -111,7 +111,7 @@ msgstr "" #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "" @@ -414,11 +414,11 @@ msgstr "" msgid "{uploaded} uploaded, {failed} failed" msgstr "" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "" msgid "30 days" msgstr "" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "" @@ -497,15 +497,15 @@ msgstr "" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "" @@ -803,7 +803,7 @@ msgstr "" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "" @@ -989,7 +989,7 @@ msgstr "" msgid "approved" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "" @@ -1026,7 +1026,7 @@ msgstr "" msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "" @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "" msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "" @@ -1236,7 +1236,7 @@ msgstr "" msgid "Bing Verification" msgstr "" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "" msgid "Brief summary shown below the title in search results" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "" @@ -1352,11 +1352,11 @@ msgstr "" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "" @@ -1554,17 +1554,17 @@ msgstr "" #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "" @@ -1654,9 +1654,9 @@ msgstr "" msgid "Comment Detail" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "" @@ -1707,13 +1707,13 @@ msgstr "" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "" @@ -1771,9 +1771,9 @@ msgstr "" msgid "Content to Import" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "" @@ -1855,7 +1855,7 @@ msgstr "" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "" @@ -1973,7 +1973,7 @@ msgstr "" msgid "Create Section" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "" msgid "Dark" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "" @@ -2186,8 +2186,8 @@ msgstr "" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "" @@ -2309,16 +2309,16 @@ msgstr "" msgid "Delete Permanently?" msgstr "" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "" @@ -2348,18 +2348,18 @@ msgstr "" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "" @@ -2414,11 +2414,11 @@ msgstr "" msgid "Description (optional)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "" @@ -2462,7 +2462,7 @@ msgstr "" msgid "Disable plugin" msgstr "" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "" @@ -2706,7 +2706,7 @@ msgstr "" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "" @@ -2782,16 +2782,16 @@ msgstr "" msgid "Edit menu items" msgstr "" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "" @@ -2896,12 +2896,12 @@ msgstr "" msgid "Enable plugin" msgstr "" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "" msgid "Failed to load plugins: {0}" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "" @@ -3811,11 +3811,11 @@ msgstr "" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "" @@ -3982,8 +3982,8 @@ msgstr "" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "" @@ -4423,11 +4423,11 @@ msgstr "" msgid "Linked Accounts ({0})" msgstr "" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "" @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "" -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "" @@ -4506,11 +4506,11 @@ msgstr "" msgid "Loading plugins..." msgstr "" -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "" @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "" @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "" -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "" @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "" @@ -4694,7 +4694,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "" msgid "Media import was skipped" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "" @@ -4808,9 +4808,9 @@ msgstr "" msgid "Menu order has been updated." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "" @@ -4958,7 +4958,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "" @@ -4989,7 +4989,7 @@ msgstr "" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "" @@ -5036,7 +5036,7 @@ msgstr "" msgid "New Section" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "" @@ -5097,7 +5097,7 @@ msgstr "" msgid "No {0} yet. Create one to get started." msgstr "" -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "" @@ -5110,7 +5110,7 @@ msgstr "" msgid "No API tokens yet. Create one to get started." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "" @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "" msgid "No collections configured" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "" @@ -5211,7 +5211,7 @@ msgstr "" msgid "No limit" msgstr "" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "" msgid "No menu items yet" msgstr "" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "" @@ -5287,11 +5287,11 @@ msgstr "" msgid "No plugins found" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "" @@ -5334,11 +5334,11 @@ msgstr "" msgid "No revisions yet" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "" @@ -5347,7 +5347,7 @@ msgstr "" msgid "No sections yet" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "" @@ -5420,7 +5420,7 @@ msgstr "" msgid "Only email addresses from allowed domains can sign up." msgstr "" -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "" @@ -5544,8 +5544,8 @@ msgstr "" msgid "Parent" msgstr "" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "" @@ -5618,7 +5618,7 @@ msgstr "" msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "" @@ -5749,7 +5749,7 @@ msgstr "" msgid "Plugin Permissions" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "" @@ -5843,7 +5843,7 @@ msgstr "" msgid "Previous" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "" @@ -5852,7 +5852,7 @@ msgstr "" msgid "Previous screenshot" msgstr "" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "" @@ -5991,7 +5991,7 @@ msgstr "" msgid "Recovery link sent to {0}" msgstr "" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "" @@ -5999,9 +5999,9 @@ msgstr "" msgid "Redirecting to login..." msgstr "" -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "" -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "" @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "" @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "" -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "" @@ -6658,9 +6658,9 @@ msgstr "" msgid "Section title" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "" @@ -6917,14 +6917,14 @@ msgstr "" msgid "Setting up..." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "" @@ -7112,7 +7112,7 @@ msgstr "" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "" @@ -7168,12 +7168,12 @@ msgstr "" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "" @@ -7392,7 +7392,7 @@ msgstr "" msgid "The marketplace is empty. Check back later for new plugins." msgstr "" -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "" @@ -7449,7 +7449,7 @@ msgstr "" msgid "Theme: {label}" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "" @@ -7504,7 +7504,7 @@ msgstr "" msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "" @@ -7512,7 +7512,7 @@ msgstr "" msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "" msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "" @@ -7595,7 +7595,7 @@ msgstr "" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "" @@ -7693,7 +7693,7 @@ msgstr "" msgid "Trash is empty" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "" @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "" @@ -7910,7 +7910,7 @@ msgstr "" msgid "Update the {0} details" msgstr "" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "" @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "" @@ -8061,7 +8061,7 @@ msgstr "" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "" @@ -8118,8 +8118,8 @@ msgstr "" msgid "User not found" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "" @@ -8142,7 +8142,7 @@ msgstr "" msgid "Validation" msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "" @@ -8267,7 +8267,7 @@ msgstr "" msgid "Website" msgstr "" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "" msgid "You can manage content, media, menus, and taxonomies." msgstr "" -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/pt-BR/messages.po b/packages/admin/src/locales/pt-BR/messages.po index 4d23842bbb..06e5dd9e77 100644 --- a/packages/admin/src/locales/pt-BR/messages.po +++ b/packages/admin/src/locales/pt-BR/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr " (abre em nova janela)" msgid " (selected)" msgstr " (selecionado)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# comentário} other {# comentários}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# item de conteúdo importado} other {# itens de conte #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# item} other {# itens}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# post} other {# posts}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# redirecionamento faz parte de um loop.} other {# redirecionamentos fazem parte de um loop.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# selecionado} other {# selecionados}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# total} other {# total}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Mostrar # inalterado} other {Mostrar # ina msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} enviados, {failed} falharam" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. Selecione \"Todo o conteúdo\"" msgid "30 days" msgstr "30 dias" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanente" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Temporário" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Temporário (Estrito)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanente (Estrito)" @@ -497,15 +497,15 @@ msgstr "4. Clique em \"Baixar arquivo de exportação\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Digite \"EmDash\" e clique em \"Adicionar novo\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Erros 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "Informações da conta" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Navegação administrativa" @@ -803,7 +803,7 @@ msgstr "Todos" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "Todas as capacidades" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Todas as coleções" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Todas as origens" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Todos os status" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Todos os tipos" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Aprovar" @@ -989,7 +989,7 @@ msgstr "Aprovar" msgid "approved" msgstr "aprovado" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Aprovado" @@ -1026,7 +1026,7 @@ msgstr "Tem certeza de que deseja excluir \"{0}\"? Isso também excluirá todo o msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Tem certeza de que deseja excluir este menu? Isso também excluirá todos os itens do menu. Esta ação não pode ser desfeita." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "A autenticação foi cancelada ou expirou. Tente novamente." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autorizando..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "automático" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Automático (alteração de slug)" @@ -1236,7 +1236,7 @@ msgstr "Antes do envio:" msgid "Bing Verification" msgstr "Verificação do Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "Booleano" msgid "Brief summary shown below the title in search results" msgstr "Resumo breve exibido abaixo do título nos resultados de busca" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Lista com marcadores" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Créditos" @@ -1352,11 +1352,11 @@ msgstr "Pode visualizar conteúdo" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Legenda" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Categorias" @@ -1554,17 +1554,17 @@ msgstr "Clique no link no e-mail para entrar." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Código" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Palavras-chave separadas por vírgula para busca." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Comentário" @@ -1654,9 +1654,9 @@ msgstr "Comentário" msgid "Comment Detail" msgstr "Detalhes do comentário" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Comentários" @@ -1707,13 +1707,13 @@ msgstr "{0} conectado" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Conteúdo" @@ -1771,9 +1771,9 @@ msgstr "Snapshot do conteúdo:" msgid "Content to Import" msgstr "Conteúdo para importar" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tipos de conteúdo" @@ -1855,7 +1855,7 @@ msgstr "Não foi possível detectar o WordPress" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Contagem" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Criar" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Criar uma conta" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Criar crédito" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Criar menu" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Criar novo menu" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Crie tokens de acesso pessoal para acesso programático à API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Criar redirecionamento para {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Criar redirecionamento para este caminho" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Crie regras de redirecionamento para gerenciar alterações de URL." @@ -1973,7 +1973,7 @@ msgstr "Criar schema e importar" msgid "Create Section" msgstr "Criar seção" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Crie seções na biblioteca de Seções para usá-las aqui" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "Crie sua conta" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Crie seu primeiro menu de navegação para começar" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Criando coleções e campos..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "escuro" msgid "Dark" msgstr "Escuro" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Painel" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Data" @@ -2186,8 +2186,8 @@ msgstr "Defina a estrutura do seu conteúdo" msgid "Defined in code" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Excluir" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Excluir menu {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Excluir comentário?" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "Excluir mídia?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Excluir menu" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Excluir permanentemente" @@ -2309,16 +2309,16 @@ msgstr "Excluir permanentemente" msgid "Delete Permanently?" msgstr "Excluir permanentemente?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Excluir redirecionamento" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Excluir redirecionamento {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Excluir redirecionamento?" @@ -2348,18 +2348,18 @@ msgstr "Excluídos" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Excluindo..." @@ -2414,11 +2414,11 @@ msgstr "Descrição" msgid "Description (optional)" msgstr "Descrição (opcional)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Destino" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Caminho de destino" @@ -2462,7 +2462,7 @@ msgstr "Desativar" msgid "Disable plugin" msgstr "Desativar Plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Desativar redirecionamento" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Nome de exibição" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Nome de exibição para a interface de administração" @@ -2706,7 +2706,7 @@ msgstr "Duplicar {title}" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "ex.: MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Editar" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Editar {0}" @@ -2782,16 +2782,16 @@ msgstr "Editar item do menu" msgid "Edit menu items" msgstr "Editar itens do menu" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Editar redirecionamento" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Editar redirecionamento" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Editar redirecionamento {0}" @@ -2896,12 +2896,12 @@ msgstr "Ativar pesquisa de texto completo nesta coleção" msgid "Enable plugin" msgstr "Ativar Plugin" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Ativar redirecionamento" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Ativado" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "Falha ao carregar Plugin" msgid "Failed to load plugins: {0}" msgstr "Falha ao carregar Plugins: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "Filtrar por capacidade" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtrar por coleção" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "Visualização em grade" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grupo (opcional)" @@ -3811,11 +3811,11 @@ msgstr "Grupo (opcional)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "Ocultar token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierárquico (como categorias, com relações ascendente/descendentes)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Acessos" @@ -3982,8 +3982,8 @@ msgstr "URLs de imagem atualizadas em" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importar" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Inserir seção" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Instalado" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "Último acesso" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Visto por último" @@ -4423,11 +4423,11 @@ msgstr "Vincular a outro item de conteúdo" msgid "Linked Accounts ({0})" msgstr "Contas vinculadas ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "Visualização ao vivo" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Carregar mais" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "Carregando coleções..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Carregando comentários..." @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "Carregando menu..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Carregando menus..." @@ -4506,11 +4506,11 @@ msgstr "Carregando menus..." msgid "Loading plugins..." msgstr "Carregando Plugins..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Carregando redirecionamentos..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Carregando seções..." @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Carregando..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Gerenciar" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Gerencie os Plugins instalados. Ative ou desative Plugins para controlar suas funcionalidades." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Gerencie os menus de navegação do seu site" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Gerencie redirecionamentos de URL e visualize erros 404." @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manual" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Marcar como spam" @@ -4694,7 +4694,7 @@ msgstr "marketplace" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "Importação de mídia concluída" msgid "Media import was skipped" msgstr "A importação de mídia foi ignorada" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Biblioteca de mídia" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "O menu \"{0}\" foi criado." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menu criado" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menu excluído" @@ -4808,9 +4808,9 @@ msgstr "Menu não encontrado" msgid "Menu order has been updated." msgstr "A ordem do menu foi atualizada." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menus" @@ -4958,7 +4958,7 @@ msgstr "Meu Blog Incrível" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "Nome e rótulo são obrigatórios" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "O nome deve começar com uma letra e conter apenas letras minúsculas, números e sublinhados" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navegação" @@ -4989,7 +4989,7 @@ msgstr "Nunca" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Novo redirecionamento" @@ -5036,7 +5036,7 @@ msgstr "Novo redirecionamento" msgid "New Section" msgstr "Nova seção" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "nova aba" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "Próximo" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Próxima página" @@ -5097,7 +5097,7 @@ msgstr "Nenhum {0} ainda." msgid "No {0} yet. Create one to get started." msgstr "Nenhum {0} ainda. Crie um para começar." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Nenhum erro 404 registrado ainda." @@ -5110,7 +5110,7 @@ msgstr "Sem texto alternativo" msgid "No API tokens yet. Create one to get started." msgstr "Nenhum token de API ainda. Crie um para começar." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Nenhum comentário aprovado ainda." @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "Nenhum crédito selecionado." msgid "No collections configured" msgstr "Nenhuma coleção configurada" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Nenhum comentário aguardando moderação." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Nenhum comentário corresponde à sua pesquisa." @@ -5211,7 +5211,7 @@ msgstr "Nenhum item ainda" msgid "No limit" msgstr "Sem limite" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "Nenhuma mídia encontrada" msgid "No menu items yet" msgstr "Nenhum item de menu ainda" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Nenhum menu ainda" @@ -5287,11 +5287,11 @@ msgstr "Nenhum plugin configurado" msgid "No plugins found" msgstr "Nenhum plugin encontrado" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "Sem atividade recente" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Nenhum redirecionamento ainda" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Nenhum resultado para \"{debouncedQuery}\". Tente um termo de pesquisa diferente." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Nenhum resultado encontrado" @@ -5334,11 +5334,11 @@ msgstr "Nenhum resultado encontrado" msgid "No revisions yet" msgstr "Nenhuma revisão ainda" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Nenhuma seção disponível" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Nenhuma seção encontrada" @@ -5347,7 +5347,7 @@ msgstr "Nenhuma seção encontrada" msgid "No sections yet" msgstr "Nenhuma seção ainda" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Nenhum comentário de spam." @@ -5420,7 +5420,7 @@ msgstr "Autorize apenas códigos que você reconheça." msgid "Only email addresses from allowed domains can sign up." msgstr "Apenas endereços de e-mail de domínios permitidos podem se registrar." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Apenas letras minúsculas, números e hífens" @@ -5544,8 +5544,8 @@ msgstr "Parágrafo" msgid "Parent" msgstr "Ascendente" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Parte de um loop de redirecionamento" @@ -5618,7 +5618,7 @@ msgstr "Chaves de acesso requerem HTTPS ou http://localhost (com sua porta); est msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Caminho" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "pendente" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Pendente" @@ -5749,7 +5749,7 @@ msgstr "plugin no seu site WordPress." msgid "Plugin Permissions" msgstr "Permissões do plugin" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "Plugin atualizado" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Plugins" @@ -5843,7 +5843,7 @@ msgstr "Pré-visualizar rascunho" msgid "Previous" msgstr "Anterior" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Página anterior" @@ -5852,7 +5852,7 @@ msgstr "Página anterior" msgid "Previous screenshot" msgstr "Captura de tela anterior" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Navegação principal" @@ -5991,7 +5991,7 @@ msgstr "E-mail do destinatário" msgid "Recovery link sent to {0}" msgstr "Link de recuperação enviado para {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Loop de redirecionamento detectado" @@ -5999,9 +5999,9 @@ msgstr "Loop de redirecionamento detectado" msgid "Redirecting to login..." msgstr "Redirecionando para o acesso..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Redirecionamentos" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "O registro foi cancelado ou expirou. Tente novamente." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "Mesma janela" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Salvar" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Salvando..." @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Pesquisar comentários" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Pesquisar comentários..." @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "Pesquisar mídia" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Pesquisar páginas e conteúdo..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Pesquisar plugins..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Pesquisar seções..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Pesquisar origem ou destino..." @@ -6658,9 +6658,9 @@ msgstr "Seção não encontrada" msgid "Section title" msgstr "Título da seção" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Seções" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "Erro de segurança. Certifique-se de estar em uma conexão segura." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Selecionar tudo" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Selecionar comentário de {0}" @@ -6917,14 +6917,14 @@ msgstr "Configure seu site" msgid "Setting up..." msgstr "Configurando..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Configurações" @@ -7112,7 +7112,7 @@ msgstr "Ignorado" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7168,12 +7168,12 @@ msgstr "Ordenar temas" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Origem" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Caminho de origem" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Código de status" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Tags" @@ -7392,7 +7392,7 @@ msgstr "O link expirará em 15 minutos." msgid "The marketplace is empty. Check back later for new plugins." msgstr "O marketplace está vazio. Verifique novamente mais tarde para novos plugins." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "O menu foi excluído." @@ -7449,7 +7449,7 @@ msgstr "Seções fornecidas pelo tema não podem ser excluídas. Edite a seção msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Temas" @@ -7504,7 +7504,7 @@ msgstr "Este plugin não requer permissões especiais." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Esta regra de redirecionamento será permanentemente removida." @@ -7512,7 +7512,7 @@ msgstr "Esta regra de redirecionamento será permanentemente removida." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "Isso excluirá permanentemente \"{0}\" e o removerá de todo o conteúdo msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Isso excluirá permanentemente \"{0}\". Esta ação não pode ser desfeita." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Isso excluirá permanentemente este comentário. Esta ação não pode ser desfeita." @@ -7595,7 +7595,7 @@ msgstr "Separador de título" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "para fechar" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "para instalar plugins, ou adicioná-los ao seu astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "para selecionar" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "lixeira" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Lixeira" @@ -7693,7 +7693,7 @@ msgstr "Lixeira" msgid "Trash is empty" msgstr "A lixeira está vazia" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "A lixeira está vazia." @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "Tente um termo de pesquisa diferente" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Tente ajustar sua pesquisa" @@ -7910,7 +7910,7 @@ msgstr "" msgid "Update the {0} details" msgstr "Atualizar os detalhes de {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Atualize esta regra de redirecionamento." @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "Identificador amigável para URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Identificador amigável para URL (ex.: \"primary\", \"footer\")" @@ -8061,7 +8061,7 @@ msgstr "Identificador amigável para URL (ex.: \"primary\", \"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Use [param] ou [...rest] nos caminhos para correspondência de padrão." @@ -8118,8 +8118,8 @@ msgstr "Detalhes do usuário" msgid "User not found" msgstr "Usuário não encontrado" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Usuários" @@ -8142,7 +8142,7 @@ msgstr "v{0} disponível" msgid "Validation" msgstr "Validação" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Visitantes que acessarem estes caminhos verão um erro." @@ -8267,7 +8267,7 @@ msgstr "WebAuthn não é suportado neste navegador" msgid "Website" msgstr "Site" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "Você pode criar e editar seu próprio conteúdo." msgid "You can manage content, media, menus, and taxonomies." msgstr "Você pode gerenciar conteúdo, mídia, menus e taxonomias." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/sr-Latn/messages.po b/packages/admin/src/locales/sr-Latn/messages.po index c7b2ad476f..6ee82410eb 100644 --- a/packages/admin/src/locales/sr-Latn/messages.po +++ b/packages/admin/src/locales/sr-Latn/messages.po @@ -13,11 +13,11 @@ msgstr "" "Last-Translator: \n" "Language-Team: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Gost" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Povezano" @@ -35,7 +35,7 @@ msgstr " (otvara se u novom prozoru)" msgid " (selected)" msgstr " (izabrano)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Izaberi --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# komentar ažuriran} few {# komentara ažurirano} other {# komentara ažurirano}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# komentar} few {# komentara} other {# komentara}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# stavka sadržaja uvezena} few {# stavke sadržaja uve #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# stavka} few {# stavke} other {# stavki}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# objava} few {# objave} other {# objava}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# preusmeravanje je deo petlje.} few {# preusmeravanja su deo petlje.} other {# preusmeravanja su deo petlje.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# izabrano} few {# izabrana} other {# izabrano}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} obavezno — imate {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {Premestiti # stavku u otpad? Možete je kas msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# stavka} few {# stavke} other {# stavki}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# ukupno} few {# ukupno} other {# ukupno}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Prikaži # nepromenjeno} few {Prikaži # n msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} otpremljeno, {failed} nije uspelo" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page or /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page or /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Izaberite \"Sav sadržaj\"" msgid "30 days" msgstr "30 dana" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Trajno" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Privremeno" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Privremeno (strogo)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Trajno (strogo)" @@ -497,15 +497,15 @@ msgstr "4. Kliknite \"Preuzmi izvozni fajl\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Unesite \"EmDash\" i kliknite \"Dodaj novo\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 greške" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Sadržaj obrisan (uklonjen)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Nedostupno iz pravnih razloga" @@ -582,7 +582,7 @@ msgstr "Informacije o nalogu" msgid "ACF Fields" msgstr "ACF polja" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Admin" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Admin navigacija" @@ -803,7 +803,7 @@ msgstr "Sve" msgid "All authors" msgstr "Svi autori" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Svi potpisi autora" @@ -811,7 +811,7 @@ msgstr "Svi potpisi autora" msgid "All capabilities" msgstr "Sve mogućnosti" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Sve kolekcije" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Svi izvori" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Svi statusi" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Svi tipovi" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Primeni link" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Odobri" @@ -989,7 +989,7 @@ msgstr "Odobri" msgid "approved" msgstr "odobreno" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Odobreno" @@ -1026,7 +1026,7 @@ msgstr "Da li ste sigurni da želite da obrišete \"{0}\"? Ovo će takođe obris msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Da li ste sigurni da želite da obrišete polje \"{0}\"?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Da li ste sigurni da želite da obrišete ovaj meni? Ovo će takođe obrisati sve stavke menija. Ova akcija se ne može poništiti." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Autentifikacija je otkazana ili je isteklo vreme. Pokušajte ponovo." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Autorizacija..." msgid "Authors" msgstr "Autori" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (promena slug-a)" @@ -1236,7 +1236,7 @@ msgstr "Pre slanja:" msgid "Bing Verification" msgstr "Bing verifikacija" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biografija" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Kratak rezime prikazan ispod naslova u rezultatima pretrage" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Pregledajte i instalirajte dodatke objavljene u decentralizovanom registru." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Lista sa tačkama" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Šema potpisa autora" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Šema potpisa autora" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Potpisi autora" @@ -1352,11 +1352,11 @@ msgstr "Može pregledati sadržaj" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Natpis" msgid "Captions / Subtitles" msgstr "Natpisi / titlovi" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategorije" @@ -1554,17 +1554,17 @@ msgstr "Kliknite na link u email-u da se prijavite." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Zatvori podešavanja" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kod" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Ključne reči odvojene zarezom za pretragu." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Komentar" @@ -1654,9 +1654,9 @@ msgstr "Komentar" msgid "Comment Detail" msgstr "Detalj komentara" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Komentari" @@ -1707,13 +1707,13 @@ msgstr "Povezano {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Sadržaj" @@ -1771,9 +1771,9 @@ msgstr "Snimak sadržaja:" msgid "Content to Import" msgstr "Sadržaj za uvoz" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Tipovi sadržaja" @@ -1855,7 +1855,7 @@ msgstr "Nije moguće detektovati WordPress" msgid "Couldn't load byline fields." msgstr "Nije moguće učitati polja potpisa autora." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Nije moguće učitati prilagođena polja." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Broj" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Kreiraj" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Kreiraj nalog" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Kreiraj potpis autora" @@ -1925,12 +1925,12 @@ msgstr "Kreiraj tip sadržaja" msgid "Create field" msgstr "Kreiraj polje" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Kreiraj meni" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Kreiraj novi meni" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Kreirajte lične pristupne tokene za programski API pristup" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Kreiraj preusmeravanje za {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Kreiraj preusmeravanje za ovu putanju" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Kreirajte pravila preusmeravanja za upravljanje promenama URL-a." @@ -1973,7 +1973,7 @@ msgstr "Kreiraj šemu i uvezi" msgid "Create Section" msgstr "Kreiraj sekciju" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Kreirajte sekcije u biblioteci sekcija da ih koristite ovde" @@ -1995,7 +1995,7 @@ msgstr "Kreiraj oblast vidžeta" msgid "Create your account" msgstr "Kreirajte nalog" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Kreirajte prvi navigacioni meni da počnete" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Kreiranje kolekcija i polja..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "tamno" msgid "Dark" msgstr "Tamno" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Kontrolna tabla" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Datum" @@ -2186,8 +2186,8 @@ msgstr "Definišite strukturu sadržaja" msgid "Defined in code" msgstr "Definisano u kodu" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Definisano u kodu" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Obriši" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Obriši polje {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Obriši meni {0}" @@ -2255,7 +2255,7 @@ msgstr "Obrisati rezervnu kopiju?" msgid "Delete byline field?" msgstr "Obrisati polje potpisa autora?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Obrisati potpis autora?" @@ -2263,7 +2263,7 @@ msgstr "Obrisati potpis autora?" msgid "Delete column" msgstr "Obriši kolonu" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Obrisati komentar?" @@ -2292,11 +2292,11 @@ msgstr "Obriši sliku" msgid "Delete Media?" msgstr "Obrisati medij?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Obriši meni" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Obriši trajno" @@ -2309,16 +2309,16 @@ msgstr "Obriši trajno" msgid "Delete Permanently?" msgstr "Obrisati trajno?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Obriši preusmeravanje" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Obriši preusmeravanje {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Obrisati preusmeravanje?" @@ -2348,18 +2348,18 @@ msgstr "Obrisano" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Brisanje \"{0}\" će takođe ukloniti {1, plural, one {# sačuvanu vrednost} few {# sačuvane vrednosti} other {# sačuvanih vrednosti}} na svim potpisima autora. Ovo se ne može poništiti." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Brisanje..." @@ -2414,11 +2414,11 @@ msgstr "Opis" msgid "Description (optional)" msgstr "Opis (opciono)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Odredište" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Putanja odredišta" @@ -2462,7 +2462,7 @@ msgstr "Onemogući" msgid "Disable plugin" msgstr "Onemogući dodatak" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Onemogući preusmeravanje" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Onemogućiti korisnika?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Prikaži listu kategorija" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Ime za prikaz" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Ime za prikaz u admin interfejsu" @@ -2706,7 +2706,7 @@ msgstr "Dupliraj {title}" msgid "e.g. application/zip or .pdf" msgstr "npr. application/zip ili .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "npr. import, blog" @@ -2722,7 +2722,7 @@ msgstr "npr. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Uredi" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Uredi {0}" @@ -2782,16 +2782,16 @@ msgstr "Uredi stavku menija" msgid "Edit menu items" msgstr "Uredi stavke menija" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Uredi preusmeravanje" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Uredi preusmeravanje" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Uredi preusmeravanje {0}" @@ -2899,12 +2899,12 @@ msgstr "Omogući pretragu punog teksta na ovoj kolekciji" msgid "Enable plugin" msgstr "Omogući dodatak" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Omogući preusmeravanje" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Omogućeno" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Učitavanje podešavanja rezervnih kopija nije uspelo" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Učitavanje potpisa autora nije uspelo: {0}" @@ -3387,7 +3387,7 @@ msgstr "Učitavanje dodatka nije uspelo" msgid "Failed to load plugins: {0}" msgstr "Učitavanje dodataka nije uspelo: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Učitavanje dodataka nije uspelo. Agregator registra možda nije dostupan." @@ -3701,7 +3701,7 @@ msgstr "Filtriraj po autoru" msgid "Filter by capability" msgstr "Filtriraj po mogućnosti" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtriraj po kolekciji" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filtriraj po izvoru" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filtriraj po statusu" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filtriraj po tipu" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filtriraj tip potpisa autora" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Prikaz mreže" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grupa (opciono)" @@ -3814,11 +3814,11 @@ msgstr "Grupa (opciono)" msgid "Group by" msgstr "Grupiši po" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Gost potpis autora" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Samo gost" @@ -3882,8 +3882,8 @@ msgstr "Sakrij token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hijerarhijski (kao kategorije, sa roditelj/dete odnosima)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Pogoci" @@ -3985,8 +3985,8 @@ msgstr "URL-ovi slika ažurirani u" msgid "Images" msgstr "Slike" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Uvezi" @@ -4153,7 +4153,7 @@ msgstr "Umetni link" msgid "Insert raw HTML" msgstr "Umetni sirovi HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Umetni sekciju" @@ -4184,7 +4184,7 @@ msgstr "Instalacija" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Instalirano" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Poslednja prijava" msgid "Last Login" msgstr "Poslednja prijava" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Poslednji put viđen" @@ -4426,11 +4426,11 @@ msgstr "Poveži sa drugom stavkom sadržaja" msgid "Linked Accounts ({0})" msgstr "Povezani nalozi ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Samo povezano" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Povezani korisnik" @@ -4454,9 +4454,9 @@ msgstr "Prikaz uživo" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Učitaj više" @@ -4480,7 +4480,7 @@ msgstr "Učitavanje polja potpisa autora…" msgid "Loading collections..." msgstr "Učitavanje kolekcija..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Učitavanje komentara..." @@ -4501,7 +4501,7 @@ msgstr "Učitavanje editora..." msgid "Loading menu..." msgstr "Učitavanje menija..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Učitavanje menija..." @@ -4509,11 +4509,11 @@ msgstr "Učitavanje menija..." msgid "Loading plugins..." msgstr "Učitavanje dodataka..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Učitavanje preusmeravanja..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Učitavanje sekcija..." @@ -4545,7 +4545,7 @@ msgstr "Učitavanje vidžeta..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Učitavanje vidžeta..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Učitavanje..." @@ -4618,7 +4618,7 @@ msgstr "Šalji mrežne zahteve" msgid "Make network requests to any host (unrestricted)" msgstr "Šalji mrežne zahteve ka bilo kom hostu (neograničeno)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Upravljaj" @@ -4640,11 +4640,11 @@ msgstr "Upravljaj vidžetima sadržaja u oblastima za vidžete" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Upravljaj instaliranim dodacima. Uključite ili isključite dodatke da biste kontrolisali njihovu funkcionalnost." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Upravljaj navigacionim menijima za vaš sajt" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Upravljaj URL preusmeravanjima i pregledaj 404 greške." @@ -4660,7 +4660,7 @@ msgstr "Upravlja {providerName}" msgid "Managed by an external media provider" msgstr "Upravlja eksterni provajder medija" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Ručno" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Mapiraj WordPress korisnika {0} na EmDash korisnika" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Označi {0} kao Gone (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Označi kao Gone (410) — obaveštava pretraživače da je trajno obrisano" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Označi kao spam" @@ -4697,7 +4697,7 @@ msgstr "prodavnica" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Prodavnica" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Uvoz medija završen" msgid "Media import was skipped" msgstr "Uvoz medija je preskočen" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Biblioteka medija" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Meni \"{0}\" ({1}) je kreiran." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Meni \"{0}\" je kreiran." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Meni kreiran" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Meni obrisan" @@ -4811,9 +4811,9 @@ msgstr "Meni nije pronađen" msgid "Menu order has been updated." msgstr "Redosled menija je ažuriran." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Meniji" @@ -4961,7 +4961,7 @@ msgstr "Moj sjajan blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Naziv i oznaka su obavezni" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Naziv mora početi slovom i sadržati samo mala slova, brojeve i donje crte" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigacija" @@ -4992,7 +4992,7 @@ msgstr "Nikada" msgid "new" msgstr "novo" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Novo" @@ -5030,8 +5030,8 @@ msgstr "Novo polje" msgid "New public routes" msgstr "Nove javne rute" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Novo preusmeravanje" @@ -5039,7 +5039,7 @@ msgstr "Novo preusmeravanje" msgid "New Section" msgstr "Nova sekcija" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "novi tab" @@ -5067,7 +5067,7 @@ msgstr "Vesti" msgid "Next" msgstr "Sledeće" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Sledeća stranica" @@ -5100,7 +5100,7 @@ msgstr "Još nema {0}." msgid "No {0} yet. Create one to get started." msgstr "Još nema {0}. Kreirajte jedan da biste počeli." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Još nema zabeleženih 404 grešaka." @@ -5113,7 +5113,7 @@ msgstr "Nema alt teksta" msgid "No API tokens yet. Create one to get started." msgstr "Još nema API tokena. Kreirajte jedan da biste počeli." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Još nema odobrenih komentara." @@ -5125,7 +5125,7 @@ msgstr "Još nema polja potpisa autora." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Nema dostupnih potpisa autora na {entryLocale}. Kreirajte varijantu sa stranice Potpisi autora pre nego što je dodelite ovom unosu." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Nema pronađenih potpisa autora" @@ -5137,11 +5137,11 @@ msgstr "Nema izabranih potpisa autora." msgid "No collections configured" msgstr "Nema konfigurisanih kolekcija" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Nema komentara koji čekaju moderaciju." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Nijedan komentar ne odgovara vašoj pretrazi." @@ -5214,7 +5214,7 @@ msgstr "Još nema stavki" msgid "No limit" msgstr "Bez limita" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Nema povezanog korisnika" @@ -5257,7 +5257,7 @@ msgstr "Mediji nisu pronađeni" msgid "No menu items yet" msgstr "Još nema stavki menija" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Još nema menija" @@ -5290,11 +5290,11 @@ msgstr "Nema konfigurisanih dodataka" msgid "No plugins found" msgstr "Nema pronađenih dodataka" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Još nema dodataka objavljenih u ovom registru." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Nijedan dodatak ne odgovara \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "Nema dostupnog javnog URL-a" msgid "No recent activity" msgstr "Nema nedavne aktivnosti" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Još nema preusmeravanja" @@ -5329,7 +5329,7 @@ msgstr "Nema rezultata za \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Nema rezultata za \"{debouncedQuery}\". Pokušajte sa drugim pojmom za pretragu." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Nema pronađenih rezultata" @@ -5337,11 +5337,11 @@ msgstr "Nema pronađenih rezultata" msgid "No revisions yet" msgstr "Još nema revizija" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Nema dostupnih sekcija" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Nema pronađenih sekcija" @@ -5350,7 +5350,7 @@ msgstr "Nema pronađenih sekcija" msgid "No sections yet" msgstr "Još nema sekcija" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Nema spam komentara." @@ -5423,7 +5423,7 @@ msgstr "Autorizujte samo kodove koje prepoznajete." msgid "Only email addresses from allowed domains can sign up." msgstr "Samo e-adrese sa dozvoljenih domena mogu da se registruju." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Samo mala slova, brojevi i crtice" @@ -5550,8 +5550,8 @@ msgstr "Pasus" msgid "Parent" msgstr "Roditelj" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Deo petlje preusmeravanja" @@ -5624,7 +5624,7 @@ msgstr "Passkey-evi zahtevaju HTTPS ili http://localhost (sa vašim portom); ova msgid "Paste your migration key" msgstr "Nalepite ključ za migraciju" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Putanja" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "na čekanju" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Na čekanju" @@ -5755,7 +5755,7 @@ msgstr "dodatak na vašem WordPress sajtu." msgid "Plugin Permissions" msgstr "Dozvole dodatka" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Registar dodataka" @@ -5780,12 +5780,12 @@ msgstr "Dodatak ažuriran" msgid "Plugin widget error" msgstr "Greška vidžeta dodatka" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Dodaci" @@ -5849,7 +5849,7 @@ msgstr "Pregled nacrta" msgid "Previous" msgstr "Prethodno" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Prethodna stranica" @@ -5858,7 +5858,7 @@ msgstr "Prethodna stranica" msgid "Previous screenshot" msgstr "Prethodni snimak ekrana" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Primarna navigacija" @@ -5997,7 +5997,7 @@ msgstr "E-adresa primaoca" msgid "Recovery link sent to {0}" msgstr "Link za oporavak poslat na {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Otkrivena petlja preusmeravanja" @@ -6005,9 +6005,9 @@ msgstr "Otkrivena petlja preusmeravanja" msgid "Redirecting to login..." msgstr "Preusmeravanje na prijavu..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Preusmeravanja" @@ -6048,7 +6048,7 @@ msgstr "Registracija nije uspela" msgid "Registration was cancelled or timed out. Please try again." msgstr "Registracija je otkazana ili je isteklo vreme. Pokušajte ponovo." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Registar" @@ -6350,11 +6350,11 @@ msgstr "Isti prozor" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Sačuvaj" @@ -6410,7 +6410,7 @@ msgstr "Sačuvano \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "Sačuvano \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Čuvanje..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Pretraži po imenu ili emailu..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Pretraži potpise autora" @@ -6558,11 +6558,11 @@ msgstr "Pretraži potpise autora" msgid "Search bylines to add..." msgstr "Pretraži potpise autora za dodavanje..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Pretraži komentare" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Pretraži komentare..." @@ -6587,26 +6587,26 @@ msgstr "Obrazac za pretragu" msgid "Search media" msgstr "Pretraži medije" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Pretraži stranice i sadržaj..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Pretraži dodatke" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Pretraži dodatke..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Pretraži sekcije..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Pretraži izvor ili odredište..." @@ -6664,9 +6664,9 @@ msgstr "Sekcija nije pronađena" msgid "Section title" msgstr "Naslov sekcije" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Sekcije" @@ -6717,7 +6717,7 @@ msgstr "Bezbednosni kontakti" msgid "Security error. Make sure you're on a secure connection." msgstr "Bezbednosna greška. Uveri se da koristiš bezbednu vezu." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Izaberi komponentu..." msgid "Select a menu..." msgstr "Izaberi meni..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Izaberi sve" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Izaberi sve na ovoj stranici" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Izaberi komentar od {0}" @@ -6923,14 +6923,14 @@ msgstr "Podesi svoj sajt" msgid "Setting up..." msgstr "Podešava se..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Podešavanja" @@ -7118,7 +7118,7 @@ msgstr "Preskočeno" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Sortiraj teme" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Izvor" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Putanja izvora" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "neželjeno" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Neželjeno" @@ -7218,12 +7218,12 @@ msgstr "Počni da pišeš ili ukucaj '/' za komande" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Statusni kod" @@ -7306,7 +7306,7 @@ msgstr "Kontrole tabele" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Oznake" @@ -7398,7 +7398,7 @@ msgstr "Link će isteći za 15 minuta." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Tržište je prazno. Proveri ponovo kasnije za nove dodatke." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Meni je obrisan." @@ -7455,7 +7455,7 @@ msgstr "Sekcije koje pruža tema ne mogu biti obrisane. Uredi sekciju da kreira msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Teme" @@ -7510,7 +7510,7 @@ msgstr "Ovaj dodatak ne zahteva posebna dozvoljenja." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Ovaj izdavač tvrdi ime koje nije mogao da dokaže da mu pripada — moguće lažno predstavljanje. Instalacija je onemogućena. Ako poznaješ izdavača i veruješ mu, zamoli ga da popravi podešavanje identiteta pre ponovnog pokušaja." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Ovo pravilo preusmeravanja će biti trajno uklonjeno." @@ -7518,7 +7518,7 @@ msgstr "Ovo pravilo preusmeravanja će biti trajno uklonjeno." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Ovo izdanje zahteva novije okruženje nego što tvoj sajt trenutno koristi. Ažuriraj pre instalacije." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Ovo uklanja profil potpisa autora. Linkovi potpisa autora u sadržaju se uklanjaju i pokazivači se brišu." @@ -7556,7 +7556,7 @@ msgstr "Ovo će trajno obrisati \"{0}\" i ukloniti ga iz celog sadržaja." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Ovo će trajno obrisati \"{0}\". Ova radnja se ne može poništiti." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Ovo će trajno obrisati ovaj komentar. Ova radnja se ne može poništiti." @@ -7601,7 +7601,7 @@ msgstr "Separator naslova" msgid "to" msgstr "do" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "za zatvaranje" @@ -7613,7 +7613,7 @@ msgstr "Do datuma" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "da instaliraš dodatke ili ih dodaš u astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "za izbor" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "korpa" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Korpa" @@ -7699,7 +7699,7 @@ msgstr "Korpa" msgid "Trash is empty" msgstr "Korpa je prazna" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Korpa je prazna." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Probaj drugi termin pretrage" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Probaj prilagoditi pretragu" @@ -7916,7 +7916,7 @@ msgstr "Ažuriraj podešavanja sajta" msgid "Update the {0} details" msgstr "Ažuriraj detalje za {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Ažuriraj ovo pravilo preusmeravanja." @@ -8059,7 +8059,7 @@ msgstr "URL šablon" msgid "URL-friendly identifier" msgstr "URL-prijateljski identifikator" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-prijateljski identifikator (npr. \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-prijateljski identifikator (npr. \"primary\", \"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Koristi [param] ili [...rest] u putanjama za uparivanje šablona." @@ -8124,8 +8124,8 @@ msgstr "Detalji korisnika" msgid "User not found" msgstr "Korisnik nije pronađen" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Korisnici" @@ -8148,7 +8148,7 @@ msgstr "v{0} dostupno" msgid "Validation" msgstr "Validacija" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Verifikovani izdavač" @@ -8221,7 +8221,7 @@ msgstr "Pogledaj izvor" msgid "View the {license} license on spdx.org" msgstr "Pogledaj {license} licencu na spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Posetioci koji pristupe ovim putanjama videće grešku." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn nije podržan u ovom pregledaču" msgid "Website" msgstr "Veb sajt" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL veb sajta" @@ -8374,9 +8374,9 @@ msgstr "Naslov vidžeta" msgid "Widget updated" msgstr "Vidžet ažuriran" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Možeš kreirati i uređivati svoj sadržaj." msgid "You can manage content, media, menus, and taxonomies." msgstr "Možeš upravljati sadržajem, medijima, menijima i taksonomijama." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Još uvek možeš uređivati fiksna polja iznad. Čuvanje neće dirati sačuvane vrednosti prilagođenih polja." diff --git a/packages/admin/src/locales/sv/messages.po b/packages/admin/src/locales/sv/messages.po index 4ad7e199f1..d61a2e5abe 100644 --- a/packages/admin/src/locales/sv/messages.po +++ b/packages/admin/src/locales/sv/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Gäst" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Länkad" @@ -35,7 +35,7 @@ msgstr " (öppnas i nytt fönster)" msgid " (selected)" msgstr " (vald)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Välj --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# kommentar uppdaterad} other {# kommentarer uppdaterade}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# kommentar} other {# kommentarer}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# innehållsobjekt importerat} other {# innehållsobjek #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# objekt} other {# objekt}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# inlägg} other {# inlägg}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# omdirigering ingår i en loop.} other {# omdirigeringar ingår i en loop.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# vald} other {# valda}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} krävs – du har {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {Flytta # objekt till papperskorgen? Du kan msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# objekt} other {# objekt}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# totalt} other {# totalt}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Visa # oförändrad} other {Visa # oförä msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} uppladdade, {failed} misslyckades" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/ny-sida eller /artiklar/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/gammal-sida eller /blogg/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Välj \"All content\"" msgid "30 days" msgstr "30 dagar" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Permanent" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Tillfällig" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Tillfällig (strikt)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Permanent (strikt)" @@ -497,15 +497,15 @@ msgstr "4. Klicka på \"Download Export File\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Ange \"EmDash\" och klicka på \"Add New\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404-fel" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Innehåll borttaget (Gone)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Ej tillgänglig av juridiska skäl" @@ -582,7 +582,7 @@ msgstr "Kontoinformation" msgid "ACF Fields" msgstr "ACF-fält" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "admin" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Administratör" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Administrationsnavigering" @@ -803,7 +803,7 @@ msgstr "Alla" msgid "All authors" msgstr "Alla författare" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Alla bylines" @@ -811,7 +811,7 @@ msgstr "Alla bylines" msgid "All capabilities" msgstr "Alla behörigheter" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Alla samlingar" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Alla källor" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Alla statusar" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Alla typer" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Använd länk" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Godkänn" @@ -989,7 +989,7 @@ msgstr "Godkänn" msgid "approved" msgstr "godkänd" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Godkänd" @@ -1026,7 +1026,7 @@ msgstr "Är du säker på att du vill ta bort \"{0}\"? Detta tar även bort allt msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Är du säker på att du vill ta bort fältet \"{0}\"?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Är du säker på att du vill ta bort den här menyn? Detta tar även bort alla menyobjekt. Åtgärden kan inte ångras." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Autentiseringen avbröts eller tog för lång tid. Försök igen." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Auktoriserar …" msgid "Authors" msgstr "Författare" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "auto" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Auto (slug-ändring)" @@ -1236,7 +1236,7 @@ msgstr "Före sändning:" msgid "Bing Verification" msgstr "Bing-verifiering" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biografi" @@ -1259,7 +1259,7 @@ msgstr "Boolean" msgid "Brief summary shown below the title in search results" msgstr "Kort sammanfattning som visas under titeln i sökresultat" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Bläddra bland och installera tillägg som publicerats till det decentraliserade registret." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Punktlista" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Byline-schema" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Byline-schema" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Bylines" @@ -1352,11 +1352,11 @@ msgstr "Kan visa innehåll" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Bildtext" msgid "Captions / Subtitles" msgstr "Bildtexter/undertexter" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategorier" @@ -1554,17 +1554,17 @@ msgstr "Klicka på länken i e-postmeddelandet för att logga in." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Stäng inställningar" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kod" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Kommaseparerade nyckelord för sökning." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Kommentar" @@ -1654,9 +1654,9 @@ msgstr "Kommentar" msgid "Comment Detail" msgstr "Kommentardetaljer" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Kommentarer" @@ -1707,13 +1707,13 @@ msgstr "{0} ansluten" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Innehåll" @@ -1771,9 +1771,9 @@ msgstr "Ögonblicksbild av innehåll:" msgid "Content to Import" msgstr "Innehåll att importera" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Innehållstyper" @@ -1855,7 +1855,7 @@ msgstr "Kunde inte identifiera WordPress" msgid "Couldn't load byline fields." msgstr "Kunde inte läsa in byline-fält." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Kunde inte läsa in anpassade fält." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Antal" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Skapa" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Skapa ett konto" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Skapa byline" @@ -1925,12 +1925,12 @@ msgstr "Skapa innehållstyp" msgid "Create field" msgstr "Skapa fält" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Skapa meny" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Skapa ny meny" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Skapa personliga åtkomsttoken för programmatisk API-åtkomst" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Skapa omdirigering för {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Skapa omdirigering för denna sökväg" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Skapa omdirigeringsregler för att hantera URL-ändringar." @@ -1973,7 +1973,7 @@ msgstr "Skapa schema och importera" msgid "Create Section" msgstr "Skapa sektion" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Skapa sektioner i sektionsbiblioteket för att använda dem här" @@ -1995,7 +1995,7 @@ msgstr "Skapa widgetområde" msgid "Create your account" msgstr "Skapa ditt konto" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Skapa din första navigeringsmeny för att komma igång" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Skapar samlingar och fält …" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "mörk" msgid "Dark" msgstr "Mörk" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Översikt" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Datum" @@ -2186,8 +2186,8 @@ msgstr "Definiera strukturen på ditt innehåll" msgid "Defined in code" msgstr "Definierad i kod" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Definierad i kod" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Ta bort" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Ta bort fältet {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Ta bort menyn {0}" @@ -2255,7 +2255,7 @@ msgstr "Ta bort säkerhetskopia?" msgid "Delete byline field?" msgstr "Ta bort byline-fält?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Ta bort byline?" @@ -2263,7 +2263,7 @@ msgstr "Ta bort byline?" msgid "Delete column" msgstr "Ta bort kolumn" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Ta bort kommentar?" @@ -2292,11 +2292,11 @@ msgstr "Ta bort bild" msgid "Delete Media?" msgstr "Ta bort media?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Ta bort meny" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Ta bort permanent" @@ -2309,16 +2309,16 @@ msgstr "Ta bort permanent" msgid "Delete Permanently?" msgstr "Ta bort permanent?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Ta bort omdirigering" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Ta bort omdirigering {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Ta bort omdirigering?" @@ -2348,18 +2348,18 @@ msgstr "Borttagen" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Att ta bort \"{0}\" tar även bort {1, plural, one {# lagrat värde} other {# lagrade värden}} från alla bylines. Detta kan inte ångras." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Tar bort …" @@ -2414,11 +2414,11 @@ msgstr "Beskrivning" msgid "Description (optional)" msgstr "Beskrivning (valfri)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Mål" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Målsökväg" @@ -2462,7 +2462,7 @@ msgstr "Inaktivera" msgid "Disable plugin" msgstr "Inaktivera tillägg" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Inaktivera omdirigering" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Inaktivera användare?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Visa kategorilista" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Visningsnamn" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Visningsnamn för administrationsgränssnittet" @@ -2706,7 +2706,7 @@ msgstr "Duplicera {title}" msgid "e.g. application/zip or .pdf" msgstr "t.ex. application/zip eller .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "t.ex. import, blogg" @@ -2722,7 +2722,7 @@ msgstr "t.ex. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Redigera" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Redigera {0}" @@ -2782,16 +2782,16 @@ msgstr "Redigera menyobjekt" msgid "Edit menu items" msgstr "Redigera menyobjekt" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Redigera omdirigering" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Redigera omdirigering" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Redigera omdirigering {0}" @@ -2899,12 +2899,12 @@ msgstr "Aktivera fritextsökning för denna samling" msgid "Enable plugin" msgstr "Aktivera tillägg" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Aktivera omdirigering" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Aktiverad" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Det gick inte att läsa in säkerhetskopieringsinställningar" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Det gick inte att läsa in bylines: {0}" @@ -3387,7 +3387,7 @@ msgstr "Det gick inte att läsa in tillägget" msgid "Failed to load plugins: {0}" msgstr "Det gick inte att läsa in tillägg: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Det gick inte att läsa in tillägg. Registeraggregatorn kan vara otillgänglig." @@ -3701,7 +3701,7 @@ msgstr "Filtrera efter författare" msgid "Filter by capability" msgstr "Filtrera efter behörighet" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Filtrera efter samling" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Filtrera efter källa" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Filtrera efter status" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Filtrera efter typ" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Filtrera byline-typ" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Rutnätsvy" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grupp (valfri)" @@ -3814,11 +3814,11 @@ msgstr "Grupp (valfri)" msgid "Group by" msgstr "Gruppera efter" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Gäst-byline" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Endast gäst" @@ -3882,8 +3882,8 @@ msgstr "Dölj token" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hierarkisk (som kategorier, med relationer mellan förälder och barn)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Träffar" @@ -3985,8 +3985,8 @@ msgstr "bild-URL:er uppdaterade i" msgid "Images" msgstr "Bilder" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Importera" @@ -4153,7 +4153,7 @@ msgstr "Infoga länk" msgid "Insert raw HTML" msgstr "Infoga rå HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Infoga sektion" @@ -4184,7 +4184,7 @@ msgstr "Installation" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Installerad" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Senaste inloggning" msgid "Last Login" msgstr "Senaste inloggning" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Senast sedd" @@ -4426,11 +4426,11 @@ msgstr "Länka till ett annat innehållsobjekt" msgid "Linked Accounts ({0})" msgstr "Länkade konton ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Endast länkad" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Länkad användare" @@ -4454,9 +4454,9 @@ msgstr "Live-vy" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Läs in mer" @@ -4480,7 +4480,7 @@ msgstr "Läser in byline-fält …" msgid "Loading collections..." msgstr "Läser in samlingar …" -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Läser in kommentarer …" @@ -4501,7 +4501,7 @@ msgstr "Läser in redigerare …" msgid "Loading menu..." msgstr "Läser in meny …" -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Läser in menyer …" @@ -4509,11 +4509,11 @@ msgstr "Läser in menyer …" msgid "Loading plugins..." msgstr "Läser in tillägg …" -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Läser in omdirigeringar …" -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Läser in sektioner …" @@ -4545,7 +4545,7 @@ msgstr "Läser in widgetar …" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Läser in widgetar …" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Läser in …" @@ -4618,7 +4618,7 @@ msgstr "Skicka nätverksförfrågningar" msgid "Make network requests to any host (unrestricted)" msgstr "Skicka nätverksförfrågningar till valfri värd (obegränsat)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Hantera" @@ -4640,11 +4640,11 @@ msgstr "Hantera innehållswidgetar i dina widgetområden" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Hantera installerade tillägg. Aktivera eller inaktivera tillägg för att styra deras funktionalitet." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Hantera navigeringsmenyer för din webbplats" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Hantera URL-omdirigeringar och visa 404-fel." @@ -4660,7 +4660,7 @@ msgstr "Hanteras av {providerName}" msgid "Managed by an external media provider" msgstr "Hanteras av en extern medieleverantör" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manuell" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Tilldela WordPress-användaren {0} till en EmDash-användare" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Markera {0} som borttagen (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Markera som borttagen (410) – talar om för sökmotorer att den permanent tagits bort" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Markera som skräppost" @@ -4697,7 +4697,7 @@ msgstr "marknadsplats" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marknadsplats" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Medieimport slutförd" msgid "Media import was skipped" msgstr "Medieimport hoppades över" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Mediebibliotek" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Menyn \"{0}\" ({1}) skapades." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Menyn \"{0}\" har skapats." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Meny skapad" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Meny borttagen" @@ -4811,9 +4811,9 @@ msgstr "Menyn hittades inte" msgid "Menu order has been updated." msgstr "Menyordningen har uppdaterats." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menyer" @@ -4961,7 +4961,7 @@ msgstr "Min fantastiska blogg" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Namn och etikett krävs" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Namnet måste börja med en bokstav och får endast innehålla gemener, siffror och understreck" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Navigering" @@ -4992,7 +4992,7 @@ msgstr "Aldrig" msgid "new" msgstr "ny" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Ny" @@ -5030,8 +5030,8 @@ msgstr "Nytt fält" msgid "New public routes" msgstr "Nya offentliga rutter" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Ny omdirigering" @@ -5039,7 +5039,7 @@ msgstr "Ny omdirigering" msgid "New Section" msgstr "Ny sektion" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "ny flik" @@ -5067,7 +5067,7 @@ msgstr "Nyheter" msgid "Next" msgstr "Nästa" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Nästa sida" @@ -5100,7 +5100,7 @@ msgstr "Ingen {0} ännu." msgid "No {0} yet. Create one to get started." msgstr "Ingen {0} ännu. Skapa en för att komma igång." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Inga 404-fel registrerade ännu." @@ -5113,7 +5113,7 @@ msgstr "Ingen alt-text" msgid "No API tokens yet. Create one to get started." msgstr "Inga API-token ännu. Skapa en för att komma igång." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Inga godkända kommentarer ännu." @@ -5125,7 +5125,7 @@ msgstr "Inga byline-fält ännu." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Inga bylines tillgängliga i {entryLocale}. Skapa en variant på sidan Bylines innan du krediterar den på denna post." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Inga bylines hittades" @@ -5137,11 +5137,11 @@ msgstr "Inga bylines valda." msgid "No collections configured" msgstr "Inga samlingar konfigurerade" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Inga kommentarer väntar på moderering." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Inga kommentarer matchar din sökning." @@ -5214,7 +5214,7 @@ msgstr "Inga objekt ännu" msgid "No limit" msgstr "Ingen gräns" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Ingen länkad användare" @@ -5257,7 +5257,7 @@ msgstr "Ingen media hittades" msgid "No menu items yet" msgstr "Inga menyobjekt ännu" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Inga menyer ännu" @@ -5290,11 +5290,11 @@ msgstr "Inga tillägg konfigurerade" msgid "No plugins found" msgstr "Inga tillägg hittades" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Inga tillägg har publicerats till detta register ännu." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Inga tillägg matchar \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "Ingen offentlig URL tillgänglig" msgid "No recent activity" msgstr "Ingen senaste aktivitet" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Inga omdirigeringar ännu" @@ -5329,7 +5329,7 @@ msgstr "Inga resultat för \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Inga resultat för \"{debouncedQuery}\". Försök med ett annat sökord." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Inga resultat hittades" @@ -5337,11 +5337,11 @@ msgstr "Inga resultat hittades" msgid "No revisions yet" msgstr "Inga revisioner ännu" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Inga sektioner tillgängliga" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Inga sektioner hittades" @@ -5350,7 +5350,7 @@ msgstr "Inga sektioner hittades" msgid "No sections yet" msgstr "Inga sektioner ännu" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Inga skräppostkommentarer." @@ -5423,7 +5423,7 @@ msgstr "Auktorisera endast koder du känner igen." msgid "Only email addresses from allowed domains can sign up." msgstr "Endast e-postadresser från tillåtna domäner kan registrera sig." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Endast gemener, siffror och bindestreck" @@ -5550,8 +5550,8 @@ msgstr "Stycke" msgid "Parent" msgstr "Överordnad" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Del av en omdirigeringsloop" @@ -5624,7 +5624,7 @@ msgstr "Passkeys kräver HTTPS eller http://localhost (med din port); detta vär msgid "Paste your migration key" msgstr "Klistra in din migreringsnyckel" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Sökväg" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "väntande" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Väntande" @@ -5755,7 +5755,7 @@ msgstr "-tillägget på din WordPress-webbplats." msgid "Plugin Permissions" msgstr "Tilläggsbehörigheter" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Tilläggsregister" @@ -5780,12 +5780,12 @@ msgstr "Tillägg uppdaterat" msgid "Plugin widget error" msgstr "Fel i tilläggswidget" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Tillägg" @@ -5849,7 +5849,7 @@ msgstr "Förhandsgranska utkast" msgid "Previous" msgstr "Föregående" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Föregående sida" @@ -5858,7 +5858,7 @@ msgstr "Föregående sida" msgid "Previous screenshot" msgstr "Föregående skärmbild" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Primär navigering" @@ -5997,7 +5997,7 @@ msgstr "Mottagarens e-post" msgid "Recovery link sent to {0}" msgstr "Återställningslänk skickad till {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Omdirigeringsloop upptäckt" @@ -6005,9 +6005,9 @@ msgstr "Omdirigeringsloop upptäckt" msgid "Redirecting to login..." msgstr "Omdirigerar till inloggning …" -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Omdirigeringar" @@ -6048,7 +6048,7 @@ msgstr "Registreringen misslyckades" msgid "Registration was cancelled or timed out. Please try again." msgstr "Registreringen avbröts eller tog för lång tid. Försök igen." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Register" @@ -6350,11 +6350,11 @@ msgstr "Samma fönster" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Spara" @@ -6410,7 +6410,7 @@ msgstr "Sparade \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "Sparade \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Sparar …" @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Sök efter namn eller e-post …" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Sök bland bylines" @@ -6558,11 +6558,11 @@ msgstr "Sök bland bylines" msgid "Search bylines to add..." msgstr "Sök bland bylines att lägga till …" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Sök i kommentarer" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Sök i kommentarer …" @@ -6587,26 +6587,26 @@ msgstr "Sökformulär" msgid "Search media" msgstr "Sök i media" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Sök i sidor och innehåll …" #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Sök i tillägg" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Sök i tillägg …" -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Sök i sektioner …" -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Sök i källa eller mål …" @@ -6664,9 +6664,9 @@ msgstr "Sektionen hittades inte" msgid "Section title" msgstr "Sektionstitel" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Sektioner" @@ -6717,7 +6717,7 @@ msgstr "Säkerhetskontakter" msgid "Security error. Make sure you're on a secure connection." msgstr "Säkerhetsfel. Kontrollera att du använder en säker anslutning." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Välj en komponent …" msgid "Select a menu..." msgstr "Välj en meny …" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Markera alla" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Markera alla på denna sida" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Markera kommentar från {0}" @@ -6923,14 +6923,14 @@ msgstr "Konfigurera din webbplats" msgid "Setting up..." msgstr "Konfigurerar …" -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Inställningar" @@ -7118,7 +7118,7 @@ msgstr "Överhoppad" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Sortera teman" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Källa" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Källsökväg" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "skräppost" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Skräppost" @@ -7218,12 +7218,12 @@ msgstr "Börja skriva, eller skriv \"/\" för kommandon" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Status" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Statuskod" @@ -7306,7 +7306,7 @@ msgstr "Tabellkontroller" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Taggar" @@ -7398,7 +7398,7 @@ msgstr "Länken går ut om 15 minuter." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Marknadsplatsen är tom. Kom tillbaka senare för nya tillägg." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Menyn har tagits bort." @@ -7455,7 +7455,7 @@ msgstr "Sektioner från temat kan inte tas bort. Redigera sektionen för att ska msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Teman" @@ -7510,7 +7510,7 @@ msgstr "Detta tillägg kräver inga särskilda behörigheter." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Denna utgivare gör anspråk på ett namn de inte kunde bevisa att de äger — möjligen för att utge sig för att vara någon annan. Installation är inaktiverad. Om du känner utgivaren och litar på dem, be dem åtgärda sin identitetskonfiguration innan du försöker igen." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Denna omdirigeringsregel tas bort permanent." @@ -7518,7 +7518,7 @@ msgstr "Denna omdirigeringsregel tas bort permanent." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Denna version kräver en nyare miljö än den din webbplats för närvarande körs i. Uppgradera innan du installerar." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Detta tar bort bylineprofilen. Länkar till bylines i innehåll tas bort och huvudreferenser rensas." @@ -7556,7 +7556,7 @@ msgstr "Detta tar bort \"{0}\" permanent och tar bort det från allt innehåll." msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Detta tar bort \"{0}\" permanent. Åtgärden kan inte ångras." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Detta tar bort denna kommentar permanent. Åtgärden kan inte ångras." @@ -7601,7 +7601,7 @@ msgstr "Titelavgränsare" msgid "to" msgstr "till" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "för att stänga" @@ -7613,7 +7613,7 @@ msgstr "Till datum" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "för att installera tillägg, eller lägg till dem i din astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "för att välja" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "papperskorg" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Papperskorg" @@ -7699,7 +7699,7 @@ msgstr "Papperskorg" msgid "Trash is empty" msgstr "Papperskorgen är tom" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Papperskorgen är tom." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Försök med ett annat sökord" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Försök justera din sökning" @@ -7916,7 +7916,7 @@ msgstr "Uppdatera webbplatsinställningar" msgid "Update the {0} details" msgstr "Uppdatera detaljerna för {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Uppdatera denna omdirigeringsregel." @@ -8059,7 +8059,7 @@ msgstr "URL-mönster" msgid "URL-friendly identifier" msgstr "URL-vänlig identifierare" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL-vänlig identifierare (t.ex. \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL-vänlig identifierare (t.ex. \"primary\", \"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Använd [param] eller [...rest] i sökvägar för mönstermatchning." @@ -8124,8 +8124,8 @@ msgstr "Användardetaljer" msgid "User not found" msgstr "Användaren hittades inte" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Användare" @@ -8148,7 +8148,7 @@ msgstr "v{0} tillgänglig" msgid "Validation" msgstr "Validering" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Verifierad utgivare" @@ -8221,7 +8221,7 @@ msgstr "Visa källa" msgid "View the {license} license on spdx.org" msgstr "Visa licensen {license} på spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Besökare som når dessa sökvägar ser ett fel." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn stöds inte i denna webbläsare" msgid "Website" msgstr "Webbplats" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Webbplats-URL" @@ -8374,9 +8374,9 @@ msgstr "Widgettitel" msgid "Widget updated" msgstr "Widget uppdaterad" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Du kan skapa och redigera ditt eget innehåll." msgid "You can manage content, media, menus, and taxonomies." msgstr "Du kan hantera innehåll, media, menyer och taxonomier." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Du kan fortfarande redigera de fasta fälten ovan. Att spara påverkar inte lagrade värden för anpassade fält." diff --git a/packages/admin/src/locales/th/messages.po b/packages/admin/src/locales/th/messages.po index f2ffef7691..9ca3223260 100644 --- a/packages/admin/src/locales/th/messages.po +++ b/packages/admin/src/locales/th/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - ผู้เยี่ยมชม" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - เชื่อมโยงแล้ว" @@ -35,7 +35,7 @@ msgstr " (เปิดในหน้าต่างใหม่)" msgid " (selected)" msgstr " (เลือกแล้ว)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {อัปเดตความคิดเห็น # รายการ} other {อัปเดตความคิดเห็น # รายการ}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# ความคิดเห็น} other {# ความคิดเห็น}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {นำเข้าเนื้อหา # รายก #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# รายการ} other {# รายการ}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# โพสต์} other {# โพสต์}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {การเปลี่ยนเส้นทาง # รายการเป็นส่วนหนึ่งของลูป} other {การเปลี่ยนเส้นทาง # รายการเป็นส่วนหนึ่งของลูป}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {เลือกแล้ว #} other {เลือกแล้ว #}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "ต้องการ {0} {1} — คุณมี {2}" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# รายการ} other {# รายการ}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {รวม #} other {รวม #}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {แสดงรายการที่ไ msgid "{uploaded} uploaded, {failed} failed" msgstr "อัปโหลดแล้ว {uploaded} รายการ, ล้มเหลว {failed} รายการ" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page หรือ /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page หรือ /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. เลือก \"All content\"" msgid "30 days" msgstr "30 วัน" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 ถาวร" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 ชั่วคราว" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 ชั่วคราว (Strict)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 ถาวร (Strict)" @@ -497,15 +497,15 @@ msgstr "4. คลิก \"Download Export File\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. ป้อน \"EmDash\" แล้วคลิก \"Add New\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "ข้อผิดพลาด 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "ข้อมูลบัญชี" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "ผู้ดูแลระบบ" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "การนำทางของผู้ดูแลระบบ" @@ -803,7 +803,7 @@ msgstr "ทั้งหมด" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "ชื่อผู้เขียนทั้งหมด" @@ -811,7 +811,7 @@ msgstr "ชื่อผู้เขียนทั้งหมด" msgid "All capabilities" msgstr "ความสามารถทั้งหมด" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "คอลเลกชันทั้งหมด" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "ทุกแหล่งที่มา" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "ทุกสถานะ" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "ทุกประเภท" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "ใช้ลิงก์" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "อนุมัติ" @@ -989,7 +989,7 @@ msgstr "อนุมัติ" msgid "approved" msgstr "อนุมัติแล้ว" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "อนุมัติแล้ว" @@ -1026,7 +1026,7 @@ msgstr "คุณแน่ใจหรือไม่ว่าต้องกา msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "คุณแน่ใจหรือไม่ว่าต้องการลบฟิลด์ \"{0}\"?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "คุณแน่ใจหรือไม่ว่าต้องการลบเมนูนี้? การดำเนินการนี้จะลบรายการเมนูทั้งหมดด้วย และไม่สามารถยกเลิกได้" @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "การยืนยันตัวตนถูกยกเลิกหรือหมดเวลา โปรดลองอีกครั้ง" #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "กำลังอนุญาตสิทธิ์..." msgid "Authors" msgstr "ผู้เขียน" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "อัตโนมัติ" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "อัตโนมัติ (เปลี่ยน slug)" @@ -1236,7 +1236,7 @@ msgstr "ก่อนส่ง:" msgid "Bing Verification" msgstr "การยืนยัน Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "ประวัติย่อ" @@ -1259,7 +1259,7 @@ msgstr "บูลีน" msgid "Brief summary shown below the title in search results" msgstr "สรุปสั้น ๆ ที่แสดงใต้ชื่อในผลการค้นหา" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "เรียกดูและติดตั้งปลั๊กอินที่เผยแพร่ในรีจิสตรีแบบกระจายศูนย์" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "รายการแบบจุด" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "ชื่อผู้เขียน" @@ -1352,11 +1352,11 @@ msgstr "สามารถดูเนื้อหาได้" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "คำบรรยายภาพ" msgid "Captions / Subtitles" msgstr "คำบรรยายภาพ / คำบรรยายใต้ภาพ" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "หมวดหมู่" @@ -1554,17 +1554,17 @@ msgstr "คลิกลิงก์ในอีเมลเพื่อเข้ #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "โค้ด" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "คำสำคัญสำหรับการค้นหา คั่นด้วยเครื่องหมายจุลภาค" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "ความคิดเห็น" @@ -1654,9 +1654,9 @@ msgstr "ความคิดเห็น" msgid "Comment Detail" msgstr "รายละเอียดความคิดเห็น" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "ความคิดเห็น" @@ -1707,13 +1707,13 @@ msgstr "เชื่อมต่อ {0} แล้ว" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "เนื้อหา" @@ -1771,9 +1771,9 @@ msgstr "สแนปช็อตเนื้อหา:" msgid "Content to Import" msgstr "เนื้อหาที่จะนำเข้า" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "ประเภทเนื้อหา" @@ -1855,7 +1855,7 @@ msgstr "ตรวจไม่พบ WordPress" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "จำนวน" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "สร้าง" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "สร้างบัญชี" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "สร้างชื่อผู้เขียน" @@ -1925,12 +1925,12 @@ msgstr "สร้างประเภทเนื้อหา" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "สร้างเมนู" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "สร้างเมนูใหม่" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "สร้างโทเค็นการเข้าถึงส่วนบุคคลสำหรับการเข้าถึง API แบบเป็นโปรแกรม" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "สร้างการเปลี่ยนเส้นทางสำหรับ {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "สร้างการเปลี่ยนเส้นทางสำหรับเส้นทางนี้" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "สร้างกฎการเปลี่ยนเส้นทางเพื่อจัดการการเปลี่ยนแปลง URL" @@ -1973,7 +1973,7 @@ msgstr "สร้างสคีมาและนำเข้า" msgid "Create Section" msgstr "สร้างส่วน" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "สร้างส่วนในไลบรารีส่วนเพื่อใช้งานที่นี่" @@ -1995,7 +1995,7 @@ msgstr "สร้างพื้นที่วิดเจ็ต" msgid "Create your account" msgstr "สร้างบัญชีของคุณ" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "สร้างเมนูนำทางแรกของคุณเพื่อเริ่มต้น" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "กำลังสร้างคอลเลกชันและฟิลด์..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "มืด" msgid "Dark" msgstr "มืด" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "แดชบอร์ด" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "วันที่" @@ -2186,8 +2186,8 @@ msgstr "กำหนดโครงสร้างของเนื้อหา msgid "Defined in code" msgstr "กำหนดไว้ในโค้ด" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "กำหนดไว้ในโค้ด" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "ลบ" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "ลบฟิลด์ {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "ลบเมนู {0}" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "ลบชื่อผู้เขียนหรือไม่?" @@ -2263,7 +2263,7 @@ msgstr "ลบชื่อผู้เขียนหรือไม่?" msgid "Delete column" msgstr "ลบคอลัมน์" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "ลบความคิดเห็นหรือไม่?" @@ -2292,11 +2292,11 @@ msgstr "ลบรูปภาพ" msgid "Delete Media?" msgstr "ลบมีเดียหรือไม่?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "ลบเมนู" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "ลบถาวร" @@ -2309,16 +2309,16 @@ msgstr "ลบถาวร" msgid "Delete Permanently?" msgstr "ลบถาวรหรือไม่?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "ลบการเปลี่ยนเส้นทาง" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "ลบการเปลี่ยนเส้นทาง {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "ลบการเปลี่ยนเส้นทางหรือไม่?" @@ -2348,18 +2348,18 @@ msgstr "ลบแล้ว" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "กำลังลบ..." @@ -2414,11 +2414,11 @@ msgstr "คำอธิบาย" msgid "Description (optional)" msgstr "คำอธิบาย (ไม่บังคับ)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "ปลายทาง" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "เส้นทางปลายทาง" @@ -2462,7 +2462,7 @@ msgstr "ปิดใช้งาน" msgid "Disable plugin" msgstr "ปิดใช้งานปลั๊กอิน" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "ปิดใช้งานการเปลี่ยนเส้นทาง" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "ปิดใช้งานผู้ใช้หรือไม่?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "ชื่อที่แสดง" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "ชื่อที่แสดงสำหรับส่วนติดต่อผู้ดูแลระบบ" @@ -2706,7 +2706,7 @@ msgstr "ทำสำเนา {title}" msgid "e.g. application/zip or .pdf" msgstr "เช่น application/zip หรือ .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "เช่น import, blog" @@ -2722,7 +2722,7 @@ msgstr "เช่น MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "แก้ไข" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "แก้ไข {0}" @@ -2782,16 +2782,16 @@ msgstr "แก้ไขรายการเมนู" msgid "Edit menu items" msgstr "แก้ไขรายการเมนู" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "แก้ไขการเปลี่ยนเส้นทาง" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "แก้ไขการเปลี่ยนเส้นทาง" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "แก้ไขการเปลี่ยนเส้นทาง {0}" @@ -2896,12 +2896,12 @@ msgstr "เปิดใช้งานการค้นหาแบบเต็ msgid "Enable plugin" msgstr "เปิดใช้งานปลั๊กอิน" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "เปิดใช้งานการเปลี่ยนเส้นทาง" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "เปิดใช้งาน" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "โหลดชื่อผู้เขียนไม่สำเร็จ: {0}" @@ -3384,7 +3384,7 @@ msgstr "โหลดปลั๊กอินไม่สำเร็จ" msgid "Failed to load plugins: {0}" msgstr "โหลดปลั๊กอินไม่สำเร็จ: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "โหลดปลั๊กอินไม่สำเร็จ อาจไม่สามารถเข้าถึงตัวรวบรวมรีจิสตรีได้" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "กรองตามความสามารถ" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "กรองตามคอลเลกชัน" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "กรองตามแหล่งที่มา" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "กรองตามสถานะ" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "กรองตามประเภท" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "กรองตามประเภทชื่อผู้เขียน" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "มุมมองตาราง" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "กลุ่ม (ไม่บังคับ)" @@ -3811,11 +3811,11 @@ msgstr "กลุ่ม (ไม่บังคับ)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "ชื่อผู้เขียนรับเชิญ" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "เฉพาะผู้มาเยือนเท่านั้น" @@ -3879,8 +3879,8 @@ msgstr "ซ่อนโทเค็น" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "แบบลำดับชั้น (เหมือนหมวดหมู่ ที่มีความสัมพันธ์แม่/ลูก)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "การเข้าชม" @@ -3982,8 +3982,8 @@ msgstr "URL ของรูปภาพอัปเดตใน" msgid "Images" msgstr "รูปภาพ" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "นำเข้า" @@ -4150,7 +4150,7 @@ msgstr "แทรกลิงก์" msgid "Insert raw HTML" msgstr "แทรกโค้ด HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "แทรกส่วน" @@ -4181,7 +4181,7 @@ msgstr "การติดตั้ง" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "ติดตั้งแล้ว" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "เข้าสู่ระบบล่าสุด" msgid "Last Login" msgstr "เข้าสู่ระบบล่าสุด" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "พบครั้งล่าสุด" @@ -4423,11 +4423,11 @@ msgstr "ลิงก์ไปยังรายการเนื้อหาอ msgid "Linked Accounts ({0})" msgstr "บัญชีที่เชื่อมโยง ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "เชื่อมโยงเท่านั้น" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "ผู้ใช้ที่เชื่อมโยง" @@ -4451,9 +4451,9 @@ msgstr "มุมมองสด" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "โหลดเพิ่มเติม" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "กำลังโหลดคอลเลกชัน..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "กำลังโหลดความคิดเห็น..." @@ -4498,7 +4498,7 @@ msgstr "กำลังโหลดตัวแก้ไข..." msgid "Loading menu..." msgstr "กำลังโหลดเมนู..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "กำลังโหลดเมนู..." @@ -4506,11 +4506,11 @@ msgstr "กำลังโหลดเมนู..." msgid "Loading plugins..." msgstr "กำลังโหลดปลั๊กอิน..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "กำลังโหลดการเปลี่ยนเส้นทาง..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "กำลังโหลดส่วนต่างๆ..." @@ -4542,7 +4542,7 @@ msgstr "กำลังโหลดวิดเจ็ต..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "กำลังโหลดวิดเจ็ต..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "กำลังโหลด..." @@ -4615,7 +4615,7 @@ msgstr "ส่งคำขอเครือข่าย" msgid "Make network requests to any host (unrestricted)" msgstr "ส่งคำขอเครือข่ายไปยังโฮสต์ใดก็ได้ (ไม่จำกัด)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "จัดการ" @@ -4637,11 +4637,11 @@ msgstr "จัดการวิดเจ็ตเนื้อหาในพื msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "จัดการปลั๊กอินที่ติดตั้งไว้ เปิดใช้งานหรือปิดใช้งานปลั๊กอินเพื่อควบคุมการทำงาน" -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "จัดการเมนูนำทางสำหรับเว็บไซต์ของคุณ" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "จัดการการเปลี่ยนเส้นทาง URL และดูข้อผิดพลาด 404" @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "กำหนดเอง" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "จับคู่ผู้ใช้ WordPress {0} กับผู้ใช้ EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "ทำเครื่องหมายเป็นสแปม" @@ -4694,7 +4694,7 @@ msgstr "marketplace" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Marketplace" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "นำเข้ามีเดียเสร็จสมบูรณ์ msgid "Media import was skipped" msgstr "ข้ามการนำเข้ามีเดียแล้ว" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "คลังมีเดีย" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "สร้างเมนู \"{0}\" ({1}) แล้ว" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "สร้างเมนู \"{0}\" แล้ว" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "สร้างเมนูแล้ว" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "ลบเมนูแล้ว" @@ -4808,9 +4808,9 @@ msgstr "ไม่พบเมนู" msgid "Menu order has been updated." msgstr "อัปเดตลำดับเมนูแล้ว" -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "เมนู" @@ -4958,7 +4958,7 @@ msgstr "My Awesome Blog" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "ต้องระบุชื่อและป้ายกำกับ msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "ชื่อต้องขึ้นต้นด้วยตัวอักษร และประกอบด้วยตัวอักษรพิมพ์เล็ก ตัวเลข และขีดล่างเท่านั้น" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "การนำทาง" @@ -4989,7 +4989,7 @@ msgstr "ไม่เลย" msgid "new" msgstr "ใหม่" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "ใหม่" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "เส้นทางสาธารณะใหม่" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "การเปลี่ยนเส้นทางใหม่" @@ -5036,7 +5036,7 @@ msgstr "การเปลี่ยนเส้นทางใหม่" msgid "New Section" msgstr "ส่วนใหม่" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "แท็บใหม่" @@ -5064,7 +5064,7 @@ msgstr "ข่าวสาร" msgid "Next" msgstr "ถัดไป" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "หน้าถัดไป" @@ -5097,7 +5097,7 @@ msgstr "ยังไม่มี{0}" msgid "No {0} yet. Create one to get started." msgstr "ยังไม่มี{0} สร้างขึ้นมาเพื่อเริ่มต้นใช้งาน" -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "ยังไม่มีการบันทึกข้อผิดพลาด 404" @@ -5110,7 +5110,7 @@ msgstr "ไม่มี alt text" msgid "No API tokens yet. Create one to get started." msgstr "ยังไม่มี API token สร้างขึ้นมาเพื่อเริ่มต้นใช้งาน" -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "ยังไม่มีความคิดเห็นที่อนุมัติแล้ว" @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "ไม่มีชื่อผู้เขียนให้ใช้งานใน {entryLocale} สร้างรูปแบบจากหน้าชื่อผู้เขียนก่อนที่จะระบุเครดิตในรายการนี้" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "ไม่พบชื่อผู้เขียน" @@ -5134,11 +5134,11 @@ msgstr "ยังไม่ได้เลือกชื่อผู้เขี msgid "No collections configured" msgstr "ยังไม่ได้กำหนดค่าคอลเลกชัน" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "ไม่มีความคิดเห็นที่รอการตรวจสอบ" -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "ไม่มีความคิดเห็นที่ตรงกับการค้นหาของคุณ" @@ -5211,7 +5211,7 @@ msgstr "ยังไม่มีรายการ" msgid "No limit" msgstr "ไม่จำกัด" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "ไม่มีผู้ใช้ที่เชื่อมโยง" @@ -5254,7 +5254,7 @@ msgstr "ไม่พบมีเดีย" msgid "No menu items yet" msgstr "ยังไม่มีรายการเมนู" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "ยังไม่มีเมนู" @@ -5287,11 +5287,11 @@ msgstr "ยังไม่มีปลั๊กอินที่กำหนด msgid "No plugins found" msgstr "ไม่พบปลั๊กอิน" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "ยังไม่มีปลั๊กอินที่เผยแพร่ไปยัง registry นี้" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "ไม่มีปลั๊กอินที่ตรงกับ \"{debouncedQuery}\"" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "ไม่มีกิจกรรมล่าสุด" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "ยังไม่มีการเปลี่ยนเส้นทาง" @@ -5326,7 +5326,7 @@ msgstr "ไม่พบผลลัพธ์สำหรับ \"{activeSearch}\ msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "ไม่มีผลลัพธ์สำหรับ \"{debouncedQuery}\" ลองใช้คำค้นหาอื่น" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "ไม่พบผลลัพธ์" @@ -5334,11 +5334,11 @@ msgstr "ไม่พบผลลัพธ์" msgid "No revisions yet" msgstr "ยังไม่มีรุ่นแก้ไข" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "ไม่มีส่วนที่ใช้ได้" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "ไม่พบส่วน" @@ -5347,7 +5347,7 @@ msgstr "ไม่พบส่วน" msgid "No sections yet" msgstr "ยังไม่มีส่วน" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "ไม่มีความคิดเห็นที่เป็นสแปม" @@ -5420,7 +5420,7 @@ msgstr "อนุญาตเฉพาะรหัสที่คุณรู้ msgid "Only email addresses from allowed domains can sign up." msgstr "อนุญาตให้สมัครใช้งานได้เฉพาะอีเมลจากโดเมนที่อนุญาตเท่านั้น" -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "ใช้ได้เฉพาะตัวอักษรพิมพ์เล็ก ตัวเลข และเครื่องหมายขีดกลางเท่านั้น" @@ -5547,8 +5547,8 @@ msgstr "ย่อหน้า" msgid "Parent" msgstr "รายการแม่" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "เป็นส่วนหนึ่งของวงวนการเปลี่ยนเส้นทาง" @@ -5621,7 +5621,7 @@ msgstr "Passkey ต้องใช้ HTTPS หรือ http://localhost (พ msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "เส้นทาง" @@ -5648,7 +5648,7 @@ msgstr "PDF" msgid "pending" msgstr "รอดำเนินการ" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "รอดำเนินการ" @@ -5752,7 +5752,7 @@ msgstr "plugin บนเว็บไซต์ WordPress ของคุณ" msgid "Plugin Permissions" msgstr "สิทธิ์ของปลั๊กอิน" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "ทะเบียนปลั๊กอิน" @@ -5777,12 +5777,12 @@ msgstr "อัปเดตปลั๊กอินแล้ว" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "ปลั๊กอิน" @@ -5846,7 +5846,7 @@ msgstr "ดูตัวอย่างฉบับร่าง" msgid "Previous" msgstr "ก่อนหน้า" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "หน้าก่อนหน้า" @@ -5855,7 +5855,7 @@ msgstr "หน้าก่อนหน้า" msgid "Previous screenshot" msgstr "ภาพหน้าจอก่อนหน้า" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "การนำทางหลัก" @@ -5994,7 +5994,7 @@ msgstr "อีเมลผู้รับ" msgid "Recovery link sent to {0}" msgstr "ส่งลิงก์กู้คืนไปยัง {0} แล้ว" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "ตรวจพบการวนซ้ำของการเปลี่ยนเส้นทาง" @@ -6002,9 +6002,9 @@ msgstr "ตรวจพบการวนซ้ำของการเปลี msgid "Redirecting to login..." msgstr "กำลังเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "การเปลี่ยนเส้นทาง" @@ -6045,7 +6045,7 @@ msgstr "การลงทะเบียนล้มเหลว" msgid "Registration was cancelled or timed out. Please try again." msgstr "การลงทะเบียนถูกยกเลิกหรือหมดเวลา โปรดลองอีกครั้ง" -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "รีจิสทรี" @@ -6347,11 +6347,11 @@ msgstr "หน้าต่างเดียวกัน" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "บันทึก" @@ -6407,7 +6407,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6419,7 +6419,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "กำลังบันทึก..." @@ -6547,7 +6547,7 @@ msgid "Search by name or email..." msgstr "ค้นหาตามชื่อหรืออีเมล..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "ค้นหาชื่อผู้เขียน" @@ -6555,11 +6555,11 @@ msgstr "ค้นหาชื่อผู้เขียน" msgid "Search bylines to add..." msgstr "ค้นหาผู้เขียนเพื่อเพิ่ม..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "ค้นหาความคิดเห็น" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "ค้นหาความคิดเห็น..." @@ -6584,26 +6584,26 @@ msgstr "" msgid "Search media" msgstr "ค้นหามีเดีย" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "ค้นหาหน้าและเนื้อหา..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "ค้นหาปลั๊กอิน" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "ค้นหาปลั๊กอิน..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "ค้นหาส่วน..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "ค้นหาต้นทางหรือปลายทาง..." @@ -6661,9 +6661,9 @@ msgstr "ไม่พบส่วน" msgid "Section title" msgstr "ชื่อส่วน" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "ส่วน" @@ -6714,7 +6714,7 @@ msgstr "ผู้ติดต่อด้านความปลอดภัย msgid "Security error. Make sure you're on a secure connection." msgstr "เกิดข้อผิดพลาดด้านความปลอดภัย ตรวจสอบให้แน่ใจว่าคุณกำลังใช้การเชื่อมต่อที่ปลอดภัย" -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6745,7 +6745,7 @@ msgstr "เลือกคอมโพเนนต์..." msgid "Select a menu..." msgstr "เลือกเมนู..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "เลือกทั้งหมด" @@ -6754,7 +6754,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "เลือกความคิดเห็นโดย {0}" @@ -6920,14 +6920,14 @@ msgstr "ตั้งค่าเว็บไซต์ของคุณ" msgid "Setting up..." msgstr "กำลังตั้งค่า..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "ตั้งค่า" @@ -7115,7 +7115,7 @@ msgstr "ข้ามแล้ว" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7171,12 +7171,12 @@ msgstr "จัดเรียงธีม" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "แหล่งที่มา" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "พาธแหล่งที่มา" @@ -7185,8 +7185,8 @@ msgid "spam" msgstr "สแปม" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "สแปม" @@ -7215,12 +7215,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "สถานะ" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "รหัสสถานะ" @@ -7303,7 +7303,7 @@ msgstr "" msgid "Tagline" msgstr "คำโปรย" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "แท็ก" @@ -7395,7 +7395,7 @@ msgstr "ลิงก์จะหมดอายุใน 15 นาที" msgid "The marketplace is empty. Check back later for new plugins." msgstr "มาร์เก็ตเพลสว่างเปล่า กลับมาตรวจสอบในภายหลังสำหรับปลั๊กอินใหม่" -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "ลบเมนูแล้ว" @@ -7452,7 +7452,7 @@ msgstr "ไม่สามารถลบส่วนที่มาจากธ msgid "Theme: {label}" msgstr "ธีม: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "ธีม" @@ -7507,7 +7507,7 @@ msgstr "ปลั๊กอินนี้ไม่ต้องการสิท msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "ผู้เผยแพร่นี้อ้างชื่อที่ไม่สามารถพิสูจน์ความเป็นเจ้าของได้ — อาจกำลังแอบอ้างเป็นบุคคลอื่น การติดตั้งถูกปิดใช้งาน หากคุณรู้จักผู้เผยแพร่และไว้วางใจพวกเขา ให้ขอให้พวกเขาแก้ไขการตั้งค่าตัวตนก่อนลองอีกครั้ง" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "กฎการเปลี่ยนเส้นทางนี้จะถูกนำออกอย่างถาวร" @@ -7515,7 +7515,7 @@ msgstr "กฎการเปลี่ยนเส้นทางนี้จะ msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "รุ่นนี้ต้องการสภาพแวดล้อมที่ใหม่กว่าที่เว็บไซต์ของคุณใช้อยู่ กรุณาอัปเกรดก่อนติดตั้ง" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "การดำเนินการนี้จะนำโปรไฟล์ชื่อผู้เขียนออก ลิงก์ชื่อผู้เขียนในเนื้อหาจะถูกนำออกและตัวชี้รายการนำจะถูกล้าง" @@ -7553,7 +7553,7 @@ msgstr "การดำเนินการนี้จะลบ \"{0}\" อย msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "การดำเนินการนี้จะลบ \"{0}\" อย่างถาวร ไม่สามารถยกเลิกการดำเนินการนี้ได้" -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "การดำเนินการนี้จะลบความคิดเห็นนี้อย่างถาวร ไม่สามารถยกเลิกการดำเนินการนี้ได้" @@ -7598,7 +7598,7 @@ msgstr "ตัวคั่นชื่อ" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "เพื่อปิด" @@ -7610,7 +7610,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "เพื่อติดตั้งปลั๊กอิน หรือเพิ่มลงใน astro.config.mjs ของคุณ" -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "เพื่อเลือก" @@ -7685,9 +7685,9 @@ msgid "trash" msgstr "ถังขยะ" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "ถังขยะ" @@ -7696,7 +7696,7 @@ msgstr "ถังขยะ" msgid "Trash is empty" msgstr "ถังขยะว่างเปล่า" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "ถังขยะว่างเปล่า" @@ -7713,7 +7713,7 @@ msgid "Try a different search term" msgstr "ลองใช้คำค้นหาอื่น" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "ลองปรับการค้นหาของคุณ" @@ -7913,7 +7913,7 @@ msgstr "อัปเดตการตั้งค่าเว็บไซต์ msgid "Update the {0} details" msgstr "อัปเดตรายละเอียดของ {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "อัปเดตกฎการเปลี่ยนเส้นทางนี้" @@ -8056,7 +8056,7 @@ msgstr "รูปแบบ URL" msgid "URL-friendly identifier" msgstr "ตัวระบุที่เหมาะกับ URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "ตัวระบุที่เหมาะกับ URL (เช่น \"primary\", \"footer\")" @@ -8064,7 +8064,7 @@ msgstr "ตัวระบุที่เหมาะกับ URL (เช่น msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "ใช้ [param] หรือ [...rest] ในเส้นทางเพื่อจับคู่รูปแบบ" @@ -8121,8 +8121,8 @@ msgstr "รายละเอียดผู้ใช้" msgid "User not found" msgstr "ไม่พบผู้ใช้" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "ผู้ใช้" @@ -8145,7 +8145,7 @@ msgstr "มี v{0} ให้ใช้งาน" msgid "Validation" msgstr "การตรวจสอบความถูกต้อง" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "ผู้เผยแพร่ที่ได้รับการยืนยัน" @@ -8218,7 +8218,7 @@ msgstr "ดูซอร์ส" msgid "View the {license} license on spdx.org" msgstr "ดูสัญญาอนุญาต {license} บน spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "ผู้เข้าชมที่เข้าถึงเส้นทางเหล่านี้จะพบข้อผิดพลาด" @@ -8270,7 +8270,7 @@ msgstr "WebAuthn ไม่รองรับในเบราว์เซอร msgid "Website" msgstr "เว็บไซต์" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL ของเว็บไซต์" @@ -8371,9 +8371,9 @@ msgstr "ชื่อวิดเจ็ต" msgid "Widget updated" msgstr "อัปเดตวิดเจ็ตแล้ว" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8454,7 +8454,7 @@ msgstr "คุณสามารถสร้างและแก้ไขเน msgid "You can manage content, media, menus, and taxonomies." msgstr "คุณสามารถจัดการเนื้อหา มีเดีย เมนู และอนุกรมวิธานได้" -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" diff --git a/packages/admin/src/locales/tr/messages.po b/packages/admin/src/locales/tr/messages.po index 0db1534db4..38d5f74a62 100644 --- a/packages/admin/src/locales/tr/messages.po +++ b/packages/admin/src/locales/tr/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Misafir" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Bağlı" @@ -35,7 +35,7 @@ msgstr " (yeni pencerede açılır)" msgid " (selected)" msgstr " (seçildi)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Seç --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# yorum güncellendi} other {# yorum güncellendi}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# yorum} other {# yorum}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# içerik öğesi içe aktarıldı} other {# içerik ö #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# öğe} other {# öğe}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# gönderi} other {# gönderi}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# yönlendirme bir döngünün parçası.} other {# yönlendirme bir döngünün parçası.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# seçildi} other {# seçildi}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} gerekli — {2}'iniz var." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# öğe} other {# öğe}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {toplam #} other {toplam #}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Değişmeyen # öğeyi göster} other {De msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} yüklendi, {failed} başarısız oldu" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page veya /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page veya /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. \"Tüm içerik\"i seçin" msgid "30 days" msgstr "30 gün" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Kalıcı" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Geçici" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Geçici (Katı)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Kalıcı (Katı)" @@ -497,15 +497,15 @@ msgstr "4. \"Dışa Aktarma Dosyasını İndir\"e tıklayın" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. \"EmDash\" girin ve \"Yeni Ekle\"ye tıklayın" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 Hataları" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 İçerik Silindi (Gitti)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Yasal nedenlerden dolayı kullanılamıyor" @@ -582,7 +582,7 @@ msgstr "Hesap Bilgileri" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Yönetici" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Yönetici gezinmesi" @@ -803,7 +803,7 @@ msgstr "Tüm" msgid "All authors" msgstr "Tüm yazarlar" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Tüm yazar bilgileri" @@ -811,7 +811,7 @@ msgstr "Tüm yazar bilgileri" msgid "All capabilities" msgstr "Tüm yetenekler" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Tüm koleksiyonlar" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Tüm Kaynaklar" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Tüm durumlar" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Tüm türler" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Bağlantıyı uygula" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Onayla" @@ -989,7 +989,7 @@ msgstr "Onayla" msgid "approved" msgstr "onaylı" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Onaylı" @@ -1026,7 +1026,7 @@ msgstr "\"{0}\"i silmek istediğinizden emin misiniz? Bu işlem aynı zamanda bu msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "\"{0}\" alanını silmek istediğinizden emin misiniz?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Bu menüyü silmek istediğinizden emin misiniz? Bu aynı zamanda tüm menü öğelerini de silecektir. Bu eylem geri alınamaz." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Kimlik doğrulama iptal edildi veya zaman aşımına uğradı. Lütfen tekrar deneyin." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Yetki veriliyor..." msgid "Authors" msgstr "Yazarlar" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "otomatik" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Otomatik (slug değişikliği)" @@ -1236,7 +1236,7 @@ msgstr "Göndermeden önce:" msgid "Bing Verification" msgstr "Bing Doğrulaması" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Biyografi" @@ -1259,7 +1259,7 @@ msgstr "Mantıksal" msgid "Brief summary shown below the title in search results" msgstr "Arama sonuçlarında başlığın altında gösterilen kısa özet" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Merkeziyetsiz kayıt deposunda yayımlanan eklentilere göz atın ve bunları yükleyin." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Madde İşareti Listesi" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Yazar bilgisi şeması" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Yazar bilgileri" @@ -1352,11 +1352,11 @@ msgstr "İçeriği görüntüleyebilir" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Altyazı" msgid "Captions / Subtitles" msgstr "Alt yazılar" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Kategoriler" @@ -1554,17 +1554,17 @@ msgstr "Oturum açmak için e-postadaki bağlantıya tıklayın." #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Kod" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Arama için virgülle ayrılmış anahtar kelimeler." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Yorum" @@ -1654,9 +1654,9 @@ msgstr "Yorum" msgid "Comment Detail" msgstr "Yorum Detayı" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Yorumlar" @@ -1707,13 +1707,13 @@ msgstr "Bağlı {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "İçerik" @@ -1771,9 +1771,9 @@ msgstr "İçeriğin anlık görüntüsü:" msgid "Content to Import" msgstr "İçe Aktarılacak İçerik" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "İçerik Türleri" @@ -1855,7 +1855,7 @@ msgstr "WordPress algılanamadı" msgid "Couldn't load byline fields." msgstr "Yazar bilgisi alanları yüklenemedi." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Özel alanlar yüklenemedi." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Sayı" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Oluştur" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Bir hesap oluşturun" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Yazar bilgisi oluştur" @@ -1925,12 +1925,12 @@ msgstr "İçerik Türü Oluştur" msgid "Create field" msgstr "Alan oluştur" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Menü Oluştur" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Yeni Menü Oluştur" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Programatik API erişimi için kişisel erişim belirteçleri oluşturun" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "{0} için yönlendirme oluştur" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Bu yol için yönlendirme oluştur" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "URL değişikliklerini yönetmek için yönlendirme kuralları oluşturun." @@ -1973,7 +1973,7 @@ msgstr "Şema Oluştur ve İçe Aktar" msgid "Create Section" msgstr "Bölüm Oluştur" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Burada kullanmak için Bölümler kitaplığında bölüm oluşturun" @@ -1995,7 +1995,7 @@ msgstr "Widget Alanı Oluştur" msgid "Create your account" msgstr "Hesabınızı oluşturun" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Başlamak için ilk gezinme menünüzü oluşturun" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Koleksiyonlar ve alanlar oluşturuluyor..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "koyu" msgid "Dark" msgstr "Koyu" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Kontrol Paneli" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Tarih" @@ -2186,8 +2186,8 @@ msgstr "İçeriğinizin yapısını tanımlayın" msgid "Defined in code" msgstr "Kodda tanımlandı" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Kodda tanımlandı" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Sil" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "{0} alanını silin" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "{0} menüsünü sil" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "Yazar bilgisi alanı silinsin mi?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Yazar bilgisi silinsin mi?" @@ -2263,7 +2263,7 @@ msgstr "Yazar bilgisi silinsin mi?" msgid "Delete column" msgstr "Sütunu sil" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Yorum Silinsin mi?" @@ -2292,11 +2292,11 @@ msgstr "Resmi sil" msgid "Delete Media?" msgstr "Medya Silinsin mi?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Menüyü Sil" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Kalıcı olarak sil" @@ -2309,16 +2309,16 @@ msgstr "Kalıcı Olarak Sil" msgid "Delete Permanently?" msgstr "Kalıcı Olarak Silinsin mi?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Yönlendirmeyi sil" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "{0} yönlendirmesini sil" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Yönlendirme silinsin mi?" @@ -2348,18 +2348,18 @@ msgstr "Silindi" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "\"{0}\" silindiğinde tüm yazar bilgilerinde {1, plural, one {# saklanan değer} other {# saklanan değer}} de kaldırılır. Bu işlem geri alınamaz." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Siliniyor..." @@ -2414,11 +2414,11 @@ msgstr "Açıklama" msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Varış noktası" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Hedef yolu" @@ -2462,7 +2462,7 @@ msgstr "Devre dışı bırak" msgid "Disable plugin" msgstr "Eklentiyi devre dışı bırak" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Yönlendirmeyi devre dışı bırak" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Kullanıcı Devre Dışı Bırakılsın mı?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Ekran adı" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Yönetici arayüzü için görünen ad" @@ -2706,7 +2706,7 @@ msgstr "{title}'i çoğaltın" msgid "e.g. application/zip or .pdf" msgstr "örneğin uygulama/zip veya.pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "örneğin içe aktarma, blog" @@ -2722,7 +2722,7 @@ msgstr "ör. MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Düzenle" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "{0}'i düzenleyin" @@ -2782,16 +2782,16 @@ msgstr "Menü Öğesini Düzenle" msgid "Edit menu items" msgstr "Menü öğelerini düzenle" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Yönlendirmeyi düzenle" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Yönlendirmeyi Düzenle" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "{0} yönlendirmesini düzenleyin" @@ -2899,12 +2899,12 @@ msgstr "Bu koleksiyonda tam metin aramasını etkinleştir" msgid "Enable plugin" msgstr "Eklentiyi etkinleştir" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Yönlendirmeyi etkinleştir" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Etkin" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Yazar bilgileri yüklenemedi: {0}" @@ -3387,7 +3387,7 @@ msgstr "Eklenti yüklenemedi" msgid "Failed to load plugins: {0}" msgstr "Eklentiler yüklenemedi: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Eklentiler yüklenemedi. Kayıt deposu toplayıcısına ulaşılamıyor olabilir." @@ -3701,7 +3701,7 @@ msgstr "Yazara göre filtrele" msgid "Filter by capability" msgstr "Yeteneğe göre filtrele" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Koleksiyona göre filtrele" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Kaynağa göre filtrele" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Duruma göre filtrele" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Türe göre filtrele" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Yazar bilgisi türünü filtrele" @@ -3806,7 +3806,7 @@ msgstr "GrafikQL" msgid "Grid view" msgstr "Izgara görünümü" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Grup (isteğe bağlı)" @@ -3814,11 +3814,11 @@ msgstr "Grup (isteğe bağlı)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Konuk yazar bilgisi" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Yalnızca misafir" @@ -3882,8 +3882,8 @@ msgstr "Belirteci gizle" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Hiyerarşik (kategoriler gibi, ebeveyn/çocuk ilişkilerine sahip)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "İsabetler" @@ -3985,8 +3985,8 @@ msgstr "resim URL'leri şu tarihte güncellendi:" msgid "Images" msgstr "Görseller" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "İçe aktar" @@ -4153,7 +4153,7 @@ msgstr "Bağlantı Ekle" msgid "Insert raw HTML" msgstr "Ham HTML ekle" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Bölüm Ekle" @@ -4184,7 +4184,7 @@ msgstr "Kurulum" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Yüklendi" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Son giriş" msgid "Last Login" msgstr "Son Giriş" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Son görülme" @@ -4426,11 +4426,11 @@ msgstr "Başka bir içerik öğesine bağlantı" msgid "Linked Accounts ({0})" msgstr "Bağlantılı Hesaplar ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Yalnızca bağlantılı" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Bağlantılı kullanıcı" @@ -4454,9 +4454,9 @@ msgstr "Canlı Görünüm" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Daha fazlasını yükle" @@ -4480,7 +4480,7 @@ msgstr "Yazar bilgisi alanları yükleniyor…" msgid "Loading collections..." msgstr "Koleksiyonlar yükleniyor..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Yorumlar yükleniyor..." @@ -4501,7 +4501,7 @@ msgstr "Editör yükleniyor..." msgid "Loading menu..." msgstr "Menü yükleniyor..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Menüler yükleniyor..." @@ -4509,11 +4509,11 @@ msgstr "Menüler yükleniyor..." msgid "Loading plugins..." msgstr "Eklentiler yükleniyor..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Yönlendirmeler yükleniyor..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Bölümler yükleniyor..." @@ -4545,7 +4545,7 @@ msgstr "Widget'lar yükleniyor..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Widget'lar yükleniyor..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Yükleniyor..." @@ -4618,7 +4618,7 @@ msgstr "Ağ istekleri yapın" msgid "Make network requests to any host (unrestricted)" msgstr "Herhangi bir ana bilgisayara ağ istekleri yapın (kısıtlamasız)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Yönet" @@ -4640,11 +4640,11 @@ msgstr "Widget alanlarınızdaki içerik widget'larını yönetin" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Yüklü eklentileri yönetin. İşlevlerini kontrol etmek için eklentileri etkinleştirin veya devre dışı bırakın." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Siteniz için gezinme menülerini yönetin" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "URL yönlendirmelerini yönetin ve 404 hatalarını görüntüleyin." @@ -4660,7 +4660,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Manuel" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "WordPress kullanıcısı {0} ile EmDash kullanıcısını eşle" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "{0}'i Gitti olarak işaretle (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Gitti Olarak İşaretle (410) — arama motorlarına kalıcı olarak silindiğini bildirir" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Spam olarak işaretle" @@ -4697,7 +4697,7 @@ msgstr "pazar yeri" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Pazar yeri" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Medya İçe Aktarma Tamamlandı" msgid "Media import was skipped" msgstr "Medya içe aktarma atlandı" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Medya Kitaplığı" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "\"{0}\" ({1}) menüsü oluşturuldu." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "\"{0}\" menüsü oluşturuldu." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Menü oluşturuldu" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Menü silindi" @@ -4811,9 +4811,9 @@ msgstr "Menü bulunamadı" msgid "Menu order has been updated." msgstr "Menü sırası güncellendi." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Menüler" @@ -4961,7 +4961,7 @@ msgstr "Benim Harika Blogum" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Ad ve etiket gerekli" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Ad bir harfle başlamalı ve yalnızca küçük harfler, rakamlar ve alt çizgilerden oluşmalıdır" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Gezinme" @@ -4992,7 +4992,7 @@ msgstr "Asla" msgid "new" msgstr "yeni" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Yeni" @@ -5030,8 +5030,8 @@ msgstr "Yeni alan" msgid "New public routes" msgstr "Yeni genel yollar" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Yeni Yönlendirme" @@ -5039,7 +5039,7 @@ msgstr "Yeni Yönlendirme" msgid "New Section" msgstr "Yeni Bölüm" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "yeni sekme" @@ -5067,7 +5067,7 @@ msgstr "Haberler" msgid "Next" msgstr "Sonraki" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Sonraki sayfa" @@ -5100,7 +5100,7 @@ msgstr "Henüz {0} yok." msgid "No {0} yet. Create one to get started." msgstr "Henüz {0} yok. Başlamak için bir tane oluşturun." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Henüz 404 hatası kaydedilmedi." @@ -5113,7 +5113,7 @@ msgstr "Alternatif metin yok" msgid "No API tokens yet. Create one to get started." msgstr "Henüz API belirteci yok. Başlamak için bir tane oluşturun." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Henüz onaylanmış yorum yok." @@ -5125,7 +5125,7 @@ msgstr "Henüz yazar bilgisi alanı yok." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "{entryLocale} için yazar bilgisi yok. Bu kayda yazar eklemeden önce Yazar bilgileri sayfasından bir varyant oluşturun." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Yazar bilgisi bulunamadı" @@ -5137,11 +5137,11 @@ msgstr "Yazar bilgisi seçilmedi." msgid "No collections configured" msgstr "Yapılandırılmış koleksiyon yok" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Denetlenmeyi bekleyen yorum yok." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Aramanızla eşleşen yorum yok." @@ -5214,7 +5214,7 @@ msgstr "Henüz öğe yok" msgid "No limit" msgstr "Sınır yok" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Bağlı kullanıcı yok" @@ -5257,7 +5257,7 @@ msgstr "Medya bulunamadı" msgid "No menu items yet" msgstr "Henüz menü öğesi yok" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Henüz menü yok" @@ -5290,11 +5290,11 @@ msgstr "Hiçbir eklenti yapılandırılmadı" msgid "No plugins found" msgstr "Hiçbir eklenti bulunamadı" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "Bu kayıt deposunda henüz eklenti yayımlanmadı." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "\"{debouncedQuery}\" ile eşleşen eklenti yok." @@ -5310,7 +5310,7 @@ msgstr "" msgid "No recent activity" msgstr "Yakın zamanda etkinlik yok" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Henüz yönlendirme yok" @@ -5329,7 +5329,7 @@ msgstr "\"{activeSearch}\" için sonuç yok" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "\"{debouncedQuery}\" için sonuç bulunamadı. Farklı bir arama terimi deneyin." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Sonuç bulunamadı" @@ -5337,11 +5337,11 @@ msgstr "Sonuç bulunamadı" msgid "No revisions yet" msgstr "Henüz revizyon yok" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Hiçbir bölüm mevcut değil" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Hiçbir bölüm bulunamadı" @@ -5350,7 +5350,7 @@ msgstr "Hiçbir bölüm bulunamadı" msgid "No sections yet" msgstr "Henüz bölüm yok" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Spam yorum yok." @@ -5423,7 +5423,7 @@ msgstr "Yalnızca tanıdığınız kodları yetkilendirin." msgid "Only email addresses from allowed domains can sign up." msgstr "Yalnızca izin verilen alanlardaki e-posta adresleri kaydolabilir." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Yalnızca küçük harfler, sayılar ve kısa çizgiler" @@ -5550,8 +5550,8 @@ msgstr "Paragraf" msgid "Parent" msgstr "Ebeveyn" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Yönlendirme döngüsünün parçası" @@ -5624,7 +5624,7 @@ msgstr "Geçiş anahtarları HTTPS veya http://localhost (portunuzla) gerektirir msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Yol" @@ -5651,7 +5651,7 @@ msgstr "PDF'ler" msgid "pending" msgstr "beklemede" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Beklemede" @@ -5755,7 +5755,7 @@ msgstr "eklentisini WordPress sitenize kurun." msgid "Plugin Permissions" msgstr "Eklenti İzinleri" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Eklenti Kayıt Deposu" @@ -5780,12 +5780,12 @@ msgstr "Eklenti güncellendi" msgid "Plugin widget error" msgstr "Eklenti widget'ı hatası" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Eklentiler" @@ -5849,7 +5849,7 @@ msgstr "Taslağı önizleyin" msgid "Previous" msgstr "Öncesi" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Önceki sayfa" @@ -5858,7 +5858,7 @@ msgstr "Önceki sayfa" msgid "Previous screenshot" msgstr "Önceki ekran görüntüsü" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Birincil gezinme" @@ -5997,7 +5997,7 @@ msgstr "Alıcı e-postası" msgid "Recovery link sent to {0}" msgstr "{0}'e kurtarma bağlantısı gönderildi" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Yönlendirme döngüsü algılandı" @@ -6005,9 +6005,9 @@ msgstr "Yönlendirme döngüsü algılandı" msgid "Redirecting to login..." msgstr "Giriş yapmaya yönlendiriliyorsunuz..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Yönlendirmeler" @@ -6048,7 +6048,7 @@ msgstr "Kayıt başarısız oldu" msgid "Registration was cancelled or timed out. Please try again." msgstr "Kayıt iptal edildi veya zaman aşımına uğradı. Lütfen tekrar deneyin." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Kayıt deposu" @@ -6350,11 +6350,11 @@ msgstr "Aynı pencere" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Kaydet" @@ -6410,7 +6410,7 @@ msgstr "\"{0}\" kaydedildi." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "\"{0}\" kaydedildi." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Kaydediliyor..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Ada veya e-postaya göre arayın..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Yazar bilgilerini ara" @@ -6558,11 +6558,11 @@ msgstr "Yazar bilgilerini ara" msgid "Search bylines to add..." msgstr "Eklenecek yazar bilgilerini ara..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Yorumları ara" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Yorumları ara..." @@ -6587,26 +6587,26 @@ msgstr "" msgid "Search media" msgstr "Medya ara" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Sayfalarda ve içerikte arama yapın..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Eklentileri ara" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Eklentileri ara..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Bölümleri ara..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Kaynağı veya hedefi arayın..." @@ -6664,9 +6664,9 @@ msgstr "Bölüm Bulunamadı" msgid "Section title" msgstr "Bölüm başlığı" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Bölümler" @@ -6717,7 +6717,7 @@ msgstr "Güvenlik kişileri" msgid "Security error. Make sure you're on a secure connection." msgstr "Güvenlik hatası. Güvenli bir bağlantıda olduğunuzdan emin olun." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Bir bileşen seçin..." msgid "Select a menu..." msgstr "Bir menü seçin..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Tümünü seç" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "{0}'in yorumunu seçin" @@ -6923,14 +6923,14 @@ msgstr "Sitenizi kurun" msgid "Setting up..." msgstr "Kurulum..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Ayarlar" @@ -7118,7 +7118,7 @@ msgstr "Atlandı" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Temaları sırala" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Kaynak" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Kaynak yolu" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "spam" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Spam" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Durum" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Durum kodu" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "Slogan" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Etiketler" @@ -7398,7 +7398,7 @@ msgstr "Bağlantının süresi 15 dakika içinde dolacaktır." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Pazar yeri boş. Yeni eklentiler için daha sonra tekrar kontrol edin." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Menü silindi." @@ -7455,7 +7455,7 @@ msgstr "Tema tarafından sağlanan bölümler silinemez. Özel bir kopya oluştu msgid "Theme: {label}" msgstr "Tema: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Temalar" @@ -7510,7 +7510,7 @@ msgstr "Bu eklenti özel izin gerektirmez." msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Bu yayıncı, sahibi olduğunu kanıtlayamadığı bir adı iddia ediyor; muhtemelen başka birinin kimliğine bürünüyor. Kurulum devre dışı. Yayıncıyı tanıyorsanız ve ona güveniyorsanız, yeniden denemeden önce kimlik ayarlarını düzeltmelerini isteyin." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Bu yönlendirme kuralı kalıcı olarak kaldırılacak." @@ -7518,7 +7518,7 @@ msgstr "Bu yönlendirme kuralı kalıcı olarak kaldırılacak." msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Bu sürüm, sitenizin şu anda çalıştığından daha yeni bir ortam gerektiriyor. Yüklemeden önce yükseltin." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Bu, yazar bilgisi profilini kaldırır. İçerikteki yazar bilgisi bağlantıları kaldırılır ve ana yazar işaretçileri temizlenir." @@ -7556,7 +7556,7 @@ msgstr "Bu, \"{0}\"i kalıcı olarak silecek ve tüm içerikten kaldıracaktır. msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Bu, \"{0}\" dosyasını kalıcı olarak silecektir. Bu eylem geri alınamaz." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Bu işlem, bu yorumu kalıcı olarak silecektir. Bu eylem geri alınamaz." @@ -7601,7 +7601,7 @@ msgstr "Başlık Ayırıcı" msgid "to" msgstr "ile" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "kapatmak için" @@ -7613,7 +7613,7 @@ msgstr "Bitiş tarihi" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "sayfasına göz atın veya eklentileri astro.config.mjs dosyanıza ekleyin." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "seçmek için" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "çöp" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Çöp" @@ -7699,7 +7699,7 @@ msgstr "Çöp" msgid "Trash is empty" msgstr "Çöp kutusu boş" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Çöp kutusu boş." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Farklı bir arama terimi deneyin" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Aramanızı ayarlamayı deneyin" @@ -7916,7 +7916,7 @@ msgstr "Site ayarlarını güncelle" msgid "Update the {0} details" msgstr "{0} ayrıntılarını güncelleyin" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Bu yönlendirme kuralını güncelleyin." @@ -8059,7 +8059,7 @@ msgstr "URL Modeli" msgid "URL-friendly identifier" msgstr "URL dostu tanımlayıcı" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL dostu tanımlayıcı (ör. \"birincil\", \"alt bilgi\")" @@ -8067,7 +8067,7 @@ msgstr "URL dostu tanımlayıcı (ör. \"birincil\", \"alt bilgi\")" msgid "URL:" msgstr "URL'si:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Desen eşleştirme için yollarda [param] veya [...rest] kullanın." @@ -8124,8 +8124,8 @@ msgstr "Kullanıcı Detayları" msgid "User not found" msgstr "Kullanıcı bulunamadı" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Kullanıcılar" @@ -8148,7 +8148,7 @@ msgstr "v{0} mevcut" msgid "Validation" msgstr "Doğrulama" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Doğrulanmış yayıncı" @@ -8221,7 +8221,7 @@ msgstr "Kaynağı görüntüle" msgid "View the {license} license on spdx.org" msgstr "{license} lisansını spdx.org'da görüntüleyin" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Bu yollara giren ziyaretçiler bir hata görecektir." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn bu tarayıcıda desteklenmiyor" msgid "Website" msgstr "Web sitesi" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "Web sitesi URL'si" @@ -8374,9 +8374,9 @@ msgstr "Widget başlığı" msgid "Widget updated" msgstr "Widget güncellendi" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Kendi içeriğinizi oluşturabilir ve düzenleyebilirsiniz." msgid "You can manage content, media, menus, and taxonomies." msgstr "İçeriği, medyayı, menüleri ve sınıflandırmaları yönetebilirsiniz." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Yukarıdaki sabit alanları hâlâ düzenleyebilirsiniz. Kaydetme, saklanan özel alan değerlerine dokunmayacaktır." diff --git a/packages/admin/src/locales/uk/messages.po b/packages/admin/src/locales/uk/messages.po index b472254c77..48b0fffdc5 100644 --- a/packages/admin/src/locales/uk/messages.po +++ b/packages/admin/src/locales/uk/messages.po @@ -13,11 +13,11 @@ msgstr "" "Last-Translator: \n" "Language-Team: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - Гість" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - Пов'язано" @@ -35,7 +35,7 @@ msgstr " (відкривається в новому вікні)" msgid " (selected)" msgstr " (обрано)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- Оберіть --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# коментар оновлено} few {# коментарі оновлено} many {# коментарів оновлено} other {# коментарів оновлено}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# коментар} few {# коментарі} many {# коментарів} other {# коментарів}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# елемент вмісту імпортовано} f #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# допис} few {# дописи} many {# дописів} other {# дописів}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# перенаправлення утворює цикл.} few {# перенаправлення утворюють цикл.} many {# перенаправлень утворюють цикл.} other {# перенаправлень утворюють цикл.}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# обрано} few {# обрано} many {# обрано} other {# обрано}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} потрібно — у вас {2}." #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "{selectedCount, plural, one {Перемістити # елемент у msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# елемент} few {# елементи} many {# елементів} other {# елементів}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {# всього} few {# всього} many {# всього} other {# всього}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {Показати # без змін} few { msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} завантажено, {failed} не вдалося" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page або /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page або /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. Виберіть \"Увесь вміст\"" msgid "30 days" msgstr "30 днів" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 Постійне" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 Тимчасове" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 Тимчасове (суворе)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 Постійне (суворе)" @@ -497,15 +497,15 @@ msgstr "4. Натисніть \"Завантажити файл експорту msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. Введіть \"EmDash\" і натисніть \"Додати\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "Помилки 404" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 Вміст видалено (Gone)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 Недоступно з юридичних причин" @@ -582,7 +582,7 @@ msgstr "Інформація про обліковий запис" msgid "ACF Fields" msgstr "Поля ACF" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "адмін" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "Адмін" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "Навігація адмін-панелі" @@ -803,7 +803,7 @@ msgstr "Усі" msgid "All authors" msgstr "Усі автори" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "Усі підписи" @@ -811,7 +811,7 @@ msgstr "Усі підписи" msgid "All capabilities" msgstr "Усі можливості" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "Усі колекції" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "Усі джерела" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "Усі статуси" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "Усі типи" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "Застосувати посилання" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "Схвалити" @@ -989,7 +989,7 @@ msgstr "Схвалити" msgid "approved" msgstr "схвалено" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "Схвалено" @@ -1026,7 +1026,7 @@ msgstr "Ви впевнені, що хочете видалити \"{0}\"? Це msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "Ви впевнені, що хочете видалити поле \"{0}\"?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "Ви впевнені, що хочете видалити це меню? Це також видалить усі елементи меню. Цю дію не можна скасувати." @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "Автентифікацію скасовано або час вичерпано. Спробуйте ще раз." #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "Авторизація..." msgid "Authors" msgstr "Автори" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "авто" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "Авто (зміна slug)" @@ -1236,7 +1236,7 @@ msgstr "Перед надсиланням:" msgid "Bing Verification" msgstr "Верифікація Bing" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "Біо" @@ -1259,7 +1259,7 @@ msgstr "Логічний" msgid "Brief summary shown below the title in search results" msgstr "Короткий опис під заголовком у результатах пошуку" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "Переглядайте та встановлюйте плагіни з децентралізованого реєстру." @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "Маркований список" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "Схема підпису" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "Схема підпису" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "Підписи" @@ -1352,11 +1352,11 @@ msgstr "Може переглядати вміст" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "Підпис" msgid "Captions / Subtitles" msgstr "Підписи / Субтитри" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "Категорії" @@ -1554,17 +1554,17 @@ msgstr "Перейдіть за посиланням у листі, щоб ув #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "Закрити налаштування" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "Код" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "Ключові слова для пошуку через кому." #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "Коментар" @@ -1654,9 +1654,9 @@ msgstr "Коментар" msgid "Comment Detail" msgstr "Деталі коментаря" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "Коментарі" @@ -1707,13 +1707,13 @@ msgstr "Підключено {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "Вміст" @@ -1771,9 +1771,9 @@ msgstr "Знімок вмісту:" msgid "Content to Import" msgstr "Вміст для імпорту" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "Типи вмісту" @@ -1855,7 +1855,7 @@ msgstr "Не вдалося виявити WordPress" msgid "Couldn't load byline fields." msgstr "Не вдалося завантажити поля підпису." -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "Не вдалося завантажити власні поля." @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "Кількість" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "Створити" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "Створити обліковий запис" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "Створити підпис" @@ -1925,12 +1925,12 @@ msgstr "Створити тип вмісту" msgid "Create field" msgstr "Створити поле" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "Створити меню" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "Створити нове меню" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "Створюйте персональні токени доступу для програмного доступу до API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "Створити перенаправлення для {0}" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "Створити перенаправлення для цього шляху" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "Створюйте правила перенаправлення для керування змінами URL." @@ -1973,7 +1973,7 @@ msgstr "Створити схему й імпортувати" msgid "Create Section" msgstr "Створити секцію" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "Створіть секції в бібліотеці секцій, щоб використовувати їх тут" @@ -1995,7 +1995,7 @@ msgstr "Створити область віджетів" msgid "Create your account" msgstr "Створіть обліковий запис" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "Створіть перше навігаційне меню, щоб почати" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "Створення колекцій і полів..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "темна" msgid "Dark" msgstr "Темна" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "Панель керування" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "Дата" @@ -2186,8 +2186,8 @@ msgstr "Визначте структуру вашого вмісту" msgid "Defined in code" msgstr "Визначено в коді" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "Визначено в коді" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "Видалити" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "Видалити поле {0}" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "Видалити меню {0}" @@ -2255,7 +2255,7 @@ msgstr "Видалити резервну копію?" msgid "Delete byline field?" msgstr "Видалити поле підпису?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "Видалити підпис?" @@ -2263,7 +2263,7 @@ msgstr "Видалити підпис?" msgid "Delete column" msgstr "Видалити стовпець" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "Видалити коментар?" @@ -2292,11 +2292,11 @@ msgstr "Видалити зображення" msgid "Delete Media?" msgstr "Видалити медіа?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "Видалити меню" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "Видалити назавжди" @@ -2309,16 +2309,16 @@ msgstr "Видалити назавжди" msgid "Delete Permanently?" msgstr "Видалити назавжди?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "Видалити перенаправлення" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "Видалити перенаправлення {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "Видалити перенаправлення?" @@ -2348,18 +2348,18 @@ msgstr "Видалено" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "Видалення \"{0}\" також прибере {1, plural, one {# збережене значення} few {# збережені значення} many {# збережених значень} other {# збережених значень}} у всіх підписах. Цю дію не можна скасувати." -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "Видалення..." @@ -2414,11 +2414,11 @@ msgstr "Опис" msgid "Description (optional)" msgstr "Опис (необов'язково)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "Призначення" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "Шлях призначення" @@ -2462,7 +2462,7 @@ msgstr "Вимкнути" msgid "Disable plugin" msgstr "Вимкнути плагін" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "Вимкнути перенаправлення" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "Вимкнути користувача?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "Показати список категорій" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "Відображуване ім'я" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "Відображуване ім'я в адмін-інтерфейсі" @@ -2706,7 +2706,7 @@ msgstr "Дублювати {title}" msgid "e.g. application/zip or .pdf" msgstr "напр. application/zip або .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "напр. import, blog" @@ -2722,7 +2722,7 @@ msgstr "напр., MacBook Pro, iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "Редагувати" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "Редагувати {0}" @@ -2782,16 +2782,16 @@ msgstr "Редагувати елемент меню" msgid "Edit menu items" msgstr "Редагувати елементи меню" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "Редагувати перенаправлення" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "Редагувати перенаправлення" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "Редагувати перенаправлення {0}" @@ -2899,12 +2899,12 @@ msgstr "Увімкнути повнотекстовий пошук у цій к msgid "Enable plugin" msgstr "Увімкнути плагін" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "Увімкнути перенаправлення" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "Увімкнено" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "Не вдалося завантажити налаштування резервного копіювання" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "Не вдалося завантажити підписи: {0}" @@ -3387,7 +3387,7 @@ msgstr "Не вдалося завантажити плагін" msgid "Failed to load plugins: {0}" msgstr "Не вдалося завантажити плагіни: {0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "Не вдалося завантажити плагіни. Агрегатор реєстру може бути недоступним." @@ -3701,7 +3701,7 @@ msgstr "Фільтр за автором" msgid "Filter by capability" msgstr "Фільтр за можливістю" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "Фільтр за колекцією" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "Фільтр за джерелом" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "Фільтр за статусом" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "Фільтр за типом" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "Фільтр за типом підпису" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "Сітка" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "Група (необов'язково)" @@ -3814,11 +3814,11 @@ msgstr "Група (необов'язково)" msgid "Group by" msgstr "Групувати за" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "Гостьовий підпис" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "Лише гості" @@ -3882,8 +3882,8 @@ msgstr "Приховати токен" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "Ієрархічна (як категорії, з батьківсько-дочірніми зв'язками)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "Переходи" @@ -3985,8 +3985,8 @@ msgstr "URL зображень оновлено в" msgid "Images" msgstr "Зображення" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "Імпорт" @@ -4153,7 +4153,7 @@ msgstr "Вставити посилання" msgid "Insert raw HTML" msgstr "Вставити HTML-код" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "Вставити секцію" @@ -4184,7 +4184,7 @@ msgstr "Встановлення" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "Встановлено" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "Останній вхід" msgid "Last Login" msgstr "Останній вхід" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "Остання активність" @@ -4426,11 +4426,11 @@ msgstr "Посилання на інший елемент вмісту" msgid "Linked Accounts ({0})" msgstr "Пов'язані облікові записи ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "Лише пов'язані" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "Пов'язаний користувач" @@ -4454,9 +4454,9 @@ msgstr "Перегляд наживо" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "Завантажити ще" @@ -4480,7 +4480,7 @@ msgstr "Завантаження полів підпису…" msgid "Loading collections..." msgstr "Завантаження колекцій..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "Завантаження коментарів..." @@ -4501,7 +4501,7 @@ msgstr "Завантаження редактора..." msgid "Loading menu..." msgstr "Завантаження меню..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "Завантаження меню..." @@ -4509,11 +4509,11 @@ msgstr "Завантаження меню..." msgid "Loading plugins..." msgstr "Завантаження плагінів..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "Завантаження перенаправлень..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "Завантаження секцій..." @@ -4545,7 +4545,7 @@ msgstr "Завантаження віджетів..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "Завантаження віджетів..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "Завантаження..." @@ -4618,7 +4618,7 @@ msgstr "Виконувати мережеві запити" msgid "Make network requests to any host (unrestricted)" msgstr "Виконувати мережеві запити до будь-якого хоста (без обмежень)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "Керувати" @@ -4640,11 +4640,11 @@ msgstr "Керувати віджетами вмісту в областях в msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "Керуйте встановленими плагінами. Увімкніть або вимкніть плагіни для керування їх функціональністю." -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "Керуйте навігаційними меню вашого сайту" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "Керуйте URL-перенаправленнями та переглядайте помилки 404." @@ -4660,7 +4660,7 @@ msgstr "Керується {providerName}" msgid "Managed by an external media provider" msgstr "Керується зовнішнім медіа-провайдером" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "Вручну" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "Зіставити користувача WordPress {0} з користувачем EmDash" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "Позначити {0} як видалено (410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "Позначити як видалено (410) — повідомляє пошуковим системам, що сторінку остаточно видалено" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "Позначити як спам" @@ -4697,7 +4697,7 @@ msgstr "маркетплейс" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "Маркетплейс" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "Імпорт медіа завершено" msgid "Media import was skipped" msgstr "Імпорт медіа пропущено" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "Медіатека" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "Меню \"{0}\" ({1}) створено." #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "Меню \"{0}\" створено." -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "Меню створено" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "Меню видалено" @@ -4811,9 +4811,9 @@ msgstr "Меню не знайдено" msgid "Menu order has been updated." msgstr "Порядок меню оновлено." -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "Меню" @@ -4961,7 +4961,7 @@ msgstr "Мій чудовий блог" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "Ім'я та мітка обов'язкові" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "Ім'я має починатися з літери і містити лише малі літери, цифри та підкреслення" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "Навігація" @@ -4992,7 +4992,7 @@ msgstr "Ніколи" msgid "new" msgstr "новий" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "Новий" @@ -5030,8 +5030,8 @@ msgstr "Нове поле" msgid "New public routes" msgstr "Нові публічні маршрути" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "Нове перенаправлення" @@ -5039,7 +5039,7 @@ msgstr "Нове перенаправлення" msgid "New Section" msgstr "Нова секція" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "нова вкладка" @@ -5067,7 +5067,7 @@ msgstr "Новини" msgid "Next" msgstr "Далі" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "Наступна сторінка" @@ -5100,7 +5100,7 @@ msgstr "Ще немає {0}." msgid "No {0} yet. Create one to get started." msgstr "Ще немає {0}. Створіть, щоб почати." -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "Ще не зафіксовано помилок 404." @@ -5113,7 +5113,7 @@ msgstr "Немає alt-тексту" msgid "No API tokens yet. Create one to get started." msgstr "Ще немає API-токенів. Створіть, щоб почати." -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "Ще немає схвалених коментарів." @@ -5125,7 +5125,7 @@ msgstr "Ще немає полів підпису." msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "Немає доступних підписів у {entryLocale}. Створіть варіант на сторінці Підписи, перш ніж вказати його в цьому записі." -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "Підписи не знайдено" @@ -5137,11 +5137,11 @@ msgstr "Підписи не вибрано." msgid "No collections configured" msgstr "Колекції не налаштовано" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "Немає коментарів на модерації." -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "Жоден коментар не відповідає вашому пошуку." @@ -5214,7 +5214,7 @@ msgstr "Ще немає елементів" msgid "No limit" msgstr "Без ліміту" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "Немає пов'язаного користувача" @@ -5257,7 +5257,7 @@ msgstr "Медіа не знайдено" msgid "No menu items yet" msgstr "Ще немає пунктів меню" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "Ще немає меню" @@ -5290,11 +5290,11 @@ msgstr "Плагіни не налаштовано" msgid "No plugins found" msgstr "Плагіни не знайдено" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "У цьому реєстрі ще не опубліковано жодного плагіна." -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "Немає плагінів, що відповідають \"{debouncedQuery}\"." @@ -5310,7 +5310,7 @@ msgstr "Публічний URL недоступний" msgid "No recent activity" msgstr "Немає недавньої активності" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "Ще немає перенаправлень" @@ -5329,7 +5329,7 @@ msgstr "Немає результатів для \"{activeSearch}\"" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "Немає результатів для \"{debouncedQuery}\". Спробуйте інший пошуковий запит." -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "Результатів не знайдено" @@ -5337,11 +5337,11 @@ msgstr "Результатів не знайдено" msgid "No revisions yet" msgstr "Ще немає ревізій" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "Немає доступних секцій" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "Секції не знайдено" @@ -5350,7 +5350,7 @@ msgstr "Секції не знайдено" msgid "No sections yet" msgstr "Ще немає секцій" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "Немає спам-коментарів." @@ -5423,7 +5423,7 @@ msgstr "Авторизуйте лише коди, які ви впізнаєте msgid "Only email addresses from allowed domains can sign up." msgstr "Реєструватися можуть лише email-адреси з дозволених доменів." -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "Лише малі літери, цифри та дефіси" @@ -5550,8 +5550,8 @@ msgstr "Абзац" msgid "Parent" msgstr "Батьківський" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "Частина циклу перенаправлення" @@ -5624,7 +5624,7 @@ msgstr "Passkeys потребують HTTPS або http://localhost (з ваши msgid "Paste your migration key" msgstr "Вставте ключ міграції" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "Шлях" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "очікує" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "Очікує" @@ -5755,7 +5755,7 @@ msgstr "плагін на вашому сайті WordPress." msgid "Plugin Permissions" msgstr "Дозволи плагіна" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "Реєстр плагінів" @@ -5780,12 +5780,12 @@ msgstr "Плагін оновлено" msgid "Plugin widget error" msgstr "Помилка віджета плагіна" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "Плагіни" @@ -5849,7 +5849,7 @@ msgstr "Переглянути чернетку" msgid "Previous" msgstr "Попередній" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "Попередня сторінка" @@ -5858,7 +5858,7 @@ msgstr "Попередня сторінка" msgid "Previous screenshot" msgstr "Попередній знімок екрана" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "Головна навігація" @@ -5997,7 +5997,7 @@ msgstr "Email одержувача" msgid "Recovery link sent to {0}" msgstr "Посилання для відновлення надіслано на {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "Виявлено цикл перенаправлення" @@ -6005,9 +6005,9 @@ msgstr "Виявлено цикл перенаправлення" msgid "Redirecting to login..." msgstr "Перенаправлення на вхід..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "Перенаправлення" @@ -6048,7 +6048,7 @@ msgstr "Реєстрація не вдалася" msgid "Registration was cancelled or timed out. Please try again." msgstr "Реєстрацію скасовано або час очікування минув. Спробуйте ще раз." -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "Реєстр" @@ -6350,11 +6350,11 @@ msgstr "Те саме вікно" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "Зберегти" @@ -6410,7 +6410,7 @@ msgstr "Збережено \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "Збережено \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "Збереження..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "Шукати за іменем або email..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "Шукати авторські рядки" @@ -6558,11 +6558,11 @@ msgstr "Шукати авторські рядки" msgid "Search bylines to add..." msgstr "Шукати авторські рядки для додавання..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "Шукати коментарі" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "Шукати коментарі..." @@ -6587,26 +6587,26 @@ msgstr "Форма пошуку" msgid "Search media" msgstr "Шукати медіа" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "Шукати сторінки та вміст..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "Шукати плагіни" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "Шукати плагіни..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "Шукати секції..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "Шукати джерело або призначення..." @@ -6664,9 +6664,9 @@ msgstr "Секцію не знайдено" msgid "Section title" msgstr "Назва секції" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "Секції" @@ -6717,7 +6717,7 @@ msgstr "Контакти з питань безпеки" msgid "Security error. Make sure you're on a secure connection." msgstr "Помилка безпеки. Переконайтеся, що ви використовуєте безпечне з'єднання." -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "Оберіть компонент..." msgid "Select a menu..." msgstr "Оберіть меню..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "Обрати все" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "Обрати все на цій сторінці" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "Обрати коментар від {0}" @@ -6923,14 +6923,14 @@ msgstr "Налаштуйте свій сайт" msgid "Setting up..." msgstr "Налаштування..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "Налаштування" @@ -7118,7 +7118,7 @@ msgstr "Пропущено" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "Slug" @@ -7174,12 +7174,12 @@ msgstr "Сортувати теми" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "Джерело" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "Шлях джерела" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "спам" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "Спам" @@ -7218,12 +7218,12 @@ msgstr "Почніть писати або введіть «/» для кома #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "Статус" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "Код статусу" @@ -7306,7 +7306,7 @@ msgstr "Елементи керування таблицею" msgid "Tagline" msgstr "Слоган" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "Теги" @@ -7398,7 +7398,7 @@ msgstr "Посилання діє 15 хвилин." msgid "The marketplace is empty. Check back later for new plugins." msgstr "Маркетплейс порожній. Завітайте пізніше — можуть з’явитися нові плагіни." -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "Меню видалено." @@ -7455,7 +7455,7 @@ msgstr "Розділи від теми не можна видалити. Від msgid "Theme: {label}" msgstr "Тема: {label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "Теми" @@ -7510,7 +7510,7 @@ msgstr "Цей плагін не потребує спеціальних доз msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "Цей видавець стверджує право на ім’я, яке не зміг підтвердити — можливо, видає себе за іншу особу. Встановлення вимкнено. Якщо ви знаєте видавця і довіряєте йому, попросіть виправити налаштування ідентичності перед повторною спробою." -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "Це правило перенаправлення буде остаточно видалено." @@ -7518,7 +7518,7 @@ msgstr "Це правило перенаправлення буде остато msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "Цей випуск потребує новішого середовища, ніж зараз на вашому сайті. Оновіть середовище перед встановленням." -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "Це видалить профіль підпису автора. Посилання на авторські рядки в контенті буде прибрано, а вказівники lead очищено." @@ -7556,7 +7556,7 @@ msgstr "Це назавжди видалить \"{0}\" і прибере йог msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "Це назавжди видалить \"{0}\". Цю дію не можна скасувати." -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "Це остаточно видалить цей коментар. Цю дію не можна скасувати." @@ -7601,7 +7601,7 @@ msgstr "Роздільник заголовка" msgid "to" msgstr "до" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "щоб закрити" @@ -7613,7 +7613,7 @@ msgstr "До дати" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "для встановлення плагінів або додайте їх у astro.config.mjs." -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "щоб вибрати" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "кошик" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "Кошик" @@ -7699,7 +7699,7 @@ msgstr "Кошик" msgid "Trash is empty" msgstr "Кошик порожній" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "Кошик порожній." @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "Спробуйте інший пошуковий запит" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "Спробуйте змінити пошук" @@ -7916,7 +7916,7 @@ msgstr "Оновити налаштування сайту" msgid "Update the {0} details" msgstr "Оновити дані {0}" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "Оновіть це правило перенаправлення." @@ -8059,7 +8059,7 @@ msgstr "Шаблон URL" msgid "URL-friendly identifier" msgstr "Ідентифікатор, зручний для URL" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "Ідентифікатор для URL (напр., \"primary\", \"footer\")" @@ -8067,7 +8067,7 @@ msgstr "Ідентифікатор для URL (напр., \"primary\", \"footer\ msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "Використовуйте [param] або [...rest] у шляхах для зіставлення з шаблоном." @@ -8124,8 +8124,8 @@ msgstr "Дані користувача" msgid "User not found" msgstr "Користувача не знайдено" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "Користувачі" @@ -8148,7 +8148,7 @@ msgstr "Доступно v{0}" msgid "Validation" msgstr "Валідація" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "Перевірений видавець" @@ -8221,7 +8221,7 @@ msgstr "Переглянути код" msgid "View the {license} license on spdx.org" msgstr "Переглянути ліцензію {license} на spdx.org" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "Відвідувачі за цими шляхами побачать помилку." @@ -8273,7 +8273,7 @@ msgstr "WebAuthn не підтримується в цьому браузері" msgid "Website" msgstr "Вебсайт" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "URL вебсайту" @@ -8374,9 +8374,9 @@ msgstr "Заголовок віджета" msgid "Widget updated" msgstr "Віджет оновлено" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "Ви можете створювати та редагувати вла msgid "You can manage content, media, menus, and taxonomies." msgstr "Ви можете керувати контентом, медіа, меню та таксономіями." -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "Ви ще можете редагувати поля вище. Збереження не змінить збережені значення власних полів." diff --git a/packages/admin/src/locales/zh-CN/messages.po b/packages/admin/src/locales/zh-CN/messages.po index 3ae3b6cdcc..4d10f1818a 100644 --- a/packages/admin/src/locales/zh-CN/messages.po +++ b/packages/admin/src/locales/zh-CN/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr " - 访客" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr " - 已关联" @@ -35,7 +35,7 @@ msgstr "(在新窗口中打开)" msgid " (selected)" msgstr "(已选择)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "-- 选择 --" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "{0, plural, one {# 条评论已更新} other {# 条评论已更新}}" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# 条评论} other {# 条评论}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# 个内容项已导入} other {# 个内容项已导入 #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# 个项目} other {# 个项目}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# 篇文章} other {# 篇文章}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# 个重定向是循环的一部分。} other {# 个重定向是循环的一部分。}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# 个已选择} other {# 个已选择}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "{0} {1} 必需 — 您有 {2}。" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "{0} • {1}" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "{total, plural, one {# 个项目} other {# 个项目}}" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {共 # 条} other {共 # 条}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {显示 # 个未变更} other {显示 # 个 msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} 个已上传,{failed} 个失败" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "/new-page 或 /articles/[slug]" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "/old-page 或 /blog/[slug]" @@ -473,19 +473,19 @@ msgstr "3. 选择 \"所有内容\"" msgid "30 days" msgstr "30 天" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 永久重定向" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 临时重定向" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 临时(严格)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 永久(严格)" @@ -497,15 +497,15 @@ msgstr "4. 点击 \"下载导出文件\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. 输入 \"EmDash\" 并点击 \"添加新密码\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 错误" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "410 内容已删除(已移除)" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "451 因法律原因不可用" @@ -582,7 +582,7 @@ msgstr "账户信息" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "管理员" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "管理员导航" @@ -803,7 +803,7 @@ msgstr "全部" msgid "All authors" msgstr "所有作者" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "所有署名" @@ -811,7 +811,7 @@ msgstr "所有署名" msgid "All capabilities" msgstr "所有权限" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "所有合集" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "所有来源" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "所有状态" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "所有类型" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "应用链接" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "批准" @@ -989,7 +989,7 @@ msgstr "批准" msgid "approved" msgstr "已批准" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "已批准" @@ -1026,7 +1026,7 @@ msgstr "您确定要删除 \"{0}\" 吗?这也将删除该合集中的所有内 msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "您确定要删除 \"{0}\" 字段吗?" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "您确定要删除此菜单吗?这也将删除所有菜单项。此操作无法撤销。" @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "认证已取消或超时。请重试。" #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "授权中..." msgid "Authors" msgstr "作者" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "自动" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "自动(slug 变更)" @@ -1236,7 +1236,7 @@ msgstr "发送前:" msgid "Bing Verification" msgstr "Bing 验证" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "简介" @@ -1259,7 +1259,7 @@ msgstr "布尔值" msgid "Brief summary shown below the title in search results" msgstr "在搜索结果中标题下方显示简短摘要" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "浏览并安装发布到去中心化插件仓库的插件。" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "无序列表" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "署名架构" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "署名" @@ -1352,11 +1352,11 @@ msgstr "可以查看内容" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "说明文字" msgid "Captions / Subtitles" msgstr "字幕 / 对白字幕" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "分类" @@ -1554,17 +1554,17 @@ msgstr "点击邮件中的链接即可登录。" #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "代码" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "逗号分隔的搜索关键词。" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "评论" @@ -1654,9 +1654,9 @@ msgstr "评论" msgid "Comment Detail" msgstr "评论详情" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "评论" @@ -1707,13 +1707,13 @@ msgstr "已连接 {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "内容" @@ -1771,9 +1771,9 @@ msgstr "内容快照:" msgid "Content to Import" msgstr "要导入的内容" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "内容类型" @@ -1855,7 +1855,7 @@ msgstr "无法检测到 WordPress" msgid "Couldn't load byline fields." msgstr "无法加载署名字段。" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "无法加载自定义字段。" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "数量" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "创建" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "创建账户" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "创建署名" @@ -1925,12 +1925,12 @@ msgstr "创建内容类型" msgid "Create field" msgstr "创建字段" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "创建菜单" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "创建新菜单" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "创建个人访问令牌以通过程序访问 API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "为 {0} 创建重定向" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "为此路径创建重定向" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "创建重定向规则以管理 URL 更改。" @@ -1973,7 +1973,7 @@ msgstr "创建架构并导入" msgid "Create Section" msgstr "创建区块" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "在区块库中创建区块以便在此使用" @@ -1995,7 +1995,7 @@ msgstr "创建小部件区域" msgid "Create your account" msgstr "创建您的账户" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "创建您的第一个导航菜单以开始使用" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "正在创建合集和字段..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "深色" msgid "Dark" msgstr "深色" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "仪表板" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "日期" @@ -2186,8 +2186,8 @@ msgstr "定义您的内容结构" msgid "Defined in code" msgstr "代码定义" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "代码定义" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "删除" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "删除 {0} 字段" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "删除 {0} 菜单" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "删除署名字段?" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "删除署名?" @@ -2263,7 +2263,7 @@ msgstr "删除署名?" msgid "Delete column" msgstr "删除列" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "删除评论?" @@ -2292,11 +2292,11 @@ msgstr "删除图片" msgid "Delete Media?" msgstr "删除媒体?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "删除菜单" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "永久删除" @@ -2309,16 +2309,16 @@ msgstr "永久删除" msgid "Delete Permanently?" msgstr "永久删除?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "删除重定向" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "删除重定向 {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "删除重定向?" @@ -2348,18 +2348,18 @@ msgstr "已删除" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "删除 \"{0}\" 将同时移除所有署名中的 {1, plural, one {# 个存储值} other {# 个存储值}}。此操作无法撤销。" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "删除中..." @@ -2414,11 +2414,11 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(可选)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "目标" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "目标路径" @@ -2462,7 +2462,7 @@ msgstr "禁用" msgid "Disable plugin" msgstr "禁用插件" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "禁用重定向" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "禁用用户?" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "显示名称" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "管理界面的显示名称" @@ -2706,7 +2706,7 @@ msgstr "复制 {title}" msgid "e.g. application/zip or .pdf" msgstr "例如 application/zip 或 .pdf" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "例如 import、blog" @@ -2722,7 +2722,7 @@ msgstr "例如:MacBook Pro、iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "编辑" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "编辑 {0}" @@ -2782,16 +2782,16 @@ msgstr "编辑菜单项" msgid "Edit menu items" msgstr "编辑菜单项" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "编辑重定向" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "编辑重定向" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "编辑重定向 {0}" @@ -2899,12 +2899,12 @@ msgstr "在此合集上启用全文搜索" msgid "Enable plugin" msgstr "启用插件" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "启用重定向" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "已启用" @@ -3362,7 +3362,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "加载署名失败:{0}" @@ -3387,7 +3387,7 @@ msgstr "加载插件失败" msgid "Failed to load plugins: {0}" msgstr "加载插件失败:{0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "加载插件失败。仓库聚合服务可能无法访问。" @@ -3701,7 +3701,7 @@ msgstr "按作者筛选" msgid "Filter by capability" msgstr "按功能筛选" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "按合集筛选" @@ -3714,16 +3714,16 @@ msgid "Filter by source" msgstr "按来源筛选" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "按状态筛选" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "按类型筛选" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "按署名类型筛选" @@ -3806,7 +3806,7 @@ msgstr "GraphQL" msgid "Grid view" msgstr "网格视图" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "组(可选)" @@ -3814,11 +3814,11 @@ msgstr "组(可选)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "访客署名" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "仅访客" @@ -3882,8 +3882,8 @@ msgstr "隐藏令牌" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "层级式(类似分类,具有父子关系)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "点击量" @@ -3985,8 +3985,8 @@ msgstr "图片 URL 已更新于" msgid "Images" msgstr "图片" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "导入" @@ -4153,7 +4153,7 @@ msgstr "插入链接" msgid "Insert raw HTML" msgstr "插入原始 HTML" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "插入区块" @@ -4184,7 +4184,7 @@ msgstr "安装" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "已安装" @@ -4316,7 +4316,7 @@ msgstr "Kotlin" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4354,7 +4354,7 @@ msgstr "最后登录" msgid "Last Login" msgstr "上次登录" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "最后访问" @@ -4426,11 +4426,11 @@ msgstr "链接到另一个内容项" msgid "Linked Accounts ({0})" msgstr "已关联账户 ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "仅已关联" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "已关联用户" @@ -4454,9 +4454,9 @@ msgstr "实时预览" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "加载更多" @@ -4480,7 +4480,7 @@ msgstr "正在加载署名字段…" msgid "Loading collections..." msgstr "正在加载合集..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "正在加载评论..." @@ -4501,7 +4501,7 @@ msgstr "正在加载编辑器..." msgid "Loading menu..." msgstr "正在加载菜单..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "正在加载菜单..." @@ -4509,11 +4509,11 @@ msgstr "正在加载菜单..." msgid "Loading plugins..." msgstr "正在加载插件..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "正在加载重定向..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "正在加载区块..." @@ -4545,7 +4545,7 @@ msgstr "正在加载小部件..." #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4554,7 +4554,7 @@ msgstr "正在加载小部件..." #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "加载中..." @@ -4618,7 +4618,7 @@ msgstr "发起网络请求" msgid "Make network requests to any host (unrestricted)" msgstr "向任何主机发起网络请求(不受限制)" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "管理" @@ -4640,11 +4640,11 @@ msgstr "管理您的小部件区域中的内容小部件" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "管理已安装的插件。启用或禁用插件以控制其功能。" -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "管理您站点的导航菜单" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "管理 URL 重定向并查看 404 错误。" @@ -4660,7 +4660,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "手动" @@ -4674,15 +4674,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "将 WordPress 用户 {0} 映射到 EmDash 用户" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "标记 {0} 已删除(410)" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "标记为已删除(410)— 告知搜索引擎该内容已被永久删除" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "标记为垃圾" @@ -4697,7 +4697,7 @@ msgstr "市场" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "市场" @@ -4722,7 +4722,7 @@ msgid "MDX" msgstr "MDX" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4750,7 +4750,7 @@ msgstr "媒体导入完成" msgid "Media import was skipped" msgstr "媒体导入已跳过" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "媒体库" @@ -4779,15 +4779,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "菜单 \"{0}\" ({1}) 已创建。" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "菜单 \"{0}\" 已创建。" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "菜单已创建" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "菜单已删除" @@ -4811,9 +4811,9 @@ msgstr "菜单未找到" msgid "Menu order has been updated." msgstr "菜单顺序已更新。" -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "菜单" @@ -4961,7 +4961,7 @@ msgstr "我的精彩博客" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4979,7 +4979,7 @@ msgstr "名称和标签为必填项" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "名称必须以字母开头,且仅包含小写字母、数字和下划线" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "导航" @@ -4992,7 +4992,7 @@ msgstr "从未" msgid "new" msgstr "新建" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "新建" @@ -5030,8 +5030,8 @@ msgstr "新建字段" msgid "New public routes" msgstr "新增公共路由" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "新重定向" @@ -5039,7 +5039,7 @@ msgstr "新重定向" msgid "New Section" msgstr "新区块" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "新标签页" @@ -5067,7 +5067,7 @@ msgstr "新闻" msgid "Next" msgstr "下一步" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "下一页" @@ -5100,7 +5100,7 @@ msgstr "暂无 {0}。" msgid "No {0} yet. Create one to get started." msgstr "暂无{0}。创建一个以开始使用。" -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "暂无 404 错误记录。" @@ -5113,7 +5113,7 @@ msgstr "无替代文本" msgid "No API tokens yet. Create one to get started." msgstr "暂无 API 令牌。创建一个以开始使用。" -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "暂无已审核评论。" @@ -5125,7 +5125,7 @@ msgstr "暂无署名字段。" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "在 {entryLocale} 中没有可用的署名。请先从署名页面创建一个变体,然后再在此条目中署名。" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "未找到署名" @@ -5137,11 +5137,11 @@ msgstr "未选择任何署名。" msgid "No collections configured" msgstr "未配置任何合集" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "暂无待审核评论。" -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "暂无评论符合您的搜索。" @@ -5214,7 +5214,7 @@ msgstr "暂无项目" msgid "No limit" msgstr "无限制" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "无关联用户" @@ -5257,7 +5257,7 @@ msgstr "未找到媒体" msgid "No menu items yet" msgstr "暂无菜单项" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "暂无菜单" @@ -5290,11 +5290,11 @@ msgstr "未配置插件" msgid "No plugins found" msgstr "未找到插件" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "此仓库尚未发布任何插件。" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "没有匹配 \"{debouncedQuery}\" 的插件。" @@ -5310,7 +5310,7 @@ msgstr "" msgid "No recent activity" msgstr "暂无最近活动" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "暂无重定向" @@ -5329,7 +5329,7 @@ msgstr "没有 \"{activeSearch}\"的搜索结果" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "「{debouncedQuery}」无结果。请尝试其他搜索词。" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "未找到结果" @@ -5337,11 +5337,11 @@ msgstr "未找到结果" msgid "No revisions yet" msgstr "暂无修订历史" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "无可用区块" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "未找到区块" @@ -5350,7 +5350,7 @@ msgstr "未找到区块" msgid "No sections yet" msgstr "暂无区块" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "无垃圾评论。" @@ -5423,7 +5423,7 @@ msgstr "仅授权您认识的代码。" msgid "Only email addresses from allowed domains can sign up." msgstr "仅允许来自允许域名的邮箱注册。" -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "仅限小写字母、数字和连字符" @@ -5550,8 +5550,8 @@ msgstr "段落" msgid "Parent" msgstr "父级" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "重定向循环的一部分" @@ -5624,7 +5624,7 @@ msgstr "通行密钥需要 HTTPS 或 http://localhost(带您的端口);此 msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "路径" @@ -5651,7 +5651,7 @@ msgstr "PDF" msgid "pending" msgstr "待处理" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "待处理" @@ -5755,7 +5755,7 @@ msgstr "在您的 WordPress 站点上的插件。" msgid "Plugin Permissions" msgstr "插件权限" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "插件仓库" @@ -5780,12 +5780,12 @@ msgstr "插件已更新" msgid "Plugin widget error" msgstr "插件组件错误" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "插件" @@ -5849,7 +5849,7 @@ msgstr "预览草稿" msgid "Previous" msgstr "上一步" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "上一页" @@ -5858,7 +5858,7 @@ msgstr "上一页" msgid "Previous screenshot" msgstr "上一张截图" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "主导航" @@ -5997,7 +5997,7 @@ msgstr "收件人邮箱" msgid "Recovery link sent to {0}" msgstr "恢复链接已发送至 {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "检测到重定向循环" @@ -6005,9 +6005,9 @@ msgstr "检测到重定向循环" msgid "Redirecting to login..." msgstr "正在重定向到登录..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "重定向" @@ -6048,7 +6048,7 @@ msgstr "注册失败" msgid "Registration was cancelled or timed out. Please try again." msgstr "注册已取消或超时。请重试。" -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "插件仓库" @@ -6350,11 +6350,11 @@ msgstr "同一窗口" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "保存" @@ -6410,7 +6410,7 @@ msgstr "已保存 \"{0}\"." #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6422,7 +6422,7 @@ msgstr "已保存 \"{0}\"." #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "保存中..." @@ -6550,7 +6550,7 @@ msgid "Search by name or email..." msgstr "按名称或邮箱搜索..." #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "搜索署名" @@ -6558,11 +6558,11 @@ msgstr "搜索署名" msgid "Search bylines to add..." msgstr "搜索要添加的署名..." -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "搜索评论" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "搜索评论..." @@ -6587,26 +6587,26 @@ msgstr "" msgid "Search media" msgstr "搜索媒体" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "搜索页面和内容..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "搜索插件" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "搜索插件..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "搜索区块..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "搜索源或目标..." @@ -6664,9 +6664,9 @@ msgstr "未找到区块" msgid "Section title" msgstr "区块标题" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "区块" @@ -6717,7 +6717,7 @@ msgstr "安全联系方式" msgid "Security error. Make sure you're on a secure connection." msgstr "安全错误。请确保您使用的是安全连接。" -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6748,7 +6748,7 @@ msgstr "选择组件..." msgid "Select a menu..." msgstr "选择菜单..." -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "全选" @@ -6757,7 +6757,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "选择 {0} 的评论" @@ -6923,14 +6923,14 @@ msgstr "设置您的站点" msgid "Setting up..." msgstr "正在设置..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "设置" @@ -7118,7 +7118,7 @@ msgstr "已跳过" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "别名" @@ -7174,12 +7174,12 @@ msgstr "排序主题" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "来源" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "源路径" @@ -7188,8 +7188,8 @@ msgid "spam" msgstr "垃圾" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "垃圾" @@ -7218,12 +7218,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "状态" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "状态码" @@ -7306,7 +7306,7 @@ msgstr "" msgid "Tagline" msgstr "副标题" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "标签" @@ -7398,7 +7398,7 @@ msgstr "链接将在 15 分钟后过期。" msgid "The marketplace is empty. Check back later for new plugins." msgstr "市场为空。请稍后查看新插件。" -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "菜单已删除。" @@ -7455,7 +7455,7 @@ msgstr "主题提供的区块无法删除。编辑区块以创建自定义副本 msgid "Theme: {label}" msgstr "主题:{label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "主题" @@ -7510,7 +7510,7 @@ msgstr "此插件不需要特殊权限。" msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "此发布者声明了一个他们无法证明拥有的名称——可能正在冒充他人。安装已被禁用。如果您认识并信任该发布者,请要求他们在重试前修复其身份验证设置。" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "此重定向规则将被永久移除。" @@ -7518,7 +7518,7 @@ msgstr "此重定向规则将被永久移除。" msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "此版本需要比您站点当前运行的更新版本的环境。请在安装前升级。" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "这将删除署名配置文件。内容署名链接将被移除,主要指针将被清除。" @@ -7556,7 +7556,7 @@ msgstr "这将永久删除「{0}」并将其从所有内容中移除。" msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "这将永久删除「{0}」。此操作无法撤销。" -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "这将永久删除此评论。此操作无法撤销。" @@ -7601,7 +7601,7 @@ msgstr "标题分隔符" msgid "to" msgstr "至" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "关闭" @@ -7613,7 +7613,7 @@ msgstr "截止日期" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "以安装插件,或将它们添加到您的 astro.config.mjs。" -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "选择" @@ -7688,9 +7688,9 @@ msgid "trash" msgstr "回收站" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "回收站" @@ -7699,7 +7699,7 @@ msgstr "回收站" msgid "Trash is empty" msgstr "回收站为空" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "回收站为空。" @@ -7716,7 +7716,7 @@ msgid "Try a different search term" msgstr "尝试其他搜索词" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "尝试调整您的搜索" @@ -7916,7 +7916,7 @@ msgstr "更新网站设置" msgid "Update the {0} details" msgstr "更新{0}详情" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "更新此重定向规则。" @@ -8059,7 +8059,7 @@ msgstr "URL 模式" msgid "URL-friendly identifier" msgstr "URL 友好的标识符" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL 友好的标识符(例如:\"primary\"、\"footer\")" @@ -8067,7 +8067,7 @@ msgstr "URL 友好的标识符(例如:\"primary\"、\"footer\")" msgid "URL:" msgstr "URL:" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "在路径中使用 [param] 或 [...rest] 进行模式匹配。" @@ -8124,8 +8124,8 @@ msgstr "用户详情" msgid "User not found" msgstr "未找到用户" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "用户" @@ -8148,7 +8148,7 @@ msgstr "v{0} 可用" msgid "Validation" msgstr "验证" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "已验证的发布者" @@ -8221,7 +8221,7 @@ msgstr "查看源码" msgid "View the {license} license on spdx.org" msgstr "在 spdx.org 上查看 {license} 许可证" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "访问这些路径的用户将看到错误。" @@ -8273,7 +8273,7 @@ msgstr "此浏览器不支持 WebAuthn" msgid "Website" msgstr "网站" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "网站 URL" @@ -8374,9 +8374,9 @@ msgstr "小部件标题" msgid "Widget updated" msgstr "小部件已更新" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8457,7 +8457,7 @@ msgstr "您可以创建和编辑自己的内容。" msgid "You can manage content, media, menus, and taxonomies." msgstr "您可以管理内容、媒体、菜单和分类。" -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "您仍可编辑上方的固定字段。保存不会影响任何已存储的自定义字段值。" diff --git a/packages/admin/src/locales/zh-TW/messages.po b/packages/admin/src/locales/zh-TW/messages.po index 28186957e1..bbe3c5039b 100644 --- a/packages/admin/src/locales/zh-TW/messages.po +++ b/packages/admin/src/locales/zh-TW/messages.po @@ -13,11 +13,11 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Guest" msgstr "" -#: packages/admin/src/routes/bylines.tsx:447 +#: packages/admin/src/routes/bylines.tsx:446 msgid " - Linked" msgstr "" @@ -35,7 +35,7 @@ msgstr "(在新視窗中開啟)" msgid " (selected)" msgstr "(已選擇)" -#: packages/admin/src/routes/bylines.tsx:707 +#: packages/admin/src/routes/bylines.tsx:706 msgid "-- Select --" msgstr "" @@ -94,7 +94,7 @@ msgid "{0, plural, one {# comment updated} other {# comments updated}}" msgstr "" #. placeholder {0}: comments.length -#: packages/admin/src/components/comments/CommentInbox.tsx:344 +#: packages/admin/src/components/comments/CommentInbox.tsx:345 msgid "{0, plural, one {# comment} other {# comments}}" msgstr "{0, plural, one {# 條評論} other {# 條評論}}" @@ -111,7 +111,7 @@ msgstr "{0, plural, one {# 個內容項已導入} other {# 個內容項已導入 #. placeholder {0}: items.length #. placeholder {0}: menu.itemCount ?? 0 #: packages/admin/src/components/MediaPickerModal.tsx:587 -#: packages/admin/src/components/MenuList.tsx:217 +#: packages/admin/src/components/MenuList.tsx:218 msgid "{0, plural, one {# item} other {# items}}" msgstr "{0, plural, one {# 個項目} other {# 個項目}}" @@ -147,12 +147,12 @@ msgid "{0, plural, one {# post} other {# posts}}" msgstr "{0, plural, one {# 篇文章} other {# 篇文章}}" #. placeholder {0}: loopRedirectIds.size -#: packages/admin/src/components/Redirects.tsx:444 +#: packages/admin/src/components/Redirects.tsx:445 msgid "{0, plural, one {# redirect is part of a loop.} other {# redirects are part of a loop.}}" msgstr "{0, plural, one {# 個重定向是循環的一部分。} other {# 個重定向是循環的一部分。}}" #. placeholder {0}: selected.size -#: packages/admin/src/components/comments/CommentInbox.tsx:228 +#: packages/admin/src/components/comments/CommentInbox.tsx:229 msgid "{0, plural, one {# selected} other {# selected}}" msgstr "{0, plural, one {# 個已選擇} other {# 個已選擇}}" @@ -194,8 +194,8 @@ msgid "{0} {1} required — you have {2}." msgstr "" #. placeholder {0}: menu.name -#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash, List as ListIcon } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } -#: packages/admin/src/components/MenuList.tsx:215 +#. placeholder {1}: /** * Menu List component * * Displays all menus with ability to create, edit, and delete. */ import { Button, Dialog, Input, Toast } from "@cloudflare/kumo"; import { plural } from "@lingui/core/macro"; import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { Plus, Pencil, Trash } from "@phosphor-icons/react"; import { X } from "@phosphor-icons/react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useNavigate } from "@tanstack/react-router"; import * as React from "react"; import { fetchMenus, createMenu, deleteMenu } from "../lib/api"; import { fetchManifest } from "../lib/api/client.js"; import { ADMIN_NAV_ICONS } from "./admin-navigation-icons.js"; import { ConfirmDialog } from "./ConfirmDialog.js"; import { DialogError, getMutationError } from "./DialogError.js"; import { LocaleSwitcher, useI18nConfig } from "./LocaleSwitcher.js"; import { RouterLinkButton } from "./RouterLinkButton.js"; export function MenuList() { const { t } = useLingui(); const queryClient = useQueryClient(); const navigate = useNavigate(); const toastManager = Toast.useToastManager(); const [isCreateOpen, setIsCreateOpen] = React.useState(false); const [deleteMenuName, setDeleteMenuName] = React.useState(null); const [createError, setCreateError] = React.useState(null); const { data: manifest } = useQuery({ queryKey: ["manifest"], queryFn: fetchManifest, }); const i18n = useI18nConfig(manifest); const [activeLocale, setActiveLocale] = React.useState(undefined); React.useEffect(() => { if (i18n && !activeLocale) setActiveLocale(i18n.defaultLocale); }, [i18n, activeLocale]); const { data: menus, isLoading } = useQuery({ queryKey: ["menus", activeLocale], queryFn: () => fetchMenus({ locale: activeLocale }), }); const createMutation = useMutation({ mutationFn: createMenu, onSuccess: (menu) => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setIsCreateOpen(false); toastManager.add({ title: t`Menu created`, description: t`Menu "${menu.label}" has been created.`, }); void navigate({ to: "/menus/$name", params: { name: menu.name }, search: { locale: menu.locale }, }); }, onError: (error: Error) => { setCreateError(error.message); }, }); const deleteMutation = useMutation({ mutationFn: (name: string) => deleteMenu(name, { locale: activeLocale }), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: ["menus"] }); setDeleteMenuName(null); toastManager.add({ title: t`Menu deleted`, description: t`The menu has been deleted.`, }); }, }); const handleCreate = (e: React.FormEvent) => { e.preventDefault(); setCreateError(null); const formData = new FormData(e.currentTarget); const nameVal = formData.get("name"); const name = typeof nameVal === "string" ? nameVal : ""; const labelVal = formData.get("label"); const label = typeof labelVal === "string" ? labelVal : ""; createMutation.mutate({ name, label, locale: activeLocale }); }; if (isLoading) { return (
{t`Loading menus...`}
); } return (

{t`Menus`}

{t`Manage navigation menus for your site`}

{i18n && activeLocale ? ( ) : null}
{ setIsCreateOpen(open); if (!open) setCreateError(null); }} > ( )} />
{t`Create New Menu`} ( )} />

{t`URL-friendly identifier (e.g., "primary", "footer")`}

{t`Display name for admin interface`}

{!menus || menus.length === 0 ? (

{t`No menus yet`}

{t`Create your first navigation menu to get started`}

) : (
{menus.map((menu) => (

{menu.label} {i18n ? ( {menu.locale} ) : null}

{menu.name} •{" "} {plural(menu.itemCount ?? 0, { one: "# item", other: "# items" })}

} > {t`Edit`}
))}
)} { setDeleteMenuName(null); deleteMutation.reset(); }} title={t`Delete Menu`} description={t`Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone.`} confirmLabel={t`Delete`} pendingLabel={t`Deleting...`} isPending={deleteMutation.isPending} error={deleteMutation.error} onConfirm={() => deleteMenuName && deleteMutation.mutate(deleteMenuName)} />
); } +#: packages/admin/src/components/MenuList.tsx:216 msgid "{0} • {1}" msgstr "" @@ -379,7 +379,7 @@ msgstr "" msgid "{total, plural, one {# item} other {# items}}" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:149 +#: packages/admin/src/components/comments/CommentInbox.tsx:150 msgid "{total, plural, one {# total} other {# total}}" msgstr "{total, plural, one {共 # 條} other {共 # 條}}" @@ -414,11 +414,11 @@ msgstr "{unchangedCount, plural, one {顯示 # 個未變更} other {顯示 # 個 msgid "{uploaded} uploaded, {failed} failed" msgstr "{uploaded} 個已上傳,{failed} 個失敗" -#: packages/admin/src/components/Redirects.tsx:141 +#: packages/admin/src/components/Redirects.tsx:142 msgid "/new-page or /articles/[slug]" msgstr "" -#: packages/admin/src/components/Redirects.tsx:132 +#: packages/admin/src/components/Redirects.tsx:133 msgid "/old-page or /blog/[slug]" msgstr "" @@ -473,19 +473,19 @@ msgstr "3. 選擇 \"所有內容\"" msgid "30 days" msgstr "30 天" -#: packages/admin/src/components/Redirects.tsx:155 +#: packages/admin/src/components/Redirects.tsx:156 msgid "301 Permanent" msgstr "301 永久重定向" -#: packages/admin/src/components/Redirects.tsx:156 +#: packages/admin/src/components/Redirects.tsx:157 msgid "302 Temporary" msgstr "302 臨時重定向" -#: packages/admin/src/components/Redirects.tsx:157 +#: packages/admin/src/components/Redirects.tsx:158 msgid "307 Temporary (Strict)" msgstr "307 臨時(嚴格)" -#: packages/admin/src/components/Redirects.tsx:158 +#: packages/admin/src/components/Redirects.tsx:159 msgid "308 Permanent (Strict)" msgstr "308 永久(嚴格)" @@ -497,15 +497,15 @@ msgstr "4. 點擊 \"下載導出文件\"" msgid "4. Enter \"EmDash\" and click \"Add New\"" msgstr "4. 輸入 \"EmDash\" 並點擊 \"添加新密碼\"" -#: packages/admin/src/components/Redirects.tsx:394 +#: packages/admin/src/components/Redirects.tsx:395 msgid "404 Errors" msgstr "404 錯誤" -#: packages/admin/src/components/Redirects.tsx:159 +#: packages/admin/src/components/Redirects.tsx:160 msgid "410 Content Deleted (Gone)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:160 +#: packages/admin/src/components/Redirects.tsx:161 msgid "451 Unavailable for legal reasons" msgstr "" @@ -582,7 +582,7 @@ msgstr "帳戶資訊" msgid "ACF Fields" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:299 +#: packages/admin/src/components/comments/CommentInbox.tsx:300 #: packages/admin/src/components/ContentList.tsx:528 #: packages/admin/src/components/ContentList.tsx:649 #: packages/admin/src/components/ContentTypeList.tsx:106 @@ -760,12 +760,12 @@ msgid "admin" msgstr "" #: packages/admin/src/components/settings/ApiTokenSettings.tsx:95 -#: packages/admin/src/components/Sidebar.tsx:491 +#: packages/admin/src/components/Sidebar.tsx:383 #: packages/admin/src/components/users/roleDefinitions.ts:42 msgid "Admin" msgstr "管理員" -#: packages/admin/src/components/Sidebar.tsx:437 +#: packages/admin/src/components/Sidebar.tsx:329 msgid "Admin navigation" msgstr "管理員導航" @@ -803,7 +803,7 @@ msgstr "全部" msgid "All authors" msgstr "" -#: packages/admin/src/routes/bylines.tsx:413 +#: packages/admin/src/routes/bylines.tsx:412 msgid "All bylines" msgstr "" @@ -811,7 +811,7 @@ msgstr "" msgid "All capabilities" msgstr "所有權限" -#: packages/admin/src/components/comments/CommentInbox.tsx:133 +#: packages/admin/src/components/comments/CommentInbox.tsx:134 msgid "All collections" msgstr "所有合集" @@ -837,12 +837,12 @@ msgid "All Sources" msgstr "所有來源" #: packages/admin/src/components/ContentList.tsx:728 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 msgid "All statuses" msgstr "所有狀態" #: packages/admin/src/components/MediaLibrary.tsx:433 -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "All types" msgstr "所有類型" @@ -980,8 +980,8 @@ msgid "Apply link" msgstr "" #: packages/admin/src/components/comments/CommentDetail.tsx:148 -#: packages/admin/src/components/comments/CommentInbox.tsx:237 -#: packages/admin/src/components/comments/CommentInbox.tsx:489 +#: packages/admin/src/components/comments/CommentInbox.tsx:238 +#: packages/admin/src/components/comments/CommentInbox.tsx:490 msgid "Approve" msgstr "批准" @@ -989,7 +989,7 @@ msgstr "批准" msgid "approved" msgstr "已批准" -#: packages/admin/src/components/comments/CommentInbox.tsx:202 +#: packages/admin/src/components/comments/CommentInbox.tsx:203 msgid "Approved" msgstr "已批准" @@ -1026,7 +1026,7 @@ msgstr "您確定要刪除 \"{0}\" 嗎?這也將刪除該合集中的所有內 msgid "Are you sure you want to delete the \"{0}\" field?" msgstr "" -#: packages/admin/src/components/MenuList.tsx:254 +#: packages/admin/src/components/MenuList.tsx:255 msgid "Are you sure you want to delete this menu? This will also delete all menu items. This action cannot be undone." msgstr "您確定要刪除此菜單嗎?這也將刪除所有菜單項。此操作無法撤銷。" @@ -1071,7 +1071,7 @@ msgid "Authentication was cancelled or timed out. Please try again." msgstr "認證已取消或超時。請重試。" #: packages/admin/src/components/comments/CommentDetail.tsx:77 -#: packages/admin/src/components/comments/CommentInbox.tsx:287 +#: packages/admin/src/components/comments/CommentInbox.tsx:288 #: packages/admin/src/components/ContentSettingsPanel.tsx:1035 #: packages/admin/src/components/users/roleDefinitions.ts:30 #: packages/admin/src/components/WelcomeModal.tsx:27 @@ -1106,11 +1106,11 @@ msgstr "授權中..." msgid "Authors" msgstr "" -#: packages/admin/src/components/Redirects.tsx:521 +#: packages/admin/src/components/Redirects.tsx:522 msgid "auto" msgstr "自動" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Auto (slug change)" msgstr "自動(slug 變更)" @@ -1236,7 +1236,7 @@ msgstr "發送前:" msgid "Bing Verification" msgstr "Bing 驗證" -#: packages/admin/src/routes/bylines.tsx:497 +#: packages/admin/src/routes/bylines.tsx:496 msgid "Bio" msgstr "" @@ -1259,7 +1259,7 @@ msgstr "布爾值" msgid "Brief summary shown below the title in search results" msgstr "在搜索結果中標題下方顯示簡短摘要" -#: packages/admin/src/components/RegistryBrowse.tsx:71 +#: packages/admin/src/components/RegistryBrowse.tsx:72 msgid "Browse and install plugins published to the decentralized registry." msgstr "" @@ -1287,17 +1287,17 @@ msgid "Bullet List" msgstr "無序列表" #: packages/admin/src/routes/byline-schema.tsx:218 -#: packages/admin/src/routes/bylines.tsx:384 +#: packages/admin/src/routes/bylines.tsx:383 msgid "Byline schema" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:370 +#: packages/admin/src/components/Sidebar.tsx:252 msgid "Byline Schema" msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:537 -#: packages/admin/src/components/Sidebar.tsx:365 -#: packages/admin/src/routes/bylines.tsx:376 +#: packages/admin/src/components/Sidebar.tsx:242 +#: packages/admin/src/routes/bylines.tsx:375 msgid "Bylines" msgstr "署名" @@ -1352,11 +1352,11 @@ msgstr "可以查看內容" #: packages/admin/src/components/MediaPickerModal.tsx:743 #: packages/admin/src/components/MenuEditor.tsx:438 #: packages/admin/src/components/MenuEditor.tsx:623 -#: packages/admin/src/components/MenuList.tsx:172 +#: packages/admin/src/components/MenuList.tsx:173 #: packages/admin/src/components/PluginManager.tsx:640 #: packages/admin/src/components/PortableTextEditor.tsx:3576 -#: packages/admin/src/components/Redirects.tsx:182 -#: packages/admin/src/components/SectionPickerModal.tsx:130 +#: packages/admin/src/components/Redirects.tsx:183 +#: packages/admin/src/components/SectionPickerModal.tsx:131 #: packages/admin/src/components/Sections.tsx:209 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:280 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:390 @@ -1411,7 +1411,7 @@ msgstr "說明文字" msgid "Captions / Subtitles" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:199 +#: packages/admin/src/components/AdminCommandPalette.tsx:192 #: packages/admin/src/components/Widgets.tsx:133 msgid "Categories" msgstr "分類" @@ -1554,17 +1554,17 @@ msgstr "點擊郵件中的鏈接即可登錄。" #: packages/admin/src/components/MenuEditor.tsx:576 #: packages/admin/src/components/MenuEditor.tsx:582 #: packages/admin/src/components/MenuEditor.tsx:586 -#: packages/admin/src/components/MenuList.tsx:136 -#: packages/admin/src/components/MenuList.tsx:142 -#: packages/admin/src/components/MenuList.tsx:146 +#: packages/admin/src/components/MenuList.tsx:137 +#: packages/admin/src/components/MenuList.tsx:143 +#: packages/admin/src/components/MenuList.tsx:147 #: packages/admin/src/components/PortableTextEditor.tsx:1530 #: packages/admin/src/components/PortableTextEditor.tsx:1536 #: packages/admin/src/components/PortableTextEditor.tsx:1540 -#: packages/admin/src/components/Redirects.tsx:114 -#: packages/admin/src/components/Redirects.tsx:120 -#: packages/admin/src/components/SectionPickerModal.tsx:60 -#: packages/admin/src/components/SectionPickerModal.tsx:66 -#: packages/admin/src/components/SectionPickerModal.tsx:70 +#: packages/admin/src/components/Redirects.tsx:115 +#: packages/admin/src/components/Redirects.tsx:121 +#: packages/admin/src/components/SectionPickerModal.tsx:61 +#: packages/admin/src/components/SectionPickerModal.tsx:67 +#: packages/admin/src/components/SectionPickerModal.tsx:71 #: packages/admin/src/components/Sections.tsx:153 #: packages/admin/src/components/Sections.tsx:159 #: packages/admin/src/components/Sections.tsx:163 @@ -1603,7 +1603,7 @@ msgstr "" #: packages/admin/src/components/ContentTypeList.tsx:242 #: packages/admin/src/components/PortableTextEditor.tsx:3114 -#: packages/admin/src/components/Redirects.tsx:469 +#: packages/admin/src/components/Redirects.tsx:470 msgid "Code" msgstr "代碼" @@ -1646,7 +1646,7 @@ msgid "Comma-separated keywords for search." msgstr "逗號分隔的搜索關鍵詞。" #: packages/admin/src/components/comments/CommentDetail.tsx:95 -#: packages/admin/src/components/comments/CommentInbox.tsx:290 +#: packages/admin/src/components/comments/CommentInbox.tsx:291 msgid "Comment" msgstr "評論" @@ -1654,9 +1654,9 @@ msgstr "評論" msgid "Comment Detail" msgstr "評論詳情" -#: packages/admin/src/components/comments/CommentInbox.tsx:146 +#: packages/admin/src/components/comments/CommentInbox.tsx:147 #: packages/admin/src/components/ContentTypeEditor.tsx:485 -#: packages/admin/src/components/Sidebar.tsx:349 +#: packages/admin/src/components/Sidebar.tsx:221 msgid "Comments" msgstr "評論" @@ -1707,13 +1707,13 @@ msgstr "已連接 {0}" msgid "content" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:377 +#: packages/admin/src/components/AdminCommandPalette.tsx:378 #: packages/admin/src/components/comments/CommentDetail.tsx:103 -#: packages/admin/src/components/comments/CommentInbox.tsx:293 +#: packages/admin/src/components/comments/CommentInbox.tsx:294 #: packages/admin/src/components/Dashboard.tsx:220 #: packages/admin/src/components/PortableTextEditor.tsx:2326 #: packages/admin/src/components/SectionEditor.tsx:193 -#: packages/admin/src/components/Sidebar.tsx:473 +#: packages/admin/src/components/Sidebar.tsx:365 #: packages/admin/src/components/Widgets.tsx:882 msgid "Content" msgstr "內容" @@ -1771,9 +1771,9 @@ msgstr "內容快照:" msgid "Content to Import" msgstr "要導入的內容" -#: packages/admin/src/components/AdminCommandPalette.tsx:191 +#: packages/admin/src/components/AdminCommandPalette.tsx:184 #: packages/admin/src/components/ContentTypeList.tsx:40 -#: packages/admin/src/components/Sidebar.tsx:369 +#: packages/admin/src/components/Sidebar.tsx:248 msgid "Content Types" msgstr "內容類型" @@ -1855,7 +1855,7 @@ msgstr "無法檢測到 WordPress" msgid "Couldn't load byline fields." msgstr "" -#: packages/admin/src/routes/bylines.tsx:548 +#: packages/admin/src/routes/bylines.tsx:547 msgid "Couldn't load custom fields." msgstr "" @@ -1877,12 +1877,12 @@ msgid "Count" msgstr "數量" #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:191 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:192 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/TaxonomyManager.tsx:501 #: packages/admin/src/components/Widgets.tsx:449 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Create" msgstr "創建" @@ -1913,7 +1913,7 @@ msgid "Create an account" msgstr "創建帳戶" #: packages/admin/src/components/ContentSettingsPanel.tsx:911 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Create byline" msgstr "創建署名" @@ -1925,12 +1925,12 @@ msgstr "" msgid "Create field" msgstr "" -#: packages/admin/src/components/MenuList.tsx:126 -#: packages/admin/src/components/MenuList.tsx:189 +#: packages/admin/src/components/MenuList.tsx:127 +#: packages/admin/src/components/MenuList.tsx:190 msgid "Create Menu" msgstr "創建菜單" -#: packages/admin/src/components/MenuList.tsx:133 +#: packages/admin/src/components/MenuList.tsx:134 msgid "Create New Menu" msgstr "創建新菜單" @@ -1952,15 +1952,15 @@ msgid "Create personal access tokens for programmatic API access" msgstr "創建個人訪問令牌以通過程式訪問 API" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:247 +#: packages/admin/src/components/Redirects.tsx:248 msgid "Create redirect for {0}" msgstr "爲 {0} 創建重定向" -#: packages/admin/src/components/Redirects.tsx:246 +#: packages/admin/src/components/Redirects.tsx:247 msgid "Create redirect for this path" msgstr "爲此路徑創建重定向" -#: packages/admin/src/components/Redirects.tsx:461 +#: packages/admin/src/components/Redirects.tsx:462 msgid "Create redirect rules to manage URL changes." msgstr "創建重定向規則以管理 URL 更改。" @@ -1973,7 +1973,7 @@ msgstr "創建架構並導入" msgid "Create Section" msgstr "創建區塊" -#: packages/admin/src/components/SectionPickerModal.tsx:109 +#: packages/admin/src/components/SectionPickerModal.tsx:110 msgid "Create sections in the Sections library to use them here" msgstr "在區塊庫中創建區塊以便在此使用" @@ -1995,7 +1995,7 @@ msgstr "" msgid "Create your account" msgstr "創建您的帳戶" -#: packages/admin/src/components/MenuList.tsx:187 +#: packages/admin/src/components/MenuList.tsx:188 msgid "Create your first navigation menu to get started" msgstr "創建您的第一個導航菜單以開始使用" @@ -2062,8 +2062,8 @@ msgid "Creating collections and fields..." msgstr "正在創建合集和字段..." #: packages/admin/src/components/ContentSettingsPanel.tsx:963 -#: packages/admin/src/components/MenuList.tsx:175 -#: packages/admin/src/components/Redirects.tsx:188 +#: packages/admin/src/components/MenuList.tsx:176 +#: packages/admin/src/components/Redirects.tsx:189 #: packages/admin/src/components/Sections.tsx:212 #: packages/admin/src/components/settings/ApiTokenSettings.tsx:448 #: packages/admin/src/components/TaxonomyManager.tsx:711 @@ -2115,15 +2115,15 @@ msgstr "深色" msgid "Dark" msgstr "深色" -#: packages/admin/src/components/AdminCommandPalette.tsx:137 +#: packages/admin/src/components/AdminCommandPalette.tsx:130 #: packages/admin/src/components/ContentTypeList.tsx:244 #: packages/admin/src/components/Dashboard.tsx:50 -#: packages/admin/src/components/Sidebar.tsx:335 -#: packages/admin/src/components/Sidebar.tsx:464 +#: packages/admin/src/components/Sidebar.tsx:206 +#: packages/admin/src/components/Sidebar.tsx:356 msgid "Dashboard" msgstr "儀表板" -#: packages/admin/src/components/comments/CommentInbox.tsx:296 +#: packages/admin/src/components/comments/CommentInbox.tsx:297 #: packages/admin/src/components/ContentList.tsx:525 msgid "Date" msgstr "日期" @@ -2186,8 +2186,8 @@ msgstr "定義您的內容結構" msgid "Defined in code" msgstr "程式碼定義" -#: packages/admin/src/components/comments/CommentInbox.tsx:267 -#: packages/admin/src/components/comments/CommentInbox.tsx:407 +#: packages/admin/src/components/comments/CommentInbox.tsx:268 +#: packages/admin/src/components/comments/CommentInbox.tsx:408 #: packages/admin/src/components/ContentTypeEditor.tsx:672 #: packages/admin/src/components/ContentTypeList.tsx:148 #: packages/admin/src/components/editor/BlockMenu.tsx:301 @@ -2196,16 +2196,16 @@ msgstr "程式碼定義" #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:453 #: packages/admin/src/components/MenuEditor.tsx:549 -#: packages/admin/src/components/MenuList.tsx:255 -#: packages/admin/src/components/Redirects.tsx:582 +#: packages/admin/src/components/MenuList.tsx:256 +#: packages/admin/src/components/Redirects.tsx:583 #: packages/admin/src/components/Sections.tsx:308 #: packages/admin/src/components/Sections.tsx:407 #: packages/admin/src/components/settings/BackupSettings.tsx:284 #: packages/admin/src/components/TaxonomyManager.tsx:906 #: packages/admin/src/components/Widgets.tsx:699 #: packages/admin/src/routes/byline-schema.tsx:378 -#: packages/admin/src/routes/bylines.tsx:589 -#: packages/admin/src/routes/bylines.tsx:625 +#: packages/admin/src/routes/bylines.tsx:588 +#: packages/admin/src/routes/bylines.tsx:624 msgid "Delete" msgstr "刪除" @@ -2233,7 +2233,7 @@ msgid "Delete {0} field" msgstr "" #. placeholder {0}: menu.name -#: packages/admin/src/components/MenuList.tsx:237 +#: packages/admin/src/components/MenuList.tsx:238 msgid "Delete {0} menu" msgstr "刪除 {0} 菜單" @@ -2255,7 +2255,7 @@ msgstr "" msgid "Delete byline field?" msgstr "" -#: packages/admin/src/routes/bylines.tsx:623 +#: packages/admin/src/routes/bylines.tsx:622 msgid "Delete Byline?" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Delete column" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:405 +#: packages/admin/src/components/comments/CommentInbox.tsx:406 msgid "Delete Comment?" msgstr "刪除評論?" @@ -2292,11 +2292,11 @@ msgstr "" msgid "Delete Media?" msgstr "刪除媒體?" -#: packages/admin/src/components/MenuList.tsx:253 +#: packages/admin/src/components/MenuList.tsx:254 msgid "Delete Menu" msgstr "刪除菜單" -#: packages/admin/src/components/comments/CommentInbox.tsx:525 +#: packages/admin/src/components/comments/CommentInbox.tsx:526 msgid "Delete permanently" msgstr "永久刪除" @@ -2309,16 +2309,16 @@ msgstr "永久刪除" msgid "Delete Permanently?" msgstr "永久刪除?" -#: packages/admin/src/components/Redirects.tsx:535 +#: packages/admin/src/components/Redirects.tsx:536 msgid "Delete redirect" msgstr "刪除重定向" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:536 +#: packages/admin/src/components/Redirects.tsx:537 msgid "Delete redirect {0}" msgstr "刪除重定向 {0}" -#: packages/admin/src/components/Redirects.tsx:580 +#: packages/admin/src/components/Redirects.tsx:581 msgid "Delete Redirect?" msgstr "刪除重定向?" @@ -2348,18 +2348,18 @@ msgstr "已刪除" msgid "Deleting \"{0}\" will also remove {1, plural, one {# stored value} other {# stored values}} across all bylines. This cannot be undone." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:408 +#: packages/admin/src/components/comments/CommentInbox.tsx:409 #: packages/admin/src/components/ContentTypeEditor.tsx:673 #: packages/admin/src/components/ContentTypeList.tsx:149 #: packages/admin/src/components/MediaDetailPanel.tsx:410 #: packages/admin/src/components/MediaDetailPanel.tsx:454 -#: packages/admin/src/components/MenuList.tsx:256 -#: packages/admin/src/components/Redirects.tsx:583 +#: packages/admin/src/components/MenuList.tsx:257 +#: packages/admin/src/components/Redirects.tsx:584 #: packages/admin/src/components/Sections.tsx:309 #: packages/admin/src/components/settings/BackupSettings.tsx:285 #: packages/admin/src/components/TaxonomyManager.tsx:907 #: packages/admin/src/components/Widgets.tsx:700 -#: packages/admin/src/routes/bylines.tsx:626 +#: packages/admin/src/routes/bylines.tsx:625 msgid "Deleting..." msgstr "刪除中..." @@ -2414,11 +2414,11 @@ msgstr "描述" msgid "Description (optional)" msgstr "描述(可選)" -#: packages/admin/src/components/Redirects.tsx:468 +#: packages/admin/src/components/Redirects.tsx:469 msgid "Destination" msgstr "目標" -#: packages/admin/src/components/Redirects.tsx:140 +#: packages/admin/src/components/Redirects.tsx:141 msgid "Destination path" msgstr "目標路徑" @@ -2462,7 +2462,7 @@ msgstr "禁用" msgid "Disable plugin" msgstr "禁用插件" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Disable redirect" msgstr "禁用重定向" @@ -2475,7 +2475,7 @@ msgid "Disable User?" msgstr "" #: packages/admin/src/components/PluginManager.tsx:354 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:419 #: packages/admin/src/components/users/UserDetail.tsx:201 #: packages/admin/src/components/users/UserList.tsx:212 msgid "Disabled" @@ -2534,11 +2534,11 @@ msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:914 #: packages/admin/src/components/ContentSettingsPanel.tsx:976 -#: packages/admin/src/routes/bylines.tsx:482 +#: packages/admin/src/routes/bylines.tsx:481 msgid "Display name" msgstr "顯示名稱" -#: packages/admin/src/components/MenuList.tsx:167 +#: packages/admin/src/components/MenuList.tsx:168 msgid "Display name for admin interface" msgstr "管理界面的顯示名稱" @@ -2706,7 +2706,7 @@ msgstr "複製 {title}" msgid "e.g. application/zip or .pdf" msgstr "" -#: packages/admin/src/components/Redirects.tsx:167 +#: packages/admin/src/components/Redirects.tsx:168 msgid "e.g. import, blog" msgstr "" @@ -2722,7 +2722,7 @@ msgstr "例如:MacBook Pro、iPhone" #: packages/admin/src/components/editor/PluginBlockNode.tsx:367 #: packages/admin/src/components/editor/PluginBlockNode.tsx:368 #: packages/admin/src/components/MenuEditor.tsx:544 -#: packages/admin/src/components/MenuList.tsx:231 +#: packages/admin/src/components/MenuList.tsx:232 #: packages/admin/src/components/Sections.tsx:392 #: packages/admin/src/components/TranslationsPanel.tsx:93 msgid "Edit" @@ -2737,7 +2737,7 @@ msgstr "編輯" #: packages/admin/src/components/TaxonomyManager.tsx:109 #: packages/admin/src/components/TaxonomyManager.tsx:377 #: packages/admin/src/routes/byline-schema.tsx:449 -#: packages/admin/src/routes/bylines.tsx:477 +#: packages/admin/src/routes/bylines.tsx:476 msgid "Edit {0}" msgstr "編輯 {0}" @@ -2782,16 +2782,16 @@ msgstr "編輯菜單項" msgid "Edit menu items" msgstr "編輯菜單項" -#: packages/admin/src/components/Redirects.tsx:527 +#: packages/admin/src/components/Redirects.tsx:528 msgid "Edit redirect" msgstr "編輯重定向" -#: packages/admin/src/components/Redirects.tsx:105 +#: packages/admin/src/components/Redirects.tsx:106 msgid "Edit Redirect" msgstr "編輯重定向" #. placeholder {0}: r.source -#: packages/admin/src/components/Redirects.tsx:528 +#: packages/admin/src/components/Redirects.tsx:529 msgid "Edit redirect {0}" msgstr "編輯重定向 {0}" @@ -2896,12 +2896,12 @@ msgstr "在此合集上啓用全文搜索" msgid "Enable plugin" msgstr "啓用插件" -#: packages/admin/src/components/Redirects.tsx:504 +#: packages/admin/src/components/Redirects.tsx:505 msgid "Enable redirect" msgstr "啓用重定向" -#: packages/admin/src/components/Redirects.tsx:175 -#: packages/admin/src/components/Redirects.tsx:418 +#: packages/admin/src/components/Redirects.tsx:176 +#: packages/admin/src/components/Redirects.tsx:419 msgid "Enabled" msgstr "已啓用" @@ -3359,7 +3359,7 @@ msgid "Failed to load backup settings" msgstr "" #. placeholder {0}: error.message -#: packages/admin/src/routes/bylines.tsx:366 +#: packages/admin/src/routes/bylines.tsx:365 msgid "Failed to load bylines: {0}" msgstr "" @@ -3384,7 +3384,7 @@ msgstr "加載插件失敗" msgid "Failed to load plugins: {0}" msgstr "加載插件失敗:{0}" -#: packages/admin/src/components/RegistryBrowse.tsx:95 +#: packages/admin/src/components/RegistryBrowse.tsx:96 msgid "Failed to load plugins. The registry aggregator may be unreachable." msgstr "" @@ -3698,7 +3698,7 @@ msgstr "" msgid "Filter by capability" msgstr "按功能篩選" -#: packages/admin/src/components/comments/CommentInbox.tsx:177 +#: packages/admin/src/components/comments/CommentInbox.tsx:178 msgid "Filter by collection" msgstr "按合集篩選" @@ -3711,16 +3711,16 @@ msgid "Filter by source" msgstr "" #: packages/admin/src/components/ContentList.tsx:754 -#: packages/admin/src/components/Redirects.tsx:419 +#: packages/admin/src/components/Redirects.tsx:420 msgid "Filter by status" msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:439 -#: packages/admin/src/components/Redirects.tsx:425 +#: packages/admin/src/components/Redirects.tsx:426 msgid "Filter by type" msgstr "" -#: packages/admin/src/routes/bylines.tsx:409 +#: packages/admin/src/routes/bylines.tsx:408 msgid "Filter byline type" msgstr "" @@ -3803,7 +3803,7 @@ msgstr "" msgid "Grid view" msgstr "網格視圖" -#: packages/admin/src/components/Redirects.tsx:166 +#: packages/admin/src/components/Redirects.tsx:167 msgid "Group (optional)" msgstr "組(可選)" @@ -3811,11 +3811,11 @@ msgstr "組(可選)" msgid "Group by" msgstr "" -#: packages/admin/src/routes/bylines.tsx:556 +#: packages/admin/src/routes/bylines.tsx:555 msgid "Guest byline" msgstr "" -#: packages/admin/src/routes/bylines.tsx:414 +#: packages/admin/src/routes/bylines.tsx:413 msgid "Guest only" msgstr "" @@ -3879,8 +3879,8 @@ msgstr "隱藏令牌" msgid "Hierarchical (like categories, with parent/child relationships)" msgstr "層級式(類似分類,具有父子關係)" -#: packages/admin/src/components/Redirects.tsx:225 -#: packages/admin/src/components/Redirects.tsx:470 +#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:471 msgid "Hits" msgstr "點擊量" @@ -3982,8 +3982,8 @@ msgstr "圖片 URL 已更新於" msgid "Images" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:233 -#: packages/admin/src/components/Sidebar.tsx:401 +#: packages/admin/src/components/AdminCommandPalette.tsx:226 +#: packages/admin/src/components/Sidebar.tsx:290 #: packages/admin/src/components/WordPressImport.tsx:738 msgid "Import" msgstr "導入" @@ -4150,7 +4150,7 @@ msgstr "" msgid "Insert raw HTML" msgstr "" -#: packages/admin/src/components/SectionPickerModal.tsx:57 +#: packages/admin/src/components/SectionPickerModal.tsx:58 msgid "Insert Section" msgstr "插入區塊" @@ -4181,7 +4181,7 @@ msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:261 #: packages/admin/src/components/MarketplacePluginDetail.tsx:173 -#: packages/admin/src/components/RegistryBrowse.tsx:198 +#: packages/admin/src/components/RegistryBrowse.tsx:199 #: packages/admin/src/components/RegistryPluginDetail.tsx:533 msgid "Installed" msgstr "已安裝" @@ -4313,7 +4313,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:553 #: packages/admin/src/components/MenuEditor.tsx:416 #: packages/admin/src/components/MenuEditor.tsx:593 -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 #: packages/admin/src/components/TaxonomyManager.tsx:645 #: packages/admin/src/components/Widgets.tsx:431 #: packages/admin/src/routes/byline-schema.tsx:234 @@ -4351,7 +4351,7 @@ msgstr "最後登錄" msgid "Last Login" msgstr "" -#: packages/admin/src/components/Redirects.tsx:226 +#: packages/admin/src/components/Redirects.tsx:227 msgid "Last seen" msgstr "最後訪問" @@ -4423,11 +4423,11 @@ msgstr "鏈接到另一個內容項" msgid "Linked Accounts ({0})" msgstr "已關聯帳戶 ({0})" -#: packages/admin/src/routes/bylines.tsx:415 +#: packages/admin/src/routes/bylines.tsx:414 msgid "Linked only" msgstr "" -#: packages/admin/src/routes/bylines.tsx:507 +#: packages/admin/src/routes/bylines.tsx:506 msgid "Linked user" msgstr "" @@ -4451,9 +4451,9 @@ msgstr "實時預覽" #: packages/admin/src/components/ContentPickerModal.tsx:236 #: packages/admin/src/components/MarketplaceBrowse.tsx:198 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:170 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Load more" msgstr "加載更多" @@ -4477,7 +4477,7 @@ msgstr "" msgid "Loading collections..." msgstr "正在加載合集..." -#: packages/admin/src/components/comments/CommentInbox.tsx:307 +#: packages/admin/src/components/comments/CommentInbox.tsx:308 msgid "Loading comments..." msgstr "正在加載評論..." @@ -4498,7 +4498,7 @@ msgstr "" msgid "Loading menu..." msgstr "正在加載菜單..." -#: packages/admin/src/components/MenuList.tsx:94 +#: packages/admin/src/components/MenuList.tsx:95 msgid "Loading menus..." msgstr "正在加載菜單..." @@ -4506,11 +4506,11 @@ msgstr "正在加載菜單..." msgid "Loading plugins..." msgstr "正在加載插件..." -#: packages/admin/src/components/Redirects.tsx:456 +#: packages/admin/src/components/Redirects.tsx:457 msgid "Loading redirects..." msgstr "正在加載重定向..." -#: packages/admin/src/components/SectionPickerModal.tsx:94 +#: packages/admin/src/components/SectionPickerModal.tsx:95 #: packages/admin/src/components/Sections.tsx:252 msgid "Loading sections..." msgstr "正在加載區塊..." @@ -4542,7 +4542,7 @@ msgstr "" #: packages/admin/src/components/MediaLibrary.tsx:635 #: packages/admin/src/components/MediaPickerModal.tsx:722 #: packages/admin/src/components/PortableTextEditor.tsx:2035 -#: packages/admin/src/components/RegistryBrowse.tsx:143 +#: packages/admin/src/components/RegistryBrowse.tsx:144 #: packages/admin/src/components/settings/AllowedDomainsSettings.tsx:161 #: packages/admin/src/components/settings/SecuritySettings.tsx:104 #: packages/admin/src/components/TaxonomyManager.tsx:801 @@ -4551,7 +4551,7 @@ msgstr "" #: packages/admin/src/components/ThemeMarketplaceDetail.tsx:143 #: packages/admin/src/components/users/UserList.tsx:156 #: packages/admin/src/components/WelcomeModal.tsx:143 -#: packages/admin/src/routes/bylines.tsx:469 +#: packages/admin/src/routes/bylines.tsx:468 msgid "Loading..." msgstr "加載中..." @@ -4615,7 +4615,7 @@ msgstr "" msgid "Make network requests to any host (unrestricted)" msgstr "" -#: packages/admin/src/components/Sidebar.tsx:483 +#: packages/admin/src/components/Sidebar.tsx:375 msgid "Manage" msgstr "管理" @@ -4637,11 +4637,11 @@ msgstr "" msgid "Manage installed plugins. Enable or disable plugins to control their functionality." msgstr "管理已安裝的插件。啓用或禁用插件以控制其功能。" -#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/MenuList.tsx:105 msgid "Manage navigation menus for your site" msgstr "管理您站點的導航菜單" -#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:360 msgid "Manage URL redirects and view 404 errors." msgstr "管理 URL 重定向並查看 404 錯誤。" @@ -4657,7 +4657,7 @@ msgstr "" msgid "Managed by an external media provider" msgstr "" -#: packages/admin/src/components/Redirects.tsx:424 +#: packages/admin/src/components/Redirects.tsx:425 msgid "Manual" msgstr "手動" @@ -4671,15 +4671,15 @@ msgid "Map WordPress user {0} to EmDash user" msgstr "" #. placeholder {0}: item.path -#: packages/admin/src/components/Redirects.tsx:255 +#: packages/admin/src/components/Redirects.tsx:256 msgid "Mark {0} as Gone (410)" msgstr "" -#: packages/admin/src/components/Redirects.tsx:254 +#: packages/admin/src/components/Redirects.tsx:255 msgid "Mark as Gone (410) — tells search engines it was permanently deleted" msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:501 +#: packages/admin/src/components/comments/CommentInbox.tsx:502 msgid "Mark as spam" msgstr "標記爲垃圾" @@ -4694,7 +4694,7 @@ msgstr "市場" #: packages/admin/src/components/MarketplaceBrowse.tsx:87 #: packages/admin/src/components/PluginManager.tsx:167 #: packages/admin/src/components/PluginManager.tsx:355 -#: packages/admin/src/components/Sidebar.tsx:385 +#: packages/admin/src/components/Sidebar.tsx:272 msgid "Marketplace" msgstr "市場" @@ -4719,7 +4719,7 @@ msgid "MDX" msgstr "" #: packages/admin/src/components/PortableTextEditor.tsx:2311 -#: packages/admin/src/components/Sidebar.tsx:344 +#: packages/admin/src/components/Sidebar.tsx:216 #: packages/admin/src/components/WordPressImport.tsx:752 #: packages/admin/src/components/WordPressImport.tsx:1145 #: packages/admin/src/components/WordPressImport.tsx:1334 @@ -4747,7 +4747,7 @@ msgstr "媒體導入完成" msgid "Media import was skipped" msgstr "媒體導入已跳過" -#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/AdminCommandPalette.tsx:153 #: packages/admin/src/components/MediaLibrary.tsx:322 msgid "Media Library" msgstr "媒體庫" @@ -4776,15 +4776,15 @@ msgid "Menu \"{0}\" ({1}) created." msgstr "" #. placeholder {0}: menu.label -#: packages/admin/src/components/MenuList.tsx:55 +#: packages/admin/src/components/MenuList.tsx:56 msgid "Menu \"{0}\" has been created." msgstr "菜單 \"{0}\" 已創建。" -#: packages/admin/src/components/MenuList.tsx:54 +#: packages/admin/src/components/MenuList.tsx:55 msgid "Menu created" msgstr "菜單已創建" -#: packages/admin/src/components/MenuList.tsx:74 +#: packages/admin/src/components/MenuList.tsx:75 msgid "Menu deleted" msgstr "菜單已刪除" @@ -4808,9 +4808,9 @@ msgstr "菜單未找到" msgid "Menu order has been updated." msgstr "菜單順序已更新。" -#: packages/admin/src/components/AdminCommandPalette.tsx:167 -#: packages/admin/src/components/MenuList.tsx:103 -#: packages/admin/src/components/Sidebar.tsx:354 +#: packages/admin/src/components/AdminCommandPalette.tsx:160 +#: packages/admin/src/components/MenuList.tsx:104 +#: packages/admin/src/components/Sidebar.tsx:226 #: packages/admin/src/components/WordPressImport.tsx:1149 msgid "Menus" msgstr "菜單" @@ -4958,7 +4958,7 @@ msgstr "我的精彩博客" #: packages/admin/src/components/ContentTypeList.tsx:94 #: packages/admin/src/components/MarketplaceBrowse.tsx:45 -#: packages/admin/src/components/MenuList.tsx:154 +#: packages/admin/src/components/MenuList.tsx:155 #: packages/admin/src/components/TaxonomyManager.tsx:405 #: packages/admin/src/components/TaxonomyManager.tsx:654 #: packages/admin/src/components/TaxonomyManager.tsx:841 @@ -4976,7 +4976,7 @@ msgstr "名稱和標籤爲必填項" msgid "Name must start with a letter and contain only lowercase letters, numbers, and underscores" msgstr "名稱必須以字母開頭,且僅包含小寫字母、數字和下劃線" -#: packages/admin/src/components/AdminCommandPalette.tsx:347 +#: packages/admin/src/components/AdminCommandPalette.tsx:340 msgid "Navigation" msgstr "導航" @@ -4989,7 +4989,7 @@ msgstr "從未" msgid "new" msgstr "" -#: packages/admin/src/routes/bylines.tsx:427 +#: packages/admin/src/routes/bylines.tsx:426 msgid "New" msgstr "" @@ -5027,8 +5027,8 @@ msgstr "" msgid "New public routes" msgstr "" -#: packages/admin/src/components/Redirects.tsx:105 -#: packages/admin/src/components/Redirects.tsx:362 +#: packages/admin/src/components/Redirects.tsx:106 +#: packages/admin/src/components/Redirects.tsx:363 msgid "New Redirect" msgstr "新重定向" @@ -5036,7 +5036,7 @@ msgstr "新重定向" msgid "New Section" msgstr "新區塊" -#: packages/admin/src/components/AdminCommandPalette.tsx:478 +#: packages/admin/src/components/AdminCommandPalette.tsx:479 msgid "new tab" msgstr "新標籤頁" @@ -5064,7 +5064,7 @@ msgstr "" msgid "Next" msgstr "下一步" -#: packages/admin/src/components/comments/CommentInbox.tsx:371 +#: packages/admin/src/components/comments/CommentInbox.tsx:372 #: packages/admin/src/components/ContentList.tsx:618 msgid "Next page" msgstr "下一頁" @@ -5097,7 +5097,7 @@ msgstr "暫無 {0}。" msgid "No {0} yet. Create one to get started." msgstr "暫無{0}。創建一個以開始使用。" -#: packages/admin/src/components/Redirects.tsx:217 +#: packages/admin/src/components/Redirects.tsx:218 msgid "No 404 errors recorded yet." msgstr "暫無 404 錯誤記錄。" @@ -5110,7 +5110,7 @@ msgstr "無替代文本" msgid "No API tokens yet. Create one to get started." msgstr "暫無 API 令牌。創建一個以開始使用。" -#: packages/admin/src/components/comments/CommentInbox.tsx:547 +#: packages/admin/src/components/comments/CommentInbox.tsx:548 msgid "No approved comments yet." msgstr "暫無已審覈評論。" @@ -5122,7 +5122,7 @@ msgstr "" msgid "No bylines available in {entryLocale}. Create a variant from the Bylines page before crediting one on this entry." msgstr "" -#: packages/admin/src/routes/bylines.tsx:453 +#: packages/admin/src/routes/bylines.tsx:452 msgid "No bylines found" msgstr "" @@ -5134,11 +5134,11 @@ msgstr "未選擇任何署名。" msgid "No collections configured" msgstr "未配置任何合集" -#: packages/admin/src/components/comments/CommentInbox.tsx:546 +#: packages/admin/src/components/comments/CommentInbox.tsx:547 msgid "No comments awaiting moderation." msgstr "暫無待審覈評論。" -#: packages/admin/src/components/comments/CommentInbox.tsx:542 +#: packages/admin/src/components/comments/CommentInbox.tsx:543 msgid "No comments match your search." msgstr "暫無評論符合您的搜索。" @@ -5211,7 +5211,7 @@ msgstr "暫無項目" msgid "No limit" msgstr "無限制" -#: packages/admin/src/routes/bylines.tsx:518 +#: packages/admin/src/routes/bylines.tsx:517 msgid "No linked user" msgstr "" @@ -5254,7 +5254,7 @@ msgstr "未找到媒體" msgid "No menu items yet" msgstr "暫無菜單項" -#: packages/admin/src/components/MenuList.tsx:186 +#: packages/admin/src/components/MenuList.tsx:187 msgid "No menus yet" msgstr "暫無菜單" @@ -5287,11 +5287,11 @@ msgstr "未配置插件" msgid "No plugins found" msgstr "未找到插件" -#: packages/admin/src/components/RegistryBrowse.tsx:117 +#: packages/admin/src/components/RegistryBrowse.tsx:118 msgid "No plugins have been published to this registry yet." msgstr "" -#: packages/admin/src/components/RegistryBrowse.tsx:116 +#: packages/admin/src/components/RegistryBrowse.tsx:117 msgid "No plugins match \"{debouncedQuery}\"." msgstr "" @@ -5307,7 +5307,7 @@ msgstr "" msgid "No recent activity" msgstr "暫無最近活動" -#: packages/admin/src/components/Redirects.tsx:460 +#: packages/admin/src/components/Redirects.tsx:461 msgid "No redirects yet" msgstr "暫無重定向" @@ -5326,7 +5326,7 @@ msgstr "" msgid "No results for \"{debouncedQuery}\". Try a different search term." msgstr "「{debouncedQuery}」無結果。請嘗試其他搜索詞。" -#: packages/admin/src/components/AdminCommandPalette.tsx:464 +#: packages/admin/src/components/AdminCommandPalette.tsx:465 msgid "No results found" msgstr "未找到結果" @@ -5334,11 +5334,11 @@ msgstr "未找到結果" msgid "No revisions yet" msgstr "暫無修訂歷史" -#: packages/admin/src/components/SectionPickerModal.tsx:107 +#: packages/admin/src/components/SectionPickerModal.tsx:108 msgid "No sections available" msgstr "無可用區塊" -#: packages/admin/src/components/SectionPickerModal.tsx:101 +#: packages/admin/src/components/SectionPickerModal.tsx:102 #: packages/admin/src/components/Sections.tsx:259 msgid "No sections found" msgstr "未找到區塊" @@ -5347,7 +5347,7 @@ msgstr "未找到區塊" msgid "No sections yet" msgstr "暫無區塊" -#: packages/admin/src/components/comments/CommentInbox.tsx:548 +#: packages/admin/src/components/comments/CommentInbox.tsx:549 msgid "No spam comments." msgstr "無垃圾評論。" @@ -5420,7 +5420,7 @@ msgstr "僅授權您認識的代碼。" msgid "Only email addresses from allowed domains can sign up." msgstr "僅允許來自允許域名的郵箱註冊。" -#: packages/admin/src/components/MenuList.tsx:159 +#: packages/admin/src/components/MenuList.tsx:160 msgid "Only lowercase letters, numbers, and hyphens" msgstr "僅限小寫字母、數字和連字符" @@ -5544,8 +5544,8 @@ msgstr "段落" msgid "Parent" msgstr "父級" -#: packages/admin/src/components/Redirects.tsx:509 -#: packages/admin/src/components/Redirects.tsx:515 +#: packages/admin/src/components/Redirects.tsx:510 +#: packages/admin/src/components/Redirects.tsx:516 msgid "Part of a redirect loop" msgstr "重定向循環的一部分" @@ -5618,7 +5618,7 @@ msgstr "通行密鑰需要 HTTPS 或 http://localhost(帶您的埠);此主 msgid "Paste your migration key" msgstr "" -#: packages/admin/src/components/Redirects.tsx:224 +#: packages/admin/src/components/Redirects.tsx:225 msgid "Path" msgstr "路徑" @@ -5645,7 +5645,7 @@ msgstr "" msgid "pending" msgstr "待處理" -#: packages/admin/src/components/comments/CommentInbox.tsx:197 +#: packages/admin/src/components/comments/CommentInbox.tsx:198 #: packages/admin/src/components/Dashboard.tsx:348 msgid "Pending" msgstr "待處理" @@ -5749,7 +5749,7 @@ msgstr "在您的 WordPress 站點上的插件。" msgid "Plugin Permissions" msgstr "插件權限" -#: packages/admin/src/components/RegistryBrowse.tsx:70 +#: packages/admin/src/components/RegistryBrowse.tsx:71 msgid "Plugin Registry" msgstr "" @@ -5774,12 +5774,12 @@ msgstr "插件已更新" msgid "Plugin widget error" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:225 +#: packages/admin/src/components/AdminCommandPalette.tsx:218 #: packages/admin/src/components/PluginManager.tsx:135 #: packages/admin/src/components/PluginManager.tsx:144 #: packages/admin/src/components/PluginManager.tsx:153 -#: packages/admin/src/components/Sidebar.tsx:372 -#: packages/admin/src/components/Sidebar.tsx:499 +#: packages/admin/src/components/Sidebar.tsx:256 +#: packages/admin/src/components/Sidebar.tsx:391 msgid "Plugins" msgstr "插件" @@ -5843,7 +5843,7 @@ msgstr "預覽草稿" msgid "Previous" msgstr "上一步" -#: packages/admin/src/components/comments/CommentInbox.tsx:352 +#: packages/admin/src/components/comments/CommentInbox.tsx:353 #: packages/admin/src/components/ContentList.tsx:606 msgid "Previous page" msgstr "上一頁" @@ -5852,7 +5852,7 @@ msgstr "上一頁" msgid "Previous screenshot" msgstr "上一張截圖" -#: packages/admin/src/components/MenuList.tsx:166 +#: packages/admin/src/components/MenuList.tsx:167 msgid "Primary Navigation" msgstr "主導航" @@ -5991,7 +5991,7 @@ msgstr "收件人郵箱" msgid "Recovery link sent to {0}" msgstr "恢復鏈接已發送至 {0}" -#: packages/admin/src/components/Redirects.tsx:442 +#: packages/admin/src/components/Redirects.tsx:443 msgid "Redirect loop detected" msgstr "檢測到重定向循環" @@ -5999,9 +5999,9 @@ msgstr "檢測到重定向循環" msgid "Redirecting to login..." msgstr "正在重定向到登錄..." -#: packages/admin/src/components/Redirects.tsx:358 -#: packages/admin/src/components/Redirects.tsx:377 -#: packages/admin/src/components/Sidebar.tsx:355 +#: packages/admin/src/components/Redirects.tsx:359 +#: packages/admin/src/components/Redirects.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:229 msgid "Redirects" msgstr "重定向" @@ -6042,7 +6042,7 @@ msgstr "" msgid "Registration was cancelled or timed out. Please try again." msgstr "註冊已取消或超時。請重試。" -#: packages/admin/src/components/Sidebar.tsx:378 +#: packages/admin/src/components/Sidebar.tsx:265 msgid "Registry" msgstr "" @@ -6344,11 +6344,11 @@ msgstr "同一視窗" #: packages/admin/src/components/editor/PluginBlockNode.tsx:417 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:190 +#: packages/admin/src/components/Redirects.tsx:191 #: packages/admin/src/components/SaveButton.tsx:32 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Save" msgstr "保存" @@ -6404,7 +6404,7 @@ msgstr "" #: packages/admin/src/components/FieldEditor.tsx:660 #: packages/admin/src/components/MediaDetailPanel.tsx:425 #: packages/admin/src/components/MenuEditor.tsx:626 -#: packages/admin/src/components/Redirects.tsx:187 +#: packages/admin/src/components/Redirects.tsx:188 #: packages/admin/src/components/SaveButton.tsx:33 #: packages/admin/src/components/settings/BackupSettings.tsx:192 #: packages/admin/src/components/settings/GeneralSettings.tsx:120 @@ -6416,7 +6416,7 @@ msgstr "" #: packages/admin/src/components/TaxonomyManager.tsx:498 #: packages/admin/src/components/users/UserDetail.tsx:311 #: packages/admin/src/components/Widgets.tsx:966 -#: packages/admin/src/routes/bylines.tsx:580 +#: packages/admin/src/routes/bylines.tsx:579 msgid "Saving..." msgstr "保存中..." @@ -6544,7 +6544,7 @@ msgid "Search by name or email..." msgstr "" #: packages/admin/src/components/ContentSettingsPanel.tsx:807 -#: packages/admin/src/routes/bylines.tsx:402 +#: packages/admin/src/routes/bylines.tsx:401 msgid "Search bylines" msgstr "" @@ -6552,11 +6552,11 @@ msgstr "" msgid "Search bylines to add..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:163 +#: packages/admin/src/components/comments/CommentInbox.tsx:164 msgid "Search comments" msgstr "搜索評論" -#: packages/admin/src/components/comments/CommentInbox.tsx:162 +#: packages/admin/src/components/comments/CommentInbox.tsx:163 msgid "Search comments..." msgstr "搜索評論..." @@ -6581,26 +6581,26 @@ msgstr "" msgid "Search media" msgstr "搜索媒體" -#: packages/admin/src/components/AdminCommandPalette.tsx:437 +#: packages/admin/src/components/AdminCommandPalette.tsx:438 msgid "Search pages and content..." msgstr "搜索頁面和內容..." #: packages/admin/src/components/MarketplaceBrowse.tsx:101 -#: packages/admin/src/components/RegistryBrowse.tsx:84 +#: packages/admin/src/components/RegistryBrowse.tsx:85 msgid "Search plugins" msgstr "" #: packages/admin/src/components/MarketplaceBrowse.tsx:97 -#: packages/admin/src/components/RegistryBrowse.tsx:80 +#: packages/admin/src/components/RegistryBrowse.tsx:81 msgid "Search plugins..." msgstr "搜索插件..." -#: packages/admin/src/components/SectionPickerModal.tsx:81 +#: packages/admin/src/components/SectionPickerModal.tsx:82 #: packages/admin/src/components/Sections.tsx:226 msgid "Search sections..." msgstr "搜索區塊..." -#: packages/admin/src/components/Redirects.tsx:409 +#: packages/admin/src/components/Redirects.tsx:410 msgid "Search source or destination..." msgstr "搜索源或目標..." @@ -6658,9 +6658,9 @@ msgstr "未找到區塊" msgid "Section title" msgstr "區塊標題" -#: packages/admin/src/components/AdminCommandPalette.tsx:183 +#: packages/admin/src/components/AdminCommandPalette.tsx:176 #: packages/admin/src/components/Sections.tsx:134 -#: packages/admin/src/components/Sidebar.tsx:357 +#: packages/admin/src/components/Sidebar.tsx:234 msgid "Sections" msgstr "區塊" @@ -6711,7 +6711,7 @@ msgstr "" msgid "Security error. Make sure you're on a secure connection." msgstr "安全錯誤。請確保您使用的是安全連接。" -#: packages/admin/src/components/AdminCommandPalette.tsx:249 +#: packages/admin/src/components/AdminCommandPalette.tsx:242 #: packages/admin/src/components/Header.tsx:93 #: packages/admin/src/components/settings/SecuritySettings.tsx:95 msgid "Security Settings" @@ -6742,7 +6742,7 @@ msgstr "" msgid "Select a menu..." msgstr "" -#: packages/admin/src/components/comments/CommentInbox.tsx:283 +#: packages/admin/src/components/comments/CommentInbox.tsx:284 msgid "Select all" msgstr "全選" @@ -6751,7 +6751,7 @@ msgid "Select all on this page" msgstr "" #. placeholder {0}: comment.authorName -#: packages/admin/src/components/comments/CommentInbox.tsx:456 +#: packages/admin/src/components/comments/CommentInbox.tsx:457 msgid "Select comment by {0}" msgstr "選擇 {0} 的評論" @@ -6917,14 +6917,14 @@ msgstr "設置您的站點" msgid "Setting up..." msgstr "正在設置..." -#: packages/admin/src/components/AdminCommandPalette.tsx:241 +#: packages/admin/src/components/AdminCommandPalette.tsx:234 #: packages/admin/src/components/ContentEditor.tsx:809 #: packages/admin/src/components/ContentEditor.tsx:1016 #: packages/admin/src/components/ContentTypeEditor.tsx:381 #: packages/admin/src/components/Header.tsx:101 #: packages/admin/src/components/PluginManager.tsx:437 #: packages/admin/src/components/Settings.tsx:63 -#: packages/admin/src/components/Sidebar.tsx:402 +#: packages/admin/src/components/Sidebar.tsx:294 #: packages/admin/src/components/WordPressImport.tsx:1811 msgid "Settings" msgstr "設置" @@ -7112,7 +7112,7 @@ msgstr "已跳過" #: packages/admin/src/components/Sections.tsx:184 #: packages/admin/src/components/TaxonomyManager.tsx:414 #: packages/admin/src/routes/byline-schema.tsx:237 -#: packages/admin/src/routes/bylines.tsx:487 +#: packages/admin/src/routes/bylines.tsx:486 msgid "Slug" msgstr "別名" @@ -7168,12 +7168,12 @@ msgstr "排序主題" #: packages/admin/src/components/editor/ImageDetailPanel.tsx:560 #: packages/admin/src/components/MarketplacePluginDetail.tsx:214 #: packages/admin/src/components/PluginManager.tsx:497 -#: packages/admin/src/components/Redirects.tsx:466 +#: packages/admin/src/components/Redirects.tsx:467 #: packages/admin/src/components/SectionEditor.tsx:281 msgid "Source" msgstr "來源" -#: packages/admin/src/components/Redirects.tsx:131 +#: packages/admin/src/components/Redirects.tsx:132 msgid "Source path" msgstr "源路徑" @@ -7182,8 +7182,8 @@ msgid "spam" msgstr "垃圾" #: packages/admin/src/components/comments/CommentDetail.tsx:159 -#: packages/admin/src/components/comments/CommentInbox.tsx:207 -#: packages/admin/src/components/comments/CommentInbox.tsx:247 +#: packages/admin/src/components/comments/CommentInbox.tsx:208 +#: packages/admin/src/components/comments/CommentInbox.tsx:248 msgid "Spam" msgstr "垃圾" @@ -7212,12 +7212,12 @@ msgstr "" #: packages/admin/src/components/ContentList.tsx:511 #: packages/admin/src/components/ContentSettingsPanel.tsx:425 #: packages/admin/src/components/ContentTypeEditor.tsx:117 -#: packages/admin/src/components/Redirects.tsx:471 +#: packages/admin/src/components/Redirects.tsx:472 #: packages/admin/src/components/users/UserList.tsx:104 msgid "Status" msgstr "狀態" -#: packages/admin/src/components/Redirects.tsx:151 +#: packages/admin/src/components/Redirects.tsx:152 msgid "Status code" msgstr "狀態碼" @@ -7300,7 +7300,7 @@ msgstr "" msgid "Tagline" msgstr "副標題" -#: packages/admin/src/components/AdminCommandPalette.tsx:208 +#: packages/admin/src/components/AdminCommandPalette.tsx:201 #: packages/admin/src/components/Widgets.tsx:141 msgid "Tags" msgstr "標籤" @@ -7392,7 +7392,7 @@ msgstr "鏈接將在 15 分鐘後過期。" msgid "The marketplace is empty. Check back later for new plugins." msgstr "市場爲空。請稍後查看新插件。" -#: packages/admin/src/components/MenuList.tsx:75 +#: packages/admin/src/components/MenuList.tsx:76 msgid "The menu has been deleted." msgstr "菜單已刪除。" @@ -7449,7 +7449,7 @@ msgstr "主題提供的區塊無法刪除。編輯區塊以創建自定義副本 msgid "Theme: {label}" msgstr "主題:{label}" -#: packages/admin/src/components/Sidebar.tsx:394 +#: packages/admin/src/components/Sidebar.tsx:281 #: packages/admin/src/components/ThemeMarketplaceBrowse.tsx:77 msgid "Themes" msgstr "主題" @@ -7504,7 +7504,7 @@ msgstr "此插件不需要特殊權限。" msgid "This publisher claims a name they couldn't prove they own — possibly impersonating someone else. Install is disabled. If you know the publisher and trust them, ask them to fix their identity setup before retrying." msgstr "" -#: packages/admin/src/components/Redirects.tsx:581 +#: packages/admin/src/components/Redirects.tsx:582 msgid "This redirect rule will be permanently removed." msgstr "此重定向規則將被永久移除。" @@ -7512,7 +7512,7 @@ msgstr "此重定向規則將被永久移除。" msgid "This release requires a newer environment than your site currently runs. Upgrade before installing." msgstr "" -#: packages/admin/src/routes/bylines.tsx:624 +#: packages/admin/src/routes/bylines.tsx:623 msgid "This removes the byline profile. Content byline links are removed and lead pointers are cleared." msgstr "" @@ -7550,7 +7550,7 @@ msgstr "這將永久刪除「{0}」並將其從所有內容中移除。" msgid "This will permanently delete \"{0}\". This action cannot be undone." msgstr "這將永久刪除「{0}」。此操作無法撤銷。" -#: packages/admin/src/components/comments/CommentInbox.tsx:406 +#: packages/admin/src/components/comments/CommentInbox.tsx:407 msgid "This will permanently delete this comment. This action cannot be undone." msgstr "這將永久刪除此評論。此操作無法撤銷。" @@ -7595,7 +7595,7 @@ msgstr "標題分隔符" msgid "to" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:482 +#: packages/admin/src/components/AdminCommandPalette.tsx:483 msgid "to close" msgstr "關閉" @@ -7607,7 +7607,7 @@ msgstr "" msgid "to install plugins, or add them to your astro.config.mjs." msgstr "以安裝插件,或將它們添加到您的 astro.config.mjs。" -#: packages/admin/src/components/AdminCommandPalette.tsx:472 +#: packages/admin/src/components/AdminCommandPalette.tsx:473 msgid "to select" msgstr "選擇" @@ -7682,9 +7682,9 @@ msgid "trash" msgstr "回收站" #: packages/admin/src/components/comments/CommentDetail.tsx:170 -#: packages/admin/src/components/comments/CommentInbox.tsx:216 -#: packages/admin/src/components/comments/CommentInbox.tsx:257 -#: packages/admin/src/components/comments/CommentInbox.tsx:513 +#: packages/admin/src/components/comments/CommentInbox.tsx:217 +#: packages/admin/src/components/comments/CommentInbox.tsx:258 +#: packages/admin/src/components/comments/CommentInbox.tsx:514 #: packages/admin/src/components/ContentList.tsx:375 msgid "Trash" msgstr "回收站" @@ -7693,7 +7693,7 @@ msgstr "回收站" msgid "Trash is empty" msgstr "回收站爲空" -#: packages/admin/src/components/comments/CommentInbox.tsx:549 +#: packages/admin/src/components/comments/CommentInbox.tsx:550 msgid "Trash is empty." msgstr "回收站爲空。" @@ -7710,7 +7710,7 @@ msgid "Try a different search term" msgstr "嘗試其他搜索詞" #: packages/admin/src/components/ContentPickerModal.tsx:172 -#: packages/admin/src/components/SectionPickerModal.tsx:102 +#: packages/admin/src/components/SectionPickerModal.tsx:103 msgid "Try adjusting your search" msgstr "嘗試調整您的搜索" @@ -7910,7 +7910,7 @@ msgstr "更新網站設置" msgid "Update the {0} details" msgstr "更新 {0} 詳情" -#: packages/admin/src/components/Redirects.tsx:109 +#: packages/admin/src/components/Redirects.tsx:110 msgid "Update this redirect rule." msgstr "更新此重定向規則。" @@ -8053,7 +8053,7 @@ msgstr "" msgid "URL-friendly identifier" msgstr "URL 友好的標識符" -#: packages/admin/src/components/MenuList.tsx:162 +#: packages/admin/src/components/MenuList.tsx:163 msgid "URL-friendly identifier (e.g., \"primary\", \"footer\")" msgstr "URL 友好的標識符(例如:\"primary\"、\"footer\")" @@ -8061,7 +8061,7 @@ msgstr "URL 友好的標識符(例如:\"primary\"、\"footer\")" msgid "URL:" msgstr "" -#: packages/admin/src/components/Redirects.tsx:110 +#: packages/admin/src/components/Redirects.tsx:111 msgid "Use [param] or [...rest] in paths for pattern matching." msgstr "在路徑中使用 [param] 或 [...rest] 進行模式匹配。" @@ -8118,8 +8118,8 @@ msgstr "用戶詳情" msgid "User not found" msgstr "未找到用戶" -#: packages/admin/src/components/AdminCommandPalette.tsx:217 -#: packages/admin/src/components/Sidebar.tsx:371 +#: packages/admin/src/components/AdminCommandPalette.tsx:210 +#: packages/admin/src/components/Sidebar.tsx:253 #: packages/admin/src/components/users/UserList.tsx:54 msgid "Users" msgstr "用戶" @@ -8142,7 +8142,7 @@ msgstr "v{0} 可用" msgid "Validation" msgstr "驗證" -#: packages/admin/src/components/RegistryBrowse.tsx:186 +#: packages/admin/src/components/RegistryBrowse.tsx:187 #: packages/admin/src/components/RegistryPluginDetail.tsx:449 msgid "Verified publisher" msgstr "" @@ -8215,7 +8215,7 @@ msgstr "" msgid "View the {license} license on spdx.org" msgstr "" -#: packages/admin/src/components/Redirects.tsx:448 +#: packages/admin/src/components/Redirects.tsx:449 msgid "Visitors hitting these paths will see an error." msgstr "訪問這些路徑的訪問者將看到錯誤。" @@ -8267,7 +8267,7 @@ msgstr "此瀏覽器不支持 WebAuthn" msgid "Website" msgstr "網站" -#: packages/admin/src/routes/bylines.tsx:492 +#: packages/admin/src/routes/bylines.tsx:491 msgid "Website URL" msgstr "" @@ -8368,9 +8368,9 @@ msgstr "" msgid "Widget updated" msgstr "" -#: packages/admin/src/components/AdminCommandPalette.tsx:175 +#: packages/admin/src/components/AdminCommandPalette.tsx:168 #: packages/admin/src/components/PluginManager.tsx:379 -#: packages/admin/src/components/Sidebar.tsx:356 +#: packages/admin/src/components/Sidebar.tsx:233 #: packages/admin/src/components/Widgets.tsx:385 #: packages/admin/src/components/WordPressImport.tsx:1157 msgid "Widgets" @@ -8451,7 +8451,7 @@ msgstr "您可以創建和編輯自己的內容。" msgid "You can manage content, media, menus, and taxonomies." msgstr "您可以管理內容、媒體、菜單和分類。" -#: packages/admin/src/routes/bylines.tsx:550 +#: packages/admin/src/routes/bylines.tsx:549 msgid "You can still edit the fixed fields above. Saving will not touch any stored custom-field values." msgstr "" From d86e9c18023e3f49d2f782ed4609e6427bd799a3 Mon Sep 17 00:00:00 2001 From: jc <15570714+jcheese1@users.noreply.github.com> Date: Tue, 21 Jul 2026 07:28:21 +0900 Subject: [PATCH 14/33] fix seed setup query budget (#2128) --- .changeset/reliable-wide-seeds.md | 5 + packages/core/src/schema/registry.ts | 146 +++++++++++++++++++- packages/core/src/seed/apply.ts | 57 ++++---- packages/core/tests/unit/seed/apply.test.ts | 74 +++++++++- 4 files changed, 246 insertions(+), 36 deletions(-) create mode 100644 .changeset/reliable-wide-seeds.md diff --git a/.changeset/reliable-wide-seeds.md b/.changeset/reliable-wide-seeds.md new file mode 100644 index 0000000000..624380fcdd --- /dev/null +++ b/.changeset/reliable-wide-seeds.md @@ -0,0 +1,5 @@ +--- +"emdash": patch +--- + +Fixes fresh database setup failures for sites with large seed schemas. diff --git a/packages/core/src/schema/registry.ts b/packages/core/src/schema/registry.ts index a98672eefc..a2608f45a2 100644 --- a/packages/core/src/schema/registry.ts +++ b/packages/core/src/schema/registry.ts @@ -1,5 +1,4 @@ -import type { Kysely } from "kysely"; -import type { Selectable } from "kysely"; +import type { ColumnDataType, CreateTableBuilder, Insertable, Kysely, Selectable } from "kysely"; import { sql } from "kysely"; import { ulid } from "ulidx"; @@ -39,6 +38,12 @@ const WORD_BOUNDARY_PATTERN = /\b\w/g; /** Valid column types for runtime validation */ const COLUMN_TYPES: ReadonlySet = new Set(["TEXT", "REAL", "INTEGER", "JSON"]); +const COLUMN_TYPE_TO_DATA_TYPE = { + TEXT: "text", + REAL: "real", + INTEGER: "integer", + JSON: "json", +} satisfies Record; /** Valid collection source prefixes/values */ const VALID_SOURCES: ReadonlySet = new Set(["manual", "discovered", "seed"]); @@ -64,6 +69,10 @@ const VALID_COLLECTION_SUPPORTS: ReadonlySet = new Set, + fields: readonly CreateFieldInput[], + ): Promise { + this.validateSlug(input.slug, "collection"); + if (RESERVED_COLLECTION_SLUGS.includes(input.slug)) { + throw new SchemaError(`Collection slug "${input.slug}" is reserved`, "RESERVED_SLUG"); + } + + const existing = await this.getCollection(input.slug); + if (existing) { + throw new SchemaError(`Collection "${input.slug}" already exists`, "COLLECTION_EXISTS"); + } + + const fieldSlugs = new Set(); + for (const field of fields) { + this.validateSlug(field.slug, "field"); + if (RESERVED_FIELD_SLUGS.includes(field.slug)) { + throw new SchemaError(`Field slug "${field.slug}" is reserved`, "RESERVED_SLUG"); + } + if (fieldSlugs.has(field.slug)) { + throw new SchemaError( + `Field "${field.slug}" already exists in collection "${input.slug}"`, + "FIELD_EXISTS", + ); + } + fieldSlugs.add(field.slug); + } + + const collectionId = ulid(); + const supports = input.supports ?? ["drafts", "revisions"]; + const hasSeo = input.hasSeo ?? supports.includes("seo") ?? false; + let maxSortOrder = -1; + const fieldRows: Insertable[] = fields.map((field) => { + const sortOrder = field.sortOrder ?? maxSortOrder + 1; + maxSortOrder = Math.max(maxSortOrder, sortOrder); + + return { + id: ulid(), + collection_id: collectionId, + slug: field.slug, + label: field.label, + type: field.type, + column_type: FIELD_TYPE_TO_COLUMN[field.type], + required: field.required ? 1 : 0, + unique: field.unique ? 1 : 0, + default_value: field.defaultValue !== undefined ? JSON.stringify(field.defaultValue) : null, + validation: field.validation ? JSON.stringify(field.validation) : null, + widget: field.widget ?? null, + options: field.options ? JSON.stringify(field.options) : null, + sort_order: sortOrder, + searchable: field.searchable ? 1 : 0, + translatable: field.translatable === false ? 0 : 1, + }; + }); + + let schemaMutated = false; + try { + await withTransaction(this.db, async (trx) => { + await trx + .insertInto("_emdash_collections") + .values({ + id: collectionId, + slug: input.slug, + label: input.label, + label_singular: input.labelSingular ?? null, + description: input.description ?? null, + icon: input.icon ?? null, + supports: JSON.stringify(supports), + source: "seed", + has_seo: hasSeo ? 1 : 0, + comments_enabled: input.commentsEnabled ? 1 : 0, + url_pattern: input.urlPattern ?? null, + }) + .execute(); + schemaMutated = true; + + await this.createContentTable(input.slug, trx, fields); + + for (const fieldBatch of chunks(fieldRows, SEED_FIELD_INSERT_BATCH_SIZE)) { + await trx.insertInto("_emdash_fields").values(fieldBatch).execute(); + } + }); + + await markContentMediaUsageCollectionStaleSafely(this.db, input.slug, "CONTENT_USAGE_STALE"); + } catch (error) { + if (schemaMutated) { + await markContentMediaUsageCollectionStaleSafely( + this.db, + input.slug, + "CONTENT_USAGE_STALE", + ); + } + throw error; + } + } + /** * Update a collection */ @@ -787,11 +903,15 @@ export class SchemaRegistry { /** * Create a content table for a collection */ - private async createContentTable(slug: string, db?: Kysely): Promise { + private async createContentTable( + slug: string, + db?: Kysely, + fields: readonly CreateFieldInput[] = [], + ): Promise { const conn = db ?? this.db; const tableName = this.getTableName(slug); - await conn.schema + let table: CreateTableBuilder = conn.schema .createTable(tableName) .addColumn("id", "text", (col) => col.primaryKey()) .addColumn("slug", "text") @@ -807,7 +927,23 @@ export class SchemaRegistry { .addColumn("live_revision_id", "text", (col) => col.references("revisions.id")) .addColumn("draft_revision_id", "text", (col) => col.references("revisions.id")) .addColumn("locale", "text", (col) => col.notNull().defaultTo("en")) - .addColumn("translation_group", "text") + .addColumn("translation_group", "text"); + + for (const field of fields) { + const columnName = this.getColumnName(field.slug); + const columnType = COLUMN_TYPE_TO_DATA_TYPE[FIELD_TYPE_TO_COLUMN[field.type]]; + table = table.addColumn(columnName, columnType, (column) => { + if (!field.required) return column; + + const defaultValue = + field.defaultValue !== undefined + ? this.formatDefaultValue(field.defaultValue, field.type) + : this.getEmptyDefault(field.type); + return column.notNull().defaultTo(sql.raw(defaultValue)); + }); + } + + await table .addUniqueConstraint(`${tableName}_slug_locale_unique`, ["slug", "locale"]) .execute(); diff --git a/packages/core/src/seed/apply.ts b/packages/core/src/seed/apply.ts index 091c7e2500..266b8e5a24 100644 --- a/packages/core/src/seed/apply.ts +++ b/packages/core/src/seed/apply.ts @@ -224,36 +224,35 @@ export async function applySeed( continue; } - // Create collection - await registry.createCollection({ - slug: collection.slug, - label: collection.label, - labelSingular: collection.labelSingular, - description: collection.description, - icon: collection.icon, - supports: collection.supports || [], - source: "seed", - urlPattern: collection.urlPattern, - commentsEnabled: collection.commentsEnabled, - }); + const fields = collection.fields.map((field) => ({ + slug: field.slug, + label: field.label, + type: field.type, + required: field.required || false, + unique: field.unique || false, + searchable: field.searchable || false, + defaultValue: field.defaultValue, + validation: field.validation, + widget: field.widget, + options: field.options, + })); + + // Create a fresh seed schema in bulk to stay within D1's query budget. + await registry.createSeedCollection( + { + slug: collection.slug, + label: collection.label, + labelSingular: collection.labelSingular, + description: collection.description, + icon: collection.icon, + supports: collection.supports || [], + urlPattern: collection.urlPattern, + commentsEnabled: collection.commentsEnabled, + }, + fields, + ); result.collections.created++; - - // Create fields - for (const field of collection.fields) { - await registry.createField(collection.slug, { - slug: field.slug, - label: field.label, - type: field.type, - required: field.required || false, - unique: field.unique || false, - searchable: field.searchable || false, - defaultValue: field.defaultValue, - validation: field.validation, - widget: field.widget, - options: field.options, - }); - result.fields.created++; - } + result.fields.created += fields.length; } } diff --git a/packages/core/tests/unit/seed/apply.test.ts b/packages/core/tests/unit/seed/apply.test.ts index 72c7d79599..6b82987143 100644 --- a/packages/core/tests/unit/seed/apply.test.ts +++ b/packages/core/tests/unit/seed/apply.test.ts @@ -1,4 +1,13 @@ -import type { Kysely } from "kysely"; +import type { + Kysely, + KyselyPlugin, + PluginTransformQueryArgs, + PluginTransformResultArgs, + QueryResult, + RootOperationNode, + UnknownRow, +} from "kysely"; +import { sql } from "kysely"; import { describe, it, expect, beforeEach, afterEach } from "vitest"; import { BylineRepository } from "../../../src/database/repositories/byline.js"; @@ -11,6 +20,19 @@ import { applySeed } from "../../../src/seed/apply.js"; import type { SeedFile } from "../../../src/seed/types.js"; import { setupTestDatabase, teardownTestDatabase } from "../../utils/test-db.js"; +class QueryCountingPlugin implements KyselyPlugin { + count = 0; + + transformQuery(args: PluginTransformQueryArgs): RootOperationNode { + this.count += 1; + return args.node; + } + + transformResult(args: PluginTransformResultArgs): Promise> { + return Promise.resolve(args.result); + } +} + describe("applySeed", () => { let db: Kysely; @@ -65,6 +87,35 @@ describe("applySeed", () => { }); describe("collections", () => { + it("creates wide collection schemas within the D1 query budget", async () => { + const counter = new QueryCountingPlugin(); + const fields = Array.from({ length: 74 }, (_, index) => ({ + slug: `field_${index}`, + label: `Field ${index}`, + type: "string" as const, + })); + const seed: SeedFile = { + version: "1", + collections: [{ slug: "site_info", label: "Site Info", fields }], + }; + + const result = await applySeed(db.withPlugin(counter), seed); + + expect(result.collections.created).toBe(1); + expect(result.fields.created).toBe(74); + expect(counter.count).toBeLessThan(50); + + const collection = await new SchemaRegistry(db).getCollection("site_info"); + expect(collection).not.toBeNull(); + const storedFields = await new SchemaRegistry(db).listFields(collection!.id); + expect(storedFields).toHaveLength(74); + + const tableInfo = await sql<{ + name: string; + }>`PRAGMA table_info(${sql.ref("ec_site_info")})`.execute(db); + expect(tableInfo.rows.map((column) => column.name)).toContain("field_73"); + }); + it("should create collections and fields", async () => { const seed: SeedFile = { version: "1", @@ -74,7 +125,13 @@ describe("applySeed", () => { label: "Posts", labelSingular: "Post", fields: [ - { slug: "title", label: "Title", type: "string", required: true }, + { + slug: "title", + label: "Title", + type: "string", + required: true, + defaultValue: "Untitled", + }, { slug: "content", label: "Content", type: "portableText" }, ], }, @@ -91,6 +148,19 @@ describe("applySeed", () => { const collection = await registry.getCollection("posts"); expect(collection).not.toBeNull(); expect(collection?.label).toBe("Posts"); + + await sql` + INSERT INTO ${sql.ref("ec_posts")} (${sql.ref("id")}) + VALUES (${"post-1"}) + `.execute(db); + const row = await sql<{ + title: string; + }>` + SELECT ${sql.ref("title")} AS title + FROM ${sql.ref("ec_posts")} + WHERE ${sql.ref("id")} = ${"post-1"} + `.execute(db); + expect(row.rows[0]?.title).toBe("Untitled"); }); it("should skip existing collections", async () => { From 3c5d9d15dca0daadf65c3c8ee20d401175990491 Mon Sep 17 00:00:00 2001 From: Yannick Date: Tue, 21 Jul 2026 07:20:27 +0200 Subject: [PATCH 15/33] fix(core): include success field in API responses (#2098) * fix(core): include success field in API responses The REST API reference documents a discriminated response envelope (`{ success: true, data }` on success, `{ success: false, error }` on error), but apiSuccess/apiError and the generated OpenAPI schema both omitted the `success` field, so clients could not rely on the documented discriminant. Add it to the runtime helpers and the OpenAPI success/error envelopes so responses match the reference. The existing data and error fields are unchanged, keeping this backward compatible. Co-Authored-By: Claude Opus 4.8 * fix(core): route hand-rolled API responses through the shared helpers Adding the success discriminant to the response envelope meant several hand-rolled JSON responses no longer matched the documented shape: request validation, the auth-middleware CSRF/scope/bearer rejections, and the auth-mode, manifest, plugin-updates, and byline-translations routes still emitted bare { data } / { error }. Route them through apiError/apiSuccess so every response carries the success discriminant and consistent cache headers, per the shared-utility convention. No auth logic changes -- response shape only. Co-Authored-By: Claude Opus 4.8 * fix(core): include success envelope on MCP/OAuth bearer 401s The MCP unauthorized and invalid-bearer-token responses carry a WWW-Authenticate header for OAuth discovery, so they could not simply be swapped for apiError without losing it. Build the response via apiError to get the { success: false, error } envelope, then set the WWW-Authenticate header on it, preserving the OAuth discovery handshake. Standards-based OAuth token/registration and well-known responses are intentionally left untouched -- they follow their own RFC formats, not the EmDash envelope. Co-Authored-By: Claude Opus 4.8 * docs(core,admin): update envelope references to the success shape The generated OpenAPI spec's info.description still told readers responses were wrapped in a { data } envelope, contradicting the { success, data } schema it now declares. A sweep found the same stale shape in JSDoc for parseApiResponse/getErrorMessage/throwResponseError, several client comments, and client test fixtures. Update them all, and make the client fixtures emit the real envelope on both branches ({ success: true, data } on 2xx, { success: false, error } on 4xx/5xx). The code they annotate already reads .data / .error and is unaffected. Co-Authored-By: Claude Opus 4.8 * test(core): assert the success envelope in media-usage error responses Rebasing onto main picked up the new media usage read APIs, whose tests assert the exact error body. Those assertions predate the success discriminant, so add it and widen the ErrorBody fixture type to match what apiError now sends. Co-Authored-By: Claude Opus 4.8 --------- Co-authored-by: Claude Opus 4.8 --- .changeset/api-response-success-field.md | 5 ++ packages/admin/src/lib/api/client.ts | 8 +- packages/admin/src/lib/api/import.ts | 2 +- packages/core/src/api/error.ts | 10 +-- packages/core/src/api/openapi/document.ts | 2 +- packages/core/src/api/parse.ts | 16 +--- packages/core/src/api/schemas/common.ts | 8 +- packages/core/src/astro/middleware/auth.ts | 87 ++++--------------- .../api/admin/bylines/[id]/translations.ts | 7 +- .../astro/routes/api/admin/plugins/updates.ts | 6 +- .../core/src/astro/routes/api/auth/mode.ts | 20 ++--- .../core/src/astro/routes/api/manifest.ts | 11 +-- packages/core/src/auth/scopes.ts | 12 +-- packages/core/src/client/transport.ts | 2 +- packages/core/src/plugin-utils.ts | 14 +-- packages/core/src/visual-editing/toolbar.ts | 2 +- .../client/client-lifecycle.test.ts | 13 ++- .../tests/integration/openapi/openapi.test.ts | 40 ++++++++- .../core/tests/unit/api/cache-headers.test.ts | 7 +- packages/core/tests/unit/api/csrf.test.ts | 1 + .../unit/api/media-usage-summary.test.ts | 3 + .../tests/unit/api/parse-envelope.test.ts | 46 ++++++++++ .../tests/unit/api/response-envelope.test.ts | 55 ++++++++++++ .../unit/auth/mcp-discovery-post.test.ts | 4 + .../unit/auth/passkey-verify-route.test.ts | 1 + .../core/tests/unit/client/client.test.ts | 14 ++- .../core/tests/unit/client/transport.test.ts | 5 +- .../tests/unit/middleware/oauth-csrf.test.ts | 1 + .../tests/unit/visual-editing/toolbar.test.ts | 4 +- 29 files changed, 246 insertions(+), 160 deletions(-) create mode 100644 .changeset/api-response-success-field.md create mode 100644 packages/core/tests/unit/api/parse-envelope.test.ts create mode 100644 packages/core/tests/unit/api/response-envelope.test.ts diff --git a/.changeset/api-response-success-field.md b/.changeset/api-response-success-field.md new file mode 100644 index 0000000000..cc2471c321 --- /dev/null +++ b/.changeset/api-response-success-field.md @@ -0,0 +1,5 @@ +--- +"emdash": patch +--- + +Fixes API responses to include the `success` field documented in the REST API reference: successful responses are now `{ success: true, data }` and error responses `{ success: false, error }`. The existing `data` and `error` fields are unchanged, so existing clients keep working. diff --git a/packages/admin/src/lib/api/client.ts b/packages/admin/src/lib/api/client.ts index 14c90c46d4..9b0ff18ef2 100644 --- a/packages/admin/src/lib/api/client.ts +++ b/packages/admin/src/lib/api/client.ts @@ -49,9 +49,9 @@ function formatValidationIssues(error: Record): string | undefi /** * Throw an error with the message from the API response body if available, * falling back to a generic message. All API error responses use the shape - * `{ error: { code, message, details? } }`. For validation errors, the - * field-level messages in `error.details.issues` are surfaced instead of - * the generic "Invalid request data" top-level message. + * `{ success: false, error: { code, message, details? } }`. For validation + * errors, the field-level messages in `error.details.issues` are surfaced + * instead of the generic "Invalid request data" top-level message. */ export async function throwResponseError(res: Response, fallback: string): Promise { const body: unknown = await res.json().catch(() => ({})); @@ -216,7 +216,7 @@ export interface AdminManifest { } /** - * Parse an API response with the { data: T } envelope. + * Parse an API response with the { success, data: T } envelope. * * Handles error responses via throwResponseError, then unwraps the data envelope. * Replaces both bare `response.json()` and field-unwrap patterns. diff --git a/packages/admin/src/lib/api/import.ts b/packages/admin/src/lib/api/import.ts index 74443ca05f..485526afcf 100644 --- a/packages/admin/src/lib/api/import.ts +++ b/packages/admin/src/lib/api/import.ts @@ -422,7 +422,7 @@ export async function importWxrMedia( if (!response.ok) await throwResponseError(response, i18n._(msg`Failed to import media`)); // If no progress callback, just parse as JSON (non-streaming mode) - // Note: streaming NDJSON responses are excluded from the { data } envelope + // Note: streaming NDJSON responses are excluded from the { success, data } envelope if (!onProgress) { return parseApiResponse(response, "Failed to import media"); } diff --git a/packages/core/src/api/error.ts b/packages/core/src/api/error.ts index 98076a40a5..cac556e93b 100644 --- a/packages/core/src/api/error.ts +++ b/packages/core/src/api/error.ts @@ -25,8 +25,8 @@ const API_CACHE_HEADERS: HeadersInit = { /** * Create a standardized error response. * - * Always returns `{ error: { code, message } }` with correct Content-Type. - * Use this for all error responses in API routes. + * Always returns `{ success: false, error: { code, message } }` with correct + * Content-Type. Use this for all error responses in API routes. */ export function apiError( code: string, @@ -39,17 +39,17 @@ export function apiError( message, }; if (details !== undefined) error.details = details; - return Response.json({ error }, { status, headers: API_CACHE_HEADERS }); + return Response.json({ success: false, error }, { status, headers: API_CACHE_HEADERS }); } /** * Create a standardized success response. * - * Always returns `{ data: T }` with correct status code. + * Always returns `{ success: true, data: T }` with correct status code. * Use this for all success responses in API routes. */ export function apiSuccess(data: T, status = 200): Response { - return Response.json({ data }, { status, headers: API_CACHE_HEADERS }); + return Response.json({ success: true, data }, { status, headers: API_CACHE_HEADERS }); } /** diff --git a/packages/core/src/api/openapi/document.ts b/packages/core/src/api/openapi/document.ts index fc59fbd712..4dceded223 100644 --- a/packages/core/src/api/openapi/document.ts +++ b/packages/core/src/api/openapi/document.ts @@ -2389,7 +2389,7 @@ export function generateOpenApiDocument( title: "EmDash CMS API", version: "0.1.0", description: - "REST API for the EmDash CMS. All endpoints require authentication and return responses wrapped in a `{ data }` envelope.", + "REST API for the EmDash CMS. All endpoints require authentication and return responses wrapped in a `{ success, data }` envelope.", }, servers: [ { diff --git a/packages/core/src/api/parse.ts b/packages/core/src/api/parse.ts index c1abf1078f..26781e777e 100644 --- a/packages/core/src/api/parse.ts +++ b/packages/core/src/api/parse.ts @@ -113,21 +113,7 @@ function validate(schema: T, data: unknown): ParseResult(dataSchema: T) { - return z.object({ data: dataSchema }); + return z.object({ + success: z.literal(true).meta({ description: "Discriminant: always true for success" }), + data: dataSchema, + }); } /** Standard delete response */ diff --git a/packages/core/src/astro/middleware/auth.ts b/packages/core/src/astro/middleware/auth.ts index 76499d708c..d977c997f5 100644 --- a/packages/core/src/astro/middleware/auth.ts +++ b/packages/core/src/astro/middleware/auth.ts @@ -60,13 +60,7 @@ function isUnsafeMethod(method: string): boolean { } function csrfRejectedResponse(): Response { - return new Response( - JSON.stringify({ error: { code: "CSRF_REJECTED", message: "Missing required header" } }), - { - status: 403, - headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS }, - }, - ); + return apiError("CSRF_REJECTED", "Missing required header", 403); } function mcpUnauthorizedResponse( @@ -74,16 +68,13 @@ function mcpUnauthorizedResponse( config?: Parameters[1], ): Response { const origin = getPublicOrigin(url, config); - return Response.json( - { error: { code: "NOT_AUTHENTICATED", message: "Not authenticated" } }, - { - status: 401, - headers: { - "WWW-Authenticate": `Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`, - ...MW_CACHE_HEADERS, - }, - }, + const response = apiError("NOT_AUTHENTICATED", "Not authenticated", 401); + // Preserve the OAuth discovery header so MCP clients can find the auth server. + response.headers.set( + "WWW-Authenticate", + `Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`, ); + return response; } /** @@ -224,15 +215,7 @@ export const onRequest = defineMiddleware(async (context, next) => { if (method !== "GET" && method !== "HEAD" && method !== "OPTIONS") { const csrfHeader = context.request.headers.get("X-EmDash-Request"); if (csrfHeader !== "1") { - return new Response( - JSON.stringify({ - error: { code: "CSRF_REJECTED", message: "Missing required header" }, - }), - { - status: 403, - headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS }, - }, - ); + return apiError("CSRF_REJECTED", "Missing required header", 403); } } return next(); @@ -250,20 +233,16 @@ export const onRequest = defineMiddleware(async (context, next) => { const bearerResult = await handleBearerAuth(context); if (bearerResult === "invalid") { - const headers: Record = { - "Content-Type": "application/json", - ...MW_CACHE_HEADERS, - }; + const response = apiError("INVALID_TOKEN", "Invalid or expired token", 401); // Add WWW-Authenticate header on MCP endpoint 401s to trigger OAuth discovery if (url.pathname === "/_emdash/api/mcp") { const origin = getPublicOrigin(url, context.locals.emdash?.config); - headers["WWW-Authenticate"] = - `Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`; + response.headers.set( + "WWW-Authenticate", + `Bearer resource_metadata="${origin}/.well-known/oauth-protected-resource"`, + ); } - return new Response( - JSON.stringify({ error: { code: "INVALID_TOKEN", message: "Invalid or expired token" } }), - { status: 401, headers }, - ); + return response; } const isTokenAuth = bearerResult === "authenticated"; @@ -418,13 +397,7 @@ async function handlePluginRouteAuth( if (bearerResult === "invalid") { // A token was presented but is invalid/expired — return 401 so the // caller knows their token is bad (don't silently downgrade to no-auth). - return new Response( - JSON.stringify({ error: { code: "INVALID_TOKEN", message: "Invalid or expired token" } }), - { - status: 401, - headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS }, - }, - ); + return apiError("INVALID_TOKEN", "Invalid or expired token", 401); } // "none" — no token presented, try external/session auth below. } catch (error) { @@ -701,10 +674,7 @@ async function handlePasskeyAuth( if (!sessionUser?.id) { if (isApiRoute) { - return Response.json( - { error: { code: "NOT_AUTHENTICATED", message: "Not authenticated" } }, - { status: 401, headers: MW_CACHE_HEADERS }, - ); + return apiError("NOT_AUTHENTICATED", "Not authenticated", 401); } const loginUrl = new URL("/_emdash/admin/login", getPublicOrigin(url, emdash?.config)); loginUrl.searchParams.set("redirect", url.pathname); @@ -719,10 +689,7 @@ async function handlePasskeyAuth( // User no longer exists - clear session session?.destroy(); if (isApiRoute) { - return Response.json( - { error: { code: "NOT_FOUND", message: "User not found" } }, - { status: 401, headers: MW_CACHE_HEADERS }, - ); + return apiError("NOT_FOUND", "User not found", 401); } const loginUrl = new URL("/_emdash/admin/login", getPublicOrigin(url, emdash?.config)); return context.redirect(loginUrl.toString()); @@ -834,28 +801,12 @@ function enforceTokenScope( if (ruleMethod === "*" || (ruleMethod === "WRITE" && isWrite) || ruleMethod === method) { if (hasScope(tokenScopes, scope)) return null; - return new Response( - JSON.stringify({ - error: { - code: "INSUFFICIENT_SCOPE", - message: `Token lacks required scope: ${scope}`, - }, - }), - { status: 403, headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS } }, - ); + return apiError("INSUFFICIENT_SCOPE", `Token lacks required scope: ${scope}`, 403); } } // No rule matched — default to admin scope (fail-closed) if (hasScope(tokenScopes, "admin")) return null; - return new Response( - JSON.stringify({ - error: { - code: "INSUFFICIENT_SCOPE", - message: "Token lacks required scope: admin", - }, - }), - { status: 403, headers: { "Content-Type": "application/json", ...MW_CACHE_HEADERS } }, - ); + return apiError("INSUFFICIENT_SCOPE", "Token lacks required scope: admin", 403); } diff --git a/packages/core/src/astro/routes/api/admin/bylines/[id]/translations.ts b/packages/core/src/astro/routes/api/admin/bylines/[id]/translations.ts index 1d1d1ec6bf..0b903c397b 100644 --- a/packages/core/src/astro/routes/api/admin/bylines/[id]/translations.ts +++ b/packages/core/src/astro/routes/api/admin/bylines/[id]/translations.ts @@ -15,7 +15,7 @@ import type { APIRoute } from "astro"; import { requirePerm } from "#api/authorize.js"; -import { handleError, requireDb, unwrapResult } from "#api/error.js"; +import { apiError, handleError, requireDb, unwrapResult } from "#api/error.js"; import { handleBylineCreate, handleBylineTranslations } from "#api/handlers/bylines.js"; import { isParseError, parseBody } from "#api/parse.js"; import { bylineTranslationCreateBody } from "#api/schemas.js"; @@ -65,10 +65,7 @@ export const POST: APIRoute = async ({ params, request, locals }) => { const repo = new BylineRepository(emdash.db); const source = await repo.findById(id); if (!source) { - return new Response( - JSON.stringify({ error: { code: "NOT_FOUND", message: "Byline not found" } }), - { status: 404, headers: { "Content-Type": "application/json" } }, - ); + return apiError("NOT_FOUND", "Byline not found", 404); } const result = await handleBylineCreate(emdash.db, { diff --git a/packages/core/src/astro/routes/api/admin/plugins/updates.ts b/packages/core/src/astro/routes/api/admin/plugins/updates.ts index e086f591ef..9f809605ec 100644 --- a/packages/core/src/astro/routes/api/admin/plugins/updates.ts +++ b/packages/core/src/astro/routes/api/admin/plugins/updates.ts @@ -15,7 +15,7 @@ import type { APIRoute } from "astro"; import { requirePerm } from "#api/authorize.js"; -import { apiError } from "#api/error.js"; +import { apiError, apiSuccess } from "#api/error.js"; import { handleMarketplaceUpdateCheck, handleRegistryUpdateCheck } from "#api/index.js"; export const prerender = false; @@ -59,7 +59,5 @@ export const GET: APIRoute = async ({ locals }) => { if (marketplace?.success) items.push(...marketplace.data.items); if (registry?.success) items.push(...registry.data.items); - // Match the rest of the admin API envelope (`{ data: ... }`) so the - // admin client's `parseApiResponse` unwraps `body.data`. - return Response.json({ data: { items } }); + return apiSuccess({ items }); }; diff --git a/packages/core/src/astro/routes/api/auth/mode.ts b/packages/core/src/astro/routes/api/auth/mode.ts index 97fb735aca..cd0a72708a 100644 --- a/packages/core/src/astro/routes/api/auth/mode.ts +++ b/packages/core/src/astro/routes/api/auth/mode.ts @@ -11,6 +11,7 @@ import type { APIRoute } from "astro"; +import { apiSuccess } from "#api/error.js"; import { getAuthMode } from "#auth/mode.js"; export const prerender = false; @@ -40,18 +41,9 @@ export const GET: APIRoute = async ({ locals }) => { label: p.label, })); - return Response.json( - { - data: { - authMode: authMode.type === "external" ? authMode.providerType : "passkey", - signupEnabled, - providers, - }, - }, - { - headers: { - "Cache-Control": "private, no-store", - }, - }, - ); + return apiSuccess({ + authMode: authMode.type === "external" ? authMode.providerType : "passkey", + signupEnabled, + providers, + }); }; diff --git a/packages/core/src/astro/routes/api/manifest.ts b/packages/core/src/astro/routes/api/manifest.ts index 1b25a98873..11e7303fdb 100644 --- a/packages/core/src/astro/routes/api/manifest.ts +++ b/packages/core/src/astro/routes/api/manifest.ts @@ -9,7 +9,7 @@ import type { APIRoute } from "astro"; -import { handleError } from "#api/error.js"; +import { apiSuccess, handleError } from "#api/error.js"; import { getAuthMode } from "#auth/mode.js"; import { OptionsRepository } from "#db/repositories/options.js"; @@ -94,14 +94,7 @@ export const GET: APIRoute = async ({ locals }) => { admin: adminBranding, }; - return Response.json( - { data: manifest }, - { - headers: { - "Cache-Control": "private, no-store", - }, - }, - ); + return apiSuccess(manifest); } catch (error) { return handleError(error, "Failed to build manifest", "MANIFEST_BUILD_ERROR"); } diff --git a/packages/core/src/auth/scopes.ts b/packages/core/src/auth/scopes.ts index 415e802ece..0ef2ab66be 100644 --- a/packages/core/src/auth/scopes.ts +++ b/packages/core/src/auth/scopes.ts @@ -6,6 +6,8 @@ * Token-authenticated requests must have the required scope (or "admin"). */ +import { apiError } from "#api/error.js"; + import { hasScope } from "./api-tokens.js"; /** @@ -21,13 +23,5 @@ export function requireScope(locals: { tokenScopes?: string[] }, scope: string): if (hasScope(locals.tokenScopes, scope)) return null; - return new Response( - JSON.stringify({ - error: { - code: "INSUFFICIENT_SCOPE", - message: `Token lacks required scope: ${scope}`, - }, - }), - { status: 403, headers: { "Content-Type": "application/json" } }, - ); + return apiError("INSUFFICIENT_SCOPE", `Token lacks required scope: ${scope}`, 403); } diff --git a/packages/core/src/client/transport.ts b/packages/core/src/client/transport.ts index 5083996417..fb70b1eeff 100644 --- a/packages/core/src/client/transport.ts +++ b/packages/core/src/client/transport.ts @@ -163,7 +163,7 @@ export function refreshInterceptor(options: { const json = (await res.json()) as Record; - // The token endpoint wraps the response in { data: ... } via apiSuccess. + // The token endpoint wraps the response in { success, data: ... } via apiSuccess. // Handle both wrapped and bare shapes for robustness. const tokenData: TokenFields = json.data && typeof json.data === "object" && "access_token" in json.data diff --git a/packages/core/src/plugin-utils.ts b/packages/core/src/plugin-utils.ts index 3fa03c8ca7..e8278fd467 100644 --- a/packages/core/src/plugin-utils.ts +++ b/packages/core/src/plugin-utils.ts @@ -44,13 +44,14 @@ export function getPublicPluginApiRouteHandler( } /** - * Parse an API response, unwrapping the `{ data: T }` envelope. + * Parse an API response, unwrapping the `{ success, data: T }` envelope. * - * All plugin API routes return success responses wrapped in `{ data: ... }` - * by `apiSuccess()`. This helper unwraps that envelope and handles errors. + * All plugin API routes return success responses wrapped in + * `{ success: true, data: ... }` by `apiSuccess()`. This helper unwraps that + * envelope and handles errors. * * On error responses (non-2xx), throws an Error with the server's message - * (from `{ error: { message } }`) or the fallback message. + * (from `{ success: false, error: { message } }`) or the fallback message. * * @example * ```ts @@ -72,8 +73,9 @@ export async function parseApiResponse( /** * Extract the error message from a failed API response. * - * Error responses use the shape `{ error: { code, message } }`. This helper - * parses that body and returns the message, falling back to the provided default. + * Error responses use the shape `{ success: false, error: { code, message } }`. + * This helper parses that body and returns the message, falling back to the + * provided default. * Swallows JSON parse failures gracefully. * * @example diff --git a/packages/core/src/visual-editing/toolbar.ts b/packages/core/src/visual-editing/toolbar.ts index 10fc4a1cac..9d877425c4 100644 --- a/packages/core/src/visual-editing/toolbar.ts +++ b/packages/core/src/visual-editing/toolbar.ts @@ -730,7 +730,7 @@ export function renderToolbar(config: ToolbarConfig): string { manifestPromise = ecFetch("/_emdash/api/manifest", { credentials: "same-origin" }) .then(function(r) { return r.json(); }) .then(function(m) { - // The manifest endpoint wraps the payload in a { data } envelope (ApiResponse shape). + // The manifest endpoint wraps the payload in a { success, data } envelope (ApiResponse shape). // Unwrap it so getFieldKind can read manifest.collections directly. manifestCache = m && m.data ? m.data : m; return manifestCache; diff --git a/packages/core/tests/integration/client/client-lifecycle.test.ts b/packages/core/tests/integration/client/client-lifecycle.test.ts index f538840582..80c425449a 100644 --- a/packages/core/tests/integration/client/client-lifecycle.test.ts +++ b/packages/core/tests/integration/client/client-lifecycle.test.ts @@ -40,10 +40,17 @@ function encodeRev(item: StoredItem): string { return btoa(`${item.version}:${item.updatedAt}`); } -/** Wraps body in `{ data: body }` to match the standard API response envelope. */ +/** + * Mirrors the API response envelope: `{ success: true, data }` on 2xx and + * `{ success: false, error }` on 4xx/5xx. + */ function jsonRes(body: unknown, status = 200): Response { - // Error responses (4xx/5xx) are NOT wrapped in { data } - const payload = status >= 400 ? body : { data: body }; + // Error callers already pass `{ error: ... }`; add the discriminant so the + // fixture matches what `apiError()` actually sends. + const payload = + status >= 400 + ? { success: false, ...(typeof body === "object" && body !== null ? body : {}) } + : { success: true, data: body }; return new Response(JSON.stringify(payload), { status, headers: { "Content-Type": "application/json" }, diff --git a/packages/core/tests/integration/openapi/openapi.test.ts b/packages/core/tests/integration/openapi/openapi.test.ts index f7cdf2f59b..517c37f41e 100644 --- a/packages/core/tests/integration/openapi/openapi.test.ts +++ b/packages/core/tests/integration/openapi/openapi.test.ts @@ -60,7 +60,7 @@ describe("OpenAPI spec validation", () => { } }); - it("wraps all success responses in the { data } envelope", () => { + it("wraps all success responses in the { success, data } envelope", () => { const doc = generateOpenApiDocument(); const paths = doc.paths ?? {}; @@ -85,8 +85,9 @@ describe("OpenAPI spec validation", () => { `${method.toUpperCase()} ${path} ${statusCode} missing schema`, ).toBeDefined(); - // The envelope must have a "data" property (either directly or via $ref that wraps it) - // Check for direct properties or allOf/oneOf patterns + // The envelope must have "success" and "data" properties (either + // directly or via $ref that wraps them). Check for direct + // properties or allOf/oneOf patterns. const props = (schema as Record)?.properties as | Record | undefined; @@ -95,6 +96,10 @@ describe("OpenAPI spec validation", () => { props, `${method.toUpperCase()} ${path} ${statusCode} envelope missing "data" property`, ).toHaveProperty("data"); + expect( + props, + `${method.toUpperCase()} ${path} ${statusCode} envelope missing "success" property`, + ).toHaveProperty("success"); } } } @@ -186,8 +191,37 @@ describe("OpenAPI spec validation", () => { schema, `${method.toUpperCase()} ${path} ${statusCode} error missing schema`, ).toBeDefined(); + + // Error responses either $ref the shared ApiError component or + // inline its shape; both must carry the `success` discriminant. + const props = (schema as Record)?.properties as + | Record + | undefined; + const ref = (schema as Record)?.$ref as string | undefined; + const usesApiError = typeof ref === "string" && ref.endsWith("/ApiError"); + if (props) { + expect( + props, + `${method.toUpperCase()} ${path} ${statusCode} error envelope missing "success"`, + ).toHaveProperty("success"); + } else { + expect( + usesApiError, + `${method.toUpperCase()} ${path} ${statusCode} error is neither a $ref to ApiError nor inline`, + ).toBe(true); + } } } } }); + + it("declares the success discriminant on the ApiError component", () => { + const doc = generateOpenApiDocument(); + const apiError = (doc.components?.schemas ?? {})["ApiError"] as + | { properties?: Record } + | undefined; + expect(apiError, "ApiError component missing").toBeDefined(); + expect(apiError?.properties).toHaveProperty("success"); + expect(apiError?.properties).toHaveProperty("error"); + }); }); diff --git a/packages/core/tests/unit/api/cache-headers.test.ts b/packages/core/tests/unit/api/cache-headers.test.ts index eedfc0c666..d2571bb8cd 100644 --- a/packages/core/tests/unit/api/cache-headers.test.ts +++ b/packages/core/tests/unit/api/cache-headers.test.ts @@ -20,7 +20,7 @@ describe("API cache headers", () => { const response = apiSuccess({ id: "123" }, 201); expect(response.status).toBe(201); const body = await response.json(); - expect(body).toEqual({ data: { id: "123" } }); + expect(body).toEqual({ success: true, data: { id: "123" } }); }); }); @@ -39,7 +39,10 @@ describe("API cache headers", () => { const response = apiError("FORBIDDEN", "Access denied", 403); expect(response.status).toBe(403); const body = await response.json(); - expect(body).toEqual({ error: { code: "FORBIDDEN", message: "Access denied" } }); + expect(body).toEqual({ + success: false, + error: { code: "FORBIDDEN", message: "Access denied" }, + }); }); }); diff --git a/packages/core/tests/unit/api/csrf.test.ts b/packages/core/tests/unit/api/csrf.test.ts index 2573f81fe6..13721757ae 100644 --- a/packages/core/tests/unit/api/csrf.test.ts +++ b/packages/core/tests/unit/api/csrf.test.ts @@ -64,6 +64,7 @@ describe("checkPublicCsrf", () => { expect(response!.status).toBe(403); const body = await response!.json(); expect(body).toEqual({ + success: false, error: { code: "CSRF_REJECTED", message: "Cross-origin request blocked" }, }); }); diff --git a/packages/core/tests/unit/api/media-usage-summary.test.ts b/packages/core/tests/unit/api/media-usage-summary.test.ts index 6d5f2d65b1..6ce84ecdc2 100644 --- a/packages/core/tests/unit/api/media-usage-summary.test.ts +++ b/packages/core/tests/unit/api/media-usage-summary.test.ts @@ -36,6 +36,7 @@ interface SuccessBody { } interface ErrorBody { + success: false; error: { code: string; message: string }; } @@ -425,6 +426,7 @@ describe("media usage summary handler and routes", () => { expect(response.status).toBe(500); expect((await response.json()) as ErrorBody).toEqual({ + success: false, error: { code: "MEDIA_USAGE_READ_ERROR", message: "Failed to read media usage" }, }); expect(errorSpy).toHaveBeenCalledOnce(); @@ -439,6 +441,7 @@ describe("media usage summary handler and routes", () => { expect(response.status).toBe(500); expect((await response.json()) as ErrorBody).toEqual({ + success: false, error: { code: "MEDIA_USAGE_READ_ERROR", message: "Failed to read media usage" }, }); // Kysely's query logger records the successful media lookup but not the failed statement. diff --git a/packages/core/tests/unit/api/parse-envelope.test.ts b/packages/core/tests/unit/api/parse-envelope.test.ts new file mode 100644 index 0000000000..500bb69291 --- /dev/null +++ b/packages/core/tests/unit/api/parse-envelope.test.ts @@ -0,0 +1,46 @@ +import { describe, it, expect } from "vitest"; +import { z } from "zod"; + +import { isParseError, parseBody, parseQuery } from "../../../src/api/parse.js"; + +/** + * `parseBody`/`parseQuery` are the shared request validators used by almost + * every route. Their validation-failure response must carry the documented + * `{ success: false, error }` envelope so it matches the OpenAPI `ApiError` + * schema attached to those routes. + */ +describe("request parser validation envelope", () => { + const schema = z.object({ limit: z.coerce.number().min(1) }); + + it("parseQuery returns a { success: false, error } envelope on invalid input", async () => { + const result = parseQuery(new URL("https://example.com/?limit=0"), schema); + expect(isParseError(result)).toBe(true); + if (!isParseError(result)) return; + + expect(result.status).toBe(400); + const body = await result.json(); + expect(body).toMatchObject({ + success: false, + error: { code: "VALIDATION_ERROR", message: "Invalid request data" }, + }); + expect(body.error.details).toHaveProperty("issues"); + }); + + it("parseBody returns a { success: false, error } envelope on invalid input", async () => { + const request = new Request("https://example.com", { + method: "POST", + body: JSON.stringify({ limit: -5 }), + headers: { "Content-Type": "application/json" }, + }); + const result = await parseBody(request, schema); + expect(isParseError(result)).toBe(true); + if (!isParseError(result)) return; + + expect(result.status).toBe(400); + const body = await result.json(); + expect(body).toMatchObject({ + success: false, + error: { code: "VALIDATION_ERROR" }, + }); + }); +}); diff --git a/packages/core/tests/unit/api/response-envelope.test.ts b/packages/core/tests/unit/api/response-envelope.test.ts new file mode 100644 index 0000000000..508a6cc041 --- /dev/null +++ b/packages/core/tests/unit/api/response-envelope.test.ts @@ -0,0 +1,55 @@ +import { describe, it, expect } from "vitest"; + +import { apiError, apiSuccess, unwrapResult } from "../../../src/api/error.js"; + +/** + * The REST API reference documents a discriminated response envelope: + * successful responses are `{ success: true, data }` and error responses are + * `{ success: false, error }`. These tests pin the wire shape so it stays in + * sync with the documented contract. + */ +describe("API response envelope", () => { + describe("apiSuccess", () => { + it("wraps data in { success: true, data }", async () => { + const body = await apiSuccess({ id: "123" }).json(); + expect(body).toEqual({ success: true, data: { id: "123" } }); + }); + + it("keeps the discriminant on non-200 success responses", async () => { + const response = apiSuccess({ created: true }, 201); + expect(response.status).toBe(201); + const body = await response.json(); + expect(body).toEqual({ success: true, data: { created: true } }); + }); + }); + + describe("apiError", () => { + it("wraps the error in { success: false, error }", async () => { + const body = await apiError("NOT_FOUND", "Missing", 404).json(); + expect(body).toEqual({ success: false, error: { code: "NOT_FOUND", message: "Missing" } }); + }); + + it("includes details when provided", async () => { + const body = await apiError("VALIDATION_ERROR", "Bad input", 400, { field: "title" }).json(); + expect(body).toEqual({ + success: false, + error: { code: "VALIDATION_ERROR", message: "Bad input", details: { field: "title" } }, + }); + }); + }); + + describe("unwrapResult", () => { + it("emits the success discriminant for ok results", async () => { + const body = await unwrapResult({ success: true, data: { ok: true } }).json(); + expect(body).toEqual({ success: true, data: { ok: true } }); + }); + + it("emits the failure discriminant for error results", async () => { + const body = await unwrapResult({ + success: false, + error: { code: "NOT_FOUND", message: "Missing" }, + }).json(); + expect(body).toEqual({ success: false, error: { code: "NOT_FOUND", message: "Missing" } }); + }); + }); +}); diff --git a/packages/core/tests/unit/auth/mcp-discovery-post.test.ts b/packages/core/tests/unit/auth/mcp-discovery-post.test.ts index 2e2a655228..83b6c2454d 100644 --- a/packages/core/tests/unit/auth/mcp-discovery-post.test.ts +++ b/packages/core/tests/unit/auth/mcp-discovery-post.test.ts @@ -107,6 +107,7 @@ describe("MCP discovery auth middleware", () => { 'Bearer resource_metadata="https://example.com/.well-known/oauth-protected-resource"', ); await expect(response.json()).resolves.toEqual({ + success: false, error: { code: "NOT_AUTHENTICATED", message: "Not authenticated" }, }); }); @@ -151,6 +152,7 @@ describe("MCP discovery auth middleware", () => { 'Bearer resource_metadata="https://example.com/.well-known/oauth-protected-resource"', ); await expect(response.json()).resolves.toEqual({ + success: false, error: { code: "INVALID_TOKEN", message: "Invalid or expired token" }, }); }); @@ -169,6 +171,7 @@ describe("MCP discovery auth middleware", () => { expect(response.status).toBe(401); expect(session.get).not.toHaveBeenCalled(); await expect(response.json()).resolves.toEqual({ + success: false, error: { code: "NOT_AUTHENTICATED", message: "Not authenticated" }, }); }); @@ -182,6 +185,7 @@ describe("MCP discovery auth middleware", () => { expect(next).not.toHaveBeenCalled(); expect(response.status).toBe(403); await expect(response.json()).resolves.toEqual({ + success: false, error: { code: "CSRF_REJECTED", message: "Missing required header" }, }); }); diff --git a/packages/core/tests/unit/auth/passkey-verify-route.test.ts b/packages/core/tests/unit/auth/passkey-verify-route.test.ts index 4cc8fba48a..246025aaae 100644 --- a/packages/core/tests/unit/auth/passkey-verify-route.test.ts +++ b/packages/core/tests/unit/auth/passkey-verify-route.test.ts @@ -49,6 +49,7 @@ describe("passkey verify route", () => { expect(response.status).toBe(401); await expect(response.json()).resolves.toEqual({ + success: false, error: { code: "UNAUTHORIZED", message: "Authentication failed", diff --git a/packages/core/tests/unit/client/client.test.ts b/packages/core/tests/unit/client/client.test.ts index eb80abe4cc..9e809ab33e 100644 --- a/packages/core/tests/unit/client/client.test.ts +++ b/packages/core/tests/unit/client/client.test.ts @@ -45,10 +45,17 @@ function createMockBackend(routes: MockRoute[]): Interceptor { }; } -/** Wraps body in `{ data: body }` to match the standard API response envelope. */ +/** + * Mirrors the API response envelope: `{ success: true, data }` on 2xx and + * `{ success: false, error }` on 4xx/5xx. + */ function jsonResponse(body: unknown, status: number = 200): Response { - // Error responses (4xx/5xx) are NOT wrapped in { data } - const payload = status >= 400 ? body : { data: body }; + // Error callers already pass `{ error: ... }`; add the discriminant so the + // fixture matches what `apiError()` actually sends. + const payload = + status >= 400 + ? { success: false, ...(typeof body === "object" && body !== null ? body : {}) } + : { success: true, data: body }; return new Response(JSON.stringify(payload), { status, headers: { "Content-Type": "application/json" }, @@ -509,6 +516,7 @@ describe("EmDashClient", () => { const body = await response.json(); expect(body).toEqual({ + success: true, data: expect.objectContaining({ collections: expect.arrayContaining([ expect.objectContaining({ slug: "page" }), diff --git a/packages/core/tests/unit/client/transport.test.ts b/packages/core/tests/unit/client/transport.test.ts index 449cb313da..6cd1b25a96 100644 --- a/packages/core/tests/unit/client/transport.test.ts +++ b/packages/core/tests/unit/client/transport.test.ts @@ -232,7 +232,7 @@ describe("tokenInterceptor", () => { // --------------------------------------------------------------------------- describe("refreshInterceptor", () => { - it("unwraps { data: { access_token } } envelope from token endpoint", async () => { + it("unwraps { success, data: { access_token } } envelope from token endpoint", async () => { let retryAuth: string | null = null; let refreshedToken: string | null = null; let refreshedRefresh: string | null = null; @@ -253,9 +253,10 @@ describe("refreshInterceptor", () => { globalThis.fetch = async (input: string | URL | Request) => { const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url; if (url.includes("/oauth/token/refresh")) { - // Server wraps in { data: ... } via apiSuccess/unwrapResult + // Server wraps in { success, data: ... } via apiSuccess/unwrapResult return new Response( JSON.stringify({ + success: true, data: { access_token: "new_access", refresh_token: "new_refresh", diff --git a/packages/core/tests/unit/middleware/oauth-csrf.test.ts b/packages/core/tests/unit/middleware/oauth-csrf.test.ts index 05db300bde..92b964bdd4 100644 --- a/packages/core/tests/unit/middleware/oauth-csrf.test.ts +++ b/packages/core/tests/unit/middleware/oauth-csrf.test.ts @@ -152,6 +152,7 @@ describe("CSRF exemption for OAuth protocol endpoints", () => { expect(next).not.toHaveBeenCalled(); expect(response.status).toBe(403); await expect(response.json()).resolves.toEqual({ + success: false, error: { code: "CSRF_REJECTED", message: "Cross-origin request blocked" }, }); }); diff --git a/packages/core/tests/unit/visual-editing/toolbar.test.ts b/packages/core/tests/unit/visual-editing/toolbar.test.ts index 31ba9b57ab..aabf623772 100644 --- a/packages/core/tests/unit/visual-editing/toolbar.test.ts +++ b/packages/core/tests/unit/visual-editing/toolbar.test.ts @@ -61,9 +61,9 @@ describe("renderToolbar", () => { expect(html).toContain("/_emdash/api/manifest"); }); - it("unwraps the { data } envelope returned by /_emdash/api/manifest", () => { + it("unwraps the { success, data } envelope returned by /_emdash/api/manifest", () => { // Regression for #103 / #445: the manifest endpoint wraps the payload in - // { data: manifest } (ApiResponse shape), but getFieldKind reads + // { success, data: manifest } (ApiResponse shape), but getFieldKind reads // manifest.collections directly. Without the unwrap, getFieldKind returns // null for every field kind, and every click on an edit annotation opens // the admin in a new tab instead of inline-editing. From 7a98d23765d09fb394867551a03eb009de7bdeb1 Mon Sep 17 00:00:00 2001 From: Matt Kane Date: Tue, 21 Jul 2026 06:24:28 +0100 Subject: [PATCH 16/33] test: add visual regression suite for the admin UI (#2147) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * test: add visual regression suite for the admin UI Adds a Playwright visual-regression suite covering key admin screens in LTR (English) and RTL (Arabic), gated behind EMDASH_VISUAL=1. Adds the CI trio: an untrusted measure job, a trusted report job that comments diffs, and a reaction-gated apply job that commits accepted Linux baselines on a maintainer 👍. Adds inert data-testid hooks to mask drift-prone timestamps and version strings. * fix: address review on visual regression suite - Widen visual.yml path filter to the whole e2e tree + playwright.config so fixture/seed/setup changes that alter screenshots trigger a measure run - Await document.fonts.ready without returning the non-serializable FontFaceSet, which would throw in Playwright - Import the canonical ServerInfo type from the fixtures instead of redeclaring a narrowed copy - Report workflow: on a bootstrap run with no prior baselines, show the proposed candidate baselines instead of an empty "0 screens changed" table - Add an empty changeset (only published-package change is inert testids) * ci: run visual regression on lockfile/manifest changes A Playwright or Chromium version bump alters pixel output, so a pnpm-lock.yaml or package.json change can drift committed baselines without touching any source path in the existing filter. --- .changeset/tame-visual-regression.md | 4 + .github/workflows/visual-apply.yml | 263 +++++++++++++++++ .github/workflows/visual-report.yml | 267 ++++++++++++++++++ .github/workflows/visual.yml | 133 +++++++++ .github/zizmor.yml | 6 + .gitignore | 6 + CONTRIBUTING.md | 12 + e2e/fixtures/index.ts | 2 +- e2e/tests/visual-regression.spec.ts | 146 ++++++++++ packages/admin/src/components/ContentList.tsx | 4 +- .../src/components/ContentSettingsPanel.tsx | 5 +- packages/admin/src/components/Dashboard.tsx | 2 +- packages/admin/src/components/Sidebar.tsx | 5 +- 13 files changed, 850 insertions(+), 5 deletions(-) create mode 100644 .changeset/tame-visual-regression.md create mode 100644 .github/workflows/visual-apply.yml create mode 100644 .github/workflows/visual-report.yml create mode 100644 .github/workflows/visual.yml create mode 100644 e2e/tests/visual-regression.spec.ts diff --git a/.changeset/tame-visual-regression.md b/.changeset/tame-visual-regression.md new file mode 100644 index 0000000000..a7ff2b4d91 --- /dev/null +++ b/.changeset/tame-visual-regression.md @@ -0,0 +1,4 @@ +--- +--- + +Adds a Playwright visual-regression suite for the admin UI and its CI workflows. No runtime or user-visible change; the only published-package edit is inert `data-testid` test hooks. diff --git a/.github/workflows/visual-apply.yml b/.github/workflows/visual-apply.yml new file mode 100644 index 0000000000..6288f96c97 --- /dev/null +++ b/.github/workflows/visual-apply.yml @@ -0,0 +1,263 @@ +name: Visual Regression — Apply + +# Commits accepted visual baselines when a maintainer reacts 👍 to the sticky +# comment posted by "Visual Regression — Report". +# +# GitHub has no "reaction" event, so this polls on a schedule (and can be run +# on demand via workflow_dispatch). Each run processes at most one eligible PR: +# it finds the sticky comment, confirms a 👍 from a user with write access, +# downloads the inert candidate-baseline artifact produced by the measure job, +# and commits those PNGs to the PR branch. It never executes PR-authored code. +# +# Idempotency: +# - The sticky comment carries an `` marker; a head that +# already matches is skipped. +# - The measure artifact records has-drift; a green (no-drift) artifact is +# skipped, so a re-poll in the window before the comment is cleared is inert. +# - After copying candidates, an empty git diff short-circuits the push. + +on: + schedule: + - cron: "*/10 * * * *" + workflow_dispatch: + +permissions: + actions: read # find + download the measure artifact + contents: read # app token handles the write/push + pull-requests: write # read reactions, update the sticky comment + +jobs: + apply: + name: Apply + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Find an accepted PR + id: scan + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const marker = ''; + const { owner, repo } = context.repo; + const ALLOWED = new Set(['admin', 'write', 'maintain']); + + const prs = await github.paginate(github.rest.pulls.list, { + owner, repo, state: 'open', base: 'main', per_page: 100, + }); + + for (const pr of prs) { + const comments = await github.paginate(github.rest.issues.listComments, { + owner, repo, issue_number: pr.number, per_page: 100, + }); + const sticky = comments.find( + (c) => typeof c.body === 'string' && c.body.includes(marker), + ); + if (!sticky) continue; + + // Already applied for this head? + const applied = sticky.body.match(//); + if (applied && applied[1] === pr.head.sha) continue; + + // Authorized 👍? + const reactions = await github.paginate( + github.rest.reactions.listForIssueComment, + { owner, repo, comment_id: sticky.id, per_page: 100 }, + ); + let reactor = null; + for (const r of reactions.filter((x) => x.content === '+1')) { + if (!r.user) continue; + try { + const { data: perm } = await github.rest.repos.getCollaboratorPermissionLevel({ + owner, repo, username: r.user.login, + }); + if (ALLOWED.has(perm.permission)) { reactor = r.user.login; break; } + } catch { /* not a collaborator */ } + } + if (!reactor) continue; + + // Locate the measure run (with the candidate artifact) for this head. + const runs = await github.rest.actions.listWorkflowRuns({ + owner, repo, workflow_id: 'visual.yml', head_sha: pr.head.sha, per_page: 20, + }); + const run = runs.data.workflow_runs?.[0]; + if (!run) continue; + + core.setOutput('eligible', 'true'); + core.setOutput('number', String(pr.number)); + core.setOutput('head_sha', pr.head.sha); + core.setOutput('ref', pr.head.ref); + core.setOutput('full_name', pr.head.repo.full_name); + core.setOutput('is_fork', String( + pr.head.repo.fork || pr.head.repo.full_name !== `${owner}/${repo}`, + )); + core.setOutput('comment_id', String(sticky.id)); + core.setOutput('run_id', String(run.id)); + core.setOutput('reactor', reactor); + core.info(`Eligible: PR #${pr.number} accepted by @${reactor} (run ${run.id}).`); + return; + } + core.setOutput('eligible', 'false'); + core.info('No PR with an authorized 👍 awaiting baseline apply.'); + + - name: Download candidate baselines + id: download + if: steps.scan.outputs.eligible == 'true' + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + RUN_ID: ${{ steps.scan.outputs.run_id }} + with: + script: | + const fs = require('node:fs'); + const path = require('node:path'); + const runId = Number(process.env.RUN_ID); + const { data } = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, repo: context.repo.repo, run_id: runId, + }); + const artifact = data.artifacts.find((a) => a.name === 'visual-regression'); + if (!artifact) { + core.setOutput('found', 'false'); + core.info('Candidate artifact missing or expired (>7d). Push a new commit to regenerate.'); + return; + } + const dl = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, repo: context.repo.repo, + artifact_id: artifact.id, archive_format: 'zip', + }); + const outDir = path.join(process.env.RUNNER_TEMP, 'va'); + fs.mkdirSync(outDir, { recursive: true }); + fs.writeFileSync(path.join(outDir, 'artifact.zip'), Buffer.from(dl.data)); + core.setOutput('found', 'true'); + + - name: Unpack and validate + id: validate + if: steps.scan.outputs.eligible == 'true' && steps.download.outputs.found == 'true' + env: + HEAD_SHA: ${{ steps.scan.outputs.head_sha }} + run: | + cd "$RUNNER_TEMP/va" + unzip -o artifact.zip + drift=$(cat has-drift 2>/dev/null || echo false) + measured=$(cat head-sha 2>/dev/null || echo "") + if [ "$drift" != "true" ]; then + echo "Artifact reports no drift — nothing to apply." + echo "ok=false" >> "$GITHUB_OUTPUT" + elif [ "$measured" != "$HEAD_SHA" ]; then + echo "Artifact head ($measured) != PR head ($HEAD_SHA) — skipping." + echo "ok=false" >> "$GITHUB_OUTPUT" + elif [ -z "$(ls -A candidates 2>/dev/null)" ]; then + echo "No candidate baselines in artifact." + echo "ok=false" >> "$GITHUB_OUTPUT" + else + echo "ok=true" >> "$GITHUB_OUTPUT" + fi + + - name: Generate app token + id: app-token + if: steps.validate.outputs.ok == 'true' + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + permission-contents: write + + - name: Checkout (same-repo) + if: steps.validate.outputs.ok == 'true' && steps.scan.outputs.is_fork == 'false' + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + ref: ${{ steps.scan.outputs.head_sha }} + token: ${{ steps.app-token.outputs.token }} + persist-credentials: true + + - name: Checkout (fork) + if: steps.validate.outputs.ok == 'true' && steps.scan.outputs.is_fork == 'true' + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + repository: ${{ steps.scan.outputs.full_name }} + ref: ${{ steps.scan.outputs.head_sha }} + persist-credentials: false + # Reviewed opt-in: no code from the fork tree is executed. The steps + # below only copy inert PNGs from the trusted measure artifact and run + # git add/commit/push -- no scripts, hooks, or tooling from the tree. + allow-unsafe-pr-checkout: true + + - name: Stage baselines + id: stage + if: steps.validate.outputs.ok == 'true' + run: | + set -e + dest="e2e/tests/visual-regression.spec.ts-snapshots" + mkdir -p "$dest" + cp -r "$RUNNER_TEMP/va/candidates/." "$dest/" + git add "$dest" + if git diff --staged --quiet; then + echo "changed=false" >> "$GITHUB_OUTPUT" + echo "Baselines already match candidates — nothing to commit." + else + echo "changed=true" >> "$GITHUB_OUTPUT" + fi + + - name: Commit and push (same-repo) + if: steps.stage.outputs.changed == 'true' && steps.scan.outputs.is_fork == 'false' + env: + HEAD_REF: ${{ steps.scan.outputs.ref }} + REACTOR: ${{ steps.scan.outputs.reactor }} + run: | + set -e + git config user.name "emdashbot[bot]" + git config user.email "emdashbot[bot]@users.noreply.github.com" + git commit -m "ci: accept visual baselines (👍 @$REACTOR)" + if ! git push origin "HEAD:$HEAD_REF"; then + echo "::error::Non-fast-forward push — the PR branch moved. A fresh measure+apply will run for the new head." >&2 + exit 1 + fi + + - name: Commit and push (fork) + if: steps.stage.outputs.changed == 'true' && steps.scan.outputs.is_fork == 'true' + env: + APP_TOKEN: ${{ steps.app-token.outputs.token }} + HEAD_REF: ${{ steps.scan.outputs.ref }} + FULL_NAME: ${{ steps.scan.outputs.full_name }} + REACTOR: ${{ steps.scan.outputs.reactor }} + run: | + set -e + git config user.name "emdashbot[bot]" + git config user.email "emdashbot[bot]@users.noreply.github.com" + git commit -m "ci: accept visual baselines (👍 @$REACTOR)" + export GIT_ASKPASS="$RUNNER_TEMP/git-askpass.sh" + printf '#!/bin/sh\necho "%s"\n' "$APP_TOKEN" > "$GIT_ASKPASS" + chmod +x "$GIT_ASKPASS" + git remote add fork "https://x-access-token@github.com/$FULL_NAME.git" + if ! git push fork "HEAD:$HEAD_REF"; then + rm -f "$GIT_ASKPASS" + echo "::error::Failed to push to fork. The contributor likely has 'Allow edits by maintainers' disabled; they must regenerate baselines in the pinned Playwright Docker image and commit." >&2 + exit 1 + fi + rm -f "$GIT_ASKPASS" + + - name: Mark comment applied + if: steps.validate.outputs.ok == 'true' + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + COMMENT_ID: ${{ steps.scan.outputs.comment_id }} + HEAD_SHA: ${{ steps.scan.outputs.head_sha }} + REACTOR: ${{ steps.scan.outputs.reactor }} + CHANGED: ${{ steps.stage.outputs.changed }} + with: + script: | + const commentId = Number(process.env.COMMENT_ID); + const headSha = process.env.HEAD_SHA; + const reactor = process.env.REACTOR; + const changed = process.env.CHANGED === 'true'; + const { data: comment } = await github.rest.issues.getComment({ + owner: context.repo.owner, repo: context.repo.repo, comment_id: commentId, + }); + // Strip any prior applied marker, then append the current one so a + // re-poll for the same head is skipped. + const base = comment.body.replace(/\n*/g, ''); + const note = changed + ? `\n\n✅ Baselines accepted by @${reactor} and committed to this PR.` + : `\n\nℹ️ Baselines already matched the accepted candidates; nothing to commit.`; + await github.rest.issues.updateComment({ + owner: context.repo.owner, repo: context.repo.repo, comment_id: commentId, + body: `${base}${note}\n`, + }); diff --git a/.github/workflows/visual-report.yml b/.github/workflows/visual-report.yml new file mode 100644 index 0000000000..76e098eece --- /dev/null +++ b/.github/workflows/visual-report.yml @@ -0,0 +1,267 @@ +name: Visual Regression — Report + +# Runs after "Visual Regression" completes. Trusted (runs from the base repo +# with elevated permissions) but never executes PR-authored code: it only +# consumes the inert PNG + metadata artifact produced by the measure job. +# +# Responsibilities: +# - Publish the diff images to the `visual-snapshots` branch so they can be +# embedded in a comment (GitHub cannot host comment images via the API). +# - Upsert a sticky comment with the diffs and 👍-to-accept instructions. +# - Delete the sticky comment when a later run shows no drift (resolved). + +on: + workflow_run: + workflows: ["Visual Regression"] + types: [completed] + +permissions: + actions: read # list/download the measure artifact + contents: write # push diff images to the visual-snapshots branch + pull-requests: write # upsert/delete the sticky comment + +jobs: + report: + name: Report + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Download artifact + id: download + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const fs = require('node:fs'); + const path = require('node:path'); + const { data } = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + const artifact = data.artifacts.find((a) => a.name === 'visual-regression'); + if (!artifact) { + core.setOutput('found', 'false'); + core.info('No visual-regression artifact (measure job likely failed early). Nothing to report.'); + return; + } + const dl = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: artifact.id, + archive_format: 'zip', + }); + // Stage outside GITHUB_WORKSPACE so nothing wipes it. + const outDir = path.join(process.env.RUNNER_TEMP, 'va'); + fs.mkdirSync(outDir, { recursive: true }); + fs.writeFileSync(path.join(outDir, 'artifact.zip'), Buffer.from(dl.data)); + core.setOutput('found', 'true'); + + - name: Unpack artifact + if: steps.download.outputs.found == 'true' + run: | + cd "$RUNNER_TEMP/va" + unzip -o artifact.zip + ls -R . + + - name: Resolve PR + if: steps.download.outputs.found == 'true' + id: pr + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + with: + script: | + const fs = require('node:fs'); + const path = require('node:path'); + const dir = path.join(process.env.RUNNER_TEMP, 'va'); + const prNumber = Number(fs.readFileSync(path.join(dir, 'pr-number'), 'utf8').trim()); + const hasDrift = fs.readFileSync(path.join(dir, 'has-drift'), 'utf8').trim() === 'true'; + if (!Number.isInteger(prNumber) || prNumber <= 0) { + core.setFailed(`Invalid PR number in artifact: ${prNumber}`); + return; + } + const headSha = context.payload.workflow_run.head_sha; + const { data: pr } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: prNumber, + }); + // If the branch moved past what was measured, skip; a fresh measure + // for the new head will follow. + if (pr.head.sha !== headSha) { + core.info(`PR #${prNumber} head (${pr.head.sha}) != measured (${headSha}); skipping.`); + core.setOutput('stale', 'true'); + return; + } + core.setOutput('stale', 'false'); + core.setOutput('number', String(pr.number)); + core.setOutput('sha', headSha); + core.setOutput('has_drift', hasDrift ? 'true' : 'false'); + + # No drift on this run: remove any stale sticky comment and stop. + - name: Clear sticky comment (resolved) + if: steps.download.outputs.found == 'true' && steps.pr.outputs.stale == 'false' && steps.pr.outputs.has_drift == 'false' + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + PR_NUMBER: ${{ steps.pr.outputs.number }} + with: + script: | + const marker = ''; + const prNumber = Number(process.env.PR_NUMBER); + const comments = await github.paginate(github.rest.issues.listComments, { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + per_page: 100, + }); + const prior = comments.find((c) => typeof c.body === 'string' && c.body.includes(marker)); + if (prior) { + await github.rest.issues.deleteComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: prior.id, + }); + core.info('Removed stale sticky comment (no drift).'); + } + + - name: Publish diff images + if: steps.download.outputs.found == 'true' && steps.pr.outputs.stale == 'false' && steps.pr.outputs.has_drift == 'true' + id: images + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + OWNER_REPO: ${{ github.repository }} + PR_NUMBER: ${{ steps.pr.outputs.number }} + HEAD_SHA: ${{ steps.pr.outputs.sha }} + run: | + set -e + BRANCH=visual-snapshots + DEST="pr-${PR_NUMBER}/${HEAD_SHA}" + work="$RUNNER_TEMP/vs" + rm -rf "$work"; mkdir -p "$work"; cd "$work" + git init -q + git config user.name "emdashbot[bot]" + git config user.email "emdashbot[bot]@users.noreply.github.com" + export GIT_ASKPASS="$RUNNER_TEMP/git-askpass.sh" + printf '#!/bin/sh\necho "%s"\n' "$GH_TOKEN" > "$GIT_ASKPASS" + chmod +x "$GIT_ASKPASS" + git remote add origin "https://x-access-token@github.com/${OWNER_REPO}.git" + # Preserve other PRs' images: build on the existing branch if present. + if git fetch -q --depth=1 origin "$BRANCH"; then + git checkout -q -B "$BRANCH" FETCH_HEAD + else + git checkout -q --orphan "$BRANCH" + git rm -rfq --cached . 2>/dev/null || true + fi + rm -rf "$DEST"; mkdir -p "$DEST" + # Normal drift: publish the diff/expected/actual triptychs. + cp "$RUNNER_TEMP/va/diff/"*.png "$DEST/" 2>/dev/null || true + # Bootstrap (no committed baselines yet): Playwright writes only the + # new baselines, no triptych. Publish the candidate baselines so the + # comment has something to show. Strip the -chromium- suffix + # so the screen name matches the diff naming (e.g. dashboard-ltr). + for f in "$RUNNER_TEMP/va/candidates/"*.png; do + [ -e "$f" ] || continue + screen=$(basename "$f" | sed -E 's/-chromium-(linux|darwin|win32)\.png$//') + cp "$f" "$DEST/${screen}-baseline.png" + done + git add "$DEST" + if git diff --staged --quiet; then + echo "No images to publish." + else + git commit -q -m "visual diffs for PR #${PR_NUMBER} @ ${HEAD_SHA}" + git push -q origin "$BRANCH" + fi + rm -f "$GIT_ASKPASS" + echo "base_url=https://github.com/${OWNER_REPO}/raw/${BRANCH}/${DEST}" >> "$GITHUB_OUTPUT" + + - name: Upsert sticky comment + if: steps.download.outputs.found == 'true' && steps.pr.outputs.stale == 'false' && steps.pr.outputs.has_drift == 'true' + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + BASE_URL: ${{ steps.images.outputs.base_url }} + PR_NUMBER: ${{ steps.pr.outputs.number }} + HEAD_SHA: ${{ steps.pr.outputs.sha }} + with: + script: | + const fs = require('node:fs'); + const path = require('node:path'); + const marker = ''; + const baseUrl = process.env.BASE_URL; + const prNumber = Number(process.env.PR_NUMBER); + const headSha = process.env.HEAD_SHA; + + const dir = path.join(process.env.RUNNER_TEMP, 'va'); + const diffDir = path.join(dir, 'diff'); + const candDir = path.join(dir, 'candidates'); + const diffFiles = fs.existsSync(diffDir) ? fs.readdirSync(diffDir) : []; + const diffNames = diffFiles + .filter((f) => f.endsWith('-diff.png')) + .map((f) => f.slice(0, -'-diff.png'.length)) + .sort(); + + let heading; + let intro; + let rows; + if (diffNames.length > 0) { + // Normal drift: prior baselines exist, show the triptych. + heading = `## Visual regression: ${diffNames.length} screen${diffNames.length === 1 ? '' : 's'} changed`; + intro = 'These admin screens render differently on this PR. Confirm every change below is intended before accepting.'; + rows = diffNames.map((n) => { + const diff = `${baseUrl}/${n}-diff.png`; + const expected = `${baseUrl}/${n}-expected.png`; + const actual = `${baseUrl}/${n}-actual.png`; + return `| \`${n}\` | | [expected](${expected}) · [actual](${actual}) |`; + }); + } else { + // Bootstrap: no prior baselines, show the new candidate baselines. + const candFiles = fs.existsSync(candDir) ? fs.readdirSync(candDir) : []; + const newNames = candFiles + .filter((f) => /-chromium-(linux|darwin|win32)\.png$/.test(f)) + .map((f) => f.replace(/-chromium-(linux|darwin|win32)\.png$/, '')) + .sort(); + heading = `## Visual regression: ${newNames.length} new screen${newNames.length === 1 ? '' : 's'} (no baseline yet)`; + intro = 'No baselines exist for these admin screens yet. Review the proposed baselines below, then accept them to start tracking visual drift.'; + rows = newNames.map((n) => { + const baseline = `${baseUrl}/${n}-baseline.png`; + return `| \`${n}\` | | new screen (no prior baseline) |`; + }); + } + + const body = [ + marker, + heading, + '', + intro, + '', + '| Screen | Image | Compare |', + '| --- | --- | --- |', + ...rows, + '', + '---', + '**Maintainers:** react 👍 to this comment to accept these baselines. The', + '"Visual Regression — Apply" job (every ~10 min, or run it manually via', + 'workflow_dispatch) will commit the regenerated Linux baselines to this PR.', + '', + `Measured head: \`${headSha}\`. Reacting 👍 accepts the snapshots for this commit.`, + ].join('\n'); + + const comments = await github.paginate(github.rest.issues.listComments, { + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + per_page: 100, + }); + const prior = comments.find((c) => typeof c.body === 'string' && c.body.includes(marker)); + if (prior) { + await github.rest.issues.updateComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: prior.id, + body, + }); + } else { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: prNumber, + body, + }); + } diff --git a/.github/workflows/visual.yml b/.github/workflows/visual.yml new file mode 100644 index 0000000000..aecd8adea2 --- /dev/null +++ b/.github/workflows/visual.yml @@ -0,0 +1,133 @@ +name: Visual Regression + +# Untrusted measure job. Runs the visual-regression Playwright suite against the +# committed baselines and, when snapshots differ, produces an artifact with the +# candidate (accepted-state) baselines plus diff images. This workflow runs with +# a read-only token and never comments or pushes. The companion workflows handle +# that with elevated permissions, isolated from PR-authored code: +# - "Visual Regression — Report" (workflow_run) posts the sticky comment. +# - "Visual Regression — Apply" (schedule) commits accepted baselines when a +# maintainer reacts 👍 to the sticky comment. +# +# Baselines are Linux/chromium PNGs regenerated here on the CI runner, so they +# always match the environment they're diffed in. Contributors do NOT commit +# baselines by hand (macOS PNGs would never match); the 👍-accept flow commits +# the correct Linux baselines for them. + +on: + pull_request: + branches: [main] + paths: + - "packages/admin/**" + - "packages/core/**" + - "e2e/**" + - "playwright.config.ts" + - ".github/workflows/visual.yml" + - "pnpm-lock.yaml" + - "package.json" + +permissions: + contents: read + +jobs: + measure: + name: Measure + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + persist-credentials: false + - uses: pnpm/action-setup@0e279bb959325dab635dd2c09392533439d90093 # v6.0.8 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: 22 + cache: pnpm + - run: pnpm install --frozen-lockfile + - run: pnpm run --filter emdash... build + - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + id: playwright-cache + with: + path: ~/.cache/ms-playwright + key: playwright-${{ hashFiles('pnpm-lock.yaml') }} + - run: pnpm exec playwright install --with-deps chromium + if: steps.playwright-cache.outputs.cache-hit != 'true' + + - name: Run visual regression + id: run + env: + EMDASH_VISUAL: "1" + run: | + set +e + pnpm exec playwright test visual-regression --reporter=line + code=$? + set -e + echo "exit=$code" >> "$GITHUB_OUTPUT" + echo "Playwright exited with $code" + + # Always record PR metadata so the Report workflow can upsert *or* clear + # the sticky comment. Candidate baselines + diff images are added only + # when the suite actually diffed (exit != 0 AND regeneration produced + # snapshots) -- an infra failure exits non-zero but yields no candidates, + # so we don't mislabel it as a visual change. + - name: Collect result + id: collect + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + RUN_EXIT: ${{ steps.run.outputs.exit }} + run: | + mkdir -p visual-out + echo "$PR_NUMBER" > visual-out/pr-number + echo "$HEAD_SHA" > visual-out/head-sha + + if [ "$RUN_EXIT" = "0" ]; then + echo "false" > visual-out/has-drift + echo "has_drift=false" >> "$GITHUB_OUTPUT" + echo "No visual drift." + exit 0 + fi + + # Copy the diff/actual/expected triptychs Playwright writes on failure. + mkdir -p visual-out/diff + if [ -d test-results ]; then + find test-results -type f \ + \( -name '*-diff.png' -o -name '*-actual.png' -o -name '*-expected.png' \) \ + -exec cp {} visual-out/diff/ \; + fi + + # Regenerate the accepted-state baselines (the candidates the Apply + # workflow will commit verbatim on 👍). These are Linux/chromium PNGs. + pnpm exec playwright test visual-regression --update-snapshots --reporter=line || true + mkdir -p visual-out/candidates + if [ -d e2e/tests/visual-regression.spec.ts-snapshots ]; then + cp -r e2e/tests/visual-regression.spec.ts-snapshots/. visual-out/candidates/ + fi + + if [ -z "$(ls -A visual-out/candidates 2>/dev/null)" ]; then + # Non-zero exit but nothing regenerated -> infra failure, not drift. + echo "false" > visual-out/has-drift + echo "has_drift=false" >> "$GITHUB_OUTPUT" + echo "::warning::Visual suite failed without producing candidate baselines (likely an infra failure, not a UI diff)." + else + echo "true" > visual-out/has-drift + echo "has_drift=true" >> "$GITHUB_OUTPUT" + echo "Visual drift detected — candidates and diff images staged for the Report workflow." + fi + + - name: Upload artifact + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: visual-regression + path: visual-out/ + retention-days: 7 + if-no-files-found: error + + # Make the check red so a UI PR gets a visible signal. This does not, by + # itself, block merge -- keep it out of required checks until the false- + # diff rate is near zero, then promote it. + - name: Fail on drift + if: steps.collect.outputs.has_drift == 'true' + run: | + echo "::error::Visual snapshots changed. Review the diff in the sticky comment; a maintainer 👍 on that comment accepts the new baselines." + exit 1 diff --git a/.github/zizmor.yml b/.github/zizmor.yml index d281878688..415ba84f93 100644 --- a/.github/zizmor.yml +++ b/.github/zizmor.yml @@ -40,6 +40,12 @@ rules: # query-counts-label labels PRs based on path filters; it does not # check out PR code. - query-counts-label.yml + # visual-report uses workflow_run to comment on PRs after the untrusted + # `visual` measure workflow completes. The trusted job only consumes the + # inert PNG + metadata artifact, verifies the PR head SHA matches the + # workflow_run head SHA, publishes diff images to a snapshots branch, and + # upserts a sticky comment. It never checks out or executes PR code. + - visual-report.yml # The CLA assistant action (contributor-assistant/github-action) requires # write access to actions, contents (cla-signatures branch), issues, PRs, diff --git a/.gitignore b/.gitignore index 5e4e771b8b..759db2b59d 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,12 @@ playwright-report/ test-results/ playwright/.cache/ +# Visual regression baselines are platform-specific. CI (Linux) is the source +# of truth and commits `-linux.png` via the visual-apply workflow; locally +# generated macOS/Windows baselines must never be committed (they won't match). +e2e/tests/*-snapshots/*-darwin.png +e2e/tests/*-snapshots/*-win32.png + # Debug screenshots debug-*.png diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 850e833690..01a6340c32 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,6 +97,18 @@ pnpm test:e2e # Playwright Tests use real in-memory SQLite -- no mocking. Each test gets a fresh database. Typecheck and lint must pass. +### Visual regression tests + +The admin UI has a Playwright visual-regression suite (`e2e/tests/visual-regression.spec.ts`) that screenshots key screens in both LTR (English) and RTL (Arabic). It is gated behind `EMDASH_VISUAL=1` so it stays out of the default `pnpm test:e2e` run: + +```bash +EMDASH_VISUAL=1 pnpm test:e2e visual-regression +``` + +Baselines are platform-specific. **CI (Linux) is the source of truth** -- committed baselines are `*-chromium-linux.png`. Locally generated macOS/Windows baselines (`*-darwin.png`, `*-win32.png`) are gitignored; never commit them, they won't match CI. + +When a PR changes how a screen renders, the `Visual Regression` check goes red and a bot posts a sticky comment with the diff images. A maintainer reviews the diffs and, if the change is intended, reacts 👍 to the comment. The `Visual Regression — Apply` job then commits the regenerated Linux baselines to the PR branch. Baselines are never updated automatically on push -- a human must accept each change. + ### Building your own site in the monorepo Copy a template into `demos/`, give it a unique `name` in `package.json`, install, and run: diff --git a/e2e/fixtures/index.ts b/e2e/fixtures/index.ts index 54a361abde..a17c004a49 100644 --- a/e2e/fixtures/index.ts +++ b/e2e/fixtures/index.ts @@ -18,7 +18,7 @@ export { AdminPage } from "./admin"; const SERVER_INFO_PATH = join(tmpdir(), "emdash-pw-server.json"); -interface ServerInfo { +export interface ServerInfo { pid: number; workDir: string; baseUrl: string; diff --git a/e2e/tests/visual-regression.spec.ts b/e2e/tests/visual-regression.spec.ts new file mode 100644 index 0000000000..0fbfb80d72 --- /dev/null +++ b/e2e/tests/visual-regression.spec.ts @@ -0,0 +1,146 @@ +/** + * Visual regression proof-of-concept. + * + * Captures pixel snapshots of key admin screens in both LTR (English) and + * RTL (Arabic) and diffs them against committed baselines via Playwright's + * built-in `toHaveScreenshot()` assertion. This is the *local runner* approach: + * the browser is whatever `playwright install chromium` gave you. That makes it + * environment-sensitive -- baselines generated on macOS will NOT match a Linux + * CI runner. For stable CI, regenerate baselines inside the pinned Playwright + * Docker image (mcr.microsoft.com/playwright) or run this against Cloudflare + * Browser Rendering so the render environment is fixed. See the PR discussion. + * + * Gated behind EMDASH_VISUAL=1 so it stays out of the default e2e suite until + * baselines are committed (a fresh checkout has none, which would fail CI): + * + * # first run writes baselines, reports them as "created" (non-zero exit) + * EMDASH_VISUAL=1 pnpm exec playwright test visual-regression --update-snapshots + * # subsequent runs diff against them + * EMDASH_VISUAL=1 pnpm exec playwright test visual-regression + */ + +import type { Locator } from "@playwright/test"; + +import { test, expect, type AdminPage, type ServerInfo } from "../fixtures"; + +const VISUAL_ENABLED = process.env.EMDASH_VISUAL === "1"; + +// Kill the usual sources of pixel nondeterminism: animations, transitions, +// the blinking text caret, and smooth-scroll. Re-injected after every reload +// because a full navigation drops injected styles. +const FREEZE_CSS = ` + *, *::before, *::after { + animation-duration: 0s !important; + animation-delay: 0s !important; + transition-duration: 0s !important; + transition-delay: 0s !important; + caret-color: transparent !important; + scroll-behavior: auto !important; + } +`; + +// Admin locale is driven by the `emdash-locale` cookie (path /_emdash); Arabic +// is enabled with dir: "rtl", so this flips the whole shell to RTL. +const LOCALES = [ + { name: "ltr", code: "en", dir: "ltr" }, + { name: "rtl", code: "ar", dir: "rtl" }, +] as const; + +/** + * A screen to snapshot. + * + * `path` may depend on seeded data (e.g. a post id for the editor). + * `extraMasks` returns page regions to paint over on top of the always-masked + * version footer -- use it for anything that changes every run (timestamps). + */ +interface PageCase { + name: string; + path: (info: ServerInfo) => string; + extraMasks?: (admin: AdminPage) => Locator[]; +} + +const PAGES: PageCase[] = [ + { + name: "dashboard", + path: () => "/", + // Recent Activity prints relative times ("just now") that drift over time. + extraMasks: (admin) => [admin.page.getByTestId("activity-time")], + }, + { + name: "content-list", + path: () => "/content/posts", + // The Updated column is an absolute date (the seed day) -- guaranteed to + // differ between a committed baseline and any later run. + extraMasks: (admin) => [admin.page.getByTestId("content-updated")], + }, + { + name: "content-editor", + path: (info) => `/content/posts/${info.contentIds.posts[0]}`, + // The Publish panel prints Created/Updated timestamps seeded at test time. + extraMasks: (admin) => [admin.page.getByTestId("content-timestamps")], + }, + { name: "content-new", path: () => "/content/posts/new" }, + { name: "media", path: () => "/media" }, + { name: "menus", path: () => "/menus" }, + { name: "settings", path: () => "/settings" }, +]; + +/** Set the admin locale cookie (SSR + client both read it). */ +async function setLocale(admin: AdminPage, code: string): Promise { + await admin.page + .context() + .addCookies([{ name: "emdash-locale", value: code, domain: "localhost", path: "/_emdash" }]); +} + +/** + * Navigate to an admin path and wait for it to be ready without relying on any + * localized selectors. The shared AdminPage.waitForShell() matches the sidebar + * by its aria-label, which is translated -- so it can't be used once the locale + * is Arabic. Here we wait on the hydration signal and the