🌐 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/lazy-component 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
@ -45,6 +47,9 @@
:potok/reify-type
{:level :error}
:penpot/tr-dynamic
{:level :warning}
:redundant-primitive-coercion
{: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
- Canonicalize with `node ./scripts/translations.js sync -l <locale>`
from `frontend/`: sorts entries, syncs `#:` comments from `en`,
deletes keys missing in `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.
- Canonical files carry NO `#~` obsolete blocks (`en`/`es` have zero).
Drop them; `sync` does not resurrect them.
- Definition of done: `msgfmt --check <locale>.po` exit 0 and
`msgfmt --statistics` shows 0 fuzzy, 0 untranslated.
- Canonicalize with `node ./scripts/translations.js sync -l <locale>` from `frontend/`: sorts entries, syncs `#:` comments from `en`, deletes keys missing in `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.
- Canonical files carry NO `#~` obsolete blocks (`en`/`es` have zero). Drop them; `sync` does not resurrect them.
- Definition of done: `msgfmt --check <locale>.po` exit 0 and `msgfmt --statistics` shows 0 fuzzy, 0 untranslated.
- `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`.
- Dynamic keys are invisible to `rehash`: eliminate them instead of
declaring them. Preference order: literal `(tr "key")` args only;
never put a branch inside `tr`, hoist it out (`(if cond (tr "a") (tr "b"))`);
resolve code→message maps with `case` returning literal calls;
key-forwarding components take pre-translated strings (callers translate
with literals). Only when no simple fix exists (open key sets sent by the
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
- 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`.
- `en` keys with empty `msgstr` (or `#, fuzzy` + empty): translate from
`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).
- `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).
- `en` keys with empty `msgstr` (or `#, fuzzy` + empty): translate from `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).
- `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
- 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").
- 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.
- 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").
- 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.
- ALL-CAPS source stays ALL-CAPS in Catalan; keep `$175`-style
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.
- 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.
- ALL-CAPS source stays ALL-CAPS in Catalan; keep `$175`-style 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.
- 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
- 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).
- 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.
- 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).
- 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`.

View File

@ -20,7 +20,7 @@
"ws": "^8.21.1"
},
"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/",
"fmt:clj": "cljfmt fix --parallel=true src/ test/",
"test:e2e": "node --test --test-concurrency=1 test/e2e/*.test.mjs"

View File

@ -21,7 +21,7 @@
"date-fns": "^4.4.0"
},
"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",
"check-fmt:clj": "cljfmt check --parallel=true src/ test/",
"check-fmt:js": "prettier -c src/**/*.js",

View File

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

View File

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

View File

@ -6,6 +6,7 @@
(ns app.common.types.team
(:require
[app.common.i18n :refer [tr]]
[app.common.schema :as sm]))
(def valid-roles
@ -23,7 +24,7 @@
(def schema:team-name
[:and
[::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)))]])
;; FIXME: specify more fields

View File

@ -37,7 +37,7 @@
"build": "pnpm run clear:shadow-cache && pnpm run build:app",
"fmt:clj": "cljfmt fix --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",
"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"

View File

@ -30,7 +30,7 @@
"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: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:scss": "pnpm exec stylelint '{src,resources}/**/*.scss'",
"build:test": "pnpm run build:wasm && clojure -M:dev:shadow-cljs compile test",

View File

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

View File

@ -60,7 +60,12 @@ async function* scanLocales() {
async function processLocale(options, f) {
let locales = options.locale;
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 (locales === undefined) {
} else {
@ -185,20 +190,24 @@ async function rehash(options, ...other) {
const used = await (async function () {
const result = {};
for await (const f of getFiles("src")) {
if (!fileRe.test(f)) continue;
// Both frontend and shared sources: common holds schemas and
// 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)) {
const strings = getTranslationStrings(line);
for await (const [n, line] of readLines(f)) {
const strings = getTranslationStrings(line);
strings.forEach((key) => {
const entry = `${f}:${n}`;
if (result[key] !== undefined) {
result[key].push(entry);
} else {
result[key] = [entry];
}
});
strings.forEach((key) => {
const entry = `${f}:${n}`;
if (result[key] !== undefined) {
result[key].push(entry);
} else {
result[key] = [entry];
}
});
}
}
}
@ -720,7 +729,7 @@ Available subcommands (run from \`frontend/\`):
const COMMANDS = {
rehash: {
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),
},
sync: {

View File

@ -247,7 +247,10 @@
(defn handle-change-team-organization
"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]}]
(ptk/reify ::handle-change-team-organization
ptk/WatchEvent
@ -259,6 +262,11 @@
current-team?)
(rx/concat
(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))
:type :toast
:level :info

View File

@ -655,6 +655,11 @@
(modal/hide)))))
(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]}]
(ptk/reify ::handle-user-organization-change
ptk/WatchEvent
@ -662,6 +667,10 @@
(when (and notification (contains? cf/flags :admin-console))
(let [team-id (:current-team-id state)
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)
:type :toast
:level :info

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -64,7 +64,7 @@
(def ^:private schema:login-form
[: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}]]
[:invitation-token {:optional true}
[:string {:min 1}]]])

View File

@ -22,7 +22,7 @@
[:token ::sm/text]
[:password-1 ::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}
(fn [{:keys [password-1 password-2]}]
(= password-1 password-2))]])
@ -32,6 +32,12 @@
(let [{:keys [type code] :as edata} (ex-data error)]
(if (= [:validation :weak-password] [type code])
(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)
(mapv tr details))]
(swap! form assoc-in [:extra-errors :password-1]

View File

@ -114,6 +114,12 @@
(set-field-error! :password {:message (tr "errors.email-as-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))
(mapv tr (:details edata)))]
(set-field-error! :password {:message (tr "errors.weak-password")

View File

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

View File

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

View File

@ -400,10 +400,10 @@
(and can-change-rol (or member-is-admin member-is-editor member-is-viewer)))
role (cond
member-is-owner "labels.owner"
member-is-admin "labels.admin"
member-is-editor "labels.editor"
:else "labels.viewer")
member-is-owner (tr "labels.owner")
member-is-admin (tr "labels.admin")
member-is-editor (tr "labels.editor")
:else (tr "labels.viewer"))
on-show (mf/use-fn #(reset! show? true))
on-hide (mf/use-fn #(reset! show? false))]
@ -414,10 +414,10 @@
:aria-labelledby "role-label-id"
:on-click on-show}
[:span {:class (stl/css :rol-label)
:id "role-label-id"} (tr role)]
:id "role-label-id"} role]
arrow-icon]
[: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))}
[:ul {:class (stl/css :roles-dropdown)
@ -883,7 +883,13 @@
[:div {:class (stl/css :invitation-list)}
(for [{:keys [email role]} selected]
[: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 :action-buttons :modal-invitation-action-buttons)}
@ -915,7 +921,7 @@
(mf/defc select-organization-modal
{::mf/register modal/components
::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)
has-current-org? (some? current-organization)
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-header)}
[:h2 {:class (stl/css :modal-select-organization-title)}
(tr title-key)]
title]
[:button {:class (stl/css :modal-close-btn)
:on-click modal/hide!} deprecated-icon/close]]
(when text-key
[:div {:class (stl/css :modal-content :modal-select-organization-text)} (tr text-key)])
(when text
[:div {:class (stl/css :modal-content :modal-select-organization-text)} text])
[: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)}
(when description-key
(when description
[:div
(tr description-key)])
(when info-message-key
description])
(when info-message
[:div
(tr info-message-key)])])
info-message])])
[:div {:class (stl/css :modal-select-organization-content)}
(tr choose-key)]
choose]
[:> combobox* {:id "selected-id"
:class (stl/css :team-member)
:options options
:select-only true
:placeholder (tr placeholder-key)
:placeholder placeholder
:on-change on-change
:default-selected (if has-current-org?
(str current-organization-id)
@ -1042,14 +1048,14 @@
:variant "secondary"
:type "button"
:on-click modal/hide!}
(tr cancel-key)]
cancel]
[:> button*
{:class (stl/css :accept-btn)
:variant "primary"
:type "button"
:disabled disabled?
:on-click on-confirm'}
(tr accept-key)]]]]]))
accept]]]]]))
(mf/defc invitation-section*
{::mf/private true}
@ -1114,7 +1120,7 @@
(and (= :restriction type)
(= :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)
(= :email-has-permanent-bounces code)

View File

@ -8,7 +8,6 @@
"The files export dialog/modal"
(:require-macros [app.main.style :as stl])
(:require
[app.common.data :as d]
[app.common.data.macros :as dm]
[app.config :as cf]
[app.main.data.exports.files :as fexp]
@ -157,19 +156,6 @@
:key (name type)}
[:label {:for (str "export-" type)
: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
:option-icon-wrapper true
:checked (= selected type))}
@ -185,9 +171,17 @@
[:> heading* {:level 3
:typography t/body-large
: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)}
(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"
:class (stl/css :option-input)

View File

@ -107,28 +107,27 @@
(when (:text-decoration style)
[:div {:class (stl/css :text-row)}
[: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)}
[:> copy-button* {:data (copy-style-data style :text-decoration)}
[: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)
[:div {:class (stl/css :text-row)}
[: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)}
[:> copy-button* {:data (copy-style-data style :text-transform)}
[: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)
:class (stl/css :attributes-content-row)}

View File

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

View File

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

View File

@ -30,6 +30,12 @@
:weak-password
(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)
(mapv tr details))]
(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
;; present here; it may predate the current minimum length policy.
[: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}
(fn [{:keys [password-1 password-2]}]
(= password-1 password-2))]])

View File

@ -15,6 +15,7 @@
[app.main.data.profile :as du]
[app.main.data.shortcuts :as ds]
[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.store :as st]
@ -117,13 +118,60 @@
:final-key (normalize-key event)
: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
[type keyname]
(let [translat-pre (case type
:sc "shortcuts."
:sec "shortcut-section."
:sub-sec "shortcut-subsection.")]
(tr (str translat-pre (d/name keyname)))))
(let [label-fn (case type
:sc (get command-labels keyname)
:sec (get section-labels keyname)
:sub-sec (get subsection-labels 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
[new-command all-shortcuts current-key]
@ -247,13 +295,13 @@
db-subs (dissoc db-subs :basics)
vw-subs (dissoc vw-subs :basics)
all {:basics {:children {:none {:children basics}}
:translation (tr "shortcut-section.basics")}
:translation (tr "shortcuts.section.basics")}
:workspace {:children ws-subs
:translation (tr "shortcut-section.workspace")}
:translation (tr "shortcuts.section.workspace")}
:dashboard {:children db-subs
:translation (tr "shortcut-section.dashboard")}
:translation (tr "shortcuts.section.dashboard")}
:viewer {:children vw-subs
:translation (tr "shortcut-section.viewer")}}
:translation (tr "shortcuts.section.viewer")}}
all (walk all nil)
all-sc-names (map #(translation-keyname :sc %)
(concat (keys workspace-sc)
@ -316,11 +364,11 @@
vw-subs (dissoc vw-subs :basics)
ws-subs (merge ws-subs pt-subs)
all {:workspace {:children ws-subs
:translation (tr "shortcut-section.workspace")}
:translation (tr "shortcuts.section.workspace")}
:dashboard {:children db-subs
:translation (tr "shortcut-section.dashboard")}
:translation (tr "shortcuts.section.dashboard")}
:viewer {:children vw-subs
:translation (tr "shortcut-section.viewer")}}
:translation (tr "shortcuts.section.viewer")}}
all (walk all nil)
all-sc-names (map #(translation-keyname :sc %)
(concat (keys workspace-sc)

View File

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

View File

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

View File

@ -653,7 +653,10 @@
:text (tr "workspace.sidebar.layers.texts")
:image (tr "workspace.sidebar.layers.images")
: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)]
[:button {:class (stl/css :layer-filter)

View File

@ -208,7 +208,9 @@
[:> title-bar* {:collapsable has-exports?
:collapsed (not open?)
: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?))}
[:> icon-button* {:variant "ghost"
: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-title)}
[:> title-bar* {:collapsable false
:title (tr "workspace.options.pixel grid-color")
:title (tr "workspace.options.pixel-grid-color")
:class (stl/css :title-spacing-page)}]]
[:div {:class (stl/css :element-content)}
[:> color-row*
{:disable-gradient true
:disable-image true
:title (tr "workspace.options.pixel grid-color")
:title (tr "workspace.options.pixel-grid-color")
:color grid-color
:on-change on-grid-change
:origin :pixel-grid

View File

@ -103,7 +103,7 @@
[:> icon-button* {:variant "ghost"
:icon i/add
: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/private true}

View File

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

View File

@ -197,6 +197,10 @@
(apply str/fmt value (map #(if (c? %) @% %) args)))))))
(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 & args] (apply t *current-locale* code args)))

View File

@ -98,12 +98,14 @@
[frontend-tests.ui.comments-position-modifier-test]
[frontend-tests.ui.ds-controls-numeric-input-test]
[frontend-tests.ui.gradient-handlers-test]
[frontend-tests.ui.history-test]
[frontend-tests.ui.layout-container-multiple-test]
[frontend-tests.ui.measures-menu-props-test]
[frontend-tests.ui.organization-team-switch-test]
[frontend-tests.ui.routes-test]
[frontend-tests.ui.settings-password-schema-test]
[frontend-tests.ui.settings-shortcuts-test]
[frontend-tests.ui.shortcuts-labels-test]
[frontend-tests.ui.sidebar-scroll-test]
[frontend-tests.util-clipboard-test]
[frontend-tests.util-object-test]
@ -221,6 +223,7 @@
'frontend-tests.ui.comments-position-modifier-test
'frontend-tests.ui.ds-controls-numeric-input-test
'frontend-tests.ui.gradient-handlers-test
'frontend-tests.ui.history-test
'frontend-tests.ui.layout-container-multiple-test
'frontend-tests.ui.measures-menu-props-test
'frontend-tests.ui.organization-team-switch-test
@ -229,6 +232,7 @@
'frontend-tests.text-editor-paste-guard-test
'frontend-tests.ui.settings-password-schema-test
'frontend-tests.ui.settings-shortcuts-test
'frontend-tests.ui.shortcuts-labels-test
'frontend-tests.ui.sidebar-scroll-test
'frontend-tests.util-clipboard-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
"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]
(->> (: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)
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/code props) (:error/code tprops))])))
(if efn
(efn problem)
(or (:error/code props) (:error/code tprops)))])))
(into {})))
(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"
"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"
msgstr "Reeds 'n rekening?"
#: src/app/main/ui/auth/register.cljs:277
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "Bevestig wagwoord"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "Skep demo rekening"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "Wil jy dit net probeer?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Dit is 'n DEMO-diens, MOENIE vir werklike werk gebruik nie, die projekte "
"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"
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"
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"
msgstr "Meld hier aan"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Meld aan"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
msgstr "Wagwoord suksesvol verander"
@ -96,19 +79,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "Wagwoord"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
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"
msgstr "Privaatheidsbeleid"
@ -116,56 +99,35 @@ msgstr "Privaatheidsbeleid"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "Wagwoord vergeet?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
msgstr "Skep 'n rekening"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "Skep 'n rekening"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "Diensbepalings"
#, unused
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
#: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
msgid "common.publish"
msgstr "Publiseer"
@ -237,50 +199,23 @@ msgstr "Deel prototipes"
msgid "common.share-link.view-all"
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"
msgstr "Depubliseer"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
msgstr "Spanbestuur"
#: src/app/main/ui/dashboard/projects.cljs:95
#: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text"
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"
msgstr "Span saam!"
#: src/app/main/ui/dashboard/projects.cljs
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared"
msgstr "Voeg by as Gedeelde Biblioteek"
@ -288,11 +223,11 @@ msgstr "Voeg by as Gedeelde Biblioteek"
msgid "dashboard.change-email"
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"
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"
msgstr "Skep 'n nuwe span"
@ -300,7 +235,7 @@ msgstr "Skep 'n nuwe span"
msgid "dashboard.default-team-name"
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"
msgstr "Verwyder span"
@ -308,20 +243,15 @@ msgstr "Verwyder span"
msgid "dashboard.download-binary-file"
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
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate"
msgstr "Dupliseer"
#: src/app/main/ui/dashboard/file_menu.cljs:272
#: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi"
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"
msgstr "Laai %s Penpot lêers (.penpot) af"
@ -333,10 +263,6 @@ msgstr "Voer borde as PDF uit"
msgid "dashboard.export-frames.title"
msgstr "Voer as PDF uit"
#, unused
msgid "dashboard.export-multi"
msgstr "Voer %s Penpot lêers uit"
#: src/app/main/ui/auth/recovery.cljs:41
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
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"
"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"
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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "পাসওয়ার্ড নিশ্চিত করুন"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "ডেমো অ্যাকাউন্ট তৈরী করুন"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
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"
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"
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"
msgstr "এখানে লগিন করুন"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "লগিন"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "গিটহাব"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "গিটল্যাব"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "গুগল"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "ওপেনআইডি"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
msgstr "নতুন পাসওয়ার্ড টাইপ করুন"
#: src/app/main/ui/auth/recovery.cljs:41
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
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"
"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"
msgstr "Har du allerede en konto?"
#: src/app/main/ui/auth/register.cljs:277
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
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"
msgstr "Lav demokonto"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "Vil du bare prøve det?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Det her er en DEMO service, BRUG IKKE for rigtigt arbejde, projekterne vil "
"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"
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"
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"
msgstr "Log på her"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Log på"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "Github"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "Gitlab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
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"
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"
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"
msgstr "Adgangskode"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
msgstr "Mindst 8 karakterer"
@ -110,41 +93,31 @@ msgstr "Mindst 8 karakterer"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "Glemt adgangskode?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
msgstr "Opret en konto"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "Opret en konto"
#: src/app/main/ui/auth.cljs
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared"
msgstr "Tilføj som Delt Bibliotek"
@ -152,11 +125,11 @@ msgstr "Tilføj som Delt Bibliotek"
msgid "dashboard.change-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"
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"
msgstr "Opret nyt team"
@ -164,15 +137,15 @@ msgstr "Opret nyt team"
msgid "dashboard.default-team-name"
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"
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"
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"
msgstr "Dublikér %s filer"
@ -198,7 +171,7 @@ msgstr ""
msgid "dashboard.invite-profile"
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"
msgstr "Forlad team"
@ -210,31 +183,31 @@ msgstr "Delte Biblioteker"
msgid "dashboard.loading-files"
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"
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"
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"
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"
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"
msgstr "Ny Fil"
#: src/app/main/ui/dashboard/projects.cljs:67
#: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project"
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"
msgstr "Nyt Projekt"
@ -242,39 +215,39 @@ msgstr "Nyt Projekt"
msgid "dashboard.no-matches-for"
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"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "Projekter"
@ -282,12 +255,7 @@ msgstr "Projekter"
msgid "dashboard.remove-account"
msgstr "Vil du slette din konto?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, 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
#: 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"
msgstr "Søg…"
@ -303,47 +271,47 @@ msgstr "Vælg UI sprog"
msgid "dashboard.select-ui-theme"
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"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "Team info"
#: src/app/main/ui/dashboard/team.cljs:1708
#: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members"
msgstr "Medlemmer"
#: src/app/main/ui/dashboard/team.cljs:1723
#: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects"
msgstr "Team projekter"
@ -375,11 +343,11 @@ msgstr "Email"
msgid "dashboard.your-name"
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"
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"
msgstr "Ok"
@ -391,27 +359,19 @@ msgstr "Er du sikker?"
msgid "errors.clipboard-not-implemented"
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"
msgstr "Genopretningspoletten er ugyldig."
#, unused
msgid "labels.custom-fonts"
msgstr "Brugerdefinerede skrifttyper"
#: src/app/main/ui/dashboard/fonts.cljs:472
msgid "labels.font-family"
msgstr "Skrifttypefamilie"
#, unused
msgid "labels.font-providers"
msgstr "Skrifttype udbydere"
#: 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"
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"
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"
"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"
msgstr "¿Ya tienes una cuenta?"
#: src/app/main/ui/auth/register.cljs:277
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
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"
msgstr "Crear cuenta demo"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "¿Solo quieres probarlo?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Este es un servicio DEMO, NO LO UTILICE para trabajos reales, los proyectos "
"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"
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"
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"
msgstr "Inicie sesión aquí"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Iniciar sesión"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "Open ID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
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 "
"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"
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"
msgstr "Contraseña"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
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"
msgstr "Política de privacidad"
@ -116,56 +99,35 @@ msgstr "Política de privacidad"
msgid "auth.recovery-request-submit"
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"
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"
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"
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"
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"
msgstr "Crea una cuenta"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "Crea una cuenta"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "Términos de servicio"
#, unused
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
#: src/app/main/ui/workspace/libraries.cljs:437, src/app/main/ui/workspace/libraries.cljs:838
msgid "common.publish"
msgstr "Publicar"
@ -237,57 +199,25 @@ msgstr "Compartir prototipos"
msgid "common.share-link.view-all"
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"
msgstr "Despublicar"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
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"
msgstr ""
"Penpot está destinado a equipos. Invite a miembros a trabajar juntos en "
"proyectos y archivos"
#: src/app/main/ui/dashboard/projects.cljs:93
#: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title"
msgstr "¡En equipo!"
#: src/app/main/ui/dashboard/projects.cljs
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared"
msgstr "Agregar como biblioteca compartida"
@ -295,11 +225,11 @@ msgstr "Agregar como biblioteca compartida"
msgid "dashboard.change-email"
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"
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"
msgstr "Crear nuevo equipo"
@ -307,7 +237,7 @@ msgstr "Crear nuevo equipo"
msgid "dashboard.default-team-name"
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"
msgstr "Eliminar equipo"
@ -315,20 +245,15 @@ msgstr "Eliminar equipo"
msgid "dashboard.download-binary-file"
msgstr "Descargar el archivo Penpot (.penpot)"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate"
msgstr "Duplicar"
#: src/app/main/ui/dashboard/file_menu.cljs:272
#: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi"
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"
msgstr "Descargar %s archivos Penpot (.penpot)"
@ -340,10 +265,6 @@ msgstr "Exportar tableros como PDF"
msgid "dashboard.export-frames.title"
msgstr "Exportar como PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "Exportar %s archivos de Penpot"
#: src/app/main/ui/exports/assets.cljs:108
msgid "dashboard.export-multiple.selected"
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"
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
msgid "dashboard.import.progress.process-typographies"
msgstr "Procesamiento de tipografías"
@ -391,7 +307,7 @@ msgstr "Subiendo archivo: %s"
msgid "dashboard.invite-profile"
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"
msgstr "dejar el equipo"
@ -403,7 +319,7 @@ msgstr "Bibliotecas y plantillas"
msgid "dashboard.libraries-and-templates.explore"
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"
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"
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"
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"
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"
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"
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"
msgstr "Archivo nuevo"
#: src/app/main/ui/dashboard/projects.cljs:67
#: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project"
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"
msgstr "Nuevo proyecto"
@ -451,35 +367,22 @@ msgstr "Nuevo proyecto"
msgid "dashboard.no-matches-for"
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"
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"
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"
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
#, unused
#: ../common/src/app/common/schema.cljc:1076
msgid "errors.field-not-all-whitespace"
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"
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"
"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"
msgstr "Onko sinulla jo käyttäjä?"
#: src/app/main/ui/auth/register.cljs:277
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "Vahvista salasana"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "Luo testikäyttäjä"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "Haluatko vain kokeilla?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Tämä on DEMO versio, ÄLÄ KÄYTÄ oikeaan työhön, projektit tullaan määräajoin "
"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"
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"
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"
msgstr "Kirjaudu sisään"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Kirjaudu"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
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"
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"
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"
msgstr "Salasana"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
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"
msgstr "Tietosuojaseloste"
@ -114,45 +97,35 @@ msgstr "Tietosuojaseloste"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "Unohtuiko salasana?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
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"
msgstr "Luo uusi käyttäjä"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "Käyttöehdot"
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Lähetimme vahvistussähköpostin osoitteeseen"
#: 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"
msgstr "Julkaise"
@ -224,46 +197,24 @@ msgstr "Jaa prototyypit"
msgid "common.share-link.view-all"
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"
msgstr "Peruuta julkaisu"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
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"
msgstr ""
"Penpot on tarkoitettu ryhmille. Kutsu jäseniä työstääksenne projekteja "
"yhdessä"
#: src/app/main/ui/dashboard/projects.cljs:93
#: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title"
msgstr "Ryhmäydy!"
#: src/app/main/ui/dashboard/projects.cljs
#, 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
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
msgstr "Palautustunnus on virheellinen."

View File

@ -11,93 +11,71 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\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"
msgstr "Hevur tú longu ein brúkara?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
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"
msgstr "Stovna royndarkonto"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "Vilt tú royna tað?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Hetta er ein ROYNDAR tænasta, IKKI BRÚKA til veruligt arbeiði, "
"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"
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"
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"
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"
msgstr "Innrita her."
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Rita inn"
#: src/app/main/ui/auth/login.cljs:291
#: src/app/main/ui/auth/login.cljs:297
msgid "auth.login-tagline"
msgstr ""
"Penpot er eitt ókeypis formgevingstól við opnari keldukotu, at nýta til "
"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"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
msgstr "Loyniorðið er broytt"
@ -111,19 +89,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "Loyniorð"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
msgstr "Minst 8 stavir"
#: src/app/main/ui/auth/register.cljs:277
#: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy"
msgstr "Privat politikkur"
@ -131,63 +109,45 @@ msgstr "Privat politikkur"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "Gloymt loyniorð?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
msgstr ""
"Latið okkum frætta, hvat vit skulu navngeva teg á okkara yvirlitsskýggja og "
"í teldupostum."
#: src/app/main/ui/auth/register.cljs:367
#: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title"
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"
msgstr "Stovna konto"
#: src/app/main/ui/auth/register.cljs:124
#, 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
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "Stovna eina konto"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "Treytir"
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Vit hava sent ein váttanar teldupost til"
#: 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"
msgstr "Gev út"
@ -259,50 +219,23 @@ msgstr "Deil frumsnið"
msgid "common.share-link.view-all"
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"
msgstr "Angra útgevan"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
msgstr "Toymisleiðsla"
#: src/app/main/ui/dashboard/projects.cljs:95
#: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text"
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"
msgstr "Toyma upp!"
#: src/app/main/ui/dashboard/projects.cljs
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared"
msgstr "Legg afturat sum Deilt Savn"
@ -310,11 +243,11 @@ msgstr "Legg afturat sum Deilt Savn"
msgid "dashboard.change-email"
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"
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"
msgstr "Stovna nýtt toymi"
@ -322,7 +255,7 @@ msgstr "Stovna nýtt toymi"
msgid "dashboard.default-team-name"
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"
msgstr "Strika toymi"
@ -330,20 +263,15 @@ msgstr "Strika toymi"
msgid "dashboard.download-binary-file"
msgstr "Heinta Penpot fílu (.penpot)"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate"
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"
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"
msgstr "Heinta %s Penpot fílur (.penpot)"
@ -355,10 +283,6 @@ msgstr "Útflyt borð sum PDF"
msgid "dashboard.export-frames.title"
msgstr "Útflyt til PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "Útflyt Penpot %s fílur"
#: src/app/main/ui/exports/assets.cljs:108
msgid "dashboard.export-multiple.selected"
msgstr "%s av %s lutum eru valdir"
@ -379,11 +303,6 @@ msgstr "Har eru ongin lutir við útflytsstillingum."
msgid "dashboard.export-shapes.title"
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
msgid "dashboard.fonts.deleted-placeholder"
msgstr "Stavsniði er strika"
@ -402,22 +321,15 @@ msgstr[1] "% stavsnið løgd afturat"
msgid "dashboard.fonts.upload-all"
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"
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"
msgstr "Ups! Tað riggaði ikki at innflyta hesa fílu"
#: src/app/main/ui/dashboard/import.cljs:292
#, 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
#: src/app/main/ui/dashboard/import.cljs:593
msgid "dashboard.import.import-message"
msgstr "% fílur eru innfluttir."
@ -453,7 +365,7 @@ msgstr "Innleggur fílu: %s"
msgid "dashboard.invite-profile"
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"
msgstr "Far úr toymu"
@ -465,31 +377,31 @@ msgstr "lesur tínar fílur inn…"
msgid "dashboard.loading-fonts"
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"
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"
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"
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"
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"
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"
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"
msgstr "Nýggj verkætlan"
@ -497,43 +409,43 @@ msgstr "Nýggj verkætlan"
msgid "dashboard.no-matches-for"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "Verkætlanir"
@ -541,16 +453,11 @@ msgstr "Verkætlanir"
msgid "dashboard.remove-account"
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
msgid "dashboard.save-settings"
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"
msgstr "Leita…"
@ -566,39 +473,39 @@ msgstr "Vel mál til takførisflatu"
msgid "dashboard.select-ui-theme"
msgstr "Vel tema"
#: src/app/main/ui/dashboard/projects.cljs:292
#: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files"
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"
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"
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"
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"
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"
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"
msgstr "Toymisupplýsingar"
#: src/app/main/ui/dashboard/team.cljs:1708
#: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members"
msgstr "Toymislimir"
#: src/app/main/ui/dashboard/team.cljs:1723
#: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects"
msgstr "Toymisverkætlanir"
@ -618,23 +525,19 @@ msgstr "Skriva fyri at leita eftir úrslitum"
msgid "ds.alert-ok"
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"
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"
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"
msgstr "Strikað %s fílur"
#, unused
msgid "labels.edit-file"
msgstr "Broyt fílu"
#: src/app/main/ui/dashboard/projects.cljs:242, src/app/main/ui/dashboard/team.cljs:1733
#: src/app/main/ui/dashboard/projects.cljs:238, src/app/main/ui/dashboard/team.cljs:1739
msgid "labels.num-of-files"
msgid_plural "labels.num-of-files"
msgstr[0] "1 fíla"
@ -652,27 +555,27 @@ msgstr "Legg afturat sum Deilt Savn"
msgid "modals.add-shared-confirm.message"
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"
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"
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"
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"
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"
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"
msgstr "Strikar %s fílur"
@ -694,17 +597,7 @@ msgid_plural "modals.delete-shared-confirm.title"
msgstr[0] "Strikar fílu"
msgstr[1] "Strikar fílur"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, 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
#: src/app/main/ui/dashboard/files.cljs:209
msgid "title.dashboard.files"
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"
"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"
msgstr "アカウントをお持ちですか?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "パスワードを確認"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "デモアカウントを作成"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "試してみませんか?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
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"
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"
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"
msgstr "こちらからログイン"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "ログイン"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "Gitlab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAPでログイン"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID Connect"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
msgstr "新しいパスワードを入力"
#: src/app/main/ui/auth/recovery.cljs:46
#: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully"
msgstr "パスワードを変更しました"
@ -95,19 +75,19 @@ msgstr "プロフィールが確認されていません。続ける前にプロ
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "パスワード"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
msgstr "登録"
#: src/app/main/ui/auth/register.cljs:277
#: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy"
msgstr "プライバシーポリシー"
@ -115,54 +95,44 @@ msgstr "プライバシーポリシー"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "パスワードを忘れましたか?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
msgstr "アカウントをお持ちでない方はこちら"
#: src/app/main/ui/auth/register.cljs:367
#: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title"
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"
msgstr "アカウントを作成"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "アカウントを作成"
#: src/app/main/ui/auth.cljs
#, unused
msgid "auth.sidebar-tagline"
msgstr "デザインとプロトタイピングのためのオープンソースです。"
#: src/app/main/ui/auth/register.cljs:50
#: src/app/main/ui/auth/register.cljs:49
#, markdown
msgid "auth.terms-and-privacy-agreement"
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"
msgstr "利用規約"
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "認証メールを送信しました"
#: 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"
msgstr "公開"
@ -231,20 +201,15 @@ msgstr "プロトタイプを共有"
msgid "common.share-link.view-all"
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"
msgstr "非公開"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
msgstr "チームを管理"
#: src/app/main/ui/dashboard/projects.cljs
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared"
msgstr "共有ライブラリとして追加"
@ -252,11 +217,11 @@ msgstr "共有ライブラリとして追加"
msgid "dashboard.change-email"
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"
msgstr "(コピー)"
#: src/app/main/ui/dashboard/sidebar.cljs:477
#: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team"
msgstr "チームを新規作成"
@ -264,7 +229,7 @@ msgstr "チームを新規作成"
msgid "dashboard.default-team-name"
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"
msgstr "チームを削除"
@ -272,16 +237,11 @@ msgstr "チームを削除"
msgid "dashboard.download-binary-file"
msgstr "Penpotファイル(.penpot)をダウンロード"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:302, src/app/main/ui/dashboard/project_menu.cljs:94
msgid "dashboard.duplicate"
msgstr "複製"
#: src/app/main/ui/dashboard/file_menu.cljs:272
#: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi"
msgstr "%s ファイルを複製"
@ -306,11 +266,11 @@ msgstr[0] "%s フォントを追加しました"
msgid "dashboard.fonts.upload-all"
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"
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"
msgstr "Penpotファイルをインポート"
@ -342,7 +302,7 @@ msgstr "アップロード中: %s"
msgid "dashboard.invite-profile"
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"
msgstr "チームから脱退"
@ -358,19 +318,19 @@ msgstr "ファイルを読みこんでいます…"
msgid "dashboard.loading-fonts"
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"
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"
msgstr "新しいファイル"
#: src/app/main/ui/dashboard/projects.cljs:67
#: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project"
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"
msgstr "新規プロジェクト"
@ -378,39 +338,39 @@ msgstr "新規プロジェクト"
msgid "dashboard.no-matches-for"
msgstr "\"%s\"が見つかりませんでした"
#: src/app/main/ui/dashboard/sidebar.cljs:1177
#: src/app/main/ui/dashboard/sidebar.cljs:400
msgid "dashboard.no-projects-placeholder"
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"
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"
msgstr "メールアドレスが認証されました"
#: src/app/main/ui/settings/password.cljs:46
#: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved"
msgstr "パスワードを保存しました!"
#: src/app/main/ui/dashboard/team.cljs:1719
#: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members"
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"
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"
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"
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"
msgstr "プロジェクト"
@ -418,16 +378,11 @@ msgstr "プロジェクト"
msgid "dashboard.remove-account"
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
msgid "dashboard.save-settings"
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"
msgstr "検索…"
@ -443,47 +398,47 @@ msgstr "表示言語を選択"
msgid "dashboard.select-ui-theme"
msgstr "テーマを選択"
#: src/app/main/ui/dashboard/projects.cljs:292
#: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files"
msgstr "すべてのファイルを表示"
#: src/app/main/ui/dashboard/file_menu.cljs:99
#: src/app/main/ui/dashboard/file_menu.cljs:129
msgid "dashboard.success-delete-file"
msgstr "ファイルを削除しました"
#: src/app/main/ui/dashboard/project_menu.cljs:63
#: src/app/main/ui/dashboard/project_menu.cljs:74
msgid "dashboard.success-delete-project"
msgstr "プロジェクトを削除しました"
#: src/app/main/ui/dashboard/file_menu.cljs:94
#: src/app/main/ui/dashboard/file_menu.cljs:124
msgid "dashboard.success-duplicate-file"
msgstr "ファイルを複製しました"
#: src/app/main/ui/dashboard/project_menu.cljs:35
#: src/app/main/ui/dashboard/project_menu.cljs:46
msgid "dashboard.success-duplicate-project"
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"
msgstr "ファイルを移動しました"
#: src/app/main/ui/dashboard/file_menu.cljs:132
#: src/app/main/ui/dashboard/file_menu.cljs:161
msgid "dashboard.success-move-files"
msgstr "ファイルを移動しました"
#: src/app/main/ui/dashboard/project_menu.cljs:57
#: src/app/main/ui/dashboard/project_menu.cljs:68
msgid "dashboard.success-move-project"
msgstr "ファイルを削除しました"
#: src/app/main/ui/dashboard/team.cljs:1663
#: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info"
msgstr "チーム情報"
#: src/app/main/ui/dashboard/team.cljs:1708
#: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members"
msgstr "チームのメンバー"
#: src/app/main/ui/dashboard/team.cljs:1723
#: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects"
msgstr "チームのプロジェクト"
@ -515,11 +470,11 @@ msgstr "Eメール"
msgid "dashboard.your-name"
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"
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"
msgstr "OK"
@ -527,11 +482,11 @@ msgstr "OK"
msgid "ds.confirm-title"
msgstr "本当に実行しますか?"
#: src/app/main/data/auth.cljs:197
#: src/app/main/data/auth.cljs:191
msgid "errors.auth-provider-not-configured"
msgstr "認証プロバイダが設定されていません。"
#: src/app/main/errors.cljs:258
#: src/app/main/errors.cljs:580
msgid "errors.auth.unable-to-login"
msgstr "認証されていないか、セッションが失効しているようです。"
@ -539,27 +494,27 @@ msgstr "認証されていないか、セッションが失効しているよう
msgid "errors.clipboard-not-implemented"
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"
msgstr "メールアドレスは使用されています"
#: src/app/main/ui/auth/verify_token.cljs:133
#: src/app/main/ui/auth/verify_token.cljs:153
msgid "errors.email-already-validated"
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"
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"
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"
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"
msgstr "エラーが発生しました。"
@ -571,7 +526,7 @@ msgstr "無効な色"
msgid "errors.invalid-email-confirmation"
msgstr "メールアドレスは同じものを入力する必要があります"
#: src/app/main/ui/auth/recovery.cljs:41
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
msgstr "リカバリコードが無効です。"
@ -583,7 +538,7 @@ msgstr "招待が無効"
msgid "errors.invite-invalid.info"
msgstr "この招待はキャンセルされたか、失効しています。"
#: src/app/main/ui/auth/login.cljs:95
#: src/app/main/ui/auth/login.cljs:96
msgid "errors.ldap-disabled"
msgstr "LDAP認証は無効になっています。"
@ -599,16 +554,15 @@ msgstr "画像の内容と拡張子が一致しません。"
msgid "errors.media-type-not-allowed"
msgstr "無効な画像です。"
#: src/app/main/ui/settings/password.cljs
#, unused
#: ../common/src/app/common/schema.cljc:1092
msgid "errors.password-too-short"
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"
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"
msgstr "オーナーはチームを脱退できません。オーナーロールを外してください。"
@ -616,11 +570,11 @@ msgstr "オーナーはチームを脱退できません。オーナーロール
msgid "errors.unexpected-error"
msgstr "エラーが発生しました。"
#: src/app/main/ui/auth/verify_token.cljs:75
#: src/app/main/ui/auth/verify_token.cljs:95
msgid "errors.unexpected-token"
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"
msgstr "ユーザー名かパスワードが正しくありません。"
@ -644,15 +598,10 @@ msgstr "題名"
msgid "feedback.twitter-title"
msgstr "Xサポートアカウント"
#: src/app/main/ui/settings/password.cljs:39
#: src/app/main/ui/settings/password.cljs:45
msgid "generic.error"
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
msgid "inspect.attributes.fill"
msgstr "塗りつぶし"
@ -661,51 +610,6 @@ msgstr "塗りつぶし"
msgid "inspect.attributes.image.download"
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
msgid "inspect.attributes.shadow"
msgstr "シャドウ"
@ -730,12 +634,7 @@ msgstr "フォントスタイル"
msgid "inspect.attributes.typography.line-height"
msgstr "行の高さ"
#: src/app/main/ui/inspect/attributes/text.cljs:140
#, unused
msgid "inspect.attributes.typography.text-decoration"
msgstr "文字装飾"
#: src/app/main/ui/inspect/attributes/text.cljs:113
#: src/app/main/ui/inspect/attributes/text.cljs:115
msgid "inspect.attributes.typography.text-decoration.underline"
msgstr "下線"
@ -771,7 +670,7 @@ msgstr "ショートカット"
msgid "labels.add-custom-font"
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"
msgstr "キャンセル"
@ -779,19 +678,19 @@ msgstr "キャンセル"
msgid "labels.comments"
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"
msgstr "コミュニティ"
#: src/app/main/ui/settings/password.cljs:103
#: src/app/main/ui/settings/password.cljs:109
msgid "labels.confirm-password"
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"
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"
msgstr "作成"
@ -803,43 +702,35 @@ msgstr "チームを作成"
msgid "labels.create-team.placeholder"
msgstr "チームの名前を入力"
#, unused
msgid "labels.custom-fonts"
msgstr "カスタムフォント"
#: src/app/main/ui/settings/sidebar.cljs:86
msgid "labels.dashboard"
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"
msgstr "削除"
#: src/app/main/ui/comments.cljs:1019
#: src/app/main/ui/comments.cljs:1047
msgid "labels.delete-comment"
msgstr "コメントを削除"
#: src/app/main/ui/comments.cljs:941
#: src/app/main/ui/comments.cljs:969
msgid "labels.delete-comment-thread"
msgstr "スレッドを削除"
#: src/app/main/ui/dashboard/team.cljs:1210
#: src/app/main/ui/dashboard/team.cljs:1216
msgid "labels.delete-invitation"
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"
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"
msgstr "編集"
#, unused
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
#: 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"
msgstr "エディタ"
@ -847,7 +738,7 @@ msgstr "エディタ"
msgid "labels.expired-invitation"
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"
msgstr "エクスポート"
@ -863,23 +754,23 @@ msgstr "フォントファミリー"
msgid "labels.font-variants"
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"
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"
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"
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"
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"
msgstr "ヘルプセンター"
@ -887,11 +778,11 @@ msgstr "ヘルプセンター"
msgid "labels.hide-resolved-comments"
msgstr "解決済みのコメントを非表示"
#: src/app/main/ui/static.cljs:411
#: src/app/main/ui/static.cljs:420
msgid "labels.internal-error.main-message"
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"
msgstr "招待"
@ -903,7 +794,7 @@ msgstr "言語"
msgid "labels.libraries-and-templates"
msgstr "ライブラリ&テンプレート"
#: src/app/main/ui/dashboard/sidebar.cljs:1527
#: src/app/main/ui/dashboard/sidebar.cljs:750
msgid "labels.logout"
msgstr "ログアウト"
@ -911,11 +802,11 @@ msgstr "ログアウト"
msgid "labels.member"
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"
msgstr "メンバー"
#: src/app/main/ui/settings/password.cljs:96
#: src/app/main/ui/settings/password.cljs:102
msgid "labels.new-password"
msgstr "新しいパスワード"
@ -923,28 +814,19 @@ msgstr "新しいパスワード"
msgid "labels.no-invitations"
msgstr "招待がありません。"
#: src/app/main/ui/static.cljs:311
#: src/app/main/ui/static.cljs:320
msgid "labels.not-found.main-message"
msgstr "おっと!"
#: src/app/main/ui/settings/password.cljs:89
#: src/app/main/ui/settings/password.cljs:95
msgid "labels.old-password"
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
msgid "labels.profile"
msgstr "プロフィール"
#: src/app/main/ui/dashboard/sidebar.cljs:1132
#: src/app/main/ui/dashboard/sidebar.cljs:355
msgid "labels.projects"
msgstr "プロジェクト"
@ -952,7 +834,7 @@ msgstr "プロジェクト"
msgid "labels.release-notes"
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"
msgstr "削除"
@ -960,7 +842,7 @@ msgstr "削除"
msgid "labels.remove-member"
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"
msgstr "名前を変更"
@ -968,10 +850,10 @@ msgstr "名前を変更"
msgid "labels.rename-team"
msgstr "チーム名を変更"
#: src/app/main/ui/dashboard/team.cljs:1207
#: src/app/main/ui/dashboard/team.cljs:1213
msgid "labels.resend-invitation"
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"
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"
"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"
msgstr "Jau turite paskyrą?"
#: src/app/main/ui/auth/register.cljs:277
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
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"
msgstr "Kurti demonstracinę paskyrą"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "Norite tik išmėginti?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Tai yra DEMONSTRACINĖ versija, NEKURKITE tikrų darbų, nes projektai "
"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"
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"
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"
msgstr "Prisijungimas čia"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Prisijungti"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
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"
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"
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"
msgstr "Slaptažodis"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
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"
msgstr "Privatumo politika"
@ -115,45 +98,35 @@ msgstr "Privatumo politika"
msgid "auth.recovery-request-submit"
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"
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"
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"
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"
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"
msgstr "Sukurti paskyrą"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "Sukurti paskyrą"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "Paslaugų teikimo sąlygos"
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "Išsiuntėme patvirtinimo el. laišką adresu"
#: 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"
msgstr "Paskelbti"
@ -226,45 +199,25 @@ msgstr "Dalinkitės prototipais"
msgid "common.share-link.view-all"
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"
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"
msgstr "Komandos valdymas"
#: src/app/main/ui/dashboard/projects.cljs:95
#: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text"
msgstr ""
"Penpot yra skirtas komandoms. Pakvieskite narius bendram darbui su "
"projektais ir failais"
#: src/app/main/ui/dashboard/projects.cljs:93
#: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title"
msgstr "Suburkite komandą!"
#: src/app/main/ui/dashboard/projects.cljs
#, 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
#: src/app/main/ui/dashboard/file_menu.cljs:324, src/app/main/ui/workspace/main_menu.cljs:700
msgid "dashboard.add-shared"
msgstr "Pridėti kaip bendrinamą biblioteką"
@ -272,11 +225,11 @@ msgstr "Pridėti kaip bendrinamą biblioteką"
msgid "dashboard.change-email"
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"
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"
msgstr "Sukurti naują komandą"
@ -284,15 +237,15 @@ msgstr "Sukurti naują komandą"
msgid "dashboard.default-team-name"
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"
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"
msgstr "Dublikatas"
#: src/app/main/ui/dashboard/file_menu.cljs:272
#: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi"
msgstr "Dubliuoti %s failus"
@ -304,10 +257,6 @@ msgstr "Eksportuokite darbalaukius į PDF"
msgid "dashboard.export-frames.title"
msgstr "Eksportuoti į PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "Eksportuoti Penpot %s failus"
#: src/app/main/ui/exports/assets.cljs:108
msgid "dashboard.export-multiple.selected"
msgstr "Pasirinkta %s iš %s elementų"
@ -377,20 +326,15 @@ msgstr ""
msgid "dashboard.fonts.upload-all"
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"
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"
msgstr "Oi! Nepavyko importuoti šio failo"
#: src/app/main/ui/dashboard/import.cljs:292
#, unused
msgid "dashboard.import.import-error"
msgstr "Iškilo problema importuojant failą. Failas nebuvo importuotas."
#: src/app/main/ui/dashboard/import.cljs:556
#: src/app/main/ui/dashboard/import.cljs:587
msgid "dashboard.import.import-warning"
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"
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"
msgstr "Naujas failas"
#: src/app/main/ui/dashboard/projects.cljs:67
#: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project"
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"
msgstr "Naujas projektas"
@ -438,43 +382,43 @@ msgstr "Naujas projektas"
msgid "dashboard.no-matches-for"
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"
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"
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"
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"
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"
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"
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"
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"
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"
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"
msgstr "Projektai"
@ -482,27 +426,10 @@ msgstr "Projektai"
msgid "dashboard.remove-account"
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
msgid "dashboard.theme-change"
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"
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"
"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"
msgstr "നിലവിൽ അക്കൗണ്ടുണ്ടോ?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "പാസ്‌വേഡ് സ്ഥിരീകരിക്കുക"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "ഡെമോ അക്കൗണ്ട് സൃഷ്ടിക്കുക"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "ഒന്നുപയോഗിച്ച് നോക്കുന്നോ?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
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"
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"
msgstr "മുഴുവൻ പേര്"
#: src/app/main/ui/auth/login.cljs:288
#: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title"
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"
msgstr "ഇവിടെ ലോഗിൻ ചെയ്യുക."
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "ലോഗിൻ"
#: src/app/main/ui/auth/login.cljs:291
#: src/app/main/ui/auth/login.cljs:297
msgid "auth.login-tagline"
msgstr ""
"ഡിസൈനിങിലും കോഡിങിലും സഹകരിച്ച് പ്രവർത്തിക്കാനുള്ള ഒരു ഓപ്പൺസോഴ്സ് ഡിസൈൻ "
"ഉപകരണമാണ് പെൻപോട്ട്"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "ഗിറ്റ്ഹബ്ബ്"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "ഗിറ്റ്ലാബ്"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "ഗൂഗിൾ"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "ഓപ്പൺഐഡി"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
msgstr "നിങ്ങളിപ്പോൾ %s-ന്റെ ഭാഗമാണ്"
#: src/app/main/ui/auth/recovery.cljs:46
#: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully"
msgstr "പാസ്‌വേഡ് വിജയകരമായി മാറ്റി"
@ -113,19 +91,19 @@ msgstr "പ്രൊഫൈൽ സാധൂകരിച്ചിട്ടില
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "പാസ്‌വേഡ്"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
msgstr "കുറഞ്ഞത് 8 ക്യാരക്റ്ററുകൾ"
#: src/app/main/ui/auth/register.cljs:277
#: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy"
msgstr "സ്വകാര്യതാനയം"
@ -133,67 +111,46 @@ msgstr "സ്വകാര്യതാനയം"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "പാസ്‌വേഡ് മറന്നോ?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
msgstr "ഇതുവരെ അക്കൗണ്ട് ഇല്ലേ?"
#: src/app/main/ui/auth/register.cljs:368
#: src/app/main/ui/auth/register.cljs:357
msgid "auth.register-account-tagline"
msgstr "നിങ്ങളെ ഞങ്ങൾ എന്താണ് ഡാഷ്ബോർഡിലും ഇമെയിലിലും വിളിക്കേണ്ടതെന്ന് അറിയിക്കുക."
#: src/app/main/ui/auth/register.cljs:367
#: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title"
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"
msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "അക്കൗണ്ട് സൃഷ്ടിക്കുക"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "ഉപയോഗനിബന്ധനകൾ"
#, unused
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
#: 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.work-email"
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
msgid "common.share-link.all-users"
msgstr "എല്ലാ പെൻപോട്ട് ഉപയോക്താക്കളും"
@ -250,7 +207,7 @@ msgstr "പ്രോട്ടോടൈപ്പുകൾ പങ്കുവെ
msgid "common.share-link.view-all"
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"
msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക്കുക"
@ -258,11 +215,11 @@ msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക
msgid "dashboard.change-email"
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"
msgstr "(പകർത്തുക)"
#: src/app/main/ui/dashboard/sidebar.cljs:477
#: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team"
msgstr "പുതിയ സംഘം രൂപീകരിക്കുക"
@ -270,15 +227,15 @@ msgstr "പുതിയ സംഘം രൂപീകരിക്കുക"
msgid "dashboard.default-team-name"
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"
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"
msgstr "പകർപ്പ്"
#: src/app/main/ui/dashboard/file_menu.cljs:272
#: src/app/main/ui/dashboard/file_menu.cljs:269
msgid "dashboard.duplicate-multi"
msgstr "%s ഫയലുകളുടെ പകർപ്പ്"
@ -290,19 +247,10 @@ msgstr "ആർട്ട്ബോർഡുകൾ പിഡിഎഫായി എ
msgid "dashboard.export-frames.title"
msgstr "പിഡിഎഫായി എക്സ്പോർട്ട് ചെയ്യുക"
#, unused
msgid "dashboard.export-multi"
msgstr "പെൻപോട്ട് %s ഫയലുകൾ എക്സ്പോർട്ട് ചെയ്യുക"
#: src/app/main/ui/workspace/main_menu.cljs:728
msgid "dashboard.export-shapes"
msgstr "എക്സ്പോർട്ട്"
#: src/app/main/ui/auth/recovery.cljs:41
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
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"
"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"
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"
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"
msgstr "Fullt navn"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
msgstr "Passord"
@ -35,27 +35,27 @@ msgstr "Passord"
msgid "auth.recovery-request-submit"
msgstr "Gjenopprett passord"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
msgstr "Opprett konto"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
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"
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"
msgstr "(kopi)"
@ -63,7 +63,7 @@ msgstr "(kopi)"
msgid "dashboard.default-team-name"
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"
msgstr "Slett lag"
@ -71,7 +71,7 @@ msgstr "Slett lag"
msgid "dashboard.invite-profile"
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"
msgstr "Forlat team"
@ -79,43 +79,43 @@ msgstr "Forlat team"
msgid "dashboard.libraries-title"
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"
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"
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"
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"
msgstr "+ Ny fil"
#: src/app/main/ui/dashboard/projects.cljs:67
#: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project"
msgstr "+ Nytt prosjekt"
#: src/app/main/ui/dashboard/team.cljs:1719
#: src/app/main/ui/dashboard/team.cljs:1725
msgid "dashboard.num-of-members"
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"
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"
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"
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"
msgstr "Prosjekter"
@ -123,12 +123,7 @@ msgstr "Prosjekter"
msgid "dashboard.remove-account"
msgstr "Ønsker du å fjerne kontoen din?"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, 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
#: 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"
msgstr "Søk …"
@ -144,19 +139,19 @@ msgstr "Velg grensesnittsspråk"
msgid "dashboard.select-ui-theme"
msgstr "Velg drakt"
#: src/app/main/ui/dashboard/projects.cljs:292
#: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files"
msgstr "Vis alle filer"
#: src/app/main/ui/dashboard/team.cljs:1663
#: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info"
msgstr "Teaminfo"
#: src/app/main/ui/dashboard/team.cljs:1708
#: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members"
msgstr "Teammedlemmer"
#: src/app/main/ui/dashboard/team.cljs:1723
#: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects"
msgstr "Lagprosjekter"
@ -172,11 +167,11 @@ msgstr "Din konto"
msgid "dashboard.your-name"
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"
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"
msgstr "OK"
@ -188,11 +183,11 @@ msgstr "Er du sikker?"
msgid "errors.invalid-color"
msgstr "Ugyldig farge"
#: src/app/main/ui/auth/recovery.cljs:41
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
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"
msgstr "Ukjent symbol"
@ -204,50 +199,15 @@ msgstr "Beskrivelse"
msgid "feedback.subject"
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
msgid "inspect.attributes.image.download"
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
msgid "inspect.attributes.shadow"
msgstr "Skygge"
#: src/app/main/ui/inspect/attributes/stroke.cljs
#, 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
#: src/app/main/ui/inspect/attributes/text.cljs:53, src/app/main/ui/inspect/attributes/text.cljs:158
msgid "inspect.attributes.typography"
msgstr "Typografi"
@ -287,11 +247,11 @@ msgstr "SVG"
msgid "inspect.tabs.code.selected.text"
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"
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"
msgstr "Avbryt"
@ -299,11 +259,11 @@ msgstr "Avbryt"
msgid "labels.code"
msgstr "Kode"
#: src/app/main/ui/settings/password.cljs:103
#: src/app/main/ui/settings/password.cljs:109
msgid "labels.confirm-password"
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"
msgstr "Opprett"
@ -315,35 +275,31 @@ msgstr "Opprett nytt lag"
msgid "labels.create-team.placeholder"
msgstr "Skriv inn nytt lagnavn"
#, unused
msgid "labels.custom-fonts"
msgstr "Egendefinerte skrifter"
#: src/app/main/ui/settings/sidebar.cljs:86
msgid "labels.dashboard"
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"
msgstr "Slett"
#: src/app/main/ui/comments.cljs:1019
#: src/app/main/ui/comments.cljs:1047
msgid "labels.delete-comment"
msgstr "Slett kommentar"
#: src/app/main/ui/comments.cljs:941
#: src/app/main/ui/comments.cljs:969
msgid "labels.delete-comment-thread"
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"
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"
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"
msgstr "Rediger"
@ -351,11 +307,7 @@ msgstr "Rediger"
msgid "labels.font-family"
msgstr "Skriftfamilie"
#, unused
msgid "labels.font-providers"
msgstr "Skrifttilbydere"
#: 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"
msgstr "Skrifter"
@ -371,23 +323,23 @@ msgstr "Installerte skrifter"
msgid "labels.language"
msgstr "Språk"
#: src/app/main/ui/dashboard/sidebar.cljs:1527
#: src/app/main/ui/dashboard/sidebar.cljs:750
msgid "labels.logout"
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"
msgstr "Medlemmer"
#: src/app/main/ui/settings/password.cljs:96
#: src/app/main/ui/settings/password.cljs:102
msgid "labels.new-password"
msgstr "Nytt passord"
#: src/app/main/ui/settings/password.cljs:89
#: src/app/main/ui/settings/password.cljs:95
msgid "labels.old-password"
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"
msgstr "Eier"
@ -399,27 +351,27 @@ msgstr "Passord"
msgid "labels.profile"
msgstr "Profil"
#: src/app/main/ui/dashboard/sidebar.cljs:1132
#: src/app/main/ui/dashboard/sidebar.cljs:355
msgid "labels.projects"
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"
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"
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"
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"
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"
msgstr "Lagre"
@ -435,11 +387,11 @@ msgstr "Send"
msgid "labels.sending"
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"
msgstr "Innstillinger"
#: src/app/main/ui/dashboard/sidebar.cljs:1159
#: src/app/main/ui/dashboard/sidebar.cljs:382
msgid "labels.shared-libraries"
msgstr "Delte bibliotek"
@ -459,7 +411,7 @@ msgstr "Last opp egendefinerte skrifter"
msgid "labels.uploading"
msgstr "Laster opp …"
#: src/app/main/ui/comments.cljs:862
#: src/app/main/ui/comments.cljs:890
msgid "labels.write-new-comment"
msgstr "Skriv ny kommentar"
@ -479,19 +431,19 @@ msgstr "Bekreft ny e-postadresse"
msgid "modals.delete-account.confirm"
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"
msgstr "Slett samtale"
#: src/app/main/ui/comments.cljs:911
#: src/app/main/ui/comments.cljs:939
msgid "modals.delete-comment-thread.title"
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"
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"
msgstr "Slett filer"
@ -499,7 +451,7 @@ msgstr "Slett filer"
msgid "modals.delete-page.title"
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"
msgstr "Slett prosjekt"
@ -511,7 +463,7 @@ msgstr "Slett medlem"
msgid "modals.delete-team-member-confirm.title"
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"
msgstr "Forlat team"
@ -519,7 +471,7 @@ msgstr "Forlat team"
msgid "modals.update-remote-component.cancel"
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"
msgstr "Invitasjon sendt"
@ -531,7 +483,7 @@ msgstr "Profil lagret"
msgid "title.settings.options"
msgstr "Innstillinger - Penpot"
#: src/app/main/ui/settings/password.cljs:115
#: src/app/main/ui/settings/password.cljs:121
msgid "title.settings.password"
msgstr "Passord - Penpot"
@ -539,7 +491,7 @@ msgstr "Passord - Penpot"
msgid "title.settings.profile"
msgstr "Profil - Penpot"
#: src/app/main/ui/dashboard/team.cljs:1636
#: src/app/main/ui/dashboard/team.cljs:1642
msgid "title.team-settings"
msgstr "Innstillinger - %s - Penpot"
@ -547,11 +499,11 @@ msgstr "Innstillinger - %s - Penpot"
msgid "title.workspace"
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"
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"
msgstr "Komponenter"
@ -559,20 +511,15 @@ msgstr "Komponenter"
msgid "workspace.assets.create-group"
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"
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"
msgstr "Rediger"
#: src/app/main/ui/workspace/sidebar/assets/graphics.cljs:386, src/app/main/ui/workspace/sidebar/assets.cljs:152
#, 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
#: 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
msgid "workspace.assets.group"
msgstr "Gruppe"
@ -580,15 +527,10 @@ msgstr "Gruppe"
msgid "workspace.assets.group-name"
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"
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
msgid "workspace.assets.typography.font-size"
msgstr "Størrelse"
@ -601,11 +543,6 @@ msgstr "Skriftstil"
msgid "workspace.header.menu.show-rules"
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
msgid "workspace.libraries.colors.file-library"
msgstr "Filbibliotek"
@ -614,15 +551,15 @@ msgstr "Filbibliotek"
msgid "workspace.libraries.colors.recent-colors"
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"
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"
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"
msgstr "Komponent"
@ -630,38 +567,18 @@ msgstr "Komponent"
msgid "workspace.options.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"
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
msgid "workspace.options.grid.params.height"
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
msgid "workspace.options.grid.params.set-default"
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
msgid "workspace.options.grid.params.use-default"
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"
"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"
msgstr "Já tem uma conta?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
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"
msgstr "Criar conta de demonstração"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "Quer só experimentar?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
msgstr ""
"Este é um serviço DEMONSTRAÇÃO, NÃO USE para trabalho real, os projetos "
"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"
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"
msgstr "Nome completo"
#: src/app/main/ui/auth/login.cljs:288
#: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title"
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"
msgstr "Faça login aqui."
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "Login"
#: src/app/main/ui/auth/login.cljs:291
#: src/app/main/ui/auth/login.cljs:297
msgid "auth.login-tagline"
msgstr ""
"Penpot é a ferramenta de design de código aberto e gratuita para "
"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"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
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"
msgstr "Senha alterada com sucesso"
@ -111,19 +89,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "Senha"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
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"
msgstr "Política de Privacidade"
@ -131,85 +109,56 @@ msgstr "Política de Privacidade"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "Esqueceu sua senha?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
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"
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"
msgstr "Criar uma conta"
#: src/app/main/ui/auth/register.cljs:124
#, 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
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "Criar uma conta"
#: src/app/main/ui/auth.cljs
#, 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
#: src/app/main/ui/auth/register.cljs:49
#, markdown
msgid "auth.terms-and-privacy-agreement"
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"
msgstr "Termos de serviço"
#, unused
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
#: 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.work-email"
msgstr "E-mail profissional"
#: src/app/main/ui/onboarding/questions.cljs
#, unused
msgid "branding-illustrations-marketing-pieces"
msgstr "...branding, ilustrações, materiais de marketing, etc."
#: src/app/main/ui/comments.cljs:549
#: src/app/main/ui/comments.cljs:577
msgid "comments.mentions.not-found"
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"
msgstr "Publicar"
@ -281,59 +230,29 @@ msgstr "Compartilhar protótipos"
msgid "common.share-link.view-all"
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"
msgstr "Despublicar"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
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"
msgstr ""
"O Penpot foi feito para equipes. Convide membros para trabalharem juntos em "
"projetos e arquivos"
#: src/app/main/ui/dashboard/projects.cljs:93
#: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title"
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
msgid "dashboard.add-file"
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"
msgstr "Adicionar como Biblioteca Compartilhada"
@ -341,10 +260,10 @@ msgstr "Adicionar como Biblioteca Compartilhada"
msgid "dashboard.change-email"
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"
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"
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"
"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"
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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "கடவுச்சொல்லை உறுதிப்படுத்தவும்"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "டெமோ கணக்கை உருவாக்கவும்"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs
#, unused
msgid "auth.create-demo-profile"
msgstr "அதை முயற்சி செய்ய வேண்டுமா?"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
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"
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"
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"
msgstr "இங்கே உள்நுழைக"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "உள்நுழை"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "கிட்லேப்"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "கூகுள்"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "ஓப்பன் ஐடி"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
msgstr "புதிய கடவுச்சொல்லை உள்ளிடவும்"
#: src/app/main/ui/auth/recovery.cljs:46
#: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully"
msgstr "கடவுச்சொல் வெற்றிகரமாக மாற்றப்பட்டது"
@ -96,19 +79,19 @@ msgstr ""
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "கடவுச்சொல்"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
msgstr "குறைந்தது 8 எழுத்துகள்"
#: src/app/main/ui/auth/register.cljs:277
#: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy"
msgstr "தனியுரிமைக் கொள்கை"
@ -116,45 +99,35 @@ msgstr "தனியுரிமைக் கொள்கை"
msgid "auth.recovery-request-submit"
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"
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"
msgstr "கடவுச்சொல்லை மறந்துவிட்டீர்களா?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
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"
msgstr "ஒரு கணக்கை உருவாக்கவும்"
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "ஒரு கணக்கை உருவாக்கவும்"
#: src/app/main/ui/auth.cljs
#, 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
#: 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"
msgstr "சேவை விதிமுறைகள்"
#: src/app/main/ui/auth/register.cljs:238
#, unused
msgid "auth.verification-email-sent"
msgstr "சரிபார்ப்பு மின்னஞ்சலை அனுப்பியுள்ளோம் இந்த முகவரிக்கு"
#: 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"
msgstr "வெளியிடுங்கள்"
@ -210,6 +183,6 @@ msgstr "இணைப்பு உள்ள எவருக்கும் அண
msgid "common.share-link.permissions-pages"
msgstr "பக்கங்கள் பகிரப்பட்டன"
#: src/app/main/ui/auth/recovery.cljs:41
#: src/app/main/ui/auth/recovery.cljs:47
msgid "errors.invalid-recovery-token"
msgstr "மீட்பு டோக்கன் செல்லுபடியாகாது."

View File

@ -11,84 +11,69 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\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"
msgstr "มีบัญชีแล้ว?"
#: src/app/main/ui/auth/recovery_request.cljs:113, src/app/main/ui/auth/register.cljs:237
#, 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
#: src/app/main/ui/auth/recovery.cljs:83
msgid "auth.confirm-password"
msgstr "ยืนยันรหัสผ่าน"
#: src/app/main/ui/auth/register.cljs:244
#: src/app/main/ui/auth/register.cljs:239
msgid "auth.create-demo-account"
msgstr "สร้างบัญชีสาธิตการใช้งาน"
#: src/app/main/ui/auth/login.cljs:40
#: src/app/main/ui/auth/login.cljs:41
msgid "auth.demo-warning"
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"
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"
msgstr "ชื่อเต็ม"
#: src/app/main/ui/auth/login.cljs:288
#: src/app/main/ui/auth/login.cljs:294
msgid "auth.login-account-title"
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"
msgstr "ลงชื่อเข้าใช้ที่นี่"
#: src/app/main/ui/auth/login.cljs:195
#, unused
msgid "auth.login-submit"
msgstr "ลงชื่อเข้าใช้"
#: src/app/main/ui/auth/login.cljs:291
#: src/app/main/ui/auth/login.cljs:297
msgid "auth.login-tagline"
msgstr "Penpot เป็นเครื่องมือออกแบบที่ฟรีและโอเพนซอร์สสำหรับการดีไซน์และโค้ดร่วมกัน"
#: src/app/main/ui/auth/login.cljs:248
#: src/app/main/ui/auth/login.cljs:254
msgid "auth.login-with-github-submit"
msgstr "GitHub"
#: src/app/main/ui/auth/login.cljs:254
#: src/app/main/ui/auth/login.cljs:260
msgid "auth.login-with-gitlab-submit"
msgstr "GitLab"
#: src/app/main/ui/auth/login.cljs:242
#: src/app/main/ui/auth/login.cljs:248
msgid "auth.login-with-google-submit"
msgstr "Google"
#: src/app/main/ui/auth/login.cljs:207
#: src/app/main/ui/auth/login.cljs:213
msgid "auth.login-with-ldap-submit"
msgstr "LDAP"
#: src/app/main/ui/auth/login.cljs:260
#: src/app/main/ui/auth/login.cljs:266
msgid "auth.login-with-oidc-submit"
msgstr "OpenID"
#: src/app/main/ui/auth/recovery.cljs:70
#: src/app/main/ui/auth/recovery.cljs:76
msgid "auth.new-password"
msgstr "พิมพ์รหัสผ่านใหม่"
#: src/app/main/ui/auth/recovery.cljs:46
#: src/app/main/ui/auth/recovery.cljs:52
msgid "auth.notifications.password-changed-successfully"
msgstr "เปลี่ยนรหัสผ่านแล้ว"
@ -100,19 +85,19 @@ msgstr "โปรไฟล์นี้ยังไม่ได้รับกา
msgid "auth.notifications.recovery-token-sent"
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"
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"
msgstr "รหัสผ่าน"
#: src/app/main/ui/auth/register.cljs:193
#: src/app/main/ui/auth/register.cljs:188
msgid "auth.password-length-hint"
msgstr "อย่างน้อย 8 ตัวอักษร"
#: src/app/main/ui/auth/register.cljs:277
#: src/app/main/ui/auth/register.cljs:272
msgid "auth.privacy-policy"
msgstr "นโยบายความเป็นส่วนตัว"
@ -120,66 +105,44 @@ msgstr "นโยบายความเป็นส่วนตัว"
msgid "auth.recovery-request-submit"
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"
msgstr "ลืมรหัสผ่าน?"
#: src/app/main/ui/auth/recovery.cljs:80
#: src/app/main/ui/auth/recovery.cljs:86
msgid "auth.recovery-submit"
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"
msgstr "ยังไม่มีบัญชี?"
#: src/app/main/ui/auth/register.cljs:368
#: src/app/main/ui/auth/register.cljs:357
msgid "auth.register-account-tagline"
msgstr "เราควรเรียกคุณในแดชบอร์ดและอีเมลว่าอะไรดี"
#: src/app/main/ui/auth/register.cljs:367
#: src/app/main/ui/auth/register.cljs:356
msgid "auth.register-account-title"
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"
msgstr "สร้างบัญชี"
#: src/app/main/ui/auth/register.cljs:124
#, unused
msgid "auth.register-tagline"
msgstr ""
"ด้วยบัญชี Penpot ฟรี "
"คุณสามารถสร้างทีมได้อย่างไม่จำกัดและทำงานร่วมกับดีไซเนอร์และนักพัฒนาคนอื่น "
"ๆ กี่โปรเจกต์ก็ได้ "
#: src/app/main/ui/auth/register.cljs:223
#: src/app/main/ui/auth/register.cljs:218
msgid "auth.register-title"
msgstr "สร้างบัญชี"
#: src/app/main/ui/auth.cljs
#, unused
msgid "auth.sidebar-tagline"
msgstr "โซลูชันโอเพนซอร์สสำหรับการออกแบบและโปรโตไทป์"
#: src/app/main/ui/auth/register.cljs:50
#: src/app/main/ui/auth/register.cljs:49
#, markdown
msgid "auth.terms-and-privacy-agreement"
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"
msgstr "เงื่อนไขการให้บริการ"
#, unused
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
#: 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.work-email"
msgstr "อีเมลทำงาน"
@ -248,34 +211,29 @@ msgstr "แชร์โปรโตไทป์"
msgid "common.share-link.view-all"
msgstr "เลือกทั้งหมด"
#: src/app/main/ui/dashboard/projects.cljs:96
#: src/app/main/ui/dashboard/projects.cljs:90
msgid "dasboard.team-hero.management"
msgstr "การจัดการทีม"
#: src/app/main/ui/dashboard/projects.cljs:95
#: src/app/main/ui/dashboard/projects.cljs:89
msgid "dasboard.team-hero.text"
msgstr ""
"Penpot เป็นเครื่องมือสำหรับการทำงานเป็นทีม "
"เชิญชวนสมาชิกมาทำงานด้วยกันผ่านโปรเจกต์และไฟล์ต่าง ๆ เลย"
#: src/app/main/ui/dashboard/projects.cljs:93
#: src/app/main/ui/dashboard/projects.cljs:87
msgid "dasboard.team-hero.title"
msgstr "รวบรวมทีมเลย!"
#: src/app/main/ui/dashboard/projects.cljs
#, unused
msgid "dasboard.tutorial-hero.info"
msgstr "เรียนรู้การใช้งาน Penpot เบื้องต้นด้วยการลงมือทำจริง"
#: src/app/main/ui/settings/profile.cljs:75
msgid "dashboard.change-email"
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"
msgstr "(คัดลอก)"
#: src/app/main/ui/dashboard/sidebar.cljs:477
#: src/app/main/ui/dashboard/organization_team_switch.cljs:280
msgid "dashboard.create-new-team"
msgstr "สร้างทีมใหม่"
@ -283,7 +241,7 @@ msgstr "สร้างทีมใหม่"
msgid "dashboard.default-team-name"
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"
msgstr "ลบทีม"
@ -291,24 +249,19 @@ msgstr "ลบทีม"
msgid "dashboard.download-binary-file"
msgstr "ดาวน์โหลดไฟล์ Penpot (.penpot)"
#: src/app/main/ui/dashboard/file_menu.cljs:321, src/app/main/ui/workspace/main_menu.cljs:712
#, 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
#: src/app/main/ui/dashboard/files.cljs:233, src/app/main/ui/dashboard/projects.cljs:309
msgid "dashboard.empty-placeholder-drafts-subtitle"
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"
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"
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"
msgstr "ยังไม่มีไฟล์"
@ -320,14 +273,6 @@ msgstr ""
"ลองแชร์ไฟล์ของคุณหรือเพิ่มจาก[ไลบรารีและเทมเพลต](https://penpot.app/"
"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
msgid "dashboard.empty-placeholder-libraries-subtitle-viewer-role"
msgstr "ไลบรารีที่เพิ่มลงในโปรเจกต์จะปรากฏที่นี่"
@ -336,7 +281,7 @@ msgstr "ไลบรารีที่เพิ่มลงในโปรเจ
msgid "dashboard.empty-placeholder-libraries-title"
msgstr "ยังไม่มีไลบรารี"
#: src/app/main/ui/dashboard/file_menu.cljs:281
#: src/app/main/ui/dashboard/file_menu.cljs:279
msgid "dashboard.export-binary-multi"
msgstr "ดาวน์โหลด %s ไฟล์ Penpot (.penpot)"
@ -348,10 +293,6 @@ msgstr "ส่งออกบอร์ดเป็น PDF"
msgid "dashboard.export-frames.title"
msgstr "ส่งออกเป็น PDF"
#, unused
msgid "dashboard.export-multi"
msgstr "ส่งออก %s ไฟล์ Penpot"
#: src/app/main/ui/workspace/main_menu.cljs:728
msgid "dashboard.export-shapes"
msgstr "ส่งออก"
@ -360,11 +301,6 @@ msgstr "ส่งออก"
msgid "dashboard.export-shapes.title"
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
msgid "dashboard.fonts.deleted-placeholder"
msgstr "ฟอนต์ที่หายไป"
@ -399,25 +335,20 @@ msgstr ""
msgid "dashboard.fonts.upload-all"
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"
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"
msgstr "ไม่สามารถนำเข้าไฟล์นี้ได้"
#: src/app/main/ui/dashboard/import.cljs:292
#, unused
msgid "dashboard.import.import-error"
msgstr "พบปัญหาในการนำเข้าไฟล์ ไฟล์นี้จึงไม่ถูกนำเข้า"
#: src/app/main/ui/dashboard/import.cljs:562
#: src/app/main/ui/dashboard/import.cljs:593
msgid "dashboard.import.import-message"
msgid_plural "dashboard.import.import-message"
msgstr[0] "นำเข้าสำเร็จแล้ว %s ไฟล์"
#: src/app/main/ui/dashboard/import.cljs:556
#: src/app/main/ui/dashboard/import.cljs:587
msgid "dashboard.import.import-warning"
msgstr "บางไฟล์มีวัตถุที่ไม่ถูกต้อง ซึ่งถูกนำออกให้แล้ว"
@ -445,7 +376,7 @@ msgstr "กำลังอัปโหลดข้อมูลไปยังเ
msgid "dashboard.import.progress.upload-media"
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"
msgstr "ออกจากทีม"
@ -453,7 +384,7 @@ msgstr "ออกจากทีม"
msgid "dashboard.libraries-and-templates"
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"
msgstr "พบปัญหาในการนำเข้าเทมเพลต เทมเพลตนี้จึงไม่ถูกนำเข้า"
@ -469,51 +400,51 @@ msgstr "กำลังโหลดไฟล์ของคุณ…"
msgid "dashboard.loading-fonts"
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"
msgstr "ย้ายไปยัง"
#: src/app/main/ui/dashboard/file_menu.cljs:277
#: src/app/main/ui/dashboard/file_menu.cljs:272
msgid "dashboard.move-to-multi"
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"
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"
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"
msgstr "สร้างไฟล์ใหม่"
#: src/app/main/ui/dashboard/projects.cljs:67
#: src/app/main/ui/dashboard/projects.cljs:59
msgid "dashboard.new-project"
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"
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"
msgstr "อัปเดตอีเมลสำเร็จแล้ว"
#: src/app/main/ui/settings/password.cljs:46
#: src/app/main/ui/settings/password.cljs:52
msgid "dashboard.notifications.password-saved"
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"
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"
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"
msgstr "เปลี่ยนรหัสผ่าน"
@ -533,7 +464,7 @@ msgstr "คุณเป็นเจ้าของในทีมนี้แล
msgid "dashboard.save-settings"
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"
msgstr "ค้นหา…"
@ -545,19 +476,19 @@ msgstr "เลือกภาษาของ UI"
msgid "dashboard.select-ui-theme"
msgstr "เลือกธีม"
#: src/app/main/ui/dashboard/projects.cljs:292
#: src/app/main/ui/dashboard/projects.cljs:288
msgid "dashboard.show-all-files"
msgstr "แสดงไฟล์ทั้งหมด"
#: src/app/main/ui/dashboard/team.cljs:1663
#: src/app/main/ui/dashboard/team.cljs:1669
msgid "dashboard.team-info"
msgstr "ข้อมูลของทีม"
#: src/app/main/ui/dashboard/team.cljs:1708
#: src/app/main/ui/dashboard/team.cljs:1714
msgid "dashboard.team-members"
msgstr "สมาชิกของทีม"
#: src/app/main/ui/dashboard/team.cljs:1723
#: src/app/main/ui/dashboard/team.cljs:1729
msgid "dashboard.team-projects"
msgstr "โปรเจกต์ของทีม"
@ -573,22 +504,18 @@ msgstr "ผลการค้นหา"
msgid "dashboard.update-settings"
msgstr "อัปเดตการตั้งค่า"
#: src/app/main/ui/dashboard/team.cljs:1389
#: src/app/main/ui/dashboard/team.cljs:1395
msgid "dashboard.webhooks.content-type"
msgstr "ประเภทเนื้อหา"
#: src/app/main/ui/dashboard/team.cljs:1421
#: src/app/main/ui/dashboard/team.cljs:1427
msgid "dashboard.webhooks.create"
msgstr "สร้าง Webhook"
#: src/app/main/ui/dashboard/team.cljs:1324
#: src/app/main/ui/dashboard/team.cljs:1330
msgid "dashboard.webhooks.create.success"
msgstr "สร้าง Webhook แล้ว"
#, unused
msgid "dashboard.webhooks.update.success"
msgstr "อัปเดต Webhook แล้ว"
#: src/app/main/ui/settings.cljs:36
msgid "dashboard.your-account-title"
msgstr "บัญชีของคุณ"
@ -605,19 +532,19 @@ msgstr "ชื่อของคุณ"
msgid "ds.confirm-allow"
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"
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"
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"
msgstr "โดเมนนี้ไม่ได้รับอนุญาต"
#, unused
#: ../common/src/app/common/schema.cljc:1068
msgid "errors.field-min-length"
msgstr "ต้องมีอย่างน้อย 1 ตัวอักษร"
@ -625,17 +552,15 @@ msgstr "ต้องมีอย่างน้อย 1 ตัวอักษร
msgid "errors.invalid-color"
msgstr "สีไม่ถูกต้อง"
#: src/app/main/ui/auth/register.cljs, src/app/main/ui/auth/login.cljs, src/app/main/ui/auth/recovery_request.cljs
#, unused
#: src/app/main/ui/auth/login.cljs:67, ../common/src/app/common/schema.cljc:497
msgid "errors.invalid-email"
msgstr "กรุณาใส่อีเมลที่ถูกต้อง"
#: src/app/main/ui/settings/password.cljs
#, unused
#: ../common/src/app/common/schema.cljc:1092
msgid "errors.password-too-short"
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"
msgstr "อีเมลหรือรหัสผ่านไม่ถูกต้อง"
@ -647,25 +572,10 @@ msgstr "รหัสผ่านเดิมไม่ถูกต้อง"
msgid "feedback.discourse-title"
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
msgid "inspect.attributes.shadow"
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
msgid "inspect.attributes.typography.font-size"
msgstr "ขนาดฟอนต์"
@ -686,11 +596,11 @@ msgstr "SVG"
msgid "labels.code"
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"
msgstr "ชุมชน"
#: src/app/main/ui/settings/password.cljs:103
#: src/app/main/ui/settings/password.cljs:109
msgid "labels.confirm-password"
msgstr "ยืนยันรหัสผ่าน"
@ -702,23 +612,19 @@ msgstr "คัดลอกลิงก์"
msgid "labels.create-team"
msgstr "สร้างทีมใหม่"
#, unused
msgid "labels.custom-fonts"
msgstr "ฟอนต์ที่กำหนดเอง"
#: src/app/main/ui/settings/sidebar.cljs:86
msgid "labels.dashboard"
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"
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"
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"
msgstr "ส่งออก"
@ -726,7 +632,7 @@ msgstr "ส่งออก"
msgid "labels.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"
msgstr "ฟอนต์"
@ -742,11 +648,11 @@ msgstr "ภาษา"
msgid "labels.libraries-and-templates"
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"
msgstr "กำลังโหลด…"
#: src/app/main/ui/dashboard/sidebar.cljs:1527
#: src/app/main/ui/dashboard/sidebar.cljs:750
msgid "labels.logout"
msgstr "ลงชื่อออก"
@ -754,23 +660,19 @@ msgstr "ลงชื่อออก"
msgid "labels.member"
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"
msgstr "สมาชิก"
#: src/app/main/ui/settings/password.cljs:96
#: src/app/main/ui/settings/password.cljs:102
msgid "labels.new-password"
msgstr "รหัสผ่านใหม่"
#: src/app/main/ui/settings/password.cljs:89
#: src/app/main/ui/settings/password.cljs:95
msgid "labels.old-password"
msgstr "รหัสผ่านเดิม"
#, unused
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
#: 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"
msgstr "เจ้าของ"
@ -782,6 +684,6 @@ msgstr "รหัสผ่าน"
msgid "labels.profile"
msgstr "โปรไฟล์"
#: src/app/main/ui/dashboard/sidebar.cljs:1132
#: src/app/main/ui/dashboard/sidebar.cljs:355
msgid "labels.projects"
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