From dc4cb37e7035dfcdc5ecb95dddbaf2decce12354 Mon Sep 17 00:00:00 2001 From: Mirco Wittrien Date: Tue, 9 Feb 2021 14:51:23 +0100 Subject: [PATCH] Update ImageUtilities.plugin.js --- .../ImageUtilities/ImageUtilities.plugin.js | 617 ++++++++---------- 1 file changed, 283 insertions(+), 334 deletions(-) diff --git a/Plugins/ImageUtilities/ImageUtilities.plugin.js b/Plugins/ImageUtilities/ImageUtilities.plugin.js index 3c1f652680..cbcf704dcf 100644 --- a/Plugins/ImageUtilities/ImageUtilities.plugin.js +++ b/Plugins/ImageUtilities/ImageUtilities.plugin.js @@ -14,12 +14,12 @@ module.exports = (_ => { "info": { "name": "ImageUtilities", "author": "DevilBro", - "version": "4.2.5", + "version": "4.2.6", "description": "Add a handful of options for images/emotes/avatars (direct download, reverse image search, zoom, copy image link, copy image to clipboard, gallery mode)" }, "changeLog": { - "fixed": { - "Download": "Download via Image Modal would sometimes download a small version of the image" + "added": { + "Videos": "Save as and Copy File Link now also works for videos" } } }; @@ -62,10 +62,24 @@ module.exports = (_ => { return template.content.firstElementChild; } } : (([Plugin, BDFDB]) => { - const imgUrlReplaceString = "DEVILBRO_BD_REVERSEIMAGESEARCH_REPLACE_IMAGEURL"; var firedEvents = [], clickedImage; var settings = {}, amounts = {}, zoomSettings = {}, engines = {}, enabledEngines = {}, ownLocations = {}, downloadsFolder; + const imgUrlReplaceString = "DEVILBRO_BD_REVERSEIMAGESEARCH_REPLACE_IMAGEURL"; + + const fileTypes = { + apng: {copyable: false, searchable: true, video: false}, + avi: {copyable: false, searchable: false, video: true}, + jpeg: {copyable: true, searchable: true, video: false}, + jpg: {copyable: true, searchable: true, video: false}, + gif: {copyable: false, searchable: true, video: false}, + mov: {copyable: false, searchable: false, video: true}, + mp4: {copyable: false, searchable: false, video: true}, + png: {copyable: true, searchable: true, video: false}, + svg: {copyable: false, searchable: false, video: false}, + webp: {copyable: true, searchable: true, video: false} + }; + const ImageDetails = class ImageDetails extends BdApi.React.Component { componentDidMount() { this.props.attachment = BDFDB.ReactUtils.findValue(BDFDB.ObjectUtils.get(this, `${BDFDB.ReactUtils.instanceKey}.return`), "attachment", {up: true}); @@ -241,14 +255,6 @@ module.exports = (_ => { } onStart () { - // REMOVE 16.12.2020 - let oL = BDFDB.DataUtils.load(this, "ownLocations"), c = false; - for (let i in oL) if (!BDFDB.ObjectUtils.is(oL[i])) { - oL[i] = {enabled: true, location: oL[i]}; - c = true; - } - if (c) BDFDB.DataUtils.save(oL, this, "ownLocations") - BDFDB.ListenerUtils.add(this, document.body, "click", BDFDB.dotCNS.message + BDFDB.dotCNS.imagewrapper + "img", e => { clickedImage = e.target; BDFDB.TimeUtils.timeout(_ => {clickedImage = null;}); @@ -334,11 +340,11 @@ module.exports = (_ => { BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Button, { style: {marginBottom: 1}, onClick: _ => { - for (let input of settingsPanel.props._node.querySelectorAll(".input-newlocation " + BDFDB.dotCN.input)) if (!input.value || input.value.length == 0 || input.value.trim().length == 0) return BDFDB.NotificationUtils.toast("Fill out all fields to add a new location.", {type: "danger"}); + for (let input of settingsPanel.props._node.querySelectorAll(".input-newlocation " + BDFDB.dotCN.input)) if (!input.value || input.value.length == 0 || input.value.trim().length == 0) return BDFDB.NotificationUtils.toast("Fill out all fields to add a new Location.", {type: "danger"}); let name = settingsPanel.props._node.querySelector(".input-name " + BDFDB.dotCN.input).value.trim(); let location = settingsPanel.props._node.querySelector(".input-location " + BDFDB.dotCN.input).value.trim(); - if (ownLocations[name] || name == "Downloads") return BDFDB.NotificationUtils.toast("A location with the choosen name already exists, please choose another name", {type: "danger"}); - else if (!BDFDB.LibraryRequires.fs.existsSync(location)) return BDFDB.NotificationUtils.toast("The choosen download location is not a valid path to a folder", {type: "danger"}); + if (ownLocations[name] || name == "Downloads") return BDFDB.NotificationUtils.toast("A Location with the choosen Name already exists, please choose another Name", {type: "danger"}); + else if (!BDFDB.LibraryRequires.fs.existsSync(location)) return BDFDB.NotificationUtils.toast("The choosen download Location is not a valid Path to a Folder", {type: "danger"}); else { ownLocations[name] = {enabled: true, location: location}; BDFDB.DataUtils.save(ownLocations, this, "ownLocations"); @@ -487,12 +493,15 @@ module.exports = (_ => { onMessageContextMenu (e) { if (e.instance.props.message && e.instance.props.channel && e.instance.props.target) { if (e.instance.props.attachment) this.injectItem(e, e.instance.props.attachment.url); - else if (e.instance.props.target.tagName == "A" && e.instance.props.message.embeds && e.instance.props.message.embeds[0] && e.instance.props.message.embeds[0].type == "image") this.injectItem(e, e.instance.props.target.href); + else if (e.instance.props.target.tagName == "A" && e.instance.props.message.embeds && e.instance.props.message.embeds[0] && (e.instance.props.message.embeds[0].type == "image" || e.instance.props.message.embeds[0].type == "video")) this.injectItem(e, e.instance.props.target.href); else if (e.instance.props.target.tagName == "IMG") { if (BDFDB.DOMUtils.containsClass(e.instance.props.target.parentElement, BDFDB.disCN.imagewrapper)) this.injectItem(e, e.instance.props.target.src); else if (BDFDB.DOMUtils.containsClass(e.instance.props.target, BDFDB.disCN.embedauthoricon) && settings.addUserAvatarEntry) this.injectItem(e, e.instance.props.target.src); else if (BDFDB.DOMUtils.containsClass(e.instance.props.target, BDFDB.disCN.emojiold, "emote", false) && settings.addEmojiEntry) this.injectItem(e, e.instance.props.target.src); } + else if (e.instance.props.target.tagName == "VIDEO") { + if (BDFDB.DOMUtils.getParent(BDFDB.dotCN.attachmentvideo, e.instance.props.target)) this.injectItem(e, e.instance.props.target.src); + } else { let reaction = BDFDB.DOMUtils.getParent(BDFDB.dotCN.messagereaction, e.instance.props.target); if (reaction && settings.addEmojiEntry) this.injectItem(e, reaction.querySelector(BDFDB.dotCN.emojiold).src); @@ -502,7 +511,7 @@ module.exports = (_ => { injectItem (e, ...urls) { let types = []; - let validUrls = urls.filter(n => this.isValidImg(n)).map(n => { + let validUrls = urls.filter(n => this.isValid(n)).map(n => { let url = n.replace(/^url\(|\)$|"|'/g, "").replace(/\?size\=\d+$/, "?size=4096").replace(/[\?\&](height|width)=\d+/g, ""); if (url.indexOf("https://images-ext-1.discordapp.net/external/") > -1) { if (url.split("/https/").length > 1) url = "https://" + url.split("/https/").pop(); @@ -513,10 +522,12 @@ module.exports = (_ => { return url && type && !types.includes(type) && types.push(type) && {url, type}; }).filter(n => n); if (!validUrls.length) return; + + let type = this.isValid(validUrls[0].url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; let [children, index] = BDFDB.ContextMenuUtils.findItem(e.returnvalue, {id: "devmode-copy-id", group: true}); children.splice(index > -1 ? index : children.length, 0, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, { children: BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: BDFDB.LanguageUtils.LanguageStrings.IMAGE + " " + BDFDB.LanguageUtils.LanguageStrings.ACTIONS, + label: type + " " + BDFDB.LanguageUtils.LanguageStrings.ACTIONS, id: BDFDB.ContextMenuUtils.createItemId(this.name, "main-subitem"), children: validUrls.length == 1 ? this.createUrlMenu(e, validUrls[0].url) : validUrls.map((urlData, i) => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { label: urlData.type.toUpperCase(), @@ -531,10 +542,12 @@ module.exports = (_ => { let enginesWithoutAll = BDFDB.ObjectUtils.filter(enabledEngines, n => n != "_all", true); let engineKeys = Object.keys(enginesWithoutAll); let locations = Object.keys(ownLocations).filter(n => ownLocations[n].enabled); + let isVideo = this.isValid(url, "video"); + let type = isVideo ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; return [ - BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: this.labels.context_viewimage, - id: BDFDB.ContextMenuUtils.createItemId(this.name, "view-image"), + !isVideo && BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { + label: this.labels.context_view.replace("{{var0}}", type), + id: BDFDB.ContextMenuUtils.createItemId(this.name, "view-file"), action: _ => { let img = new Image(); img.onload = function() { @@ -560,38 +573,36 @@ module.exports = (_ => { } }), BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: this.labels.context_saveimageas, - id: BDFDB.ContextMenuUtils.createItemId(this.name, "download-image-as"), + label: this.labels.context_saveas.replace("{{var0}}", type), + id: BDFDB.ContextMenuUtils.createItemId(this.name, "download-file-as"), action: _ => { - this.downloadImageAs(url); + this.downloadFileAs(url); }, children: locations.length && BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, { children: locations.map((name, i) => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { id: BDFDB.ContextMenuUtils.createItemId(this.name, "download", name, i), label: name, action: _ => { - this.downloadImage(url, ownLocations[name].location); + this.downloadFile(url, ownLocations[name].location); } })) }) }), - !this.isCopyable(url) ? null : BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: this.labels.context_copyimage, - id: BDFDB.ContextMenuUtils.createItemId(this.name, "copy-image"), - action: _ => { - this.copyImage(url); - } + !this.isValid(url, "copyable") ? null : BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { + label: this.labels.context_copy.replace("{{var0}}", type), + id: BDFDB.ContextMenuUtils.createItemId(this.name, "copy-file"), + action: _ => this.copyFile(url) }), BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: this.labels.context_copyimagelink, + label: BDFDB.LanguageUtils.LanguageStrings.COPY_MEDIA_LINK, id: BDFDB.ContextMenuUtils.createItemId(this.name, "copy-src"), action: _ => { BDFDB.LibraryRequires.electron.clipboard.write({text: url}); - BDFDB.NotificationUtils.toast(this.labels.toast_copyimagelink_success, {type: "success"}); + BDFDB.NotificationUtils.toast(BDFDB.LanguageUtils.LanguageStrings.LINK_COPIED, {type: "success"}); } }), - !this.isSearchable(url) ? null : engineKeys.length == 1 ? BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: this.labels.context_reverseimagesearch.replace("...", this.defaults.engines[engineKeys[0]].name), + !this.isValid(url, "searchable") ? null : engineKeys.length == 1 ? BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { + label: this.labels.context_searchwith.replace("{{var0}}", type).replace("...", this.defaults.engines[engineKeys[0]].name), id: BDFDB.ContextMenuUtils.createItemId(this.name, "single-search"), persisting: true, action: event => { @@ -601,7 +612,7 @@ module.exports = (_ => { }); } }) : BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { - label: this.labels.context_reverseimagesearch, + label: this.labels.context_searchwith.replace("{{var0}}", type), id: BDFDB.ContextMenuUtils.createItemId(this.name, "submenu-search"), children: !engineKeys.length ? BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { label: this.labels.submenu_disabled, @@ -635,6 +646,7 @@ module.exports = (_ => { if (e.returnvalue) { let [children, index] = BDFDB.ReactUtils.findParent(e.returnvalue, {props: [["className", BDFDB.disCN.downloadlink]]}); if (index > -1) { + let type = this.isValid(url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; let openContext = event => { BDFDB.ContextMenuUtils.open(this, event, BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuGroup, { children: Object.keys(zoomSettings).map(type => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuSliderItem, Object.assign({ @@ -666,10 +678,10 @@ module.exports = (_ => { }), BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Anchor, { className: BDFDB.disCN.downloadlink, - children: this.labels.context_saveimageas, + children: this.labels.context_saveas.replace("{{var0}}", type), onClick: event => { BDFDB.ListenerUtils.stopEvent(event); - this.downloadImageAs(url); + this.downloadFileAs(url); }, onContextMenu: event => { let locations = Object.keys(ownLocations).filter(n => ownLocations[n].enabled); @@ -677,15 +689,13 @@ module.exports = (_ => { children: locations.map((name, i) => BDFDB.ContextMenuUtils.createItem(BDFDB.LibraryComponents.MenuItems.MenuItem, { id: BDFDB.ContextMenuUtils.createItemId(this.name, "download", name, i), label: name, - action: _ => { - this.downloadImage(url, ownLocations[name].location); - } + action: _ => this.downloadFile(url, ownLocations[name].location) })) })); } }) ], - settings.enableCopyImg && this.isCopyable(url) && !isVideo && [ + settings.enableCopyImg && this.isValid(url, "copyable") && !isVideo && [ BDFDB.ReactUtils.createElement("span", { className: BDFDB.disCN.downloadlink, children: "|", @@ -693,10 +703,10 @@ module.exports = (_ => { }), BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Anchor, { className: BDFDB.disCN.downloadlink, - children: this.labels.context_copyimage, + children: this.labels.context_copy.replace("{{var0}}", type), onClick: event => { BDFDB.ListenerUtils.stopEvent(event); - this.copyImage(url); + this.copyFile(url); } }) ], @@ -932,35 +942,27 @@ module.exports = (_ => { return child; } - isValidImg (url) { + isValid (url, type) { + if (!url) return false; const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase(); - return file && (url.startsWith("https://images-ext-2.discordapp.net/") || file.endsWith(".jpg") || file.endsWith(".jpeg") || file.endsWith(".png") || file.endsWith(".gif") || file.endsWith(".apng") || file.endsWith(".webp") || file.endsWith(".svg")); + return file && (url.startsWith("https://images-ext-2.discordapp.net/") || !type && Object.keys(fileTypes).some(t => file.endsWith(`.${t}`)) || type && Object.keys(fileTypes).filter(t => fileTypes[t][type]).some(t => file.endsWith(`.${t}`))); } - isCopyable (url) { - const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase(); - return file && (url.startsWith("https://images-ext-2.discordapp.net/") || file.endsWith(".jpg") || file.endsWith(".jpeg") || file.endsWith(".png")); - } - - isSearchable (url) { - const file = url && (BDFDB.LibraryModules.URLParser.parse(url).pathname || "").toLowerCase(); - return file && (url.startsWith("https://images-ext-2.discordapp.net/") || file.endsWith(".jpg") || file.endsWith(".jpeg") || file.endsWith(".png") || file.endsWith(".gif") || file.endsWith(".apng") || file.endsWith(".webp")); - } - - downloadImage (url, path) { + downloadFile (url, path) { url = url.startsWith("/assets") ? (window.location.origin + url) : url; BDFDB.LibraryRequires.request(url, {encoding: null}, (error, response, body) => { - if (error) BDFDB.NotificationUtils.toast(this.labels.toast_saveimage_failed.replace("{{path}}", path), {type: "danger"}); + let type = this.isValid(url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; + if (error) BDFDB.NotificationUtils.toast(this.labels.toast_save_failed.replace("{{var0}}", type).replace("{{var1}}", path), {type: "danger"}); else { BDFDB.LibraryRequires.fs.writeFile(this.getFileName(path, url.split("/").pop().split(".").slice(0, -1).join("."), response.headers["content-type"].split("/").pop().split("+")[0], 0), body, error => { - if (error) BDFDB.NotificationUtils.toast(this.labels.toast_saveimage_failed.replace("{{path}}", path), {type: "danger"}); - else BDFDB.NotificationUtils.toast(this.labels.toast_saveimage_success.replace("{{path}}", path), {type: "success"}); + if (error) BDFDB.NotificationUtils.toast(this.labels.toast_save_failed.replace("{{var0}}", type).replace("{{var1}}", path), {type: "danger"}); + else BDFDB.NotificationUtils.toast(this.labels.toast_save_success.replace("{{var0}}", type).replace("{{var1}}", path), {type: "success"}); }); } }); } - downloadImageAs (url) { + downloadFileAs (url) { url = url.startsWith("/assets") ? (window.location.origin + url) : url; BDFDB.LibraryRequires.request(url, {encoding: null}, (error, response, body) => { let hrefURL = window.URL.createObjectURL(new Blob([body])); @@ -972,9 +974,10 @@ module.exports = (_ => { }); } - copyImage (url) { + copyFile (url) { BDFDB.LibraryRequires.request(url, {encoding: null}, (error, response, buffer) => { - if (error) BDFDB.NotificationUtils.toast(this.labels.toast_copyimage_failed, {type: "danger"}); + let type = this.isValid(url, "video") ? BDFDB.LanguageUtils.LanguageStrings.VIDEO : BDFDB.LanguageUtils.LanguageStrings.IMAGE; + if (error) BDFDB.NotificationUtils.toast(this.labels.toast_copy_failed.replace("{{var0}}", type), {type: "danger"}); else if (buffer) { if (BDFDB.LibraryRequires.process.platform === "win32" || BDFDB.LibraryRequires.process.platform === "darwin") { BDFDB.LibraryRequires.electron.clipboard.write({image: BDFDB.LibraryRequires.electron.nativeImage.createFromBuffer(buffer)}); @@ -985,7 +988,7 @@ module.exports = (_ => { BDFDB.LibraryRequires.electron.clipboard.write({image: file}); BDFDB.LibraryRequires.fs.unlinkSync(file); } - BDFDB.NotificationUtils.toast(this.labels.toast_copyimage_success, {type: "success"}); + BDFDB.NotificationUtils.toast(this.labels.toast_copy_success.replace("{{var0}}", type), {type: "success"}); } }); } @@ -1111,408 +1114,354 @@ module.exports = (_ => { switch (BDFDB.LanguageUtils.getLanguage().id) { case "bg": // Bulgarian return { - context_copyimage: "Копирай изображение", - context_copyimagelink: "Копирайте Image Link", + context_copy: "Копирайте {{var0}}", context_lenssize: "Размер на обектива", - context_reverseimagesearch: "Търсене на изображение с ...", - context_saveimageas: "Запазете изображението като ...", - context_viewimage: "Преглед на изображението", + context_saveas: "Запазете {{var0}} като ...", + context_searchwith: "Търсете {{var0}} с ...", + context_view: "Преглед {{var0}}", submenu_disabled: "Всички инвалиди", - toast_copyimage_failed: "Копирането на изображението в клипборда не бе успешно", - toast_copyimage_success: "Копирано изображение в клипборда", - toast_copyimagelink_success: "Копирана връзка към изображение в клипборда", - toast_saveimage_failed: "Запазването на изображението в '{{path}}' не бе успешно", - toast_saveimage_success: "Запазено изображение в '{{path}}'" + toast_copy_failed: "{{var0}} не можа да бъде копиран в клипборда", + toast_copy_success: "{{var0}} беше копиран в клипборда", + toast_save_failed: "{{var0}} не можа да бъде запазен в '{{var1}}'", + toast_save_success: "{{var0}} бе запазено в '{{var1}}'" }; case "da": // Danish return { - context_copyimage: "Kopier billede", - context_copyimagelink: "Kopier billedlink", + context_copy: "Kopiér {{var0}}", context_lenssize: "Objektivstørrelse", - context_reverseimagesearch: "Søg i billede med ...", - context_saveimageas: "Gem billede som ...", - context_viewimage: "Se billede", + context_saveas: "Gem {{var0}} som ...", + context_searchwith: "Søg i {{var0}} med ...", + context_view: "Se {{var0}}", submenu_disabled: "Alle handicappede", - toast_copyimage_failed: "Kunne ikke kopiere billedet til udklipsholderen", - toast_copyimage_success: "Kopieret billede til udklipsholderen", - toast_copyimagelink_success: "Kopieret billedlink til udklipsholder", - toast_saveimage_failed: "Kunne ikke gemme billedet i '{{path}}'", - toast_saveimage_success: "Gemt billede i '{{path}}'" + toast_copy_failed: "{{var0}} kunne ikke kopieres til udklipsholderen", + toast_copy_success: "{{var0}} blev kopieret til udklipsholderen", + toast_save_failed: "{{var0}} kunne ikke gemmes i '{{var1}}'", + toast_save_success: "{{var0}} blev gemt i '{{var1}}'" }; case "de": // German return { - context_copyimage: "Bild kopieren", - context_copyimagelink: "Bildadresse kopieren", + context_copy: "{{var0}} kopieren", context_lenssize: "Linsengröße", - context_reverseimagesearch: "Bild suchen mit ...", - context_saveimageas: "Bild speichern unter ...", - context_viewimage: "Bild ansehen", + context_saveas: "{{var0}} speichern als ...", + context_searchwith: "{{var0}} suchen mit ...", + context_view: "{{var0}} ansehen", submenu_disabled: "Alle deaktiviert", - toast_copyimage_failed: "Bild konnte nicht in die Zwischenablage kopiert werden", - toast_copyimage_success: "Kopiertes Bild in die Zwischenablage", - toast_copyimagelink_success: "Bildadresse in die Zwischenablage kopieren", - toast_saveimage_failed: "Bild konnte nicht in '{{path}}' gespeichert werden", - toast_saveimage_success: "Bild wurde in '{{path}}' gespeichert" + toast_copy_failed: "{{var0}} konnte nicht in die Zwischenablage kopiert werden", + toast_copy_success: "{{var0}} wurde in die Zwischenablage kopiert", + toast_save_failed: "{{var0}} konnte nicht in '{{var1}}' gespeichert werden", + toast_save_success: "{{var0}} wurde in '{{var1}}' gespeichert" }; case "el": // Greek return { - context_copyimage: "Αντιγραφή εικόνας", - context_copyimagelink: "Αντιγραφή συνδέσμου εικόνας", + context_copy: "Αντιγραφή {{var0}}", context_lenssize: "Μέγεθος φακού", - context_reverseimagesearch: "Αναζήτηση εικόνας με ...", - context_saveimageas: "Αποθήκευση εικόνας ως ...", - context_viewimage: "Προβολή εικόνας", + context_saveas: "Αποθήκευση {{var0}} ως ...", + context_searchwith: "Αναζήτηση {{var0}} με ...", + context_view: "Προβολή {{var0}}", submenu_disabled: "Όλα τα άτομα με ειδικές ανάγκες", - toast_copyimage_failed: "Αποτυχία αντιγραφής εικόνας στο Πρόχειρο", - toast_copyimage_success: "Αντιγράφηκε η εικόνα στο Πρόχειρο", - toast_copyimagelink_success: "Αντιγράφηκε σύνδεσμος εικόνας στο Πρόχειρο", - toast_saveimage_failed: "Αποτυχία αποθήκευσης εικόνας στο '{{path}}'", - toast_saveimage_success: "Αποθηκευμένη εικόνα στο '{{path}}'" + toast_copy_failed: "Δεν ήταν δυνατή η αντιγραφή του {{var0}} στο πρόχειρο", + toast_copy_success: "Το {{var0}} αντιγράφηκε στο πρόχειρο", + toast_save_failed: "Δεν ήταν δυνατή η αποθήκευση του {{var0}} στο '{{var1}}'", + toast_save_success: "Το {{var0}} αποθηκεύτηκε στο '{{var1}}'" }; case "es": // Spanish return { - context_copyimage: "Copiar imagen", - context_copyimagelink: "Copiar enlace de imagen", + context_copy: "Copiar {{var0}}", context_lenssize: "Tamaño de la lente", - context_reverseimagesearch: "Buscar imagen con ...", - context_saveimageas: "Guardar imagen como ...", - context_viewimage: "Ver imagen", + context_saveas: "Guardar {{var0}} como ...", + context_searchwith: "Buscar {{var0}} con ...", + context_view: "Ver {{var0}}", submenu_disabled: "Todos discapacitados", - toast_copyimage_failed: "No se pudo copiar la imagen al portapapeles", - toast_copyimage_success: "Imagen copiada al portapapeles", - toast_copyimagelink_success: "Enlace de imagen copiado al portapapeles", - toast_saveimage_failed: "No se pudo guardar la imagen en '{{path}}'", - toast_saveimage_success: "Imagen guardada en '{{path}}'" + toast_copy_failed: "{{var0}} no se pudo copiar al portapapeles", + toast_copy_success: "{{var0}} se copió en el portapapeles", + toast_save_failed: "{{var0}} no se pudo guardar en '{{var1}}'", + toast_save_success: "{{var0}} se guardó en '{{var1}}'" }; case "fi": // Finnish return { - context_copyimage: "Kopioi kuva", - context_copyimagelink: "Kopioi kuvalinkki", + context_copy: "Kopioi {{var0}}", context_lenssize: "Linssin koko", - context_reverseimagesearch: "Hae kuvaa ...", - context_saveimageas: "Tallenna kuva nimellä ...", - context_viewimage: "Näytä kuva", + context_saveas: "Tallenna {{var0}} nimellä ...", + context_searchwith: "Tee haku {{var0}} ...", + context_view: "Näytä {{var0}}", submenu_disabled: "Kaikki vammaiset", - toast_copyimage_failed: "Kuvan kopioiminen leikepöydälle epäonnistui", - toast_copyimage_success: "Kopioitu kuva leikepöydälle", - toast_copyimagelink_success: "Kopioitu kuvalinkki leikepöydälle", - toast_saveimage_failed: "Kuvan tallentaminen kohteeseen '{{path}}' epäonnistui", - toast_saveimage_success: "Tallennettu kuva kansioon '{{path}}'" + toast_copy_failed: "Kohdetta {{var0}} ei voitu kopioida leikepöydälle", + toast_copy_success: "{{var0}} kopioitiin leikepöydälle", + toast_save_failed: "Kohdetta {{var0}} ei voitu tallentaa kansioon '{{var1}}'", + toast_save_success: "{{var0}} tallennettiin kansioon '{{var1}}'" }; case "fr": // French return { - context_copyimage: "Copier l'image", - context_copyimagelink: "Copier le lien de l'image", + context_copy: "Copier {{var0}}", context_lenssize: "Taille de l'objectif", - context_reverseimagesearch: "Rechercher une image avec ...", - context_saveimageas: "Enregistrer l'image sous ...", - context_viewimage: "Voir l'image", + context_saveas: "Enregistrer {{var0}} sous ...", + context_searchwith: "Rechercher {{var0}} avec ...", + context_view: "Afficher {{var0}}", submenu_disabled: "Tout désactivé", - toast_copyimage_failed: "Échec de la copie de l'image dans le presse-papiers", - toast_copyimage_success: "Image copiée dans le presse-papiers", - toast_copyimagelink_success: "Lien d'image copié vers le presse-papiers", - toast_saveimage_failed: "Échec de l'enregistrement de l'image dans '{{path}}'", - toast_saveimage_success: "Image enregistrée dans '{{path}}'" + toast_copy_failed: "{{var0}} n'a pas pu être copié dans le presse-papiers", + toast_copy_success: "{{var0}} a été copié dans le presse-papiers", + toast_save_failed: "{{var0}} n'a pas pu être enregistré dans '{{var1}}'", + toast_save_success: "{{var0}} a été enregistré dans '{{var1}}'" }; case "hr": // Croatian return { - context_copyimage: "Kopiraj sliku", - context_copyimagelink: "Kopiraj vezu slike", + context_copy: "Kopiraj {{var0}}", context_lenssize: "Veličina leće", - context_reverseimagesearch: "Traži sliku pomoću ...", - context_saveimageas: "Spremi sliku kao ...", - context_viewimage: "Pogledati sliku", + context_saveas: "Spremi {{var0}} kao ...", + context_searchwith: "Traži {{var0}} sa ...", + context_view: "Pogledajte {{var0}}", submenu_disabled: "Svi invalidi", - toast_copyimage_failed: "Kopiranje slike u međuspremnik nije uspjelo", - toast_copyimage_success: "Kopirana slika u međuspremnik", - toast_copyimagelink_success: "Veza slike kopirana je u međuspremnik", - toast_saveimage_failed: "Spremanje slike u '{{path}}' nije uspjelo", - toast_saveimage_success: "Spremljena slika na '{{path}}'" + toast_copy_failed: "{{var0}} nije moguće kopirati u međuspremnik", + toast_copy_success: "{{var0}} je kopirano u međuspremnik", + toast_save_failed: "{{var0}} nije moguće spremiti u '{{var1}}'", + toast_save_success: "{{var0}} spremljeno je u '{{var1}}'" }; case "hu": // Hungarian return { - context_copyimage: "Képmásolat", - context_copyimagelink: "Képlink másolása", + context_copy: "{{var0}} másolása", context_lenssize: "Lencse mérete", - context_reverseimagesearch: "Kép keresése a következővel:", - context_saveimageas: "Kép mentése másként ...", - context_viewimage: "Kép megtekintése", + context_saveas: "{{var0}} mentése másként ...", + context_searchwith: "Keresés a következőben: {{var0}} a következővel:", + context_view: "Megtekintés: {{var0}}", submenu_disabled: "Minden fogyatékkal él", - toast_copyimage_failed: "Nem sikerült másolni a képet a vágólapra", - toast_copyimage_success: "Kép másolása a vágólapra", - toast_copyimagelink_success: "Képlink linkre másolva a vágólapra", - toast_saveimage_failed: "Nem sikerült menteni a képet a '{{path}}” mappába", - toast_saveimage_success: "Mentett kép itt: '{{path}}”" + toast_copy_failed: "A {{var0}} fájl nem másolható a vágólapra", + toast_copy_success: "A {{var0}} elemet a vágólapra másolta", + toast_save_failed: "A {{var0}} fájl mentése nem sikerült a '{{var1}}' mappába", + toast_save_success: "{{var0}} mentve a '{{var1}}' mappába" }; case "it": // Italian return { - context_copyimage: "Copia l'immagine", - context_copyimagelink: "Copia link immagine", + context_copy: "Copia {{var0}}", context_lenssize: "Dimensione della lente", - context_reverseimagesearch: "Cerca immagine con ...", - context_saveimageas: "Salva l'immagine come ...", - context_viewimage: "Guarda l'immagine", + context_saveas: "Salva {{var0}} come ...", + context_searchwith: "Cerca {{var0}} con ...", + context_view: "Visualizza {{var0}}", submenu_disabled: "Tutti disabilitati", - toast_copyimage_failed: "Impossibile copiare l'immagine negli Appunti", - toast_copyimage_success: "Immagine copiata negli Appunti", - toast_copyimagelink_success: "Collegamento immagine copiato negli Appunti", - toast_saveimage_failed: "Impossibile salvare l'immagine in '{{path}}'", - toast_saveimage_success: "Immagine salvata in '{{path}}'" + toast_copy_failed: "{{var0}} non può essere copiato negli appunti", + toast_copy_success: "{{var0}} è stato copiato negli appunti", + toast_save_failed: "Impossibile salvare {{var0}} in '{{var1}}'", + toast_save_success: "{{var0}} è stato salvato in '{{var1}}'" }; case "ja": // Japanese return { - context_copyimage: "画像をコピーする", - context_copyimagelink: "画像リンクをコピー", + context_copy: "{{var0}} をコピーします", context_lenssize: "レンズサイズ", - context_reverseimagesearch: "で画像を検索...", - context_saveimageas: "画像を保存します ...", - context_viewimage: "画像を見る", + context_saveas: "{{var0}} を...として保存します", + context_searchwith: "{{var0}} を...で検索", + context_view: "{{var0}} を表示", submenu_disabled: "すべて無効", - toast_copyimage_failed: "画像をクリップボードにコピーできませんでした", - toast_copyimage_success: "画像をクリップボードにコピー", - toast_copyimagelink_success: "クリップボードへのコピーされた画像リンク", - toast_saveimage_failed: "'{{path}}'に画像を保存できませんでした", - toast_saveimage_success: "'{{path}}'に保存された画像" + toast_copy_failed: "{{var0}} をクリップボードにコピーできませんでした", + toast_copy_success: "{{var0}} がクリップボードにコピーされました", + toast_save_failed: "{{var0}} を「'{{var1}}'」に保存できませんでした", + toast_save_success: "{{var0}} は「'{{var1}}'」に保存されました" }; case "ko": // Korean return { - context_copyimage: "복사 이미지", - context_copyimagelink: "이미지 링크 복사", + context_copy: "{{var0}} 복사", context_lenssize: "렌즈 크기", - context_reverseimagesearch: "이미지 검색 ...", - context_saveimageas: "다른 이름으로 이미지 저장 ...", - context_viewimage: "이미지보기", + context_saveas: "{{var0}} 을 다른 이름으로 저장 ...", + context_searchwith: "{{var0}} 검색 ...", + context_view: "{{var0}} 보기", submenu_disabled: "모두 비활성화 됨", - toast_copyimage_failed: "이미지를 클립 보드로 복사하지 못했습니다.", - toast_copyimage_success: "클립 보드에 복사 된 이미지", - toast_copyimagelink_success: "클립 보드에 복사 된 이미지 링크", - toast_saveimage_failed: "'{{path}}'에 이미지를 저장하지 못했습니다.", - toast_saveimage_success: "'{{path}}'에 저장된 이미지" + toast_copy_failed: "{{var0}} 을 클립 보드에 복사 할 수 없습니다.", + toast_copy_success: "{{var0}} 이 클립 보드에 복사되었습니다.", + toast_save_failed: "{{var0}} 을 '{{var1}}'에 저장할 수 없습니다.", + toast_save_success: "{{var0}} 이 '{{var1}}'에 저장되었습니다." }; case "lt": // Lithuanian return { - context_copyimage: "Kopijuoti paveiksliuką", - context_copyimagelink: "Kopijuoti vaizdo nuorodą", + context_copy: "Kopijuoti {{var0}}", context_lenssize: "Objektyvo dydis", - context_reverseimagesearch: "Ieškoti vaizde su ...", - context_saveimageas: "Išsaugoti paveikslėlį kaip ...", - context_viewimage: "Peržiūrėti Nuotrauka", + context_saveas: "Išsaugoti '{{var0}}' kaip ...", + context_searchwith: "Ieškoti {{var0}} naudojant ...", + context_view: "Žiūrėti {{var0}}", submenu_disabled: "Visi neįgalūs", - toast_copyimage_failed: "Nepavyko nukopijuoti vaizdo į iškarpinę", - toast_copyimage_success: "Nukopijuotas vaizdas į mainų sritį", - toast_copyimagelink_success: "Nukopijuota vaizdo nuoroda į iškarpinę", - toast_saveimage_failed: "Nepavyko išsaugoti vaizdo '{{path}}'", - toast_saveimage_success: "Išsaugotas vaizdas '{{path}}'" + toast_copy_failed: "{{var0}} nepavyko nukopijuoti į mainų sritį", + toast_copy_success: "{{var0}} buvo nukopijuota į mainų sritį", + toast_save_failed: "Nepavyko išsaugoti {{var0}} aplanke '{{var1}}'", + toast_save_success: "{{var0}} išsaugotas aplanke '{{var1}}'" }; case "nl": // Dutch return { - context_copyimage: "Kopieer afbeelding", - context_copyimagelink: "Kopieer afbeeldingslink", + context_copy: "Kopieer {{var0}}", context_lenssize: "Lens Maat", - context_reverseimagesearch: "Zoek afbeelding met ...", - context_saveimageas: "Sla afbeelding op als ...", - context_viewimage: "Bekijk afbeelding", + context_saveas: "Bewaar {{var0}} als ...", + context_searchwith: "Zoek {{var0}} met ...", + context_view: "Bekijk {{var0}}", submenu_disabled: "Allemaal uitgeschakeld", - toast_copyimage_failed: "Het kopiëren van de afbeelding naar het klembord is mislukt", - toast_copyimage_success: "Gekopieerde afbeelding naar klembord", - toast_copyimagelink_success: "Gekopieerde afbeeldingslink naar het klembord", - toast_saveimage_failed: "Kan afbeelding niet opslaan in '{{path}}'", - toast_saveimage_success: "Opgeslagen afbeelding in '{{path}}'" + toast_copy_failed: "{{var0}} kan niet naar het klembord worden gekopieerd", + toast_copy_success: "{{var0}} is naar het klembord gekopieerd", + toast_save_failed: "{{var0}} kan niet worden opgeslagen in '{{var1}}'", + toast_save_success: "{{var0}} is opgeslagen in '{{var1}}'" }; case "no": // Norwegian return { - context_copyimage: "Kopier bilde", - context_copyimagelink: "Kopier bildelink", + context_copy: "Kopier {{var0}}", context_lenssize: "Linsestørrelse", - context_reverseimagesearch: "Søk i bilde med ...", - context_saveimageas: "Lagre bildet som ...", - context_viewimage: "Vis bilde", + context_saveas: "Lagre {{var0}} som ...", + context_searchwith: "Søk på {{var0}} med ...", + context_view: "Vis {{var0}}", submenu_disabled: "Alle funksjonshemmede", - toast_copyimage_failed: "Kunne ikke kopiere bildet til utklippstavlen", - toast_copyimage_success: "Kopiert bilde til utklippstavlen", - toast_copyimagelink_success: "Kopiert bildekobling til utklippstavlen", - toast_saveimage_failed: "Kunne ikke lagre bildet i '{{path}}'", - toast_saveimage_success: "Lagret bilde i '{{path}}'" + toast_copy_failed: "{{var0}} kunne ikke kopieres til utklippstavlen", + toast_copy_success: "{{var0}} ble kopiert til utklippstavlen", + toast_save_failed: "{{var0}} kunne ikke lagres i '{{var1}}'", + toast_save_success: "{{var0}} ble lagret i '{{var1}}'" }; case "pl": // Polish return { - context_copyimage: "Skopiuj obraz", - context_copyimagelink: "Kopiuj łącze do obrazu", + context_copy: "Kopiuj {{var0}}", context_lenssize: "Rozmiar soczewki", - context_reverseimagesearch: "Szukaj obrazu za pomocą ...", - context_saveimageas: "Zapisz obraz jako ...", - context_viewimage: "Zobacz obrazek", + context_saveas: "Zapisz {{var0}} jako ...", + context_searchwith: "Wyszukaj {{var0}} za pomocą ...", + context_view: "Wyświetl {{var0}}", submenu_disabled: "Wszystkie wyłączone", - toast_copyimage_failed: "Nie udało się skopiować obrazu do schowka", - toast_copyimage_success: "Skopiowany obraz do schowka", - toast_copyimagelink_success: "Link do skopiowanego obrazu do schowka", - toast_saveimage_failed: "Nie udało się zapisać obrazu w '{{path}}”", - toast_saveimage_success: "Zapisany obraz w '{{path}}”" + toast_copy_failed: "Nie można skopiować {{var0}} do schowka", + toast_copy_success: "{{var0}} został skopiowany do schowka", + toast_save_failed: "Nie można zapisać {{var0}} w '{{var1}}'", + toast_save_success: "{{var0}} został zapisany w '{{var1}}'" }; case "pt-BR": // Portuguese (Brazil) return { - context_copyimage: "Copiar imagem", - context_copyimagelink: "Copiar link da imagem", + context_copy: "Copiar {{var0}}", context_lenssize: "Tamanho da lente", - context_reverseimagesearch: "Pesquisar imagem com ...", - context_saveimageas: "Salvar imagem como ...", - context_viewimage: "Ver imagem", + context_saveas: "Salve {{var0}} como ...", + context_searchwith: "Pesquise {{var0}} com ...", + context_view: "Veja {{var0}}", submenu_disabled: "Todos desativados", - toast_copyimage_failed: "Falha ao copiar a imagem para a área de transferência", - toast_copyimage_success: "Imagem copiada para a área de transferência", - toast_copyimagelink_success: "Link da imagem copiada para a área de transferência", - toast_saveimage_failed: "Falha ao salvar a imagem em '{{path}}'", - toast_saveimage_success: "Imagem salva em '{{path}}'" + toast_copy_failed: "{{var0}} não pôde ser copiado para a área de transferência", + toast_copy_success: "{{var0}} foi copiado para a área de transferência", + toast_save_failed: "{{var0}} não pôde ser salvo em '{{var1}}'", + toast_save_success: "{{var0}} foi salvo em '{{var1}}'" }; case "ro": // Romanian return { - context_copyimage: "Copiază imaginea", - context_copyimagelink: "Copiați linkul de imagine", + context_copy: "Copiați {{var0}}", context_lenssize: "Dimensiunea obiectivului", - context_reverseimagesearch: "Căutați imaginea cu ...", - context_saveimageas: "Salveaza imaginea ca ...", - context_viewimage: "Vezi imaginea", + context_saveas: "Salvați {{var0}} ca ...", + context_searchwith: "Căutați {{var0}} cu ...", + context_view: "Vizualizați {{var0}}", submenu_disabled: "Toate sunt dezactivate", - toast_copyimage_failed: "Copierea imaginii în clipboard nu a reușit", - toast_copyimage_success: "Copiat imaginea în Clipboard", - toast_copyimagelink_success: "Link copiat pentru imagine în Clipboard", - toast_saveimage_failed: "Salvarea imaginii în '{{path}}” nu a reușit", - toast_saveimage_success: "Imagine salvată în '{{path}}”" + toast_copy_failed: "{{var0}} nu a putut fi copiat în clipboard", + toast_copy_success: "{{var0}} a fost copiat în clipboard", + toast_save_failed: "{{var0}} nu a putut fi salvat în '{{var1}}'", + toast_save_success: "{{var0}} a fost salvat în '{{var1}}'" }; case "ru": // Russian return { - context_copyimage: "Копировать изображение", - context_copyimagelink: "Копировать ссылку на изображение", + context_copy: "Скопируйте {{var0}}", context_lenssize: "Размер линзы", - context_reverseimagesearch: "Искать изображение с помощью ...", - context_saveimageas: "Сохранить изображение как ...", - context_viewimage: "Просмотр изображения", + context_saveas: "Сохранить {{var0}} как ...", + context_searchwith: "Искать {{var0}} с помощью ...", + context_view: "Посмотреть {{var0}}", submenu_disabled: "Все отключены", - toast_copyimage_failed: "Не удалось скопировать изображение в буфер обмена", - toast_copyimage_success: "Изображение скопировано в буфер обмена", - toast_copyimagelink_success: "Ссылка на скопированное изображение в буфер обмена", - toast_saveimage_failed: "Не удалось сохранить изображение в '{{path}}'", - toast_saveimage_success: "Сохраненное изображение в '{{path}}'" + toast_copy_failed: "{{var0}} не удалось скопировать в буфер обмена", + toast_copy_success: "{{var0}} скопирован в буфер обмена", + toast_save_failed: "{{var0}} не удалось сохранить в '{{var1}}'", + toast_save_success: "{{var0}} был сохранен в '{{var1}}'" }; case "sv": // Swedish return { - context_copyimage: "Kopiera bild", - context_copyimagelink: "Kopiera bildlänk", + context_copy: "Kopiera {{var0}}", context_lenssize: "Linsstorlek", - context_reverseimagesearch: "Sök bild med ...", - context_saveimageas: "Spara bild som ...", - context_viewimage: "Se bild", + context_saveas: "Spara {{var0}} som ...", + context_searchwith: "Sök {{var0}} med ...", + context_view: "Visa {{var0}}", submenu_disabled: "Alla funktionshindrade", - toast_copyimage_failed: "Det gick inte att kopiera bilden till Urklipp", - toast_copyimage_success: "Kopierad bild till Urklipp", - toast_copyimagelink_success: "Kopierad bildlänk till Urklipp", - toast_saveimage_failed: "Det gick inte att spara bilden i '{{path}}'", - toast_saveimage_success: "Sparad bild i '{{path}}'" + toast_copy_failed: "{{var0}} kunde inte kopieras till Urklipp", + toast_copy_success: "{{var0}} kopierades till Urklipp", + toast_save_failed: "{{var0}} kunde inte sparas i '{{var1}}'", + toast_save_success: "{{var0}} sparades i '{{var1}}'" }; case "th": // Thai return { - context_copyimage: "คัดลอกรูปภาพ", - context_copyimagelink: "คัดลอกลิงค์รูปภาพ", + context_copy: "คัดลอก {{var0}}", context_lenssize: "ขนาดเลนส์", - context_reverseimagesearch: "ค้นหาภาพด้วย ...", - context_saveimageas: "บันทึกภาพเป็น ...", - context_viewimage: "ดูภาพ", + context_saveas: "บันทึก {{var0}} เป็น ...", + context_searchwith: "ค้นหา {{var0}} ด้วย ...", + context_view: "ดู {{var0}}", submenu_disabled: "ปิดใช้งานทั้งหมด", - toast_copyimage_failed: "คัดลอกรูปภาพไปยังคลิปบอร์ดไม่สำเร็จ", - toast_copyimage_success: "คัดลอกรูปภาพไปยังคลิปบอร์ดแล้ว", - toast_copyimagelink_success: "ลิงก์รูปภาพที่คัดลอกไปยังคลิปบอร์ด", - toast_saveimage_failed: "บันทึกภาพใน '{{path}}' ไม่สำเร็จ", - toast_saveimage_success: "ภาพที่บันทึกไว้ใน '{{path}}'" + toast_copy_failed: "ไม่สามารถคัดลอก {{var0}} ไปยังคลิปบอร์ดได้", + toast_copy_success: "คัดลอก {{var0}} ไปยังคลิปบอร์ดแล้ว", + toast_save_failed: "ไม่สามารถบันทึก {{var0}} ใน '{{var1}}'", + toast_save_success: "{{var0}} ถูกบันทึกใน '{{var1}}'" }; case "tr": // Turkish return { - context_copyimage: "Resmi kopyala", - context_copyimagelink: "Resim Bağlantısını Kopyala", + context_copy: "{{var0}} kopyala", context_lenssize: "Lens Boyutu", - context_reverseimagesearch: "Şununla Resim Ara ...", - context_saveimageas: "Resmi farklı kaydet ...", - context_viewimage: "Görseli göster", + context_saveas: "{{var0}} farklı kaydet ...", + context_searchwith: "{{var0}} şununla ara ...", + context_view: "{{var0}} görüntüle", submenu_disabled: "Hepsi devre dışı", - toast_copyimage_failed: "Görüntü Panoya kopyalanamadı", - toast_copyimage_success: "Görüntü panoya kopyalandı", - toast_copyimagelink_success: "Görüntü bağlantısı panoya kopyalandı", - toast_saveimage_failed: "Resim '{{yol}}' içine kaydedilemedi", - toast_saveimage_success: "Resim '{{yol}}' içine kaydedildi" + toast_copy_failed: "{{var0}} panoya kopyalanamadı", + toast_copy_success: "{{var0}} panoya kopyalandı", + toast_save_failed: "{{var0}}, '{{var1}}' konumuna kaydedilemedi", + toast_save_success: "{{var0}}, '{{var1}}' konumuna kaydedildi" }; case "uk": // Ukrainian return { - context_copyimage: "Скопіювати зображення", - context_copyimagelink: "Скопіювати посилання на зображення", + context_copy: "Копіювати {{var0}}", context_lenssize: "Розмір лінзи", - context_reverseimagesearch: "Шукати зображення за допомогою ...", - context_saveimageas: "Зберегти зображення як ...", - context_viewimage: "Переглянути зображення", + context_saveas: "Збережіть {{var0}} як ...", + context_searchwith: "Шукати {{var0}} за допомогою ...", + context_view: "Переглянути {{var0}}", submenu_disabled: "Всі інваліди", - toast_copyimage_failed: "Не вдалося скопіювати зображення в буфер обміну", - toast_copyimage_success: "Скопійовано зображення в буфер обміну", - toast_copyimagelink_success: "Скопійовано посилання на зображення в буфер обміну", - toast_saveimage_failed: "Не вдалося зберегти зображення у '{{path}}'", - toast_saveimage_success: "Збережене зображення у '{{path}}'" + toast_copy_failed: "Не вдалося скопіювати {{var0}} у буфер обміну", + toast_copy_success: "{{var0}} скопійовано в буфер обміну", + toast_save_failed: "Не вдалося зберегти {{var0}} у '{{var1}}'", + toast_save_success: "{{var0}} було збережено у '{{var1}}'" }; case "vi": // Vietnamese return { - context_copyimage: "Sao chép hình ảnh", - context_copyimagelink: "Sao chép liên kết hình ảnh", + context_copy: "Sao chép {{var0}}", context_lenssize: "Kích thước ống kính", - context_reverseimagesearch: "Tìm kiếm Hình ảnh bằng ...", - context_saveimageas: "Lưu ảnh dưới dạng ...", - context_viewimage: "Xem hình ảnh", + context_saveas: "Lưu {{var0}} dưới dạng ...", + context_searchwith: "Tìm kiếm {{var0}} bằng ...", + context_view: "Xem {{var0}}", submenu_disabled: "Tất cả đã bị vô hiệu hóa", - toast_copyimage_failed: "Không sao chép được hình ảnh vào Clipboard", - toast_copyimage_success: "Đã sao chép hình ảnh vào Clipboard", - toast_copyimagelink_success: "Liên kết hình ảnh được sao chép vào Clipboard", - toast_saveimage_failed: "Không lưu được Hình ảnh trong '{{path}}'", - toast_saveimage_success: "Hình ảnh đã Lưu trong '{{path}}'" + toast_copy_failed: "Không thể sao chép {{var0}} vào khay nhớ tạm", + toast_copy_success: "{{var0}} đã được sao chép vào khay nhớ tạm", + toast_save_failed: "Không thể lưu {{var0}} trong '{{var1}}'", + toast_save_success: "{{var0}} đã được lưu trong '{{var1}}'" }; case "zh-CN": // Chinese (China) return { - context_copyimage: "复制图片", - context_copyimagelink: "复制图像链接", + context_copy: "复制 {{var0}}", context_lenssize: "镜片尺寸", - context_reverseimagesearch: "用...搜索图像", - context_saveimageas: "将图像另存为...", - context_viewimage: "看图", + context_saveas: "将 {{var0}} 另存为 ...", + context_searchwith: "用搜索 {{var0}} ...", + context_view: "查看 {{var0}}", submenu_disabled: "全部禁用", - toast_copyimage_failed: "无法将图像复制到剪贴板", - toast_copyimage_success: "复制到剪贴板的图像", - toast_copyimagelink_success: "复制的图像链接到剪贴板", - toast_saveimage_failed: "无法将图片保存到'{{path}}'中", - toast_saveimage_success: "已将图像保存在'{{path}}'中" + toast_copy_failed: "{{var0}} 无法复制到剪贴板", + toast_copy_success: "{{var0}} 已复制到剪贴板", + toast_save_failed: "{{var0}} 无法保存在'{{var1}}'中", + toast_save_success: "{{var0}} 已保存在'{{var1}}'中" }; case "zh-TW": // Chinese (Taiwan) return { - context_copyimage: "複製圖片", - context_copyimagelink: "複製圖像鏈接", + context_copy: "複製 {{var0}}", context_lenssize: "鏡片尺寸", - context_reverseimagesearch: "用...搜索圖像", - context_saveimageas: "將圖像另存為...", - context_viewimage: "看圖", + context_saveas: "將 {{var0}} 另存為 ...", + context_searchwith: "用搜索 {{var0}} ...", + context_view: "查看 {{var0}}", submenu_disabled: "全部禁用", - toast_copyimage_failed: "無法將圖像複製到剪貼板", - toast_copyimage_success: "複製到剪貼板的圖像", - toast_copyimagelink_success: "複製的圖像鏈接到剪貼板", - toast_saveimage_failed: "無法將圖片保存到'{{path}}'中", - toast_saveimage_success: "已將圖像保存在'{{path}}'中" + toast_copy_failed: "{{var0}} 無法複製到剪貼板", + toast_copy_success: "{{var0}} 已復製到剪貼板", + toast_save_failed: "{{var0}} 無法保存在'{{var1}}'中", + toast_save_success: "{{var0}} 已保存在'{{var1}}'中" }; default: // English return { - context_copyimage: "Copy Image", - context_copyimagelink: "Copy Image Link", + context_copy: "Copy {{var0}}", context_lenssize: "Lens Size", - context_reverseimagesearch: "Search Image with ...", - context_saveimageas: "Save Image as ...", - context_viewimage: "View Image", + context_saveas: "Save {{var0}} as ...", + context_searchwith: "Search {{var0}} with ...", + context_view: "View {{var0}}", submenu_disabled: "All disabled", - toast_copyimage_failed: "Failed to copy Image to Clipboard", - toast_copyimage_success: "Copied Image to Clipboard", - toast_copyimagelink_success: "Copied Image link to Clipboard", - toast_saveimage_failed: "Failed to save Image in '{{path}}'", - toast_saveimage_success: "Saved Image in '{{path}}'" + toast_copy_failed: "{{var0}} could not be copied to the Clipboard", + toast_copy_success: "{{var0}} was copied to the Clipboard", + toast_save_failed: "{{var0}} could not be saved in '{{var1}}'", + toast_save_success: "{{var0}} was saved in '{{var1}}'" }; } }