feat: add "Copy Metadata" functionality to upscaled images (#1220)
feat: copy metadata fix: better copy-metadata toggle raw: add new locales for metadata fix: log metadata on double upscayl feat: suggest jpg when copying metadata raw: add metadata suggestion locales refactor: add bot suggestions feat: JPEG format validation + ARIA accessibility
This commit is contained in:
parent
d8152cba74
commit
86c144b1e3
@ -26,6 +26,7 @@ const ELECTRON_COMMANDS = {
|
||||
SCALING_AND_CONVERTING: "Adding some finishing touches",
|
||||
UPSCAYL_WARNING: "Upscaling Warning",
|
||||
UPSCAYL_ERROR: "Upscaling Error",
|
||||
METADATA_ERROR: "Metadata Error",
|
||||
PASTE_IMAGE: "Paste Image from clipboard",
|
||||
PASTE_IMAGE_SAVE_SUCCESS: "Clipboard Image saved successfully",
|
||||
PASTE_IMAGE_SAVE_ERROR: "Clipboard Image save failed",
|
||||
|
3
common/types/types.d.ts
vendored
3
common/types/types.d.ts
vendored
@ -14,6 +14,7 @@ export type ImageUpscaylPayload = {
|
||||
useCustomWidth: boolean;
|
||||
tileSize: number;
|
||||
ttaMode: boolean;
|
||||
copyMetadata: boolean;
|
||||
};
|
||||
|
||||
export type DoubleUpscaylPayload = {
|
||||
@ -32,6 +33,7 @@ export type DoubleUpscaylPayload = {
|
||||
useCustomWidth: boolean;
|
||||
tileSize: number;
|
||||
ttaMode: boolean;
|
||||
copyMetadata: boolean;
|
||||
};
|
||||
|
||||
export type BatchUpscaylPayload = {
|
||||
@ -47,4 +49,5 @@ export type BatchUpscaylPayload = {
|
||||
useCustomWidth: boolean;
|
||||
tileSize: number;
|
||||
ttaMode: boolean;
|
||||
copyMetadata: boolean;
|
||||
};
|
||||
|
@ -15,6 +15,7 @@ import { ELECTRON_COMMANDS } from "../../common/electron-commands";
|
||||
import { BatchUpscaylPayload } from "../../common/types/types";
|
||||
import showNotification from "../utils/show-notification";
|
||||
import { MODELS } from "../../common/models-list";
|
||||
import { copyMetadata } from "../utils/copy-metadata";
|
||||
|
||||
const batchUpscayl = async (event, payload: BatchUpscaylPayload) => {
|
||||
const mainWindow = getMainWindow();
|
||||
@ -104,11 +105,35 @@ const batchUpscayl = async (event, payload: BatchUpscaylPayload) => {
|
||||
);
|
||||
return;
|
||||
};
|
||||
const onClose = () => {
|
||||
const onClose = async () => {
|
||||
if (!mainWindow) return;
|
||||
if (!failed && !stopped) {
|
||||
logit("💯 Done upscaling");
|
||||
upscayl.kill();
|
||||
if (payload.copyMetadata) {
|
||||
logit("🏷️ Copying metadata...");
|
||||
try {
|
||||
const files = fs.readdirSync(outputFolderPath);
|
||||
for (const file of files) {
|
||||
const outFile = outputFolderPath + slash + file;
|
||||
const originalFile = inputDir + slash + file;
|
||||
if (fs.existsSync(outFile) && fs.existsSync(originalFile)) {
|
||||
try {
|
||||
await copyMetadata(inputDir, outFile);
|
||||
logit("✅ Metadata copied to: ", outFile);
|
||||
} catch (error) {
|
||||
logit("❌ Error copying metadata: ", error);
|
||||
mainWindow.webContents.send(
|
||||
ELECTRON_COMMANDS.METADATA_ERROR,
|
||||
error,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logit("❌ Error in batch metadata copy: ", err);
|
||||
}
|
||||
}
|
||||
mainWindow.webContents.send(
|
||||
ELECTRON_COMMANDS.FOLDER_UPSCAYL_DONE,
|
||||
outputFolderPath,
|
||||
|
@ -22,6 +22,7 @@ import getFilenameFromPath from "../../common/get-file-name";
|
||||
import decodePath from "../../common/decode-path";
|
||||
import getDirectoryFromPath from "../../common/get-directory-from-path";
|
||||
import { MODELS } from "../../common/models-list";
|
||||
import { copyMetadata } from "../utils/copy-metadata";
|
||||
|
||||
const doubleUpscayl = async (event, payload: DoubleUpscaylPayload) => {
|
||||
const mainWindow = getMainWindow();
|
||||
@ -129,6 +130,19 @@ const doubleUpscayl = async (event, payload: DoubleUpscaylPayload) => {
|
||||
logit("💯 Done upscaling");
|
||||
|
||||
mainWindow.setProgressBar(-1);
|
||||
if (payload.copyMetadata) {
|
||||
logit("🏷️ Copying metadata...");
|
||||
try {
|
||||
await copyMetadata(imagePath, outFile);
|
||||
logit("✅ Metadata copied to: ", outFile);
|
||||
} catch (error) {
|
||||
logit("❌ Error copying metadata: ", error);
|
||||
mainWindow.webContents.send(
|
||||
ELECTRON_COMMANDS.METADATA_ERROR,
|
||||
error,
|
||||
);
|
||||
}
|
||||
}
|
||||
mainWindow.webContents.send(
|
||||
ELECTRON_COMMANDS.DOUBLE_UPSCAYL_DONE,
|
||||
outFile,
|
||||
|
@ -21,6 +21,7 @@ import decodePath from "../../common/decode-path";
|
||||
import getDirectoryFromPath from "../../common/get-directory-from-path";
|
||||
import { MODELS } from "../../common/models-list";
|
||||
import { getPlatform } from "../utils/get-device-specs";
|
||||
import { copyMetadata } from "../utils/copy-metadata";
|
||||
|
||||
const imageUpscayl = async (event, payload: ImageUpscaylPayload) => {
|
||||
const mainWindow = getMainWindow();
|
||||
@ -157,6 +158,19 @@ const imageUpscayl = async (event, payload: ImageUpscaylPayload) => {
|
||||
// Free up memory
|
||||
upscayl.kill();
|
||||
mainWindow.setProgressBar(-1);
|
||||
if (payload.copyMetadata) {
|
||||
logit("🏷️ Copying metadata...");
|
||||
try {
|
||||
await copyMetadata(imagePath, outFile);
|
||||
logit("✅ Metadata copied to: ", outFile);
|
||||
} catch (error) {
|
||||
logit("❌ Error copying metadata: ", error);
|
||||
mainWindow.webContents.send(
|
||||
ELECTRON_COMMANDS.METADATA_ERROR,
|
||||
error,
|
||||
);
|
||||
}
|
||||
}
|
||||
mainWindow.webContents.send(ELECTRON_COMMANDS.UPSCAYL_DONE, outFile);
|
||||
showNotification("Upscayl", "Image upscayled successfully!");
|
||||
}
|
||||
|
5
electron/utils/copy-metadata.ts
Normal file
5
electron/utils/copy-metadata.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import { exiftool } from "exiftool-vendored";
|
||||
|
||||
export async function copyMetadata(originalFile: string, outputFile: string): Promise<void> {
|
||||
await exiftool.write(outputFile, {}, { writeArgs: ['-overwrite_original_in_place', '-tagsFromFile', originalFile] });
|
||||
}
|
80
package-lock.json
generated
80
package-lock.json
generated
@ -24,6 +24,7 @@
|
||||
"electron-settings": "^4.0.4",
|
||||
"electron-updater": "^6.3.9",
|
||||
"eslint-config-next": "^14.2.7",
|
||||
"exiftool-vendored": "^29.3.0",
|
||||
"firebase": "^11.1.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"jotai": "^2.11.0",
|
||||
@ -1932,6 +1933,12 @@
|
||||
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@photostructure/tz-lookup": {
|
||||
"version": "11.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@photostructure/tz-lookup/-/tz-lookup-11.2.0.tgz",
|
||||
"integrity": "sha512-DwrvodcXHNSdGdeSF7SBL5o8aBlsaeuCuG7633F04nYsL3hn5Hxe3z/5kCqxv61J1q7ggKZ27GPylR3x0cPNXQ==",
|
||||
"license": "CC0-1.0"
|
||||
},
|
||||
"node_modules/@pkgjs/parseargs": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
|
||||
@ -2721,6 +2728,12 @@
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/luxon": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz",
|
||||
"integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/mdast": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz",
|
||||
@ -3650,6 +3663,15 @@
|
||||
],
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/batch-cluster": {
|
||||
"version": "13.0.0",
|
||||
"resolved": "https://registry.npmjs.org/batch-cluster/-/batch-cluster-13.0.0.tgz",
|
||||
"integrity": "sha512-EreW0Vi8TwovhYUHBXXRA5tthuU2ynGsZFlboyMJHCCUXYa2AjgwnE3ubBOJs2xJLcuXFJbi6c/8pH5+FVj8Og==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/binary-extensions": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
||||
@ -6072,6 +6094,46 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/exiftool-vendored": {
|
||||
"version": "29.3.0",
|
||||
"resolved": "https://registry.npmjs.org/exiftool-vendored/-/exiftool-vendored-29.3.0.tgz",
|
||||
"integrity": "sha512-2N+QvQH3mH0yb89vpxJXaD+SXa8GXvDigytS6cro6FOrTx9Opav4H0QPP0V4r9dBhXy5poON7qo+p1KZv5wZqQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@photostructure/tz-lookup": "^11.2.0",
|
||||
"@types/luxon": "^3.6.0",
|
||||
"batch-cluster": "^13.0.0",
|
||||
"he": "^1.2.0",
|
||||
"luxon": "^3.6.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"exiftool-vendored.exe": "13.26.0",
|
||||
"exiftool-vendored.pl": "13.26.0"
|
||||
}
|
||||
},
|
||||
"node_modules/exiftool-vendored.exe": {
|
||||
"version": "13.26.0",
|
||||
"resolved": "https://registry.npmjs.org/exiftool-vendored.exe/-/exiftool-vendored.exe-13.26.0.tgz",
|
||||
"integrity": "sha512-y5mLmNAeABbXhb1a77EeR+CYDELI64DawnNywhMiivIYIdBPXf/81UcBd3SQlcTAHJjJjKt20qdmdL4loMkRDA==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
]
|
||||
},
|
||||
"node_modules/exiftool-vendored.pl": {
|
||||
"version": "13.26.0",
|
||||
"resolved": "https://registry.npmjs.org/exiftool-vendored.pl/-/exiftool-vendored.pl-13.26.0.tgz",
|
||||
"integrity": "sha512-4L8b6TrZcrd/dOnoeyCgsIa4WgFygucd0KQzB7xgWpgeMDQ2xYeqAYoHTeKmLAv4DogvaVkZQgDNogscuKuM+Q==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"!win32"
|
||||
],
|
||||
"bin": {
|
||||
"exiftool": "bin/exiftool"
|
||||
}
|
||||
},
|
||||
"node_modules/exponential-backoff": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz",
|
||||
@ -6937,6 +6999,15 @@
|
||||
"url": "https://opencollective.com/unified"
|
||||
}
|
||||
},
|
||||
"node_modules/he": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
|
||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"he": "bin/he"
|
||||
}
|
||||
},
|
||||
"node_modules/hoist-non-react-statics": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
|
||||
@ -8158,6 +8229,15 @@
|
||||
"react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/luxon": {
|
||||
"version": "3.6.1",
|
||||
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
|
||||
"integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/make-fetch-happen": {
|
||||
"version": "10.2.1",
|
||||
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz",
|
||||
|
@ -238,6 +238,7 @@
|
||||
"electron-settings": "^4.0.4",
|
||||
"electron-updater": "^6.3.9",
|
||||
"eslint-config-next": "^14.2.7",
|
||||
"exiftool-vendored": "^29.3.0",
|
||||
"firebase": "^11.1.0",
|
||||
"gray-matter": "^4.0.3",
|
||||
"jotai": "^2.11.0",
|
||||
|
@ -95,3 +95,8 @@ export const userStatsAtom = atomWithStorage("userStats", {
|
||||
lastUpscaylDuration: 0,
|
||||
lastUsedAt: 0,
|
||||
});
|
||||
|
||||
export const copyMetadataAtom = atomWithStorage<boolean>(
|
||||
"copyMetadata",
|
||||
false,
|
||||
);
|
||||
|
@ -20,6 +20,7 @@ import {
|
||||
saveImageAsAtom,
|
||||
userStatsAtom,
|
||||
ttaModeAtom,
|
||||
copyMetadataAtom,
|
||||
} from "../../atoms/user-settings-atom";
|
||||
import useLogger from "../hooks/use-logger";
|
||||
import {
|
||||
@ -93,6 +94,7 @@ const Sidebar = ({
|
||||
const [showSidebar, setShowSidebar] = useAtom(showSidebarAtom);
|
||||
const setUserStats = useSetAtom(userStatsAtom);
|
||||
const ttaMode = useAtomValue(ttaModeAtom);
|
||||
const [copyMetadata] = useAtom(copyMetadataAtom);
|
||||
|
||||
const upscaylHandler = async () => {
|
||||
logit("🔄 Resetting Upscaled Image Path");
|
||||
@ -117,6 +119,7 @@ const Sidebar = ({
|
||||
useCustomWidth,
|
||||
tileSize,
|
||||
ttaMode,
|
||||
copyMetadata,
|
||||
},
|
||||
);
|
||||
setUserStats((prev) => ({
|
||||
@ -145,6 +148,7 @@ const Sidebar = ({
|
||||
useCustomWidth,
|
||||
tileSize,
|
||||
ttaMode,
|
||||
copyMetadata,
|
||||
},
|
||||
);
|
||||
setUserStats((prev) => ({
|
||||
@ -170,6 +174,7 @@ const Sidebar = ({
|
||||
useCustomWidth,
|
||||
tileSize,
|
||||
ttaMode,
|
||||
copyMetadata,
|
||||
});
|
||||
setUserStats((prev) => ({
|
||||
...prev,
|
||||
|
@ -0,0 +1,108 @@
|
||||
import React, { useState, useCallback } from "react";
|
||||
import { translationAtom } from "@/atoms/translations-atom";
|
||||
import { copyMetadataAtom } from "@/atoms/user-settings-atom";
|
||||
import { useAtom, useAtomValue } from "jotai";
|
||||
|
||||
type CopyMetadataToggleProps = {
|
||||
saveImageAs: string;
|
||||
setExportType: (type: string) => void;
|
||||
};
|
||||
|
||||
const CopyMetadataToggle = ({ saveImageAs, setExportType }: CopyMetadataToggleProps) => {
|
||||
const [copyMetadata, setCopyMetadata] = useAtom(copyMetadataAtom);
|
||||
const t = useAtomValue(translationAtom);
|
||||
const [showSuggestModal, setShowSuggestModal] = useState(false);
|
||||
|
||||
const handleToggle = useCallback(() => {
|
||||
if (!copyMetadata && !["jpg", "jpeg"].includes(saveImageAs.toLowerCase()) && setExportType) {
|
||||
setShowSuggestModal(true);
|
||||
} else {
|
||||
setCopyMetadata(!copyMetadata);
|
||||
localStorage.setItem("copyMetadata", (!copyMetadata).toString());
|
||||
}
|
||||
}, [copyMetadata, saveImageAs, setExportType, setCopyMetadata]);
|
||||
|
||||
const handleChangeToJpg = useCallback(() => {
|
||||
setShowSuggestModal(false);
|
||||
setCopyMetadata(true);
|
||||
localStorage.setItem("copyMetadata", true.toString());
|
||||
setExportType("jpg");
|
||||
}, [setCopyMetadata, setExportType]);
|
||||
|
||||
const handleKeepFormat = useCallback(() => {
|
||||
setShowSuggestModal(false);
|
||||
setCopyMetadata(true);
|
||||
localStorage.setItem("copyMetadata", true.toString());
|
||||
}, [setCopyMetadata]);
|
||||
|
||||
return (
|
||||
<div className="flex flex-col gap-2">
|
||||
<p className="text-sm font-medium" id="copy-metadata-title">
|
||||
{t("SETTINGS.COPY_METADATA.TITLE")}
|
||||
</p>
|
||||
<p className="text-xs text-base-content/80" id="copy-metadata-description">
|
||||
{t("SETTINGS.COPY_METADATA.DESCRIPTION")}
|
||||
</p>
|
||||
<input
|
||||
type="checkbox"
|
||||
className="toggle"
|
||||
checked={copyMetadata}
|
||||
onChange={handleToggle}
|
||||
id="copy-metadata-toggle"
|
||||
aria-labelledby="copy-metadata-title"
|
||||
aria-describedby="copy-metadata-description"
|
||||
/>
|
||||
{copyMetadata && !["jpg", "jpeg"].includes(saveImageAs.toLowerCase()) && (
|
||||
<p className="text-xs text-warning">
|
||||
{t("WARNING.METADATA_FORMAT.DESCRIPTION")}
|
||||
</p>
|
||||
)}
|
||||
|
||||
{showSuggestModal && (
|
||||
<div
|
||||
className="fixed inset-0 z-50 flex items-center justify-center bg-black/40"
|
||||
onClick={() => setShowSuggestModal(false)}
|
||||
onKeyDown={(e) => e.key === "Escape" && setShowSuggestModal(false)}
|
||||
tabIndex={0}
|
||||
>
|
||||
<div
|
||||
className="w-96 rounded-lg bg-base-100 p-6 shadow-xl"
|
||||
onClick={(e) => e.stopPropagation()}
|
||||
>
|
||||
<div className="flex justify-between items-center mb-2">
|
||||
<h3 className="text-lg font-semibold">
|
||||
{t("SETTINGS.COPY_METADATA.SUGGEST_JPG_TITLE")}
|
||||
</h3>
|
||||
<button
|
||||
className="btn btn-sm btn-ghost"
|
||||
onClick={() => setShowSuggestModal(false)}
|
||||
aria-label="Close"
|
||||
>
|
||||
×
|
||||
</button>
|
||||
</div>
|
||||
<p className="mb-4 text-sm text-base-content/80">
|
||||
{t("SETTINGS.COPY_METADATA.SUGGEST_JPG_DESCRIPTION")}
|
||||
</p>
|
||||
<div className="flex justify-end gap-2">
|
||||
<button
|
||||
className="btn btn-primary"
|
||||
onClick={handleChangeToJpg}
|
||||
>
|
||||
{t("SETTINGS.COPY_METADATA.CHANGE_TO_JPG")}
|
||||
</button>
|
||||
<button
|
||||
className="btn"
|
||||
onClick={handleKeepFormat}
|
||||
>
|
||||
{t("SETTINGS.COPY_METADATA.KEEP_CURRENT_FORMAT").replace("{format}", saveImageAs.toUpperCase())}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default CopyMetadataToggle;
|
@ -25,6 +25,7 @@ import EnableContributionToggle from "./enable-contributions-toggle";
|
||||
import AutoUpdateToggle from "./auto-update-toggle";
|
||||
import TTAModeToggle from "./tta-mode-toggle";
|
||||
import SystemInfo from "./system-info";
|
||||
import CopyMetadataToggle from "./copy-metadata-toggle";
|
||||
|
||||
interface IProps {
|
||||
batchMode: boolean;
|
||||
@ -183,6 +184,9 @@ function SettingsTab({
|
||||
setExportType={setExportType}
|
||||
/>
|
||||
|
||||
{/* COPY METADATA TOGGLE */}
|
||||
<CopyMetadataToggle saveImageAs={saveImageAs} setExportType={setExportType} />
|
||||
|
||||
{/* IMAGE SCALE */}
|
||||
<SelectImageScale scale={scale} setScale={setScale} />
|
||||
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "نسخ بيانات وصفية للصورة",
|
||||
"DESCRIPTION": "احتفظ ببيانات الصورة الوصفية الأصلية (EXIF) في الصورة المحسنة.",
|
||||
"SUGGEST_JPG_TITLE": "تغيير التنسيق المقترح",
|
||||
"SUGGEST_JPG_DESCRIPTION": "للحصول على توافق أفضل للبيانات الوصفية بين الأنظمة المختلفة، نوصي باستخدام تنسيق JPG. هل تريد التغيير؟",
|
||||
"CHANGE_TO_JPG": "تغيير إلى JPG",
|
||||
"KEEP_CURRENT_FORMAT": "الاحتفاظ بـ {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "تحجيم الصورة",
|
||||
"DESCRIPTION": "اي حجم اكبر من 4 (ما عدا التحجيم المزدوج 16 ) سيتم تغيير حجم الصورة بدون استعمال الذكاء الاصطناعي",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "ما من صورة محددة",
|
||||
"DESCRIPTION": "اختر صورة لتحجيمها من فضلك"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "خطأ في نسخ البيانات الوصفية",
|
||||
"DESCRIPTION": "تعذر نسخ البيانات الوصفية من الصورة الأصلية إلى الصورة المُنشأة. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "افتح التوثيقات",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "استكشاف خطأ"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "تحذير"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "تحذير البيانات الوصفية",
|
||||
"DESCRIPTION": "في بعض الأنظمة، قد لا تكون البيانات الوصفية مرئية في التنسيقات غير JPG. استخدم أدوات خاصة لعرض البيانات الوصفية إذا لزم الأمر."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -46,6 +46,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPIA METADADES D'IMATGE",
|
||||
"DESCRIPTION": "Mantín les metadades originals de la imatge (EXIF) en la imatge augmentada.",
|
||||
"SUGGEST_JPG_TITLE": "Canvi de Format Recomanat",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Per a una millor compatibilitat de metadades entre diferents sistemes, recomanem utilitzar el format JPG. Voleu canviar?",
|
||||
"CHANGE_TO_JPG": "Canvia a JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Mantín {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Escala d'imatge",
|
||||
"DESCRIPTION": "Qualsevol cosa per damunt de 4x (excepte 16x Double Upscayl) només redimensiona la imatge i no usa augment amb IA.",
|
||||
@ -257,12 +265,20 @@
|
||||
"TITLE": "No s'ha seleccionat cap imatge",
|
||||
"DESCRIPTION": "Seleccioneu una imatge per a augmentar"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Error de còpia de metadades",
|
||||
"DESCRIPTION": "No s'han pogut copiar les metadades de la imatge original a la imatge generada. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Obri documentació",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Soluciona problemes"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Avís"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Avís de metadades",
|
||||
"DESCRIPTION": "En alguns sistemes, les metadades poden no ser visibles en formats diferents de JPG. Utilitzeu eines específiques per a veure metadades si cal."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "BILD-METADATEN KOPIEREN",
|
||||
"DESCRIPTION": "Original-Bildmetadaten (EXIF) im verbesserten Bild beibehalten.",
|
||||
"SUGGEST_JPG_TITLE": "Empfohlene Formatänderung",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Für bessere Metadaten-Kompatibilität zwischen verschiedenen Systemen empfehlen wir das JPG-Format. Möchten Sie ändern?",
|
||||
"CHANGE_TO_JPG": "Zu JPG ändern",
|
||||
"KEEP_CURRENT_FORMAT": "{format} beibehalten"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Bildskala",
|
||||
"DESCRIPTION": "Alles über 4X (außer 16X Double Upscayl) skaliert das Bild nur und verwendet kein KI-Upscaling.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Kein Bild ausgewählt",
|
||||
"DESCRIPTION": "Bitte wähle ein Bild zum Upscaylen"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Metadaten-Kopierfehler",
|
||||
"DESCRIPTION": "Die Metadaten konnten nicht vom Originalbild in das generierte Bild kopiert werden. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Dokumentation öffnen",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Fehlerbehebung"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Warnung"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Metadaten-Warnung",
|
||||
"DESCRIPTION": "Auf einigen Systemen sind die Metadaten in anderen Formaten als JPG möglicherweise nicht sichtbar. Verwende gegebenenfalls spezielle Tools zum Anzeigen der Metadaten."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPY IMAGE METADATA",
|
||||
"DESCRIPTION": "Keep original image metadata (EXIF) in the upscaled image.",
|
||||
"SUGGEST_JPG_TITLE": "Recommended Format Change",
|
||||
"SUGGEST_JPG_DESCRIPTION": "For better metadata compatibility across different systems, we recommend using JPG format. Would you like to change?",
|
||||
"CHANGE_TO_JPG": "Change to JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Keep {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Image Scale",
|
||||
"DESCRIPTION": "Anything above 4X (except 16X Double Upscayl) only resizes the image and does not use AI upscaling.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "No image selected",
|
||||
"DESCRIPTION": "Please select an image to upscale"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Metadata Copy Error",
|
||||
"DESCRIPTION": "Could not copy metadata from the original image to the generated image. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Open Docs",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Troubleshoot"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Warning"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Metadata Warning",
|
||||
"DESCRIPTION": "On some systems, metadata may not be visible in formats other than JPG. Use specific tools to view metadata if needed."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPIAR METADATOS DE IMAGEN",
|
||||
"DESCRIPTION": "Mantener los metadatos originales de la imagen (EXIF) en la imagen aumentada.",
|
||||
"SUGGEST_JPG_TITLE": "Cambio de Formato Recomendado",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Para una mejor compatibilidad de metadatos entre diferentes sistemas, recomendamos usar el formato JPG. ¿Desea cambiar?",
|
||||
"CHANGE_TO_JPG": "Cambiar a JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Mantener {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Escala de imagen",
|
||||
"DESCRIPTION": "Cualquier cosa por encima de 4X (excepto 16X Double Upscayl) solo redimensiona la imagen y no usa aumento con IA.",
|
||||
@ -255,12 +263,20 @@
|
||||
"TITLE": "No se ha seleccionado imagen",
|
||||
"DESCRIPTION": "Por favor, selecciona una imagen para aumentar"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Error de Copia de Metadatos",
|
||||
"DESCRIPTION": "No se pudieron copiar los metadatos de la imagen original a la imagen generada. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Abrir documentación",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Solucionar problemas"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Advertencia"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Advertencia de metadatos",
|
||||
"DESCRIPTION": "En algunos sistemas, los metadatos pueden no ser visibles en formatos distintos a JPG. Usa herramientas específicas para ver los metadatos si es necesario."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPIER LES MÉTADONNÉES DE L'IMAGE",
|
||||
"DESCRIPTION": "Conserver les métadonnées originales de l'image (EXIF) dans l'image améliorée.",
|
||||
"SUGGEST_JPG_TITLE": "Changement de Format Recommandé",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Pour une meilleure compatibilité des métadonnées entre différents systèmes, nous recommandons d'utiliser le format JPG. Voulez-vous changer ?",
|
||||
"CHANGE_TO_JPG": "Changer en JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Garder {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Dimensions de l'image",
|
||||
"DESCRIPTION": "Tout ce qui dépasse 4X (sauf 16X Double Upscayl) ne fait que redimensionner l'image et n'utilise pas l'améliorateur AI.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Aucune image sélectionnée",
|
||||
"DESCRIPTION": "Veuillez sélectionner une image à suréchantillonner"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Erreur de Copie des Métadonnées",
|
||||
"DESCRIPTION": "Impossible de copier les métadonnées de l'image originale vers l'image générée. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Ouvrir la documentation",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Dépanner"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Avertissement"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Avertissement sur les métadonnées",
|
||||
"DESCRIPTION": "Sur certains systèmes, les métadonnées peuvent ne pas être visibles dans les formats autres que JPG. Utilisez des outils spécifiques pour visualiser les métadonnées si nécessaire."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "SALIN METADATA GAMBAR",
|
||||
"DESCRIPTION": "Pertahankan metadata gambar asli (EXIF) dalam gambar yang ditingkatkan.",
|
||||
"SUGGEST_JPG_TITLE": "Rekomendasi Perubahan Format",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Untuk kompatibilitas metadata yang lebih baik di berbagai sistem, kami menyarankan menggunakan format JPG. Apakah Anda ingin mengubah?",
|
||||
"CHANGE_TO_JPG": "Ubah ke JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Tetap {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Skala Gambar",
|
||||
"DESCRIPTION": "Apa pun di atas 4X (kecuali 16X Double Upscayl) hanya mengubah ukuran gambar dan tidak menggunakan peningkatan AI.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Tidak ada gambar yang dipilih",
|
||||
"DESCRIPTION": "Silakan pilih gambar untuk ditingkatkan kualitasnya"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Kesalahan Penyalinan Metadata",
|
||||
"DESCRIPTION": "Tidak dapat menyalin metadata dari gambar asli ke gambar yang dihasilkan. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Buka Dokumen",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Pemecahan Masalah"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Peringatan"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Peringatan Metadata",
|
||||
"DESCRIPTION": "Pada beberapa sistem, metadata mungkin tidak terlihat dalam format selain JPG. Gunakan alat khusus untuk melihat metadata jika diperlukan."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPIA METADATI IMMAGINE",
|
||||
"DESCRIPTION": "Mantieni i metadati originali dell'immagine (EXIF) nell'immagine sovracampionata.",
|
||||
"SUGGEST_JPG_TITLE": "Modifica Formato Consigliata",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Per una migliore compatibilità dei metadati tra sistemi diversi, consigliamo di utilizzare il formato JPG. Vuoi cambiare?",
|
||||
"CHANGE_TO_JPG": "Cambia in JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Mantieni {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Scala dell'immagine",
|
||||
"DESCRIPTION": "Qualsiasi valore superiore a 4X (eccetto 16X Double Upscayl) ridimensiona solo l'immagine e non utilizza l'upsampling AI.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Nessuna immagine selezionata",
|
||||
"DESCRIPTION": "Seleziona un'immagine da sovracampionare"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Errore di Copia Metadati",
|
||||
"DESCRIPTION": "Impossibile copiare i metadati dall'immagine originale all'immagine generata. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Apri la documentazione",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Risoluzione dei problemi"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Avviso"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Avviso sui metadati",
|
||||
"DESCRIPTION": "Su alcuni sistemi, i metadati potrebbero non essere visibili in formati diversi da JPG. Utilizza strumenti specifici per visualizzare i metadati se necessario."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "画像メタデータをコピー",
|
||||
"DESCRIPTION": "アップスケールされた画像に元の画像メタデータ(EXIF)を保持します。",
|
||||
"SUGGEST_JPG_TITLE": "推奨フォーマット変更",
|
||||
"SUGGEST_JPG_DESCRIPTION": "異なるシステム間でのメタデータの互換性を高めるため、JPG形式の使用をお勧めします。変更しますか?",
|
||||
"CHANGE_TO_JPG": "JPGに変更",
|
||||
"KEEP_CURRENT_FORMAT": "{format}を維持"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "画像スケール",
|
||||
"DESCRIPTION": "4X以上のスケール(16X Double Upscaylを除く)は、画像をリサイズするだけで、AIアップスケーリングは行われません。",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "画像が選択されていません",
|
||||
"DESCRIPTION": "アップスケールする画像を選択してください"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "メタデータのコピーエラー",
|
||||
"DESCRIPTION": "元画像のメタデータを生成された画像にコピーできませんでした。({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "ドキュメントを開く",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "トラブルシューティング"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "警告"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "メタデータの警告",
|
||||
"DESCRIPTION": "一部のシステムでは、JPG以外の形式ではメタデータが表示されない場合があります。必要に応じて専用のツールを使用してメタデータを表示してください。"
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "SALIN METADATA IMEJ",
|
||||
"DESCRIPTION": "Kekalkan metadata imej asal (EXIF) dalam imej yang telah dipertingkatkan.",
|
||||
"SUGGEST_JPG_TITLE": "Cadangan Perubahan Format",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Untuk keserasian metadata yang lebih baik antara sistem yang berbeza, kami mencadangkan menggunakan format JPG. Adakah anda ingin menukar?",
|
||||
"CHANGE_TO_JPG": "Tukar kepada JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Kekalkan {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Skala Imej",
|
||||
"DESCRIPTION": "Apa-apa melebihi 4X (kecuali 16X Double Upscayl) hanya mengubah saiz imej dan tidak menggunakan peningkatan AI.",
|
||||
@ -254,9 +262,22 @@
|
||||
"TITLE": "Tiada imej dipilih",
|
||||
"DESCRIPTION": "Sila pilih imej untuk diupscale"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Ralat Salinan Metadata",
|
||||
"DESCRIPTION": "Tidak dapat menyalin metadata dari imej asal ke imej yang dihasilkan. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Buka Dokumen",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Penyelesaian Masalah"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Amaran"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Amaran Metadata",
|
||||
"DESCRIPTION": "Pada sesetengah sistem, metadata mungkin tidak kelihatan dalam format selain JPG. Gunakan alat khusus untuk melihat metadata jika perlu."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
"COMING_SOON": "Akan datang!",
|
||||
"CATCHY_PHRASE_1": "Tiada lagi ralat, masalah perkakasan, kompromi kualiti atau masa pemuatan yang lama!",
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPIAR METADADOS DA IMAGEM",
|
||||
"DESCRIPTION": "Manter os metadados originais da imagem (EXIF) na imagem aprimorada.",
|
||||
"SUGGEST_JPG_TITLE": "Alteração de Formato Recomendada",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Para melhor compatibilidade de metadados entre diferentes sistemas, recomendamos usar o formato JPG. Deseja alterar?",
|
||||
"CHANGE_TO_JPG": "Mudar para JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Manter {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Redimensionar Imagem",
|
||||
"DESCRIPTION": "Tudo acima de 4X (exceto 16X Duplo Upscayl) apenas redimensiona a imagem e não usa aprimoramento de AI.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Nenhuma imagem selecionada",
|
||||
"DESCRIPTION": "Favor selecionar uma imagem para o upscale"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Erro ao Copiar Metadados",
|
||||
"DESCRIPTION": "Não foi possível copiar os metadados da imagem original para a imagem gerada. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Abrir Docs",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Resolução de Problemas"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Aviso"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Aviso de Metadados",
|
||||
"DESCRIPTION": "Em alguns sistemas, os metadados podem não ser visíveis em formatos diferentes de JPG. Use ferramentas específicas para visualizar metadados se necessário."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "COPIAR METADADOS DA IMAGEM",
|
||||
"DESCRIPTION": "Manter os metadados originais da imagem (EXIF) na imagem aprimorada.",
|
||||
"SUGGEST_JPG_TITLE": "Alteração de Formato Recomendada",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Para melhor compatibilidade de metadados entre diferentes sistemas, recomendamos usar o formato JPG. Deseja alterar?",
|
||||
"CHANGE_TO_JPG": "Mudar para JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Manter {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Escala da imagem",
|
||||
"DESCRIPTION": "Tudo o que seja acima de 4X (exceto 16X Upscayl duplo) apenas redimensiona a imagem e não utiliza aprimoramento de IA.",
|
||||
@ -255,12 +263,20 @@
|
||||
"TITLE": "Nenhuma imagem selecionada",
|
||||
"DESCRIPTION": "Por favor, selecione uma imagem a aprimorar"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Erro de cópia de metadados",
|
||||
"DESCRIPTION": "Não foi possível copiar os metadados da imagem original para a imagem gerada. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Abrir documentos",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Problemas"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Aviso"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Aviso de metadados",
|
||||
"DESCRIPTION": "Em alguns sistemas, os metadados podem não ser visíveis em formatos diferentes de JPG. Use ferramentas específicas para visualizar metadados, se necessário."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "КОПИРОВАТЬ МЕТАДАННЫЕ ИЗОБРАЖЕНИЯ",
|
||||
"DESCRIPTION": "Сохранить исходные метаданные изображения (EXIF) в улучшенном изображении.",
|
||||
"SUGGEST_JPG_TITLE": "Рекомендуемое изменение формата",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Для лучшей совместимости метаданных в разных системах мы рекомендуем использовать формат JPG. Хотите изменить?",
|
||||
"CHANGE_TO_JPG": "Изменить на JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Оставить {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Масштаб изображения",
|
||||
"DESCRIPTION": "Любое значение выше 4X (кроме двойного увеличения 16X) только изменяет размер изображения и не использует ИИ-увеличение.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Изображение не выбрано",
|
||||
"DESCRIPTION": "Пожалуйста, выберите изображение для увеличения"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Ошибка копирования метаданных",
|
||||
"DESCRIPTION": "Не удалось скопировать метаданные из исходного изображения в созданное изображение. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Открыть документацию",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Устранение неполадок"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Предупреждение"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Предупреждение о метаданных",
|
||||
"DESCRIPTION": "В некоторых системах метаданные могут не отображаться в форматах, отличных от JPG. При необходимости используйте специальные инструменты для просмотра метаданных."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "คัดลอกข้อมูลเมตาของภาพ",
|
||||
"DESCRIPTION": "เก็บข้อมูลเมตาของภาพต้นฉบับ (EXIF) ในภาพที่ปรับปรุงแล้ว",
|
||||
"SUGGEST_JPG_TITLE": "แนะนำการเปลี่ยนรูปแบบ",
|
||||
"SUGGEST_JPG_DESCRIPTION": "เพื่อให้เข้ากันได้ดีกับข้อมูลเมตาในระบบต่างๆ เราขอแนะนำให้ใช้รูปแบบ JPG คุณต้องการเปลี่ยนหรือไม่?",
|
||||
"CHANGE_TO_JPG": "เปลี่ยนเป็น JPG",
|
||||
"KEEP_CURRENT_FORMAT": "เก็บไว้เป็น {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "ขนาดรูป",
|
||||
"DESCRIPTION": "สิ่งที่มากกว่า 4 เท่า (ยกเว้น Upscayl 16 เท่า 2 รอบ) จะขยายขนาดรูปเท่านั้น ไม่มีการใช้ AI ในการขยาย",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "ไม่มีรูปที่ถูกเลือก",
|
||||
"DESCRIPTION": "โปรดเลือกรูปสำหรับขยาย"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "ข้อผิดพลาดในการคัดลอกข้อมูลเมตา",
|
||||
"DESCRIPTION": "ไม่สามารถคัดลอกข้อมูลเมตาจากภาพต้นฉบับไปยังภาพที่สร้างขึ้น ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "เปิดเอกสาร",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "การแก้ไขปัญหา"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "คำเตือน"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "คำเตือนเกี่ยวกับข้อมูลเมตา",
|
||||
"DESCRIPTION": "ในบางระบบ ข้อมูลเมตาอาจไม่แสดงในรูปแบบอื่นนอกเหนือจาก JPG ใช้เครื่องมือเฉพาะทางเพื่อดูข้อมูลเมตาหากจำเป็น"
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "GÖRSEL META VERİLERİNİ KOPYALA",
|
||||
"DESCRIPTION": "İyileştirilmiş görselde orijinal görsel meta verilerini (EXIF) koru.",
|
||||
"SUGGEST_JPG_TITLE": "Önerilen Format Değişikliği",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Farklı sistemler arasında daha iyi meta veri uyumluluğu için JPG formatını kullanmanızı öneriyoruz. Değiştirmek ister misiniz?",
|
||||
"CHANGE_TO_JPG": "JPG'ye Değiştir",
|
||||
"KEEP_CURRENT_FORMAT": "{format} Olarak Kalsın"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Görsel Ölçeği",
|
||||
"DESCRIPTION": "4X'ten büyük herhangi bir ayar (16X Çifte Upscayl dışında) yalnızca görüntüyü yeniden boyutlandırır ve AI ile iyileştirme yapmaz.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Görsel seçilmedi",
|
||||
"DESCRIPTION": "Lütfen iyileştirilecek bir görsel seçin."
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Meta Veri Kopyalama Hatası",
|
||||
"DESCRIPTION": "Orijinal görüntüden oluşturulan görüntüye meta veriler kopyalanamadı. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Dökümantasyonu açın",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Sorun giderme"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Uyarı"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Meta Veri Uyarısı",
|
||||
"DESCRIPTION": "Bazı sistemlerde, JPG dışındaki formatlarda meta veriler görüntülenemeyebilir. Gerekirse meta verileri görüntülemek için özel araçlar kullanın."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "КОПІЮВАТИ МЕТАДАНІ ЗОБРАЖЕННЯ",
|
||||
"DESCRIPTION": "Зберігати оригінальні метадані зображення (EXIF) у покращеному зображенні.",
|
||||
"SUGGEST_JPG_TITLE": "Рекомендована зміна формату",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Для кращої сумісності метаданих між різними системами ми рекомендуємо використовувати формат JPG. Бажаєте змінити?",
|
||||
"CHANGE_TO_JPG": "Змінити на JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Зберегти {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Масштаб зображення",
|
||||
"DESCRIPTION": "Будь-що вище 4X (окрім 16X подвійного збільшення) лише змінює розмір зображення без використання ШІ.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Зображення не обрано",
|
||||
"DESCRIPTION": "Будь ласка, оберіть зображення для обробки"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Помилка копіювання метаданих",
|
||||
"DESCRIPTION": "Не вдалося скопіювати метадані з вихідного зображення до створеного зображення. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Відкрити документацію",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Вирішення проблем"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Попередження"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Попередження про метадані",
|
||||
"DESCRIPTION": "На деяких системах метадані можуть не відображатися в форматах, відмінних від JPG. За потреби використовуйте спеціальні інструменти для перегляду метаданих."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "SAO CHÉP METADATA ẢNH",
|
||||
"DESCRIPTION": "Giữ metadata gốc của ảnh (EXIF) trong ảnh đã được nâng cao.",
|
||||
"SUGGEST_JPG_TITLE": "Đề Xuất Thay Đổi Định Dạng",
|
||||
"SUGGEST_JPG_DESCRIPTION": "Để có khả năng tương thích metadata tốt hơn trên các hệ thống khác nhau, chúng tôi khuyên bạn nên sử dụng định dạng JPG. Bạn có muốn thay đổi không?",
|
||||
"CHANGE_TO_JPG": "Chuyển sang JPG",
|
||||
"KEEP_CURRENT_FORMAT": "Giữ {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "Tỷ lệ Hình ảnh",
|
||||
"DESCRIPTION": "Bất kỳ tỷ lệ nào trên 4X (ngoại trừ 16X Double Upscayl) chỉ thay đổi kích thước hình ảnh mà không sử dụng tăng cường AI.",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "Không có hình ảnh nào được chọn",
|
||||
"DESCRIPTION": "Vui lòng chọn một hình ảnh để tăng cường"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "Lỗi Sao Chép Metadata",
|
||||
"DESCRIPTION": "Không thể sao chép metadata từ ảnh gốc sang ảnh đã tạo. ({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "Mở Tài liệu",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "Khắc phục sự cố"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "Cảnh báo"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "Cảnh báo về Metadata",
|
||||
"DESCRIPTION": "Trên một số hệ thống, metadata có thể không hiển thị trong các định dạng khác ngoài JPG. Sử dụng các công cụ chuyên dụng để xem metadata nếu cần."
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -44,6 +44,14 @@
|
||||
"JPG": "JPG",
|
||||
"WEBP": "WEBP"
|
||||
},
|
||||
"COPY_METADATA": {
|
||||
"TITLE": "复制图片元数据",
|
||||
"DESCRIPTION": "在增强后的图片中保留原始图片元数据(EXIF)。",
|
||||
"SUGGEST_JPG_TITLE": "推荐格式更改",
|
||||
"SUGGEST_JPG_DESCRIPTION": "为了在不同系统之间获得更好的元数据兼容性,我们建议使用JPG格式。您要更改吗?",
|
||||
"CHANGE_TO_JPG": "更改为JPG",
|
||||
"KEEP_CURRENT_FORMAT": "保持 {format}"
|
||||
},
|
||||
"IMAGE_SCALE": {
|
||||
"TITLE": "增强比例",
|
||||
"DESCRIPTION": "超过 4X(除 16X 双重升图外)只会调整图片大小,不会使用 AI 增强。",
|
||||
@ -254,12 +262,20 @@
|
||||
"TITLE": "未选择图片",
|
||||
"DESCRIPTION": "你还没选择图片哦 QwQ"
|
||||
},
|
||||
"METADATA_ERROR": {
|
||||
"TITLE": "元数据复制错误",
|
||||
"DESCRIPTION": "无法将原始图像的元数据复制到生成的图像中。({data})"
|
||||
},
|
||||
"OPEN_DOCS_TITLE": "打开文档",
|
||||
"OPEN_DOCS_BUTTON_TITLE": "排除故障"
|
||||
},
|
||||
"WARNING": {
|
||||
"GENERIC_WARNING": {
|
||||
"TITLE": "警告"
|
||||
},
|
||||
"METADATA_FORMAT": {
|
||||
"TITLE": "元数据警告",
|
||||
"DESCRIPTION": "在某些系统上,JPG 以外的格式可能无法显示元数据。如有需要,请使用专门的工具查看元数据。"
|
||||
}
|
||||
},
|
||||
"UPSCAYL_CLOUD": {
|
||||
|
@ -182,6 +182,13 @@ const Home = () => {
|
||||
description: data,
|
||||
});
|
||||
});
|
||||
// METADATA ERROR
|
||||
window.electron.on(ELECTRON_COMMANDS.METADATA_ERROR, (_, data: string) => {
|
||||
toast({
|
||||
title: t("ERRORS.METADATA_ERROR.TITLE"),
|
||||
description: data,
|
||||
});
|
||||
});
|
||||
// UPSCAYL ERROR
|
||||
window.electron.on(ELECTRON_COMMANDS.UPSCAYL_ERROR, (_, data: string) => {
|
||||
toast({
|
||||
|
Loading…
x
Reference in New Issue
Block a user