0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-03-23 05:01:23 -05:00

Merge pull request #5581 from penpot/eva-fix-broken-token-context-menu

This commit is contained in:
Andrey Antukh 2025-01-15 16:18:05 +01:00 committed by GitHub
commit b81f4e913f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
34 changed files with 152 additions and 137 deletions

View file

@ -640,6 +640,13 @@
(let [path-split (split-path path)]
(merge-path-item (first path-split) name)))
(defn split-string-half
"Split string in two halfs"
[s]
(let [len (count s)
mid (quot len 2)]
[(subs s 0 mid)
(subs s mid)]))
(defn get-frame-objects
"Retrieves a new objects map only with the objects under frame-id (with frame-id)"

View file

@ -70,7 +70,7 @@ test.describe("Tokens: Tokens Tab", () => {
await expect(submitButton).toBeEnabled();
await submitButton.click();
await expect(tokensTabPanel.getByText("color.primary")).toBeEnabled();
await expect(tokensTabPanel.getByLabel("primary")).toBeEnabled();
// Create token referencing the previous one with keyboard
@ -87,7 +87,7 @@ test.describe("Tokens: Tokens Tab", () => {
await expect(submitButton).toBeEnabled();
await nameField.press("Enter");
const referenceToken = tokensTabPanel.getByText("color.secondary");
const referenceToken = tokensTabPanel.getByLabel("color.secondary");
await expect(referenceToken).toBeEnabled();
// Tokens tab panel should have two tokens with the color red / #ff0000
@ -105,6 +105,35 @@ test.describe("Tokens: Tokens Tab", () => {
}),
).toHaveAttribute("aria-checked", "true");
});
test("User creates grouped color token", async ({ page }) => {
const { workspacePage, tokensUpdateCreateModal, tokenThemesSetsSidebar } =
await setupFileWithTokens(page);
const tokensTabPanel = page.getByRole("tabpanel", { name: "tokens" });
await tokensTabPanel.getByTitle("Add token: Color").click();
// Create grouped color token with mouse
await expect(tokensUpdateCreateModal).toBeVisible();
const nameField = tokensUpdateCreateModal.getByLabel("Name");
const valueField = tokensUpdateCreateModal.getByLabel("Value");
await nameField.click();
await nameField.fill("color.dark.primary");
await valueField.click();
await valueField.fill("red");
const submitButton = tokensUpdateCreateModal.getByRole("button", {
name: "Save",
});
await expect(submitButton).toBeEnabled();
await submitButton.click();
await expect(tokensTabPanel.getByLabel("color.dark.primary")).toBeEnabled();
});
});
test.describe("Tokens: Sets Tab", () => {

View file

@ -198,7 +198,6 @@
(tr "shortcuts.toggle-lock")
(tr "shortcuts.toggle-lock-size")
(tr "shortcuts.toggle-rulers")
(tr "shortcuts.toggle-rules")
(tr "shortcuts.toggle-snap-guides")
(tr "shortcuts.toggle-snap-ruler-guide")
(tr "shortcuts.toggle-textpalette")

View file

@ -321,8 +321,9 @@
children]])]))
(mf/defc menu-tree
[{:keys [selected-shapes submenu-offset submenu-direction type] :as context-data}]
(let [entries (if (seq selected-shapes)
[{:keys [selected-shapes submenu-offset submenu-direction type errors] :as context-data}]
(let [entries (if (and (not (some? errors))
(seq selected-shapes))
(if (some? type)
(submenu-actions-selection-actions context-data)
(selection-actions context-data))
@ -343,7 +344,7 @@
:selected? selected?}])])))
(mf/defc token-context-menu-tree
[{:keys [width direction] :as mdata}]
[{:keys [width direction errors] :as mdata}]
(let [objects (mf/deref refs/workspace-page-objects)
selected (mf/deref refs/selected-shapes)
selected-shapes (into [] (keep (d/getf objects)) selected)
@ -354,6 +355,7 @@
[:& menu-tree {:submenu-offset width
:submenu-direction direction
:token token
:errors errors
:selected-token-set-path selected-token-set-path
:selected-shapes selected-shapes}]]))

View file

@ -83,6 +83,7 @@
(st/emit! (dt/show-token-context-menu
{:type :token
:position (dom/get-client-position event)
:errors (:errors token)
:token-name (:name token)}))))
on-toggle-open-click (mf/use-fn
@ -121,6 +122,7 @@
[:> icon-button* {:on-click on-popover-open-click
:variant "ghost"
:icon "add"
;; TODO: This needs translation
:aria-label (str "Add token: " title)}]]
(when open?
[:& cmm/asset-section-block {:role :content}

View file

@ -174,6 +174,7 @@
[err]
(let [[header-1 header-2 & errors] (str/split err "\n")]
(when (and
;; TODO: This needs translations
(= header-1 "Error: ")
(= header-2 "Reference Errors:"))
errors)))
@ -206,10 +207,11 @@
;; === Errors
(defn humanize-errors [{:keys [errors value] :as _token}]
(defn humanize-errors [{:keys [errors] :as token}]
(->> (map (fn [err]
(case err
:error.style-dictionary/missing-reference (str "Could not resolve reference token with the name: " value)
(case (:error/code err)
;; TODO: This needs translations
:error.style-dictionary/missing-reference (str "Could not resolve reference token with the name: " (:error/value err))
nil))
errors)
(str/join "\n")))

View file

@ -1,12 +1,14 @@
(ns app.main.ui.workspace.tokens.token-pill
(:require-macros [app.main.style :as stl])
(:require
[app.common.files.helpers :as cfh]
[app.common.types.tokens-lib :as ctob]
[app.main.ui.components.color-bullet :refer [color-bullet]]
[app.main.ui.ds.foundations.assets.icon :refer [icon*]]
[app.main.ui.ds.foundations.utilities.token.token-status :refer [token-status-icon*]]
[app.main.ui.workspace.tokens.style-dictionary :as sd]
[app.main.ui.workspace.tokens.token :as wtt]
[app.util.dom :as dom]
[app.util.i18n :refer [tr]]
[cuerdas.core :as str]
[rumext.v2 :as mf]))
@ -16,11 +18,18 @@
[{:keys [on-click token theme-token full-applied on-context-menu half-applied]}]
(let [{:keys [name value resolved-value errors]} token
errors? (or (nil? theme-token) (and (seq errors) (seq (:errors theme-token))))
color (when (seq (ctob/find-token-value-references value))
(wtt/resolved-value-hex theme-token))
contains-path? (str/includes? name ".")
splitted-name (cfh/split-string-half name)
color (or color (wtt/resolved-value-hex token))
on-click
(mf/use-callback
(mf/deps errors? on-click)
(fn [event]
(dom/stop-propagation event)
(when (and (not (seq errors)) on-click)
(on-click event))))
token-status-id (cond
half-applied
@ -35,25 +44,34 @@
:token-pill-invalid-applied (and full-applied errors?))
:type "button"
:title (cond
errors? (sd/humanize-errors token)
errors? (if (nil? theme-token)
(tr "workspace.token-set.not-active")
(sd/humanize-errors token))
:else (->> [(str "Token: " name)
(tr "workspace.token.original-value" value)
(tr "workspace.token.resolved-value" resolved-value)]
(str/join "\n")))
:on-click on-click
:on-context-menu on-context-menu
:disabled errors?}
:on-context-menu on-context-menu}
(cond
color
[:& color-bullet {:color color
:mini true}]
errors?
[:> icon*
{:icon-id "broken-link"
:class (stl/css :token-pill-icon)}]
color
[:& color-bullet {:color color
:mini true}]
:else
[:> token-status-icon*
{:icon-id token-status-id
:class (stl/css :token-pill-icon)}])
name]))
(if contains-path?
[:span {:class (stl/css :divided-name-wrapper)
:aria-label name}
[:span {:class (stl/css :first-name-wrapper)}
(first splitted-name)]
[:span {:class (stl/css :last-name-wrapper)}
(last splitted-name)]]
[:span {:class (stl/css :name-wrapper)
:aria-label name}
name])]))

View file

@ -53,6 +53,32 @@
--token-pill-accent: var(--color-background-tertiary);
}
}
.name-wrapper {
display: block;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.divided-name-wrapper {
height: $s-16;
}
.first-name-wrapper {
display: inline-block;
max-width: 50%;
overflow: hidden;
white-space: pre;
text-overflow: ellipsis;
}
.last-name-wrapper {
display: inline-block;
max-width: 50%;
overflow: hidden;
white-space: pre;
direction: rtl;
}
.token-pill-applied {
--token-pill-background: var(--color-token-background);
@ -84,8 +110,7 @@
}
}
.token-pill-invalid,
.token-pill-invalid-applied {
.token-pill-invalid {
--token-pill-background: var(--color-background-tertiary);
--token-pill-foreground: var(--color-foreground-error);
--token-pill-border: var(--color-background-tertiary);
@ -101,6 +126,15 @@
}
}
.token-pill-invalid-applied {
--token-pill-border: var(--color-foreground-error);
&:hover,
&:focus-visible,
&:disabled {
--token-pill-border: var(--color-foreground-error);
}
}
.token-pill-icon {
color: var(--token-pill-accent);
}

View file

@ -287,7 +287,7 @@ msgstr "Genereer nuwe token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Toegangstoken is suksesvol geskep."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -295,7 +295,7 @@ msgstr "قم بإنشاء رمز جديد"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "تم إنشاء رمز الوصول بنجاح."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -329,7 +329,7 @@ msgstr "Generovat nový token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Přístupový token byl úspěšně vytvořen."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -336,7 +336,7 @@ msgstr "Neues Token generieren"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Der Zugangstoken wurde erfolgreich erstellt."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -324,14 +324,8 @@ msgid "dashboard.access-tokens.create"
msgstr "Generate new token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgstr "Access token created successfully."
#: src/app/main/ui/settings/access_tokens.cljs:65
#, fuzzy
msgid "dashboard.access-tokens.create.success"
msgstr ""
msgstr "Access token created successfully."
#: src/app/main/ui/settings/access_tokens.cljs:289
msgid "dashboard.access-tokens.empty.add-one"
@ -1153,9 +1147,8 @@ msgid "errors.member-is-muted"
msgstr "The profile you inviting has emails muted (spam reports or high bounces)."
#: src/app/main/errors.cljs:228
#, fuzzy
msgid "errors.migration-in-progress"
msgstr ""
msgstr "Migration in progress"
#: src/app/main/ui/settings/password.cljs
#, unused
@ -1252,11 +1245,6 @@ msgstr "Email or password is incorrect."
msgid "errors.wrong-old-password"
msgstr "Old password is incorrect"
#: src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:85
#, fuzzy
msgid "exclude"
msgstr ""
#: src/app/main/ui/settings/feedback.cljs:74
msgid "feedback.description"
msgstr "Description"
@ -1557,11 +1545,6 @@ msgstr "Text"
msgid "inspect.tabs.info"
msgstr "Info"
#: src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:80
#, fuzzy
msgid "intersection"
msgstr ""
#: src/app/main/ui/workspace/main_menu.cljs:163
msgid "label.shortcuts"
msgstr "Shortcuts"
@ -2315,11 +2298,6 @@ msgstr "Create token"
msgid "modals.create-access-token.title"
msgstr "Generate access token"
#: src/app/main/ui/settings/access_tokens.cljs:152
#, fuzzy
msgid "modals.create-access-token.token"
msgstr ""
#: src/app/main/ui/dashboard/team.cljs:911
msgid "modals.create-webhook.submit-label"
msgstr "Create webhook"
@ -3827,11 +3805,6 @@ msgstr "Lock proportions"
msgid "shortcuts.toggle-rulers"
msgstr "Show / Hide rulers"
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:201
#, fuzzy
msgid "shortcuts.toggle-rules"
msgstr ""
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:202
msgid "shortcuts.toggle-snap-guides"
msgstr "Snap to guides"
@ -6308,21 +6281,6 @@ msgstr "Edit themes"
msgid "workspace.token.edit-token"
msgstr "Edit token"
#: src/app/main/ui/workspace/tokens/form.cljs:408
#, fuzzy
msgid "workspace.token.enter-token-description"
msgstr ""
#: src/app/main/ui/workspace/tokens/form.cljs:370
#, fuzzy
msgid "workspace.token.enter-token-name"
msgstr ""
#: src/app/main/ui/workspace/tokens/form.cljs:390
#, fuzzy
msgid "workspace.token.enter-token-value"
msgstr ""
#: src/app/main/ui/workspace/tokens/sets.cljs:186
#, unused
msgid "workspace.token.grouping-set-alert"
@ -6380,11 +6338,6 @@ msgstr "Select set."
msgid "workspace.token.set-selection-theme"
msgstr "Define what token sets should be used as part of this theme option:"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs:119
#, fuzzy
msgid "workspace.token.theme"
msgstr ""
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
#, unused
msgid "workspace.token.theme-name"
@ -6394,20 +6347,9 @@ msgstr "Theme %s"
msgid "workspace.token.themes"
msgstr "Themes"
#: src/app/main/ui/workspace/tokens/form.cljs:409
#, fuzzy
msgid "workspace.token.token-description"
msgstr ""
#: src/app/main/ui/workspace/tokens/form.cljs:373
#, fuzzy
msgid "workspace.token.token-name"
msgstr ""
#: src/app/main/ui/workspace/tokens/form.cljs:391
#, fuzzy
msgid "workspace.token.token-value"
msgstr ""
#: src/app/main/ui/workspace/tokens/token_pill.cljs:47
msgid "workspace.token-set.not-active"
msgstr "Token set is not active"
#: src/app/main/ui/workspace/sidebar.cljs:117, src/app/main/ui/workspace/sidebar.cljs:126
msgid "workspace.toolbar.assets"

View file

@ -332,7 +332,7 @@ msgstr "Generar nuevo token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Access token creado con éxito."
#: src/app/main/ui/settings/access_tokens.cljs:289
@ -1163,6 +1163,10 @@ msgstr ""
"El perfil que esta invitando tiene los emails silenciados (por reportes de "
"spam o alto indice de rebote)."
#: src/app/main/errors.cljs:228
msgid "errors.migration-in-progress"
msgstr "Migración en proceso"
#: src/app/main/ui/settings/password.cljs
#, unused
msgid "errors.password-invalid-confirmation"
@ -6757,6 +6761,10 @@ msgstr "Nuevo tema"
msgid "workspace.token.themes"
msgstr "Temas"
#: src/app/main/ui/workspace/tokens/token_pill.cljs:47
msgid "workspace.token-set.not-active"
msgstr "El set de tokens no está aplicado"
#: src/app/main/ui/workspace/tokens/modals/themes.cljs
msgid "workspace.token.theme-name"
msgstr "Tema %s"

View file

@ -294,7 +294,7 @@ msgstr "Generar nuevo token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Token de acceso creado correctamente."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -332,7 +332,7 @@ msgstr "Générer un nouveau jeton"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Jeton d'accès créé avec succès."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -270,7 +270,7 @@ msgstr "samo sabuwar lambar tsaro"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "ka sami lambar tsaron da aka yi."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -318,7 +318,7 @@ msgstr "יצירת אסימון חדש"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "אסימון הגישה נוצר בהצלחה."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -331,12 +331,8 @@ msgstr "Buat token baru"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgstr "Token akses berhasil dibuat."
#: src/app/main/ui/settings/access_tokens.cljs:65
msgid "dashboard.access-tokens.create.success"
msgstr " "
msgstr "Token akses berhasil dibuat."
#: src/app/main/ui/settings/access_tokens.cljs:289
msgid "dashboard.access-tokens.empty.add-one"
@ -1051,10 +1047,6 @@ msgstr ""
"Profil yang Anda undang membisukan surel (laporan spam atau lompatan "
"tinggi)."
#: src/app/main/errors.cljs:228
msgid "errors.migration-in-progress"
msgstr " "
#: src/app/main/ui/settings/password.cljs
#, unused
msgid "errors.password-invalid-confirmation"
@ -1154,10 +1146,6 @@ msgstr "Surel atau kata sandi tidak benar."
msgid "errors.wrong-old-password"
msgstr "Kata sandi lama tidak benar"
#: src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:85
msgid "exclude"
msgstr " "
#: src/app/main/ui/settings/feedback.cljs:74
msgid "feedback.description"
msgstr "Deskripsi"
@ -1461,10 +1449,6 @@ msgstr "Teks"
msgid "inspect.tabs.info"
msgstr "Info"
#: src/app/main/ui/workspace/sidebar/options/menus/bool.cljs:80
msgid "intersection"
msgstr " "
#: src/app/main/ui/workspace/main_menu.cljs:162
msgid "label.shortcuts"
msgstr "Pintasan"
@ -2151,10 +2135,6 @@ msgstr "Buat token"
msgid "modals.create-access-token.title"
msgstr "Buat token baru"
#: src/app/main/ui/settings/access_tokens.cljs:152
msgid "modals.create-access-token.token"
msgstr " "
#: src/app/main/ui/dashboard/team.cljs:911
msgid "modals.create-webhook.submit-label"
msgstr "Buat kaitan web"
@ -3640,10 +3620,6 @@ msgstr "Kunci proporsi"
msgid "shortcuts.toggle-rulers"
msgstr "Tampilkan / Sembunyikan penggaris"
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:199
msgid "shortcuts.toggle-rules"
msgstr " "
#: src/app/main/ui/workspace/sidebar/shortcuts.cljs:200
msgid "shortcuts.toggle-snap-guides"
msgstr "Pasang ke panduan"
@ -6107,10 +6083,6 @@ msgstr "Klik untuk menutup jalur"
msgid "dashboard.empty-placeholder-drafts-title"
msgstr "Belum ada draf."
#: src/app/main/ui/workspace/tokens/modals/themes.cljs:119
msgid "workspace.token.theme"
msgstr " "
#: src/app/main/ui/dashboard/fonts.cljs:445
msgid "dashboard.fonts.empty-placeholder-viewer-sub"
msgstr ""

View file

@ -256,7 +256,7 @@ msgstr "Mepụta ọdịmara ọhụrụ"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Mmepụtara ọdịmara nnweta gara nke ọma ."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -5122,7 +5122,7 @@ msgstr "Elimina"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Token di accesso creato con successo."
#: src/app/main/ui/settings/access_tokens.cljs:143

View file

@ -303,7 +303,7 @@ msgstr "새로운 토큰 생성하기"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "엑세스 토큰이 성공적으로 생성되었습니다."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -330,7 +330,7 @@ msgstr "Izveidot jaunu pilnvaru"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Piekļuves pilnvara ir veiksmīgi izveidota."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -277,7 +277,7 @@ msgstr "Jana token baru"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Token capaian berjaya dihasilkan."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -329,7 +329,7 @@ msgstr "Nieuw toegangsbewijs aanmaken"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Toegangsbewijs is succesvol aangemaakt."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -328,7 +328,7 @@ msgstr "Gerar novo token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Token de acesso criado com sucesso."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -314,7 +314,7 @@ msgstr "Generați jeton nou"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Jeton de acces creat cu succes."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -329,7 +329,7 @@ msgstr "Skapa ny token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Accesstoken skapad."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -757,7 +757,7 @@ msgstr "สร้างโทเคนใหม่"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "สร้างโทเคนสำหรับการเข้าถึงสำเร็จแล้ว"
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -330,7 +330,7 @@ msgstr "Yeni belirteç oluştur"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Erişim belirteci başarıyla oluşturuldu."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -334,7 +334,7 @@ msgstr "Згенерувати новий токен"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "Токен доступу успішно створено."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -268,7 +268,7 @@ msgstr "ṣe ìpilẹ̀sẹ̀ àmì tókìnnì"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "ṣe àyẹ̀wò àmì tókìnnì tí o ṣẹ̀dá bó ṣeyẹ."
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -300,7 +300,7 @@ msgstr "生成新令牌"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "成功创建访问令牌。"
#: src/app/main/ui/settings/access_tokens.cljs:289

View file

@ -283,7 +283,7 @@ msgstr "產生新的 Token"
#: src/app/main/ui/settings/access-tokens.cljs
#, unused
msgid "dashboard.access-tokens.create-success"
msgid "dashboard.access-tokens.create.success"
msgstr "已成功建立 Access Token。"
#: src/app/main/ui/settings/access_tokens.cljs:289