From 9046e083eec0bbac966d913802ca41a6467971f5 Mon Sep 17 00:00:00 2001 From: "mr. m" Date: Wed, 24 Sep 2025 13:08:35 +0200 Subject: [PATCH 1/4] feat: Improved folder icon animations and dragging sensitivity, b=no-bug, c=folders, tabs --- package.json | 4 +- src/zen/folders/ZenFolder.mjs | 39 +++----------- src/zen/folders/ZenFolders.mjs | 80 ++++------------------------ src/zen/folders/zen-folders.css | 37 ++++++++++++- src/zen/tabs/ZenPinnedTabManager.mjs | 16 ++++-- 5 files changed, 66 insertions(+), 110 deletions(-) diff --git a/package.json b/package.json index 196127130..d0fc05677 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,9 @@ "update-ff:raw": "surfer update", "update-ff:rc": "python3 scripts/update_ff.py --rc", "update-ff:l10n": "python3 scripts/update_ff.py --just-l10n", - "pretty": "prettier . --write && autopep8 -r --in-place scripts/ src/", + "pretty": "prettier . --write --cache && autopep8 -r --in-place scripts/ src/", "lint": "npx eslint src/ && prettier . --check && autopep8 --diff scripts/ src/", - "lint:fix": "npx eslint src/ --fix && npm run pretty", + "lint:fix": "npm run pretty && npx eslint src/ --fix", "prepare": "husky", "reset-ff": "surfer reset", "surfer": "surfer", diff --git a/src/zen/folders/ZenFolder.mjs b/src/zen/folders/ZenFolder.mjs index ac75e310d..8613a1cae 100644 --- a/src/zen/folders/ZenFolder.mjs +++ b/src/zen/folders/ZenFolder.mjs @@ -33,41 +33,21 @@ - - - - + - - - - + - - - - + - - - - + - + - - - - - - - - - + @@ -89,13 +69,6 @@ this.#initialized = true; this._activeTabs = []; this.icon.appendChild(ZenFolder.rawIcon.cloneNode(true)); - // Save original values for animations - this.icon.querySelectorAll('animate, animateTransform, animateMotion').forEach((anim) => { - const vals = anim.getAttribute('values'); - if (vals) { - anim.dataset.origValues = vals; - } - }); this.labelElement.parentElement.setAttribute('context', 'zenFolderActions'); diff --git a/src/zen/folders/ZenFolders.mjs b/src/zen/folders/ZenFolders.mjs index c93084e46..ba57639df 100644 --- a/src/zen/folders/ZenFolders.mjs +++ b/src/zen/folders/ZenFolders.mjs @@ -40,7 +40,6 @@ #lastFolderContextMenu = null; #foldersEnabled = false; - #folderAnimCache = new Map(); #animationCount = 0; @@ -304,7 +303,7 @@ folder.removeAttribute('has-active'); } this.collapseVisibleTab(folder, true); - this.updateFolderIcon(folder, 'close', false); + this.updateFolderIcon(folder, 'close'); } } } @@ -721,7 +720,7 @@ async #convertFolderToSpace(folder) { const currentWorkspace = gZenWorkspaces.getActiveWorkspaceFromCache(); let selectedTab = folder.tabs.find((tab) => tab.selected); - const icon = folder.icon?.querySelector('svg #folder-icon image'); + const icon = folder.icon?.querySelector('svg .icon image'); const newSpace = await gZenWorkspaces.createAndSaveWorkspace( folder.label, @@ -855,7 +854,7 @@ gBrowser.TabStateFlusher.flush(tab.linkedBrowser); }); - this.updateFolderIcon(folder, 'auto', false); + this.updateFolderIcon(folder, 'auto'); if (options.renameFolder) { folder.rename(); @@ -1116,71 +1115,14 @@ } } - updateFolderIcon(group, state = 'auto', play = true) { + updateFolderIcon(group, state = 'auto') { const svg = group.querySelector('svg'); if (!svg) return []; - let animations = this.#folderAnimCache.get(group); - if (!animations) { - animations = svg.querySelectorAll('animate, animateTransform, animateMotion'); - this.#folderAnimCache.set(group, animations); - } const isCollapsed = group.collapsed; svg.setAttribute('state', state === 'auto' ? (isCollapsed ? 'close' : 'open') : state); const hasActive = group.hasAttribute('has-active'); - - const OPACITY = { - 'folder-dots': { active: '0;1', baseOrig: '0;0' }, - 'folder-icon': { active: '1;0', baseOrig: '1;1' }, - }; - - animations.forEach((animation) => { - const parentId = animation.parentElement.id; - const isOpacity = animation.getAttribute('attributeName') === 'opacity'; - - if (!animation.dataset.origValues) { - animation.dataset.origValues = animation.getAttribute('values'); - } - - const origValues = animation.dataset.origValues; - const [fromValue, toValue] = origValues.split(';'); - - const isActiveState = isCollapsed && hasActive && isOpacity; - - if (!play && !isActiveState) { - if (isOpacity && OPACITY[parentId]) { - const staticValue = OPACITY[parentId].baseOrig; - animation.dataset.origValues = staticValue; - animation.setAttribute('values', staticValue); - animation.beginElement(); - } - return; - } - - if (isOpacity && OPACITY[parentId]) { - animation.dataset.origValues = OPACITY[parentId].baseOrig; - } - - let newValues; - - if (isActiveState && OPACITY[parentId]) { - newValues = OPACITY[parentId].active; - const [activeFrom, activeTo] = newValues.split(';'); - animation.dataset.origValues = `${activeTo};${activeFrom}`; - } else { - const stateValues = { - open: `${fromValue};${toValue}`, - close: `${toValue};${fromValue}`, - auto: isCollapsed ? `${toValue};${fromValue}` : `${fromValue};${toValue}`, - }; - newValues = stateValues[state] || stateValues.auto; - } - - if (animation.getAttribute('values') !== newValues) { - animation.setAttribute('values', newValues); - animation.beginElement(); - } - }); + svg.setAttribute('active', hasActive && isCollapsed ? 'true' : 'false'); return []; } @@ -1256,7 +1198,7 @@ } setFolderUserIcon(group, icon) { - const svgIcon = group.icon.querySelector('svg #folder-icon image'); + const svgIcon = group.icon.querySelector('svg .icon image'); if (!svgIcon) return; svgIcon.setAttribute('href', icon ?? ''); if (svgIcon.getAttribute('href') !== icon) { @@ -1305,7 +1247,7 @@ if (group.activeTabs.length === 0) { group.removeAttribute('has-active'); - this.updateFolderIcon(group, 'close', false); + this.updateFolderIcon(group, 'close'); } return this.on_TabGroupCollapse({ @@ -1332,7 +1274,7 @@ if (group.activeTabs.length === 0) { group.removeAttribute('has-active'); - this.updateFolderIcon(group, 'close', false); + this.updateFolderIcon(group, 'close'); } this.on_TabGroupExpand({ target: group, forExpandVisible: true }); @@ -1408,7 +1350,7 @@ if (tabsContainer.hasAttribute('hidden')) tabsContainer.removeAttribute('hidden'); - animations.push(...this.updateFolderIcon(current, 'close', false)); + animations.push(...this.updateFolderIcon(current, 'close')); animations.push( gZenUIManager.motion.animate( groupStart, @@ -1518,7 +1460,7 @@ #groupInit(group, stateData) { // Setup zen-folder icon to the correct position - this.updateFolderIcon(group, 'auto', false); + this.updateFolderIcon(group, 'auto'); if (stateData?.userIcon) { this.setFolderUserIcon(group, stateData.userIcon); } @@ -1575,7 +1517,7 @@ let prevSiblingInfo = null; const prevSibling = folder.previousElementSibling; - const userIcon = folder?.icon?.querySelector('svg #folder-icon image'); + const userIcon = folder?.icon?.querySelector('svg .icon image'); if (prevSibling) { if (gBrowser.isTabGroup(prevSibling)) { diff --git a/src/zen/folders/zen-folders.css b/src/zen/folders/zen-folders.css index 3d45c8f9f..eb44dc756 100644 --- a/src/zen/folders/zen-folders.css +++ b/src/zen/folders/zen-folders.css @@ -6,7 +6,6 @@ tab-group[split-view-group] { display: block; - min-width: 100%; @media (prefers-reduced-motion: no-preference) { transition: var(--zen-tabbox-element-indent-transition); @@ -151,6 +150,10 @@ tab-group[split-view-group] { tab-group .tab-group-container { flex-direction: column; } + + tab-group[split-view-group] { + min-width: 100%; + } } tab-group[split-view-group] .tabbrowser-tab { @@ -295,6 +298,38 @@ zen-folder { fill: var(--zen-folder-stroke); transform: translate(4px, 6.5px); } + + & g, + & rect, + & path { + transition: + transform 0.3s cubic-bezier(0.42, 0, 0, 1), + opacity 0.3s cubic-bezier(0.42, 0, 0, 1); + } + + &[state='open'] .back { + transform: skewX(16deg) translate(-2px, 3.4px) scale(0.85); + } + + &[state='open'] :is(.front, .dots, .icon) { + transform: skewX(-16deg) translate(11.1px, 3.4px) scale(0.85); + } + + & .icon { + opacity: 1; + } + + & .dots { + opacity: 0; + } + + &[active='true'] .icon { + opacity: 0; + } + + &[active='true'] .dots { + opacity: 1; + } } } diff --git a/src/zen/tabs/ZenPinnedTabManager.mjs b/src/zen/tabs/ZenPinnedTabManager.mjs index 52ef1456c..6478041bf 100644 --- a/src/zen/tabs/ZenPinnedTabManager.mjs +++ b/src/zen/tabs/ZenPinnedTabManager.mjs @@ -1246,6 +1246,7 @@ for (const item of this.dragShiftableItems) { item.style.transform = ''; } + delete this._topToNormalTabs; for (const item of gBrowser.tabContainer.ariaFocusableItems) { if (gBrowser.isTab(item)) { let isVisible = true; @@ -1280,7 +1281,7 @@ : [separator]; } - animateSeparatorMove(movingTabs, dropElement, isPinned, event) { + animateSeparatorMove(movingTabs, dropElement, isPinned) { let draggedTab = movingTabs[0]; if (gBrowser.isTabGroupLabel(draggedTab) && draggedTab.group.isZenFolder) { this._isGoingToPinnedTabs = true; @@ -1290,14 +1291,19 @@ draggedTab = draggedTab.group; } const itemsToCheck = this.dragShiftableItems; - const translate = event.screenY; + let translate = movingTabs[isPinned ? movingTabs.length - 1 : 0].getBoundingClientRect().top; + if (isPinned) { + const rect = draggedTab.getBoundingClientRect(); + translate += rect.height; + } const draggingTabHeight = movingTabs.reduce((acc, item) => { return acc + window.windowUtils.getBoundsWithoutFlushing(item).height; }, 0); - let topToNormalTabs = itemsToCheck[0].screenY; - if (!isPinned) { - topToNormalTabs += draggedTab.getBoundingClientRect().height; + if (typeof this._topToNormalTabs === 'undefined') { + const rects = itemsToCheck.map((item) => window.windowUtils.getBoundsWithoutFlushing(item)); + this._topToNormalTabs = rects[0].top + rects.at(-1).height / (isPinned ? 2 : 4); } + let topToNormalTabs = this._topToNormalTabs; const isGoingToPinnedTabs = translate < topToNormalTabs && gBrowser.pinnedTabCount - gBrowser._numZenEssentials > 0; const multiplier = isGoingToPinnedTabs !== isPinned ? (isGoingToPinnedTabs ? 1 : -1) : 0; From fbf30a3423176b4cae9b8ae885627af2fade41ad Mon Sep 17 00:00:00 2001 From: Angelo Verlain <37999241+vixalien@users.noreply.github.com> Date: Wed, 24 Sep 2025 13:28:13 +0200 Subject: [PATCH 2/4] chore: remove notification talk name, p=#10510, b=closes https://github.com/flathub/app.zen_browser.zen/issues/106 > org.mozilla.firefox.BaseApp has libnotify which uses the portal for notifications. Direct access to org.freedesktop.Notifications should not be needed anymore. See https://github.com/flathub/app.zen_browser.zen/issues/106 Signed-off-by: Angelo Verlain <37999241+vixalien@users.noreply.github.com> --- build/flatpak/app.zen_browser.zen.yml.template | 1 - 1 file changed, 1 deletion(-) diff --git a/build/flatpak/app.zen_browser.zen.yml.template b/build/flatpak/app.zen_browser.zen.yml.template index aac463a05..d18329c46 100644 --- a/build/flatpak/app.zen_browser.zen.yml.template +++ b/build/flatpak/app.zen_browser.zen.yml.template @@ -32,7 +32,6 @@ finish-args: - --system-talk-name=org.freedesktop.NetworkManager - --talk-name=org.a11y.Bus - --talk-name=org.gtk.vfs.* - - --talk-name=org.freedesktop.Notifications - --own-name=org.mpris.MediaPlayer2.firefox.* - --own-name=org.mozilla.zen.* cleanup: From 92779e0549ec3e6e6c5707befd106c2ce4868e9d Mon Sep 17 00:00:00 2001 From: Angelo Verlain <37999241+vixalien@users.noreply.github.com> Date: Wed, 24 Sep 2025 13:29:56 +0200 Subject: [PATCH 3/4] chore: update flatpak runtime to 25.08, p=#10511 Signed-off-by: Angelo Verlain <37999241+vixalien@users.noreply.github.com> --- build/flatpak/app.zen_browser.zen.yml.template | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/flatpak/app.zen_browser.zen.yml.template b/build/flatpak/app.zen_browser.zen.yml.template index d18329c46..3e55153ae 100644 --- a/build/flatpak/app.zen_browser.zen.yml.template +++ b/build/flatpak/app.zen_browser.zen.yml.template @@ -1,13 +1,13 @@ app-id: app.zen_browser.zen runtime: org.freedesktop.Platform -runtime-version: '24.08' +runtime-version: '25.08' sdk: org.freedesktop.Sdk base: org.mozilla.firefox.BaseApp -base-version: '24.08' +base-version: '25.08' add-extensions: org.freedesktop.Platform.ffmpeg-full: directory: lib/ffmpeg - version: '24.08' + version: '25.08' add-ld-path: . app.zen_browser.zen.systemconfig: directory: etc/zen From b368fd967b3f3edf688009793a255497c67f92bf Mon Sep 17 00:00:00 2001 From: "mr. m" <91018726+mr-cheffy@users.noreply.github.com> Date: Wed, 24 Sep 2025 13:30:32 +0200 Subject: [PATCH 4/4] chore: New Crowdin updates, p=#10453 * New translations zen-preferences.ftl (Ukrainian) * New translations zen-preferences.ftl (Portuguese, Brazilian) * New translations zen-preferences.ftl (Indonesian) * New translations zen-workspaces.ftl (Ukrainian) * New translations zen-workspaces.ftl (Portuguese, Brazilian) * New translations zen-preferences.ftl (Portuguese) * New translations zen-preferences.ftl (German) * New translations zen-workspaces.ftl (German) --- .../de/browser/browser/preferences/zen-preferences.ftl | 4 ++-- locales/de/browser/browser/zen-workspaces.ftl | 2 +- .../id/browser/browser/preferences/zen-preferences.ftl | 2 +- .../pt-BR/browser/browser/preferences/zen-preferences.ftl | 8 ++++---- locales/pt-BR/browser/browser/zen-workspaces.ftl | 2 +- .../pt-PT/browser/browser/preferences/zen-preferences.ftl | 2 +- .../uk/browser/browser/preferences/zen-preferences.ftl | 8 ++++---- locales/uk/browser/browser/zen-workspaces.ftl | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/locales/de/browser/browser/preferences/zen-preferences.ftl b/locales/de/browser/browser/preferences/zen-preferences.ftl index 03cfcfd70..cc8ded518 100644 --- a/locales/de/browser/browser/preferences/zen-preferences.ftl +++ b/locales/de/browser/browser/preferences/zen-preferences.ftl @@ -43,7 +43,7 @@ pane-settings-workspaces-title = Arbeitsbereiche zen-tabs-unloader-enabled = .label = Tab-Entlader aktivieren zen-look-and-feel-compact-toolbar-themed = - .label = Use themed background for compact toolbar + .label = Theme Hintergrund für kompakte Symbolleiste verwenden zen-workspace-continue-where-left-off = .label = Dort fortfahren, wo Sie aufgehört haben pane-zen-pinned-tab-manager-title = Angepinnte Tabs @@ -274,7 +274,7 @@ zen-split-view-shortcut-grid = Geteilte Ansicht Raster umschalten zen-split-view-shortcut-vertical = Geteilte Ansicht vertikal umschalten zen-split-view-shortcut-horizontal = Geteilte Ansicht horizontal umschalten zen-split-view-shortcut-unsplit = Geteilte Ansicht schließen -zen-new-empty-split-view-shortcut = New Empty Split View +zen-new-empty-split-view-shortcut = Neuer leerer Split View zen-key-select-tab-1 = Tab #1 auswählen zen-key-select-tab-2 = Tab #2 auswählen zen-key-select-tab-3 = Tab #3 auswählen diff --git a/locales/de/browser/browser/zen-workspaces.ftl b/locales/de/browser/browser/zen-workspaces.ftl index 3c0201af9..7d142e8de 100644 --- a/locales/de/browser/browser/zen-workspaces.ftl +++ b/locales/de/browser/browser/zen-workspaces.ftl @@ -4,7 +4,7 @@ zen-panel-ui-workspaces-create = zen-panel-ui-folder-create = .label = Ordner erstellen zen-panel-ui-new-empty-split = - .label = New Split + .label = Split View erstellen zen-workspaces-panel-context-delete = .label = Arbeitsbereich löschen .accesskey = D diff --git a/locales/id/browser/browser/preferences/zen-preferences.ftl b/locales/id/browser/browser/preferences/zen-preferences.ftl index 567dc9e5f..fa3f07447 100644 --- a/locales/id/browser/browser/preferences/zen-preferences.ftl +++ b/locales/id/browser/browser/preferences/zen-preferences.ftl @@ -43,7 +43,7 @@ pane-settings-workspaces-title = Ruang Kerja zen-tabs-unloader-enabled = .label = Aktifkan Pelepas Tab zen-look-and-feel-compact-toolbar-themed = - .label = Use themed background for compact toolbar + .label = Gunakan latar belakang bertema untuk bilah atas dalam mode ringkas zen-workspace-continue-where-left-off = .label = Lanjutkan dari halaman terakhir yang dibuka pane-zen-pinned-tab-manager-title = Tab yang Disematkan diff --git a/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl b/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl index 9a6c6abfb..10fca566b 100644 --- a/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pt-BR/browser/browser/preferences/zen-preferences.ftl @@ -43,7 +43,7 @@ pane-settings-workspaces-title = Áreas de Trabalho zen-tabs-unloader-enabled = .label = Ativar Descarregador de Guias zen-look-and-feel-compact-toolbar-themed = - .label = Use themed background for compact toolbar + .label = Usar fundo temático na barra de ferramentas compacta zen-workspace-continue-where-left-off = .label = Continue de onde você parou pane-zen-pinned-tab-manager-title = Guias Fixadas @@ -221,7 +221,7 @@ zen-key-exit-full-screen = Sair de Tela Cheia zen-ai-chatbot-sidebar-shortcut = Alternar barra lateral de AI Chatbot zen-key-inspector-mac = Ativar/Desativar Inspetor zen-toggle-sidebar-shortcut = Alternar barra lateral Firefox -zen-toggle-pin-tab-shortcut = Toggle Pin Tab +zen-toggle-pin-tab-shortcut = Alternar fixação da aba zen-reader-mode-toggle-shortcut-other = Ativar/desativar modo leitor zen-picture-in-picture-toggle-shortcut = Alternar Picture-in-Picture zen-nav-reload-shortcut-2 = Recarregar Página @@ -255,7 +255,7 @@ zen-close-tab-shortcut = Fechar Aba zen-compact-mode-shortcut-show-sidebar = Alternar barra lateral flutuante zen-compact-mode-shortcut-show-toolbar = Alternar barra flutuante zen-compact-mode-shortcut-toggle = Ativar/Desativar Modo Compacto -zen-glance-expand = Expand Glance +zen-glance-expand = Expandir Visualização Rápida zen-workspace-shortcut-switch-1 = Mudar para Área de Trabalho 1 zen-workspace-shortcut-switch-2 = Mudar para Área de Trabalho 2 zen-workspace-shortcut-switch-3 = Mudar para Área de Trabalho 3 @@ -274,7 +274,7 @@ zen-split-view-shortcut-grid = Alternar grade de visualização dividida zen-split-view-shortcut-vertical = Alternar visualização de divisão vertical zen-split-view-shortcut-horizontal = Alternar visualização horizontal de divisão zen-split-view-shortcut-unsplit = Fechar visualização dividida -zen-new-empty-split-view-shortcut = New Empty Split View +zen-new-empty-split-view-shortcut = Nova Divisão de Tela Vazia zen-key-select-tab-1 = Selecionar guia #1 zen-key-select-tab-2 = Selecionar guia #2 zen-key-select-tab-3 = Selecionar guia #3 diff --git a/locales/pt-BR/browser/browser/zen-workspaces.ftl b/locales/pt-BR/browser/browser/zen-workspaces.ftl index 04732b34f..5a1c1ca2c 100644 --- a/locales/pt-BR/browser/browser/zen-workspaces.ftl +++ b/locales/pt-BR/browser/browser/zen-workspaces.ftl @@ -4,7 +4,7 @@ zen-panel-ui-workspaces-create = zen-panel-ui-folder-create = .label = Nova Pasta zen-panel-ui-new-empty-split = - .label = New Split + .label = Nova Divisão zen-workspaces-panel-context-delete = .label = Excluir Espaço .accesskey = D diff --git a/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl b/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl index a0215afc3..acc8637ea 100644 --- a/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl +++ b/locales/pt-PT/browser/browser/preferences/zen-preferences.ftl @@ -43,7 +43,7 @@ pane-settings-workspaces-title = Espaços de Trabalho zen-tabs-unloader-enabled = .label = Habilitar a Hibernação de Separadores zen-look-and-feel-compact-toolbar-themed = - .label = Use themed background for compact toolbar + .label = Usar fundo temático para a barra de ferramentas compacta zen-workspace-continue-where-left-off = .label = Continuar a partir do ponto onde parou pane-zen-pinned-tab-manager-title = Separadores Fixados diff --git a/locales/uk/browser/browser/preferences/zen-preferences.ftl b/locales/uk/browser/browser/preferences/zen-preferences.ftl index cf95c4272..dd5d54edc 100644 --- a/locales/uk/browser/browser/preferences/zen-preferences.ftl +++ b/locales/uk/browser/browser/preferences/zen-preferences.ftl @@ -43,7 +43,7 @@ pane-settings-workspaces-title = Робочі області zen-tabs-unloader-enabled = .label = Увімкнути вивантаження вкладок zen-look-and-feel-compact-toolbar-themed = - .label = Use themed background for compact toolbar + .label = Використовувати тематичний фон для компактної панелі інструментів zen-workspace-continue-where-left-off = .label = Продовжити з місця зупинки pane-zen-pinned-tab-manager-title = Прикріплені вкладки @@ -221,7 +221,7 @@ zen-key-exit-full-screen = Вийти з повноекранного режим zen-ai-chatbot-sidebar-shortcut = Перемкнути бічну панель ШІ чат-бота zen-key-inspector-mac = Перемкнути інспектор (Mac) zen-toggle-sidebar-shortcut = Перемкнути бічну панель Firefox -zen-toggle-pin-tab-shortcut = Toggle Pin Tab +zen-toggle-pin-tab-shortcut = Закріпити / відкріпити вкладку zen-reader-mode-toggle-shortcut-other = Перемкнути режим читання zen-picture-in-picture-toggle-shortcut = Показати/приховати зображення zen-nav-reload-shortcut-2 = Перезавантажити сторінку @@ -255,7 +255,7 @@ zen-close-tab-shortcut = Закрити вкладку zen-compact-mode-shortcut-show-sidebar = Перемкнути спливну бічну панель zen-compact-mode-shortcut-show-toolbar = Перемкнути спливну панель інструментів zen-compact-mode-shortcut-toggle = Компактний режим -zen-glance-expand = Expand Glance +zen-glance-expand = Розгорнути огляд zen-workspace-shortcut-switch-1 = Перейти на робочу область 1 zen-workspace-shortcut-switch-2 = Перейти на робочу область 2 zen-workspace-shortcut-switch-3 = Перейти на робочу область 3 @@ -274,7 +274,7 @@ zen-split-view-shortcut-grid = Перемкнути розділену сітк zen-split-view-shortcut-vertical = Перемкнути розділений Перегляд вертикально zen-split-view-shortcut-horizontal = Перемкнути розділений Перегляд горизонтально zen-split-view-shortcut-unsplit = Закрити розділений вигляд -zen-new-empty-split-view-shortcut = New Empty Split View +zen-new-empty-split-view-shortcut = Новий пустий розділений перегляд zen-key-select-tab-1 = Вибрати вкладку #1 zen-key-select-tab-2 = Вибрати вкладку #2 zen-key-select-tab-3 = Вибрати вкладку #3 diff --git a/locales/uk/browser/browser/zen-workspaces.ftl b/locales/uk/browser/browser/zen-workspaces.ftl index 3bb1f1941..e377e672c 100644 --- a/locales/uk/browser/browser/zen-workspaces.ftl +++ b/locales/uk/browser/browser/zen-workspaces.ftl @@ -4,7 +4,7 @@ zen-panel-ui-workspaces-create = zen-panel-ui-folder-create = .label = Створити теку zen-panel-ui-new-empty-split = - .label = New Split + .label = Нове розділення zen-workspaces-panel-context-delete = .label = Видалити простір .accesskey = D