Update ImageUtilities.plugin.js

This commit is contained in:
Mirco Wittrien 2021-02-09 14:51:23 +01:00
parent 91f086d72c
commit dc4cb37e70
1 changed files with 283 additions and 334 deletions

View File

@ -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}}'"
};
}
}