🌐 Clean up en translations (#11853)

Drop 277 keys nothing references from en.po (verified against
frontend/src and common/src) and let sync propagate the
deletions to every locale. Clear all 10 fuzzy entries: fill
the 5 empty translations, keep the 4 valid ones, and drop the
duplicated max-quote-reached in favor of max-quota-reached
(the backend code stays, the UI maps it to the quota text).

Recover 22 used-but-missing keys with translations: the 19
shortcuts section/subsection labels plus connected-to,
pixel-grid-color and tokens.add-set. Make the rest
statically visible to rehash instead: :label fns on shortcut
commands, sections and subsections (one debug-only and one
colorpicker-local id exempt); case branches in place of
dm/str-built keys (export modal, text decoration and
transform, undo history with raw-key fallback); hoist
conditionals out of tr calls; pre-translate modal props and
role labels; replace the lone (i18n/tr ...) site with tr.
Turn static :error/code data into eager :error/fn calls in
the common schemas and the auth/password forms. Rename the
two keys containing spaces and point team leave at
max-quota-reached. Backend-driven keys stay dynamic by
design, declared with (tr ...) comments: the five
weak-password details, team and organization notifications.

Tooling: rehash also scans common/src and no longer treats
a missing -l as no locale; new clj-kondo tr-dynamic warning
flags non-literal tr args (lint scripts use --fail-level
error so it never fails CI); tr docstring states the
literal-only rule. Tests cover the shortcut label wiring,
the undo-history fallback and the :error/fn schemas.
Translations memory rewritten to match; es check word list
gains three entries.

Rebased onto develop: adopt the register field-error UX
(the weak-password declarations move onto the :options
code), keep develop's newer keys (connection-error,
account-locked, save-retrying, tokens-source strings) with
fresh references, and reword the shortcuts.cljs prose
comment so rehash does not invent a "literal" key.

AI-assisted-by: muse-spark-1.3-contributor
This commit is contained in:
Andrey Antukh 2026-09-25 11:11:44 +02:00 committed by GitHub
parent 76b9c1c859
commit 4b978767ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
95 changed files with 27592 additions and 67042 deletions

View File

@ -22,6 +22,8 @@
rumext.v2/defc hooks.export/rumext-defc rumext.v2/defc hooks.export/rumext-defc
rumext.v2/lazy-component hooks.export/rumext-lazycomponent rumext.v2/lazy-component hooks.export/rumext-lazycomponent
shadow.lazy/loadable hooks.export/rumext-lazycomponent shadow.lazy/loadable hooks.export/rumext-lazycomponent
app.util.i18n/tr hooks.i18n/tr-dynamic
app.common.i18n/tr hooks.i18n/tr-dynamic
}} }}
:output :output
@ -45,6 +47,9 @@
:potok/reify-type :potok/reify-type
{:level :error} {:level :error}
:penpot/tr-dynamic
{:level :warning}
:redundant-primitive-coercion :redundant-primitive-coercion
{:level :off} {:level :off}

17
.clj-kondo/hooks/i18n.clj Normal file
View File

@ -0,0 +1,17 @@
(ns hooks.i18n
(:require [clj-kondo.hooks-api :as api]))
(defn tr-dynamic
[{:keys [:node]}]
(let [[_ code & _] (:children node)]
(when (and (some? code)
(not (api/string-node? code)))
(let [{:keys [:row :col :end-row :end-col]} (meta code)]
(api/reg-finding! {:message "dynamic key in (tr ...) is invisible to rehash; use a string literal or declare it with ;; (tr \"key\")"
:type :penpot/tr-dynamic
:row row
:col col
;; end positions are required for #_:clj-kondo/ignore to match
:end-row end-row
:end-col end-col}))))
{:node node})

View File

@ -6,77 +6,52 @@ high-coverage support reference, never the base.
## Workflow ## Workflow
- Canonicalize with `node ./scripts/translations.js sync -l <locale>` - Canonicalize with `node ./scripts/translations.js sync -l <locale>` from `frontend/`: sorts entries, syncs `#:` comments from `en`, deletes keys missing in `en`.
from `frontend/`: sorts entries, syncs `#:` comments from `en`, - `sync` copies ALL comment flags from `en`, including `#, fuzzy`. Translated entries must NOT stay fuzzy: strip the flag after translating (mirror `es.po`, which keeps fuzzy only on genuinely untranslated entries). Fuzzy entries are excluded from `msgfmt --statistics` translated counts.
deletes keys missing in `en`. - Canonical files carry NO `#~` obsolete blocks (`en`/`es` have zero). Drop them; `sync` does not resurrect them.
- `sync` copies ALL comment flags from `en`, including `#, fuzzy`. - Definition of done: `msgfmt --check <locale>.po` exit 0 and `msgfmt --statistics` shows 0 fuzzy, 0 untranslated.
Translated entries must NOT stay fuzzy: strip the flag after - `rehash` scans `frontend/src` AND `common/src` for `(tr "key"` occurrences (any line counts, including `;;` comments) and refreshes `#:` refs in `en`, marking unreferenced keys `#, unused`.
translating (mirror `es.po`, which keeps fuzzy only on genuinely - Dynamic keys are invisible to `rehash`: eliminate them instead of
untranslated entries). Fuzzy entries are excluded from declaring them. Preference order: literal `(tr "key")` args only;
`msgfmt --statistics` translated counts. never put a branch inside `tr`, hoist it out (`(if cond (tr "a") (tr "b"))`);
- Canonical files carry NO `#~` obsolete blocks (`en`/`es` have zero). resolve code→message maps with `case` returning literal calls;
Drop them; `sync` does not resurrect them. key-forwarding components take pre-translated strings (callers translate
- Definition of done: `msgfmt --check <locale>.po` exit 0 and with literals). Only when no simple fix exists (open key sets sent by the
`msgfmt --statistics` shows 0 fuzzy, 0 untranslated. backend, large data-driven matrices like `shortcuts.*`) declare each key
with a `;; (tr "the.key")` comment next to the call site (grouped under
`;; Execution time translation strings:`), otherwise the next `rehash`
flags them `unused`. The declaration convention is legacy fallback, not
the default: never introduce new declarations where a hoist or
pre-translation works, and remove existing ones when fixing the call
site. Same for `:error/code "key"` data: prefer `:error/fn #(tr "key")`. Any non-literal first arg to `tr` is reported by the `:penpot/tr-dynamic` clj-kondo warning (hook in `.clj-kondo/hooks/i18n.clj`, registered for `app.util.i18n/tr` and `app.common.i18n/tr`) and forbidden by the `tr` docstring: only `(tr "literal" ...)` is statically resolvable. Translation keys must not contain spaces (use `-` or `.`).
- Shortcut command/section/subsection labels (`shortcuts.*`, including `shortcuts.section.*` and `shortcuts.subsection.*`) resolve through `:label` fns holding static `(tr "literal")` calls, executed at render time: commands carry `:label` on their definitions in the `app.main.data.*.shortcuts` namespaces, sections/subsections in static registries in `app.main.ui.shortcuts` next to `translation-keyname` (id lookup with raw-key fallback for stale custom ids). When adding, renaming, or removing commands/sections/subsections, add/update/remove the `:label`/registry entry; `rehash` sees the literals with no comment needed, and the exhaustiveness test fails otherwise. Exempt, untranslated by design: debug `:preview-frame` and colorpicker `:delete-stop` (no PO keys).
## Entry rules ## Entry rules
- Keys resolved dynamically from server-provided data carry a `#, backend`
flag (set it in `en`, `sync` copies it to the locales): do not remove or
rename these entries, and keep their `%s` placeholders (the backend only
sends the key). The code side keeps a `;; (tr "key")` marker for `rehash`
plus a `#_{:clj-kondo/ignore [:penpot/tr-dynamic]}` on the call site.
- New entries take `#:` refs from `en`; copy `#, unused`, never `#, fuzzy`. - New entries take `#:` refs from `en`; copy `#, unused`, never `#, fuzzy`.
- `en` keys with empty `msgstr` (or `#, fuzzy` + empty): translate from - `en` keys with empty `msgstr` (or `#, fuzzy` + empty): translate from `es`/source context, never leave empty.
`es`/source context, never leave empty. - Entries whose `en` uses `msgid_plural` need `msgstr[0]`/`msgstr[1]` (header: `nplurals=2; plural=n != 1`). Keep the `msgid_plural` line: a singular `msgstr` on a plural key silently breaks count selection at runtime (the app build reads 1-elem `msgstr` as singular).
- Entries whose `en` uses `msgid_plural` need `msgstr[0]`/`msgstr[1]` - `sync` re-adds `#, fuzzy` on EVERY run for entries fuzzy in `en`; re-strip after the last sync, never before it.
(header: `nplurals=2; plural=n != 1`). Keep the `msgid_plural` line: - Preserve verbatim: `%s`/`%d`, `{var}`/`{{...}}`, markdown `[text](%s)`, HTML tags, `\n` positions, brand names (Penpot), key names (Ctrl/Shift/Alt), technical terms (SVG, CSS, HSV, RGB).
a singular `msgstr` on a plural key silently breaks count selection
at runtime (the app build reads 1-elem `msgstr` as singular).
- `sync` re-adds `#, fuzzy` on EVERY run for entries fuzzy in `en`;
re-strip after the last sync, never before it.
- Preserve verbatim: `%s`/`%d`, `{var}`/`{{...}}`, markdown
`[text](%s)`, HTML tags, `\n` positions, brand names (Penpot),
key names (Ctrl/Shift/Alt), technical terms (SVG, CSS, HSV, RGB).
## Catalan (ca) conventions ## Catalan (ca) conventions
- Normative IEC/Termcat Catalan. Address the user in VOSALTRES - Normative IEC/Termcat Catalan. Address the user in VOSALTRES (2nd person plural): "Deseu", "Creeu", "Ja teniu un compte?". Buttons/menus use short imperatives ("Crea", "Mou", "Restaura").
(2nd person plural): "Deseu", "Creeu", "Ja teniu un compte?". - Established glossary (reuse exactly, do not re-coin): layer=capa, board=tauler, stroke=traç, fill=Emplenat, blur=Difuminat, shadow=Ombra, clipboard=porta-retalls, delete=Elimina, rename=Canvia el nom, shortcut=drecera, grid=graella (keep "grid" where the file already does, e.g. grid-layout editing), plugins/extensions UI=extensions, layout=Disposició, gradient=Degradat, wireframing kept as loanword.
Buttons/menus use short imperatives ("Crea", "Mou", "Restaura").
- Established glossary (reuse exactly, do not re-coin): layer=capa,
board=tauler, stroke=traç, fill=Emplenat, blur=Difuminat,
shadow=Ombra, clipboard=porta-retalls, delete=Elimina,
rename=Canvia el nom, shortcut=drecera, grid=graella (keep "grid"
where the file already does, e.g. grid-layout editing),
plugins/extensions UI=extensions, layout=Disposició,
gradient=Degradat, wireframing kept as loanword.
- Ela geminada uses the middle dot: Cancel·la, paral·lel, al·lega. - Ela geminada uses the middle dot: Cancel·la, paral·lel, al·lega.
- ALL-CAPS source stays ALL-CAPS in Catalan; keep `$175`-style - ALL-CAPS source stays ALL-CAPS in Catalan; keep `$175`-style amounts in IEC format (`175 $/mes`) only where `es` already adapts.
amounts in IEC format (`175 $/mes`) only where `es` already adapts. - Shortcut/action names (`shortcuts.*`) are noun/infinitive labels, not sentences. Error strings are direct, no hedging.
- Shortcut/action names (`shortcuts.*`) are noun/infinitive labels, - Same English source in different contexts may legitimately differ (verb "Copia" vs noun "Còpia"; "Desactivat" vs "Deshabilitada" agreeing with "drecera"). Normalize only true duplicates.
not sentences. Error strings are direct, no hedging.
- Same English source in different contexts may legitimately differ
(verb "Copia" vs noun "Còpia"; "Desactivat" vs "Deshabilitada"
agreeing with "drecera"). Normalize only true duplicates.
## QA before commit ## QA before commit
- Run `node ./scripts/translations.js check -l <locale>` from - Run `node ./scripts/translations.js check -l <locale>` from `frontend/` (no default locale: pass `-l` explicitly): 0 errors required; review warnings by hand. Word lists live in `frontend/scripts/check-translations/words.<locale>.txt` (`[elision]` `[function]` `[common]` `[ok]` `[brands]`); new valid words that trip the gate go to `[ok]`; `check --self-test` covers the detector rules. Without a catalog only the universal checks run. `#, fuzzy` entries are skipped (known-pending, owned elsewhere).
`frontend/` (no default locale: pass `-l` explicitly): 0 errors - Placeholder parity per entry (singular AND each plural form, also enforced by the script); verify `%s` against the `tr` call site when `en`/`es`/code disagree (a `%s` the code never passes renders literally; a dropped one swallows the argument). On `#, unused` keys the script only warns: never "fix" them by deleting placeholders or links, a reactivation may need them.
required; review warnings by hand. Word lists live in - Glued words (AI batches drop spaces at wrap boundaries): the script flags function-word splits (`del'equip`, `lapolítica`, `sinecessiteu`), `,/.`/`:` without following space, lowercase+Uppercase joins (`delPenpot`, `oCapitalize`) and `%s` glued to a word.
`frontend/scripts/check-translations/words.<locale>.txt` - Balanced `[]`/`()` in markdown links; no double spaces; no glued words around `·`; trailing spaces match the source.
(`[elision]` `[function]` `[common]` `[ok]` `[brands]`); new valid
words that trip the gate go to `[ok]`; `check --self-test`
covers the detector rules. Without a catalog only the universal
checks run. `#, fuzzy` entries are skipped (known-pending,
owned elsewhere).
- Placeholder parity per entry (singular AND each plural form,
also enforced by the script); verify `%s` against the `tr` call
site when `en`/`es`/code disagree (a `%s` the code never passes
renders literally; a dropped one swallows the argument). On
`#, unused` keys the script only warns: never "fix" them by
deleting placeholders or links, a reactivation may need them.
- Glued words (AI batches drop spaces at wrap boundaries): the
script flags function-word splits (`del'equip`, `lapolítica`,
`sinecessiteu`), `,/.`/`:` without following space,
lowercase+Uppercase joins (`delPenpot`, `oCapitalize`) and `%s`
glued to a word.
- Balanced `[]`/`()` in markdown links; no double spaces; no glued
words around `·`; trailing spaces match the source.
- `git diff --stat` must touch only `frontend/translations/<locale>.po`. - `git diff --stat` must touch only `frontend/translations/<locale>.po`.

View File

@ -20,7 +20,7 @@
"ws": "^8.21.1" "ws": "^8.21.1"
}, },
"scripts": { "scripts": {
"lint:clj": "clj-kondo --config-dir ../.clj-kondo --lint ../common/src src/", "lint:clj": "clj-kondo --fail-level error --config-dir ../.clj-kondo --lint ../common/src src/",
"check-fmt:clj": "cljfmt check --parallel=true src/ test/", "check-fmt:clj": "cljfmt check --parallel=true src/ test/",
"fmt:clj": "cljfmt fix --parallel=true src/ test/", "fmt:clj": "cljfmt fix --parallel=true src/ test/",
"test:e2e": "node --test --test-concurrency=1 test/e2e/*.test.mjs" "test:e2e": "node --test --test-concurrency=1 test/e2e/*.test.mjs"

View File

@ -21,7 +21,7 @@
"date-fns": "^4.4.0" "date-fns": "^4.4.0"
}, },
"scripts": { "scripts": {
"lint:clj": "clj-kondo --config-dir ../.clj-kondo --lint src/", "lint:clj": "clj-kondo --fail-level error --config-dir ../.clj-kondo --lint src/",
"lint:js": "exit 0", "lint:js": "exit 0",
"check-fmt:clj": "cljfmt check --parallel=true src/ test/", "check-fmt:clj": "cljfmt check --parallel=true src/ test/",
"check-fmt:js": "prettier -c src/**/*.js", "check-fmt:js": "prettier -c src/**/*.js",

View File

@ -11,6 +11,7 @@
#?(:clj [malli.dev.pretty :as mdp]) #?(:clj [malli.dev.pretty :as mdp])
#?(:clj [malli.dev.virhe :as v]) #?(:clj [malli.dev.virhe :as v])
[app.common.data :as d] [app.common.data :as d]
[app.common.i18n :as i18n :refer [tr]]
[app.common.json :as json] [app.common.json :as json]
[app.common.math :as mth] [app.common.math :as mth]
[app.common.pprint :as pp] [app.common.pprint :as pp]
@ -493,7 +494,7 @@
:type-properties :type-properties
{:title "email" {:title "email"
:description "string with valid email address" :description "string with valid email address"
:error/code "errors.invalid-email" :error/fn #(tr "errors.invalid-email")
:gen/gen (sg/email) :gen/gen (sg/email)
:decode/string (fn [v] (or (parse-email v) v)) :decode/string (fn [v] (or (parse-email v) v))
:decode/json (fn [v] (or (parse-email v) v)) :decode/json (fn [v] (or (parse-email v) v))
@ -1059,23 +1060,23 @@
(and (string? value) (and (string? value)
(number? max) (number? max)
(> (count value) max)) (> (count value) max))
{:code ["errors.field-max-length" max]} (tr "errors.field-max-length" (i18n/c max))
(and (string? value) (and (string? value)
(number? min) (number? min)
(< (count value) min)) (< (count value) min))
{:code ["errors.field-min-length" min]} (tr "errors.field-min-length" (i18n/c min))
(and (string? value) (and (string? value)
(str/empty? value)) (str/empty? value))
{:code "errors.field-missing"} (tr "errors.field-missing")
(and (string? value) (and (string? value)
(str/blank? value)) (str/blank? value))
{:code "errors.field-not-all-whitespace"} (tr "errors.field-not-all-whitespace")
:else :else
{:code "errors.invalid-text"})))}}) (tr "errors.invalid-text"))))}})
(register! (register!
{:type ::password {:type ::password
@ -1088,7 +1089,7 @@
{:title "password" {:title "password"
:gen/gen (->> (sg/word-string) :gen/gen (->> (sg/word-string)
(sg/filter #(>= (count %) 8))) (sg/filter #(>= (count %) 8)))
:error/code "errors.password-too-short" :error/fn #(tr "errors.password-too-short")
::oapi/type "string" ::oapi/type "string"
::oapi/format "password"}}) ::oapi/format "password"}})

View File

@ -15,6 +15,8 @@
(defn- translate-code (defn- translate-code
[code] [code]
;; validation codes are dynamic by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
(if (vector? code) (if (vector? code)
(tr (nth code 0) (i18n/c (nth code 1))) (tr (nth code 0) (i18n/c (nth code 1)))
(tr code))) (tr code)))

View File

@ -6,6 +6,7 @@
(ns app.common.types.team (ns app.common.types.team
(:require (:require
[app.common.i18n :refer [tr]]
[app.common.schema :as sm])) [app.common.schema :as sm]))
(def valid-roles (def valid-roles
@ -23,7 +24,7 @@
(def schema:team-name (def schema:team-name
[:and [:and
[::sm/text {:max 250}] [::sm/text {:max 250}]
[:fn {:error/code "errors.team-name-invalid-chars"} [:fn {:error/fn #(tr "errors.team-name-invalid-chars")}
(fn [s] (not (re-find #"[.:/]" s)))]]) (fn [s] (not (re-find #"[.:/]" s)))]])
;; FIXME: specify more fields ;; FIXME: specify more fields

View File

@ -37,7 +37,7 @@
"build": "pnpm run clear:shadow-cache && pnpm run build:app", "build": "pnpm run clear:shadow-cache && pnpm run build:app",
"fmt:clj": "cljfmt fix --parallel=true src/ test/", "fmt:clj": "cljfmt fix --parallel=true src/ test/",
"check-fmt:clj": "cljfmt check --parallel=true src/ test/", "check-fmt:clj": "cljfmt check --parallel=true src/ test/",
"lint:clj": "clj-kondo --parallel --lint src/ test/", "lint:clj": "clj-kondo --fail-level error --parallel --lint src/ test/",
"build:test": "clojure -M:dev:shadow-cljs compile test", "build:test": "clojure -M:dev:shadow-cljs compile test",
"test": "pnpm run build:test && PENPOT_SECRET_KEY=${PENPOT_SECRET_KEY:-test-secret-key} node target/tests/test.js", "test": "pnpm run build:test && PENPOT_SECRET_KEY=${PENPOT_SECRET_KEY:-test-secret-key} node target/tests/test.js",
"test:quiet": "node ./scripts/test-quiet.js" "test:quiet": "node ./scripts/test-quiet.js"

View File

@ -30,7 +30,7 @@
"fmt:clj": "cljfmt fix --parallel=true src/ test/", "fmt:clj": "cljfmt fix --parallel=true src/ test/",
"fmt:js": "prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js -c text-editor/**/*.js -w", "fmt:js": "prettier -c src/**/*.stories.jsx -c playwright/**/*.js -c scripts/**/*.js -c text-editor/**/*.js -w",
"fmt:scss": "prettier -c resources/styles -c src/**/*.scss -w", "fmt:scss": "prettier -c resources/styles -c src/**/*.scss -w",
"lint:clj": "clj-kondo --config-dir ../.clj-kondo --lint ../common/src src/", "lint:clj": "clj-kondo --fail-level error --config-dir ../.clj-kondo --lint ../common/src src/",
"lint:js": "exit 0", "lint:js": "exit 0",
"lint:scss": "pnpm exec stylelint '{src,resources}/**/*.scss'", "lint:scss": "pnpm exec stylelint '{src,resources}/**/*.scss'",
"build:test": "pnpm run build:wasm && clojure -M:dev:shadow-cljs compile test", "build:test": "pnpm run build:wasm && clojure -M:dev:shadow-cljs compile test",

View File

@ -230,6 +230,7 @@ ayudarnos
ayudarte ayudarte
borradores borradores
borrarlo borrarlo
bloquearla
cambiada cambiada
caracteres caracteres
como como
@ -251,11 +252,13 @@ contexto
danos danos
demás demás
desactivarlos desactivarlos
desbloquearla
deseleccionar deseleccionar
desuscripción desuscripción
durante durante
editores editores
eje eje
eliminarla
eliminarlo eliminarlo
eliminarlos eliminarlos
ella ella

View File

@ -60,7 +60,12 @@ async function* scanLocales() {
async function processLocale(options, f) { async function processLocale(options, f) {
let locales = options.locale; let locales = options.locale;
if (typeof locales === "string") { if (typeof locales === "string") {
locales = locales.split(/,/); // getopts yields "" (not undefined) when -l is absent: an empty
// list must mean "all locales", never "no locale".
locales = locales.split(/,/).filter((s) => s !== "");
if (locales.length === 0) {
locales = undefined;
}
} else if (Array.isArray(locales)) { } else if (Array.isArray(locales)) {
} else if (locales === undefined) { } else if (locales === undefined) {
} else { } else {
@ -185,20 +190,24 @@ async function rehash(options, ...other) {
const used = await (async function () { const used = await (async function () {
const result = {}; const result = {};
for await (const f of getFiles("src")) { // Both frontend and shared sources: common holds schemas and
if (!fileRe.test(f)) continue; // helpers whose translation keys must stay alive as well.
for (const dir of ["src", "../common/src"]) {
for await (const f of getFiles(dir)) {
if (!fileRe.test(f)) continue;
for await (const [n, line] of readLines(f)) { for await (const [n, line] of readLines(f)) {
const strings = getTranslationStrings(line); const strings = getTranslationStrings(line);
strings.forEach((key) => { strings.forEach((key) => {
const entry = `${f}:${n}`; const entry = `${f}:${n}`;
if (result[key] !== undefined) { if (result[key] !== undefined) {
result[key].push(entry); result[key].push(entry);
} else { } else {
result[key] = [entry]; result[key] = [entry];
} }
}); });
}
} }
} }
@ -720,7 +729,7 @@ Available subcommands (run from \`frontend/\`):
const COMMANDS = { const COMMANDS = {
rehash: { rehash: {
args: "", args: "",
help: 'Scan ./src for (tr "key") usages and update en.po references.', help: 'Scan ./src and ../common/src for (tr "key") usages and update en.po references.',
run: (options, params) => rehash(options, ...params), run: (options, params) => rehash(options, ...params),
}, },
sync: { sync: {

View File

@ -247,7 +247,10 @@
(defn handle-change-team-organization (defn handle-change-team-organization
"Handle :team-organization-change websocket messages on dashboard and workspace. "Handle :team-organization-change websocket messages on dashboard and workspace.
Updates local team organization data and redirects to SSO when required." Updates local team organization data and redirects to SSO when required.
`team` and `notification` come from the server-published message (see backend
app.rpc.notifications/notify-team-change); `notification` is a translation
key resolved here, dynamic by design."
[{:keys [team notification]}] [{:keys [team notification]}]
(ptk/reify ::handle-change-team-organization (ptk/reify ::handle-change-team-organization
ptk/WatchEvent ptk/WatchEvent
@ -259,6 +262,11 @@
current-team?) current-team?)
(rx/concat (rx/concat
(when notification (when notification
;; Execution time translation strings (keys sent by the backend):
;; (tr "dashboard.team-belong-organization")
;; (tr "dashboard.team-no-longer-belong-organization")
;; notification is a server-provided key, dynamic by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
(rx/of (ntf/show {:content (tr notification (:name organization)) (rx/of (ntf/show {:content (tr notification (:name organization))
:type :toast :type :toast
:level :info :level :info

View File

@ -655,6 +655,11 @@
(modal/hide))))) (modal/hide)))))
(defn- handle-user-organization-change (defn- handle-user-organization-change
"Handle :user-organization-change websocket messages.
`organization-id`, `organization-name` and `notification` come from the
server-published message (see backend app.rpc.notifications/
notify-user-organization-change); `notification` is a translation key
resolved here, dynamic by design."
[{:keys [organization-id organization-name notification]}] [{:keys [organization-id organization-name notification]}]
(ptk/reify ::handle-user-organization-change (ptk/reify ::handle-user-organization-change
ptk/WatchEvent ptk/WatchEvent
@ -662,6 +667,10 @@
(when (and notification (contains? cf/flags :admin-console)) (when (and notification (contains? cf/flags :admin-console))
(let [team-id (:current-team-id state) (let [team-id (:current-team-id state)
team (dm/get-in state [:teams team-id])] team (dm/get-in state [:teams team-id])]
;; Execution time translation strings (keys sent by the backend):
;; (tr "dashboard.user-no-longer-belong-organization")
;; notification is a server-provided key, dynamic by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
(rx/of (ntf/show {:content (tr notification organization-name) (rx/of (ntf/show {:content (tr notification organization-name)
:type :toast :type :toast
:level :info :level :info

View File

@ -11,11 +11,13 @@
[app.main.data.event :as ev] [app.main.data.event :as ev]
[app.main.data.profile :as du] [app.main.data.profile :as du]
[app.main.data.shortcuts :as ds] [app.main.data.shortcuts :as ds]
[app.main.store :as st])) [app.main.store :as st]
[app.util.i18n :refer [tr]]))
;; Shortcuts definitions ;; Shortcuts definitions
(def shortcuts (def shortcuts
{:toggle-theme {:tooltip (ds/alt "M") {:toggle-theme {:tooltip (ds/alt "M")
:label (fn [] (tr "shortcuts.toggle-theme"))
:command (ds/a-mod "m") :command (ds/a-mod "m")
:section [:dashboard] :section [:dashboard]
:subsections [:generic] :subsections [:generic]
@ -24,12 +26,14 @@
(def shortcuts-sidebar-navigation (def shortcuts-sidebar-navigation
{:go-to-drafts {:tooltip "G D" {:go-to-drafts {:tooltip "G D"
:label (fn [] (tr "shortcuts.go-to-drafts"))
:command "g d" :command "g d"
:section [:dashboard] :section [:dashboard]
:subsections [:navigation-dashboard] :subsections [:navigation-dashboard]
:fn #(st/emit! (dcm/go-to-dashboard-files :project-id :default))} :fn #(st/emit! (dcm/go-to-dashboard-files :project-id :default))}
:go-to-libs {:tooltip "G L" :go-to-libs {:tooltip "G L"
:label (fn [] (tr "shortcuts.go-to-libs"))
:command "g l" :command "g l"
:section [:dashboard] :section [:dashboard]
:subsections [:navigation-dashboard] :subsections [:navigation-dashboard]
@ -37,6 +41,7 @@
(def shortcut-search (def shortcut-search
{:go-to-search {:tooltip (ds/meta "F") {:go-to-search {:tooltip (ds/meta "F")
:label (fn [] (tr "shortcuts.go-to-search"))
:command (ds/c-mod "f") :command (ds/c-mod "f")
:section [:dashboard] :section [:dashboard]
:subsections [:navigation-dashboard] :subsections [:navigation-dashboard]
@ -44,6 +49,7 @@
(def shortcut-create-new-project (def shortcut-create-new-project
{:create-new-project {:tooltip "+" {:create-new-project {:tooltip "+"
:label (fn [] (tr "shortcuts.create-new-project"))
:command "+" :command "+"
:section [:dashboard] :section [:dashboard]
:subsections [:generic] :subsections [:generic]

View File

@ -185,31 +185,34 @@
(remove :is-default) (remove :is-default)
(remove #(dm/get-in % [:permissions :is-owner])))}) (remove #(dm/get-in % [:permissions :is-owner])))})
(def ^:private team-leave-error-messages (defn- team-leave-message
{:only-owner-can-delete-team "errors.team-leave.only-owner-can-delete" [code]
:no-enough-members-for-leave "errors.team-leave.insufficient-members" (case code
:member-does-not-exist "errors.team-leave.member-does-not-exists" :only-owner-can-delete-team (tr "errors.team-leave.only-owner-can-delete")
:owner-cant-leave-team "errors.team-leave.owner-cant-leave"}) :no-enough-members-for-leave (tr "errors.team-leave.insufficient-members")
:member-does-not-exist (tr "errors.team-leave.member-does-not-exists")
:owner-cant-leave-team (tr "errors.team-leave.owner-cant-leave")
nil))
(defn team-leave-on-error (defn team-leave-on-error
[error] [error]
(let [code (-> error ex-data :code)] (let [code (-> error ex-data :code)]
(if-let [tr-key (get team-leave-error-messages code)] (if-let [message (team-leave-message code)]
(rx/of (ntf/error (tr tr-key))) (rx/of (ntf/error message))
(rx/throw error)))) (rx/throw error))))
(def ^:private organization-leave-error-messages
(merge team-leave-error-messages
{:not-valid-teams "errors.organization-leave.no-valid-teams"
:organization-owner-cannot-leave "errors.organization-leave.organization-owner-cannot-leave"}))
(defn org-leave-on-error (defn org-leave-on-error
[error] [error]
(let [code (-> error ex-data :code)] (let [code (-> error ex-data :code)
(if-let [tr-key (get organization-leave-error-messages code)] message (or (team-leave-message code)
(case code
:not-valid-teams (tr "errors.organization-leave.no-valid-teams")
:organization-owner-cannot-leave (tr "errors.organization-leave.organization-owner-cannot-leave")
nil))]
(if (some? message)
(rx/of (dt/fetch-teams) (rx/of (dt/fetch-teams)
(modal/hide) (modal/hide)
(ntf/error (tr tr-key))) (ntf/error message))
(rx/throw error)))) (rx/throw error))))
(defn leave-organization (defn leave-organization
@ -501,18 +504,18 @@
(fn [organizations-allowed] (fn [organizations-allowed]
(let [has-filtered? (< (count organizations) (count all-organizations)) (let [has-filtered? (< (count organizations) (count all-organizations))
extra-props (when has-filtered? extra-props (when has-filtered?
{:info-message-key "dashboard.select-organization-modal.permission-info-add"})] {:info-message (tr "dashboard.select-organization-modal.permission-info-add")})]
(modal/show :select-organization-modal (modal/show :select-organization-modal
(merge {:organizations organizations (merge {:organizations organizations
:organizations-allowed organizations-allowed :organizations-allowed organizations-allowed
:current-organization current-organization :current-organization current-organization
:on-confirm on-confirm :on-confirm on-confirm
:team-id team-id :team-id team-id
:title-key "dashboard.select-organization-modal.title" :title (tr "dashboard.select-organization-modal.title")
:choose-key "dashboard.select-organization-modal.choose" :choose (tr "dashboard.select-organization-modal.choose")
:placeholder-key "dashboard.select-organization-modal.select" :placeholder (tr "dashboard.select-organization-modal.select")
:accept-key "dashboard.select-organization-modal.accept" :accept (tr "dashboard.select-organization-modal.accept")
:cancel-key "labels.cancel"} :cancel (tr "labels.cancel")}
extra-props))))] extra-props))))]
(if (empty? organizations) (if (empty? organizations)
(rx/of (dt/teams-fetched teams) (rx/of (dt/teams-fetched teams)
@ -577,7 +580,7 @@
(let [valid-organizations (filterv #(true? (get organizations-allowed (:id %))) selectable-organizations) (let [valid-organizations (filterv #(true? (get organizations-allowed (:id %))) selectable-organizations)
has-filtered? (< (count organizations) (count all-organizations)) has-filtered? (< (count organizations) (count all-organizations))
extra-props (when has-filtered? extra-props (when has-filtered?
{:info-message-key "dashboard.select-organization-modal.permission-info"})] {:info-message (tr "dashboard.select-organization-modal.permission-info")})]
(rx/of (rx/of
(dt/teams-fetched teams) (dt/teams-fetched teams)
(if (empty? valid-organizations) (if (empty? valid-organizations)
@ -592,10 +595,10 @@
:current-organization source-organization :current-organization source-organization
:on-confirm on-confirm :on-confirm on-confirm
:team-id team-id :team-id team-id
:title-key "dashboard.change-organization-modal.title" :title (tr "dashboard.change-organization-modal.title")
:description-key "dashboard.change-organization-modal.description" :description (tr "dashboard.change-organization-modal.description")
:choose-key "dashboard.change-organization-modal.choose" :choose (tr "dashboard.change-organization-modal.choose")
:placeholder-key "dashboard.change-organization-modal.select" :placeholder (tr "dashboard.change-organization-modal.select")
:accept-key "dashboard.change-organization-modal.accept" :accept (tr "dashboard.change-organization-modal.accept")
:cancel-key "labels.cancel"} :cancel (tr "labels.cancel")}
extra-props))))))))))))))))) extra-props)))))))))))))))))

View File

@ -11,16 +11,19 @@
[app.main.data.profile :as du] [app.main.data.profile :as du]
[app.main.data.shortcuts :as ds] [app.main.data.shortcuts :as ds]
[app.main.data.viewer :as dv] [app.main.data.viewer :as dv]
[app.main.store :as st])) [app.main.store :as st]
[app.util.i18n :refer [tr]]))
(def shortcuts (def shortcuts
{:increase-zoom {:tooltip "+" {:increase-zoom {:tooltip "+"
:label (fn [] (tr "shortcuts.increase-zoom"))
:command "+" :command "+"
:subsections [:zoom-viewer] :subsections [:zoom-viewer]
:section [:viewer] :section [:viewer]
:fn #(st/emit! dv/increase-zoom)} :fn #(st/emit! dv/increase-zoom)}
:toggle-theme {:tooltip (ds/alt "M") :toggle-theme {:tooltip (ds/alt "M")
:label (fn [] (tr "shortcuts.toggle-theme"))
:command (ds/a-mod "m") :command (ds/a-mod "m")
:section [:viewer] :section [:viewer]
:subsections [:generic] :subsections [:generic]
@ -28,66 +31,77 @@
{::ev/origin "viewer:shortcuts"}))} {::ev/origin "viewer:shortcuts"}))}
:decrease-zoom {:tooltip "-" :decrease-zoom {:tooltip "-"
:label (fn [] (tr "shortcuts.decrease-zoom"))
:command "-" :command "-"
:section [:viewer] :section [:viewer]
:subsections [:zoom-viewer] :subsections [:zoom-viewer]
:fn #(st/emit! dv/decrease-zoom)} :fn #(st/emit! dv/decrease-zoom)}
:select-all {:tooltip (ds/meta "A") :select-all {:tooltip (ds/meta "A")
:label (fn [] (tr "shortcuts.select-all"))
:command (ds/c-mod "a") :command (ds/c-mod "a")
:section [:viewer] :section [:viewer]
:subsections [:generic] :subsections [:generic]
:fn #(st/emit! (dv/select-all))} :fn #(st/emit! (dv/select-all))}
:reset-zoom {:tooltip (ds/shift "0") :reset-zoom {:tooltip (ds/shift "0")
:label (fn [] (tr "shortcuts.reset-zoom"))
:command "shift+0" :command "shift+0"
:section [:viewer] :section [:viewer]
:subsections [:zoom-viewer] :subsections [:zoom-viewer]
:fn #(st/emit! dv/reset-zoom)} :fn #(st/emit! dv/reset-zoom)}
:toggle-zoom-style {:tooltip "F" :toggle-zoom-style {:tooltip "F"
:label (fn [] (tr "shortcuts.toggle-zoom-style"))
:command "f" :command "f"
:section [:viewer] :section [:viewer]
:subsections [:zoom-viewer] :subsections [:zoom-viewer]
:fn #(st/emit! dv/toggle-zoom-style)} :fn #(st/emit! dv/toggle-zoom-style)}
:toggle-fullscreen {:tooltip (ds/shift "F") :toggle-fullscreen {:tooltip (ds/shift "F")
:label (fn [] (tr "shortcuts.toggle-fullscreen"))
:command ["shift+f" "alt+enter"] :command ["shift+f" "alt+enter"]
:section [:viewer] :section [:viewer]
:subsections [:zoom-viewer] :subsections [:zoom-viewer]
:fn #(st/emit! dv/toggle-fullscreen)} :fn #(st/emit! dv/toggle-fullscreen)}
:prev-frame {:tooltip ds/left-arrow :prev-frame {:tooltip ds/left-arrow
:label (fn [] (tr "shortcuts.prev-frame"))
:command ["left" "up" "shift+enter" "pageup" "shift+space"] :command ["left" "up" "shift+enter" "pageup" "shift+space"]
:subsections [:generic] :subsections [:generic]
:section [:viewer] :section [:viewer]
:fn #(st/emit! dv/select-prev-frame)} :fn #(st/emit! dv/select-prev-frame)}
:next-frame {:tooltip ds/right-arrow :next-frame {:tooltip ds/right-arrow
:label (fn [] (tr "shortcuts.next-frame"))
:command ["right" "down" "enter" "pagedown" "space"] :command ["right" "down" "enter" "pagedown" "space"]
:subsections [:generic] :subsections [:generic]
:section [:viewer] :section [:viewer]
:fn #(st/emit! dv/select-next-frame)} :fn #(st/emit! dv/select-next-frame)}
:open-inspect {:tooltip "G I" :open-inspect {:tooltip "G I"
:label (fn [] (tr "shortcuts.open-inspect"))
:command "g i" :command "g i"
:subsections [:navigation-viewer] :subsections [:navigation-viewer]
:section [:viewer] :section [:viewer]
:fn #(st/emit! (dv/go-to-section :inspect))} :fn #(st/emit! (dv/go-to-section :inspect))}
:open-comments {:tooltip "G C" :open-comments {:tooltip "G C"
:label (fn [] (tr "shortcuts.open-comments"))
:command "g c" :command "g c"
:subsections [:navigation-viewer] :subsections [:navigation-viewer]
:section [:viewer] :section [:viewer]
:fn #(st/emit! (dv/go-to-section :comments))} :fn #(st/emit! (dv/go-to-section :comments))}
:open-interactions {:tooltip "G V" :open-interactions {:tooltip "G V"
:label (fn [] (tr "shortcuts.open-interactions"))
:command "g v" :command "g v"
:subsections [:navigation-viewer] :subsections [:navigation-viewer]
:section [:viewer] :section [:viewer]
:fn #(st/emit! (dv/go-to-section :interactions))} :fn #(st/emit! (dv/go-to-section :interactions))}
:open-workspace {:tooltip "G W" :open-workspace {:tooltip "G W"
:label (fn [] (tr "shortcuts.open-workspace"))
:command "g w" :command "g w"
:subsections [:navigation-viewer] :subsections [:navigation-viewer]
:section [:viewer] :section [:viewer]

View File

@ -45,9 +45,9 @@
(let [visible? (contains? (:workspace-layout state) :display-comments)] (let [visible? (contains? (:workspace-layout state) :display-comments)]
(rx/of (vary-meta (dwlo/toggle-layout-flag :display-comments) (rx/of (vary-meta (dwlo/toggle-layout-flag :display-comments)
assoc ::ev/origin (or origin "workspace")) assoc ::ev/origin (or origin "workspace"))
(ntf/success (tr (if visible? (ntf/success (if visible?
"workspace.toast.comments-hidden" (tr "workspace.toast.comments-hidden")
"workspace.toast.comments-visible")))))))) (tr "workspace.toast.comments-visible"))))))))
(defn initialize-comments (defn initialize-comments
[file-id] [file-id]

View File

@ -10,6 +10,7 @@
[app.main.data.workspace :as dw] [app.main.data.workspace :as dw]
[app.main.data.workspace.undo :as dwu] [app.main.data.workspace.undo :as dwu]
[app.main.store :as st] [app.main.store :as st]
[app.util.i18n :refer [tr]]
[beicon.v2.core :as rx] [beicon.v2.core :as rx]
[potok.v2.core :as ptk])) [potok.v2.core :as ptk]))
@ -33,16 +34,19 @@
(def shortcuts (def shortcuts
{:escape {:tooltip (ds/esc) {:escape {:tooltip (ds/esc)
:label (fn [] (tr "shortcuts.escape"))
:command ["escape" "enter" "v"] :command ["escape" "enter" "v"]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (esc-pressed))} :fn #(st/emit! (esc-pressed))}
:undo {:tooltip (ds/meta "Z") :undo {:tooltip (ds/meta "Z")
:label (fn [] (tr "shortcuts.undo"))
:command (ds/c-mod "z") :command (ds/c-mod "z")
:section [:workspace] :section [:workspace]
:fn #(st/emit! dwu/undo)} :fn #(st/emit! dwu/undo)}
:redo {:tooltip (ds/meta "Y") :redo {:tooltip (ds/meta "Y")
:label (fn [] (tr "shortcuts.redo"))
:command [(ds/c-mod "shift+z") (ds/c-mod "y")] :command [(ds/c-mod "shift+z") (ds/c-mod "y")]
:section [:workspace] :section [:workspace]
:fn #(st/emit! dwu/redo)} :fn #(st/emit! dwu/redo)}
@ -50,26 +54,31 @@
;; ZOOM ;; ZOOM
:increase-zoom {:tooltip "+" :increase-zoom {:tooltip "+"
:label (fn [] (tr "shortcuts.increase-zoom"))
:command "+" :command "+"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/increase-zoom nil))} :fn #(st/emit! (dw/increase-zoom nil))}
:decrease-zoom {:tooltip "-" :decrease-zoom {:tooltip "-"
:label (fn [] (tr "shortcuts.decrease-zoom"))
:command "-" :command "-"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/decrease-zoom nil))} :fn #(st/emit! (dw/decrease-zoom nil))}
:reset-zoom {:tooltip (ds/shift "0") :reset-zoom {:tooltip (ds/shift "0")
:label (fn [] (tr "shortcuts.reset-zoom"))
:command "shift+0" :command "shift+0"
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/reset-zoom)} :fn #(st/emit! dw/reset-zoom)}
:fit-all {:tooltip (ds/shift "1") :fit-all {:tooltip (ds/shift "1")
:label (fn [] (tr "shortcuts.fit-all"))
:command "shift+1" :command "shift+1"
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/zoom-to-fit-all)} :fn #(st/emit! dw/zoom-to-fit-all)}
:zoom-selected {:tooltip (ds/shift "2") :zoom-selected {:tooltip (ds/shift "2")
:label (fn [] (tr "shortcuts.zoom-selected"))
:command "shift+2" :command "shift+2"
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/zoom-to-selected-shape)}}) :fn #(st/emit! dw/zoom-to-selected-shape)}})

View File

@ -12,6 +12,7 @@
[app.main.data.workspace.path.common :as drp.common] [app.main.data.workspace.path.common :as drp.common]
[app.main.data.workspace.path.state :as drp.state] [app.main.data.workspace.path.state :as drp.state]
[app.main.store :as st] [app.main.store :as st]
[app.util.i18n :refer [tr]]
[beicon.v2.core :as rx] [beicon.v2.core :as rx]
[potok.v2.core :as ptk])) [potok.v2.core :as ptk]))
@ -42,12 +43,14 @@
(def shortcuts (def shortcuts
{:move-nodes {:tooltip "M" {:move-nodes {:tooltip "M"
:label (fn [] (tr "shortcuts.move-nodes"))
:command "m" :command "m"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/change-edit-mode :move))} :fn #(st/emit! (drp/change-edit-mode :move))}
:draw-nodes {:tooltip "P" :draw-nodes {:tooltip "P"
:label (fn [] (tr "shortcuts.draw-nodes"))
:command "p" :command "p"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
@ -55,12 +58,14 @@
:fn #(st/emit! (drp/change-edit-mode :draw))} :fn #(st/emit! (drp/change-edit-mode :draw))}
:add-node {:tooltip (ds/shift "+") :add-node {:tooltip (ds/shift "+")
:label (fn [] (tr "shortcuts.add-node"))
:command "shift++" :command "shift++"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/add-node))} :fn #(st/emit! (drp/add-node))}
:delete-node {:tooltip (ds/supr) :delete-node {:tooltip (ds/supr)
:label (fn [] (tr "shortcuts.delete-node"))
:command ["del" "backspace"] :command ["del" "backspace"]
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
@ -68,23 +73,27 @@
:fn #(st/emit! (drp/delete-selected))} :fn #(st/emit! (drp/delete-selected))}
:delete-node-and-segments {:tooltip (ds/shift (ds/supr)) :delete-node-and-segments {:tooltip (ds/shift (ds/supr))
:label (fn [] (tr "shortcuts.delete-node-and-segments"))
:command ["shift+del" "shift+backspace"] :command ["shift+del" "shift+backspace"]
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/delete-selected-with-segments))} :fn #(st/emit! (drp/delete-selected-with-segments))}
:merge-nodes {:tooltip (ds/meta "J") :merge-nodes {:tooltip (ds/meta "J")
:label (fn [] (tr "shortcuts.merge-nodes"))
:command (ds/c-mod "j") :command (ds/c-mod "j")
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/merge-nodes))} :fn #(st/emit! (drp/merge-nodes))}
:join-nodes {:tooltip "J" :join-nodes {:tooltip "J"
:label (fn [] (tr "shortcuts.join-nodes"))
:command "j" :command "j"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/join-nodes))} :fn #(st/emit! (drp/join-nodes))}
:separate-nodes {:tooltip "K" :separate-nodes {:tooltip "K"
:label (fn [] (tr "shortcuts.separate-nodes"))
:command "k" :command "k"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
@ -92,12 +101,14 @@
:fn #(st/emit! (drp/separate-nodes))} :fn #(st/emit! (drp/separate-nodes))}
:make-corner {:tooltip "X" :make-corner {:tooltip "X"
:label (fn [] (tr "shortcuts.make-corner"))
:command "x" :command "x"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/make-corner))} :fn #(st/emit! (drp/make-corner))}
:make-curve {:tooltip "C" :make-curve {:tooltip "C"
:label (fn [] (tr "shortcuts.make-curve"))
:command "c" :command "c"
:subsections [:path-editor] :subsections [:path-editor]
:section [:workspace] :section [:workspace]
@ -105,6 +116,7 @@
:fn #(st/emit! (drp/make-curve))} :fn #(st/emit! (drp/make-curve))}
:snap-nodes {:tooltip (ds/meta "'") :snap-nodes {:tooltip (ds/meta "'")
:label (fn [] (tr "shortcuts.snap-nodes"))
;;https://github.com/ccampbell/mousetrap/issues/85 ;;https://github.com/ccampbell/mousetrap/issues/85
:command [(ds/c-mod "'") (ds/c-mod "219")] :command [(ds/c-mod "'") (ds/c-mod "219")]
:subsections [:path-editor] :subsections [:path-editor]
@ -112,46 +124,55 @@
:fn #(st/emit! (drp/toggle-snap))} :fn #(st/emit! (drp/toggle-snap))}
:copy {:tooltip (ds/meta "C") :copy {:tooltip (ds/meta "C")
:label (fn [] (tr "shortcuts.copy"))
:command (ds/c-mod "c") :command (ds/c-mod "c")
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/copy-selected-nodes))} :fn #(st/emit! (drp/copy-selected-nodes))}
:cut {:tooltip (ds/meta "X") :cut {:tooltip (ds/meta "X")
:label (fn [] (tr "shortcuts.cut"))
:command (ds/c-mod "x") :command (ds/c-mod "x")
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/cut-selected-nodes))} :fn #(st/emit! (drp/cut-selected-nodes))}
:paste {:tooltip (ds/meta "V") :paste {:tooltip (ds/meta "V")
:label (fn [] (tr "shortcuts.paste"))
:command (ds/c-mod "v") :command (ds/c-mod "v")
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/paste-nodes))} :fn #(st/emit! (drp/paste-nodes))}
:duplicate {:tooltip (ds/meta "D") :duplicate {:tooltip (ds/meta "D")
:label (fn [] (tr "shortcuts.duplicate"))
:command (ds/c-mod "d") :command (ds/c-mod "d")
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/duplicate-selected))} :fn #(st/emit! (drp/duplicate-selected))}
:select-all {:tooltip (ds/meta "A") :select-all {:tooltip (ds/meta "A")
:label (fn [] (tr "shortcuts.select-all"))
:command (ds/c-mod "a") :command (ds/c-mod "a")
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/select-all-nodes))} :fn #(st/emit! (drp/select-all-nodes))}
:deselect-all {:tooltip (ds/meta (ds/shift "A")) :deselect-all {:tooltip (ds/meta (ds/shift "A"))
:label (fn [] (tr "shortcuts.deselect-all"))
:command (ds/c-mod "shift+a") :command (ds/c-mod "shift+a")
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/deselect-all))} :fn #(st/emit! (drp/deselect-all))}
:flip-horizontal {:tooltip (ds/shift "H") :flip-horizontal {:tooltip (ds/shift "H")
:label (fn [] (tr "shortcuts.flip-horizontal"))
:command "shift+h" :command "shift+h"
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/flip-nodes :horizontal))} :fn #(st/emit! (drp/flip-nodes :horizontal))}
:flip-vertical {:tooltip (ds/shift "V") :flip-vertical {:tooltip (ds/shift "V")
:label (fn [] (tr "shortcuts.flip-vertical"))
:command "shift+v" :command "shift+v"
:subsections [:path-editor] :subsections [:path-editor]
:fn #(st/emit! (drp/flip-nodes :vertical))} :fn #(st/emit! (drp/flip-nodes :vertical))}
:escape {:tooltip (ds/esc) :escape {:tooltip (ds/esc)
:label (fn [] (tr "shortcuts.escape"))
:command ["escape" "v"] :command ["escape" "v"]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (esc-pressed))} :fn #(st/emit! (esc-pressed))}
@ -163,17 +184,20 @@
;; (which enters path edit mode) instead of both ending up bound ;; (which enters path edit mode) instead of both ending up bound
;; to the same physical key at once. ;; to the same physical key at once.
:start-editing {:tooltip (ds/enter) :start-editing {:tooltip (ds/enter)
:label (fn [] (tr "shortcuts.start-editing"))
:command "enter" :command "enter"
:section [:workspace] :section [:workspace]
:overwrite true :overwrite true
:fn #(st/emit! (esc-pressed))} :fn #(st/emit! (esc-pressed))}
:undo {:tooltip (ds/meta "Z") :undo {:tooltip (ds/meta "Z")
:label (fn [] (tr "shortcuts.undo"))
:command (ds/c-mod "z") :command (ds/c-mod "z")
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/undo-path))} :fn #(st/emit! (drp/undo-path))}
:redo {:tooltip (ds/meta "Y") :redo {:tooltip (ds/meta "Y")
:label (fn [] (tr "shortcuts.redo"))
:command [(ds/c-mod "shift+z") (ds/c-mod "y")] :command [(ds/c-mod "shift+z") (ds/c-mod "y")]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/redo-path))} :fn #(st/emit! (drp/redo-path))}
@ -181,26 +205,31 @@
;; ZOOM ;; ZOOM
:increase-zoom {:tooltip "+" :increase-zoom {:tooltip "+"
:label (fn [] (tr "shortcuts.increase-zoom"))
:command "+" :command "+"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/increase-zoom nil))} :fn #(st/emit! (dw/increase-zoom nil))}
:decrease-zoom {:tooltip "-" :decrease-zoom {:tooltip "-"
:label (fn [] (tr "shortcuts.decrease-zoom"))
:command "-" :command "-"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/decrease-zoom nil))} :fn #(st/emit! (dw/decrease-zoom nil))}
:reset-zoom {:tooltip (ds/shift "0") :reset-zoom {:tooltip (ds/shift "0")
:label (fn [] (tr "shortcuts.reset-zoom"))
:command "shift+0" :command "shift+0"
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/reset-zoom)} :fn #(st/emit! dw/reset-zoom)}
:fit-all {:tooltip (ds/shift "1") :fit-all {:tooltip (ds/shift "1")
:label (fn [] (tr "shortcuts.fit-all"))
:command "shift+1" :command "shift+1"
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/zoom-to-fit-all)} :fn #(st/emit! dw/zoom-to-fit-all)}
:zoom-selected {:tooltip (ds/shift "2") :zoom-selected {:tooltip (ds/shift "2")
:label (fn [] (tr "shortcuts.zoom-selected"))
:command "shift+2" :command "shift+2"
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/zoom-to-selected-shape)} :fn #(st/emit! dw/zoom-to-selected-shape)}
@ -208,41 +237,49 @@
;; Arrow movement ;; Arrow movement
:move-fast-up {:tooltip (ds/shift ds/up-arrow) :move-fast-up {:tooltip (ds/shift ds/up-arrow)
:label (fn [] (tr "shortcuts.move-fast-up"))
:command "shift+up" :command "shift+up"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :up true))} :fn #(st/emit! (drp/move-selected :up true))}
:move-fast-down {:tooltip (ds/shift ds/down-arrow) :move-fast-down {:tooltip (ds/shift ds/down-arrow)
:label (fn [] (tr "shortcuts.move-fast-down"))
:command "shift+down" :command "shift+down"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :down true))} :fn #(st/emit! (drp/move-selected :down true))}
:move-fast-right {:tooltip (ds/shift ds/right-arrow) :move-fast-right {:tooltip (ds/shift ds/right-arrow)
:label (fn [] (tr "shortcuts.move-fast-right"))
:command "shift+right" :command "shift+right"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :right true))} :fn #(st/emit! (drp/move-selected :right true))}
:move-fast-left {:tooltip (ds/shift ds/left-arrow) :move-fast-left {:tooltip (ds/shift ds/left-arrow)
:label (fn [] (tr "shortcuts.move-fast-left"))
:command "shift+left" :command "shift+left"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :left true))} :fn #(st/emit! (drp/move-selected :left true))}
:move-unit-up {:tooltip ds/up-arrow :move-unit-up {:tooltip ds/up-arrow
:label (fn [] (tr "shortcuts.move-unit-up"))
:command "up" :command "up"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :up false))} :fn #(st/emit! (drp/move-selected :up false))}
:move-unit-down {:tooltip ds/down-arrow :move-unit-down {:tooltip ds/down-arrow
:label (fn [] (tr "shortcuts.move-unit-down"))
:command "down" :command "down"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :down false))} :fn #(st/emit! (drp/move-selected :down false))}
:move-unit-left {:tooltip ds/right-arrow :move-unit-left {:tooltip ds/right-arrow
:label (fn [] (tr "shortcuts.move-unit-left"))
:command "right" :command "right"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :right false))} :fn #(st/emit! (drp/move-selected :right false))}
:move-unit-right {:tooltip ds/left-arrow :move-unit-right {:tooltip ds/left-arrow
:label (fn [] (tr "shortcuts.move-unit-right"))
:command "left" :command "left"
:section [:workspace] :section [:workspace]
:fn #(st/emit! (drp/move-selected :left false))}}) :fn #(st/emit! (drp/move-selected :left false))}})

View File

@ -32,7 +32,8 @@
[app.main.refs :as refs] [app.main.refs :as refs]
[app.main.store :as st] [app.main.store :as st]
[app.main.ui.hooks.resize :as r] [app.main.ui.hooks.resize :as r]
[app.util.dom :as dom])) [app.util.dom :as dom]
[app.util.i18n :refer [tr]]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Shortcuts ;; Shortcuts
@ -68,36 +69,42 @@
(def base-shortcuts (def base-shortcuts
{;; EDIT {;; EDIT
:undo {:tooltip (ds/meta "Z") :undo {:tooltip (ds/meta "Z")
:label (fn [] (tr "shortcuts.undo"))
:command (ds/c-mod "z") :command (ds/c-mod "z")
:section [:workspace] :section [:workspace]
:subsections [:edit] :subsections [:edit]
:fn #(emit-when-no-readonly dwu/undo)} :fn #(emit-when-no-readonly dwu/undo)}
:redo {:tooltip (ds/meta "Y") :redo {:tooltip (ds/meta "Y")
:label (fn [] (tr "shortcuts.redo"))
:command [(ds/c-mod "shift+z") (ds/c-mod "y")] :command [(ds/c-mod "shift+z") (ds/c-mod "y")]
:section [:workspace] :section [:workspace]
:subsections [:edit] :subsections [:edit]
:fn #(emit-when-no-readonly dwu/redo)} :fn #(emit-when-no-readonly dwu/redo)}
:clear-undo {:tooltip (ds/alt "Q") :clear-undo {:tooltip (ds/alt "Q")
:label (fn [] (tr "shortcuts.clear-undo"))
:command "alt+q" :command "alt+q"
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly dwu/reinitialize-undo)} :fn #(emit-when-no-readonly dwu/reinitialize-undo)}
:copy {:tooltip (ds/meta "C") :copy {:tooltip (ds/meta "C")
:label (fn [] (tr "shortcuts.copy"))
:command (ds/c-mod "c") :command (ds/c-mod "c")
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/copy-selected))} :fn #(st/emit! (dw/copy-selected))}
:copy-link {:tooltip (ds/shift (ds/alt "C")) :copy-link {:tooltip (ds/shift (ds/alt "C"))
:label (fn [] (tr "shortcuts.copy-link"))
:command "shift+alt+c" :command "shift+alt+c"
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/copy-link-to-clipboard))} :fn #(st/emit! (dw/copy-link-to-clipboard))}
:cut {:tooltip (ds/meta "X") :cut {:tooltip (ds/meta "X")
:label (fn [] (tr "shortcuts.cut"))
:command (ds/c-mod "x") :command (ds/c-mod "x")
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
@ -106,6 +113,7 @@
(dw/delete-selected))} (dw/delete-selected))}
:paste {:tooltip (ds/meta "V") :paste {:tooltip (ds/meta "V")
:label (fn [] (tr "shortcuts.paste"))
:disabled true :disabled true
:command (ds/c-mod "v") :command (ds/c-mod "v")
:subsections [:edit] :subsections [:edit]
@ -114,42 +122,49 @@
:fn (constantly nil)} :fn (constantly nil)}
:paste-replace {:tooltip (ds/meta (ds/shift "V")) :paste-replace {:tooltip (ds/meta (ds/shift "V"))
:label (fn [] (tr "shortcuts.paste-replace"))
:command (ds/c-mod "shift+v") :command (ds/c-mod "shift+v")
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/paste-from-clipboard {:replace? true}))} :fn #(emit-when-no-readonly (dw/paste-from-clipboard {:replace? true}))}
:copy-props {:tooltip (ds/meta (ds/alt "c")) :copy-props {:tooltip (ds/meta (ds/alt "c"))
:label (fn [] (tr "shortcuts.copy-props"))
:command (ds/c-mod "alt+c") :command (ds/c-mod "alt+c")
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/copy-selected-props))} :fn #(st/emit! (dw/copy-selected-props))}
:paste-props {:tooltip (ds/meta (ds/alt "v")) :paste-props {:tooltip (ds/meta (ds/alt "v"))
:label (fn [] (tr "shortcuts.paste-props"))
:command (ds/c-mod "alt+v") :command (ds/c-mod "alt+v")
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/paste-selected-props))} :fn #(st/emit! (dw/paste-selected-props))}
:delete {:tooltip (ds/supr) :delete {:tooltip (ds/supr)
:label (fn [] (tr "shortcuts.delete"))
:command ["del" "backspace"] :command ["del" "backspace"]
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/delete-selected))} :fn #(emit-when-no-readonly (dw/delete-selected))}
:duplicate {:tooltip (ds/meta "D") :duplicate {:tooltip (ds/meta "D")
:label (fn [] (tr "shortcuts.duplicate"))
:command (ds/c-mod "d") :command (ds/c-mod "d")
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwv/duplicate-or-add-variant))} :fn #(emit-when-no-readonly (dwv/duplicate-or-add-variant))}
:start-editing {:tooltip (ds/enter) :start-editing {:tooltip (ds/enter)
:label (fn [] (tr "shortcuts.start-editing"))
:command "enter" :command "enter"
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/start-editing-selected))} :fn #(emit-when-no-readonly (dw/start-editing-selected))}
:show-measure {:tooltip (ds/alt "") :show-measure {:tooltip (ds/alt "")
:label (fn [] (tr "shortcuts.show-measure"))
:command ["alt" "."] :command ["alt" "."]
:type ["keydown" "keyup"] :type ["keydown" "keyup"]
:subsections [:tools] :subsections [:tools]
@ -159,152 +174,178 @@
(dw/toggle-distances-display (if (= type "keydown") true false))))} (dw/toggle-distances-display (if (= type "keydown") true false))))}
:escape {:tooltip (ds/esc) :escape {:tooltip (ds/esc)
:label (fn [] (tr "shortcuts.escape"))
:command "escape" :command "escape"
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(st/emit! :interrupt (dwdc/clear-drawing) (dw/deselect-all true))} :fn #(st/emit! :interrupt (dwdc/clear-drawing) (dw/deselect-all true))}
:find {:tooltip (ds/meta "F") :command (ds/c-mod "f") :subsections [:edit] :find {:tooltip (ds/meta "F") :command (ds/c-mod "f") :subsections [:edit]
:label (fn [] (tr "shortcuts.find"))
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/open-layers-search :find))} :fn #(st/emit! (dw/open-layers-search :find))}
:find-and-replace {:tooltip (ds/meta "H") :command (ds/c-mod "h") :subsections [:edit] :find-and-replace {:tooltip (ds/meta "H") :command (ds/c-mod "h") :subsections [:edit]
:label (fn [] (tr "shortcuts.find-and-replace"))
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/open-layers-search :find-and-replace))} :fn #(st/emit! (dw/open-layers-search :find-and-replace))}
;; MODIFY LAYERS ;; MODIFY LAYERS
:rename {:tooltip (ds/alt "N") :rename {:tooltip (ds/alt "N")
:label (fn [] (tr "shortcuts.rename"))
:command "alt+n" :command "alt+n"
:subsections [:edit] :subsections [:edit]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/start-rename-selected))} :fn #(emit-when-no-readonly (dw/start-rename-selected))}
:group {:tooltip (ds/meta "G") :group {:tooltip (ds/meta "G")
:label (fn [] (tr "shortcuts.group"))
:command (ds/c-mod "g") :command (ds/c-mod "g")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/group-selected))} :fn #(emit-when-no-readonly (dw/group-selected))}
:ungroup {:tooltip (ds/shift "G") :ungroup {:tooltip (ds/shift "G")
:label (fn [] (tr "shortcuts.ungroup"))
:command "shift+g" :command "shift+g"
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/ungroup-selected))} :fn #(emit-when-no-readonly (dw/ungroup-selected))}
:mask {:tooltip (ds/meta "M") :mask {:tooltip (ds/meta "M")
:label (fn [] (tr "shortcuts.mask"))
:command (ds/c-mod "m") :command (ds/c-mod "m")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/mask-group))} :fn #(emit-when-no-readonly (dw/mask-group))}
:unmask {:tooltip (ds/meta-shift "M") :unmask {:tooltip (ds/meta-shift "M")
:label (fn [] (tr "shortcuts.unmask"))
:command (ds/c-mod "shift+m") :command (ds/c-mod "shift+m")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/unmask-group))} :fn #(emit-when-no-readonly (dw/unmask-group))}
:create-component-variant {:tooltip (ds/meta "K") :create-component-variant {:tooltip (ds/meta "K")
:label (fn [] (tr "shortcuts.create-component-variant"))
:command (ds/c-mod "k") :command (ds/c-mod "k")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwv/add-component-or-variant))} :fn #(emit-when-no-readonly (dwv/add-component-or-variant))}
:detach-component {:tooltip (ds/meta-shift "K") :detach-component {:tooltip (ds/meta-shift "K")
:label (fn [] (tr "shortcuts.detach-component"))
:command (ds/c-mod "shift+k") :command (ds/c-mod "shift+k")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly dwl/detach-selected-components)} :fn #(emit-when-no-readonly dwl/detach-selected-components)}
:flip-vertical {:tooltip (ds/shift "V") :flip-vertical {:tooltip (ds/shift "V")
:label (fn [] (tr "shortcuts.flip-vertical"))
:command "shift+v" :command "shift+v"
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/flip-vertical-selected))} :fn #(emit-when-no-readonly (dw/flip-vertical-selected))}
:flip-horizontal {:tooltip (ds/shift "H") :flip-horizontal {:tooltip (ds/shift "H")
:label (fn [] (tr "shortcuts.flip-horizontal"))
:command "shift+h" :command "shift+h"
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/flip-horizontal-selected))} :fn #(emit-when-no-readonly (dw/flip-horizontal-selected))}
:bring-forward {:tooltip (ds/meta ds/up-arrow) :bring-forward {:tooltip (ds/meta ds/up-arrow)
:label (fn [] (tr "shortcuts.bring-forward"))
:command (ds/c-mod "up") :command (ds/c-mod "up")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/vertical-order-selected :up))} :fn #(emit-when-no-readonly (dw/vertical-order-selected :up))}
:bring-backward {:tooltip (ds/meta ds/down-arrow) :bring-backward {:tooltip (ds/meta ds/down-arrow)
:label (fn [] (tr "shortcuts.bring-backward"))
:command (ds/c-mod "down") :command (ds/c-mod "down")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/vertical-order-selected :down))} :fn #(emit-when-no-readonly (dw/vertical-order-selected :down))}
:bring-front {:tooltip (ds/meta-shift ds/up-arrow) :bring-front {:tooltip (ds/meta-shift ds/up-arrow)
:label (fn [] (tr "shortcuts.bring-front"))
:command (ds/c-mod "shift+up") :command (ds/c-mod "shift+up")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/vertical-order-selected :top))} :fn #(emit-when-no-readonly (dw/vertical-order-selected :top))}
:bring-back {:tooltip (ds/meta-shift ds/down-arrow) :bring-back {:tooltip (ds/meta-shift ds/down-arrow)
:label (fn [] (tr "shortcuts.bring-back"))
:command (ds/c-mod "shift+down") :command (ds/c-mod "shift+down")
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/vertical-order-selected :bottom))} :fn #(emit-when-no-readonly (dw/vertical-order-selected :bottom))}
:move-fast-up {:tooltip (ds/shift ds/up-arrow) :move-fast-up {:tooltip (ds/shift ds/up-arrow)
:label (fn [] (tr "shortcuts.move-fast-up"))
:command ["shift+up" "shift+alt+up"] :command ["shift+up" "shift+alt+up"]
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwt/move-selected :up true))} :fn #(emit-when-no-readonly (dwt/move-selected :up true))}
:move-fast-down {:tooltip (ds/shift ds/down-arrow) :move-fast-down {:tooltip (ds/shift ds/down-arrow)
:label (fn [] (tr "shortcuts.move-fast-down"))
:command ["shift+down" "shift+alt+down"] :command ["shift+down" "shift+alt+down"]
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwt/move-selected :down true))} :fn #(emit-when-no-readonly (dwt/move-selected :down true))}
:move-fast-right {:tooltip (ds/shift ds/right-arrow) :move-fast-right {:tooltip (ds/shift ds/right-arrow)
:label (fn [] (tr "shortcuts.move-fast-right"))
:command ["shift+right" "shift+alt+right"] :command ["shift+right" "shift+alt+right"]
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwt/move-selected :right true))} :fn #(emit-when-no-readonly (dwt/move-selected :right true))}
:move-fast-left {:tooltip (ds/shift ds/left-arrow) :move-fast-left {:tooltip (ds/shift ds/left-arrow)
:label (fn [] (tr "shortcuts.move-fast-left"))
:command ["shift+left" "shift+alt+left"] :command ["shift+left" "shift+alt+left"]
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwt/move-selected :left true))} :fn #(emit-when-no-readonly (dwt/move-selected :left true))}
:move-unit-up {:tooltip ds/up-arrow :move-unit-up {:tooltip ds/up-arrow
:label (fn [] (tr "shortcuts.move-unit-up"))
:command ["up" "alt+up"] :command ["up" "alt+up"]
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwt/move-selected :up false))} :fn #(emit-when-no-readonly (dwt/move-selected :up false))}
:move-unit-down {:tooltip ds/down-arrow :move-unit-down {:tooltip ds/down-arrow
:label (fn [] (tr "shortcuts.move-unit-down"))
:command ["down" "alt+down"] :command ["down" "alt+down"]
:section [:workspace] :section [:workspace]
:subsections [:modify-layers] :subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwt/move-selected :down false))} :fn #(emit-when-no-readonly (dwt/move-selected :down false))}
:move-unit-left {:tooltip ds/right-arrow :move-unit-left {:tooltip ds/right-arrow
:label (fn [] (tr "shortcuts.move-unit-left"))
:command ["right" "alt+right"] :command ["right" "alt+right"]
:subsections [:modify-layers] :subsections [:modify-layers]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwt/move-selected :right false))} :fn #(emit-when-no-readonly (dwt/move-selected :right false))}
:move-unit-right {:tooltip ds/left-arrow :move-unit-right {:tooltip ds/left-arrow
:label (fn [] (tr "shortcuts.move-unit-right"))
:command ["left" "alt+left"] :command ["left" "alt+left"]
:section [:workspace] :section [:workspace]
:subsections [:modify-layers] :subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwt/move-selected :left false))} :fn #(emit-when-no-readonly (dwt/move-selected :left false))}
:artboard-selection {:tooltip (ds/meta (ds/alt "G")) :artboard-selection {:tooltip (ds/meta (ds/alt "G"))
:label (fn [] (tr "shortcuts.artboard-selection"))
:command (ds/c-mod "alt+g") :command (ds/c-mod "alt+g")
:section [:workspace] :section [:workspace]
:subsections [:modify-layers] :subsections [:modify-layers]
:fn #(emit-when-no-readonly (dws/create-artboard-from-selection))} :fn #(emit-when-no-readonly (dws/create-artboard-from-selection))}
:toggle-layout-flex {:tooltip (ds/shift "A") :toggle-layout-flex {:tooltip (ds/shift "A")
:label (fn [] (tr "shortcuts.toggle-layout-flex"))
:command "shift+a" :command "shift+a"
:section [:workspace] :section [:workspace]
:subsections [:modify-layers] :subsections [:modify-layers]
@ -313,6 +354,7 @@
{::ev/origin "workspace:shortcuts"}))} {::ev/origin "workspace:shortcuts"}))}
:toggle-layout-grid {:tooltip (ds/meta-shift "A") :toggle-layout-grid {:tooltip (ds/meta-shift "A")
:label (fn [] (tr "shortcuts.toggle-layout-grid"))
:command (ds/c-mod "shift+a") :command (ds/c-mod "shift+a")
:section [:workspace] :section [:workspace]
:subsections [:modify-layers] :subsections [:modify-layers]
@ -322,30 +364,35 @@
;; TOOLS ;; TOOLS
:draw-frame {:tooltip "B" :draw-frame {:tooltip "B"
:label (fn [] (tr "shortcuts.draw-frame"))
:command ["b" "a"] :command ["b" "a"]
:section [:workspace :basics] :section [:workspace :basics]
:subsections [:tools :basics] :subsections [:tools :basics]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :frame))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :frame))}
:move {:tooltip "V" :move {:tooltip "V"
:label (fn [] (tr "shortcuts.move"))
:command "v" :command "v"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly :interrupt)} :fn #(emit-when-no-readonly :interrupt)}
:draw-rect {:tooltip "R" :draw-rect {:tooltip "R"
:label (fn [] (tr "shortcuts.draw-rect"))
:command "r" :command "r"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :rect))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :rect))}
:draw-ellipse {:tooltip "E" :draw-ellipse {:tooltip "E"
:label (fn [] (tr "shortcuts.draw-ellipse"))
:command "e" :command "e"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :circle))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :circle))}
:draw-text {:tooltip "T" :draw-text {:tooltip "T"
:label (fn [] (tr "shortcuts.draw-text"))
:command "t" :command "t"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
@ -353,30 +400,35 @@
(dwd/select-for-drawing :text))} (dwd/select-for-drawing :text))}
:draw-path {:tooltip "P" :draw-path {:tooltip "P"
:label (fn [] (tr "shortcuts.draw-path"))
:command "p" :command "p"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :path))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :path))}
:draw-line {:tooltip "L" :draw-line {:tooltip "L"
:label (fn [] (tr "shortcuts.draw-line"))
:command "l" :command "l"
:subsections [:tools] :subsections [:tools]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :line))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :line))}
:draw-arrow {:tooltip (ds/shift "L") :draw-arrow {:tooltip (ds/shift "L")
:label (fn [] (tr "shortcuts.draw-arrow"))
:command "shift+l" :command "shift+l"
:subsections [:tools] :subsections [:tools]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :arrow))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :arrow))}
:draw-curve {:tooltip (ds/shift "C") :draw-curve {:tooltip (ds/shift "C")
:label (fn [] (tr "shortcuts.draw-curve"))
:command "shift+c" :command "shift+c"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dwd/select-for-drawing :curve))} :fn #(emit-when-no-readonly (dwd/select-for-drawing :curve))}
:add-comment {:tooltip "C" :add-comment {:tooltip "C"
:label (fn [] (tr "shortcuts.add-comment"))
:command "c" :command "c"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
@ -384,48 +436,56 @@
:toggle-comments-visibility :toggle-comments-visibility
{:tooltip (ds/meta-shift "C") {:tooltip (ds/meta-shift "C")
:label (fn [] (tr "shortcuts.toggle-comments-visibility"))
:command (ds/c-mod "shift+c") :command (ds/c-mod "shift+c")
:section [:workspace] :section [:workspace]
:subsections [:main-menu] :subsections [:main-menu]
:fn #(st/emit! (dwcm/toggle-comments-visibility {:origin "workspace-shortcuts"}))} :fn #(st/emit! (dwcm/toggle-comments-visibility {:origin "workspace-shortcuts"}))}
:insert-image {:tooltip (ds/shift "K") :insert-image {:tooltip (ds/shift "K")
:label (fn [] (tr "shortcuts.insert-image"))
:command "shift+k" :command "shift+k"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(-> "image-upload" dom/get-element dom/click)} :fn #(-> "image-upload" dom/get-element dom/click)}
:toggle-visibility {:tooltip (ds/meta-shift "H") :toggle-visibility {:tooltip (ds/meta-shift "H")
:label (fn [] (tr "shortcuts.toggle-visibility"))
:command (ds/c-mod "shift+h") :command (ds/c-mod "shift+h")
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dw/toggle-visibility-selected))} :fn #(emit-when-no-readonly (dw/toggle-visibility-selected))}
:toggle-lock {:tooltip (ds/meta-shift "L") :toggle-lock {:tooltip (ds/meta-shift "L")
:label (fn [] (tr "shortcuts.toggle-lock"))
:command (ds/c-mod "shift+l") :command (ds/c-mod "shift+l")
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dw/toggle-lock-selected))} :fn #(emit-when-no-readonly (dw/toggle-lock-selected))}
:toggle-lock-size {:tooltip (ds/shift "L") :toggle-lock-size {:tooltip (ds/shift "L")
:label (fn [] (tr "shortcuts.toggle-lock-size"))
:command "shift+l" :command "shift+l"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (dw/toggle-proportion-lock))} :fn #(emit-when-no-readonly (dw/toggle-proportion-lock))}
:scale {:tooltip "K" :scale {:tooltip "K"
:label (fn [] (tr "shortcuts.scale"))
:command "k" :command "k"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (toggle-layout-flag :scale-text))} :fn #(emit-when-no-readonly (toggle-layout-flag :scale-text))}
:open-color-picker {:tooltip "I" :open-color-picker {:tooltip "I"
:label (fn [] (tr "shortcuts.open-color-picker"))
:command "i" :command "i"
:section [:workspace] :section [:workspace]
:subsections [:tools] :subsections [:tools]
:fn #(emit-when-no-readonly (mdc/picker-for-selected-shape))} :fn #(emit-when-no-readonly (mdc/picker-for-selected-shape))}
:toggle-focus-mode {:command "f" :toggle-focus-mode {:command "f"
:label (fn [] (tr "shortcuts.toggle-focus-mode"))
:tooltip "F" :tooltip "F"
:section [:workspace :basics] :section [:workspace :basics]
:subsections [:basics :tools] :subsections [:basics :tools]
@ -434,48 +494,56 @@
;; ITEM ALIGNMENT ;; ITEM ALIGNMENT
:align-left {:tooltip (ds/alt "A") :align-left {:tooltip (ds/alt "A")
:label (fn [] (tr "shortcuts.align-left"))
:command "alt+a" :command "alt+a"
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/align-objects :hleft))} :fn #(emit-when-no-readonly (dw/align-objects :hleft))}
:align-right {:tooltip (ds/alt "D") :align-right {:tooltip (ds/alt "D")
:label (fn [] (tr "shortcuts.align-right"))
:command "alt+d" :command "alt+d"
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/align-objects :hright))} :fn #(emit-when-no-readonly (dw/align-objects :hright))}
:align-top {:tooltip (ds/alt "W") :align-top {:tooltip (ds/alt "W")
:label (fn [] (tr "shortcuts.align-top"))
:command "alt+w" :command "alt+w"
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/align-objects :vtop))} :fn #(emit-when-no-readonly (dw/align-objects :vtop))}
:align-hcenter {:tooltip (ds/alt "H") :align-hcenter {:tooltip (ds/alt "H")
:label (fn [] (tr "shortcuts.align-hcenter"))
:command "alt+h" :command "alt+h"
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/align-objects :hcenter))} :fn #(emit-when-no-readonly (dw/align-objects :hcenter))}
:align-vcenter {:tooltip (ds/alt "V") :align-vcenter {:tooltip (ds/alt "V")
:label (fn [] (tr "shortcuts.align-vcenter"))
:command "alt+v" :command "alt+v"
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/align-objects :vcenter))} :fn #(emit-when-no-readonly (dw/align-objects :vcenter))}
:align-bottom {:tooltip (ds/alt "S") :align-bottom {:tooltip (ds/alt "S")
:label (fn [] (tr "shortcuts.align-bottom"))
:command "alt+s" :command "alt+s"
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/align-objects :vbottom))} :fn #(emit-when-no-readonly (dw/align-objects :vbottom))}
:h-distribute {:tooltip (ds/meta-shift (ds/alt "H")) :h-distribute {:tooltip (ds/meta-shift (ds/alt "H"))
:label (fn [] (tr "shortcuts.h-distribute"))
:command (ds/c-mod "shift+alt+h") :command (ds/c-mod "shift+alt+h")
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
:fn #(emit-when-no-readonly (dw/distribute-objects :horizontal))} :fn #(emit-when-no-readonly (dw/distribute-objects :horizontal))}
:v-distribute {:tooltip (ds/meta-shift (ds/alt "V")) :v-distribute {:tooltip (ds/meta-shift (ds/alt "V"))
:label (fn [] (tr "shortcuts.v-distribute"))
:command (ds/c-mod "shift+alt+v") :command (ds/c-mod "shift+alt+v")
:section [:workspace] :section [:workspace]
:subsections [:alignment] :subsections [:alignment]
@ -484,18 +552,21 @@
;; MAIN MENU ;; MAIN MENU
:toggle-rulers {:tooltip (ds/meta-shift "R") :toggle-rulers {:tooltip (ds/meta-shift "R")
:label (fn [] (tr "shortcuts.toggle-rulers"))
:command (ds/c-mod "shift+r") :command (ds/c-mod "shift+r")
:section [:workspace] :section [:workspace]
:subsections [:main-menu] :subsections [:main-menu]
:fn #(st/emit! (toggle-layout-flag :rulers))} :fn #(st/emit! (toggle-layout-flag :rulers))}
:select-all {:tooltip (ds/meta "A") :select-all {:tooltip (ds/meta "A")
:label (fn [] (tr "shortcuts.select-all"))
:command (ds/c-mod "a") :command (ds/c-mod "a")
:section [:workspace] :section [:workspace]
:subsections [:main-menu] :subsections [:main-menu]
:fn #(st/emit! (dw/select-all))} :fn #(st/emit! (dw/select-all))}
:toggle-guides {:tooltip (ds/meta "'") :toggle-guides {:tooltip (ds/meta "'")
:label (fn [] (tr "shortcuts.toggle-guides"))
;;https://github.com/ccampbell/mousetrap/issues/85 ;;https://github.com/ccampbell/mousetrap/issues/85
:command [(ds/c-mod "'") (ds/c-mod "219")] :command [(ds/c-mod "'") (ds/c-mod "219")]
:show-command (ds/c-mod "'") :show-command (ds/c-mod "'")
@ -504,30 +575,35 @@
:fn #(st/emit! (toggle-layout-flag :display-guides))} :fn #(st/emit! (toggle-layout-flag :display-guides))}
:toggle-alignment {:tooltip (ds/meta "\\") :toggle-alignment {:tooltip (ds/meta "\\")
:label (fn [] (tr "shortcuts.toggle-alignment"))
:command (ds/c-mod "\\") :command (ds/c-mod "\\")
:subsections [:main-menu] :subsections [:main-menu]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (toggle-layout-flag :dynamic-alignment))} :fn #(st/emit! (toggle-layout-flag :dynamic-alignment))}
:thumbnail-set {:tooltip (ds/shift "T") :thumbnail-set {:tooltip (ds/shift "T")
:label (fn [] (tr "shortcuts.thumbnail-set"))
:command "shift+t" :command "shift+t"
:subsections [:main-menu] :subsections [:main-menu]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/toggle-file-thumbnail-selected))} :fn #(st/emit! (dw/toggle-file-thumbnail-selected))}
:show-pixel-grid {:tooltip (ds/shift ",") :show-pixel-grid {:tooltip (ds/shift ",")
:label (fn [] (tr "shortcuts.show-pixel-grid"))
:command "shift+," :command "shift+,"
:subsections [:main-menu] :subsections [:main-menu]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (toggle-layout-flag :show-pixel-grid))} :fn #(st/emit! (toggle-layout-flag :show-pixel-grid))}
:snap-pixel-grid {:command "," :snap-pixel-grid {:command ","
:label (fn [] (tr "shortcuts.snap-pixel-grid"))
:tooltip "," :tooltip ","
:subsections [:main-menu] :subsections [:main-menu]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (toggle-layout-flag :snap-pixel-grid))} :fn #(st/emit! (toggle-layout-flag :snap-pixel-grid))}
:export-shapes {:tooltip (ds/meta-shift "E") :export-shapes {:tooltip (ds/meta-shift "E")
:label (fn [] (tr "shortcuts.export-shapes"))
:command (ds/c-mod "shift+e") :command (ds/c-mod "shift+e")
:subsections [:basics :main-menu] :subsections [:basics :main-menu]
:section [:workspace :basics] :section [:workspace :basics]
@ -535,12 +611,14 @@
(de/show-workspace-export-dialog {:origin "workspace:shortcuts"}))} (de/show-workspace-export-dialog {:origin "workspace:shortcuts"}))}
:toggle-snap-ruler-guide {:tooltip (ds/meta-shift "G") :toggle-snap-ruler-guide {:tooltip (ds/meta-shift "G")
:label (fn [] (tr "shortcuts.toggle-snap-ruler-guide"))
:command (ds/c-mod "shift+g") :command (ds/c-mod "shift+g")
:subsections [:main-menu] :subsections [:main-menu]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (toggle-layout-flag :snap-ruler-guides))} :fn #(st/emit! (toggle-layout-flag :snap-ruler-guides))}
:toggle-snap-guides {:tooltip (ds/meta-shift "'") :toggle-snap-guides {:tooltip (ds/meta-shift "'")
:label (fn [] (tr "shortcuts.toggle-snap-guides"))
;;https://github.com/ccampbell/mousetrap/issues/85 ;;https://github.com/ccampbell/mousetrap/issues/85
:command [(ds/c-mod "shift+'") (ds/c-mod "shift+219")] :command [(ds/c-mod "shift+'") (ds/c-mod "shift+219")]
:show-command (ds/c-mod "shift+'") :show-command (ds/c-mod "shift+'")
@ -549,6 +627,7 @@
:fn #(st/emit! (toggle-layout-flag :snap-guides))} :fn #(st/emit! (toggle-layout-flag :snap-guides))}
:show-shortcuts {:tooltip "?" :show-shortcuts {:tooltip "?"
:label (fn [] (tr "shortcuts.show-shortcuts"))
:command "?" :command "?"
:subsections [:main-menu] :subsections [:main-menu]
:section [:workspace] :section [:workspace]
@ -557,18 +636,21 @@
;; PANELS ;; PANELS
:toggle-layers {:tooltip (ds/alt "L") :toggle-layers {:tooltip (ds/alt "L")
:label (fn [] (tr "shortcuts.toggle-layers"))
:command (ds/a-mod "l") :command (ds/a-mod "l")
:subsections [:panels] :subsections [:panels]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dcm/go-to-workspace :layout :layers))} :fn #(st/emit! (dcm/go-to-workspace :layout :layers))}
:toggle-assets {:tooltip (ds/alt "I") :toggle-assets {:tooltip (ds/alt "I")
:label (fn [] (tr "shortcuts.toggle-assets"))
:command (ds/a-mod "i") :command (ds/a-mod "i")
:subsections [:panels] :subsections [:panels]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dcm/go-to-workspace :layout :assets))} :fn #(st/emit! (dcm/go-to-workspace :layout :assets))}
:toggle-history {:tooltip (ds/meta-alt "H") :toggle-history {:tooltip (ds/meta-alt "H")
:label (fn [] (tr "shortcuts.toggle-history"))
:command (ds/ca-mod "h") :command (ds/ca-mod "h")
:subsections [:panels] :subsections [:panels]
:section [:workspace] :section [:workspace]
@ -576,6 +658,7 @@
(dw/toggle-layout-flag :document-history))} (dw/toggle-layout-flag :document-history))}
:toggle-colorpalette {:tooltip (ds/alt "P") :toggle-colorpalette {:tooltip (ds/alt "P")
:label (fn [] (tr "shortcuts.toggle-colorpalette"))
:command (ds/a-mod "p") :command (ds/a-mod "p")
:subsections [:panels] :subsections [:panels]
:section [:workspace] :section [:workspace]
@ -585,6 +668,7 @@
(toggle-layout-flag :colorpalette)))} (toggle-layout-flag :colorpalette)))}
:toggle-textpalette {:tooltip (ds/alt "T") :toggle-textpalette {:tooltip (ds/alt "T")
:label (fn [] (tr "shortcuts.toggle-textpalette"))
:command (ds/a-mod "t") :command (ds/a-mod "t")
:subsections [:panels] :subsections [:panels]
:section [:workspace] :section [:workspace]
@ -594,6 +678,7 @@
(toggle-layout-flag :textpalette)))} (toggle-layout-flag :textpalette)))}
:hide-ui {:tooltip "\\" :hide-ui {:tooltip "\\"
:label (fn [] (tr "shortcuts.hide-ui"))
:command "\\" :command "\\"
:subsections [:panels :basics] :subsections [:panels :basics]
:section [:workspace :basics] :section [:workspace :basics]
@ -602,42 +687,49 @@
;; ZOOM-WORKSPACE ;; ZOOM-WORKSPACE
:increase-zoom {:tooltip "+" :increase-zoom {:tooltip "+"
:label (fn [] (tr "shortcuts.increase-zoom"))
:command ["+" "="] :command ["+" "="]
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/increase-zoom))} :fn #(st/emit! (dw/increase-zoom))}
:decrease-zoom {:tooltip "-" :decrease-zoom {:tooltip "-"
:label (fn [] (tr "shortcuts.decrease-zoom"))
:command ["-" "_"] :command ["-" "_"]
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/decrease-zoom))} :fn #(st/emit! (dw/decrease-zoom))}
:reset-zoom {:tooltip (ds/shift "0") :reset-zoom {:tooltip (ds/shift "0")
:label (fn [] (tr "shortcuts.reset-zoom"))
:command ["shift+0" "shift+num0"] :command ["shift+0" "shift+num0"]
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/reset-zoom)} :fn #(st/emit! dw/reset-zoom)}
:fit-all {:tooltip (ds/shift "1") :fit-all {:tooltip (ds/shift "1")
:label (fn [] (tr "shortcuts.fit-all"))
:command ["shift+1" "shift+num1"] :command ["shift+1" "shift+num1"]
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/zoom-to-fit-all)} :fn #(st/emit! dw/zoom-to-fit-all)}
:zoom-selected {:tooltip (ds/shift "2") :zoom-selected {:tooltip (ds/shift "2")
:label (fn [] (tr "shortcuts.zoom-selected"))
:command ["shift+2" "shift+num2" "@" "\""] :command ["shift+2" "shift+num2" "@" "\""]
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! dw/zoom-to-selected-shape)} :fn #(st/emit! dw/zoom-to-selected-shape)}
:zoom-lense-increase {:tooltip "Z" :zoom-lense-increase {:tooltip "Z"
:label (fn [] (tr "shortcuts.zoom-lense-increase"))
:command "z" :command "z"
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
:fn identity} :fn identity}
:zoom-lense-decrease {:tooltip (ds/alt "Z") :zoom-lense-decrease {:tooltip (ds/alt "Z")
:label (fn [] (tr "shortcuts.zoom-lense-decrease"))
:command "alt+z" :command "alt+z"
:subsections [:zoom-workspace] :subsections [:zoom-workspace]
:section [:workspace] :section [:workspace]
@ -647,42 +739,49 @@
:open-viewer {:tooltip "G V" :open-viewer {:tooltip "G V"
:label (fn [] (tr "shortcuts.open-viewer"))
:command "g v" :command "g v"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dcm/go-to-viewer))} :fn #(st/emit! (dcm/go-to-viewer))}
:open-inspect {:tooltip "G I" :open-inspect {:tooltip "G I"
:label (fn [] (tr "shortcuts.open-inspect"))
:command "g i" :command "g i"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dcm/go-to-viewer :section :inspect))} :fn #(st/emit! (dcm/go-to-viewer :section :inspect))}
:open-comments {:tooltip "G C" :open-comments {:tooltip "G C"
:label (fn [] (tr "shortcuts.open-comments"))
:command "g c" :command "g c"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dcm/go-to-viewer :section :comments))} :fn #(st/emit! (dcm/go-to-viewer :section :comments))}
:open-dashboard {:tooltip "G D" :open-dashboard {:tooltip "G D"
:label (fn [] (tr "shortcuts.open-dashboard"))
:command "g d" :command "g d"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dcm/go-to-dashboard-recent))} :fn #(st/emit! (dcm/go-to-dashboard-recent))}
:select-prev {:tooltip (ds/shift "tab") :select-prev {:tooltip (ds/shift "tab")
:label (fn [] (tr "shortcuts.select-prev"))
:command "shift+tab" :command "shift+tab"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/select-prev-shape))} :fn #(st/emit! (dw/select-prev-shape))}
:select-next {:tooltip ds/tab :select-next {:tooltip ds/tab
:label (fn [] (tr "shortcuts.select-next"))
:command "tab" :command "tab"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
:fn #(st/emit! (dw/select-next-shape))} :fn #(st/emit! (dw/select-next-shape))}
:select-parent-layer {:tooltip (ds/shift ds/enter) :select-parent-layer {:tooltip (ds/shift ds/enter)
:label (fn [] (tr "shortcuts.select-parent-layer"))
:command "shift+enter" :command "shift+enter"
:subsections [:navigation-workspace] :subsections [:navigation-workspace]
:section [:workspace] :section [:workspace]
@ -691,24 +790,28 @@
:bool-union {:tooltip (ds/meta (ds/alt "U")) :bool-union {:tooltip (ds/meta (ds/alt "U"))
:label (fn [] (tr "shortcuts.bool-union"))
:command (ds/c-mod "alt+u") :command (ds/c-mod "alt+u")
:subsections [:shape] :subsections [:shape]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/create-bool :union))} :fn #(emit-when-no-readonly (dw/create-bool :union))}
:bool-difference {:tooltip (ds/meta (ds/alt "D")) :bool-difference {:tooltip (ds/meta (ds/alt "D"))
:label (fn [] (tr "shortcuts.bool-difference"))
:command (ds/c-mod "alt+d") :command (ds/c-mod "alt+d")
:subsections [:shape] :subsections [:shape]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/create-bool :difference))} :fn #(emit-when-no-readonly (dw/create-bool :difference))}
:bool-intersection {:tooltip (ds/meta (ds/alt "I")) :bool-intersection {:tooltip (ds/meta (ds/alt "I"))
:label (fn [] (tr "shortcuts.bool-intersection"))
:command (ds/c-mod "alt+i") :command (ds/c-mod "alt+i")
:subsections [:shape] :subsections [:shape]
:section [:workspace] :section [:workspace]
:fn #(emit-when-no-readonly (dw/create-bool :intersection))} :fn #(emit-when-no-readonly (dw/create-bool :intersection))}
:bool-exclude {:tooltip (ds/meta (ds/alt "E")) :bool-exclude {:tooltip (ds/meta (ds/alt "E"))
:label (fn [] (tr "shortcuts.bool-exclude"))
:command (ds/c-mod "alt+e") :command (ds/c-mod "alt+e")
:subsections [:shape] :subsections [:shape]
:section [:workspace] :section [:workspace]
@ -716,6 +819,7 @@
;; THEME ;; THEME
:toggle-theme {:tooltip (ds/alt "M") :toggle-theme {:tooltip (ds/alt "M")
:label (fn [] (tr "shortcuts.toggle-theme"))
:command (ds/a-mod "m") :command (ds/a-mod "m")
:subsections [:generic :basics] :subsections [:generic :basics]
:section [:workspace :basics] :section [:workspace :basics]
@ -725,6 +829,7 @@
;; PLUGINS ;; PLUGINS
:plugins {:tooltip (ds/meta (ds/alt "P")) :plugins {:tooltip (ds/meta (ds/alt "P"))
:label (fn [] (tr "shortcuts.plugins"))
:command (ds/c-mod "alt+p") :command (ds/c-mod "alt+p")
:subsections [:generic :basics] :subsections [:generic :basics]
:section [:workspace :basics] :section [:workspace :basics]
@ -740,14 +845,66 @@
:fn #(emit-when-no-readonly (dp/open-preview-selected))}}) :fn #(emit-when-no-readonly (dp/open-preview-selected))}})
(def opacity-shortcuts (def opacity-shortcuts
(into {} (->> {:opacity-0 {:label (fn [] (tr "shortcuts.opacity-0"))
(range 10) :tooltip "0"
(map (fn [n] [(keyword (str "opacity-" n)) :command ["0" "num0"]
{:tooltip (str n) :section [:workspace]
:command [(str n) (str "num" n)] :subsections [:modify-layers]
:section [:workspace] :fn #(emit-when-no-readonly (dwly/pressed-opacity 0))}
:subsections [:modify-layers] :opacity-1 {:label (fn [] (tr "shortcuts.opacity-1"))
:fn #(emit-when-no-readonly (dwly/pressed-opacity n))}]))))) :tooltip "1"
:command ["1" "num1"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 1))}
:opacity-2 {:label (fn [] (tr "shortcuts.opacity-2"))
:tooltip "2"
:command ["2" "num2"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 2))}
:opacity-3 {:label (fn [] (tr "shortcuts.opacity-3"))
:tooltip "3"
:command ["3" "num3"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 3))}
:opacity-4 {:label (fn [] (tr "shortcuts.opacity-4"))
:tooltip "4"
:command ["4" "num4"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 4))}
:opacity-5 {:label (fn [] (tr "shortcuts.opacity-5"))
:tooltip "5"
:command ["5" "num5"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 5))}
:opacity-6 {:label (fn [] (tr "shortcuts.opacity-6"))
:tooltip "6"
:command ["6" "num6"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 6))}
:opacity-7 {:label (fn [] (tr "shortcuts.opacity-7"))
:tooltip "7"
:command ["7" "num7"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 7))}
:opacity-8 {:label (fn [] (tr "shortcuts.opacity-8"))
:tooltip "8"
:command ["8" "num8"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 8))}
:opacity-9 {:label (fn [] (tr "shortcuts.opacity-9"))
:tooltip "9"
:command ["9" "num9"]
:section [:workspace]
:subsections [:modify-layers]
:fn #(emit-when-no-readonly (dwly/pressed-opacity 9))}})
(def shortcuts (def shortcuts
(cond-> (merge base-shortcuts opacity-shortcuts dwtxts/shortcuts) (cond-> (merge base-shortcuts opacity-shortcuts dwtxts/shortcuts)

View File

@ -17,6 +17,7 @@
[app.main.fonts :as fonts] [app.main.fonts :as fonts]
[app.main.refs :as refs] [app.main.refs :as refs]
[app.main.store :as st] [app.main.store :as st]
[app.util.i18n :refer [tr]]
[cuerdas.core :as str] [cuerdas.core :as str]
[okulary.core :as l])) [okulary.core :as l]))
@ -238,36 +239,42 @@
(def shortcuts (def shortcuts
{:underline {:tooltip (ds/meta "U") {:underline {:tooltip (ds/meta "U")
:label (fn [] (tr "shortcuts.underline"))
:command (ds/c-mod "u") :command (ds/c-mod "u")
:subsections [:text-editor] :subsections [:text-editor]
:section [:workspace] :section [:workspace]
:fn #(update-attrs-when-no-readonly {:text-decoration "toggle-underline"})} :fn #(update-attrs-when-no-readonly {:text-decoration "toggle-underline"})}
:line-through {:tooltip (ds/alt (ds/meta-shift "5")) :line-through {:tooltip (ds/alt (ds/meta-shift "5"))
:label (fn [] (tr "shortcuts.line-through"))
:command "alt+shift+5" :command "alt+shift+5"
:subsections [:text-editor] :subsections [:text-editor]
:section [:workspace] :section [:workspace]
:fn #(update-attrs-when-no-readonly {:text-decoration "toggle-line-through"})} :fn #(update-attrs-when-no-readonly {:text-decoration "toggle-line-through"})}
:font-size-inc {:tooltip (ds/meta-shift ">") :font-size-inc {:tooltip (ds/meta-shift ">")
:label (fn [] (tr "shortcuts.font-size-inc"))
:command (ds/c-mod "shift+.") :command (ds/c-mod "shift+.")
:subsections [:text-editor] :subsections [:text-editor]
:section [:workspace] :section [:workspace]
:fn #(update-attrs-when-no-readonly {:font-size-inc true})} :fn #(update-attrs-when-no-readonly {:font-size-inc true})}
:font-size-dec {:tooltip (ds/meta-shift "<") :font-size-dec {:tooltip (ds/meta-shift "<")
:label (fn [] (tr "shortcuts.font-size-dec"))
:command (ds/c-mod "shift+,") :command (ds/c-mod "shift+,")
:subsections [:text-editor] :subsections [:text-editor]
:section [:workspace] :section [:workspace]
:fn #(update-attrs-when-no-readonly {:font-size-dec true})} :fn #(update-attrs-when-no-readonly {:font-size-dec true})}
:bold {:tooltip (ds/meta "b") :bold {:tooltip (ds/meta "b")
:label (fn [] (tr "shortcuts.bold"))
:command (ds/c-mod "b") :command (ds/c-mod "b")
:subsections [:text-editor] :subsections [:text-editor]
:section [:workspace] :section [:workspace]
:fn #(update-attrs-when-no-readonly {:font-variant-id "toggle-bold"})} :fn #(update-attrs-when-no-readonly {:font-variant-id "toggle-bold"})}
:italic {:tooltip (ds/meta "i") :italic {:tooltip (ds/meta "i")
:label (fn [] (tr "shortcuts.italic"))
:command (ds/c-mod "i") :command (ds/c-mod "i")
:subsections [:text-editor] :subsections [:text-editor]
:section [:workspace] :section [:workspace]

View File

@ -17,7 +17,7 @@
[app.main.data.workspace.tokens.errors :as wte] [app.main.data.workspace.tokens.errors :as wte]
[app.main.store :as st] [app.main.store :as st]
[app.util.dom :as dom] [app.util.dom :as dom]
[app.util.i18n :as i18n] [app.util.i18n :as i18n :refer [tr]]
[beicon.v2.core :as rx] [beicon.v2.core :as rx]
[cuerdas.core :as str])) [cuerdas.core :as str]))
@ -54,12 +54,12 @@
(let [type->tokens (group-by-value unknown-tokens)] (let [type->tokens (group-by-value unknown-tokens)]
(l/wrn :hint "unsupported token types found during import" (l/wrn :hint "unsupported token types found during import"
:tokens (str/join ", " (map (fn [[path type]] (str path " (" type ")")) unknown-tokens))) :tokens (str/join ", " (map (fn [[path type]] (str path " (" type ")")) unknown-tokens)))
(ntf/show {:content (i18n/tr "workspace.tokens.unknown-token-type-message") (ntf/show {:content (tr "workspace.tokens.unknown-token-type-message")
:is-html true :is-html true
:detail (->> (for [[token-type token-paths] type->tokens] :detail (->> (for [[token-type token-paths] type->tokens]
(str (i18n/tr "workspace.tokens.unknown-token-type-section" (str (tr "workspace.tokens.unknown-token-type-section"
(dom/escape-html token-type) (dom/escape-html token-type)
(i18n/tr "labels.warning-count" (i18n/c (count token-paths)))) (tr "labels.warning-count" (i18n/c (count token-paths))))
"<ul>" "<ul>"
(->> token-paths (->> token-paths
(sort) (sort)

View File

@ -64,7 +64,7 @@
(def ^:private schema:login-form (def ^:private schema:login-form
[:map {:title "LoginForm"} [:map {:title "LoginForm"}
[:email [::sm/email {:error/code "errors.invalid-email"}]] [:email [::sm/email {:error/fn #(tr "errors.invalid-email")}]]
[:password {:optional true} [:string {:min 1}]] [:password {:optional true} [:string {:min 1}]]
[:invitation-token {:optional true} [:invitation-token {:optional true}
[:string {:min 1}]]]) [:string {:min 1}]]])

View File

@ -22,7 +22,7 @@
[:token ::sm/text] [:token ::sm/text]
[:password-1 ::sm/password] [:password-1 ::sm/password]
[:password-2 ::sm/password]] [:password-2 ::sm/password]]
[:fn {:error/code "errors.password-invalid-confirmation" [:fn {:error/fn #(tr "errors.password-invalid-confirmation")
:error/field :password-2} :error/field :password-2}
(fn [{:keys [password-1 password-2]}] (fn [{:keys [password-1 password-2]}]
(= password-1 password-2))]]) (= password-1 password-2))]])
@ -32,6 +32,12 @@
(let [{:keys [type code] :as edata} (ex-data error)] (let [{:keys [type code] :as edata} (ex-data error)]
(if (= [:validation :weak-password] [type code]) (if (= [:validation :weak-password] [type code])
(let [details (:details edata) (let [details (:details edata)
;; Execution time translation strings (keys sent by the backend):
;; (tr "errors.weak-password.too-short")
;; (tr "errors.weak-password.insufficient-digits")
;; (tr "errors.weak-password.insufficient-lowercase")
;; (tr "errors.weak-password.insufficient-uppercase")
;; (tr "errors.weak-password.insufficient-special")
options (when (seq details) options (when (seq details)
(mapv tr details))] (mapv tr details))]
(swap! form assoc-in [:extra-errors :password-1] (swap! form assoc-in [:extra-errors :password-1]

View File

@ -114,6 +114,12 @@
(set-field-error! :password {:message (tr "errors.email-as-password")}) (set-field-error! :password {:message (tr "errors.email-as-password")})
[:validation :weak-password] [:validation :weak-password]
;; Execution time translation strings (keys sent by the backend):
;; (tr "errors.weak-password.too-short")
;; (tr "errors.weak-password.insufficient-digits")
;; (tr "errors.weak-password.insufficient-lowercase")
;; (tr "errors.weak-password.insufficient-uppercase")
;; (tr "errors.weak-password.insufficient-special")
(let [options (when (seq (:details edata)) (let [options (when (seq (:details edata))
(mapv tr (:details edata)))] (mapv tr (:details edata)))]
(set-field-error! :password {:message (tr "errors.weak-password") (set-field-error! :password {:message (tr "errors.weak-password")

View File

@ -198,6 +198,8 @@
[:div {:id (dm/str "error-" input-name) [:div {:id (dm/str "error-" input-name)
:class (stl/css :error) :class (stl/css :error)
:data-testid (dm/str data-testid "-error")} :data-testid (dm/str data-testid "-error")}
;; legacy deprecated errors, dynamic codes by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
(if (vector? code) (if (vector? code)
(tr (nth code 0) (i18n/c (nth code 1))) (tr (nth code 0) (i18n/c (nth code 1)))
(tr code))]) (tr code))])
@ -257,6 +259,8 @@
[:span {:class (stl/css :error)} (:message error)] [:span {:class (stl/css :error)} (:message error)]
(and touched? (:code error)) (and touched? (:code error))
;; legacy errors, dynamic codes by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
[:span {:class (stl/css :error)} (tr (:code error))] [:span {:class (stl/css :error)} (tr (:code error))]
(string? hint) (string? hint)

View File

@ -336,6 +336,8 @@
[:> text* {:class (stl/css :error-message) [:> text* {:class (stl/css :error-message)
:as "span" :as "span"
:typography t/body-small} :typography t/body-small}
;; backend-provided error key, dynamic by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
(if (some? (:error entry)) (if (some? (:error entry))
(tr (:error entry)) (tr (:error entry))
(tr "dashboard.import.analyze-error"))] (tr "dashboard.import.analyze-error"))]
@ -344,6 +346,8 @@
[:> text* {:class (stl/css :error-message) [:> text* {:class (stl/css :error-message)
:as "span" :as "span"
:typography t/body-small} :typography t/body-small}
;; backend-provided error key, dynamic by design
#_{:clj-kondo/ignore [:penpot/tr-dynamic]}
(if (some? (:error entry)) (if (some? (:error entry))
(tr (:error entry)) (tr (:error entry))
(tr "labels.error"))] (tr "labels.error"))]

View File

@ -400,10 +400,10 @@
(and can-change-rol (or member-is-admin member-is-editor member-is-viewer))) (and can-change-rol (or member-is-admin member-is-editor member-is-viewer)))
role (cond role (cond
member-is-owner "labels.owner" member-is-owner (tr "labels.owner")
member-is-admin "labels.admin" member-is-admin (tr "labels.admin")
member-is-editor "labels.editor" member-is-editor (tr "labels.editor")
:else "labels.viewer") :else (tr "labels.viewer"))
on-show (mf/use-fn #(reset! show? true)) on-show (mf/use-fn #(reset! show? true))
on-hide (mf/use-fn #(reset! show? false))] on-hide (mf/use-fn #(reset! show? false))]
@ -414,10 +414,10 @@
:aria-labelledby "role-label-id" :aria-labelledby "role-label-id"
:on-click on-show} :on-click on-show}
[:span {:class (stl/css :rol-label) [:span {:class (stl/css :rol-label)
:id "role-label-id"} (tr role)] :id "role-label-id"} role]
arrow-icon] arrow-icon]
[:div {:class (stl/css :rol-selector)} [:div {:class (stl/css :rol-selector)}
[:span {:class (stl/css :rol-label)} (tr role)]]) [:span {:class (stl/css :rol-label)} role]])
[:& dropdown {:show @show? :on-close on-hide :dropdown-id (str "member-role-" (:id member))} [:& dropdown {:show @show? :on-close on-hide :dropdown-id (str "member-role-" (:id member))}
[:ul {:class (stl/css :roles-dropdown) [:ul {:class (stl/css :roles-dropdown)
@ -883,7 +883,13 @@
[:div {:class (stl/css :invitation-list)} [:div {:class (stl/css :invitation-list)}
(for [{:keys [email role]} selected] (for [{:keys [email role]} selected]
[:p {:key email} [:p {:key email}
(str "- " email " (" (tr (str "labels." (name role))) ")")])]] (str "- " email " ("
(cond
(= role :owner) (tr "labels.owner")
(= role :admin) (tr "labels.admin")
(= role :editor) (tr "labels.editor")
:else (tr "labels.viewer"))
")")])]]
[:div {:class (stl/css :modal-footer)} [:div {:class (stl/css :modal-footer)}
[:div {:class (stl/css :action-buttons :modal-invitation-action-buttons)} [:div {:class (stl/css :action-buttons :modal-invitation-action-buttons)}
@ -915,7 +921,7 @@
(mf/defc select-organization-modal (mf/defc select-organization-modal
{::mf/register modal/components {::mf/register modal/components
::mf/register-as :select-organization-modal} ::mf/register-as :select-organization-modal}
[{:keys [organizations organizations-allowed current-organization on-confirm title-key text-key choose-key placeholder-key accept-key cancel-key info-message-key description-key team-id]}] [{:keys [organizations organizations-allowed current-organization on-confirm title text choose placeholder accept cancel info-message description team-id]}]
(let [current-organization-id (:id current-organization) (let [current-organization-id (:id current-organization)
has-current-org? (some? current-organization) has-current-org? (some? current-organization)
valid-organizations (mf/with-memo [organizations current-organization-id] valid-organizations (mf/with-memo [organizations current-organization-id]
@ -992,30 +998,30 @@
[:div {:class (stl/css :modal-select-organization-container :modal-container)} [:div {:class (stl/css :modal-select-organization-container :modal-container)}
[:div {:class (stl/css :modal-select-organization-header)} [:div {:class (stl/css :modal-select-organization-header)}
[:h2 {:class (stl/css :modal-select-organization-title)} [:h2 {:class (stl/css :modal-select-organization-title)}
(tr title-key)] title]
[:button {:class (stl/css :modal-close-btn) [:button {:class (stl/css :modal-close-btn)
:on-click modal/hide!} deprecated-icon/close]] :on-click modal/hide!} deprecated-icon/close]]
(when text-key (when text
[:div {:class (stl/css :modal-content :modal-select-organization-text)} (tr text-key)]) [:div {:class (stl/css :modal-content :modal-select-organization-text)} text])
[:div {:class (stl/css :modal-select-organization-body)} [:div {:class (stl/css :modal-select-organization-body)}
(when (or description-key info-message-key) (when (or description info-message)
[:div {:class (stl/css :modal-select-organization-info)} [:div {:class (stl/css :modal-select-organization-info)}
(when description-key (when description
[:div [:div
(tr description-key)]) description])
(when info-message-key (when info-message
[:div [:div
(tr info-message-key)])]) info-message])])
[:div {:class (stl/css :modal-select-organization-content)} [:div {:class (stl/css :modal-select-organization-content)}
(tr choose-key)] choose]
[:> combobox* {:id "selected-id" [:> combobox* {:id "selected-id"
:class (stl/css :team-member) :class (stl/css :team-member)
:options options :options options
:select-only true :select-only true
:placeholder (tr placeholder-key) :placeholder placeholder
:on-change on-change :on-change on-change
:default-selected (if has-current-org? :default-selected (if has-current-org?
(str current-organization-id) (str current-organization-id)
@ -1042,14 +1048,14 @@
:variant "secondary" :variant "secondary"
:type "button" :type "button"
:on-click modal/hide!} :on-click modal/hide!}
(tr cancel-key)] cancel]
[:> button* [:> button*
{:class (stl/css :accept-btn) {:class (stl/css :accept-btn)
:variant "primary" :variant "primary"
:type "button" :type "button"
:disabled disabled? :disabled disabled?
:on-click on-confirm'} :on-click on-confirm'}
(tr accept-key)]]]]])) accept]]]]]))
(mf/defc invitation-section* (mf/defc invitation-section*
{::mf/private true} {::mf/private true}
@ -1114,7 +1120,7 @@
(and (= :restriction type) (and (= :restriction type)
(= :max-quote-reached code)) (= :max-quote-reached code))
(st/emit! (ntf/error (tr "errors.max-quote-reached" (:target error)))) (st/emit! (ntf/error (tr "errors.max-quota-reached" (:target error))))
(or (= :member-is-muted code) (or (= :member-is-muted code)
(= :email-has-permanent-bounces code) (= :email-has-permanent-bounces code)

View File

@ -8,7 +8,6 @@
"The files export dialog/modal" "The files export dialog/modal"
(:require-macros [app.main.style :as stl]) (:require-macros [app.main.style :as stl])
(:require (:require
[app.common.data :as d]
[app.common.data.macros :as dm] [app.common.data.macros :as dm]
[app.config :as cf] [app.config :as cf]
[app.main.data.exports.files :as fexp] [app.main.data.exports.files :as fexp]
@ -157,19 +156,6 @@
:key (name type)} :key (name type)}
[:label {:for (str "export-" type) [:label {:for (str "export-" type)
:class (stl/css :export-option-label)} :class (stl/css :export-option-label)}
;; Execution time translation strings:
;; (tr "files-export-modal.options.include-libraries.title")
;; (tr "files-export-modal.options.include-libraries.message")
;; (tr "files-export-modal.options.merge-libraries.title")
;; (tr "files-export-modal.options.merge-libraries.message")
;; (tr "files-export-modal.options.detach-libraries.title")
;; (tr "files-export-modal.options.detach-libraries.message")
;; (tr "files-export-modal.options.link-later.title")
;; (tr "files-export-modal.options.link-later.message")
[:span {:class (stl/css-case [:span {:class (stl/css-case
:option-icon-wrapper true :option-icon-wrapper true
:checked (= selected type))} :checked (= selected type))}
@ -185,9 +171,17 @@
[:> heading* {:level 3 [:> heading* {:level 3
:typography t/body-large :typography t/body-large
:class (stl/css :option-title)} :class (stl/css :option-title)}
(tr (dm/str "files-export-modal.options." (d/name type) ".title"))] (case type
:include-libraries (tr "files-export-modal.options.include-libraries.title")
:merge-libraries (tr "files-export-modal.options.merge-libraries.title")
:detach-libraries (tr "files-export-modal.options.detach-libraries.title")
:link-later (tr "files-export-modal.options.link-later.title"))]
[:> text* {:as "p" :typography t/body-large :class (stl/css :modal-msg)} [:> text* {:as "p" :typography t/body-large :class (stl/css :modal-msg)}
(tr (dm/str "files-export-modal.options." (d/name type) ".message"))]] (case type
:include-libraries (tr "files-export-modal.options.include-libraries.message")
:merge-libraries (tr "files-export-modal.options.merge-libraries.message")
:detach-libraries (tr "files-export-modal.options.detach-libraries.message")
:link-later (tr "files-export-modal.options.link-later.message"))]]
[:input {:type "radio" [:input {:type "radio"
:class (stl/css :option-input) :class (stl/css :option-input)

View File

@ -107,28 +107,27 @@
(when (:text-decoration style) (when (:text-decoration style)
[:div {:class (stl/css :text-row)} [:div {:class (stl/css :text-row)}
[:div {:class (stl/css :global/attr-label)} "Text Decoration"] [:div {:class (stl/css :global/attr-label)} "Text Decoration"]
;; Execution time translation strings:
;; (tr "inspect.attributes.typography.text-decoration.none")
;; (tr "inspect.attributes.typography.text-decoration.strikethrough")
;; (tr "inspect.attributes.typography.text-decoration.underline")
[:div {:class (stl/css :global/attr-value)} [:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :text-decoration)} [:> copy-button* {:data (copy-style-data style :text-decoration)}
[:div {:class (stl/css :button-children)} [:div {:class (stl/css :button-children)}
(tr (dm/str "inspect.attributes.typography.text-decoration." (:text-decoration style)))]]]]) (case (:text-decoration style)
"none" (tr "inspect.attributes.typography.text-decoration.none")
"underline" (tr "inspect.attributes.typography.text-decoration.underline")
;; The style value is "line-through", the label is "strikethrough".
"line-through" (tr "inspect.attributes.typography.text-decoration.strikethrough"))]]]])
(when (:text-transform style) (when (:text-transform style)
[:div {:class (stl/css :text-row)} [:div {:class (stl/css :text-row)}
[:div {:class (stl/css :global/attr-label)} "Text Transform"] [:div {:class (stl/css :global/attr-label)} "Text Transform"]
;; Execution time translation strings:
;; (tr "inspect.attributes.typography.text-transform.lowercase")
;; (tr "inspect.attributes.typography.text-transform.none")
;; (tr "inspect.attributes.typography.text-transform.capitalize")
;; (tr "inspect.attributes.typography.text-transform.uppercase")
;; (tr "inspect.attributes.typography.text-transform.unset")
[:div {:class (stl/css :global/attr-value)} [:div {:class (stl/css :global/attr-value)}
[:> copy-button* {:data (copy-style-data style :text-transform)} [:> copy-button* {:data (copy-style-data style :text-transform)}
[:div {:class (stl/css :button-children)} [:div {:class (stl/css :button-children)}
(tr (dm/str "inspect.attributes.typography.text-transform." (:text-transform style)))]]]]) (case (:text-transform style)
"lowercase" (tr "inspect.attributes.typography.text-transform.lowercase")
"none" (tr "inspect.attributes.typography.text-transform.none")
"capitalize" (tr "inspect.attributes.typography.text-transform.capitalize")
"uppercase" (tr "inspect.attributes.typography.text-transform.uppercase")
"unset" (tr "inspect.attributes.typography.text-transform.unset"))]]]])
[:> copy-button* {:data (str/trim text) [:> copy-button* {:data (str/trim text)
:class (stl/css :attributes-content-row)} :class (stl/css :attributes-content-row)}

View File

@ -69,9 +69,9 @@
[:div {:class (stl/css :warning-notice)} [:div {:class (stl/css :warning-notice)}
[:& context-notification [:& context-notification
{:level :warning {:level :warning
:content (tr (if has-organizations? :content (if has-organizations?
"modals.delete-account.info.with-organizations" (tr "modals.delete-account.info.with-organizations")
"modals.delete-account.info"))}]] (tr "modals.delete-account.info"))}]]
(when has-organizations? (when has-organizations?
[:div {:class (stl/css :organizations-section)} [:div {:class (stl/css :organizations-section)}

View File

@ -100,9 +100,9 @@
"disable-webgl-rendering") "disable-webgl-rendering")
::ev/origin "settings"}) ::ev/origin "settings"})
(du/update-profile-props {:renderer (if enabled? :wasm :svg)}) (du/update-profile-props {:renderer (if enabled? :wasm :svg)})
(ntf/success (tr (if enabled? (ntf/success (if enabled?
"webgl.toast.webgl-render-enabled" (tr "webgl.toast.webgl-render-enabled")
"webgl.toast.webgl-render-disabled"))))))] (tr "webgl.toast.webgl-render-disabled"))))))]
[:section {:class (stl/css :webgl-container)} [:section {:class (stl/css :webgl-container)}
[:header {:class (stl/css :webgl-header)} [:header {:class (stl/css :webgl-header)}
[:> heading* {:class (stl/css :title) :level 2 :typography t/title-large} (tr "dashboard.webgl-switch.title")] [:> heading* {:class (stl/css :title) :level 2 :typography t/title-large} (tr "dashboard.webgl-switch.title")]

View File

@ -30,6 +30,12 @@
:weak-password :weak-password
(let [details (:details data) (let [details (:details data)
;; Execution time translation strings (keys sent by the backend):
;; (tr "errors.weak-password.too-short")
;; (tr "errors.weak-password.insufficient-digits")
;; (tr "errors.weak-password.insufficient-lowercase")
;; (tr "errors.weak-password.insufficient-uppercase")
;; (tr "errors.weak-password.insufficient-special")
options (when (seq details) options (when (seq details)
(mapv tr details))] (mapv tr details))]
(swap! form assoc-in [:extra-errors :password-1] (swap! form assoc-in [:extra-errors :password-1]
@ -64,7 +70,7 @@
;; The old password is validated by the backend, so it only needs to be ;; The old password is validated by the backend, so it only needs to be
;; present here; it may predate the current minimum length policy. ;; present here; it may predate the current minimum length policy.
[:password-old [::sm/text {:max 500}]]] [:password-old [::sm/text {:max 500}]]]
[:fn {:error/code "errors.password-invalid-confirmation" [:fn {:error/fn #(tr "errors.password-invalid-confirmation")
:error/field :password-2} :error/field :password-2}
(fn [{:keys [password-1 password-2]}] (fn [{:keys [password-1 password-2]}]
(= password-1 password-2))]]) (= password-1 password-2))]])

View File

@ -15,6 +15,7 @@
[app.main.data.profile :as du] [app.main.data.profile :as du]
[app.main.data.shortcuts :as ds] [app.main.data.shortcuts :as ds]
[app.main.data.viewer.shortcuts :as vsc] [app.main.data.viewer.shortcuts :as vsc]
[app.main.data.workspace.grid-layout.shortcuts :as gsc]
[app.main.data.workspace.path.shortcuts :as psc] [app.main.data.workspace.path.shortcuts :as psc]
[app.main.data.workspace.shortcuts :as wsc] [app.main.data.workspace.shortcuts :as wsc]
[app.main.store :as st] [app.main.store :as st]
@ -117,13 +118,60 @@
:final-key (normalize-key event) :final-key (normalize-key event)
:finalized? true}))) :finalized? true})))
;; Shortcut labels live on the command definitions themselves as :label
;; fns (see the app.main.data.*.shortcuts namespaces), so every key stays
;; a static tr string literal visible to rehash with no declaration needed.
(def ^:private section-labels
{:basics (fn [] (tr "shortcuts.section.basics"))
:workspace (fn [] (tr "shortcuts.section.workspace"))
:dashboard (fn [] (tr "shortcuts.section.dashboard"))
:viewer (fn [] (tr "shortcuts.section.viewer"))})
(def ^:private subsection-labels
{:alignment (fn [] (tr "shortcuts.subsection.alignment"))
:edit (fn [] (tr "shortcuts.subsection.edit"))
:generic (fn [] (tr "shortcuts.subsection.generic"))
:main-menu (fn [] (tr "shortcuts.subsection.main-menu"))
:modify-layers (fn [] (tr "shortcuts.subsection.modify-layers"))
:navigation-dashboard (fn [] (tr "shortcuts.subsection.navigation-dashboard"))
:navigation-viewer (fn [] (tr "shortcuts.subsection.navigation-viewer"))
:navigation-workspace (fn [] (tr "shortcuts.subsection.navigation-workspace"))
:panels (fn [] (tr "shortcuts.subsection.panels"))
:path-editor (fn [] (tr "shortcuts.subsection.path-editor"))
:shape (fn [] (tr "shortcuts.subsection.shape"))
:text-editor (fn [] (tr "shortcuts.subsection.text-editor"))
:tools (fn [] (tr "shortcuts.subsection.tools"))
:zoom-viewer (fn [] (tr "shortcuts.subsection.zoom-viewer"))
:zoom-workspace (fn [] (tr "shortcuts.subsection.zoom-workspace"))})
(def ^:private command-labels
"id -> :label fn index over every command definition map. Labels are
defined once on the definitions; this is only an index."
(into {}
(map (fn [[k v]] [k (:label v)]))
(concat wsc/shortcuts
psc/shortcuts
dsc/shortcuts
dsc/shortcuts-sidebar-navigation
dsc/shortcut-search
dsc/shortcut-create-new-project
vsc/shortcuts
gsc/shortcuts)))
(defn translation-keyname (defn translation-keyname
[type keyname] [type keyname]
(let [translat-pre (case type (let [label-fn (case type
:sc "shortcuts." :sc (get command-labels keyname)
:sec "shortcut-section." :sec (get section-labels keyname)
:sub-sec "shortcut-subsection.")] :sub-sec (get subsection-labels keyname))]
(tr (str translat-pre (d/name keyname))))) (if (fn? label-fn)
(label-fn)
(str (case type
:sc "shortcuts."
:sec "shortcuts.section."
:sub-sec "shortcuts.subsection.")
(d/name keyname)))))
(defn- find-conflict (defn- find-conflict
[new-command all-shortcuts current-key] [new-command all-shortcuts current-key]
@ -247,13 +295,13 @@
db-subs (dissoc db-subs :basics) db-subs (dissoc db-subs :basics)
vw-subs (dissoc vw-subs :basics) vw-subs (dissoc vw-subs :basics)
all {:basics {:children {:none {:children basics}} all {:basics {:children {:none {:children basics}}
:translation (tr "shortcut-section.basics")} :translation (tr "shortcuts.section.basics")}
:workspace {:children ws-subs :workspace {:children ws-subs
:translation (tr "shortcut-section.workspace")} :translation (tr "shortcuts.section.workspace")}
:dashboard {:children db-subs :dashboard {:children db-subs
:translation (tr "shortcut-section.dashboard")} :translation (tr "shortcuts.section.dashboard")}
:viewer {:children vw-subs :viewer {:children vw-subs
:translation (tr "shortcut-section.viewer")}} :translation (tr "shortcuts.section.viewer")}}
all (walk all nil) all (walk all nil)
all-sc-names (map #(translation-keyname :sc %) all-sc-names (map #(translation-keyname :sc %)
(concat (keys workspace-sc) (concat (keys workspace-sc)
@ -316,11 +364,11 @@
vw-subs (dissoc vw-subs :basics) vw-subs (dissoc vw-subs :basics)
ws-subs (merge ws-subs pt-subs) ws-subs (merge ws-subs pt-subs)
all {:workspace {:children ws-subs all {:workspace {:children ws-subs
:translation (tr "shortcut-section.workspace")} :translation (tr "shortcuts.section.workspace")}
:dashboard {:children db-subs :dashboard {:children db-subs
:translation (tr "shortcut-section.dashboard")} :translation (tr "shortcuts.section.dashboard")}
:viewer {:children vw-subs :viewer {:children vw-subs
:translation (tr "shortcut-section.viewer")}} :translation (tr "shortcuts.section.viewer")}}
all (walk all nil) all (walk all nil)
all-sc-names (map #(translation-keyname :sc %) all-sc-names (map #(translation-keyname :sc %)
(concat (keys workspace-sc) (concat (keys workspace-sc)

View File

@ -1005,7 +1005,7 @@
[:* [:*
[:> icon-button* {:variant "ghost" [:> icon-button* {:variant "ghost"
:aria-pressed show-menu? :aria-pressed show-menu?
:aria-label (tr "shortcut-subsection.main-menu") :aria-label (tr "shortcuts.subsection.main-menu")
:on-click toggle-menu :on-click toggle-menu
:icon i/menu}] :icon i/menu}]

View File

@ -108,37 +108,43 @@
[type multiple?] [type multiple?]
(let [arity (if multiple? "multiple" "single") (let [arity (if multiple? "multiple" "single")
attribute (name (or type :multiple))] attribute (name (or type :multiple))]
;; Execution time translation strings: ;; Unknown attributes fall back to the raw key, as before.
;; (tr "workspace.undo.entry.multiple.circle") (case arity
;; (tr "workspace.undo.entry.multiple.color") "multiple"
;; (tr "workspace.undo.entry.multiple.component") (case attribute
;; (tr "workspace.undo.entry.multiple.curve") "circle" (tr "workspace.undo.entry.multiple.circle")
;; (tr "workspace.undo.entry.multiple.frame") "color" (tr "workspace.undo.entry.multiple.color")
;; (tr "workspace.undo.entry.multiple.group") "component" (tr "workspace.undo.entry.multiple.component")
;; (tr "workspace.undo.entry.multiple.media") "curve" (tr "workspace.undo.entry.multiple.curve")
;; (tr "workspace.undo.entry.multiple.multiple") "frame" (tr "workspace.undo.entry.multiple.frame")
;; (tr "workspace.undo.entry.multiple.page") "group" (tr "workspace.undo.entry.multiple.group")
;; (tr "workspace.undo.entry.multiple.path") "media" (tr "workspace.undo.entry.multiple.media")
;; (tr "workspace.undo.entry.multiple.rect") "multiple" (tr "workspace.undo.entry.multiple.multiple")
;; (tr "workspace.undo.entry.multiple.shape") "page" (tr "workspace.undo.entry.multiple.page")
;; (tr "workspace.undo.entry.multiple.text") "path" (tr "workspace.undo.entry.multiple.path")
;; (tr "workspace.undo.entry.multiple.typography") "rect" (tr "workspace.undo.entry.multiple.rect")
;; (tr "workspace.undo.entry.single.circle") "shape" (tr "workspace.undo.entry.multiple.shape")
;; (tr "workspace.undo.entry.single.color") "text" (tr "workspace.undo.entry.multiple.text")
;; (tr "workspace.undo.entry.single.component") "typography" (tr "workspace.undo.entry.multiple.typography")
;; (tr "workspace.undo.entry.single.curve") (str "workspace.undo.entry.multiple." attribute))
;; (tr "workspace.undo.entry.single.frame") "single"
;; (tr "workspace.undo.entry.single.group") (case attribute
;; (tr "workspace.undo.entry.single.image") "circle" (tr "workspace.undo.entry.single.circle")
;; (tr "workspace.undo.entry.single.media") "color" (tr "workspace.undo.entry.single.color")
;; (tr "workspace.undo.entry.single.multiple") "component" (tr "workspace.undo.entry.single.component")
;; (tr "workspace.undo.entry.single.page") "curve" (tr "workspace.undo.entry.single.curve")
;; (tr "workspace.undo.entry.single.path") "frame" (tr "workspace.undo.entry.single.frame")
;; (tr "workspace.undo.entry.single.rect") "group" (tr "workspace.undo.entry.single.group")
;; (tr "workspace.undo.entry.single.shape") "image" (tr "workspace.undo.entry.single.image")
;; (tr "workspace.undo.entry.single.text") "media" (tr "workspace.undo.entry.single.media")
;; (tr "workspace.undo.entry.single.typography") "multiple" (tr "workspace.undo.entry.single.multiple")
(tr (str/format "workspace.undo.entry.%s.%s" arity attribute)))) "page" (tr "workspace.undo.entry.single.page")
"path" (tr "workspace.undo.entry.single.path")
"rect" (tr "workspace.undo.entry.single.rect")
"shape" (tr "workspace.undo.entry.single.shape")
"text" (tr "workspace.undo.entry.single.text")
"typography" (tr "workspace.undo.entry.single.typography")
(str "workspace.undo.entry.single." attribute)))))
(defn entry->message [entry] (defn entry->message [entry]
(let [value (entry-type->message (:type entry) (= :multiple (:id entry)))] (let [value (entry-type->message (:type entry) (= :multiple (:id entry)))]

View File

@ -653,7 +653,10 @@
:text (tr "workspace.sidebar.layers.texts") :text (tr "workspace.sidebar.layers.texts")
:image (tr "workspace.sidebar.layers.images") :image (tr "workspace.sidebar.layers.images")
:shape (tr "workspace.sidebar.layers.shapes") :shape (tr "workspace.sidebar.layers.shapes")
(tr fkey)) ;; Unreachable from the UI (the menu only emits the
;; above); fall back to the raw name, which is what
;; tr would render for an unknown key anyway.
fname)
filter-icon (usi/get-shape-icon-by-type fkey)] filter-icon (usi/get-shape-icon-by-type fkey)]
[:button {:class (stl/css :layer-filter) [:button {:class (stl/css :layer-filter)

View File

@ -208,7 +208,9 @@
[:> title-bar* {:collapsable has-exports? [:> title-bar* {:collapsable has-exports?
:collapsed (not open?) :collapsed (not open?)
:on-collapsed toggle-content :on-collapsed toggle-content
:title (tr (if (> (count ids) 1) "workspace.options.export-multiple" "workspace.options.export")) :title (if (> (count ids) 1)
(tr "workspace.options.export-multiple")
(tr "workspace.options.export"))
:class (stl/css-case :title-spacing-export (not has-exports?))} :class (stl/css-case :title-spacing-export (not has-exports?))}
[:> icon-button* {:variant "ghost" [:> icon-button* {:variant "ghost"
:aria-label (tr "workspace.options.export.add-export") :aria-label (tr "workspace.options.export.add-export")

View File

@ -75,14 +75,14 @@
[:div {:class (stl/css :element-set)} [:div {:class (stl/css :element-set)}
[:div {:class (stl/css :element-title)} [:div {:class (stl/css :element-title)}
[:> title-bar* {:collapsable false [:> title-bar* {:collapsable false
:title (tr "workspace.options.pixel grid-color") :title (tr "workspace.options.pixel-grid-color")
:class (stl/css :title-spacing-page)}]] :class (stl/css :title-spacing-page)}]]
[:div {:class (stl/css :element-content)} [:div {:class (stl/css :element-content)}
[:> color-row* [:> color-row*
{:disable-gradient true {:disable-gradient true
:disable-image true :disable-image true
:title (tr "workspace.options.pixel grid-color") :title (tr "workspace.options.pixel-grid-color")
:color grid-color :color grid-color
:on-change on-grid-change :on-change on-grid-change
:origin :pixel-grid :origin :pixel-grid

View File

@ -103,7 +103,7 @@
[:> icon-button* {:variant "ghost" [:> icon-button* {:variant "ghost"
:icon i/add :icon i/add
:on-click on-start-creation :on-click on-start-creation
:aria-label (tr "workspace.tokens.add set")}]) :aria-label (tr "workspace.tokens.add-set")}])
(mf/defc sets-tree-set-group* (mf/defc sets-tree-set-group*
{::mf/private true} {::mf/private true}

View File

@ -35,9 +35,9 @@
[:div {:class (stl/css :viewport-actions-title)} [:div {:class (stl/css :viewport-actions-title)}
[:> i18n/tr-html* [:> i18n/tr-html*
{:tag-name "span" {:tag-name "span"
:content (tr (if render-context-lost? :content (if render-context-lost?
"workspace.top-bar.webgl-context-lost" (tr "workspace.top-bar.webgl-context-lost")
"workspace.top-bar.view-only"))}]] (tr "workspace.top-bar.view-only"))}]]
(if render-context-lost? (if render-context-lost?
[:> button* {:variant "primary" :on-click (fn [] (js/location.reload))} [:> button* {:variant "primary" :on-click (fn [] (js/location.reload))}
(tr "workspace.top-bar.webgl-context-lost.reload")] (tr "workspace.top-bar.webgl-context-lost.reload")]

View File

@ -197,6 +197,10 @@
(apply str/fmt value (map #(if (c? %) @% %) args))))))) (apply str/fmt value (map #(if (c? %) @% %) args)))))))
(defn tr (defn tr
"Translate a literal key, e.g. (tr \"workspace.foo\").
Always pass a string literal: rehash only detects (tr \"key\")
call sites. Never branch inside tr, hoist the conditional out:
(if cond (tr \"a\") (tr \"b\")), NOT (tr (if cond \"a\" \"b\"))."
([code] (t *current-locale* code)) ([code] (t *current-locale* code))
([code & args] (apply t *current-locale* code args))) ([code & args] (apply t *current-locale* code args)))

View File

@ -98,12 +98,14 @@
[frontend-tests.ui.comments-position-modifier-test] [frontend-tests.ui.comments-position-modifier-test]
[frontend-tests.ui.ds-controls-numeric-input-test] [frontend-tests.ui.ds-controls-numeric-input-test]
[frontend-tests.ui.gradient-handlers-test] [frontend-tests.ui.gradient-handlers-test]
[frontend-tests.ui.history-test]
[frontend-tests.ui.layout-container-multiple-test] [frontend-tests.ui.layout-container-multiple-test]
[frontend-tests.ui.measures-menu-props-test] [frontend-tests.ui.measures-menu-props-test]
[frontend-tests.ui.organization-team-switch-test] [frontend-tests.ui.organization-team-switch-test]
[frontend-tests.ui.routes-test] [frontend-tests.ui.routes-test]
[frontend-tests.ui.settings-password-schema-test] [frontend-tests.ui.settings-password-schema-test]
[frontend-tests.ui.settings-shortcuts-test] [frontend-tests.ui.settings-shortcuts-test]
[frontend-tests.ui.shortcuts-labels-test]
[frontend-tests.ui.sidebar-scroll-test] [frontend-tests.ui.sidebar-scroll-test]
[frontend-tests.util-clipboard-test] [frontend-tests.util-clipboard-test]
[frontend-tests.util-object-test] [frontend-tests.util-object-test]
@ -221,6 +223,7 @@
'frontend-tests.ui.comments-position-modifier-test 'frontend-tests.ui.comments-position-modifier-test
'frontend-tests.ui.ds-controls-numeric-input-test 'frontend-tests.ui.ds-controls-numeric-input-test
'frontend-tests.ui.gradient-handlers-test 'frontend-tests.ui.gradient-handlers-test
'frontend-tests.ui.history-test
'frontend-tests.ui.layout-container-multiple-test 'frontend-tests.ui.layout-container-multiple-test
'frontend-tests.ui.measures-menu-props-test 'frontend-tests.ui.measures-menu-props-test
'frontend-tests.ui.organization-team-switch-test 'frontend-tests.ui.organization-team-switch-test
@ -229,6 +232,7 @@
'frontend-tests.text-editor-paste-guard-test 'frontend-tests.text-editor-paste-guard-test
'frontend-tests.ui.settings-password-schema-test 'frontend-tests.ui.settings-password-schema-test
'frontend-tests.ui.settings-shortcuts-test 'frontend-tests.ui.settings-shortcuts-test
'frontend-tests.ui.shortcuts-labels-test
'frontend-tests.ui.sidebar-scroll-test 'frontend-tests.ui.sidebar-scroll-test
'frontend-tests.util-clipboard-test 'frontend-tests.util-clipboard-test
'frontend-tests.util-object-test 'frontend-tests.util-object-test

View File

@ -0,0 +1,49 @@
;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns frontend-tests.ui.history-test
(:require
[app.main.ui.workspace.sidebar.history :as history]
[app.util.i18n :as i18n]
[cljs.test :as t :include-macros true]
[frontend-tests.helpers.mock :as mock]))
;; entry-type->message resolves every undo entry type through a static
;; (tr "literal") call (see :penpot/tr-dynamic). The stub marks keys that
;; go through tr, so the test locks the exact key per type and proves
;; unknown types fall back to the raw key without translation.
(def ^:private multiple-attributes
["circle" "color" "component" "curve" "frame" "group" "media" "multiple"
"page" "path" "rect" "shape" "text" "typography"])
(def ^:private single-attributes
["circle" "color" "component" "curve" "frame" "group" "image" "media"
"multiple" "page" "path" "rect" "shape" "text" "typography"])
(t/deftest entry-type-message-uses-static-keys
(with-redefs [i18n/tr (mock/stub (fn [k] (str "TR:" k)))]
(t/testing "multiple arity resolves a literal key per attribute"
(doseq [attribute multiple-attributes]
(t/is (= (str "TR:workspace.undo.entry.multiple." attribute)
(history/entry-type->message (keyword attribute) true))
attribute)))
(t/testing "single arity resolves a literal key per attribute"
(doseq [attribute single-attributes]
(t/is (= (str "TR:workspace.undo.entry.single." attribute)
(history/entry-type->message (keyword attribute) false))
attribute)))
(t/testing "nil type reads as multiple"
(t/is (= "TR:workspace.undo.entry.single.multiple"
(history/entry-type->message nil false))))
(t/testing "unknown attributes fall back to the raw key"
(t/is (= "workspace.undo.entry.single.frobnicate"
(history/entry-type->message :frobnicate false)))
(t/is (= "workspace.undo.entry.multiple.frobnicate"
(history/entry-type->message :frobnicate true))))))

View File

@ -25,14 +25,19 @@
(defn- error-codes (defn- error-codes
"Maps every schema problem to [field error-code], mirroring how "Maps every schema problem to [field error-code], mirroring how
app.common.schema.messages resolves the message shown next to an input." app.common.schema.messages resolves the message shown next to an input
(:error/fn wins over :error/code; tr returns the bare code when no
locale data is loaded, as in tests)."
[data] [data]
(->> (:errors (sm/explain passwd/schema:password-form data)) (->> (:errors (sm/explain passwd/schema:password-form data))
(map (fn [{:keys [in schema]}] (map (fn [{:keys [in schema] :as problem}]
(let [props (m/properties schema) (let [props (m/properties schema)
tprops (m/type-properties schema)] tprops (m/type-properties schema)
efn (or (:error/fn props) (:error/fn tprops))]
[(or (:error/field props) (first in)) [(or (:error/field props) (first in))
(or (:error/code props) (:error/code tprops))]))) (if efn
(efn problem)
(or (:error/code props) (:error/code tprops)))])))
(into {}))) (into {})))
(t/deftest short-old-password-is-accepted (t/deftest short-old-password-is-accepted

View File

@ -0,0 +1,77 @@
;; This Source Code Form is subject to the terms of the Mozilla Public
;; License, v. 2.0. If a copy of the MPL was not distributed with this
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
;;
;; Copyright (c) KALEIDOS SUBSIDIARY SL
(ns frontend-tests.ui.shortcuts-labels-test
(:require
[app.main.data.dashboard.shortcuts :as dsc]
[app.main.data.viewer.shortcuts :as vsc]
[app.main.data.workspace.grid-layout.shortcuts :as gsc]
[app.main.data.workspace.path.shortcuts :as psc]
[app.main.data.workspace.shortcuts :as wsc]
[app.main.ui.shortcuts :as ss]
[app.util.i18n :as i18n]
[cljs.test :as t :include-macros true]
[frontend-tests.helpers.mock :as mock]))
;; Every shortcut command definition carries a :label fn holding a static
;; (tr "literal") (see :penpot/tr-dynamic). This locks the wiring: all
;; definition ids resolve through translation-keyname, and unknown ids
;; (stale custom shortcuts, debug commands) fall back to the raw key.
;; Exempt: :preview-frame (debug-only, no PO key) and :delete-stop
;; (colorpicker-local, never translated); both keep today's raw fallback.
(def ^:private definition-maps
[wsc/shortcuts
psc/shortcuts
dsc/shortcuts
dsc/shortcuts-sidebar-navigation
dsc/shortcut-search
dsc/shortcut-create-new-project
vsc/shortcuts
gsc/shortcuts])
(def ^:private exempt-ids
#{:preview-frame})
(def ^:private section-ids
[:basics :workspace :dashboard :viewer])
(def ^:private subsection-ids
[:alignment :basics :edit :generic :main-menu :modify-layers
:navigation-dashboard :navigation-viewer :navigation-workspace
:panels :path-editor :shape :text-editor :tools :zoom-viewer
:zoom-workspace])
(t/deftest command-definitions-carry-static-labels
(with-redefs [i18n/tr (mock/stub (fn [k] (str "TR:" k)))]
(t/testing "every definition id resolves its literal key"
(doseq [shortcuts definition-maps
[id entry] shortcuts
:when (not (contains? exempt-ids id))]
(t/is (fn? (:label entry)) (str id " has a :label fn"))
(t/is (= (str "TR:shortcuts." (name id))
(ss/translation-keyname :sc id))
(str id " resolves"))))
(t/testing "sections resolve their literal keys"
(doseq [id section-ids]
(t/is (= (str "TR:shortcuts.section." (name id))
(ss/translation-keyname :sec id))
(str id " resolves"))))
(t/testing "subsections resolve, bare basics falls back to raw"
(doseq [id (remove #{:basics} subsection-ids)]
(t/is (= (str "TR:shortcuts.subsection." (name id))
(ss/translation-keyname :sub-sec id))
(str id " resolves")))
(t/is (= "shortcuts.subsection.basics"
(ss/translation-keyname :sub-sec :basics))))
(t/testing "unknown ids fall back to the raw key"
(t/is (= "shortcuts.stale-id"
(ss/translation-keyname :sc :stale-id)))
(t/is (= "shortcuts.preview-frame"
(ss/translation-keyname :sc :preview-frame))))))

View File

@ -11,78 +11,61 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "Reeds 'n rekening?" msgstr "Reeds 'n rekening?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"Gaan jou e-pos na en klik op die skakel om te verifieer en Penpot te begin "
"gebruik."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Bevestig wagwoord" msgstr "Bevestig wagwoord"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Skep demo rekening" msgstr "Skep demo rekening"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "Wil jy dit net probeer?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Dit is 'n DEMO-diens, MOENIE vir werklike werk gebruik nie, die projekte " "Dit is 'n DEMO-diens, MOENIE vir werklike werk gebruik nie, die projekte "
"sal periodiek uitgevee word." "sal periodiek uitgevee word."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Wagwoord vergeet?" msgstr "Wagwoord vergeet?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Volle naam" msgstr "Volle naam"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Meld hier aan" msgstr "Meld hier aan"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "Meld aan"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Tik 'n nuwe wagwoord in" msgstr "Tik 'n nuwe wagwoord in"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Wagwoord suksesvol verander" msgstr "Wagwoord suksesvol verander"
@ -96,19 +79,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "Wagwoordherwinningskakel na jou inkassie gestuur." msgstr "Wagwoordherwinningskakel na jou inkassie gestuur."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Het suksesvol by die span aangesluit" msgstr "Het suksesvol by die span aangesluit"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Wagwoord" msgstr "Wagwoord"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Ten minste 8 karakters" msgstr "Ten minste 8 karakters"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "Privaatheidsbeleid" msgstr "Privaatheidsbeleid"
@ -116,56 +99,35 @@ msgstr "Privaatheidsbeleid"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Herstel Wagwoord" msgstr "Herstel Wagwoord"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Ons sal vir jou 'n e-pos stuur met instruksies" msgstr "Ons sal vir jou 'n e-pos stuur met instruksies"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "Wagwoord vergeet?" msgstr "Wagwoord vergeet?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Verander jou wagwoord" msgstr "Verander jou wagwoord"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Nog nie 'n rekening nie?" msgstr "Nog nie 'n rekening nie?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Skep 'n rekening" msgstr "Skep 'n rekening"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Skep 'n rekening" msgstr "Skep 'n rekening"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "Die oopbron-oplossing vir ontwerp en prototipering."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "Diensbepalings" msgstr "Diensbepalings"
#, unused #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
msgid "auth.terms-privacy-agreement"
msgstr ""
"Wanneer jy 'n nuwe rekening skep, stem jy in tot ons diensbepalings en "
"privaatheidsbeleid."
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Ons het 'n verifikasie-e-pos aan gestuur"
#: src/app/main/ui/onboarding/questions.cljs
#, unused
msgid "branding-illustrations-marketing-pieces"
msgstr "...handelsmerk, illustrasies, bemarkingsstukke, ens."
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "Publiseer" msgstr "Publiseer"
@ -237,50 +199,23 @@ msgstr "Deel prototipes"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "Kies Alles" msgstr "Kies Alles"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "Depubliseer" msgstr "Depubliseer"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "Spanbestuur" msgstr "Spanbestuur"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "Penpot is bedoel vir spanne. Nooi lede om saam te werk aan projekte en lêers" msgstr "Penpot is bedoel vir spanne. Nooi lede om saam te werk aan projekte en lêers"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "Span saam!" msgstr "Span saam!"
#: src/app/main/ui/dashboard/projects.cljs #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr ""
"Leer die basiese beginsels by Penpot terwyl jy pret het met hierdie "
"praktiese tutoriaal."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "Begin die tutoriaal"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.info"
msgstr "Gaan stap deur Penpot en leer sy hoofkenmerke ken."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.start"
msgstr "Begin die toer"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.title"
msgstr "Koppelvlak Deurloop"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Voeg by as Gedeelde Biblioteek" msgstr "Voeg by as Gedeelde Biblioteek"
@ -288,11 +223,11 @@ msgstr "Voeg by as Gedeelde Biblioteek"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Verander e-pos" msgstr "Verander e-pos"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(kopieer)" msgstr "(kopieer)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "Skep 'n nuwe span" msgstr "Skep 'n nuwe span"
@ -300,7 +235,7 @@ msgstr "Skep 'n nuwe span"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Jou Penpot" msgstr "Jou Penpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "Verwyder span" msgstr "Verwyder span"
@ -308,20 +243,15 @@ msgstr "Verwyder span"
msgid "dashboard.download-binary-file" msgid "dashboard.download-binary-file"
msgstr "Laai Penpot-lêer (.penpot) af" msgstr "Laai Penpot-lêer (.penpot) af"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
#, unused
msgid "dashboard.download-standard-file"
msgstr "Laai standaardlêer af (.svg + .json)"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "Dupliseer" msgstr "Dupliseer"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "Dupliseer %s lêers" msgstr "Dupliseer %s lêers"
#: src/app/main/ui/dashboard/file_menu.cljs:281 #: src/app/main/ui/dashboard/file_menu.cljs:279
msgid "dashboard.export-binary-multi" msgid "dashboard.export-binary-multi"
msgstr "Laai %s Penpot lêers (.penpot) af" msgstr "Laai %s Penpot lêers (.penpot) af"
@ -333,10 +263,6 @@ msgstr "Voer borde as PDF uit"
msgid "dashboard.export-frames.title" msgid "dashboard.export-frames.title"
msgstr "Voer as PDF uit" msgstr "Voer as PDF uit"
#, unused #: src/app/main/ui/auth/recovery.cljs:47
msgid "dashboard.export-multi"
msgstr "Voer %s Penpot lêers uit"
#: src/app/main/ui/auth/recovery.cljs:41
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "Die hersteltoken is ongeldig." msgstr "Die hersteltoken is ongeldig."

File diff suppressed because it is too large Load Diff

View File

@ -11,72 +11,60 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 5.6-dev\n" "X-Generator: Weblate 5.6-dev\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "অ্যাকাউন্ট আছে?" msgstr "অ্যাকাউন্ট আছে?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"আপনার ইমেইল চেক করুন এবং লিংকে ক্লিক করে ভেরিফাই করে Penpot ব্যবহার শুরু "
"করুন।"
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "পাসওয়ার্ড নিশ্চিত করুন" msgstr "পাসওয়ার্ড নিশ্চিত করুন"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "ডেমো অ্যাকাউন্ট তৈরী করুন" msgstr "ডেমো অ্যাকাউন্ট তৈরী করুন"
#: src/app/main/ui/auth/login.cljs:40 #: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"এটি একটি ডেমো সার্ভিস। প্রয়োজনীয় কোনো কাজে ব্যবহার করবেন না। কিছু সময় পর " "এটি একটি ডেমো সার্ভিস। প্রয়োজনীয় কোনো কাজে ব্যবহার করবেন না। কিছু সময় পর "
"প্রজেক্টগুলো মুছে ফেলা হবে।" "প্রজেক্টগুলো মুছে ফেলা হবে।"
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "পাসওয়ার্ড ভুলে গেছেন?" msgstr "পাসওয়ার্ড ভুলে গেছেন?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "পুরো নাম" msgstr "পুরো নাম"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "এখানে লগিন করুন" msgstr "এখানে লগিন করুন"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "লগিন"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "গিটহাব" msgstr "গিটহাব"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "গিটল্যাব" msgstr "গিটল্যাব"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "গুগল" msgstr "গুগল"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "ওপেনআইডি" msgstr "ওপেনআইডি"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "নতুন পাসওয়ার্ড টাইপ করুন" msgstr "নতুন পাসওয়ার্ড টাইপ করুন"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "রিকভারি টোকেন সঠিক নয়।" msgstr "রিকভারি টোকেন সঠিক নয়।"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,78 +11,61 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "Har du allerede en konto?" msgstr "Har du allerede en konto?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"Tjek din mail og klik på linket for at bekræfte og starte med at bruge "
"Penpot."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Bekræft adgangskode" msgstr "Bekræft adgangskode"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Lav demokonto" msgstr "Lav demokonto"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "Vil du bare prøve det?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Det her er en DEMO service, BRUG IKKE for rigtigt arbejde, projekterne vil " "Det her er en DEMO service, BRUG IKKE for rigtigt arbejde, projekterne vil "
"blive slettet periodevis." "blive slettet periodevis."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Glemt adgangskode?" msgstr "Glemt adgangskode?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Fulde Navn" msgstr "Fulde Navn"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Log på her" msgstr "Log på her"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "Log på"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "Github" msgstr "Github"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "Gitlab" msgstr "Gitlab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Indtast et nyt kodeord" msgstr "Indtast et nyt kodeord"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Adgangskoden er blevet ændret" msgstr "Adgangskoden er blevet ændret"
@ -94,15 +77,15 @@ msgstr "Profilen er ikke bekræftet, venligt verificer profilen før du går vid
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "Gendannelseslink for adgangskoden er sendt til din indbakke." msgstr "Gendannelseslink for adgangskoden er sendt til din indbakke."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Tilsluttet teamet med succes" msgstr "Tilsluttet teamet med succes"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Adgangskode" msgstr "Adgangskode"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Mindst 8 karakterer" msgstr "Mindst 8 karakterer"
@ -110,41 +93,31 @@ msgstr "Mindst 8 karakterer"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Gendan Adgangskode" msgstr "Gendan Adgangskode"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Vi sender dig en mail med instruktioner" msgstr "Vi sender dig en mail med instruktioner"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "Glemt adgangskode?" msgstr "Glemt adgangskode?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Skift din adgangskode" msgstr "Skift din adgangskode"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Ingen konto?" msgstr "Ingen konto?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Opret en konto" msgstr "Opret en konto"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Opret en konto" msgstr "Opret en konto"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
#, unused
msgid "auth.sidebar-tagline"
msgstr "Open-source løsningen for design og prototyping."
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Vi har sendt en bekræftelsesmail til"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Tilføj som Delt Bibliotek" msgstr "Tilføj som Delt Bibliotek"
@ -152,11 +125,11 @@ msgstr "Tilføj som Delt Bibliotek"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Skift email" msgstr "Skift email"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(kopi)" msgstr "(kopi)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "Opret nyt team" msgstr "Opret nyt team"
@ -164,15 +137,15 @@ msgstr "Opret nyt team"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Dit Penpot" msgstr "Dit Penpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "Slet team" msgstr "Slet team"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "Dublikér" msgstr "Dublikér"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "Dublikér %s filer" msgstr "Dublikér %s filer"
@ -198,7 +171,7 @@ msgstr ""
msgid "dashboard.invite-profile" msgid "dashboard.invite-profile"
msgstr "Invitér til team" msgstr "Invitér til team"
#: src/app/main/ui/dashboard/sidebar.cljs:608, src/app/main/ui/dashboard/sidebar.cljs:615, src/app/main/ui/dashboard/sidebar.cljs:620, src/app/main/ui/dashboard/team.cljs:464 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:257, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:263, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:268, src/app/main/ui/dashboard/team.cljs:464
msgid "dashboard.leave-team" msgid "dashboard.leave-team"
msgstr "Forlad team" msgstr "Forlad team"
@ -210,31 +183,31 @@ msgstr "Delte Biblioteker"
msgid "dashboard.loading-files" msgid "dashboard.loading-files"
msgstr "indlæser dine filer…" msgstr "indlæser dine filer…"
#: src/app/main/ui/dashboard/file_menu.cljs:313, src/app/main/ui/dashboard/project_menu.cljs:101 #: src/app/main/ui/dashboard/file_menu.cljs:308, src/app/main/ui/dashboard/project_menu.cljs:101
msgid "dashboard.move-to" msgid "dashboard.move-to"
msgstr "Flyt til" msgstr "Flyt til"
#: src/app/main/ui/dashboard/file_menu.cljs:277 #: src/app/main/ui/dashboard/file_menu.cljs:272
msgid "dashboard.move-to-multi" msgid "dashboard.move-to-multi"
msgstr "Flyt %s filer til" msgstr "Flyt %s filer til"
#: src/app/main/ui/dashboard/file_menu.cljs:249 #: src/app/main/ui/dashboard/file_menu.cljs:73
msgid "dashboard.move-to-other-team" msgid "dashboard.move-to-other-team"
msgstr "Flyt til andet team" msgstr "Flyt til andet team"
#: src/app/main/ui/dashboard/files.cljs:111, src/app/main/ui/dashboard/projects.cljs:259, src/app/main/ui/dashboard/projects.cljs:260 #: src/app/main/ui/dashboard/files.cljs:117, src/app/main/ui/dashboard/projects.cljs:259
msgid "dashboard.new-file" msgid "dashboard.new-file"
msgstr "+ Ny Fil" msgstr "+ Ny Fil"
#: src/app/main/data/dashboard.cljs:537, src/app/main/data/dashboard.cljs:649 #: src/app/main/data/dashboard.cljs:506, src/app/main/data/dashboard.cljs:618
msgid "dashboard.new-file-prefix" msgid "dashboard.new-file-prefix"
msgstr "Ny Fil" msgstr "Ny Fil"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ Nyt projekt" msgstr "+ Nyt projekt"
#: src/app/main/data/dashboard.cljs:290, src/app/main/data/dashboard.cljs:652 #: src/app/main/data/dashboard.cljs:259, src/app/main/data/dashboard.cljs:621
msgid "dashboard.new-project-prefix" msgid "dashboard.new-project-prefix"
msgstr "Nyt Projekt" msgstr "Nyt Projekt"
@ -242,39 +215,39 @@ msgstr "Nyt Projekt"
msgid "dashboard.no-matches-for" msgid "dashboard.no-matches-for"
msgstr "Intet match fundet for “%s“" msgstr "Intet match fundet for “%s“"
#: src/app/main/ui/dashboard/sidebar.cljs:1177 #: src/app/main/ui/dashboard/sidebar.cljs:400
msgid "dashboard.no-projects-placeholder" msgid "dashboard.no-projects-placeholder"
msgstr "Fastgjorte projekter bliver vist her" msgstr "Fastgjorte projekter bliver vist her"
#: src/app/main/ui/auth/verify_token.cljs:37 #: src/app/main/ui/auth/verify_token.cljs:38
msgid "dashboard.notifications.email-changed-successfully" msgid "dashboard.notifications.email-changed-successfully"
msgstr "Din email-adresse er blevet opdateret med succes" msgstr "Din email-adresse er blevet opdateret med succes"
#: src/app/main/ui/auth/verify_token.cljs:31 #: src/app/main/ui/auth/verify_token.cljs:32
msgid "dashboard.notifications.email-verified-successfully" msgid "dashboard.notifications.email-verified-successfully"
msgstr "Din email-adresse er blevet bekræftet med succes" msgstr "Din email-adresse er blevet bekræftet med succes"
#: src/app/main/ui/settings/password.cljs:46 #: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved" msgid "dashboard.notifications.password-saved"
msgstr "Adgangskode gemt med succes!" msgstr "Adgangskode gemt med succes!"
#: src/app/main/ui/dashboard/team.cljs:1719 #: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members" msgid "dashboard.num-of-members"
msgstr "%s medlemmer" msgstr "%s medlemmer"
#: src/app/main/ui/dashboard/file_menu.cljs:296 #: src/app/main/ui/dashboard/file_menu.cljs:294
msgid "dashboard.open-in-new-tab" msgid "dashboard.open-in-new-tab"
msgstr "Åben fil i en ny fane" msgstr "Åben fil i en ny fane"
#: src/app/main/ui/settings/password.cljs:106, src/app/main/ui/settings/password.cljs:120 #: src/app/main/ui/settings/password.cljs:112, src/app/main/ui/settings/password.cljs:126
msgid "dashboard.password-change" msgid "dashboard.password-change"
msgstr "Skift adgangskode" msgstr "Skift adgangskode"
#: src/app/main/ui/dashboard/pin_button.cljs:22, src/app/main/ui/dashboard/project_menu.cljs:96 #: src/app/main/ui/dashboard/files.cljs:122, src/app/main/ui/dashboard/project_menu.cljs:98, src/app/main/ui/dashboard/projects.cljs:251
msgid "dashboard.pin-unpin" msgid "dashboard.pin-unpin"
msgstr "Fastgør/Løsne" msgstr "Fastgør/Løsne"
#: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:59 #: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:51
msgid "dashboard.projects-title" msgid "dashboard.projects-title"
msgstr "Projekter" msgstr "Projekter"
@ -282,12 +255,7 @@ msgstr "Projekter"
msgid "dashboard.remove-account" msgid "dashboard.remove-account"
msgstr "Vil du slette din konto?" msgstr "Vil du slette din konto?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/sidebar.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:229, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
#, unused
msgid "dashboard.remove-shared"
msgstr "Fjern som Delt Bibliotek"
#: src/app/main/ui/dashboard/sidebar.cljs:282, src/app/main/ui/dashboard/sidebar.cljs:283, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
msgid "dashboard.search-placeholder" msgid "dashboard.search-placeholder"
msgstr "Søg…" msgstr "Søg…"
@ -303,47 +271,47 @@ msgstr "Vælg UI sprog"
msgid "dashboard.select-ui-theme" msgid "dashboard.select-ui-theme"
msgstr "Vælg tema" msgstr "Vælg tema"
#: src/app/main/ui/dashboard/projects.cljs:292 #: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files" msgid "dashboard.show-all-files"
msgstr "Vis alle filer" msgstr "Vis alle filer"
#: src/app/main/ui/dashboard/file_menu.cljs:99 #: src/app/main/ui/dashboard/file_menu.cljs:129
msgid "dashboard.success-delete-file" msgid "dashboard.success-delete-file"
msgstr "Din fil er blevet slettet med succes" msgstr "Din fil er blevet slettet med succes"
#: src/app/main/ui/dashboard/project_menu.cljs:63 #: src/app/main/ui/dashboard/project_menu.cljs:74
msgid "dashboard.success-delete-project" msgid "dashboard.success-delete-project"
msgstr "Dit projekt er blevet slettet med succes" msgstr "Dit projekt er blevet slettet med succes"
#: src/app/main/ui/dashboard/file_menu.cljs:94 #: src/app/main/ui/dashboard/file_menu.cljs:124
msgid "dashboard.success-duplicate-file" msgid "dashboard.success-duplicate-file"
msgstr "Din fil er blevet dublikeret med succes" msgstr "Din fil er blevet dublikeret med succes"
#: src/app/main/ui/dashboard/project_menu.cljs:35 #: src/app/main/ui/dashboard/project_menu.cljs:46
msgid "dashboard.success-duplicate-project" msgid "dashboard.success-duplicate-project"
msgstr "Dit projekt er blevet dublikeret med succes" msgstr "Dit projekt er blevet dublikeret med succes"
#: src/app/main/ui/dashboard/file_menu.cljs:133, src/app/main/ui/dashboard/grid.cljs:719, src/app/main/ui/dashboard/sidebar.cljs:193 #: src/app/main/ui/dashboard/file_menu.cljs:162, src/app/main/ui/dashboard/grid.cljs:715, src/app/main/ui/dashboard/sidebar.cljs:143
msgid "dashboard.success-move-file" msgid "dashboard.success-move-file"
msgstr "Din fil er blevet flyttet med succes" msgstr "Din fil er blevet flyttet med succes"
#: src/app/main/ui/dashboard/file_menu.cljs:132 #: src/app/main/ui/dashboard/file_menu.cljs:161
msgid "dashboard.success-move-files" msgid "dashboard.success-move-files"
msgstr "Dine filer er blevet flyttet med succes" msgstr "Dine filer er blevet flyttet med succes"
#: src/app/main/ui/dashboard/project_menu.cljs:57 #: src/app/main/ui/dashboard/project_menu.cljs:68
msgid "dashboard.success-move-project" msgid "dashboard.success-move-project"
msgstr "Dit projekt er blevet flyttet med succes" msgstr "Dit projekt er blevet flyttet med succes"
#: src/app/main/ui/dashboard/team.cljs:1663 #: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info" msgid "dashboard.team-info"
msgstr "Team info" msgstr "Team info"
#: src/app/main/ui/dashboard/team.cljs:1708 #: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members" msgid "dashboard.team-members"
msgstr "Medlemmer" msgstr "Medlemmer"
#: src/app/main/ui/dashboard/team.cljs:1723 #: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects" msgid "dashboard.team-projects"
msgstr "Team projekter" msgstr "Team projekter"
@ -375,11 +343,11 @@ msgstr "Email"
msgid "dashboard.your-name" msgid "dashboard.your-name"
msgstr "Dit navn" msgstr "Dit navn"
#: src/app/main/ui/comments.cljs:691, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436 #: src/app/main/ui/comments.cljs:719, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436
msgid "ds.confirm-cancel" msgid "ds.confirm-cancel"
msgstr "Fortryd" msgstr "Fortryd"
#: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102 #: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102
msgid "ds.confirm-ok" msgid "ds.confirm-ok"
msgstr "Ok" msgstr "Ok"
@ -391,27 +359,19 @@ msgstr "Er du sikker?"
msgid "errors.clipboard-not-implemented" msgid "errors.clipboard-not-implemented"
msgstr "Din browser kan ikke gøre denne operation" msgstr "Din browser kan ikke gøre denne operation"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "Genopretningspoletten er ugyldig." msgstr "Genopretningspoletten er ugyldig."
#, unused
msgid "labels.custom-fonts"
msgstr "Brugerdefinerede skrifttyper"
#: src/app/main/ui/dashboard/fonts.cljs:472 #: src/app/main/ui/dashboard/fonts.cljs:472
msgid "labels.font-family" msgid "labels.font-family"
msgstr "Skrifttypefamilie" msgstr "Skrifttypefamilie"
#, unused #: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:375
msgid "labels.font-providers"
msgstr "Skrifttype udbydere"
#: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:1152
msgid "labels.fonts" msgid "labels.fonts"
msgstr "Skrifttyper" msgstr "Skrifttyper"
#: src/app/main/ui/auth/recovery_request.cljs:103, src/app/main/ui/auth/register.cljs:376, src/app/main/ui/static.cljs:199, src/app/main/ui/viewer/login.cljs:122 #: src/app/main/ui/auth/recovery_request.cljs:103, src/app/main/ui/auth/register.cljs:365, src/app/main/ui/static.cljs:208, src/app/main/ui/viewer/login.cljs:132
msgid "labels.go-back" msgid "labels.go-back"
msgstr "Gå tilbage!" msgstr "Gå tilbage!"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,78 +11,61 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "¿Ya tienes una cuenta?" msgstr "¿Ya tienes una cuenta?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"Revise su correo electrónico y haga clic en el enlace para verificar y "
"comenzar a usar Penpot."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Confirmar Contraseña" msgstr "Confirmar Contraseña"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Crear cuenta demo" msgstr "Crear cuenta demo"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "¿Solo quieres probarlo?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Este es un servicio DEMO, NO LO UTILICE para trabajos reales, los proyectos " "Este es un servicio DEMO, NO LO UTILICE para trabajos reales, los proyectos "
"se borrarán periódicamente." "se borrarán periódicamente."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "¿Has olvidado tu contraseña?" msgstr "¿Has olvidado tu contraseña?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Nombre completo" msgstr "Nombre completo"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Inicie sesión aquí" msgstr "Inicie sesión aquí"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "Iniciar sesión"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "Open ID" msgstr "Open ID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Escribe una nueva contraseña" msgstr "Escribe una nueva contraseña"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Contraseña cambiada correctamente" msgstr "Contraseña cambiada correctamente"
@ -96,19 +79,19 @@ msgstr ""
"El enlace de recuperación de contraseña ha sido enviado a su bandeja de " "El enlace de recuperación de contraseña ha sido enviado a su bandeja de "
"entrada de su correo electrónico." "entrada de su correo electrónico."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Se unió al equipo con éxito" msgstr "Se unió al equipo con éxito"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Contraseña" msgstr "Contraseña"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Al menos 8 carácteres" msgstr "Al menos 8 carácteres"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "Política de privacidad" msgstr "Política de privacidad"
@ -116,56 +99,35 @@ msgstr "Política de privacidad"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Recuperar contraseña" msgstr "Recuperar contraseña"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Le enviaremos un correo electrónico con instrucciones" msgstr "Le enviaremos un correo electrónico con instrucciones"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "¿Has olvidado tu contraseña?" msgstr "¿Has olvidado tu contraseña?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "cambia tu contraseña" msgstr "cambia tu contraseña"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "¿No tienes cuenta aún?" msgstr "¿No tienes cuenta aún?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Crea una cuenta" msgstr "Crea una cuenta"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Crea una cuenta" msgstr "Crea una cuenta"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "La solución de código abierto para diseño y creación de prototipos."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "Términos de servicio" msgstr "Términos de servicio"
#, unused #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
msgid "auth.terms-privacy-agreement"
msgstr ""
"Al crear una nueva cuenta, acepta nuestros términos de servicio y política "
"de privacidad."
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Hemos enviado un correo electrónico de verificación"
#: src/app/main/ui/onboarding/questions.cljs
#, unused
msgid "branding-illustrations-marketing-pieces"
msgstr "...marca, ilustraciones, piezas de marketing, etc."
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "Publicar" msgstr "Publicar"
@ -237,57 +199,25 @@ msgstr "Compartir prototipos"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "Seleccionar todo" msgstr "Seleccionar todo"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "Despublicar" msgstr "Despublicar"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "Gestión de equipos" msgstr "Gestión de equipos"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "" msgstr ""
"Penpot está destinado a equipos. Invite a miembros a trabajar juntos en " "Penpot está destinado a equipos. Invite a miembros a trabajar juntos en "
"proyectos y archivos" "proyectos y archivos"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "¡En equipo!" msgstr "¡En equipo!"
#: src/app/main/ui/dashboard/projects.cljs #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr ""
"Aprenda los conceptos básicos en Penpot mientras se divierte con este "
"tutorial práctico."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "Iniciar el tutorial"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.title"
msgstr "Tutorial práctico"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.info"
msgstr "Date un paseo por Penpot y conoce sus principales características."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.start"
msgstr "Iniciar el recorrido"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.title"
msgstr "Tutorial de la interfaz"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Agregar como biblioteca compartida" msgstr "Agregar como biblioteca compartida"
@ -295,11 +225,11 @@ msgstr "Agregar como biblioteca compartida"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Cambiar el correo electrónico" msgstr "Cambiar el correo electrónico"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(copiar)" msgstr "(copiar)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "Crear nuevo equipo" msgstr "Crear nuevo equipo"
@ -307,7 +237,7 @@ msgstr "Crear nuevo equipo"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Tu Penpot" msgstr "Tu Penpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "Eliminar equipo" msgstr "Eliminar equipo"
@ -315,20 +245,15 @@ msgstr "Eliminar equipo"
msgid "dashboard.download-binary-file" msgid "dashboard.download-binary-file"
msgstr "Descargar el archivo Penpot (.penpot)" msgstr "Descargar el archivo Penpot (.penpot)"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
#, unused
msgid "dashboard.download-standard-file"
msgstr "Descargar archivo estándar (.svg + .json)"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "Duplicar" msgstr "Duplicar"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "Duplicar %s archivos" msgstr "Duplicar %s archivos"
#: src/app/main/ui/dashboard/file_menu.cljs:281 #: src/app/main/ui/dashboard/file_menu.cljs:279
msgid "dashboard.export-binary-multi" msgid "dashboard.export-binary-multi"
msgstr "Descargar %s archivos Penpot (.penpot)" msgstr "Descargar %s archivos Penpot (.penpot)"
@ -340,10 +265,6 @@ msgstr "Exportar tableros como PDF"
msgid "dashboard.export-frames.title" msgid "dashboard.export-frames.title"
msgstr "Exportar como PDF" msgstr "Exportar como PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "Exportar %s archivos de Penpot"
#: src/app/main/ui/exports/assets.cljs:108 #: src/app/main/ui/exports/assets.cljs:108
msgid "dashboard.export-multiple.selected" msgid "dashboard.export-multiple.selected"
msgstr "%s de %s elementos seleccionados" msgstr "%s de %s elementos seleccionados"
@ -370,11 +291,6 @@ msgstr "No hay elementos con configuración de exportación."
msgid "dashboard.export-shapes.title" msgid "dashboard.export-shapes.title"
msgstr "Selección de exportación" msgstr "Selección de exportación"
#: src/app/main/ui/dashboard/file_menu.cljs:262
#, unused
msgid "dashboard.export-standard-multi"
msgstr "Descargar %s archivos estándar (.svg + .json)"
#: src/app/main/ui/dashboard/import.cljs:137 #: src/app/main/ui/dashboard/import.cljs:137
msgid "dashboard.import.progress.process-typographies" msgid "dashboard.import.progress.process-typographies"
msgstr "Procesamiento de tipografías" msgstr "Procesamiento de tipografías"
@ -391,7 +307,7 @@ msgstr "Subiendo archivo: %s"
msgid "dashboard.invite-profile" msgid "dashboard.invite-profile"
msgstr "Invitar a la gente" msgstr "Invitar a la gente"
#: src/app/main/ui/dashboard/sidebar.cljs:608, src/app/main/ui/dashboard/sidebar.cljs:615, src/app/main/ui/dashboard/sidebar.cljs:620, src/app/main/ui/dashboard/team.cljs:464 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:257, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:263, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:268, src/app/main/ui/dashboard/team.cljs:464
msgid "dashboard.leave-team" msgid "dashboard.leave-team"
msgstr "dejar el equipo" msgstr "dejar el equipo"
@ -403,7 +319,7 @@ msgstr "Bibliotecas y plantillas"
msgid "dashboard.libraries-and-templates.explore" msgid "dashboard.libraries-and-templates.explore"
msgstr "Explore más de ellos y sepa cómo contribuir" msgstr "Explore más de ellos y sepa cómo contribuir"
#: src/app/main/ui/dashboard/import.cljs:774, src/app/main/ui/workspace/libraries.cljs:146 #: src/app/main/ui/dashboard/import.cljs:816, src/app/main/ui/workspace/libraries.cljs:229
msgid "dashboard.libraries-and-templates.import-error" msgid "dashboard.libraries-and-templates.import-error"
msgstr "Hubo un problema al importar la plantilla. La plantilla no fue importada." msgstr "Hubo un problema al importar la plantilla. La plantilla no fue importada."
@ -419,31 +335,31 @@ msgstr "cargando tus archivos…"
msgid "dashboard.loading-fonts" msgid "dashboard.loading-fonts"
msgstr "cargando tus fuentes…" msgstr "cargando tus fuentes…"
#: src/app/main/ui/dashboard/file_menu.cljs:313, src/app/main/ui/dashboard/project_menu.cljs:101 #: src/app/main/ui/dashboard/file_menu.cljs:308, src/app/main/ui/dashboard/project_menu.cljs:101
msgid "dashboard.move-to" msgid "dashboard.move-to"
msgstr "Mover a" msgstr "Mover a"
#: src/app/main/ui/dashboard/file_menu.cljs:277 #: src/app/main/ui/dashboard/file_menu.cljs:272
msgid "dashboard.move-to-multi" msgid "dashboard.move-to-multi"
msgstr "Mover %s archivos a" msgstr "Mover %s archivos a"
#: src/app/main/ui/dashboard/file_menu.cljs:249 #: src/app/main/ui/dashboard/file_menu.cljs:73
msgid "dashboard.move-to-other-team" msgid "dashboard.move-to-other-team"
msgstr "Pasar a otro equipo" msgstr "Pasar a otro equipo"
#: src/app/main/ui/dashboard/files.cljs:111, src/app/main/ui/dashboard/projects.cljs:259, src/app/main/ui/dashboard/projects.cljs:260 #: src/app/main/ui/dashboard/files.cljs:117, src/app/main/ui/dashboard/projects.cljs:259
msgid "dashboard.new-file" msgid "dashboard.new-file"
msgstr "+ Nuevo archivo" msgstr "+ Nuevo archivo"
#: src/app/main/data/dashboard.cljs:537, src/app/main/data/dashboard.cljs:649 #: src/app/main/data/dashboard.cljs:506, src/app/main/data/dashboard.cljs:618
msgid "dashboard.new-file-prefix" msgid "dashboard.new-file-prefix"
msgstr "Archivo nuevo" msgstr "Archivo nuevo"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ Nuevo proyecto" msgstr "+ Nuevo proyecto"
#: src/app/main/data/dashboard.cljs:290, src/app/main/data/dashboard.cljs:652 #: src/app/main/data/dashboard.cljs:259, src/app/main/data/dashboard.cljs:621
msgid "dashboard.new-project-prefix" msgid "dashboard.new-project-prefix"
msgstr "Nuevo proyecto" msgstr "Nuevo proyecto"
@ -451,35 +367,22 @@ msgstr "Nuevo proyecto"
msgid "dashboard.no-matches-for" msgid "dashboard.no-matches-for"
msgstr "No se encontraron coincidencias para \"%s\"" msgstr "No se encontraron coincidencias para \"%s\""
#: src/app/main/ui/dashboard/sidebar.cljs:1177 #: src/app/main/ui/dashboard/sidebar.cljs:400
msgid "dashboard.no-projects-placeholder" msgid "dashboard.no-projects-placeholder"
msgstr "Los proyectos fijados aparecerán aquí" msgstr "Los proyectos fijados aparecerán aquí"
#: src/app/main/ui/auth/verify_token.cljs:37 #: src/app/main/ui/auth/verify_token.cljs:38
msgid "dashboard.notifications.email-changed-successfully" msgid "dashboard.notifications.email-changed-successfully"
msgstr "Su dirección de correo electrónico se ha actualizado correctamente" msgstr "Su dirección de correo electrónico se ha actualizado correctamente"
#: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:302, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:234 #: src/app/main/ui/workspace/tokens/management/forms/shadow.cljs:302, src/app/main/ui/workspace/tokens/management/forms/typography.cljs:234, ../common/src/app/common/files/tokens.cljc:217, ../common/src/app/common/files/tokens.cljc:298, ../common/src/app/common/files/tokens.cljc:339, ../common/src/app/common/schema.cljc:1063
msgid "errors.field-max-length" msgid "errors.field-max-length"
msgstr "El nombre debe contener como máximo %s caracteres." msgstr "El nombre debe contener como máximo %s caracteres."
#: src/app/main/ui/settings/team-form.cljs, src/app/main/ui/auth/register.cljs, src/app/main/ui/dashboard/team_form.cljs, src/app/main/ui/onboarding/team_choice.cljs, src/app/main/ui/settings/access_tokens.cljs, src/app/main/ui/settings/feedback.cljs, src/app/main/ui/settings/profile.cljs, src/app/main/ui/workspace/sidebar/assets.cljs #: ../common/src/app/common/schema.cljc:1076
#, unused
msgid "errors.field-not-all-whitespace" msgid "errors.field-not-all-whitespace"
msgstr "El nombre debe contener algún carácter distinto al del espacio." msgstr "El nombre debe contener algún carácter distinto al del espacio."
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "El token de recuperación no es válido." msgstr "El token de recuperación no es válido."
#: src/app/main/ui/exports/files.cljs:131
#, unused
msgid "files-download-modal.description-1"
msgstr ""
"Uno o más archivos que desea exportar utilizan bibliotecas compartidas. "
"¿Qué quiere hacer con sus activos*?"
#: src/app/main/ui/exports/files.cljs:132
#, unused
msgid "files-download-modal.description-2"
msgstr "* Puede incluir componentes, gráficos, colores y/o tipografías."

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,78 +11,61 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.6.dev0\n" "X-Generator: Weblate 2026.6.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "Onko sinulla jo käyttäjä?" msgstr "Onko sinulla jo käyttäjä?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"Tarkista sähköpostisi ja paina vahvistuslinkkiä käyttääksesi "
"Penpot-ohjelmaa."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Vahvista salasana" msgstr "Vahvista salasana"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Luo testikäyttäjä" msgstr "Luo testikäyttäjä"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "Haluatko vain kokeilla?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Tämä on DEMO versio, ÄLÄ KÄYTÄ oikeaan työhön, projektit tullaan määräajoin " "Tämä on DEMO versio, ÄLÄ KÄYTÄ oikeaan työhön, projektit tullaan määräajoin "
"poistamaan." "poistamaan."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Unohditko salasanasi?" msgstr "Unohditko salasanasi?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Koko nimi" msgstr "Koko nimi"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Kirjaudu sisään" msgstr "Kirjaudu sisään"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "Kirjaudu"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Syötä uusi salasana" msgstr "Syötä uusi salasana"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Salasanan vaihto onnistui" msgstr "Salasanan vaihto onnistui"
@ -94,19 +77,19 @@ msgstr "Käyttäjäsi ei ole vahvistettu, vahvista se jatkaaksesi."
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "Salasanan vaihtoon tarvittava linkki lähetetty sähköpostiisi." msgstr "Salasanan vaihtoon tarvittava linkki lähetetty sähköpostiisi."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Ryhmään liittyminen onnistui" msgstr "Ryhmään liittyminen onnistui"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Salasana" msgstr "Salasana"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Vähintään 8 merkkiä" msgstr "Vähintään 8 merkkiä"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "Tietosuojaseloste" msgstr "Tietosuojaseloste"
@ -114,45 +97,35 @@ msgstr "Tietosuojaseloste"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Palauta salasana" msgstr "Palauta salasana"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Lähetämme sinulle sähköpostin, jossa lukee ohjeet" msgstr "Lähetämme sinulle sähköpostin, jossa lukee ohjeet"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "Unohtuiko salasana?" msgstr "Unohtuiko salasana?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Vaihda salasanasi" msgstr "Vaihda salasanasi"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Ei käyttäjää?" msgstr "Ei käyttäjää?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Luo uusi käyttäjä" msgstr "Luo uusi käyttäjä"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Luo uusi käyttäjä" msgstr "Luo uusi käyttäjä"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "Avoimen lähdekoodin ratkaisu suunnitteluun ja prototyyppien valmistukseen."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "Käyttöehdot" msgstr "Käyttöehdot"
#: src/app/main/ui/auth/register.cljs:238 #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
#, unused
msgid "auth.verification-email-sent"
msgstr "Lähetimme vahvistussähköpostin osoitteeseen"
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "Julkaise" msgstr "Julkaise"
@ -224,46 +197,24 @@ msgstr "Jaa prototyypit"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "Valitse kaikki" msgstr "Valitse kaikki"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "Peruuta julkaisu" msgstr "Peruuta julkaisu"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "Ryhmän hallinta" msgstr "Ryhmän hallinta"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "" msgstr ""
"Penpot on tarkoitettu ryhmille. Kutsu jäseniä työstääksenne projekteja " "Penpot on tarkoitettu ryhmille. Kutsu jäseniä työstääksenne projekteja "
"yhdessä" "yhdessä"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "Ryhmäydy!" msgstr "Ryhmäydy!"
#: src/app/main/ui/dashboard/projects.cljs #: src/app/main/ui/auth/recovery.cljs:47
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr ""
"Opettele Penpotin perusteet pitämällä hauskaa tämän opastuskierroksen "
"kanssa."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "Aloita opastuskierros"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.title"
msgstr "Käytännön opastus"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.info"
msgstr "Ota opastuskierros Penpotin erilaisista toiminnoista"
#: src/app/main/ui/auth/recovery.cljs:41
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "Palautustunnus on virheellinen." msgstr "Palautustunnus on virheellinen."

View File

@ -11,93 +11,71 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "Hevur tú longu ein brúkara?" msgstr "Hevur tú longu ein brúkara?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-mail"
msgstr "Kanna tín teldupost"
#: src/app/main/ui/auth/register.cljs:277
#, unused
msgid "auth.check-your-email"
msgstr ""
"Kanna tín teldupost og trýst á leinkina fyri at vátta og byrja at nýta "
"Penpot."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Vátta loyniorðið" msgstr "Vátta loyniorðið"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Stovna royndarkonto" msgstr "Stovna royndarkonto"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "Vilt tú royna tað?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Hetta er ein ROYNDAR tænasta, IKKI BRÚKA til veruligt arbeiði, " "Hetta er ein ROYNDAR tænasta, IKKI BRÚKA til veruligt arbeiði, "
"verkætlanirnar verða slettaðar regluliga." "verkætlanirnar verða slettaðar regluliga."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Gloymt loyniorðið?" msgstr "Gloymt loyniorðið?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Fullfíggja navn" msgstr "Fullfíggja navn"
#: src/app/main/ui/auth/login.cljs:288 #: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title" msgid "auth.login-account-title"
msgstr "Rita inn á mína konto" msgstr "Rita inn á mína konto"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Innrita her." msgstr "Innrita her."
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:297
#, unused
msgid "auth.login-submit"
msgstr "Rita inn"
#: src/app/main/ui/auth/login.cljs:291
msgid "auth.login-tagline" msgid "auth.login-tagline"
msgstr "" msgstr ""
"Penpot er eitt ókeypis formgevingstól við opnari keldukotu, at nýta til " "Penpot er eitt ókeypis formgevingstól við opnari keldukotu, at nýta til "
"Formgávu og Forritanar samstarv" "Formgávu og Forritanar samstarv"
#: src/app/main/ui/auth/login.cljs:248 #: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Skriva eitt nýtt loyniorð" msgstr "Skriva eitt nýtt loyniorð"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Loyniorðið er broytt" msgstr "Loyniorðið er broytt"
@ -111,19 +89,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "Leinkjan til at endurseta títt loyniorð er send til tín postkassa." msgstr "Leinkjan til at endurseta títt loyniorð er send til tín postkassa."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Sameinaðan í toymið var væleydnað" msgstr "Sameinaðan í toymið var væleydnað"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Loyniorð" msgstr "Loyniorð"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Minst 8 stavir" msgstr "Minst 8 stavir"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "Privat politikkur" msgstr "Privat politikkur"
@ -131,63 +109,45 @@ msgstr "Privat politikkur"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Endurstovna loyniorð" msgstr "Endurstovna loyniorð"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Vit senda tær ein teldupost við vegleiðing" msgstr "Vit senda tær ein teldupost við vegleiðing"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "Gloymt loyniorð?" msgstr "Gloymt loyniorð?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Broyt títt loyniorð" msgstr "Broyt títt loyniorð"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Onga konto enn?" msgstr "Onga konto enn?"
#: src/app/main/ui/auth/register.cljs:368 #: src/app/main/ui/auth/register.cljs:357
msgid "auth.register-account-tagline" msgid "auth.register-account-tagline"
msgstr "" msgstr ""
"Latið okkum frætta, hvat vit skulu navngeva teg á okkara yvirlitsskýggja og " "Latið okkum frætta, hvat vit skulu navngeva teg á okkara yvirlitsskýggja og "
"í teldupostum." "í teldupostum."
#: src/app/main/ui/auth/register.cljs:367 #: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title" msgid "auth.register-account-title"
msgstr "Navn títt" msgstr "Navn títt"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Stovna konto" msgstr "Stovna konto"
#: src/app/main/ui/auth/register.cljs:124 #: src/app/main/ui/auth/register.cljs:218
#, unused
msgid "auth.register-tagline"
msgstr ""
"Við einari ókeypis Penpot konto, kanst tú upprætta óavmarkaðar bólkar og "
"samstarva við aðrar sniðgevar og forritara á so nógvum projektum, ið tygum "
"lystur. "
#: src/app/main/ui/auth/register.cljs:223
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Stovna eina konto" msgstr "Stovna eina konto"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "Loysnin við opnari keldukotu, at formgeva og frumsniða."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "Treytir" msgstr "Treytir"
#: src/app/main/ui/auth/register.cljs:238 #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
#, unused
msgid "auth.verification-email-sent"
msgstr "Vit hava sent ein váttanar teldupost til"
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "Gev út" msgstr "Gev út"
@ -259,50 +219,23 @@ msgstr "Deil frumsnið"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "Vel alt" msgstr "Vel alt"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "Angra útgevan" msgstr "Angra útgevan"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "Toymisleiðsla" msgstr "Toymisleiðsla"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "Penpot er fyri toymum. Bjóða limum at arbeiða saman á verkætlanir og fílur" msgstr "Penpot er fyri toymum. Bjóða limum at arbeiða saman á verkætlanir og fílur"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "Toyma upp!" msgstr "Toyma upp!"
#: src/app/main/ui/dashboard/projects.cljs #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr ""
"Lær alt tað grundleggjandi í Penpot, meðan tú stuttleikar tær við hesari "
"lær-og-ger leiðbeiningini."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "Byrja undirvísingina"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.title"
msgstr "Lær-við-at-gera leiðbeining"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.info"
msgstr "Kom ein túr gjøgnum Penpot og lær høvuðsfunkurnar at kenna."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.start"
msgstr "Byrja rundferð"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Legg afturat sum Deilt Savn" msgstr "Legg afturat sum Deilt Savn"
@ -310,11 +243,11 @@ msgstr "Legg afturat sum Deilt Savn"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Broyt teldupost" msgstr "Broyt teldupost"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(avrita)" msgstr "(avrita)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "Stovna nýtt toymi" msgstr "Stovna nýtt toymi"
@ -322,7 +255,7 @@ msgstr "Stovna nýtt toymi"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Títt Penpot" msgstr "Títt Penpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "Strika toymi" msgstr "Strika toymi"
@ -330,20 +263,15 @@ msgstr "Strika toymi"
msgid "dashboard.download-binary-file" msgid "dashboard.download-binary-file"
msgstr "Heinta Penpot fílu (.penpot)" msgstr "Heinta Penpot fílu (.penpot)"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
#, unused
msgid "dashboard.download-standard-file"
msgstr "Heinta standarafílu (.svg + .json)"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "Tvítøka" msgstr "Tvítøka"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "Tvítak %s fílur" msgstr "Tvítak %s fílur"
#: src/app/main/ui/dashboard/file_menu.cljs:281 #: src/app/main/ui/dashboard/file_menu.cljs:279
msgid "dashboard.export-binary-multi" msgid "dashboard.export-binary-multi"
msgstr "Heinta %s Penpot fílur (.penpot)" msgstr "Heinta %s Penpot fílur (.penpot)"
@ -355,10 +283,6 @@ msgstr "Útflyt borð sum PDF"
msgid "dashboard.export-frames.title" msgid "dashboard.export-frames.title"
msgstr "Útflyt til PDF" msgstr "Útflyt til PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "Útflyt Penpot %s fílur"
#: src/app/main/ui/exports/assets.cljs:108 #: src/app/main/ui/exports/assets.cljs:108
msgid "dashboard.export-multiple.selected" msgid "dashboard.export-multiple.selected"
msgstr "%s av %s lutum eru valdir" msgstr "%s av %s lutum eru valdir"
@ -379,11 +303,6 @@ msgstr "Har eru ongin lutir við útflytsstillingum."
msgid "dashboard.export-shapes.title" msgid "dashboard.export-shapes.title"
msgstr "Valt til útflyting" msgstr "Valt til útflyting"
#: src/app/main/ui/dashboard/file_menu.cljs:262
#, unused
msgid "dashboard.export-standard-multi"
msgstr "Heinta %s standarafílur (.svg + .json)"
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:608 #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:608
msgid "dashboard.fonts.deleted-placeholder" msgid "dashboard.fonts.deleted-placeholder"
msgstr "Stavsniði er strika" msgstr "Stavsniði er strika"
@ -402,22 +321,15 @@ msgstr[1] "% stavsnið løgd afturat"
msgid "dashboard.fonts.upload-all" msgid "dashboard.fonts.upload-all"
msgstr "Legg øll afturat" msgstr "Legg øll afturat"
#: src/app/main/ui/dashboard/import.cljs:941, src/app/main/ui/dashboard/project_menu.cljs:109 #: src/app/main/ui/dashboard/import.cljs:995, src/app/main/ui/dashboard/project_menu.cljs:110
msgid "dashboard.import" msgid "dashboard.import"
msgstr "Innflyt Penpot fílur" msgstr "Innflyt Penpot fílur"
#: src/app/main/ui/dashboard/import.cljs:342, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147 #: src/app/main/ui/dashboard/import.cljs:343, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147
msgid "dashboard.import.analyze-error" msgid "dashboard.import.analyze-error"
msgstr "Ups! Tað riggaði ikki at innflyta hesa fílu" msgstr "Ups! Tað riggaði ikki at innflyta hesa fílu"
#: src/app/main/ui/dashboard/import.cljs:292 #: src/app/main/ui/dashboard/import.cljs:593
#, unused
msgid "dashboard.import.import-error"
msgstr ""
"Har kom ein trupulleiki, tá vit royndu at innflyta fíluna. Fílan var ikki "
"innflutt."
#: src/app/main/ui/dashboard/import.cljs:562
msgid "dashboard.import.import-message" msgid "dashboard.import.import-message"
msgstr "% fílur eru innfluttir." msgstr "% fílur eru innfluttir."
@ -453,7 +365,7 @@ msgstr "Innleggur fílu: %s"
msgid "dashboard.invite-profile" msgid "dashboard.invite-profile"
msgstr "Bjóða við í toymi" msgstr "Bjóða við í toymi"
#: src/app/main/ui/dashboard/sidebar.cljs:608, src/app/main/ui/dashboard/sidebar.cljs:615, src/app/main/ui/dashboard/sidebar.cljs:620, src/app/main/ui/dashboard/team.cljs:464 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:257, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:263, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:268, src/app/main/ui/dashboard/team.cljs:464
msgid "dashboard.leave-team" msgid "dashboard.leave-team"
msgstr "Far úr toymu" msgstr "Far úr toymu"
@ -465,31 +377,31 @@ msgstr "lesur tínar fílur inn…"
msgid "dashboard.loading-fonts" msgid "dashboard.loading-fonts"
msgstr "lesur tíni stavsnið inn…" msgstr "lesur tíni stavsnið inn…"
#: src/app/main/ui/dashboard/file_menu.cljs:313, src/app/main/ui/dashboard/project_menu.cljs:101 #: src/app/main/ui/dashboard/file_menu.cljs:308, src/app/main/ui/dashboard/project_menu.cljs:101
msgid "dashboard.move-to" msgid "dashboard.move-to"
msgstr "Flyt til" msgstr "Flyt til"
#: src/app/main/ui/dashboard/file_menu.cljs:277 #: src/app/main/ui/dashboard/file_menu.cljs:272
msgid "dashboard.move-to-multi" msgid "dashboard.move-to-multi"
msgstr "Flyt %s fílur til" msgstr "Flyt %s fílur til"
#: src/app/main/ui/dashboard/file_menu.cljs:249 #: src/app/main/ui/dashboard/file_menu.cljs:73
msgid "dashboard.move-to-other-team" msgid "dashboard.move-to-other-team"
msgstr "Flyt til eitt annað toymi" msgstr "Flyt til eitt annað toymi"
#: src/app/main/ui/dashboard/files.cljs:111, src/app/main/ui/dashboard/projects.cljs:259, src/app/main/ui/dashboard/projects.cljs:260 #: src/app/main/ui/dashboard/files.cljs:117, src/app/main/ui/dashboard/projects.cljs:259
msgid "dashboard.new-file" msgid "dashboard.new-file"
msgstr "+ Nýggja fílu" msgstr "+ Nýggja fílu"
#: src/app/main/data/dashboard.cljs:537, src/app/main/data/dashboard.cljs:649 #: src/app/main/data/dashboard.cljs:506, src/app/main/data/dashboard.cljs:618
msgid "dashboard.new-file-prefix" msgid "dashboard.new-file-prefix"
msgstr "Nýggja fílu" msgstr "Nýggja fílu"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ Nýggj verkætlan" msgstr "+ Nýggj verkætlan"
#: src/app/main/data/dashboard.cljs:290, src/app/main/data/dashboard.cljs:652 #: src/app/main/data/dashboard.cljs:259, src/app/main/data/dashboard.cljs:621
msgid "dashboard.new-project-prefix" msgid "dashboard.new-project-prefix"
msgstr "Nýggj verkætlan" msgstr "Nýggj verkætlan"
@ -497,43 +409,43 @@ msgstr "Nýggj verkætlan"
msgid "dashboard.no-matches-for" msgid "dashboard.no-matches-for"
msgstr "Onki samsvar funnið fyri \"%\"" msgstr "Onki samsvar funnið fyri \"%\""
#: src/app/main/ui/dashboard/sidebar.cljs:1177 #: src/app/main/ui/dashboard/sidebar.cljs:400
msgid "dashboard.no-projects-placeholder" msgid "dashboard.no-projects-placeholder"
msgstr "Festar verkætlanir verða víst her" msgstr "Festar verkætlanir verða víst her"
#: src/app/main/ui/auth/verify_token.cljs:37 #: src/app/main/ui/auth/verify_token.cljs:38
msgid "dashboard.notifications.email-changed-successfully" msgid "dashboard.notifications.email-changed-successfully"
msgstr "Tín teldupostadressa er dagførd" msgstr "Tín teldupostadressa er dagførd"
#: src/app/main/ui/auth/verify_token.cljs:31 #: src/app/main/ui/auth/verify_token.cljs:32
msgid "dashboard.notifications.email-verified-successfully" msgid "dashboard.notifications.email-verified-successfully"
msgstr "Tín teldupostadressa er váttta" msgstr "Tín teldupostadressa er váttta"
#: src/app/main/ui/settings/password.cljs:46 #: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved" msgid "dashboard.notifications.password-saved"
msgstr "Loyniorði er goymt!" msgstr "Loyniorði er goymt!"
#: src/app/main/ui/dashboard/team.cljs:1719 #: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members" msgid "dashboard.num-of-members"
msgstr "%s limir" msgstr "%s limir"
#: src/app/main/ui/dashboard/file_menu.cljs:296 #: src/app/main/ui/dashboard/file_menu.cljs:294
msgid "dashboard.open-in-new-tab" msgid "dashboard.open-in-new-tab"
msgstr "Lat fílu upp í nýggjum skiljiblaði" msgstr "Lat fílu upp í nýggjum skiljiblaði"
#: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:124, src/app/main/ui/dashboard/grid.cljs:428, src/app/main/ui/dashboard/projects.cljs:268, src/app/main/ui/dashboard/projects.cljs:269 #: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:143, src/app/main/ui/dashboard/grid.cljs:427, src/app/main/ui/dashboard/grid.cljs:438, src/app/main/ui/dashboard/grid.cljs:480, src/app/main/ui/dashboard/projects.cljs:217, src/app/main/ui/dashboard/projects.cljs:274, src/app/main/ui/dashboard/sidebar.cljs:156
msgid "dashboard.options" msgid "dashboard.options"
msgstr "Valmøguleikar" msgstr "Valmøguleikar"
#: src/app/main/ui/settings/password.cljs:106, src/app/main/ui/settings/password.cljs:120 #: src/app/main/ui/settings/password.cljs:112, src/app/main/ui/settings/password.cljs:126
msgid "dashboard.password-change" msgid "dashboard.password-change"
msgstr "Broyt loyniorð" msgstr "Broyt loyniorð"
#: src/app/main/ui/dashboard/pin_button.cljs:22, src/app/main/ui/dashboard/project_menu.cljs:96 #: src/app/main/ui/dashboard/files.cljs:122, src/app/main/ui/dashboard/project_menu.cljs:98, src/app/main/ui/dashboard/projects.cljs:251
msgid "dashboard.pin-unpin" msgid "dashboard.pin-unpin"
msgstr "Fest/Loys" msgstr "Fest/Loys"
#: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:59 #: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:51
msgid "dashboard.projects-title" msgid "dashboard.projects-title"
msgstr "Verkætlanir" msgstr "Verkætlanir"
@ -541,16 +453,11 @@ msgstr "Verkætlanir"
msgid "dashboard.remove-account" msgid "dashboard.remove-account"
msgstr "Vilt tú strika tína konto?" msgstr "Vilt tú strika tína konto?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, unused
msgid "dashboard.remove-shared"
msgstr "Strikað sum Deilt Savn"
#: src/app/main/ui/settings/profile.cljs:78 #: src/app/main/ui/settings/profile.cljs:78
msgid "dashboard.save-settings" msgid "dashboard.save-settings"
msgstr "Goym stillingar" msgstr "Goym stillingar"
#: src/app/main/ui/dashboard/sidebar.cljs:282, src/app/main/ui/dashboard/sidebar.cljs:283, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140 #: src/app/main/ui/dashboard/sidebar.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:229, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
msgid "dashboard.search-placeholder" msgid "dashboard.search-placeholder"
msgstr "Leita…" msgstr "Leita…"
@ -566,39 +473,39 @@ msgstr "Vel mál til takførisflatu"
msgid "dashboard.select-ui-theme" msgid "dashboard.select-ui-theme"
msgstr "Vel tema" msgstr "Vel tema"
#: src/app/main/ui/dashboard/projects.cljs:292 #: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files" msgid "dashboard.show-all-files"
msgstr "Vís allar fílurnar" msgstr "Vís allar fílurnar"
#: src/app/main/ui/dashboard/file_menu.cljs:99 #: src/app/main/ui/dashboard/file_menu.cljs:129
msgid "dashboard.success-delete-file" msgid "dashboard.success-delete-file"
msgstr "Tín fíla er strikað" msgstr "Tín fíla er strikað"
#: src/app/main/ui/dashboard/project_menu.cljs:63 #: src/app/main/ui/dashboard/project_menu.cljs:74
msgid "dashboard.success-delete-project" msgid "dashboard.success-delete-project"
msgstr "Tín verkætlan er strikað" msgstr "Tín verkætlan er strikað"
#: src/app/main/ui/dashboard/file_menu.cljs:133, src/app/main/ui/dashboard/grid.cljs:719, src/app/main/ui/dashboard/sidebar.cljs:193 #: src/app/main/ui/dashboard/file_menu.cljs:162, src/app/main/ui/dashboard/grid.cljs:715, src/app/main/ui/dashboard/sidebar.cljs:143
msgid "dashboard.success-move-file" msgid "dashboard.success-move-file"
msgstr "Tín fíla er flutt" msgstr "Tín fíla er flutt"
#: src/app/main/ui/dashboard/file_menu.cljs:132 #: src/app/main/ui/dashboard/file_menu.cljs:161
msgid "dashboard.success-move-files" msgid "dashboard.success-move-files"
msgstr "Tínar fílur eru fluttar" msgstr "Tínar fílur eru fluttar"
#: src/app/main/ui/dashboard/project_menu.cljs:57 #: src/app/main/ui/dashboard/project_menu.cljs:68
msgid "dashboard.success-move-project" msgid "dashboard.success-move-project"
msgstr "Tín verkætlan er flutt" msgstr "Tín verkætlan er flutt"
#: src/app/main/ui/dashboard/team.cljs:1663 #: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info" msgid "dashboard.team-info"
msgstr "Toymisupplýsingar" msgstr "Toymisupplýsingar"
#: src/app/main/ui/dashboard/team.cljs:1708 #: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members" msgid "dashboard.team-members"
msgstr "Toymislimir" msgstr "Toymislimir"
#: src/app/main/ui/dashboard/team.cljs:1723 #: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects" msgid "dashboard.team-projects"
msgstr "Toymisverkætlanir" msgstr "Toymisverkætlanir"
@ -618,23 +525,19 @@ msgstr "Skriva fyri at leita eftir úrslitum"
msgid "ds.alert-ok" msgid "ds.alert-ok"
msgstr "Ókey" msgstr "Ókey"
#: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102 #: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102
msgid "ds.confirm-ok" msgid "ds.confirm-ok"
msgstr "Ókey" msgstr "Ókey"
#: src/app/main/data/auth.cljs:348, src/app/main/ui/auth/login.cljs:91, src/app/main/ui/auth/login.cljs:99 #: src/app/main/data/auth.cljs:342, src/app/main/ui/auth/login.cljs:92, src/app/main/ui/auth/login.cljs:100
msgid "errors.profile-blocked" msgid "errors.profile-blocked"
msgstr "Vangamyndin er stongd" msgstr "Vangamyndin er stongd"
#: src/app/main/ui/dashboard/file_menu.cljs:292 #: src/app/main/ui/dashboard/file_menu.cljs:289
msgid "labels.delete-multi-files" msgid "labels.delete-multi-files"
msgstr "Strikað %s fílur" msgstr "Strikað %s fílur"
#, unused #: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1739
msgid "labels.edit-file"
msgstr "Broyt fílu"
#: src/app/main/ui/dashboard/projects.cljs:242, src/app/main/ui/dashboard/team.cljs:1733
msgid "labels.num-of-files" msgid "labels.num-of-files"
msgid_plural "labels.num-of-files" msgid_plural "labels.num-of-files"
msgstr[0] "1 fíla" msgstr[0] "1 fíla"
@ -652,27 +555,27 @@ msgstr "Legg afturat sum Deilt Savn"
msgid "modals.add-shared-confirm.message" msgid "modals.add-shared-confirm.message"
msgstr "Legg \"%s\" afturat sum Deilt Savn" msgstr "Legg \"%s\" afturat sum Deilt Savn"
#: src/app/main/ui/dashboard/file_menu.cljs:126 #: src/app/main/ui/dashboard/file_menu.cljs:155
msgid "modals.delete-file-confirm.accept" msgid "modals.delete-file-confirm.accept"
msgstr "Strikað fílu" msgstr "Strikað fílu"
#: src/app/main/ui/dashboard/file_menu.cljs:125 #: src/app/main/ui/dashboard/file_menu.cljs:154
msgid "modals.delete-file-confirm.message" msgid "modals.delete-file-confirm.message"
msgstr "Ert tú vísur í, at tú ynskjur at strikað fílu?" msgstr "Ert tú vísur í, at tú ynskjur at strikað fílu?"
#: src/app/main/ui/dashboard/file_menu.cljs:124 #: src/app/main/ui/dashboard/file_menu.cljs:153
msgid "modals.delete-file-confirm.title" msgid "modals.delete-file-confirm.title"
msgstr "Strikar fílu" msgstr "Strikar fílu"
#: src/app/main/ui/dashboard/file_menu.cljs:120 #: src/app/main/ui/dashboard/file_menu.cljs:149
msgid "modals.delete-file-multi-confirm.accept" msgid "modals.delete-file-multi-confirm.accept"
msgstr "Strikar fílur" msgstr "Strikar fílur"
#: src/app/main/ui/dashboard/file_menu.cljs:119 #: src/app/main/ui/dashboard/file_menu.cljs:148
msgid "modals.delete-file-multi-confirm.message" msgid "modals.delete-file-multi-confirm.message"
msgstr "Ert tú vísur í, at tú vil strikað %s fílur?" msgstr "Ert tú vísur í, at tú vil strikað %s fílur?"
#: src/app/main/ui/dashboard/file_menu.cljs:118 #: src/app/main/ui/dashboard/file_menu.cljs:147
msgid "modals.delete-file-multi-confirm.title" msgid "modals.delete-file-multi-confirm.title"
msgstr "Strikar %s fílur" msgstr "Strikar %s fílur"
@ -694,17 +597,7 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Strikar fílu" msgstr[0] "Strikar fílu"
msgstr[1] "Strikar fílur" msgstr[1] "Strikar fílur"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/files.cljs:209
#, unused
msgid "modals.remove-shared-confirm.accept"
msgstr "Strikað sum Deilt Savn"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, unused
msgid "modals.remove-shared-confirm.message"
msgstr "Strika \"%s\" sum Deilt Savn"
#: src/app/main/ui/dashboard/files.cljs:188
msgid "title.dashboard.files" msgid "title.dashboard.files"
msgstr "%s - Penpot" msgstr "%s - Penpot"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,79 +11,59 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "アカウントをお持ちですか?" msgstr "アカウントをお持ちですか?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-mail"
msgstr "メールを確認してください"
#: src/app/main/ui/auth/register.cljs:277
#, unused
msgid "auth.check-your-email"
msgstr "Penpotを使う前にメールのリンクをクリックして、メールアドレスを認証してください。"
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "パスワードを確認" msgstr "パスワードを確認"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "デモアカウントを作成" msgstr "デモアカウントを作成"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "試してみませんか?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "このサービスはデモ版です。実際の業務には使用しないでください。" msgstr "このサービスはデモ版です。実際の業務には使用しないでください。"
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "パスワードを忘れましたか?" msgstr "パスワードを忘れましたか?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "フルネーム" msgstr "フルネーム"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "こちらからログイン" msgstr "こちらからログイン"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "ログイン"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "Gitlab" msgstr "Gitlab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAPでログイン" msgstr "LDAPでログイン"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID Connect" msgstr "OpenID Connect"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "新しいパスワードを入力" msgstr "新しいパスワードを入力"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "パスワードを変更しました" msgstr "パスワードを変更しました"
@ -95,19 +75,19 @@ msgstr "プロフィールが確認されていません。続ける前にプロ
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "パスワード変更リンクをメールで送信しました。" msgstr "パスワード変更リンクをメールで送信しました。"
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "チームに参加しました" msgstr "チームに参加しました"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "パスワード" msgstr "パスワード"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "登録" msgstr "登録"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "プライバシーポリシー" msgstr "プライバシーポリシー"
@ -115,54 +95,44 @@ msgstr "プライバシーポリシー"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "パスワードを回復" msgstr "パスワードを回復"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "手順を記載したメールをお送りします" msgstr "手順を記載したメールをお送りします"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "パスワードを忘れましたか?" msgstr "パスワードを忘れましたか?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "パスワードを変更" msgstr "パスワードを変更"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "アカウントをお持ちでない方はこちら" msgstr "アカウントをお持ちでない方はこちら"
#: src/app/main/ui/auth/register.cljs:367 #: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title" msgid "auth.register-account-title"
msgstr "あなたの名前" msgstr "あなたの名前"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "アカウントを作成" msgstr "アカウントを作成"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "アカウントを作成" msgstr "アカウントを作成"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:49
#, unused
msgid "auth.sidebar-tagline"
msgstr "デザインとプロトタイピングのためのオープンソースです。"
#: src/app/main/ui/auth/register.cljs:50
#, markdown #, markdown
msgid "auth.terms-and-privacy-agreement" msgid "auth.terms-and-privacy-agreement"
msgstr "[利用規約](%s) と [プライバシーポリシー](%s) に同意します。" msgstr "[利用規約](%s) と [プライバシーポリシー](%s) に同意します。"
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210 #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "利用規約" msgstr "利用規約"
#: src/app/main/ui/auth/register.cljs:238 #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
#, unused
msgid "auth.verification-email-sent"
msgstr "認証メールを送信しました"
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "公開" msgstr "公開"
@ -231,20 +201,15 @@ msgstr "プロトタイプを共有"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "すべて選択" msgstr "すべて選択"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "非公開" msgstr "非公開"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "チームを管理" msgstr "チームを管理"
#: src/app/main/ui/dashboard/projects.cljs #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "チュートリアルを始める"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "共有ライブラリとして追加" msgstr "共有ライブラリとして追加"
@ -252,11 +217,11 @@ msgstr "共有ライブラリとして追加"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "メールアドレスを変更" msgstr "メールアドレスを変更"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(コピー)" msgstr "(コピー)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "チームを新規作成" msgstr "チームを新規作成"
@ -264,7 +229,7 @@ msgstr "チームを新規作成"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "あなたのPenpot" msgstr "あなたのPenpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "チームを削除" msgstr "チームを削除"
@ -272,16 +237,11 @@ msgstr "チームを削除"
msgid "dashboard.download-binary-file" msgid "dashboard.download-binary-file"
msgstr "Penpotファイル(.penpot)をダウンロード" msgstr "Penpotファイル(.penpot)をダウンロード"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
#, unused
msgid "dashboard.download-standard-file"
msgstr "標準形式(.svg+.json)でダウンロード"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "複製" msgstr "複製"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "%s ファイルを複製" msgstr "%s ファイルを複製"
@ -306,11 +266,11 @@ msgstr[0] "%s フォントを追加しました"
msgid "dashboard.fonts.upload-all" msgid "dashboard.fonts.upload-all"
msgstr "すべてアップロード" msgstr "すべてアップロード"
#: src/app/main/ui/dashboard/import.cljs:941, src/app/main/ui/dashboard/project_menu.cljs:109 #: src/app/main/ui/dashboard/import.cljs:995, src/app/main/ui/dashboard/project_menu.cljs:110
msgid "dashboard.import" msgid "dashboard.import"
msgstr "Penpotをインポート" msgstr "Penpotをインポート"
#: src/app/main/ui/dashboard/import.cljs:342, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147 #: src/app/main/ui/dashboard/import.cljs:343, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147
msgid "dashboard.import.analyze-error" msgid "dashboard.import.analyze-error"
msgstr "Penpotファイルをインポート" msgstr "Penpotファイルをインポート"
@ -342,7 +302,7 @@ msgstr "アップロード中: %s"
msgid "dashboard.invite-profile" msgid "dashboard.invite-profile"
msgstr "チームに招待" msgstr "チームに招待"
#: src/app/main/ui/dashboard/sidebar.cljs:608, src/app/main/ui/dashboard/sidebar.cljs:615, src/app/main/ui/dashboard/sidebar.cljs:620, src/app/main/ui/dashboard/team.cljs:464 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:257, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:263, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:268, src/app/main/ui/dashboard/team.cljs:464
msgid "dashboard.leave-team" msgid "dashboard.leave-team"
msgstr "チームから脱退" msgstr "チームから脱退"
@ -358,19 +318,19 @@ msgstr "ファイルを読みこんでいます…"
msgid "dashboard.loading-fonts" msgid "dashboard.loading-fonts"
msgstr "フォントを読みこんでいます…" msgstr "フォントを読みこんでいます…"
#: src/app/main/ui/dashboard/files.cljs:111, src/app/main/ui/dashboard/projects.cljs:259, src/app/main/ui/dashboard/projects.cljs:260 #: src/app/main/ui/dashboard/files.cljs:117, src/app/main/ui/dashboard/projects.cljs:259
msgid "dashboard.new-file" msgid "dashboard.new-file"
msgstr "+ 新しいファイル" msgstr "+ 新しいファイル"
#: src/app/main/data/dashboard.cljs:537, src/app/main/data/dashboard.cljs:649 #: src/app/main/data/dashboard.cljs:506, src/app/main/data/dashboard.cljs:618
msgid "dashboard.new-file-prefix" msgid "dashboard.new-file-prefix"
msgstr "新しいファイル" msgstr "新しいファイル"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ 新規プロジェクト" msgstr "+ 新規プロジェクト"
#: src/app/main/data/dashboard.cljs:290, src/app/main/data/dashboard.cljs:652 #: src/app/main/data/dashboard.cljs:259, src/app/main/data/dashboard.cljs:621
msgid "dashboard.new-project-prefix" msgid "dashboard.new-project-prefix"
msgstr "新規プロジェクト" msgstr "新規プロジェクト"
@ -378,39 +338,39 @@ msgstr "新規プロジェクト"
msgid "dashboard.no-matches-for" msgid "dashboard.no-matches-for"
msgstr "\"%s\"が見つかりませんでした" msgstr "\"%s\"が見つかりませんでした"
#: src/app/main/ui/dashboard/sidebar.cljs:1177 #: src/app/main/ui/dashboard/sidebar.cljs:400
msgid "dashboard.no-projects-placeholder" msgid "dashboard.no-projects-placeholder"
msgstr "ピン留めされたプロジェクトはここに表示されます" msgstr "ピン留めされたプロジェクトはここに表示されます"
#: src/app/main/ui/auth/verify_token.cljs:37 #: src/app/main/ui/auth/verify_token.cljs:38
msgid "dashboard.notifications.email-changed-successfully" msgid "dashboard.notifications.email-changed-successfully"
msgstr "メールアドレスが更新されました" msgstr "メールアドレスが更新されました"
#: src/app/main/ui/auth/verify_token.cljs:31 #: src/app/main/ui/auth/verify_token.cljs:32
msgid "dashboard.notifications.email-verified-successfully" msgid "dashboard.notifications.email-verified-successfully"
msgstr "メールアドレスが認証されました" msgstr "メールアドレスが認証されました"
#: src/app/main/ui/settings/password.cljs:46 #: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved" msgid "dashboard.notifications.password-saved"
msgstr "パスワードを保存しました!" msgstr "パスワードを保存しました!"
#: src/app/main/ui/dashboard/team.cljs:1719 #: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members" msgid "dashboard.num-of-members"
msgstr "%s メンバー" msgstr "%s メンバー"
#: src/app/main/ui/dashboard/file_menu.cljs:296 #: src/app/main/ui/dashboard/file_menu.cljs:294
msgid "dashboard.open-in-new-tab" msgid "dashboard.open-in-new-tab"
msgstr "新しいタブでファイルで開く" msgstr "新しいタブでファイルで開く"
#: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:124, src/app/main/ui/dashboard/grid.cljs:428, src/app/main/ui/dashboard/projects.cljs:268, src/app/main/ui/dashboard/projects.cljs:269 #: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:143, src/app/main/ui/dashboard/grid.cljs:427, src/app/main/ui/dashboard/grid.cljs:438, src/app/main/ui/dashboard/grid.cljs:480, src/app/main/ui/dashboard/projects.cljs:217, src/app/main/ui/dashboard/projects.cljs:274, src/app/main/ui/dashboard/sidebar.cljs:156
msgid "dashboard.options" msgid "dashboard.options"
msgstr "オプション" msgstr "オプション"
#: src/app/main/ui/settings/password.cljs:106, src/app/main/ui/settings/password.cljs:120 #: src/app/main/ui/settings/password.cljs:112, src/app/main/ui/settings/password.cljs:126
msgid "dashboard.password-change" msgid "dashboard.password-change"
msgstr "パスワードを変更" msgstr "パスワードを変更"
#: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:59 #: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:51
msgid "dashboard.projects-title" msgid "dashboard.projects-title"
msgstr "プロジェクト" msgstr "プロジェクト"
@ -418,16 +378,11 @@ msgstr "プロジェクト"
msgid "dashboard.remove-account" msgid "dashboard.remove-account"
msgstr "アカウントを削除したいですか?" msgstr "アカウントを削除したいですか?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, unused
msgid "dashboard.remove-shared"
msgstr "共有ライブラリから削除"
#: src/app/main/ui/settings/profile.cljs:78 #: src/app/main/ui/settings/profile.cljs:78
msgid "dashboard.save-settings" msgid "dashboard.save-settings"
msgstr "設定を保存" msgstr "設定を保存"
#: src/app/main/ui/dashboard/sidebar.cljs:282, src/app/main/ui/dashboard/sidebar.cljs:283, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140 #: src/app/main/ui/dashboard/sidebar.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:229, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
msgid "dashboard.search-placeholder" msgid "dashboard.search-placeholder"
msgstr "検索…" msgstr "検索…"
@ -443,47 +398,47 @@ msgstr "表示言語を選択"
msgid "dashboard.select-ui-theme" msgid "dashboard.select-ui-theme"
msgstr "テーマを選択" msgstr "テーマを選択"
#: src/app/main/ui/dashboard/projects.cljs:292 #: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files" msgid "dashboard.show-all-files"
msgstr "すべてのファイルを表示" msgstr "すべてのファイルを表示"
#: src/app/main/ui/dashboard/file_menu.cljs:99 #: src/app/main/ui/dashboard/file_menu.cljs:129
msgid "dashboard.success-delete-file" msgid "dashboard.success-delete-file"
msgstr "ファイルを削除しました" msgstr "ファイルを削除しました"
#: src/app/main/ui/dashboard/project_menu.cljs:63 #: src/app/main/ui/dashboard/project_menu.cljs:74
msgid "dashboard.success-delete-project" msgid "dashboard.success-delete-project"
msgstr "プロジェクトを削除しました" msgstr "プロジェクトを削除しました"
#: src/app/main/ui/dashboard/file_menu.cljs:94 #: src/app/main/ui/dashboard/file_menu.cljs:124
msgid "dashboard.success-duplicate-file" msgid "dashboard.success-duplicate-file"
msgstr "ファイルを複製しました" msgstr "ファイルを複製しました"
#: src/app/main/ui/dashboard/project_menu.cljs:35 #: src/app/main/ui/dashboard/project_menu.cljs:46
msgid "dashboard.success-duplicate-project" msgid "dashboard.success-duplicate-project"
msgstr "プロジェクトを複製しました" msgstr "プロジェクトを複製しました"
#: src/app/main/ui/dashboard/file_menu.cljs:133, src/app/main/ui/dashboard/grid.cljs:719, src/app/main/ui/dashboard/sidebar.cljs:193 #: src/app/main/ui/dashboard/file_menu.cljs:162, src/app/main/ui/dashboard/grid.cljs:715, src/app/main/ui/dashboard/sidebar.cljs:143
msgid "dashboard.success-move-file" msgid "dashboard.success-move-file"
msgstr "ファイルを移動しました" msgstr "ファイルを移動しました"
#: src/app/main/ui/dashboard/file_menu.cljs:132 #: src/app/main/ui/dashboard/file_menu.cljs:161
msgid "dashboard.success-move-files" msgid "dashboard.success-move-files"
msgstr "ファイルを移動しました" msgstr "ファイルを移動しました"
#: src/app/main/ui/dashboard/project_menu.cljs:57 #: src/app/main/ui/dashboard/project_menu.cljs:68
msgid "dashboard.success-move-project" msgid "dashboard.success-move-project"
msgstr "ファイルを削除しました" msgstr "ファイルを削除しました"
#: src/app/main/ui/dashboard/team.cljs:1663 #: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info" msgid "dashboard.team-info"
msgstr "チーム情報" msgstr "チーム情報"
#: src/app/main/ui/dashboard/team.cljs:1708 #: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members" msgid "dashboard.team-members"
msgstr "チームのメンバー" msgstr "チームのメンバー"
#: src/app/main/ui/dashboard/team.cljs:1723 #: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects" msgid "dashboard.team-projects"
msgstr "チームのプロジェクト" msgstr "チームのプロジェクト"
@ -515,11 +470,11 @@ msgstr "Eメール"
msgid "dashboard.your-name" msgid "dashboard.your-name"
msgstr "名前" msgstr "名前"
#: src/app/main/ui/comments.cljs:691, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436 #: src/app/main/ui/comments.cljs:719, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436
msgid "ds.confirm-cancel" msgid "ds.confirm-cancel"
msgstr "キャンセル" msgstr "キャンセル"
#: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102 #: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102
msgid "ds.confirm-ok" msgid "ds.confirm-ok"
msgstr "OK" msgstr "OK"
@ -527,11 +482,11 @@ msgstr "OK"
msgid "ds.confirm-title" msgid "ds.confirm-title"
msgstr "本当に実行しますか?" msgstr "本当に実行しますか?"
#: src/app/main/data/auth.cljs:197 #: src/app/main/data/auth.cljs:191
msgid "errors.auth-provider-not-configured" msgid "errors.auth-provider-not-configured"
msgstr "認証プロバイダが設定されていません。" msgstr "認証プロバイダが設定されていません。"
#: src/app/main/errors.cljs:258 #: src/app/main/errors.cljs:580
msgid "errors.auth.unable-to-login" msgid "errors.auth.unable-to-login"
msgstr "認証されていないか、セッションが失効しているようです。" msgstr "認証されていないか、セッションが失効しているようです。"
@ -539,27 +494,27 @@ msgstr "認証されていないか、セッションが失効しているよう
msgid "errors.clipboard-not-implemented" msgid "errors.clipboard-not-implemented"
msgstr "この処理は実行できません" msgstr "この処理は実行できません"
#: src/app/main/ui/auth/register.cljs:107, src/app/main/ui/auth/verify_token.cljs:128, src/app/main/ui/settings/change_email.cljs:29 #: src/app/main/ui/auth/register.cljs:111, src/app/main/ui/auth/verify_token.cljs:148, src/app/main/ui/settings/change_email.cljs:29
msgid "errors.email-already-exists" msgid "errors.email-already-exists"
msgstr "メールアドレスは使用されています" msgstr "メールアドレスは使用されています"
#: src/app/main/ui/auth/verify_token.cljs:133 #: src/app/main/ui/auth/verify_token.cljs:153
msgid "errors.email-already-validated" msgid "errors.email-already-validated"
msgstr "メールアドレスはすでに有効です。" msgstr "メールアドレスはすでに有効です。"
#: src/app/main/ui/auth/register.cljs:110, src/app/main/ui/settings/password.cljs:29 #: src/app/main/ui/auth/register.cljs:114, src/app/main/ui/settings/password.cljs:29
msgid "errors.email-as-password" msgid "errors.email-as-password"
msgstr "メールアドレスはパスワードとして設定できません" msgstr "メールアドレスはパスワードとして設定できません"
#: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:97, src/app/main/ui/auth/register.cljs:100, src/app/main/ui/dashboard/team.cljs:740, src/app/main/ui/settings/change_email.cljs:37 #: src/app/main/ui/auth/recovery_request.cljs:57, src/app/main/ui/auth/register.cljs:102, src/app/main/ui/auth/register.cljs:105, src/app/main/ui/dashboard/team.cljs:740, src/app/main/ui/settings/change_email.cljs:37
msgid "errors.email-has-permanent-bounces" msgid "errors.email-has-permanent-bounces"
msgstr "メールアドレス «%s» には多くの受信失敗レポートがあります。" msgstr "メールアドレス «%s» には多くの受信失敗レポートがあります。"
#: src/app/main/ui/dashboard/team.cljs:239, src/app/main/ui/dashboard/team.cljs:1122, src/app/main/ui/onboarding/team_choice.cljs:122 #: src/app/main/ui/dashboard/team.cljs:239, src/app/main/ui/dashboard/team.cljs:1128, src/app/main/ui/onboarding/team_choice.cljs:122
msgid "errors.email-spam-or-permanent-bounces" msgid "errors.email-spam-or-permanent-bounces"
msgstr "«%s» はスパムとして報告されたか、または恒久的に受信失敗しています" msgstr "«%s» はスパムとして報告されたか、または恒久的に受信失敗しています"
#: src/app/main/data/auth.cljs:358, src/app/main/errors.cljs:196, src/app/main/ui/auth/login.cljs:110, src/app/main/ui/auth/register.cljs:129, src/app/main/ui/auth/register.cljs:322, src/app/main/ui/auth/verify_token.cljs:138, src/app/main/ui/dashboard/fonts.cljs:386, src/app/main/ui/dashboard/team.cljs:250, src/app/main/ui/dashboard/team.cljs:1125, src/app/main/ui/onboarding/team_choice.cljs:125, src/app/main/ui/settings/feedback.cljs:84, src/app/main/ui/settings/integrations.cljs:143, src/app/main/ui/workspace/main_menu.cljs:966 #: src/app/main/data/auth.cljs:352, src/app/main/errors.cljs:479, src/app/main/ui/auth/login.cljs:116, src/app/main/ui/auth/register.cljs:131, src/app/main/ui/auth/register.cljs:317, src/app/main/ui/auth/verify_token.cljs:158, src/app/main/ui/dashboard/fonts.cljs:386, src/app/main/ui/dashboard/team.cljs:250, src/app/main/ui/dashboard/team.cljs:1131, src/app/main/ui/onboarding/team_choice.cljs:125, src/app/main/ui/settings/feedback.cljs:84, src/app/main/ui/settings/integrations.cljs:143, src/app/main/ui/workspace/main_menu.cljs:966
msgid "errors.generic" msgid "errors.generic"
msgstr "エラーが発生しました。" msgstr "エラーが発生しました。"
@ -571,7 +526,7 @@ msgstr "無効な色"
msgid "errors.invalid-email-confirmation" msgid "errors.invalid-email-confirmation"
msgstr "メールアドレスは同じものを入力する必要があります" msgstr "メールアドレスは同じものを入力する必要があります"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "リカバリコードが無効です。" msgstr "リカバリコードが無効です。"
@ -583,7 +538,7 @@ msgstr "招待が無効"
msgid "errors.invite-invalid.info" msgid "errors.invite-invalid.info"
msgstr "この招待はキャンセルされたか、失効しています。" msgstr "この招待はキャンセルされたか、失効しています。"
#: src/app/main/ui/auth/login.cljs:95 #: src/app/main/ui/auth/login.cljs:96
msgid "errors.ldap-disabled" msgid "errors.ldap-disabled"
msgstr "LDAP認証は無効になっています。" msgstr "LDAP認証は無効になっています。"
@ -599,16 +554,15 @@ msgstr "画像の内容と拡張子が一致しません。"
msgid "errors.media-type-not-allowed" msgid "errors.media-type-not-allowed"
msgstr "無効な画像です。" msgstr "無効な画像です。"
#: src/app/main/ui/settings/password.cljs #: ../common/src/app/common/schema.cljc:1092
#, unused
msgid "errors.password-too-short" msgid "errors.password-too-short"
msgstr "パスワードは8文字以上である必要があります" msgstr "パスワードは8文字以上である必要があります"
#: src/app/main/data/auth.cljs:346, src/app/main/ui/auth/register.cljs:91 #: src/app/main/data/auth.cljs:340, src/app/main/ui/auth/register.cljs:96
msgid "errors.registration-disabled" msgid "errors.registration-disabled"
msgstr "新規登録は無効化されています。" msgstr "新規登録は無効化されています。"
#: src/app/main/ui/dashboard/sidebar.cljs:513, src/app/main/ui/dashboard/team.cljs:511 #: src/app/main/data/nitrate.cljs:203, src/app/main/ui/dashboard/team.cljs:511
msgid "errors.team-leave.owner-cant-leave" msgid "errors.team-leave.owner-cant-leave"
msgstr "オーナーはチームを脱退できません。オーナーロールを外してください。" msgstr "オーナーはチームを脱退できません。オーナーロールを外してください。"
@ -616,11 +570,11 @@ msgstr "オーナーはチームを脱退できません。オーナーロール
msgid "errors.unexpected-error" msgid "errors.unexpected-error"
msgstr "エラーが発生しました。" msgstr "エラーが発生しました。"
#: src/app/main/ui/auth/verify_token.cljs:75 #: src/app/main/ui/auth/verify_token.cljs:95
msgid "errors.unexpected-token" msgid "errors.unexpected-token"
msgstr "不明なトークン" msgstr "不明なトークン"
#: src/app/main/ui/auth/login.cljs:103, src/app/main/ui/auth/login.cljs:107 #: src/app/main/ui/auth/login.cljs:104, src/app/main/ui/auth/login.cljs:108
msgid "errors.wrong-credentials" msgid "errors.wrong-credentials"
msgstr "ユーザー名かパスワードが正しくありません。" msgstr "ユーザー名かパスワードが正しくありません。"
@ -644,15 +598,10 @@ msgstr "題名"
msgid "feedback.twitter-title" msgid "feedback.twitter-title"
msgstr "Xサポートアカウント" msgstr "Xサポートアカウント"
#: src/app/main/ui/settings/password.cljs:39 #: src/app/main/ui/settings/password.cljs:45
msgid "generic.error" msgid "generic.error"
msgstr "エラーが発生しました" msgstr "エラーが発生しました"
#: src/app/main/ui/inspect/attributes/blur.cljs:31
#, unused
msgid "inspect.attributes.blur"
msgstr "ぼかし"
#: src/app/main/ui/inspect/attributes/fill.cljs:69 #: src/app/main/ui/inspect/attributes/fill.cljs:69
msgid "inspect.attributes.fill" msgid "inspect.attributes.fill"
msgstr "塗りつぶし" msgstr "塗りつぶし"
@ -661,51 +610,6 @@ msgstr "塗りつぶし"
msgid "inspect.attributes.image.download" msgid "inspect.attributes.image.download"
msgstr "画像をダウンロード" msgstr "画像をダウンロード"
#: src/app/main/ui/inspect/attributes/image.cljs:39
#, unused
msgid "inspect.attributes.image.height"
msgstr "高さ"
#: src/app/main/ui/inspect/attributes/image.cljs:32
#, unused
msgid "inspect.attributes.image.width"
msgstr "横幅"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout"
msgstr "レイアウト"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.height"
msgstr "高さ"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.left"
msgstr "左"
#: src/app/main/ui/inspect/attributes/layout.cljs, src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.radius"
msgstr "半径"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.rotation"
msgstr "回転"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.top"
msgstr "上"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.width"
msgstr "幅"
#: src/app/main/ui/inspect/attributes/shadow.cljs:66 #: src/app/main/ui/inspect/attributes/shadow.cljs:66
msgid "inspect.attributes.shadow" msgid "inspect.attributes.shadow"
msgstr "シャドウ" msgstr "シャドウ"
@ -730,12 +634,7 @@ msgstr "フォントスタイル"
msgid "inspect.attributes.typography.line-height" msgid "inspect.attributes.typography.line-height"
msgstr "行の高さ" msgstr "行の高さ"
#: src/app/main/ui/inspect/attributes/text.cljs:140 #: src/app/main/ui/inspect/attributes/text.cljs:115
#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "文字装飾"
#: src/app/main/ui/inspect/attributes/text.cljs:113
msgid "inspect.attributes.typography.text-decoration.underline" msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "下線" msgstr "下線"
@ -771,7 +670,7 @@ msgstr "ショートカット"
msgid "labels.add-custom-font" msgid "labels.add-custom-font"
msgstr "カスタムフォントを追加" msgstr "カスタムフォントを追加"
#: src/app/main/data/common.cljs:121, src/app/main/ui/dashboard/change_owner.cljs:67, src/app/main/ui/dashboard/change_owner.cljs:174, src/app/main/ui/dashboard/import.cljs:626, src/app/main/ui/dashboard/team.cljs:896, src/app/main/ui/dashboard/team.cljs:1405, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:163, src/app/main/ui/exports/files.cljs:201, src/app/main/ui/settings/import_shortcuts_diff_modal.cljs:156, src/app/main/ui/settings/integrations.cljs:220, src/app/main/ui/settings/restore_shortcuts_modal.cljs:165, src/app/main/ui/shortcuts.cljs:578, src/app/main/ui/viewer/share_link.cljs:203, src/app/main/ui/workspace/sidebar/assets/groups.cljs:178, src/app/main/ui/workspace/tokens/export/modal.cljs:43, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/import_from_library.cljs:88, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:360, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:73, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:242 #: src/app/main/data/common.cljs:121, src/app/main/data/nitrate.cljs:532, src/app/main/data/nitrate.cljs:617, src/app/main/ui/dashboard/change_owner.cljs:67, src/app/main/ui/dashboard/change_owner.cljs:174, src/app/main/ui/dashboard/import.cljs:657, src/app/main/ui/dashboard/team.cljs:902, src/app/main/ui/dashboard/team.cljs:1411, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:163, src/app/main/ui/exports/files.cljs:199, src/app/main/ui/settings/import_shortcuts_diff_modal.cljs:156, src/app/main/ui/settings/integrations.cljs:220, src/app/main/ui/settings/restore_shortcuts_modal.cljs:165, src/app/main/ui/shortcuts.cljs:651, src/app/main/ui/viewer/share_link.cljs:203, src/app/main/ui/workspace/sidebar/assets/groups.cljs:178, src/app/main/ui/workspace/tokens/export/modal.cljs:43, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/import_from_library.cljs:88, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:360, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:73, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:243
msgid "labels.cancel" msgid "labels.cancel"
msgstr "キャンセル" msgstr "キャンセル"
@ -779,19 +678,19 @@ msgstr "キャンセル"
msgid "labels.comments" msgid "labels.comments"
msgstr "コメント" msgstr "コメント"
#: src/app/main/ui/dashboard/sidebar.cljs:1256, src/app/main/ui/workspace/main_menu.cljs:165 #: src/app/main/ui/dashboard/sidebar.cljs:479, src/app/main/ui/workspace/main_menu.cljs:165
msgid "labels.community" msgid "labels.community"
msgstr "コミュニティ" msgstr "コミュニティ"
#: src/app/main/ui/settings/password.cljs:103 #: src/app/main/ui/settings/password.cljs:109
msgid "labels.confirm-password" msgid "labels.confirm-password"
msgstr "パスワードを確認" msgstr "パスワードを確認"
#: src/app/main/ui/auth/login.cljs:202, src/app/main/ui/dashboard/deleted.cljs:46, src/app/main/ui/dashboard/deleted.cljs:281, src/app/main/ui/dashboard/file_menu.cljs:210, src/app/main/ui/dashboard/import.cljs:633, src/app/main/ui/dashboard/team.cljs:903, src/app/main/ui/exports/files.cljs:206, src/app/main/ui/settings/subscription.cljs:330, src/app/main/ui/settings/subscription.cljs:364, src/app/main/ui/settings/subscription.cljs:891 #: src/app/main/ui/auth/login.cljs:208, src/app/main/ui/dashboard/deleted.cljs:46, src/app/main/ui/dashboard/deleted.cljs:281, src/app/main/ui/dashboard/file_menu.cljs:235, src/app/main/ui/dashboard/import.cljs:664, src/app/main/ui/dashboard/team.cljs:909, src/app/main/ui/exports/files.cljs:204, src/app/main/ui/settings/subscription.cljs:330, src/app/main/ui/settings/subscription.cljs:364, src/app/main/ui/settings/subscription.cljs:891
msgid "labels.continue" msgid "labels.continue"
msgstr "続ける" msgstr "続ける"
#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203 #: src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
msgid "labels.create" msgid "labels.create"
msgstr "作成" msgstr "作成"
@ -803,43 +702,35 @@ msgstr "チームを作成"
msgid "labels.create-team.placeholder" msgid "labels.create-team.placeholder"
msgstr "チームの名前を入力" msgstr "チームの名前を入力"
#, unused
msgid "labels.custom-fonts"
msgstr "カスタムフォント"
#: src/app/main/ui/settings/sidebar.cljs:86 #: src/app/main/ui/settings/sidebar.cljs:86
msgid "labels.dashboard" msgid "labels.dashboard"
msgstr "ダッシュボード" msgstr "ダッシュボード"
#: src/app/main/ui/dashboard/file_menu.cljs:337, src/app/main/ui/dashboard/fonts.cljs:286, src/app/main/ui/dashboard/fonts.cljs:363, src/app/main/ui/dashboard/fonts.cljs:397, src/app/main/ui/dashboard/import.cljs:333, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1439, src/app/main/ui/settings/integrations.cljs:376, src/app/main/ui/settings/profile.cljs:117, src/app/main/ui/settings/profile.cljs:128, src/app/main/ui/settings/profile.cljs:129, src/app/main/ui/workspace/sidebar/assets/common.cljs:231, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:223, src/app/main/ui/workspace/sidebar/versions.cljs:257, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:353, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:111, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:378 #: src/app/main/ui/dashboard/file_menu.cljs:335, src/app/main/ui/dashboard/fonts.cljs:286, src/app/main/ui/dashboard/fonts.cljs:363, src/app/main/ui/dashboard/fonts.cljs:397, src/app/main/ui/dashboard/import.cljs:332, src/app/main/ui/dashboard/project_menu.cljs:116, src/app/main/ui/dashboard/team.cljs:1445, src/app/main/ui/settings/integrations.cljs:376, src/app/main/ui/settings/profile.cljs:117, src/app/main/ui/settings/profile.cljs:128, src/app/main/ui/settings/profile.cljs:129, src/app/main/ui/workspace/sidebar/assets/common.cljs:231, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:222, src/app/main/ui/workspace/sidebar/versions.cljs:257, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:353, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:111, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:394
msgid "labels.delete" msgid "labels.delete"
msgstr "削除" msgstr "削除"
#: src/app/main/ui/comments.cljs:1019 #: src/app/main/ui/comments.cljs:1047
msgid "labels.delete-comment" msgid "labels.delete-comment"
msgstr "コメントを削除" msgstr "コメントを削除"
#: src/app/main/ui/comments.cljs:941 #: src/app/main/ui/comments.cljs:969
msgid "labels.delete-comment-thread" msgid "labels.delete-comment-thread"
msgstr "スレッドを削除" msgstr "スレッドを削除"
#: src/app/main/ui/dashboard/team.cljs:1210 #: src/app/main/ui/dashboard/team.cljs:1216
msgid "labels.delete-invitation" msgid "labels.delete-invitation"
msgstr "招待を削除" msgstr "招待を削除"
#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:81, src/app/main/ui/dashboard/files.cljs:186, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/projects.cljs:235, src/app/main/ui/dashboard/sidebar.cljs:1139 #: src/app/main/ui/dashboard/file_menu.cljs:28, src/app/main/ui/dashboard/files.cljs:86, src/app/main/ui/dashboard/files.cljs:207, src/app/main/ui/dashboard/projects.cljs:225, src/app/main/ui/dashboard/projects.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:362
msgid "labels.drafts" msgid "labels.drafts"
msgstr "下書き" msgstr "下書き"
#: src/app/main/ui/comments.cljs:1015, src/app/main/ui/dashboard/fonts.cljs:280, src/app/main/ui/dashboard/import.cljs:327, src/app/main/ui/dashboard/team.cljs:1437, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:218, src/app/main/ui/workspace/tokens/themes.cljs:52 #: src/app/main/ui/comments.cljs:1043, src/app/main/ui/dashboard/fonts.cljs:280, src/app/main/ui/dashboard/import.cljs:326, src/app/main/ui/dashboard/team.cljs:1443, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:52
msgid "labels.edit" msgid "labels.edit"
msgstr "編集" msgstr "編集"
#, unused #: src/app/main/ui/dashboard/team.cljs:164, src/app/main/ui/dashboard/team.cljs:405, src/app/main/ui/dashboard/team.cljs:430, src/app/main/ui/dashboard/team.cljs:677, src/app/main/ui/dashboard/team.cljs:710, src/app/main/ui/dashboard/team.cljs:890, src/app/main/ui/onboarding/team_choice.cljs:71
msgid "labels.edit-file"
msgstr "ファイルを編集"
#: src/app/main/ui/dashboard/team.cljs:164, src/app/main/ui/dashboard/team.cljs:430, src/app/main/ui/dashboard/team.cljs:677, src/app/main/ui/dashboard/team.cljs:710, src/app/main/ui/onboarding/team_choice.cljs:71
msgid "labels.editor" msgid "labels.editor"
msgstr "エディタ" msgstr "エディタ"
@ -847,7 +738,7 @@ msgstr "エディタ"
msgid "labels.expired-invitation" msgid "labels.expired-invitation"
msgstr "失効済み" msgstr "失効済み"
#: src/app/main/ui/exports/assets.cljs:172, src/app/main/ui/settings/shortcuts.cljs:548, src/app/main/ui/workspace/tokens/sidebar.cljs:134 #: src/app/main/ui/exports/assets.cljs:172, src/app/main/ui/settings/shortcuts.cljs:548, src/app/main/ui/workspace/tokens/sidebar.cljs:145
msgid "labels.export" msgid "labels.export"
msgstr "エクスポート" msgstr "エクスポート"
@ -863,23 +754,23 @@ msgstr "フォントファミリー"
msgid "labels.font-variants" msgid "labels.font-variants"
msgstr "スタイル" msgstr "スタイル"
#: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:1152 #: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:375
msgid "labels.fonts" msgid "labels.fonts"
msgstr "フォント" msgstr "フォント"
#: src/app/main/ui/dashboard/sidebar.cljs:1250, src/app/main/ui/workspace/main_menu.cljs:201 #: src/app/main/ui/dashboard/sidebar.cljs:473, src/app/main/ui/workspace/main_menu.cljs:201
msgid "labels.github-repo" msgid "labels.github-repo"
msgstr "GitHubレポジトリ" msgstr "GitHubレポジトリ"
#: src/app/main/ui/dashboard/sidebar.cljs:1224, src/app/main/ui/workspace/main_menu.cljs:230 #: src/app/main/ui/dashboard/sidebar.cljs:447, src/app/main/ui/workspace/main_menu.cljs:230
msgid "labels.give-feedback" msgid "labels.give-feedback"
msgstr "フィードバックする" msgstr "フィードバックする"
#: src/app/main/ui/auth/recovery_request.cljs:103, src/app/main/ui/auth/register.cljs:376, src/app/main/ui/static.cljs:199, src/app/main/ui/viewer/login.cljs:122 #: src/app/main/ui/auth/recovery_request.cljs:103, src/app/main/ui/auth/register.cljs:365, src/app/main/ui/static.cljs:208, src/app/main/ui/viewer/login.cljs:132
msgid "labels.go-back" msgid "labels.go-back"
msgstr "戻る" msgstr "戻る"
#: src/app/main/ui/dashboard/sidebar.cljs:1207, src/app/main/ui/workspace/main_menu.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1351, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1379, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1568 #: src/app/main/ui/dashboard/sidebar.cljs:430, src/app/main/ui/workspace/main_menu.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1353, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1381, src/app/main/ui/workspace/sidebar/options/menus/layout_container.cljs:1570
msgid "labels.help-center" msgid "labels.help-center"
msgstr "ヘルプセンター" msgstr "ヘルプセンター"
@ -887,11 +778,11 @@ msgstr "ヘルプセンター"
msgid "labels.hide-resolved-comments" msgid "labels.hide-resolved-comments"
msgstr "解決済みのコメントを非表示" msgstr "解決済みのコメントを非表示"
#: src/app/main/ui/static.cljs:411 #: src/app/main/ui/static.cljs:420
msgid "labels.internal-error.main-message" msgid "labels.internal-error.main-message"
msgstr "内部エラー" msgstr "内部エラー"
#: src/app/main/ui/dashboard/sidebar.cljs:585, src/app/main/ui/dashboard/team.cljs:127, src/app/main/ui/dashboard/team.cljs:135, src/app/main/ui/dashboard/team.cljs:1213 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:233, src/app/main/ui/dashboard/team.cljs:127, src/app/main/ui/dashboard/team.cljs:135, src/app/main/ui/dashboard/team.cljs:1219
msgid "labels.invitations" msgid "labels.invitations"
msgstr "招待" msgstr "招待"
@ -903,7 +794,7 @@ msgstr "言語"
msgid "labels.libraries-and-templates" msgid "labels.libraries-and-templates"
msgstr "ライブラリ&テンプレート" msgstr "ライブラリ&テンプレート"
#: src/app/main/ui/dashboard/sidebar.cljs:1527 #: src/app/main/ui/dashboard/sidebar.cljs:750
msgid "labels.logout" msgid "labels.logout"
msgstr "ログアウト" msgstr "ログアウト"
@ -911,11 +802,11 @@ msgstr "ログアウト"
msgid "labels.member" msgid "labels.member"
msgstr "メンバー" msgstr "メンバー"
#: src/app/main/ui/dashboard/sidebar.cljs:581, src/app/main/ui/dashboard/team.cljs:125, src/app/main/ui/dashboard/team.cljs:133 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:228, src/app/main/ui/dashboard/team.cljs:125, src/app/main/ui/dashboard/team.cljs:133
msgid "labels.members" msgid "labels.members"
msgstr "メンバー" msgstr "メンバー"
#: src/app/main/ui/settings/password.cljs:96 #: src/app/main/ui/settings/password.cljs:102
msgid "labels.new-password" msgid "labels.new-password"
msgstr "新しいパスワード" msgstr "新しいパスワード"
@ -923,28 +814,19 @@ msgstr "新しいパスワード"
msgid "labels.no-invitations" msgid "labels.no-invitations"
msgstr "招待がありません。" msgstr "招待がありません。"
#: src/app/main/ui/static.cljs:311 #: src/app/main/ui/static.cljs:320
msgid "labels.not-found.main-message" msgid "labels.not-found.main-message"
msgstr "おっと!" msgstr "おっと!"
#: src/app/main/ui/settings/password.cljs:89 #: src/app/main/ui/settings/password.cljs:95
msgid "labels.old-password" msgid "labels.old-password"
msgstr "以前のパスワード" msgstr "以前のパスワード"
#: src/app/main/ui/workspace/comments.cljs
#, unused
msgid "labels.only-yours"
msgstr "あなた専用"
#, unused
msgid "labels.or"
msgstr "または"
#: src/app/main/ui/settings/profile.cljs:149, src/app/main/ui/settings/sidebar.cljs:96 #: src/app/main/ui/settings/profile.cljs:149, src/app/main/ui/settings/sidebar.cljs:96
msgid "labels.profile" msgid "labels.profile"
msgstr "プロフィール" msgstr "プロフィール"
#: src/app/main/ui/dashboard/sidebar.cljs:1132 #: src/app/main/ui/dashboard/sidebar.cljs:355
msgid "labels.projects" msgid "labels.projects"
msgstr "プロジェクト" msgstr "プロジェクト"
@ -952,7 +834,7 @@ msgstr "プロジェクト"
msgid "labels.release-notes" msgid "labels.release-notes"
msgstr "リリースノート" msgstr "リリースノート"
#: src/app/main/ui/forms.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406 #: src/app/main/ui/forms.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
msgid "labels.remove" msgid "labels.remove"
msgstr "削除" msgstr "削除"
@ -960,7 +842,7 @@ msgstr "削除"
msgid "labels.remove-member" msgid "labels.remove-member"
msgstr "メンバーを削除" msgstr "メンバーを削除"
#: src/app/main/ui/dashboard/file_menu.cljs:300, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:602, src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/versions.cljs:228, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:76, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:101, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63 #: src/app/main/ui/dashboard/file_menu.cljs:298, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:251, src/app/main/ui/dashboard/project_menu.cljs:90, src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/versions.cljs:228, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:76, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:101, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename" msgid "labels.rename"
msgstr "名前を変更" msgstr "名前を変更"
@ -968,10 +850,10 @@ msgstr "名前を変更"
msgid "labels.rename-team" msgid "labels.rename-team"
msgstr "チーム名を変更" msgstr "チーム名を変更"
#: src/app/main/ui/dashboard/team.cljs:1207 #: src/app/main/ui/dashboard/team.cljs:1213
msgid "labels.resend-invitation" msgid "labels.resend-invitation"
msgstr "招待を再送" msgstr "招待を再送"
#: src/app/main/ui/components/progress.cljs:80, src/app/main/ui/static.cljs:324, src/app/main/ui/static.cljs:333, src/app/main/ui/static.cljs:428 #: src/app/main/ui/components/progress.cljs:80, src/app/main/ui/static.cljs:333, src/app/main/ui/static.cljs:342, src/app/main/ui/static.cljs:437
msgid "labels.retry" msgid "labels.retry"
msgstr "リトライ" msgstr "リトライ"

File diff suppressed because it is too large Load Diff

View File

@ -12,78 +12,61 @@ msgstr ""
"(n%100<10 || n%100>=20) ? 1 : 2);\n" "(n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "Jau turite paskyrą?" msgstr "Jau turite paskyrą?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"Pasitikrinkite savo el. paštą, ten rasite pranešimą su nuorodą, kurią "
"paspaudę galėsite pradėti naudotis Penpot."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Slaptažodžio patvirtinimas" msgstr "Slaptažodžio patvirtinimas"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Kurti demonstracinę paskyrą" msgstr "Kurti demonstracinę paskyrą"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "Norite tik išmėginti?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Tai yra DEMONSTRACINĖ versija, NEKURKITE tikrų darbų, nes projektai " "Tai yra DEMONSTRACINĖ versija, NEKURKITE tikrų darbų, nes projektai "
"periodiškai - šalinami." "periodiškai - šalinami."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Pamiršote slaptažodį?" msgstr "Pamiršote slaptažodį?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Vardas ir Pavardė" msgstr "Vardas ir Pavardė"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Prisijungimas čia" msgstr "Prisijungimas čia"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "Prisijungti"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Įveskite naują slaptažodį" msgstr "Įveskite naują slaptažodį"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Slaptažodis sėkmingai pakeistas" msgstr "Slaptažodis sėkmingai pakeistas"
@ -95,19 +78,19 @@ msgstr "Paskyra yra nepatvirtinta, prieš tęsdami patikrinkite paskyrą."
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "Slaptažodžio atkūrimo nuoroda išsiųsta į jūsų pašto dėžutę." msgstr "Slaptažodžio atkūrimo nuoroda išsiųsta į jūsų pašto dėžutę."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Sėkmingai prisijungė prie komandos" msgstr "Sėkmingai prisijungė prie komandos"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Slaptažodis" msgstr "Slaptažodis"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Ne mažiau kaip 8 simboliai" msgstr "Ne mažiau kaip 8 simboliai"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "Privatumo politika" msgstr "Privatumo politika"
@ -115,45 +98,35 @@ msgstr "Privatumo politika"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Atkurti slaptažodį" msgstr "Atkurti slaptažodį"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Atsiųsime jums el. laišką su instrukcijomis" msgstr "Atsiųsime jums el. laišką su instrukcijomis"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "Pamiršote slaptažodį?" msgstr "Pamiršote slaptažodį?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Slaptažodžio keitimas" msgstr "Slaptažodžio keitimas"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Dar neturite paskyros?" msgstr "Dar neturite paskyros?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Sukurti paskyrą" msgstr "Sukurti paskyrą"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Sukurti paskyrą" msgstr "Sukurti paskyrą"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "Atviro kodo dizaino ir prototipų kūrimo sprendimas."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "Paslaugų teikimo sąlygos" msgstr "Paslaugų teikimo sąlygos"
#: src/app/main/ui/auth/register.cljs:238 #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
#, unused
msgid "auth.verification-email-sent"
msgstr "Išsiuntėme patvirtinimo el. laišką adresu"
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "Paskelbti" msgstr "Paskelbti"
@ -226,45 +199,25 @@ msgstr "Dalinkitės prototipais"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "Rinktis viską" msgstr "Rinktis viską"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "Atšaukti paskelbimą" msgstr "Atšaukti paskelbimą"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "Komandos valdymas" msgstr "Komandos valdymas"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "" msgstr ""
"Penpot yra skirtas komandoms. Pakvieskite narius bendram darbui su " "Penpot yra skirtas komandoms. Pakvieskite narius bendram darbui su "
"projektais ir failais" "projektais ir failais"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "Suburkite komandą!" msgstr "Suburkite komandą!"
#: src/app/main/ui/dashboard/projects.cljs #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr "Išmokite Penpot pagrindus ir mėgaukitės šia pamoka."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "Pradėti pamoką"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.info"
msgstr "Panagrinėkite Penpot ir susipažinkite su pagrindinėmis jo savybėmis."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.start"
msgstr "Pradėkite apžvalgą"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Pridėti kaip bendrinamą biblioteką" msgstr "Pridėti kaip bendrinamą biblioteką"
@ -272,11 +225,11 @@ msgstr "Pridėti kaip bendrinamą biblioteką"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Keisti el. paštą" msgstr "Keisti el. paštą"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(kopija)" msgstr "(kopija)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "Sukurti naują komandą" msgstr "Sukurti naują komandą"
@ -284,15 +237,15 @@ msgstr "Sukurti naują komandą"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Jūsų Penpot" msgstr "Jūsų Penpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "Naikinti komandą" msgstr "Naikinti komandą"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "Dublikatas" msgstr "Dublikatas"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "Dubliuoti %s failus" msgstr "Dubliuoti %s failus"
@ -304,10 +257,6 @@ msgstr "Eksportuokite darbalaukius į PDF"
msgid "dashboard.export-frames.title" msgid "dashboard.export-frames.title"
msgstr "Eksportuoti į PDF" msgstr "Eksportuoti į PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "Eksportuoti Penpot %s failus"
#: src/app/main/ui/exports/assets.cljs:108 #: src/app/main/ui/exports/assets.cljs:108
msgid "dashboard.export-multiple.selected" msgid "dashboard.export-multiple.selected"
msgstr "Pasirinkta %s iš %s elementų" msgstr "Pasirinkta %s iš %s elementų"
@ -377,20 +326,15 @@ msgstr ""
msgid "dashboard.fonts.upload-all" msgid "dashboard.fonts.upload-all"
msgstr "Įkelti viską" msgstr "Įkelti viską"
#: src/app/main/ui/dashboard/import.cljs:941, src/app/main/ui/dashboard/project_menu.cljs:109 #: src/app/main/ui/dashboard/import.cljs:995, src/app/main/ui/dashboard/project_menu.cljs:110
msgid "dashboard.import" msgid "dashboard.import"
msgstr "Importuokite Penpot failus" msgstr "Importuokite Penpot failus"
#: src/app/main/ui/dashboard/import.cljs:342, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147 #: src/app/main/ui/dashboard/import.cljs:343, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147
msgid "dashboard.import.analyze-error" msgid "dashboard.import.analyze-error"
msgstr "Oi! Nepavyko importuoti šio failo" msgstr "Oi! Nepavyko importuoti šio failo"
#: src/app/main/ui/dashboard/import.cljs:292 #: src/app/main/ui/dashboard/import.cljs:587
#, unused
msgid "dashboard.import.import-error"
msgstr "Iškilo problema importuojant failą. Failas nebuvo importuotas."
#: src/app/main/ui/dashboard/import.cljs:556
msgid "dashboard.import.import-warning" msgid "dashboard.import.import-warning"
msgstr "Kai kuriuose failuose buvo netinkamų objektų, kurie buvo pašalinti." msgstr "Kai kuriuose failuose buvo netinkamų objektų, kurie buvo pašalinti."
@ -422,15 +366,15 @@ msgstr "Įkeliami duomenys į serverį (%s/%s)"
msgid "dashboard.import.progress.upload-media" msgid "dashboard.import.progress.upload-media"
msgstr "Įkeliamas failas: %s" msgstr "Įkeliamas failas: %s"
#: src/app/main/data/dashboard.cljs:537, src/app/main/data/dashboard.cljs:649 #: src/app/main/data/dashboard.cljs:506, src/app/main/data/dashboard.cljs:618
msgid "dashboard.new-file-prefix" msgid "dashboard.new-file-prefix"
msgstr "Naujas failas" msgstr "Naujas failas"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ Naujas projektas" msgstr "+ Naujas projektas"
#: src/app/main/data/dashboard.cljs:290, src/app/main/data/dashboard.cljs:652 #: src/app/main/data/dashboard.cljs:259, src/app/main/data/dashboard.cljs:621
msgid "dashboard.new-project-prefix" msgid "dashboard.new-project-prefix"
msgstr "Naujas projektas" msgstr "Naujas projektas"
@ -438,43 +382,43 @@ msgstr "Naujas projektas"
msgid "dashboard.no-matches-for" msgid "dashboard.no-matches-for"
msgstr "Nerasta jokių atitikmenų pagal \"%s\"" msgstr "Nerasta jokių atitikmenų pagal \"%s\""
#: src/app/main/ui/dashboard/sidebar.cljs:1177 #: src/app/main/ui/dashboard/sidebar.cljs:400
msgid "dashboard.no-projects-placeholder" msgid "dashboard.no-projects-placeholder"
msgstr "Prisegti projektai bus rodomi čia" msgstr "Prisegti projektai bus rodomi čia"
#: src/app/main/ui/auth/verify_token.cljs:37 #: src/app/main/ui/auth/verify_token.cljs:38
msgid "dashboard.notifications.email-changed-successfully" msgid "dashboard.notifications.email-changed-successfully"
msgstr "Jūsų el. pašto adresas sėkmingai atnaujintas" msgstr "Jūsų el. pašto adresas sėkmingai atnaujintas"
#: src/app/main/ui/auth/verify_token.cljs:31 #: src/app/main/ui/auth/verify_token.cljs:32
msgid "dashboard.notifications.email-verified-successfully" msgid "dashboard.notifications.email-verified-successfully"
msgstr "Jūsų el. pašto adresas buvo sėkmingai patvirtintas" msgstr "Jūsų el. pašto adresas buvo sėkmingai patvirtintas"
#: src/app/main/ui/settings/password.cljs:46 #: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved" msgid "dashboard.notifications.password-saved"
msgstr "Slaptažodis sėkmingai išsaugotas!" msgstr "Slaptažodis sėkmingai išsaugotas!"
#: src/app/main/ui/dashboard/team.cljs:1719 #: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members" msgid "dashboard.num-of-members"
msgstr "%s nariai" msgstr "%s nariai"
#: src/app/main/ui/dashboard/file_menu.cljs:296 #: src/app/main/ui/dashboard/file_menu.cljs:294
msgid "dashboard.open-in-new-tab" msgid "dashboard.open-in-new-tab"
msgstr "Atidarykite failą naujame skirtuke" msgstr "Atidarykite failą naujame skirtuke"
#: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:124, src/app/main/ui/dashboard/grid.cljs:428, src/app/main/ui/dashboard/projects.cljs:268, src/app/main/ui/dashboard/projects.cljs:269 #: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:143, src/app/main/ui/dashboard/grid.cljs:427, src/app/main/ui/dashboard/grid.cljs:438, src/app/main/ui/dashboard/grid.cljs:480, src/app/main/ui/dashboard/projects.cljs:217, src/app/main/ui/dashboard/projects.cljs:274, src/app/main/ui/dashboard/sidebar.cljs:156
msgid "dashboard.options" msgid "dashboard.options"
msgstr "Nustatymai" msgstr "Nustatymai"
#: src/app/main/ui/settings/password.cljs:106, src/app/main/ui/settings/password.cljs:120 #: src/app/main/ui/settings/password.cljs:112, src/app/main/ui/settings/password.cljs:126
msgid "dashboard.password-change" msgid "dashboard.password-change"
msgstr "Keisti slaptažodį" msgstr "Keisti slaptažodį"
#: src/app/main/ui/dashboard/pin_button.cljs:22, src/app/main/ui/dashboard/project_menu.cljs:96 #: src/app/main/ui/dashboard/files.cljs:122, src/app/main/ui/dashboard/project_menu.cljs:98, src/app/main/ui/dashboard/projects.cljs:251
msgid "dashboard.pin-unpin" msgid "dashboard.pin-unpin"
msgstr "Prisegti/Atsegti" msgstr "Prisegti/Atsegti"
#: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:59 #: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:51
msgid "dashboard.projects-title" msgid "dashboard.projects-title"
msgstr "Projektai" msgstr "Projektai"
@ -482,27 +426,10 @@ msgstr "Projektai"
msgid "dashboard.remove-account" msgid "dashboard.remove-account"
msgstr "Norite pašalinti paskyrą?" msgstr "Norite pašalinti paskyrą?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, unused
msgid "dashboard.remove-shared"
msgstr "Pašalinti kaip bendrinamą biblioteką"
#: src/app/main/ui/settings/options.cljs:71 #: src/app/main/ui/settings/options.cljs:71
msgid "dashboard.theme-change" msgid "dashboard.theme-change"
msgstr "Vartotojo sąsajos tema" msgstr "Vartotojo sąsajos tema"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "Atkūrimo prieigos raktas neteisingas." msgstr "Atkūrimo prieigos raktas neteisingas."
#: src/app/main/ui/exports/files.cljs:131
#, unused
msgid "files-download-modal.description-1"
msgstr ""
"Viename ar keliuose failuose, kuriuos norite eksportuoti, naudojamos "
"bendros bibliotekos. Ką norite daryti su jų komponentais*?"
#: src/app/main/ui/exports/files.cljs:132
#, unused
msgid "files-download-modal.description-2"
msgstr "* Gali apimti komponentus, grafiką, spalvas ir (arba) tipografiją."

File diff suppressed because it is too large Load Diff

View File

@ -11,97 +11,75 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "നിലവിൽ അക്കൗണ്ടുണ്ടോ?" msgstr "നിലവിൽ അക്കൗണ്ടുണ്ടോ?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-mail"
msgstr "നിങ്ങളുടെ ഇമെയിൽ പരിശോധിക്കുക"
#: src/app/main/ui/auth/register.cljs:277
#, unused
msgid "auth.check-your-email"
msgstr ""
"പെൻപോട്ട് ഉപയോഗിക്കാനും സാധൂകരിക്കാനും നിങ്ങളുടെ ഇമെയിൽ പരിശോധിച്ച് അതിലെ "
"കണ്ണിയിൽ ക്ലിക്ക് ചെയ്യുക."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക" msgstr "പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "ഡെമോ അക്കൗണ്ട് സൃഷ്ടിക്കുക" msgstr "ഡെമോ അക്കൗണ്ട് സൃഷ്ടിക്കുക"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "ഒന്നുപയോഗിച്ച് നോക്കുന്നോ?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"ഇതൊരു ഡെമോ സേവനമാണ്, ഒരു യഥാർത്ഥ ജോലിക്ക് ഉപയോഗിക്കരുത്, പ്രൊജക്റ്റുകൾ " "ഇതൊരു ഡെമോ സേവനമാണ്, ഒരു യഥാർത്ഥ ജോലിക്ക് ഉപയോഗിക്കരുത്, പ്രൊജക്റ്റുകൾ "
"നിശ്ചിതസമയങ്ങളിൽ മായ്ക്കപ്പെടും." "നിശ്ചിതസമയങ്ങളിൽ മായ്ക്കപ്പെടും."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "പാസ്‌വേഡ് മറന്നോ?" msgstr "പാസ്‌വേഡ് മറന്നോ?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "മുഴുവൻ പേര്" msgstr "മുഴുവൻ പേര്"
#: src/app/main/ui/auth/login.cljs:288 #: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title" msgid "auth.login-account-title"
msgstr "എന്റെ അക്കൗണ്ടിലേക്ക് പ്രവേശിക്കുക" msgstr "എന്റെ അക്കൗണ്ടിലേക്ക് പ്രവേശിക്കുക"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "ഇവിടെ ലോഗിൻ ചെയ്യുക." msgstr "ഇവിടെ ലോഗിൻ ചെയ്യുക."
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:297
#, unused
msgid "auth.login-submit"
msgstr "ലോഗിൻ"
#: src/app/main/ui/auth/login.cljs:291
msgid "auth.login-tagline" msgid "auth.login-tagline"
msgstr "" msgstr ""
"ഡിസൈനിങിലും കോഡിങിലും സഹകരിച്ച് പ്രവർത്തിക്കാനുള്ള ഒരു ഓപ്പൺസോഴ്സ് ഡിസൈൻ " "ഡിസൈനിങിലും കോഡിങിലും സഹകരിച്ച് പ്രവർത്തിക്കാനുള്ള ഒരു ഓപ്പൺസോഴ്സ് ഡിസൈൻ "
"ഉപകരണമാണ് പെൻപോട്ട്" "ഉപകരണമാണ് പെൻപോട്ട്"
#: src/app/main/ui/auth/login.cljs:248 #: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "ഗിറ്റ്ഹബ്ബ്" msgstr "ഗിറ്റ്ഹബ്ബ്"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "ഗിറ്റ്ലാബ്" msgstr "ഗിറ്റ്ലാബ്"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "ഗൂഗിൾ" msgstr "ഗൂഗിൾ"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "ഓപ്പൺഐഡി" msgstr "ഓപ്പൺഐഡി"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "പുതിയൊരു പാസ്‌വേഡ് ചേർക്കുക" msgstr "പുതിയൊരു പാസ്‌വേഡ് ചേർക്കുക"
#: src/app/main/ui/auth/verify_token.cljs:61 #: src/app/main/ui/auth/verify_token.cljs:81
msgid "auth.notifications.organization-invitation-accepted" msgid "auth.notifications.organization-invitation-accepted"
msgstr "നിങ്ങളിപ്പോൾ %s-ന്റെ ഭാഗമാണ്" msgstr "നിങ്ങളിപ്പോൾ %s-ന്റെ ഭാഗമാണ്"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "പാസ്‌വേഡ് വിജയകരമായി മാറ്റി" msgstr "പാസ്‌വേഡ് വിജയകരമായി മാറ്റി"
@ -113,19 +91,19 @@ msgstr "പ്രൊഫൈൽ സാധൂകരിച്ചിട്ടില
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "പാസ്‌വേഡ് വീണ്ടെടുപ്പ് കണ്ണി നിങ്ങളുടെ ഇൻബോക്സിലേക്ക് അയച്ചിട്ടുണ്ട്." msgstr "പാസ്‌വേഡ് വീണ്ടെടുപ്പ് കണ്ണി നിങ്ങളുടെ ഇൻബോക്സിലേക്ക് അയച്ചിട്ടുണ്ട്."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "വിജയകരമായി സംഘത്തിൽ ചേർന്നു" msgstr "വിജയകരമായി സംഘത്തിൽ ചേർന്നു"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "പാസ്‌വേഡ്" msgstr "പാസ്‌വേഡ്"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "കുറഞ്ഞത് 8 ക്യാരക്റ്ററുകൾ" msgstr "കുറഞ്ഞത് 8 ക്യാരക്റ്ററുകൾ"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "സ്വകാര്യതാനയം" msgstr "സ്വകാര്യതാനയം"
@ -133,67 +111,46 @@ msgstr "സ്വകാര്യതാനയം"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "പാസ്‌വേഡ് വീണ്ടെടുക്കുക" msgstr "പാസ്‌വേഡ് വീണ്ടെടുക്കുക"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "നിർദ്ദേശങ്ങളടങ്ങിയ ഒരു ഇമെയിൽ ഞങ്ങൾ നിങ്ങൾക്ക് അയയ്ക്കും" msgstr "നിർദ്ദേശങ്ങളടങ്ങിയ ഒരു ഇമെയിൽ ഞങ്ങൾ നിങ്ങൾക്ക് അയയ്ക്കും"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "പാസ്‌വേഡ് മറന്നോ?" msgstr "പാസ്‌വേഡ് മറന്നോ?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "പാസ്‌വേഡ് മാറ്റുക" msgstr "പാസ്‌വേഡ് മാറ്റുക"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "ഇതുവരെ അക്കൗണ്ട് ഇല്ലേ?" msgstr "ഇതുവരെ അക്കൗണ്ട് ഇല്ലേ?"
#: src/app/main/ui/auth/register.cljs:368 #: src/app/main/ui/auth/register.cljs:357
msgid "auth.register-account-tagline" msgid "auth.register-account-tagline"
msgstr "നിങ്ങളെ ഞങ്ങൾ എന്താണ് ഡാഷ്ബോർഡിലും ഇമെയിലിലും വിളിക്കേണ്ടതെന്ന് അറിയിക്കുക." msgstr "നിങ്ങളെ ഞങ്ങൾ എന്താണ് ഡാഷ്ബോർഡിലും ഇമെയിലിലും വിളിക്കേണ്ടതെന്ന് അറിയിക്കുക."
#: src/app/main/ui/auth/register.cljs:367 #: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title" msgid "auth.register-account-title"
msgstr "നിങ്ങളുടെ പേര്" msgstr "നിങ്ങളുടെ പേര്"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക" msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക" msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "ഡിസൈനിങിനും പ്രോട്ടോടൈപ്പിങിനുമുള്ള ഓപ്പൺ സോഴ്സ് പ്രതിവിധി."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "ഉപയോഗനിബന്ധനകൾ" msgstr "ഉപയോഗനിബന്ധനകൾ"
#, unused #: src/app/main/ui/auth/login.cljs:185, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:182
msgid "auth.terms-privacy-agreement"
msgstr ""
"ഒരു അക്കൗണ്ട് സൃഷ്ടിക്കുമ്പോൾ, നിങ്ങൾ ഞങ്ങളുടെ ഉപയോഗനിബന്ധനകളും "
"സ്വകാര്യതാനയവും അംഗീകരിക്കുന്നു."
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "സാധൂകരിക്കാനുള്ള ഇമെയിൽ ഞങ്ങൾ അയച്ചിരിക്കുന്നു"
#: src/app/main/ui/auth/login.cljs:179, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:187
msgid "auth.work-email" msgid "auth.work-email"
msgstr "ജോലിക്കുള്ള ഇമെയിൽ" msgstr "ജോലിക്കുള്ള ഇമെയിൽ"
#: src/app/main/ui/onboarding/questions.cljs
#, unused
msgid "branding-illustrations-marketing-pieces"
msgstr "...ബ്രാൻഡിങ്, ചിത്രരചനകൾ, മാർക്കറ്റിങ് ശകലങ്ങൾ, തുടങ്ങിയവ."
#: src/app/main/ui/viewer/share_link.cljs:304, src/app/main/ui/viewer/share_link.cljs:314 #: src/app/main/ui/viewer/share_link.cljs:304, src/app/main/ui/viewer/share_link.cljs:314
msgid "common.share-link.all-users" msgid "common.share-link.all-users"
msgstr "എല്ലാ പെൻപോട്ട് ഉപയോക്താക്കളും" msgstr "എല്ലാ പെൻപോട്ട് ഉപയോക്താക്കളും"
@ -250,7 +207,7 @@ msgstr "പ്രോട്ടോടൈപ്പുകൾ പങ്കുവെ
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "എല്ലാം തിരഞ്ഞെടുക്കുക" msgstr "എല്ലാം തിരഞ്ഞെടുക്കുക"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700 #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക്കുക" msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക്കുക"
@ -258,11 +215,11 @@ msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "ഇമെയിൽ മാറ്റുക" msgstr "ഇമെയിൽ മാറ്റുക"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(പകർത്തുക)" msgstr "(പകർത്തുക)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "പുതിയ സംഘം രൂപീകരിക്കുക" msgstr "പുതിയ സംഘം രൂപീകരിക്കുക"
@ -270,15 +227,15 @@ msgstr "പുതിയ സംഘം രൂപീകരിക്കുക"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "നിങ്ങളുടെ പെൻപോട്ട്" msgstr "നിങ്ങളുടെ പെൻപോട്ട്"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "സംഘത്തെ നീക്കുക" msgstr "സംഘത്തെ നീക്കുക"
#: src/app/main/ui/dashboard/file_menu.cljs:305, src/app/main/ui/dashboard/project_menu.cljs:92 #: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate" msgid "dashboard.duplicate"
msgstr "പകർപ്പ്" msgstr "പകർപ്പ്"
#: src/app/main/ui/dashboard/file_menu.cljs:272 #: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi" msgid "dashboard.duplicate-multi"
msgstr "%s ഫയലുകളുടെ പകർപ്പ്" msgstr "%s ഫയലുകളുടെ പകർപ്പ്"
@ -290,19 +247,10 @@ msgstr "ആർട്ട്ബോർഡുകൾ പിഡിഎഫായി എ
msgid "dashboard.export-frames.title" msgid "dashboard.export-frames.title"
msgstr "പിഡിഎഫായി എക്സ്പോർട്ട് ചെയ്യുക" msgstr "പിഡിഎഫായി എക്സ്പോർട്ട് ചെയ്യുക"
#, unused
msgid "dashboard.export-multi"
msgstr "പെൻപോട്ട് %s ഫയലുകൾ എക്സ്പോർട്ട് ചെയ്യുക"
#: src/app/main/ui/workspace/main_menu.cljs:728 #: src/app/main/ui/workspace/main_menu.cljs:728
msgid "dashboard.export-shapes" msgid "dashboard.export-shapes"
msgstr "എക്സ്പോർട്ട്" msgstr "എക്സ്പോർട്ട്"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "റിക്കവറി ടോക്കൺ അസാധുവാണ്." msgstr "റിക്കവറി ടോക്കൺ അസാധുവാണ്."
#: src/app/main/ui/exports/files.cljs:132
#, unused
msgid "files-download-modal.description-2"
msgstr "* ഘടകങ്ങൾ, ഗ്രാഫിക്സ്, നിറങ്ങൾ അല്ലെങ്കിൽ മുദ്രണകലകൾ എന്നിവ ഉൾപ്പെടാം."

File diff suppressed because it is too large Load Diff

View File

@ -11,23 +11,23 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/recovery.cljs:77 #: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Bekreft passord" msgstr "Bekreft passord"
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Glemt passordet?" msgstr "Glemt passordet?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Fullt navn" msgstr "Fullt navn"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Skriv inn et nytt passord" msgstr "Skriv inn et nytt passord"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Passord" msgstr "Passord"
@ -35,27 +35,27 @@ msgstr "Passord"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Gjenopprett passord" msgstr "Gjenopprett passord"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Endre passordet ditt" msgstr "Endre passordet ditt"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Ingen konto enda?" msgstr "Ingen konto enda?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Opprett konto" msgstr "Opprett konto"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Opprett konto" msgstr "Opprett konto"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700 #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Legg til som delt bibliotek" msgstr "Legg til som delt bibliotek"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(kopi)" msgstr "(kopi)"
@ -63,7 +63,7 @@ msgstr "(kopi)"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Din Penpot" msgstr "Din Penpot"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "Slett lag" msgstr "Slett lag"
@ -71,7 +71,7 @@ msgstr "Slett lag"
msgid "dashboard.invite-profile" msgid "dashboard.invite-profile"
msgstr "Inviter til team" msgstr "Inviter til team"
#: src/app/main/ui/dashboard/sidebar.cljs:608, src/app/main/ui/dashboard/sidebar.cljs:615, src/app/main/ui/dashboard/sidebar.cljs:620, src/app/main/ui/dashboard/team.cljs:464 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:257, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:263, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:268, src/app/main/ui/dashboard/team.cljs:464
msgid "dashboard.leave-team" msgid "dashboard.leave-team"
msgstr "Forlat team" msgstr "Forlat team"
@ -79,43 +79,43 @@ msgstr "Forlat team"
msgid "dashboard.libraries-title" msgid "dashboard.libraries-title"
msgstr "Delte biblioteker" msgstr "Delte biblioteker"
#: src/app/main/ui/dashboard/file_menu.cljs:313, src/app/main/ui/dashboard/project_menu.cljs:101 #: src/app/main/ui/dashboard/file_menu.cljs:308, src/app/main/ui/dashboard/project_menu.cljs:101
msgid "dashboard.move-to" msgid "dashboard.move-to"
msgstr "Flytt til" msgstr "Flytt til"
#: src/app/main/ui/dashboard/file_menu.cljs:277 #: src/app/main/ui/dashboard/file_menu.cljs:272
msgid "dashboard.move-to-multi" msgid "dashboard.move-to-multi"
msgstr "Flytt %s filer til" msgstr "Flytt %s filer til"
#: src/app/main/ui/dashboard/file_menu.cljs:249 #: src/app/main/ui/dashboard/file_menu.cljs:73
msgid "dashboard.move-to-other-team" msgid "dashboard.move-to-other-team"
msgstr "Flytt til annet team" msgstr "Flytt til annet team"
#: src/app/main/ui/dashboard/files.cljs:111, src/app/main/ui/dashboard/projects.cljs:259, src/app/main/ui/dashboard/projects.cljs:260 #: src/app/main/ui/dashboard/files.cljs:117, src/app/main/ui/dashboard/projects.cljs:259
msgid "dashboard.new-file" msgid "dashboard.new-file"
msgstr "+ Ny fil" msgstr "+ Ny fil"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ Nytt prosjekt" msgstr "+ Nytt prosjekt"
#: src/app/main/ui/dashboard/team.cljs:1719 #: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members" msgid "dashboard.num-of-members"
msgstr "%s medlemmer" msgstr "%s medlemmer"
#: src/app/main/ui/dashboard/file_menu.cljs:296 #: src/app/main/ui/dashboard/file_menu.cljs:294
msgid "dashboard.open-in-new-tab" msgid "dashboard.open-in-new-tab"
msgstr "Åpne fil i ny fane" msgstr "Åpne fil i ny fane"
#: src/app/main/ui/settings/password.cljs:106, src/app/main/ui/settings/password.cljs:120 #: src/app/main/ui/settings/password.cljs:112, src/app/main/ui/settings/password.cljs:126
msgid "dashboard.password-change" msgid "dashboard.password-change"
msgstr "Endre passord" msgstr "Endre passord"
#: src/app/main/ui/dashboard/pin_button.cljs:22, src/app/main/ui/dashboard/project_menu.cljs:96 #: src/app/main/ui/dashboard/files.cljs:122, src/app/main/ui/dashboard/project_menu.cljs:98, src/app/main/ui/dashboard/projects.cljs:251
msgid "dashboard.pin-unpin" msgid "dashboard.pin-unpin"
msgstr "Fest/løsne" msgstr "Fest/løsne"
#: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:59 #: src/app/main/ui/dashboard/deleted.cljs:65, src/app/main/ui/dashboard/projects.cljs:51
msgid "dashboard.projects-title" msgid "dashboard.projects-title"
msgstr "Prosjekter" msgstr "Prosjekter"
@ -123,12 +123,7 @@ msgstr "Prosjekter"
msgid "dashboard.remove-account" msgid "dashboard.remove-account"
msgstr "Ønsker du å fjerne kontoen din?" msgstr "Ønsker du å fjerne kontoen din?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/sidebar.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:229, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
#, unused
msgid "dashboard.remove-shared"
msgstr "Fjern som delt bibliotek"
#: src/app/main/ui/dashboard/sidebar.cljs:282, src/app/main/ui/dashboard/sidebar.cljs:283, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
msgid "dashboard.search-placeholder" msgid "dashboard.search-placeholder"
msgstr "Søk …" msgstr "Søk …"
@ -144,19 +139,19 @@ msgstr "Velg grensesnittsspråk"
msgid "dashboard.select-ui-theme" msgid "dashboard.select-ui-theme"
msgstr "Velg drakt" msgstr "Velg drakt"
#: src/app/main/ui/dashboard/projects.cljs:292 #: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files" msgid "dashboard.show-all-files"
msgstr "Vis alle filer" msgstr "Vis alle filer"
#: src/app/main/ui/dashboard/team.cljs:1663 #: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info" msgid "dashboard.team-info"
msgstr "Teaminfo" msgstr "Teaminfo"
#: src/app/main/ui/dashboard/team.cljs:1708 #: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members" msgid "dashboard.team-members"
msgstr "Teammedlemmer" msgstr "Teammedlemmer"
#: src/app/main/ui/dashboard/team.cljs:1723 #: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects" msgid "dashboard.team-projects"
msgstr "Lagprosjekter" msgstr "Lagprosjekter"
@ -172,11 +167,11 @@ msgstr "Din konto"
msgid "dashboard.your-name" msgid "dashboard.your-name"
msgstr "Ditt navn" msgstr "Ditt navn"
#: src/app/main/ui/comments.cljs:691, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436 #: src/app/main/ui/comments.cljs:719, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436
msgid "ds.confirm-cancel" msgid "ds.confirm-cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:157, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102 #: src/app/main/ui/confirm.cljs:44, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:156, src/app/main/ui/workspace/sidebar/options/menus/variants_help_modal.cljs:102
msgid "ds.confirm-ok" msgid "ds.confirm-ok"
msgstr "OK" msgstr "OK"
@ -188,11 +183,11 @@ msgstr "Er du sikker?"
msgid "errors.invalid-color" msgid "errors.invalid-color"
msgstr "Ugyldig farge" msgstr "Ugyldig farge"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "Gjenopprettelsessymbolet er ugyldig." msgstr "Gjenopprettelsessymbolet er ugyldig."
#: src/app/main/ui/auth/verify_token.cljs:75 #: src/app/main/ui/auth/verify_token.cljs:95
msgid "errors.unexpected-token" msgid "errors.unexpected-token"
msgstr "Ukjent symbol" msgstr "Ukjent symbol"
@ -204,50 +199,15 @@ msgstr "Beskrivelse"
msgid "feedback.subject" msgid "feedback.subject"
msgstr "Emne" msgstr "Emne"
#: src/app/main/ui/workspace/sidebar/options/menus/blur.cljs:152
#, unused
msgid "inspect.attributes.blur.value"
msgstr "Verdi"
#: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:129 #: src/app/main/ui/inspect/attributes/common.cljs:78, src/app/main/ui/inspect/styles/rows/color_properties_row.cljs:129
msgid "inspect.attributes.image.download" msgid "inspect.attributes.image.download"
msgstr "Last ned kildebilde" msgstr "Last ned kildebilde"
#: src/app/main/ui/inspect/attributes/image.cljs:39
#, unused
msgid "inspect.attributes.image.height"
msgstr "Høyde"
#: src/app/main/ui/inspect/attributes/image.cljs:32
#, unused
msgid "inspect.attributes.image.width"
msgstr "Bredde"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.height"
msgstr "Høyde"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.left"
msgstr "Venstre"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.width"
msgstr "Bredde"
#: src/app/main/ui/inspect/attributes/shadow.cljs:66 #: src/app/main/ui/inspect/attributes/shadow.cljs:66
msgid "inspect.attributes.shadow" msgid "inspect.attributes.shadow"
msgstr "Skygge" msgstr "Skygge"
#: src/app/main/ui/inspect/attributes/stroke.cljs #: src/app/main/ui/inspect/attributes/text.cljs:53, src/app/main/ui/inspect/attributes/text.cljs:158
#, unused
msgid "inspect.attributes.stroke.width"
msgstr "Bredde"
#: src/app/main/ui/inspect/attributes/text.cljs:53, src/app/main/ui/inspect/attributes/text.cljs:159
msgid "inspect.attributes.typography" msgid "inspect.attributes.typography"
msgstr "Typografi" msgstr "Typografi"
@ -287,11 +247,11 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text" msgid "inspect.tabs.code.selected.text"
msgstr "Tekst" msgstr "Tekst"
#: src/app/main/data/common.cljs:92, src/app/main/data/team.cljs:193, src/app/main/data/team.cljs:650, src/app/main/ui/dashboard/import.cljs:640, src/app/main/ui/dashboard/import.cljs:646 #: src/app/main/data/common.cljs:92, src/app/main/data/team.cljs:193, src/app/main/data/team.cljs:650, src/app/main/ui/dashboard/import.cljs:671, src/app/main/ui/dashboard/import.cljs:677
msgid "labels.accept" msgid "labels.accept"
msgstr "Godta" msgstr "Godta"
#: src/app/main/data/common.cljs:121, src/app/main/ui/dashboard/change_owner.cljs:67, src/app/main/ui/dashboard/change_owner.cljs:174, src/app/main/ui/dashboard/import.cljs:626, src/app/main/ui/dashboard/team.cljs:896, src/app/main/ui/dashboard/team.cljs:1405, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:163, src/app/main/ui/exports/files.cljs:201, src/app/main/ui/settings/import_shortcuts_diff_modal.cljs:156, src/app/main/ui/settings/integrations.cljs:220, src/app/main/ui/settings/restore_shortcuts_modal.cljs:165, src/app/main/ui/shortcuts.cljs:578, src/app/main/ui/viewer/share_link.cljs:203, src/app/main/ui/workspace/sidebar/assets/groups.cljs:178, src/app/main/ui/workspace/tokens/export/modal.cljs:43, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/import_from_library.cljs:88, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:360, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:73, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:242 #: src/app/main/data/common.cljs:121, src/app/main/data/nitrate.cljs:532, src/app/main/data/nitrate.cljs:617, src/app/main/ui/dashboard/change_owner.cljs:67, src/app/main/ui/dashboard/change_owner.cljs:174, src/app/main/ui/dashboard/import.cljs:657, src/app/main/ui/dashboard/team.cljs:902, src/app/main/ui/dashboard/team.cljs:1411, src/app/main/ui/delete_shared.cljs:36, src/app/main/ui/exports/assets.cljs:163, src/app/main/ui/exports/files.cljs:199, src/app/main/ui/settings/import_shortcuts_diff_modal.cljs:156, src/app/main/ui/settings/integrations.cljs:220, src/app/main/ui/settings/restore_shortcuts_modal.cljs:165, src/app/main/ui/shortcuts.cljs:651, src/app/main/ui/viewer/share_link.cljs:203, src/app/main/ui/workspace/sidebar/assets/groups.cljs:178, src/app/main/ui/workspace/tokens/export/modal.cljs:43, src/app/main/ui/workspace/tokens/import/modal.cljs:268, src/app/main/ui/workspace/tokens/import_from_library.cljs:88, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:360, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:73, src/app/main/ui/workspace/tokens/settings/menu.cljs:104, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:243
msgid "labels.cancel" msgid "labels.cancel"
msgstr "Avbryt" msgstr "Avbryt"
@ -299,11 +259,11 @@ msgstr "Avbryt"
msgid "labels.code" msgid "labels.code"
msgstr "Kode" msgstr "Kode"
#: src/app/main/ui/settings/password.cljs:103 #: src/app/main/ui/settings/password.cljs:109
msgid "labels.confirm-password" msgid "labels.confirm-password"
msgstr "Bekreft passord" msgstr "Bekreft passord"
#: src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203 #: src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:202
msgid "labels.create" msgid "labels.create"
msgstr "Opprett" msgstr "Opprett"
@ -315,35 +275,31 @@ msgstr "Opprett nytt lag"
msgid "labels.create-team.placeholder" msgid "labels.create-team.placeholder"
msgstr "Skriv inn nytt lagnavn" msgstr "Skriv inn nytt lagnavn"
#, unused
msgid "labels.custom-fonts"
msgstr "Egendefinerte skrifter"
#: src/app/main/ui/settings/sidebar.cljs:86 #: src/app/main/ui/settings/sidebar.cljs:86
msgid "labels.dashboard" msgid "labels.dashboard"
msgstr "Oversikt" msgstr "Oversikt"
#: src/app/main/ui/dashboard/file_menu.cljs:337, src/app/main/ui/dashboard/fonts.cljs:286, src/app/main/ui/dashboard/fonts.cljs:363, src/app/main/ui/dashboard/fonts.cljs:397, src/app/main/ui/dashboard/import.cljs:333, src/app/main/ui/dashboard/project_menu.cljs:115, src/app/main/ui/dashboard/team.cljs:1439, src/app/main/ui/settings/integrations.cljs:376, src/app/main/ui/settings/profile.cljs:117, src/app/main/ui/settings/profile.cljs:128, src/app/main/ui/settings/profile.cljs:129, src/app/main/ui/workspace/sidebar/assets/common.cljs:231, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:223, src/app/main/ui/workspace/sidebar/versions.cljs:257, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:353, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:111, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:378 #: src/app/main/ui/dashboard/file_menu.cljs:335, src/app/main/ui/dashboard/fonts.cljs:286, src/app/main/ui/dashboard/fonts.cljs:363, src/app/main/ui/dashboard/fonts.cljs:397, src/app/main/ui/dashboard/import.cljs:332, src/app/main/ui/dashboard/project_menu.cljs:116, src/app/main/ui/dashboard/team.cljs:1445, src/app/main/ui/settings/integrations.cljs:376, src/app/main/ui/settings/profile.cljs:117, src/app/main/ui/settings/profile.cljs:128, src/app/main/ui/settings/profile.cljs:129, src/app/main/ui/workspace/sidebar/assets/common.cljs:231, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:222, src/app/main/ui/workspace/sidebar/versions.cljs:257, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:353, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:111, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:66, src/app/main/ui/workspace/tokens/themes/create_modal.cljs:394
msgid "labels.delete" msgid "labels.delete"
msgstr "Slett" msgstr "Slett"
#: src/app/main/ui/comments.cljs:1019 #: src/app/main/ui/comments.cljs:1047
msgid "labels.delete-comment" msgid "labels.delete-comment"
msgstr "Slett kommentar" msgstr "Slett kommentar"
#: src/app/main/ui/comments.cljs:941 #: src/app/main/ui/comments.cljs:969
msgid "labels.delete-comment-thread" msgid "labels.delete-comment-thread"
msgstr "Slett tråd" msgstr "Slett tråd"
#: src/app/main/ui/dashboard/file_menu.cljs:292 #: src/app/main/ui/dashboard/file_menu.cljs:289
msgid "labels.delete-multi-files" msgid "labels.delete-multi-files"
msgstr "Slett %s filer" msgstr "Slett %s filer"
#: src/app/main/ui/dashboard/file_menu.cljs:30, src/app/main/ui/dashboard/files.cljs:81, src/app/main/ui/dashboard/files.cljs:186, src/app/main/ui/dashboard/projects.cljs:231, src/app/main/ui/dashboard/projects.cljs:235, src/app/main/ui/dashboard/sidebar.cljs:1139 #: src/app/main/ui/dashboard/file_menu.cljs:28, src/app/main/ui/dashboard/files.cljs:86, src/app/main/ui/dashboard/files.cljs:207, src/app/main/ui/dashboard/projects.cljs:225, src/app/main/ui/dashboard/projects.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:362
msgid "labels.drafts" msgid "labels.drafts"
msgstr "Kladder" msgstr "Kladder"
#: src/app/main/ui/comments.cljs:1015, src/app/main/ui/dashboard/fonts.cljs:280, src/app/main/ui/dashboard/import.cljs:327, src/app/main/ui/dashboard/team.cljs:1437, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:218, src/app/main/ui/workspace/tokens/themes.cljs:52 #: src/app/main/ui/comments.cljs:1043, src/app/main/ui/dashboard/fonts.cljs:280, src/app/main/ui/dashboard/import.cljs:326, src/app/main/ui/dashboard/team.cljs:1443, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:52
msgid "labels.edit" msgid "labels.edit"
msgstr "Rediger" msgstr "Rediger"
@ -351,11 +307,7 @@ msgstr "Rediger"
msgid "labels.font-family" msgid "labels.font-family"
msgstr "Skriftfamilie" msgstr "Skriftfamilie"
#, unused #: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:375
msgid "labels.font-providers"
msgstr "Skrifttilbydere"
#: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:1152
msgid "labels.fonts" msgid "labels.fonts"
msgstr "Skrifter" msgstr "Skrifter"
@ -371,23 +323,23 @@ msgstr "Installerte skrifter"
msgid "labels.language" msgid "labels.language"
msgstr "Språk" msgstr "Språk"
#: src/app/main/ui/dashboard/sidebar.cljs:1527 #: src/app/main/ui/dashboard/sidebar.cljs:750
msgid "labels.logout" msgid "labels.logout"
msgstr "Logg ut" msgstr "Logg ut"
#: src/app/main/ui/dashboard/sidebar.cljs:581, src/app/main/ui/dashboard/team.cljs:125, src/app/main/ui/dashboard/team.cljs:133 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:228, src/app/main/ui/dashboard/team.cljs:125, src/app/main/ui/dashboard/team.cljs:133
msgid "labels.members" msgid "labels.members"
msgstr "Medlemmer" msgstr "Medlemmer"
#: src/app/main/ui/settings/password.cljs:96 #: src/app/main/ui/settings/password.cljs:102
msgid "labels.new-password" msgid "labels.new-password"
msgstr "Nytt passord" msgstr "Nytt passord"
#: src/app/main/ui/settings/password.cljs:89 #: src/app/main/ui/settings/password.cljs:95
msgid "labels.old-password" msgid "labels.old-password"
msgstr "Gammelt passord" msgstr "Gammelt passord"
#: src/app/main/ui/dashboard/team.cljs:437, src/app/main/ui/dashboard/team.cljs:675, src/app/main/ui/dashboard/team.cljs:1714 #: src/app/main/ui/dashboard/team.cljs:403, src/app/main/ui/dashboard/team.cljs:437, src/app/main/ui/dashboard/team.cljs:675, src/app/main/ui/dashboard/team.cljs:888, src/app/main/ui/dashboard/team.cljs:1720
msgid "labels.owner" msgid "labels.owner"
msgstr "Eier" msgstr "Eier"
@ -399,27 +351,27 @@ msgstr "Passord"
msgid "labels.profile" msgid "labels.profile"
msgstr "Profil" msgstr "Profil"
#: src/app/main/ui/dashboard/sidebar.cljs:1132 #: src/app/main/ui/dashboard/sidebar.cljs:355
msgid "labels.projects" msgid "labels.projects"
msgstr "Prosjekter" msgstr "Prosjekter"
#: src/app/main/ui/forms.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:406 #: src/app/main/ui/forms.cljs:191, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:167, src/app/main/ui/workspace/sidebar/options/menus/interactions.cljs:402
msgid "labels.remove" msgid "labels.remove"
msgstr "Fjern" msgstr "Fjern"
#: src/app/main/ui/dashboard/file_menu.cljs:300, src/app/main/ui/dashboard/project_menu.cljs:88, src/app/main/ui/dashboard/sidebar.cljs:602, src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/versions.cljs:228, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:76, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:101, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63 #: src/app/main/ui/dashboard/file_menu.cljs:298, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:251, src/app/main/ui/dashboard/project_menu.cljs:90, src/app/main/ui/workspace/sidebar/assets/groups.cljs:186, src/app/main/ui/workspace/sidebar/versions.cljs:228, src/app/main/ui/workspace/tokens/management/forms/rename_node_modal.cljs:76, src/app/main/ui/workspace/tokens/management/node_context_menu.cljs:101, src/app/main/ui/workspace/tokens/sets/context_menu.cljs:63
msgid "labels.rename" msgid "labels.rename"
msgstr "Gi nytt navn" msgstr "Gi nytt navn"
#: src/app/main/ui/components/progress.cljs:80, src/app/main/ui/static.cljs:324, src/app/main/ui/static.cljs:333, src/app/main/ui/static.cljs:428 #: src/app/main/ui/components/progress.cljs:80, src/app/main/ui/static.cljs:333, src/app/main/ui/static.cljs:342, src/app/main/ui/static.cljs:437
msgid "labels.retry" msgid "labels.retry"
msgstr "Prøv igjen" msgstr "Prøv igjen"
#: src/app/main/ui/dashboard/team.cljs:624, src/app/main/ui/dashboard/team.cljs:1214 #: src/app/main/ui/dashboard/team.cljs:624, src/app/main/ui/dashboard/team.cljs:1220
msgid "labels.role" msgid "labels.role"
msgstr "Rolle" msgstr "Rolle"
#: src/app/main/ui/dashboard/fonts.cljs:435, src/app/main/ui/shortcuts.cljs:583, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:204, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:364, src/app/main/ui/workspace/tokens/settings/menu.cljs:109 #: src/app/main/ui/dashboard/fonts.cljs:435, src/app/main/ui/shortcuts.cljs:656, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:203, src/app/main/ui/workspace/tokens/management/forms/generic_form.cljs:364, src/app/main/ui/workspace/tokens/settings/menu.cljs:109
msgid "labels.save" msgid "labels.save"
msgstr "Lagre" msgstr "Lagre"
@ -435,11 +387,11 @@ msgstr "Send"
msgid "labels.sending" msgid "labels.sending"
msgstr "Sender …" msgstr "Sender …"
#: src/app/main/ui/dashboard/sidebar.cljs:595, src/app/main/ui/dashboard/team.cljs:126, src/app/main/ui/dashboard/team.cljs:140, src/app/main/ui/settings/options.cljs:133, src/app/main/ui/settings/sidebar.cljs:91, src/app/main/ui/settings/sidebar.cljs:118 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:243, src/app/main/ui/dashboard/team.cljs:126, src/app/main/ui/dashboard/team.cljs:140, src/app/main/ui/settings/options.cljs:133, src/app/main/ui/settings/sidebar.cljs:91, src/app/main/ui/settings/sidebar.cljs:118
msgid "labels.settings" msgid "labels.settings"
msgstr "Innstillinger" msgstr "Innstillinger"
#: src/app/main/ui/dashboard/sidebar.cljs:1159 #: src/app/main/ui/dashboard/sidebar.cljs:382
msgid "labels.shared-libraries" msgid "labels.shared-libraries"
msgstr "Delte bibliotek" msgstr "Delte bibliotek"
@ -459,7 +411,7 @@ msgstr "Last opp egendefinerte skrifter"
msgid "labels.uploading" msgid "labels.uploading"
msgstr "Laster opp …" msgstr "Laster opp …"
#: src/app/main/ui/comments.cljs:862 #: src/app/main/ui/comments.cljs:890
msgid "labels.write-new-comment" msgid "labels.write-new-comment"
msgstr "Skriv ny kommentar" msgstr "Skriv ny kommentar"
@ -479,19 +431,19 @@ msgstr "Bekreft ny e-postadresse"
msgid "modals.delete-account.confirm" msgid "modals.delete-account.confirm"
msgstr "Ja, slett kontoen min" msgstr "Ja, slett kontoen min"
#: src/app/main/ui/comments.cljs:913 #: src/app/main/ui/comments.cljs:941
msgid "modals.delete-comment-thread.accept" msgid "modals.delete-comment-thread.accept"
msgstr "Slett samtale" msgstr "Slett samtale"
#: src/app/main/ui/comments.cljs:911 #: src/app/main/ui/comments.cljs:939
msgid "modals.delete-comment-thread.title" msgid "modals.delete-comment-thread.title"
msgstr "Slett samtale" msgstr "Slett samtale"
#: src/app/main/ui/dashboard/file_menu.cljs:126 #: src/app/main/ui/dashboard/file_menu.cljs:155
msgid "modals.delete-file-confirm.accept" msgid "modals.delete-file-confirm.accept"
msgstr "Slett fil" msgstr "Slett fil"
#: src/app/main/ui/dashboard/file_menu.cljs:120 #: src/app/main/ui/dashboard/file_menu.cljs:149
msgid "modals.delete-file-multi-confirm.accept" msgid "modals.delete-file-multi-confirm.accept"
msgstr "Slett filer" msgstr "Slett filer"
@ -499,7 +451,7 @@ msgstr "Slett filer"
msgid "modals.delete-page.title" msgid "modals.delete-page.title"
msgstr "Slett side" msgstr "Slett side"
#: src/app/main/ui/dashboard/project_menu.cljs:73 #: src/app/main/ui/dashboard/project_menu.cljs:84
msgid "modals.delete-project-confirm.accept" msgid "modals.delete-project-confirm.accept"
msgstr "Slett prosjekt" msgstr "Slett prosjekt"
@ -511,7 +463,7 @@ msgstr "Slett medlem"
msgid "modals.delete-team-member-confirm.title" msgid "modals.delete-team-member-confirm.title"
msgstr "Slett teammedlem" msgstr "Slett teammedlem"
#: src/app/main/ui/dashboard/sidebar.cljs:544, src/app/main/ui/dashboard/sidebar.cljs:566, src/app/main/ui/dashboard/team.cljs:540, src/app/main/ui/dashboard/team.cljs:562 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:168, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:193, src/app/main/ui/dashboard/team.cljs:540, src/app/main/ui/dashboard/team.cljs:562
msgid "modals.leave-confirm.accept" msgid "modals.leave-confirm.accept"
msgstr "Forlat team" msgstr "Forlat team"
@ -519,7 +471,7 @@ msgstr "Forlat team"
msgid "modals.update-remote-component.cancel" msgid "modals.update-remote-component.cancel"
msgstr "Avbryt" msgstr "Avbryt"
#: src/app/main/ui/dashboard/team.cljs:213, src/app/main/ui/dashboard/team.cljs:1131 #: src/app/main/ui/dashboard/team.cljs:213, src/app/main/ui/dashboard/team.cljs:1137
msgid "notifications.invitation-email-sent" msgid "notifications.invitation-email-sent"
msgstr "Invitasjon sendt" msgstr "Invitasjon sendt"
@ -531,7 +483,7 @@ msgstr "Profil lagret"
msgid "title.settings.options" msgid "title.settings.options"
msgstr "Innstillinger - Penpot" msgstr "Innstillinger - Penpot"
#: src/app/main/ui/settings/password.cljs:115 #: src/app/main/ui/settings/password.cljs:121
msgid "title.settings.password" msgid "title.settings.password"
msgstr "Passord - Penpot" msgstr "Passord - Penpot"
@ -539,7 +491,7 @@ msgstr "Passord - Penpot"
msgid "title.settings.profile" msgid "title.settings.profile"
msgstr "Profil - Penpot" msgstr "Profil - Penpot"
#: src/app/main/ui/dashboard/team.cljs:1636 #: src/app/main/ui/dashboard/team.cljs:1642
msgid "title.team-settings" msgid "title.team-settings"
msgstr "Innstillinger - %s - Penpot" msgstr "Innstillinger - %s - Penpot"
@ -547,11 +499,11 @@ msgstr "Innstillinger - %s - Penpot"
msgid "title.workspace" msgid "title.workspace"
msgstr "%s - Penpot" msgstr "%s - Penpot"
#: src/app/main/ui/dashboard/grid.cljs:156, src/app/main/ui/dashboard/grid.cljs:189, src/app/main/ui/workspace/colorpicker/libraries.cljs:364, src/app/main/ui/workspace/colorpicker/libraries.cljs:381, src/app/main/ui/workspace/colorpicker/libraries.cljs:395, src/app/main/ui/workspace/sidebar/assets/colors.cljs:512, src/app/main/ui/workspace/sidebar/assets.cljs:164 #: src/app/main/ui/dashboard/grid.cljs:156, src/app/main/ui/dashboard/grid.cljs:189, src/app/main/ui/workspace/colorpicker/libraries.cljs:364, src/app/main/ui/workspace/colorpicker/libraries.cljs:381, src/app/main/ui/workspace/colorpicker/libraries.cljs:395, src/app/main/ui/workspace/sidebar/assets/colors.cljs:512, src/app/main/ui/workspace/sidebar/assets.cljs:185
msgid "workspace.assets.colors" msgid "workspace.assets.colors"
msgstr "Farger" msgstr "Farger"
#: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:167, src/app/main/ui/workspace/sidebar/assets/components.cljs:588, src/app/main/ui/workspace/sidebar/assets.cljs:161 #: src/app/main/ui/dashboard/grid.cljs:152, src/app/main/ui/dashboard/grid.cljs:167, src/app/main/ui/workspace/sidebar/assets/components.cljs:588, src/app/main/ui/workspace/sidebar/assets.cljs:182
msgid "workspace.assets.components" msgid "workspace.assets.components"
msgstr "Komponenter" msgstr "Komponenter"
@ -559,20 +511,15 @@ msgstr "Komponenter"
msgid "workspace.assets.create-group" msgid "workspace.assets.create-group"
msgstr "Opprett en gruppe" msgstr "Opprett en gruppe"
#: src/app/main/ui/workspace/context_menu.cljs:828, src/app/main/ui/workspace/sidebar/assets/colors.cljs:265, src/app/main/ui/workspace/sidebar/assets/components.cljs:670, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:475, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:821 #: src/app/main/ui/workspace/context_menu.cljs:828, src/app/main/ui/workspace/sidebar/assets/colors.cljs:265, src/app/main/ui/workspace/sidebar/assets/components.cljs:670, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:476, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:821
msgid "workspace.assets.delete" msgid "workspace.assets.delete"
msgstr "Slett" msgstr "Slett"
#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:258, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:466 #: src/app/main/ui/workspace/sidebar/assets/colors.cljs:258, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:467
msgid "workspace.assets.edit" msgid "workspace.assets.edit"
msgstr "Rediger" msgstr "Rediger"
#: src/app/main/ui/workspace/sidebar/assets/graphics.cljs:386, src/app/main/ui/workspace/sidebar/assets.cljs:152 #: src/app/main/ui/workspace/sidebar/assets/colors.cljs:269, src/app/main/ui/workspace/sidebar/assets/components.cljs:654, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:481
#, unused
msgid "workspace.assets.graphics"
msgstr "Grafikk"
#: src/app/main/ui/workspace/sidebar/assets/colors.cljs:269, src/app/main/ui/workspace/sidebar/assets/components.cljs:654, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:480
msgid "workspace.assets.group" msgid "workspace.assets.group"
msgstr "Gruppe" msgstr "Gruppe"
@ -580,15 +527,10 @@ msgstr "Gruppe"
msgid "workspace.assets.group-name" msgid "workspace.assets.group-name"
msgstr "Gruppenavn" msgstr "Gruppenavn"
#: src/app/main/ui/workspace/context_menu.cljs:831, src/app/main/ui/workspace/sidebar/assets/colors.cljs:254, src/app/main/ui/workspace/sidebar/assets/components.cljs:645, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:461 #: src/app/main/ui/workspace/context_menu.cljs:831, src/app/main/ui/workspace/sidebar/assets/colors.cljs:254, src/app/main/ui/workspace/sidebar/assets/components.cljs:645, src/app/main/ui/workspace/sidebar/assets/groups.cljs:66, src/app/main/ui/workspace/sidebar/assets/typographies.cljs:462
msgid "workspace.assets.rename" msgid "workspace.assets.rename"
msgstr "Gi nytt navn" msgstr "Gi nytt navn"
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs
#, unused
msgid "workspace.assets.typography.font-id"
msgstr "Skrift"
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:855 #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:855
msgid "workspace.assets.typography.font-size" msgid "workspace.assets.typography.font-size"
msgstr "Størrelse" msgstr "Størrelse"
@ -601,11 +543,6 @@ msgstr "Skriftstil"
msgid "workspace.header.menu.show-rules" msgid "workspace.header.menu.show-rules"
msgstr "Vis regler" msgstr "Vis regler"
#: src/app/main/ui/workspace/libraries.cljs
#, unused
msgid "workspace.libraries.add"
msgstr "Legg til"
#: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:97, src/app/main/ui/workspace/colorpicker/libraries.cljs:222, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49 #: src/app/main/ui/workspace/color_palette_ctx_menu.cljs:97, src/app/main/ui/workspace/colorpicker/libraries.cljs:222, src/app/main/ui/workspace/text_palette_ctx_menu.cljs:49
msgid "workspace.libraries.colors.file-library" msgid "workspace.libraries.colors.file-library"
msgstr "Filbibliotek" msgstr "Filbibliotek"
@ -614,15 +551,15 @@ msgstr "Filbibliotek"
msgid "workspace.libraries.colors.recent-colors" msgid "workspace.libraries.colors.recent-colors"
msgstr "Nylige farger" msgstr "Nylige farger"
#: src/app/main/ui/workspace/colorpicker.cljs:559 #: src/app/main/ui/workspace/colorpicker.cljs:560
msgid "workspace.libraries.colors.save-color" msgid "workspace.libraries.colors.save-color"
msgstr "Lagre fargestil" msgstr "Lagre fargestil"
#: src/app/main/ui/workspace/libraries.cljs:336 #: src/app/main/ui/workspace/libraries.cljs:424, src/app/main/ui/workspace/libraries.cljs:806
msgid "workspace.libraries.file-library" msgid "workspace.libraries.file-library"
msgstr "Filbibliotek" msgstr "Filbibliotek"
#: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1035, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1041, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1290 #: src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1022, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1028, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:1277
msgid "workspace.options.component" msgid "workspace.options.component"
msgstr "Komponent" msgstr "Komponent"
@ -630,38 +567,18 @@ msgstr "Komponent"
msgid "workspace.options.design" msgid "workspace.options.design"
msgstr "Design" msgstr "Design"
#: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/exports/assets.cljs:273, src/app/main/ui/inspect/exports.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:274 #: src/app/main/ui/exports/assets.cljs:171, src/app/main/ui/exports/assets.cljs:273, src/app/main/ui/inspect/exports.cljs:217, src/app/main/ui/workspace/sidebar/options/menus/exports.cljs:276
msgid "workspace.options.exporting-object" msgid "workspace.options.exporting-object"
msgstr "Eksporterer …" msgstr "Eksporterer …"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
#, unused
msgid "workspace.options.grid.params.columns"
msgstr "Kolonner"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292 #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:292
msgid "workspace.options.grid.params.height" msgid "workspace.options.grid.params.height"
msgstr "Høyde" msgstr "Høyde"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
#, unused
msgid "workspace.options.grid.params.rows"
msgstr "Rader"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:79 #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:79
msgid "workspace.options.grid.params.set-default" msgid "workspace.options.grid.params.set-default"
msgstr "Sett som forvalg" msgstr "Sett som forvalg"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
#, unused
msgid "workspace.options.grid.params.size"
msgstr "Størrelse"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs
#, unused
msgid "workspace.options.grid.params.type"
msgstr "Type"
#: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:73 #: src/app/main/ui/workspace/sidebar/options/menus/frame_grid.cljs:73
msgid "workspace.options.grid.params.use-default" msgid "workspace.options.grid.params.use-default"
msgstr "Bruk forvalg" msgstr "Bruk forvalg"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,93 +11,71 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n" "Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 2026.6.dev0\n" "X-Generator: Weblate 2026.6.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "Já tem uma conta?" msgstr "Já tem uma conta?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-mail"
msgstr "Verifique seu e-mail"
#: src/app/main/ui/auth/register.cljs:277
#, unused
msgid "auth.check-your-email"
msgstr ""
"Verifique seu e-mail e clique no link para verificar e começar a usar o "
"Penpot."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "Confirme sua senha" msgstr "Confirme sua senha"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "Criar conta de demonstração" msgstr "Criar conta de demonstração"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "Quer só experimentar?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"Este é um serviço DEMONSTRAÇÃO, NÃO USE para trabalho real, os projetos " "Este é um serviço DEMONSTRAÇÃO, NÃO USE para trabalho real, os projetos "
"serão apagados periodicamente." "serão apagados periodicamente."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "Esqueceu sua senha?" msgstr "Esqueceu sua senha?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "Nome completo" msgstr "Nome completo"
#: src/app/main/ui/auth/login.cljs:288 #: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title" msgid "auth.login-account-title"
msgstr "Entrar na minha conta" msgstr "Entrar na minha conta"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "Faça login aqui." msgstr "Faça login aqui."
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:297
#, unused
msgid "auth.login-submit"
msgstr "Login"
#: src/app/main/ui/auth/login.cljs:291
msgid "auth.login-tagline" msgid "auth.login-tagline"
msgstr "" msgstr ""
"Penpot é a ferramenta de design de código aberto e gratuita para " "Penpot é a ferramenta de design de código aberto e gratuita para "
"colaboração em design e código" "colaboração em design e código"
#: src/app/main/ui/auth/login.cljs:248 #: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "Digite uma nova senha" msgstr "Digite uma nova senha"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "Senha alterada com sucesso" msgstr "Senha alterada com sucesso"
@ -111,19 +89,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "Link de recuperação de senha enviado para o seu e-mail." msgstr "Link de recuperação de senha enviado para o seu e-mail."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "Entrou para a equipe com sucesso" msgstr "Entrou para a equipe com sucesso"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "Senha" msgstr "Senha"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "Pelo menos 8 caracteres" msgstr "Pelo menos 8 caracteres"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "Política de Privacidade" msgstr "Política de Privacidade"
@ -131,85 +109,56 @@ msgstr "Política de Privacidade"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "Recuperar senha" msgstr "Recuperar senha"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "Enviaremos um e-mail com instruções" msgstr "Enviaremos um e-mail com instruções"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "Esqueceu sua senha?" msgstr "Esqueceu sua senha?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "Altere sua senha" msgstr "Altere sua senha"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "Ainda não tem uma conta?" msgstr "Ainda não tem uma conta?"
#: src/app/main/ui/auth/register.cljs:368 #: src/app/main/ui/auth/register.cljs:357
msgid "auth.register-account-tagline" msgid "auth.register-account-tagline"
msgstr "Informe como deseja ser chamado no painel e nos e-mails." msgstr "Informe como deseja ser chamado no painel e nos e-mails."
#: src/app/main/ui/auth/register.cljs:367 #: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title" msgid "auth.register-account-title"
msgstr "Seu nome" msgstr "Seu nome"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "Criar uma conta" msgstr "Criar uma conta"
#: src/app/main/ui/auth/register.cljs:124 #: src/app/main/ui/auth/register.cljs:218
#, unused
msgid "auth.register-tagline"
msgstr ""
"Com uma conta gratuita do Penpot, você pode criar equipes ilimitadas e "
"colaborar com outros designers e desenvolvedores em quantos projetos "
"quiser. "
#: src/app/main/ui/auth/register.cljs:223
msgid "auth.register-title" msgid "auth.register-title"
msgstr "Criar uma conta" msgstr "Criar uma conta"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:49
#, unused
msgid "auth.sidebar-tagline"
msgstr "A solução de código aberto para design e prototipagem."
#: src/app/main/ui/auth/register.cljs:50
#, markdown #, markdown
msgid "auth.terms-and-privacy-agreement" msgid "auth.terms-and-privacy-agreement"
msgstr "Concordo com os [termos de serviço](%s) e a [política de privacidade](%s)." msgstr "Concordo com os [termos de serviço](%s) e a [política de privacidade](%s)."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210 #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "Termos de serviço" msgstr "Termos de serviço"
#, unused #: src/app/main/ui/auth/login.cljs:185, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:182
msgid "auth.terms-privacy-agreement"
msgstr ""
"Ao criar uma nova conta, você concorda com nossos termos de serviço e "
"política de privacidade."
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Enviamos um e-mail de verificação para"
#: src/app/main/ui/auth/login.cljs:179, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:187
msgid "auth.work-email" msgid "auth.work-email"
msgstr "E-mail profissional" msgstr "E-mail profissional"
#: src/app/main/ui/onboarding/questions.cljs #: src/app/main/ui/comments.cljs:577
#, unused
msgid "branding-illustrations-marketing-pieces"
msgstr "...branding, ilustrações, materiais de marketing, etc."
#: src/app/main/ui/comments.cljs:549
msgid "comments.mentions.not-found" msgid "comments.mentions.not-found"
msgstr "Nenhuma pessoa encontrada para @%s" msgstr "Nenhuma pessoa encontrada para @%s"
#: src/app/main/ui/workspace/libraries.cljs:349 #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
msgid "common.publish" msgid "common.publish"
msgstr "Publicar" msgstr "Publicar"
@ -281,59 +230,29 @@ msgstr "Compartilhar protótipos"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "Selecionar tudo" msgstr "Selecionar tudo"
#: src/app/main/ui/workspace/libraries.cljs:344 #: src/app/main/ui/workspace/libraries.cljs:432, src/app/main/ui/workspace/libraries.cljs:833
msgid "common.unpublish" msgid "common.unpublish"
msgstr "Despublicar" msgstr "Despublicar"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "Gestão da equipe" msgstr "Gestão da equipe"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "" msgstr ""
"O Penpot foi feito para equipes. Convide membros para trabalharem juntos em " "O Penpot foi feito para equipes. Convide membros para trabalharem juntos em "
"projetos e arquivos" "projetos e arquivos"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "Monte sua equipe!" msgstr "Monte sua equipe!"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr "Aprenda o básico no Penpot enquanto se diverte com este tutorial prático."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.start"
msgstr "Começar o tutorial"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.title"
msgstr "Tutorial prático"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.info"
msgstr "Explore o Penpot e conheça suas principais funcionalidades."
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.start"
msgstr "Começar o tour"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.walkthrough-hero.title"
msgstr "Apresentação da interface"
#: src/app/main/ui/dashboard/placeholder.cljs:40 #: src/app/main/ui/dashboard/placeholder.cljs:40
msgid "dashboard.add-file" msgid "dashboard.add-file"
msgstr "Adicionar arquivo" msgstr "Adicionar arquivo"
#: src/app/main/ui/dashboard/file_menu.cljs:323, src/app/main/ui/workspace/main_menu.cljs:700 #: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Adicionar como Biblioteca Compartilhada" msgstr "Adicionar como Biblioteca Compartilhada"
@ -341,10 +260,10 @@ msgstr "Adicionar como Biblioteca Compartilhada"
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "Alterar e-mail" msgstr "Alterar e-mail"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(copiar)" msgstr "(copiar)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "Criar nova equipe" msgstr "Criar nova equipe"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -11,78 +11,61 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 2026.6.dev0\n" "X-Generator: Weblate 2026.6.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "ஏற்கனவே ஒரு கணக்கு உள்ளதா?" msgstr "ஏற்கனவே ஒரு கணக்கு உள்ளதா?"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-your-email"
msgstr ""
"உங்கள் மின்னஞ்சலைச் சரிபார்த்து, இணைப்பைக் கிளிக் செய்து சரிபார்த்து, "
"Penpot ஐப் பயன்படுத்தத் தொடங்குங்கள்."
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "கடவுச்சொல்லை உறுதிப்படுத்தவும்" msgstr "கடவுச்சொல்லை உறுதிப்படுத்தவும்"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "டெமோ கணக்கை உருவாக்கவும்" msgstr "டெமோ கணக்கை உருவாக்கவும்"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs #: src/app/main/ui/auth/login.cljs:41
#, unused
msgid "auth.create-demo-profile"
msgstr "அதை முயற்சி செய்ய வேண்டுமா?"
#: src/app/main/ui/auth/login.cljs:40
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"இது ஒரு டெமோ சேவை, உண்மையான வேலைக்கு பயன்படுத்த வேண்டாம், திட்டங்கள் " "இது ஒரு டெமோ சேவை, உண்மையான வேலைக்கு பயன்படுத்த வேண்டாம், திட்டங்கள் "
"அவ்வப்போது அழிக்கப்படும்." "அவ்வப்போது அழிக்கப்படும்."
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "கடவுச்சொல்லை மறந்துவிட்டீர்களா?" msgstr "கடவுச்சொல்லை மறந்துவிட்டீர்களா?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "முழு பெயர்" msgstr "முழு பெயர்"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "இங்கே உள்நுழைக" msgstr "இங்கே உள்நுழைக"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:254
#, unused
msgid "auth.login-submit"
msgstr "உள்நுழை"
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "கிட்லேப்" msgstr "கிட்லேப்"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "கூகுள்" msgstr "கூகுள்"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "ஓப்பன் ஐடி" msgstr "ஓப்பன் ஐடி"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "புதிய கடவுச்சொல்லை உள்ளிடவும்" msgstr "புதிய கடவுச்சொல்லை உள்ளிடவும்"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டது" msgstr "கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டது"
@ -96,19 +79,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "கடவுச்சொல் மீட்பு இணைப்பு உங்கள் இன்பாக்ஸிற்கு அனுப்பப்பட்டது." msgstr "கடவுச்சொல் மீட்பு இணைப்பு உங்கள் இன்பாக்ஸிற்கு அனுப்பப்பட்டது."
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "அணியில் வெற்றிகரமாக இணைந்தார்" msgstr "அணியில் வெற்றிகரமாக இணைந்தார்"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "கடவுச்சொல்" msgstr "கடவுச்சொல்"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "குறைந்தது 8 எழுத்துகள்" msgstr "குறைந்தது 8 எழுத்துகள்"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "தனியுரிமைக் கொள்கை" msgstr "தனியுரிமைக் கொள்கை"
@ -116,45 +99,35 @@ msgstr "தனியுரிமைக் கொள்கை"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "கடவுச்சொல்லை மீட்டெடுக்கவும்" msgstr "கடவுச்சொல்லை மீட்டெடுக்கவும்"
#: src/app/main/ui/auth/recovery.cljs:89, src/app/main/ui/auth/recovery_request.cljs:94 #: src/app/main/ui/auth/recovery.cljs:95, src/app/main/ui/auth/recovery_request.cljs:94
msgid "auth.recovery-request-subtitle" msgid "auth.recovery-request-subtitle"
msgstr "வழிமுறைகளுடன் கூடிய மின்னஞ்சலை உங்களுக்கு அனுப்புவோம்" msgstr "வழிமுறைகளுடன் கூடிய மின்னஞ்சலை உங்களுக்கு அனுப்புவோம்"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "கடவுச்சொல்லை மறந்துவிட்டீர்களா?" msgstr "கடவுச்சொல்லை மறந்துவிட்டீர்களா?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "உங்கள் கடவுச்சொல்லை மாற்றுக" msgstr "உங்கள் கடவுச்சொல்லை மாற்றுக"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "இன்னும் கணக்கு இல்லையா?" msgstr "இன்னும் கணக்கு இல்லையா?"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "ஒரு கணக்கை உருவாக்கவும்" msgstr "ஒரு கணக்கை உருவாக்கவும்"
#: src/app/main/ui/auth/register.cljs:223 #: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title" msgid "auth.register-title"
msgstr "ஒரு கணக்கை உருவாக்கவும்" msgstr "ஒரு கணக்கை உருவாக்கவும்"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
#, unused
msgid "auth.sidebar-tagline"
msgstr "வடிவமைப்பு மற்றும் முன்மாதிரிக்கான திறந்த மூல தீர்வு."
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "சேவை விதிமுறைகள்" msgstr "சேவை விதிமுறைகள்"
#: src/app/main/ui/auth/register.cljs:238 #: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
#, unused
msgid "auth.verification-email-sent"
msgstr "சரிபார்ப்பு மின்னஞ்சலை அனுப்பியுள்ளோம் இந்த முகவரிக்கு"
#: src/app/main/ui/workspace/libraries.cljs:349
msgid "common.publish" msgid "common.publish"
msgstr "வெளியிடுங்கள்" msgstr "வெளியிடுங்கள்"
@ -210,6 +183,6 @@ msgstr "இணைப்பு உள்ள எவருக்கும் அண
msgid "common.share-link.permissions-pages" msgid "common.share-link.permissions-pages"
msgstr "பக்கங்கள் பகிரப்பட்டன" msgstr "பக்கங்கள் பகிரப்பட்டன"
#: src/app/main/ui/auth/recovery.cljs:41 #: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token" msgid "errors.invalid-recovery-token"
msgstr "மீட்பு டோக்கன் செல்லுபடியாகாது." msgstr "மீட்பு டோக்கன் செல்லுபடியாகாது."

View File

@ -11,84 +11,69 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n" "Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 2026.10.dev0\n" "X-Generator: Weblate 2026.10.dev0\n"
#: src/app/main/ui/auth/register.cljs:232, src/app/main/ui/static.cljs:182, src/app/main/ui/viewer/login.cljs:109 #: src/app/main/ui/auth/register.cljs:227, src/app/main/ui/static.cljs:191, src/app/main/ui/viewer/login.cljs:119
msgid "auth.already-have-account" msgid "auth.already-have-account"
msgstr "มีบัญชีแล้ว?" msgstr "มีบัญชีแล้ว?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237 #: src/app/main/ui/auth/recovery.cljs:83
#, unused
msgid "auth.check-mail"
msgstr "ตรวจสอบอีเมลของคุณ"
#: src/app/main/ui/auth/register.cljs:277
#, unused
msgid "auth.check-your-email"
msgstr "ตรวจสอบอีเมลของคุณและคลิกลิงก์เพื่อยืนยันและเริ่มใช้งาน Penpot"
#: src/app/main/ui/auth/recovery.cljs:77
msgid "auth.confirm-password" msgid "auth.confirm-password"
msgstr "ยืนยันรหัสผ่าน" msgstr "ยืนยันรหัสผ่าน"
#: src/app/main/ui/auth/register.cljs:244 #: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account" msgid "auth.create-demo-account"
msgstr "สร้างบัญชีสาธิตการใช้งาน" msgstr "สร้างบัญชีสาธิตการใช้งาน"
#: src/app/main/ui/auth/login.cljs:40 #: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning" msgid "auth.demo-warning"
msgstr "" msgstr ""
"บริการนี้มีไว้สำหรับสาธิตการใช้งาน ห้ามใช้สำหรับชิ้นงานจริง " "บริการนี้มีไว้สำหรับสาธิตการใช้งาน ห้ามใช้สำหรับชิ้นงานจริง "
"เนื่องจากข้อมูลจะถูกลบเป็นระยะ ๆ" "เนื่องจากข้อมูลจะถูกลบเป็นระยะ ๆ"
#: src/app/main/ui/auth/login.cljs:197, src/app/main/ui/viewer/login.cljs:95 #: src/app/main/ui/auth/login.cljs:203, src/app/main/ui/viewer/login.cljs:105
msgid "auth.forgot-password" msgid "auth.forgot-password"
msgstr "ลืมรหัสผ่าน?" msgstr "ลืมรหัสผ่าน?"
#: src/app/main/ui/auth/register.cljs:180, src/app/main/ui/auth/register.cljs:346 #: src/app/main/ui/auth/register.cljs:175, src/app/main/ui/auth/register.cljs:335
msgid "auth.fullname" msgid "auth.fullname"
msgstr "ชื่อเต็ม" msgstr "ชื่อเต็ม"
#: src/app/main/ui/auth/login.cljs:288 #: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title" msgid "auth.login-account-title"
msgstr "ลงชื่อเข้าใช้บัญชีของฉัน" msgstr "ลงชื่อเข้าใช้บัญชีของฉัน"
#: src/app/main/ui/auth/register.cljs:236, src/app/main/ui/static.cljs:185, src/app/main/ui/viewer/login.cljs:112 #: src/app/main/ui/auth/register.cljs:231, src/app/main/ui/static.cljs:194, src/app/main/ui/viewer/login.cljs:122
msgid "auth.login-here" msgid "auth.login-here"
msgstr "ลงชื่อเข้าใช้ที่นี่" msgstr "ลงชื่อเข้าใช้ที่นี่"
#: src/app/main/ui/auth/login.cljs:195 #: src/app/main/ui/auth/login.cljs:297
#, unused
msgid "auth.login-submit"
msgstr "ลงชื่อเข้าใช้"
#: src/app/main/ui/auth/login.cljs:291
msgid "auth.login-tagline" msgid "auth.login-tagline"
msgstr "Penpot เป็นเครื่องมือออกแบบที่ฟรีและโอเพนซอร์สสำหรับการดีไซน์และโค้ดร่วมกัน" msgstr "Penpot เป็นเครื่องมือออกแบบที่ฟรีและโอเพนซอร์สสำหรับการดีไซน์และโค้ดร่วมกัน"
#: src/app/main/ui/auth/login.cljs:248 #: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit" msgid "auth.login-with-github-submit"
msgstr "GitHub" msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254 #: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit" msgid "auth.login-with-gitlab-submit"
msgstr "GitLab" msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242 #: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit" msgid "auth.login-with-google-submit"
msgstr "Google" msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207 #: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit" msgid "auth.login-with-ldap-submit"
msgstr "LDAP" msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260 #: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit" msgid "auth.login-with-oidc-submit"
msgstr "OpenID" msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70 #: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password" msgid "auth.new-password"
msgstr "พิมพ์รหัสผ่านใหม่" msgstr "พิมพ์รหัสผ่านใหม่"
#: src/app/main/ui/auth/recovery.cljs:46 #: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully" msgid "auth.notifications.password-changed-successfully"
msgstr "เปลี่ยนรหัสผ่านแล้ว" msgstr "เปลี่ยนรหัสผ่านแล้ว"
@ -100,19 +85,19 @@ msgstr "โปรไฟล์นี้ยังไม่ได้รับกา
msgid "auth.notifications.recovery-token-sent" msgid "auth.notifications.recovery-token-sent"
msgstr "ลิงก์กู้คืนรหัสผ่านถูกส่งไปยังกล่องข้อความของคุณแล้ว" msgstr "ลิงก์กู้คืนรหัสผ่านถูกส่งไปยังกล่องข้อความของคุณแล้ว"
#: src/app/main/ui/auth/verify_token.cljs:65 #: src/app/main/ui/auth/verify_token.cljs:85
msgid "auth.notifications.team-invitation-accepted" msgid "auth.notifications.team-invitation-accepted"
msgstr "เข้าร่วมทีมสำเร็จ" msgstr "เข้าร่วมทีมสำเร็จ"
#: src/app/main/ui/auth/login.cljs:187, src/app/main/ui/auth/register.cljs:194 #: src/app/main/ui/auth/login.cljs:193, src/app/main/ui/auth/register.cljs:189
msgid "auth.password" msgid "auth.password"
msgstr "รหัสผ่าน" msgstr "รหัสผ่าน"
#: src/app/main/ui/auth/register.cljs:193 #: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint" msgid "auth.password-length-hint"
msgstr "อย่างน้อย 8 ตัวอักษร" msgstr "อย่างน้อย 8 ตัวอักษร"
#: src/app/main/ui/auth/register.cljs:277 #: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy" msgid "auth.privacy-policy"
msgstr "นโยบายความเป็นส่วนตัว" msgstr "นโยบายความเป็นส่วนตัว"
@ -120,66 +105,44 @@ msgstr "นโยบายความเป็นส่วนตัว"
msgid "auth.recovery-request-submit" msgid "auth.recovery-request-submit"
msgstr "กู้คืนรหัสผ่าน" msgstr "กู้คืนรหัสผ่าน"
#: src/app/main/ui/auth/recovery.cljs:88, src/app/main/ui/auth/recovery_request.cljs:93 #: src/app/main/ui/auth/recovery.cljs:94, src/app/main/ui/auth/recovery_request.cljs:93
msgid "auth.recovery-request-title" msgid "auth.recovery-request-title"
msgstr "ลืมรหัสผ่าน?" msgstr "ลืมรหัสผ่าน?"
#: src/app/main/ui/auth/recovery.cljs:80 #: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit" msgid "auth.recovery-submit"
msgstr "เปลี่ยนรหัสผ่านของคุณ" msgstr "เปลี่ยนรหัสผ่านของคุณ"
#: src/app/main/ui/auth/login.cljs:304, src/app/main/ui/static.cljs:168, src/app/main/ui/viewer/login.cljs:99 #: src/app/main/ui/auth/login.cljs:310, src/app/main/ui/static.cljs:177, src/app/main/ui/viewer/login.cljs:109
msgid "auth.register" msgid "auth.register"
msgstr "ยังไม่มีบัญชี?" msgstr "ยังไม่มีบัญชี?"
#: src/app/main/ui/auth/register.cljs:368 #: src/app/main/ui/auth/register.cljs:357
msgid "auth.register-account-tagline" msgid "auth.register-account-tagline"
msgstr "เราควรเรียกคุณในแดชบอร์ดและอีเมลว่าอะไรดี" msgstr "เราควรเรียกคุณในแดชบอร์ดและอีเมลว่าอะไรดี"
#: src/app/main/ui/auth/register.cljs:367 #: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title" msgid "auth.register-account-title"
msgstr "ชื่อของคุณ" msgstr "ชื่อของคุณ"
#: src/app/main/ui/auth/login.cljs:308, src/app/main/ui/auth/register.cljs:204, src/app/main/ui/auth/register.cljs:356, src/app/main/ui/static.cljs:172, src/app/main/ui/viewer/login.cljs:102 #: src/app/main/ui/auth/login.cljs:314, src/app/main/ui/auth/register.cljs:199, src/app/main/ui/auth/register.cljs:345, src/app/main/ui/static.cljs:181, src/app/main/ui/viewer/login.cljs:112
msgid "auth.register-submit" msgid "auth.register-submit"
msgstr "สร้างบัญชี" msgstr "สร้างบัญชี"
#: src/app/main/ui/auth/register.cljs:124 #: src/app/main/ui/auth/register.cljs:218
#, unused
msgid "auth.register-tagline"
msgstr ""
"ด้วยบัญชี Penpot ฟรี "
"คุณสามารถสร้างทีมได้อย่างไม่จำกัดและทำงานร่วมกับดีไซเนอร์และนักพัฒนาคนอื่น "
"ๆ กี่โปรเจกต์ก็ได้ "
#: src/app/main/ui/auth/register.cljs:223
msgid "auth.register-title" msgid "auth.register-title"
msgstr "สร้างบัญชี" msgstr "สร้างบัญชี"
#: src/app/main/ui/auth.cljs #: src/app/main/ui/auth/register.cljs:49
#, unused
msgid "auth.sidebar-tagline"
msgstr "โซลูชันโอเพนซอร์สสำหรับการออกแบบและโปรโตไทป์"
#: src/app/main/ui/auth/register.cljs:50
#, markdown #, markdown
msgid "auth.terms-and-privacy-agreement" msgid "auth.terms-and-privacy-agreement"
msgstr "ฉันยอมรับ [ข้อกำหนดการให้บริการ](%s)และ[นโยบายความเป็นส่วนตัว](%s)" msgstr "ฉันยอมรับ [ข้อกำหนดการให้บริการ](%s)และ[นโยบายความเป็นส่วนตัว](%s)"
#: src/app/main/ui/auth/register.cljs:269, src/app/main/ui/dashboard/sidebar.cljs:1319, src/app/main/ui/workspace/main_menu.cljs:210 #: src/app/main/ui/auth/register.cljs:264, src/app/main/ui/dashboard/sidebar.cljs:542, src/app/main/ui/workspace/main_menu.cljs:210
msgid "auth.terms-of-service" msgid "auth.terms-of-service"
msgstr "เงื่อนไขการให้บริการ" msgstr "เงื่อนไขการให้บริการ"
#, unused #: src/app/main/ui/auth/login.cljs:185, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:182
msgid "auth.terms-privacy-agreement"
msgstr "เมื่อคุณสร้างบัญชี คุณยอมรับข้อกำหนดการให้บริการและนโยบายความเป็นส่วนตัว"
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "เราได้ส่งอีเมลยืนยันให้กับ"
#: src/app/main/ui/auth/login.cljs:179, src/app/main/ui/auth/recovery_request.cljs:77, src/app/main/ui/auth/register.cljs:187
msgid "auth.work-email" msgid "auth.work-email"
msgstr "อีเมลทำงาน" msgstr "อีเมลทำงาน"
@ -248,34 +211,29 @@ msgstr "แชร์โปรโตไทป์"
msgid "common.share-link.view-all" msgid "common.share-link.view-all"
msgstr "เลือกทั้งหมด" msgstr "เลือกทั้งหมด"
#: src/app/main/ui/dashboard/projects.cljs:96 #: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management" msgid "dasboard.team-hero.management"
msgstr "การจัดการทีม" msgstr "การจัดการทีม"
#: src/app/main/ui/dashboard/projects.cljs:95 #: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text" msgid "dasboard.team-hero.text"
msgstr "" msgstr ""
"Penpot เป็นเครื่องมือสำหรับการทำงานเป็นทีม " "Penpot เป็นเครื่องมือสำหรับการทำงานเป็นทีม "
"เชิญชวนสมาชิกมาทำงานด้วยกันผ่านโปรเจกต์และไฟล์ต่าง ๆ เลย" "เชิญชวนสมาชิกมาทำงานด้วยกันผ่านโปรเจกต์และไฟล์ต่าง ๆ เลย"
#: src/app/main/ui/dashboard/projects.cljs:93 #: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title" msgid "dasboard.team-hero.title"
msgstr "รวบรวมทีมเลย!" msgstr "รวบรวมทีมเลย!"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr "เรียนรู้การใช้งาน Penpot เบื้องต้นด้วยการลงมือทำจริง"
#: src/app/main/ui/settings/profile.cljs:75 #: src/app/main/ui/settings/profile.cljs:75
msgid "dashboard.change-email" msgid "dashboard.change-email"
msgstr "เปลี่ยนอีเมล" msgstr "เปลี่ยนอีเมล"
#: src/app/main/data/dashboard.cljs:331, src/app/main/data/dashboard.cljs:566, src/app/main/data/workspace/pages.cljs:200 #: src/app/main/data/dashboard.cljs:300, src/app/main/data/dashboard.cljs:535, src/app/main/data/workspace/pages.cljs:201
msgid "dashboard.copy-suffix" msgid "dashboard.copy-suffix"
msgstr "(คัดลอก)" msgstr "(คัดลอก)"
#: src/app/main/ui/dashboard/sidebar.cljs:477 #: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team" msgid "dashboard.create-new-team"
msgstr "สร้างทีมใหม่" msgstr "สร้างทีมใหม่"
@ -283,7 +241,7 @@ msgstr "สร้างทีมใหม่"
msgid "dashboard.default-team-name" msgid "dashboard.default-team-name"
msgstr "Penpot ของคุณ" msgstr "Penpot ของคุณ"
#: src/app/main/ui/dashboard/sidebar.cljs:626, src/app/main/ui/dashboard/team_form.cljs:153 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:274, src/app/main/ui/dashboard/team_form.cljs:153
msgid "dashboard.delete-team" msgid "dashboard.delete-team"
msgstr "ลบทีม" msgstr "ลบทีม"
@ -291,24 +249,19 @@ msgstr "ลบทีม"
msgid "dashboard.download-binary-file" msgid "dashboard.download-binary-file"
msgstr "ดาวน์โหลดไฟล์ Penpot (.penpot)" msgstr "ดาวน์โหลดไฟล์ Penpot (.penpot)"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712 #: src/app/main/ui/dashboard/files.cljs:233, src/app/main/ui/dashboard/projects.cljs:309
#, unused
msgid "dashboard.download-standard-file"
msgstr "ดาวน์โหลดไฟล์มาตรฐาน (.svg + .json)"
#: src/app/main/ui/dashboard/files.cljs:212, src/app/main/ui/dashboard/projects.cljs:303
msgid "dashboard.empty-placeholder-drafts-subtitle" msgid "dashboard.empty-placeholder-drafts-subtitle"
msgstr "เมื่อสมาชิกโปรเจกต์สร้างแบบร่าง จะปรากฏที่นี่" msgstr "เมื่อสมาชิกโปรเจกต์สร้างแบบร่าง จะปรากฏที่นี่"
#: src/app/main/ui/dashboard/files.cljs:207, src/app/main/ui/dashboard/projects.cljs:298 #: src/app/main/ui/dashboard/files.cljs:228, src/app/main/ui/dashboard/projects.cljs:304
msgid "dashboard.empty-placeholder-drafts-title" msgid "dashboard.empty-placeholder-drafts-title"
msgstr "ยังไม่มีแบบร่าง" msgstr "ยังไม่มีแบบร่าง"
#: src/app/main/ui/dashboard/deleted.cljs:180, src/app/main/ui/dashboard/files.cljs:213, src/app/main/ui/dashboard/projects.cljs:304 #: src/app/main/ui/dashboard/deleted.cljs:180, src/app/main/ui/dashboard/files.cljs:234, src/app/main/ui/dashboard/projects.cljs:310
msgid "dashboard.empty-placeholder-files-subtitle" msgid "dashboard.empty-placeholder-files-subtitle"
msgstr "เมื่อสมาชิกของโปรเจกต์สร้างไฟล์ จะแสดงผลที่นี่" msgstr "เมื่อสมาชิกของโปรเจกต์สร้างไฟล์ จะแสดงผลที่นี่"
#: src/app/main/ui/dashboard/deleted.cljs:177, src/app/main/ui/dashboard/files.cljs:208, src/app/main/ui/dashboard/projects.cljs:299 #: src/app/main/ui/dashboard/deleted.cljs:177, src/app/main/ui/dashboard/files.cljs:229, src/app/main/ui/dashboard/projects.cljs:305
msgid "dashboard.empty-placeholder-files-title" msgid "dashboard.empty-placeholder-files-title"
msgstr "ยังไม่มีไฟล์" msgstr "ยังไม่มีไฟล์"
@ -320,14 +273,6 @@ msgstr ""
"ลองแชร์ไฟล์ของคุณหรือเพิ่มจาก[ไลบรารีและเทมเพลต](https://penpot.app/" "ลองแชร์ไฟล์ของคุณหรือเพิ่มจาก[ไลบรารีและเทมเพลต](https://penpot.app/"
"libraries-templates)ของเรา" "libraries-templates)ของเรา"
#: src/app/main/ui/dashboard/placeholder.cljs
#, markdown, unused
msgid "dashboard.empty-placeholder-libraries-subtitle"
msgstr ""
"ไลบรารีที่เพิ่มให้กับโปรเจกต์จะปรากฏที่นี่ "
"ลองแชร์ไฟล์ของคุณหรือเพิ่มจาก[ไลบรารีและเทมเพลต](https://penpot.app/"
"libraries-templates)ของเรา"
#: src/app/main/ui/dashboard/placeholder.cljs:113 #: src/app/main/ui/dashboard/placeholder.cljs:113
msgid "dashboard.empty-placeholder-libraries-subtitle-viewer-role" msgid "dashboard.empty-placeholder-libraries-subtitle-viewer-role"
msgstr "ไลบรารีที่เพิ่มลงในโปรเจกต์จะปรากฏที่นี่" msgstr "ไลบรารีที่เพิ่มลงในโปรเจกต์จะปรากฏที่นี่"
@ -336,7 +281,7 @@ msgstr "ไลบรารีที่เพิ่มลงในโปรเจ
msgid "dashboard.empty-placeholder-libraries-title" msgid "dashboard.empty-placeholder-libraries-title"
msgstr "ยังไม่มีไลบรารี" msgstr "ยังไม่มีไลบรารี"
#: src/app/main/ui/dashboard/file_menu.cljs:281 #: src/app/main/ui/dashboard/file_menu.cljs:279
msgid "dashboard.export-binary-multi" msgid "dashboard.export-binary-multi"
msgstr "ดาวน์โหลด %s ไฟล์ Penpot (.penpot)" msgstr "ดาวน์โหลด %s ไฟล์ Penpot (.penpot)"
@ -348,10 +293,6 @@ msgstr "ส่งออกบอร์ดเป็น PDF"
msgid "dashboard.export-frames.title" msgid "dashboard.export-frames.title"
msgstr "ส่งออกเป็น PDF" msgstr "ส่งออกเป็น PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "ส่งออก %s ไฟล์ Penpot"
#: src/app/main/ui/workspace/main_menu.cljs:728 #: src/app/main/ui/workspace/main_menu.cljs:728
msgid "dashboard.export-shapes" msgid "dashboard.export-shapes"
msgstr "ส่งออก" msgstr "ส่งออก"
@ -360,11 +301,6 @@ msgstr "ส่งออก"
msgid "dashboard.export-shapes.title" msgid "dashboard.export-shapes.title"
msgstr "ส่งออกส่วนที่เลือก" msgstr "ส่งออกส่วนที่เลือก"
#: src/app/main/ui/dashboard/file_menu.cljs:262
#, unused
msgid "dashboard.export-standard-multi"
msgstr "ดาวน์โหลด %s ไฟล์มาตรฐาน (.svg + .json)"
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:608 #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:608
msgid "dashboard.fonts.deleted-placeholder" msgid "dashboard.fonts.deleted-placeholder"
msgstr "ฟอนต์ที่หายไป" msgstr "ฟอนต์ที่หายไป"
@ -399,25 +335,20 @@ msgstr ""
msgid "dashboard.fonts.upload-all" msgid "dashboard.fonts.upload-all"
msgstr "อัปโหลดทั้งหมด" msgstr "อัปโหลดทั้งหมด"
#: src/app/main/ui/dashboard/import.cljs:941, src/app/main/ui/dashboard/project_menu.cljs:109 #: src/app/main/ui/dashboard/import.cljs:995, src/app/main/ui/dashboard/project_menu.cljs:110
msgid "dashboard.import" msgid "dashboard.import"
msgstr "นำเข้าไฟล์ Penpot" msgstr "นำเข้าไฟล์ Penpot"
#: src/app/main/ui/dashboard/import.cljs:342, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147 #: src/app/main/ui/dashboard/import.cljs:343, src/app/worker/import.cljs:144, src/app/worker/import.cljs:147
msgid "dashboard.import.analyze-error" msgid "dashboard.import.analyze-error"
msgstr "ไม่สามารถนำเข้าไฟล์นี้ได้" msgstr "ไม่สามารถนำเข้าไฟล์นี้ได้"
#: src/app/main/ui/dashboard/import.cljs:292 #: src/app/main/ui/dashboard/import.cljs:593
#, unused
msgid "dashboard.import.import-error"
msgstr "พบปัญหาในการนำเข้าไฟล์ ไฟล์นี้จึงไม่ถูกนำเข้า"
#: src/app/main/ui/dashboard/import.cljs:562
msgid "dashboard.import.import-message" msgid "dashboard.import.import-message"
msgid_plural "dashboard.import.import-message" msgid_plural "dashboard.import.import-message"
msgstr[0] "นำเข้าสำเร็จแล้ว %s ไฟล์" msgstr[0] "นำเข้าสำเร็จแล้ว %s ไฟล์"
#: src/app/main/ui/dashboard/import.cljs:556 #: src/app/main/ui/dashboard/import.cljs:587
msgid "dashboard.import.import-warning" msgid "dashboard.import.import-warning"
msgstr "บางไฟล์มีวัตถุที่ไม่ถูกต้อง ซึ่งถูกนำออกให้แล้ว" msgstr "บางไฟล์มีวัตถุที่ไม่ถูกต้อง ซึ่งถูกนำออกให้แล้ว"
@ -445,7 +376,7 @@ msgstr "กำลังอัปโหลดข้อมูลไปยังเ
msgid "dashboard.import.progress.upload-media" msgid "dashboard.import.progress.upload-media"
msgstr "กำลังอัปโหลดไฟล์: %s" msgstr "กำลังอัปโหลดไฟล์: %s"
#: src/app/main/ui/dashboard/sidebar.cljs:608, src/app/main/ui/dashboard/sidebar.cljs:615, src/app/main/ui/dashboard/sidebar.cljs:620, src/app/main/ui/dashboard/team.cljs:464 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:257, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:263, src/app/main/ui/dashboard/organization_team_switch_menus.cljs:268, src/app/main/ui/dashboard/team.cljs:464
msgid "dashboard.leave-team" msgid "dashboard.leave-team"
msgstr "ออกจากทีม" msgstr "ออกจากทีม"
@ -453,7 +384,7 @@ msgstr "ออกจากทีม"
msgid "dashboard.libraries-and-templates" msgid "dashboard.libraries-and-templates"
msgstr "ไลบรารีและเทมเพลต" msgstr "ไลบรารีและเทมเพลต"
#: src/app/main/ui/dashboard/import.cljs:774, src/app/main/ui/workspace/libraries.cljs:146 #: src/app/main/ui/dashboard/import.cljs:816, src/app/main/ui/workspace/libraries.cljs:229
msgid "dashboard.libraries-and-templates.import-error" msgid "dashboard.libraries-and-templates.import-error"
msgstr "พบปัญหาในการนำเข้าเทมเพลต เทมเพลตนี้จึงไม่ถูกนำเข้า" msgstr "พบปัญหาในการนำเข้าเทมเพลต เทมเพลตนี้จึงไม่ถูกนำเข้า"
@ -469,51 +400,51 @@ msgstr "กำลังโหลดไฟล์ของคุณ…"
msgid "dashboard.loading-fonts" msgid "dashboard.loading-fonts"
msgstr "กำลังโหลดฟอนต์ของคุณ…" msgstr "กำลังโหลดฟอนต์ของคุณ…"
#: src/app/main/ui/dashboard/file_menu.cljs:313, src/app/main/ui/dashboard/project_menu.cljs:101 #: src/app/main/ui/dashboard/file_menu.cljs:308, src/app/main/ui/dashboard/project_menu.cljs:101
msgid "dashboard.move-to" msgid "dashboard.move-to"
msgstr "ย้ายไปยัง" msgstr "ย้ายไปยัง"
#: src/app/main/ui/dashboard/file_menu.cljs:277 #: src/app/main/ui/dashboard/file_menu.cljs:272
msgid "dashboard.move-to-multi" msgid "dashboard.move-to-multi"
msgstr "ย้าน %s ไฟล์ไปยัง" msgstr "ย้าน %s ไฟล์ไปยัง"
#: src/app/main/ui/dashboard/file_menu.cljs:249 #: src/app/main/ui/dashboard/file_menu.cljs:73
msgid "dashboard.move-to-other-team" msgid "dashboard.move-to-other-team"
msgstr "ย้ายไปยังทีมอื่น" msgstr "ย้ายไปยังทีมอื่น"
#: src/app/main/ui/dashboard/files.cljs:111, src/app/main/ui/dashboard/projects.cljs:259, src/app/main/ui/dashboard/projects.cljs:260 #: src/app/main/ui/dashboard/files.cljs:117, src/app/main/ui/dashboard/projects.cljs:259
msgid "dashboard.new-file" msgid "dashboard.new-file"
msgstr "+ สร้างไฟล์ใหม่" msgstr "+ สร้างไฟล์ใหม่"
#: src/app/main/data/dashboard.cljs:537, src/app/main/data/dashboard.cljs:649 #: src/app/main/data/dashboard.cljs:506, src/app/main/data/dashboard.cljs:618
msgid "dashboard.new-file-prefix" msgid "dashboard.new-file-prefix"
msgstr "สร้างไฟล์ใหม่" msgstr "สร้างไฟล์ใหม่"
#: src/app/main/ui/dashboard/projects.cljs:67 #: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project" msgid "dashboard.new-project"
msgstr "+ สร้างโปรเจกต์ใหม่" msgstr "+ สร้างโปรเจกต์ใหม่"
#: src/app/main/data/dashboard.cljs:290, src/app/main/data/dashboard.cljs:652 #: src/app/main/data/dashboard.cljs:259, src/app/main/data/dashboard.cljs:621
msgid "dashboard.new-project-prefix" msgid "dashboard.new-project-prefix"
msgstr "สร้างโปรเจกต์ใหม่" msgstr "สร้างโปรเจกต์ใหม่"
#: src/app/main/ui/auth/verify_token.cljs:37 #: src/app/main/ui/auth/verify_token.cljs:38
msgid "dashboard.notifications.email-changed-successfully" msgid "dashboard.notifications.email-changed-successfully"
msgstr "อัปเดตอีเมลสำเร็จแล้ว" msgstr "อัปเดตอีเมลสำเร็จแล้ว"
#: src/app/main/ui/settings/password.cljs:46 #: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved" msgid "dashboard.notifications.password-saved"
msgstr "บันทึกรหัสผ่านแล้ว" msgstr "บันทึกรหัสผ่านแล้ว"
#: src/app/main/ui/dashboard/file_menu.cljs:296 #: src/app/main/ui/dashboard/file_menu.cljs:294
msgid "dashboard.open-in-new-tab" msgid "dashboard.open-in-new-tab"
msgstr "เปิดไฟล์ในแท็บใหม่" msgstr "เปิดไฟล์ในแท็บใหม่"
#: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:124, src/app/main/ui/dashboard/grid.cljs:428, src/app/main/ui/dashboard/projects.cljs:268, src/app/main/ui/dashboard/projects.cljs:269 #: src/app/main/ui/dashboard/deleted.cljs:161, src/app/main/ui/dashboard/deleted.cljs:162, src/app/main/ui/dashboard/files.cljs:143, src/app/main/ui/dashboard/grid.cljs:427, src/app/main/ui/dashboard/grid.cljs:438, src/app/main/ui/dashboard/grid.cljs:480, src/app/main/ui/dashboard/projects.cljs:217, src/app/main/ui/dashboard/projects.cljs:274, src/app/main/ui/dashboard/sidebar.cljs:156
msgid "dashboard.options" msgid "dashboard.options"
msgstr "ตัวเลือก" msgstr "ตัวเลือก"
#: src/app/main/ui/settings/password.cljs:106, src/app/main/ui/settings/password.cljs:120 #: src/app/main/ui/settings/password.cljs:112, src/app/main/ui/settings/password.cljs:126
msgid "dashboard.password-change" msgid "dashboard.password-change"
msgstr "เปลี่ยนรหัสผ่าน" msgstr "เปลี่ยนรหัสผ่าน"
@ -533,7 +464,7 @@ msgstr "คุณเป็นเจ้าของในทีมนี้แล
msgid "dashboard.save-settings" msgid "dashboard.save-settings"
msgstr "บันทึกการตั้งค่า" msgstr "บันทึกการตั้งค่า"
#: src/app/main/ui/dashboard/sidebar.cljs:282, src/app/main/ui/dashboard/sidebar.cljs:283, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140 #: src/app/main/ui/dashboard/sidebar.cljs:228, src/app/main/ui/dashboard/sidebar.cljs:229, src/app/main/ui/ds/controls/shared/searchable_options_dropdown.cljs:140
msgid "dashboard.search-placeholder" msgid "dashboard.search-placeholder"
msgstr "ค้นหา…" msgstr "ค้นหา…"
@ -545,19 +476,19 @@ msgstr "เลือกภาษาของ UI"
msgid "dashboard.select-ui-theme" msgid "dashboard.select-ui-theme"
msgstr "เลือกธีม" msgstr "เลือกธีม"
#: src/app/main/ui/dashboard/projects.cljs:292 #: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files" msgid "dashboard.show-all-files"
msgstr "แสดงไฟล์ทั้งหมด" msgstr "แสดงไฟล์ทั้งหมด"
#: src/app/main/ui/dashboard/team.cljs:1663 #: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info" msgid "dashboard.team-info"
msgstr "ข้อมูลของทีม" msgstr "ข้อมูลของทีม"
#: src/app/main/ui/dashboard/team.cljs:1708 #: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members" msgid "dashboard.team-members"
msgstr "สมาชิกของทีม" msgstr "สมาชิกของทีม"
#: src/app/main/ui/dashboard/team.cljs:1723 #: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects" msgid "dashboard.team-projects"
msgstr "โปรเจกต์ของทีม" msgstr "โปรเจกต์ของทีม"
@ -573,22 +504,18 @@ msgstr "ผลการค้นหา"
msgid "dashboard.update-settings" msgid "dashboard.update-settings"
msgstr "อัปเดตการตั้งค่า" msgstr "อัปเดตการตั้งค่า"
#: src/app/main/ui/dashboard/team.cljs:1389 #: src/app/main/ui/dashboard/team.cljs:1395
msgid "dashboard.webhooks.content-type" msgid "dashboard.webhooks.content-type"
msgstr "ประเภทเนื้อหา" msgstr "ประเภทเนื้อหา"
#: src/app/main/ui/dashboard/team.cljs:1421 #: src/app/main/ui/dashboard/team.cljs:1427
msgid "dashboard.webhooks.create" msgid "dashboard.webhooks.create"
msgstr "สร้าง Webhook" msgstr "สร้าง Webhook"
#: src/app/main/ui/dashboard/team.cljs:1324 #: src/app/main/ui/dashboard/team.cljs:1330
msgid "dashboard.webhooks.create.success" msgid "dashboard.webhooks.create.success"
msgstr "สร้าง Webhook แล้ว" msgstr "สร้าง Webhook แล้ว"
#, unused
msgid "dashboard.webhooks.update.success"
msgstr "อัปเดต Webhook แล้ว"
#: src/app/main/ui/settings.cljs:36 #: src/app/main/ui/settings.cljs:36
msgid "dashboard.your-account-title" msgid "dashboard.your-account-title"
msgstr "บัญชีของคุณ" msgstr "บัญชีของคุณ"
@ -605,19 +532,19 @@ msgstr "ชื่อของคุณ"
msgid "ds.confirm-allow" msgid "ds.confirm-allow"
msgstr "อนุญาต" msgstr "อนุญาต"
#: src/app/main/ui/comments.cljs:691, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436 #: src/app/main/ui/comments.cljs:719, src/app/main/ui/confirm.cljs:43, src/app/main/ui/settings/subscription.cljs:324, src/app/main/ui/settings/subscription.cljs:357, src/app/main/ui/settings/subscription.cljs:839, src/app/main/ui/settings/subscription.cljs:888, src/app/main/ui/settings/subscription.cljs:898, src/app/main/ui/workspace/plugins.cljs:373, src/app/main/ui/workspace/plugins.cljs:436
msgid "ds.confirm-cancel" msgid "ds.confirm-cancel"
msgstr "ยกเลิก" msgstr "ยกเลิก"
#: src/app/main/ui/auth/register.cljs:107, src/app/main/ui/auth/verify_token.cljs:128, src/app/main/ui/settings/change_email.cljs:29 #: src/app/main/ui/auth/register.cljs:111, src/app/main/ui/auth/verify_token.cljs:148, src/app/main/ui/settings/change_email.cljs:29
msgid "errors.email-already-exists" msgid "errors.email-already-exists"
msgstr "อีเมลถูกใช้ไปแล้ว" msgstr "อีเมลถูกใช้ไปแล้ว"
#: src/app/main/data/auth.cljs:352, src/app/main/ui/auth/register.cljs:94, src/app/main/ui/dashboard/team.cljs:243 #: src/app/main/data/auth.cljs:346, src/app/main/ui/auth/register.cljs:99, src/app/main/ui/dashboard/team.cljs:243
msgid "errors.email-domain-not-allowed" msgid "errors.email-domain-not-allowed"
msgstr "โดเมนนี้ไม่ได้รับอนุญาต" msgstr "โดเมนนี้ไม่ได้รับอนุญาต"
#, unused #: ../common/src/app/common/schema.cljc:1068
msgid "errors.field-min-length" msgid "errors.field-min-length"
msgstr "ต้องมีอย่างน้อย 1 ตัวอักษร" msgstr "ต้องมีอย่างน้อย 1 ตัวอักษร"
@ -625,17 +552,15 @@ msgstr "ต้องมีอย่างน้อย 1 ตัวอักษร
msgid "errors.invalid-color" msgid "errors.invalid-color"
msgstr "สีไม่ถูกต้อง" msgstr "สีไม่ถูกต้อง"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs, src/app/main/ui/auth/recovery_request.cljs #: src/app/main/ui/auth/login.cljs:67, ../common/src/app/common/schema.cljc:497
#, unused
msgid "errors.invalid-email" msgid "errors.invalid-email"
msgstr "กรุณาใส่อีเมลที่ถูกต้อง" msgstr "กรุณาใส่อีเมลที่ถูกต้อง"
#: src/app/main/ui/settings/password.cljs #: ../common/src/app/common/schema.cljc:1092
#, unused
msgid "errors.password-too-short" msgid "errors.password-too-short"
msgstr "รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร" msgstr "รหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร"
#: src/app/main/ui/auth/login.cljs:103, src/app/main/ui/auth/login.cljs:107 #: src/app/main/ui/auth/login.cljs:104, src/app/main/ui/auth/login.cljs:108
msgid "errors.wrong-credentials" msgid "errors.wrong-credentials"
msgstr "อีเมลหรือรหัสผ่านไม่ถูกต้อง" msgstr "อีเมลหรือรหัสผ่านไม่ถูกต้อง"
@ -647,25 +572,10 @@ msgstr "รหัสผ่านเดิมไม่ถูกต้อง"
msgid "feedback.discourse-title" msgid "feedback.discourse-title"
msgstr "ชุมชน Penpot" msgstr "ชุมชน Penpot"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.height"
msgstr "ความสูง"
#: src/app/main/ui/inspect/attributes/layout.cljs
#, unused
msgid "inspect.attributes.layout.left"
msgstr "ซ้าย"
#: src/app/main/ui/inspect/attributes/shadow.cljs:66 #: src/app/main/ui/inspect/attributes/shadow.cljs:66
msgid "inspect.attributes.shadow" msgid "inspect.attributes.shadow"
msgstr "เงา" msgstr "เงา"
#: src/app/main/ui/inspect/attributes/stroke.cljs
#, unused
msgid "inspect.attributes.stroke.width"
msgstr "ความกว้าง"
#: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:612, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:618 #: src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:612, src/app/main/ui/workspace/sidebar/options/menus/typography.cljs:618
msgid "inspect.attributes.typography.font-size" msgid "inspect.attributes.typography.font-size"
msgstr "ขนาดฟอนต์" msgstr "ขนาดฟอนต์"
@ -686,11 +596,11 @@ msgstr "SVG"
msgid "labels.code" msgid "labels.code"
msgstr "โคด" msgstr "โคด"
#: src/app/main/ui/dashboard/sidebar.cljs:1256, src/app/main/ui/workspace/main_menu.cljs:165 #: src/app/main/ui/dashboard/sidebar.cljs:479, src/app/main/ui/workspace/main_menu.cljs:165
msgid "labels.community" msgid "labels.community"
msgstr "ชุมชน" msgstr "ชุมชน"
#: src/app/main/ui/settings/password.cljs:103 #: src/app/main/ui/settings/password.cljs:109
msgid "labels.confirm-password" msgid "labels.confirm-password"
msgstr "ยืนยันรหัสผ่าน" msgstr "ยืนยันรหัสผ่าน"
@ -702,23 +612,19 @@ msgstr "คัดลอกลิงก์"
msgid "labels.create-team" msgid "labels.create-team"
msgstr "สร้างทีมใหม่" msgstr "สร้างทีมใหม่"
#, unused
msgid "labels.custom-fonts"
msgstr "ฟอนต์ที่กำหนดเอง"
#: src/app/main/ui/settings/sidebar.cljs:86 #: src/app/main/ui/settings/sidebar.cljs:86
msgid "labels.dashboard" msgid "labels.dashboard"
msgstr "แดชบอร์ด" msgstr "แดชบอร์ด"
#: src/app/main/ui/comments.cljs:1015, src/app/main/ui/dashboard/fonts.cljs:280, src/app/main/ui/dashboard/import.cljs:327, src/app/main/ui/dashboard/team.cljs:1437, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:218, src/app/main/ui/workspace/tokens/themes.cljs:52 #: src/app/main/ui/comments.cljs:1043, src/app/main/ui/dashboard/fonts.cljs:280, src/app/main/ui/dashboard/import.cljs:326, src/app/main/ui/dashboard/team.cljs:1443, src/app/main/ui/workspace/sidebar/options/menus/component.cljs:217, src/app/main/ui/workspace/tokens/themes.cljs:52
msgid "labels.edit" msgid "labels.edit"
msgstr "แก้ไข" msgstr "แก้ไข"
#: src/app/main/ui/dashboard/team.cljs:164, src/app/main/ui/dashboard/team.cljs:430, src/app/main/ui/dashboard/team.cljs:677, src/app/main/ui/dashboard/team.cljs:710, src/app/main/ui/onboarding/team_choice.cljs:71 #: src/app/main/ui/dashboard/team.cljs:164, src/app/main/ui/dashboard/team.cljs:405, src/app/main/ui/dashboard/team.cljs:430, src/app/main/ui/dashboard/team.cljs:677, src/app/main/ui/dashboard/team.cljs:710, src/app/main/ui/dashboard/team.cljs:890, src/app/main/ui/onboarding/team_choice.cljs:71
msgid "labels.editor" msgid "labels.editor"
msgstr "เอดิเตอร์" msgstr "เอดิเตอร์"
#: src/app/main/ui/exports/assets.cljs:172, src/app/main/ui/settings/shortcuts.cljs:548, src/app/main/ui/workspace/tokens/sidebar.cljs:134 #: src/app/main/ui/exports/assets.cljs:172, src/app/main/ui/settings/shortcuts.cljs:548, src/app/main/ui/workspace/tokens/sidebar.cljs:145
msgid "labels.export" msgid "labels.export"
msgstr "ส่งออก" msgstr "ส่งออก"
@ -726,7 +632,7 @@ msgstr "ส่งออก"
msgid "labels.figma" msgid "labels.figma"
msgstr "Figma" msgstr "Figma"
#: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:1152 #: src/app/main/ui/dashboard/fonts.cljs:74, src/app/main/ui/dashboard/sidebar.cljs:375
msgid "labels.fonts" msgid "labels.fonts"
msgstr "ฟอนต์" msgstr "ฟอนต์"
@ -742,11 +648,11 @@ msgstr "ภาษา"
msgid "labels.libraries-and-templates" msgid "labels.libraries-and-templates"
msgstr "ไลบรารีและเทมเพลต" msgstr "ไลบรารีและเทมเพลต"
#: src/app/main/ui/auth/verify_token.cljs:144, src/app/main/ui/dashboard/grid.cljs:126, src/app/main/ui/dashboard/grid.cljs:142, src/app/main/ui/dashboard/import.cljs:289, src/app/main/ui/dashboard/placeholder.cljs:139, src/app/main/ui/ds/product/loader.cljs:85, src/app/main/ui/exports/files.cljs:69, src/app/main/ui/nitrate/entry.cljs:26, src/app/main/ui/static.cljs:652, src/app/main/ui/viewer.cljs:641, src/app/main/ui/workspace/sidebar/assets/file_library.cljs:247, src/app/main/ui/workspace.cljs:132 #: src/app/main/ui/auth/verify_token.cljs:164, src/app/main/ui/dashboard/grid.cljs:126, src/app/main/ui/dashboard/grid.cljs:142, src/app/main/ui/dashboard/import.cljs:289, src/app/main/ui/dashboard/placeholder.cljs:139, src/app/main/ui/ds/product/loader.cljs:85, src/app/main/ui/exports/files.cljs:69, src/app/main/ui/nitrate/entry.cljs:26, src/app/main/ui/static.cljs:665, src/app/main/ui/viewer.cljs:641, src/app/main/ui/workspace/sidebar/assets/file_library.cljs:263, src/app/main/ui/workspace.cljs:132
msgid "labels.loading" msgid "labels.loading"
msgstr "กำลังโหลด…" msgstr "กำลังโหลด…"
#: src/app/main/ui/dashboard/sidebar.cljs:1527 #: src/app/main/ui/dashboard/sidebar.cljs:750
msgid "labels.logout" msgid "labels.logout"
msgstr "ลงชื่อออก" msgstr "ลงชื่อออก"
@ -754,23 +660,19 @@ msgstr "ลงชื่อออก"
msgid "labels.member" msgid "labels.member"
msgstr "สมาชิก" msgstr "สมาชิก"
#: src/app/main/ui/dashboard/sidebar.cljs:581, src/app/main/ui/dashboard/team.cljs:125, src/app/main/ui/dashboard/team.cljs:133 #: src/app/main/ui/dashboard/organization_team_switch_menus.cljs:228, src/app/main/ui/dashboard/team.cljs:125, src/app/main/ui/dashboard/team.cljs:133
msgid "labels.members" msgid "labels.members"
msgstr "สมาชิก" msgstr "สมาชิก"
#: src/app/main/ui/settings/password.cljs:96 #: src/app/main/ui/settings/password.cljs:102
msgid "labels.new-password" msgid "labels.new-password"
msgstr "รหัสผ่านใหม่" msgstr "รหัสผ่านใหม่"
#: src/app/main/ui/settings/password.cljs:89 #: src/app/main/ui/settings/password.cljs:95
msgid "labels.old-password" msgid "labels.old-password"
msgstr "รหัสผ่านเดิม" msgstr "รหัสผ่านเดิม"
#, unused #: src/app/main/ui/dashboard/team.cljs:403, src/app/main/ui/dashboard/team.cljs:437, src/app/main/ui/dashboard/team.cljs:675, src/app/main/ui/dashboard/team.cljs:888, src/app/main/ui/dashboard/team.cljs:1720
msgid "labels.or"
msgstr "หรือ"
#: src/app/main/ui/dashboard/team.cljs:437, src/app/main/ui/dashboard/team.cljs:675, src/app/main/ui/dashboard/team.cljs:1714
msgid "labels.owner" msgid "labels.owner"
msgstr "เจ้าของ" msgstr "เจ้าของ"
@ -782,6 +684,6 @@ msgstr "รหัสผ่าน"
msgid "labels.profile" msgid "labels.profile"
msgstr "โปรไฟล์" msgstr "โปรไฟล์"
#: src/app/main/ui/dashboard/sidebar.cljs:1132 #: src/app/main/ui/dashboard/sidebar.cljs:355
msgid "labels.projects" msgid "labels.projects"
msgstr "โปรเจกต์" msgstr "โปรเจกต์"

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff