Merge branch 'main' into main
113
public/ghostscript-wasm/gs.js
Normal file
@@ -0,0 +1,113 @@
|
||||
async function Module(moduleArg={}){var moduleRtn;var f=moduleArg,aa="object"==typeof window,ba="undefined"!=typeof WorkerGlobalScope,k="object"==typeof process&&process.versions?.node&&"renderer"!=process.type,ca=!aa&&!k&&!ba;if(k){const {createRequire:a}=await import("module");var require=a(import.meta.url)}var da="./this.program",ea=(a,b)=>{throw b;},ia=import.meta.url,ja="",ka,la;
|
||||
if(k){if("object"!=typeof process||!process.versions?.node||"renderer"==process.type)throw Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");var ma=process.versions.node,na=ma.split(".").slice(0,3);na=1E4*na[0]+100*na[1]+1*na[2].split("-")[0];if(16E4>na)throw Error("This emscripten-generated code requires node v16.0.0 (detected v"+ma+")");var fs=require("fs");
|
||||
ia.startsWith("file:")&&(ja=require("path").dirname(require("url").fileURLToPath(ia))+"/");la=a=>{a=oa(a)?new URL(a):a;a=fs.readFileSync(a);m(Buffer.isBuffer(a));return a};ka=async a=>{a=oa(a)?new URL(a):a;a=fs.readFileSync(a,void 0);m(Buffer.isBuffer(a));return a};1<process.argv.length&&(da=process.argv[1].replace(/\\/g,"/"));process.argv.slice(2);ea=(a,b)=>{process.exitCode=a;throw b;}}else if(ca){if("object"==typeof process&&process.versions?.node&&"renderer"!=process.type||"object"==typeof window||
|
||||
"undefined"!=typeof WorkerGlobalScope)throw Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");}else if(aa||ba){try{ja=(new URL(".",ia)).href}catch{}if("object"!=typeof window&&"undefined"==typeof WorkerGlobalScope)throw Error("not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)");
|
||||
ba&&(la=a=>{var b=new XMLHttpRequest;b.open("GET",a,!1);b.responseType="arraybuffer";b.send(null);return new Uint8Array(b.response)});ka=async a=>{if(oa(a))return new Promise((c,d)=>{var e=new XMLHttpRequest;e.open("GET",a,!0);e.responseType="arraybuffer";e.onload=()=>{200==e.status||0==e.status&&e.response?c(e.response):d(e.status)};e.onerror=d;e.send(null)});var b=await fetch(a,{credentials:"same-origin"});if(b.ok)return b.arrayBuffer();throw Error(b.status+" : "+b.url);}}else throw Error("environment detection error");
|
||||
var p=console.log.bind(console),t=console.error.bind(console);m(!ca,"shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.");var pa;"object"!=typeof WebAssembly&&t("no native wasm support detected");var qa=!1,ra;function m(a,b){a||v("Assertion failed"+(b?": "+b:""))}var oa=a=>a.startsWith("file://");function sa(){var a=ta();m(0==(a&3));0==a&&(a+=4);x[a>>2]=34821223;x[a+4>>2]=2310721022;x[0]=1668509029}
|
||||
function ua(){if(!qa){var a=ta();0==a&&(a+=4);var b=x[a>>2],c=x[a+4>>2];34821223==b&&2310721022==c||v(`Stack overflow! Stack cookie has been overwritten at ${va(a)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${va(c)} ${va(b)}`);1668509029!=x[0]&&v("Runtime error: The application has corrupted its heap memory area (address zero)!")}}var wa=new Int16Array(1),xa=new Int8Array(wa.buffer);wa[0]=25459;
|
||||
if(115!==xa[0]||99!==xa[1])throw"Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)";function ya(a){Object.getOwnPropertyDescriptor(f,a)||Object.defineProperty(f,a,{configurable:!0,set(){v(`Attempt to set \`Module.${a}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`)}})}
|
||||
function y(a){return()=>m(!1,`call to '${a}' via reference taken before Wasm module initialization`)}function Aa(a){return"FS_createPath"===a||"FS_createDataFile"===a||"FS_createPreloadedFile"===a||"FS_preloadFile"===a||"FS_unlink"===a||"addRunDependency"===a||"FS_createLazyFile"===a||"FS_createDevice"===a||"removeRunDependency"===a}function Ba(a,b){"undefined"==typeof globalThis||Object.getOwnPropertyDescriptor(globalThis,a)||Object.defineProperty(globalThis,a,{configurable:!0,get(){b()}})}
|
||||
function Ca(a,b){Ba(a,()=>{z(`\`${a}\` is not longer defined by emscripten. ${b}`)})}Ca("buffer","Please use HEAP8.buffer or wasmMemory.buffer");Ca("asm","Please use wasmExports instead");function Da(a){Object.getOwnPropertyDescriptor(f,a)||Object.defineProperty(f,a,{configurable:!0,get(){var b=`'${a}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`;Aa(a)&&(b+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you");v(b)}})}
|
||||
var Ea,Fa,Ga,A,Ha,Ia,B,x,C,Ja=!1;function Ka(){var a=Ga.buffer;A=new Int8Array(a);Ia=new Int16Array(a);Ha=new Uint8Array(a);new Uint16Array(a);B=new Int32Array(a);x=new Uint32Array(a);new Float32Array(a);new Float64Array(a);C=new BigInt64Array(a);new BigUint64Array(a)}m("undefined"!=typeof Int32Array&&"undefined"!==typeof Float64Array&&void 0!=Int32Array.prototype.subarray&&void 0!=Int32Array.prototype.set,"JS engine does not provide full typed array support");var E=0,La=null,Ma={},I=null;
|
||||
function Na(a){E++;f.monitorRunDependencies?.(E);m(a,"addRunDependency requires an ID");m(!Ma[a]);Ma[a]=1;null===I&&"undefined"!=typeof setInterval&&(I=setInterval(()=>{if(qa)clearInterval(I),I=null;else{var b=!1,c;for(c in Ma)b||(b=!0,t("still waiting on run dependencies:")),t(`dependency: ${c}`);b&&t("(end of list)")}},1E4),I.unref?.())}
|
||||
function Oa(a){E--;f.monitorRunDependencies?.(E);m(a,"removeRunDependency requires an ID");m(Ma[a]);delete Ma[a];0==E&&(null!==I&&(clearInterval(I),I=null),La&&(a=La,La=null,a()))}function v(a){f.onAbort?.(a);a="Aborted("+a+")";t(a);qa=!0;a=new WebAssembly.RuntimeError(a);Fa?.(a);throw a;}
|
||||
function K(a,b){return(...c)=>{m(Ja,`native function \`${a}\` called before runtime initialization`);var d=L[a];m(d,`exported native function \`${a}\` not found`);m(c.length<=b,`native function \`${a}\` called with ${c.length} args but expects ${b}`);return d(...c)}}var Pa;async function Qa(a){if(!pa)try{var b=await ka(a);return new Uint8Array(b)}catch{}if(a==Pa&&pa)a=new Uint8Array(pa);else if(la)a=la(a);else throw"both async and sync fetching of the wasm failed";return a}
|
||||
async function Ra(a,b){try{var c=await Qa(a);return await WebAssembly.instantiate(c,b)}catch(d){t(`failed to asynchronously prepare wasm: ${d}`),oa(Pa)&&t(`warning: Loading from a file URI (${Pa}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`),v(d)}}
|
||||
async function Sa(a){var b=Pa;if(!pa&&!oa(b)&&!k)try{var c=fetch(b,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(c,a)}catch(d){t(`wasm streaming compile failed: ${d}`),t("falling back to ArrayBuffer instantiation")}return Ra(b,a)}class Ta{name="ExitStatus";constructor(a){this.message=`Program terminated with exit(${a})`;this.status=a}}
|
||||
var Ua=a=>{for(;0<a.length;)a.shift()(f)},Va=[],Wa=[],Xa=()=>{var a=f.preRun.shift();Wa.push(a)},Ya=!0,va=a=>{m("number"===typeof a);return"0x"+(a>>>0).toString(16).padStart(8,"0")},z=a=>{z.$||(z.$={});z.$[a]||(z.$[a]=1,k&&(a="warning: "+a),t(a))},Za="undefined"!=typeof TextDecoder?new TextDecoder:void 0,$a=(a,b=0)=>{var c=b;for(var d=c+void 0;a[c]&&!(c>=d);)++c;if(16<c-b&&a.buffer&&Za)return Za.decode(a.subarray(b,c));for(d="";b<c;){var e=a[b++];if(e&128){var g=a[b++]&63;if(192==(e&224))d+=String.fromCharCode((e&
|
||||
31)<<6|g);else{var h=a[b++]&63;224==(e&240)?e=(e&15)<<12|g<<6|h:(240!=(e&248)&&z("Invalid UTF-8 leading byte "+va(e)+" encountered when deserializing a UTF-8 string in wasm memory to a JS string!"),e=(e&7)<<18|g<<12|h<<6|a[b++]&63);65536>e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d},M=a=>{m("number"==typeof a,`UTF8ToString expects a number (got ${typeof a})`);return a?$a(Ha,a):""},ab=(a,b)=>{for(var c=0,d=a.length-
|
||||
1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a},bb=a=>{var b="/"===a.charAt(0),c="/"===a.slice(-1);(a=ab(a.split("/").filter(d=>!!d),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a},cb=a=>{var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&=b.slice(0,-1);return a+b},N=a=>a&&a.match(/([^\/]+|\/)\/*$/)[1],db=(a,b)=>bb(a+"/"+
|
||||
b),eb=()=>{if(k){var a=require("crypto");return b=>a.randomFillSync(b)}return b=>crypto.getRandomValues(b)},fb=a=>{(fb=eb())(a)},gb=(...a)=>{for(var b="",c=!1,d=a.length-1;-1<=d&&!c;d--){c=0<=d?a[d]:O.cwd();if("string"!=typeof c)throw new TypeError("Arguments to path.resolve must be strings");if(!c)return"";b=c+"/"+b;c="/"===c.charAt(0)}b=ab(b.split("/").filter(e=>!!e),!c).join("/");return(c?"/":"")+b||"."},hb=(a,b)=>{function c(h){for(var l=0;l<h.length&&""===h[l];l++);for(var r=h.length-1;0<=r&&
|
||||
""===h[r];r--);return l>r?[]:h.slice(l,r-l+1)}a=gb(a).slice(1);b=gb(b).slice(1);a=c(a.split("/"));b=c(b.split("/"));for(var d=Math.min(a.length,b.length),e=d,g=0;g<d;g++)if(a[g]!==b[g]){e=g;break}d=[];for(g=e;g<a.length;g++)d.push("..");d=d.concat(b.slice(e));return d.join("/")},ib=[],jb=a=>{for(var b=0,c=0;c<a.length;++c){var d=a.charCodeAt(c);127>=d?b++:2047>=d?b+=2:55296<=d&&57343>=d?(b+=4,++c):b+=3}return b},kb=(a,b,c,d)=>{m("string"===typeof a,`stringToUTF8Array expects a string (got ${typeof a})`);
|
||||
if(!(0<d))return 0;var e=c;d=c+d-1;for(var g=0;g<a.length;++g){var h=a.codePointAt(g);if(127>=h){if(c>=d)break;b[c++]=h}else if(2047>=h){if(c+1>=d)break;b[c++]=192|h>>6;b[c++]=128|h&63}else if(65535>=h){if(c+2>=d)break;b[c++]=224|h>>12;b[c++]=128|h>>6&63;b[c++]=128|h&63}else{if(c+3>=d)break;1114111<h&&z("Invalid Unicode code point "+va(h)+" encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).");b[c++]=240|h>>18;b[c++]=
|
||||
128|h>>12&63;b[c++]=128|h>>6&63;b[c++]=128|h&63;g++}}b[c]=0;return c-e},lb=a=>{var b=Array(jb(a)+1);a=kb(a,b,0,b.length);b.length=a;return b},mb=[];function nb(a,b){mb[a]={input:[],output:[],H:b};ob(a,pb)}
|
||||
var pb={open(a){var b=mb[a.node.rdev];if(!b)throw new O.g(43);a.tty=b;a.seekable=!1},close(a){a.tty.H.fsync(a.tty)},fsync(a){a.tty.H.fsync(a.tty)},read(a,b,c,d){if(!a.tty||!a.tty.H.ha)throw new O.g(60);for(var e=0,g=0;g<d;g++){try{var h=a.tty.H.ha(a.tty)}catch(l){throw new O.g(29);}if(void 0===h&&0===e)throw new O.g(6);if(null===h||void 0===h)break;e++;b[c+g]=h}e&&(a.node.atime=Date.now());return e},write(a,b,c,d){if(!a.tty||!a.tty.H.Z)throw new O.g(60);try{for(var e=0;e<d;e++)a.tty.H.Z(a.tty,b[c+
|
||||
e])}catch(g){throw new O.g(29);}d&&(a.node.mtime=a.node.ctime=Date.now());return e}},qb={ha(){a:{if(!ib.length){var a=null;if(k){var b=Buffer.alloc(256),c=0,d=process.stdin.fd;try{c=fs.readSync(d,b,0,256)}catch(e){if(e.toString().includes("EOF"))c=0;else throw e;}0<c&&(a=b.slice(0,c).toString("utf-8"))}else"undefined"!=typeof window&&"function"==typeof window.prompt&&(a=window.prompt("Input: "),null!==a&&(a+="\n"));if(!a){a=null;break a}ib=lb(a)}a=ib.shift()}return a},Z(a,b){null===b||10===b?(p($a(a.output)),
|
||||
a.output=[]):0!=b&&a.output.push(b)},fsync(a){0<a.output?.length&&(p($a(a.output)),a.output=[])},xa(){return{Qa:25856,Sa:5,Pa:191,Ra:35387,Oa:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ya(){return 0},za(){return[24,80]}},rb={Z(a,b){null===b||10===b?(t($a(a.output)),a.output=[]):0!=b&&a.output.push(b)},fsync(a){0<a.output?.length&&(t($a(a.output)),a.output=[])}},sb=()=>{v("internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported")},
|
||||
P={D:null,m(){return P.createNode(null,"/",16895,0)},createNode(a,b,c,d){if(24576===(c&61440)||O.isFIFO(c))throw new O.g(63);P.D||(P.D={dir:{node:{v:P.h.v,B:P.h.B,lookup:P.h.lookup,G:P.h.G,rename:P.h.rename,unlink:P.h.unlink,rmdir:P.h.rmdir,readdir:P.h.readdir,symlink:P.h.symlink},stream:{s:P.i.s}},file:{node:{v:P.h.v,B:P.h.B},stream:{s:P.i.s,read:P.i.read,write:P.i.write,M:P.i.M,P:P.i.P}},link:{node:{v:P.h.v,B:P.h.B,readlink:P.h.readlink},stream:{}},ba:{node:{v:P.h.v,B:P.h.B},stream:O.ta}});c=O.createNode(a,
|
||||
b,c,d);Q(c.mode)?(c.h=P.D.dir.node,c.i=P.D.dir.stream,c.j={}):O.isFile(c.mode)?(c.h=P.D.file.node,c.i=P.D.file.stream,c.o=0,c.j=null):40960===(c.mode&61440)?(c.h=P.D.link.node,c.i=P.D.link.stream):8192===(c.mode&61440)&&(c.h=P.D.ba.node,c.i=P.D.ba.stream);c.atime=c.mtime=c.ctime=Date.now();a&&(a.j[b]=c,a.atime=a.mtime=a.ctime=c.atime);return c},fb(a){return a.j?a.j.subarray?a.j.subarray(0,a.o):new Uint8Array(a.j):new Uint8Array(0)},h:{v(a){var b={};b.dev=8192===(a.mode&61440)?a.id:1;b.ino=a.id;b.mode=
|
||||
a.mode;b.nlink=1;b.uid=0;b.gid=0;b.rdev=a.rdev;Q(a.mode)?b.size=4096:O.isFile(a.mode)?b.size=a.o:40960===(a.mode&61440)?b.size=a.link.length:b.size=0;b.atime=new Date(a.atime);b.mtime=new Date(a.mtime);b.ctime=new Date(a.ctime);b.blksize=4096;b.blocks=Math.ceil(b.size/b.blksize);return b},B(a,b){for(var c of["mode","atime","mtime","ctime"])null!=b[c]&&(a[c]=b[c]);void 0!==b.size&&(b=b.size,a.o!=b&&(0==b?(a.j=null,a.o=0):(c=a.j,a.j=new Uint8Array(b),c&&a.j.set(c.subarray(0,Math.min(b,a.o))),a.o=b)))},
|
||||
lookup(){throw new O.g(44);},G(a,b,c,d){return P.createNode(a,b,c,d)},rename(a,b,c){try{var d=R(b,c)}catch(g){}if(d){if(Q(a.mode))for(var e in d.j)throw new O.g(55);tb(d)}delete a.parent.j[a.name];b.j[c]=a;a.name=c;b.ctime=b.mtime=a.parent.ctime=a.parent.mtime=Date.now()},unlink(a,b){delete a.j[b];a.ctime=a.mtime=Date.now()},rmdir(a,b){var c=R(a,b),d;for(d in c.j)throw new O.g(55);delete a.j[b];a.ctime=a.mtime=Date.now()},readdir(a){return[".","..",...Object.keys(a.j)]},symlink(a,b,c){a=P.createNode(a,
|
||||
b,41471,0);a.link=c;return a},readlink(a){if(40960!==(a.mode&61440))throw new O.g(28);return a.link}},i:{read(a,b,c,d,e){var g=a.node.j;if(e>=a.node.o)return 0;a=Math.min(a.node.o-e,d);m(0<=a);if(8<a&&g.subarray)b.set(g.subarray(e,e+a),c);else for(d=0;d<a;d++)b[c+d]=g[e+d];return a},write(a,b,c,d,e,g){m(!(b instanceof ArrayBuffer));b.buffer===A.buffer&&(g=!1);if(!d)return 0;a=a.node;a.mtime=a.ctime=Date.now();if(b.subarray&&(!a.j||a.j.subarray)){if(g)return m(0===e,"canOwn must imply no weird position inside the file"),
|
||||
a.j=b.subarray(c,c+d),a.o=d;if(0===a.o&&0===e)return a.j=b.slice(c,c+d),a.o=d;if(e+d<=a.o)return a.j.set(b.subarray(c,c+d),e),d}g=e+d;var h=a.j?a.j.length:0;h>=g||(g=Math.max(g,h*(1048576>h?2:1.125)>>>0),0!=h&&(g=Math.max(g,256)),h=a.j,a.j=new Uint8Array(g),0<a.o&&a.j.set(h.subarray(0,a.o),0));if(a.j.subarray&&b.subarray)a.j.set(b.subarray(c,c+d),e);else for(g=0;g<d;g++)a.j[e+g]=b[c+g];a.o=Math.max(a.o,e+d);return d},s(a,b,c){1===c?b+=a.position:2===c&&O.isFile(a.node.mode)&&(b+=a.node.o);if(0>b)throw new O.g(28);
|
||||
return b},M(a,b,c,d,e){if(!O.isFile(a.node.mode))throw new O.g(43);a=a.node.j;if(e&2||!a||a.buffer!==A.buffer){d=!0;e=sb();if(!e)throw new O.g(48);if(a){if(0<c||c+b<a.length)a.subarray?a=a.subarray(c,c+b):a=Array.prototype.slice.call(a,c,c+b);A.set(a,e)}}else d=!1,e=a.byteOffset;return{Ia:e,sa:d}},P(a,b,c,d){P.i.write(a,b,0,d,c,!1);return 0}}},ub=(a,b)=>{var c=0;a&&(c|=365);b&&(c|=146);return c},vb={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,
|
||||
EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,
|
||||
ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,
|
||||
EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135},wb=async a=>{var b=await ka(a);m(b,`Loading data file "${a}" failed (no arrayBuffer).`);return new Uint8Array(b)},xb=[],zb=async(a,b)=>{"undefined"!=typeof Browser&&yb();for(var c of xb)if(c.canHandle(b))return m("AsyncFunction"===
|
||||
c.handle.constructor.name,"Filesystem plugin handlers must be async functions (See #24914)"),c.handle(a,b);return a},Bb=async(a,b,c,d,e,g,h,l)=>{var r=b?gb(bb(a+"/"+b)):a,q;a:for(var u=q=`cp ${r}`;;){if(!Ma[q])break a;q=u+Math.random()}Na(q);try{if(u=c,"string"==typeof c&&(u=await wb(c)),u=await zb(u,r),l?.(),!g){c=u;g=b;a&&(a="string"==typeof a?a:Ab(a),g=b?bb(a+"/"+b):a);var n=ub(d,e),w=O.create(g,n);if(c){if("string"==typeof c){var F=Array(c.length);b=0;for(var G=c.length;b<G;++b)F[b]=c.charCodeAt(b);
|
||||
c=F}O.chmod(w,n|146);var D=O.open(w,577);O.write(D,c,0,c.length,0,h);O.close(D);O.chmod(w,n)}}}finally{Oa(q)}};
|
||||
function yb(){m(!O.T,"FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)");O.T=!0;b??=f.stdin;c??=f.stdout;a??=f.stderr;b?O.I("/dev","stdin",b):O.symlink("/dev/tty","/dev/stdin");c?O.I("/dev","stdout",null,c):O.symlink("/dev/tty","/dev/stdout");a?O.I("/dev","stderr",null,a):O.symlink("/dev/tty1","/dev/stderr");var a=O.open("/dev/stdin",0);var b=O.open("/dev/stdout",1);var c=O.open("/dev/stderr",
|
||||
1);m(0===a.fd,`invalid handle for stdin (${a.fd})`);m(1===b.fd,`invalid handle for stdout (${b.fd})`);m(2===c.fd,`invalid handle for stderr (${c.fd})`)}function ob(a,b){O.ea[a]={i:b}}function Q(a){return 16384===(a&61440)}function R(a,b){var c=Q(a.mode)?(c=S(a,"x"))?c:a.h.lookup?0:2:54;if(c)throw new O.g(c);for(c=O.C[Cb(a.id,b)];c;c=c.L){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return O.lookup(a,b)}
|
||||
function tb(a){var b=Cb(a.parent.id,a.name);if(O.C[b]===a)O.C[b]=a.L;else for(b=O.C[b];b;){if(b.L===a){b.L=a.L;break}b=b.L}}
|
||||
function T(a,b={}){if(!a)throw new O.g(44);b.S??(b.S=!0);"/"===a.charAt(0)||(a=O.cwd()+"/"+a);var c=0;a:for(;40>c;c++){a=a.split("/").filter(l=>!!l);for(var d=O.root,e="/",g=0;g<a.length;g++){var h=g===a.length-1;if(h&&b.parent)break;if("."!==a[g])if(".."===a[g])if(e=cb(e),O.N(d)){a=e+"/"+a.slice(g+1).join("/");c--;continue a}else d=d.parent;else{e=bb(e+"/"+a[g]);try{d=R(d,a[g])}catch(l){if(44===l?.l&&h&&b.Ca)return{path:e};throw l;}!d.A||h&&!b.S||(d=d.A.root);if(40960===(d.mode&61440)&&(!h||b.u)){if(!d.h.readlink)throw new O.g(52);
|
||||
d=d.h.readlink(d);"/"===d.charAt(0)||(d=cb(e)+"/"+d);a=d+"/"+a.slice(g+1).join("/");continue a}}}return{path:e,node:d}}throw new O.g(32);}function Ab(a){for(var b;;){if(O.N(a))return a=a.m.ma,b?"/"!==a[a.length-1]?`${a}/${b}`:a+b:a;b=b?`${a.name}/${b}`:a.name;a=a.parent}}function Cb(a,b){for(var c=0,d=0;d<b.length;d++)c=(c<<5)-c+b.charCodeAt(d)|0;return(a+c>>>0)%O.C.length}function Db(a){var b=Cb(a.parent.id,a.name);a.L=O.C[b];O.C[b]=a}
|
||||
function Eb(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function S(a,b){if(O.ia)return 0;if(!b.includes("r")||a.mode&292){if(b.includes("w")&&!(a.mode&146)||b.includes("x")&&!(a.mode&73))return 2}else return 2;return 0}function Fb(a,b){if(!Q(a.mode))return 54;try{return R(a,b),20}catch(c){}return S(a,"wx")}
|
||||
function Gb(a,b,c){try{var d=R(a,b)}catch(e){return e.l}if(a=S(a,"wx"))return a;if(c){if(!Q(d.mode))return 54;if(O.N(d)||Ab(d)===O.cwd())return 10}else if(Q(d.mode))return 31;return 0}function Hb(a,b){if(!a)throw new O.g(b);return a}function U(a){a=O.ga(a);if(!a)throw new O.g(8);return a}function Ib(a,b=-1){m(-1<=b);a=Object.assign(new O.ra,a);if(-1==b)a:{for(b=0;b<=O.aa;b++)if(!O.streams[b])break a;throw new O.g(33);}a.fd=b;return O.streams[b]=a}
|
||||
function Jb(a,b=-1){a=Ib(a,b);a.i?.Za?.(a);return a}function Kb(a,b,c){var d=a?.i.B;a=d?a:b;d??=b.h.B;Hb(d,63);d(a,c)}function Lb(a){var b=[];for(a=[a];a.length;){var c=a.pop();b.push(c);a.push(...c.O)}return b}function Mb(a){var b={Na:4096,bb:4096,blocks:1E6,Ma:5E5,La:5E5,files:O.Y,$a:O.Y-1,cb:42,flags:2,kb:255};a.h.oa&&Object.assign(b,a.h.oa(a.m.Ea.root));return b}function Nb(a,b,c){"undefined"==typeof c&&(c=b,b=438);return O.G(a,b|8192,c)}
|
||||
function Ob(a,b,c,d){Kb(a,b,{mode:c&4095|b.mode&-4096,ctime:Date.now(),fa:d})}function Pb(a,b,c){if(Q(b.mode))throw new O.g(31);if(!O.isFile(b.mode))throw new O.g(28);var d=S(b,"w");if(d)throw new O.g(d);Kb(a,b,{size:c,timestamp:Date.now()})}
|
||||
function Qb(a,b){try{var c=T(a,{u:!b});a=c.path}catch(e){}var d={N:!1,exists:!1,error:0,name:null,path:null,object:null,Fa:!1,Ha:null,Ga:null};try{c=T(a,{parent:!0}),d.Fa=!0,d.Ha=c.path,d.Ga=c.node,d.name=N(a),c=T(a,{u:!b}),d.exists=!0,d.path=c.path,d.object=c.node,d.name=c.node.name,d.N="/"===c.path}catch(e){d.error=e.l}return d}function Rb(a,b,c,d){a="string"==typeof a?a:Ab(a);b=bb(a+"/"+b);return O.create(b,ub(c,d))}
|
||||
function Sb(a){if(!(a.Aa||a.Ba||a.link||a.j)){if("undefined"!=typeof XMLHttpRequest)throw Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");try{a.j=la(a.url),a.o=a.j.length}catch(b){throw new O.g(29);}}}
|
||||
var O={root:null,O:[],ea:{},streams:[],Y:1,C:null,da:"/",T:!1,ia:!0,va:null,R:0,na:{},g:class extends Error{name="ErrnoError";constructor(a){super(Ja?M(Tb(a)):"");this.l=a;for(var b in vb)if(vb[b]===a){this.code=b;break}}},ra:class{F={};node=null;get object(){return this.node}set object(a){this.node=a}get flags(){return this.F.flags}set flags(a){this.F.flags=a}get position(){return this.F.position}set position(a){this.F.position=a}},qa:class{h={};i={};A=null;constructor(a,b,c,d){a||=this;this.parent=
|
||||
a;this.m=a.m;this.id=O.Y++;this.name=b;this.mode=c;this.rdev=d;this.atime=this.mtime=this.ctime=Date.now()}get read(){return 365===(this.mode&365)}set read(a){a?this.mode|=365:this.mode&=-366}get write(){return 146===(this.mode&146)}set write(a){a?this.mode|=146:this.mode&=-147}get Ba(){return Q(this.mode)}get Aa(){return 8192===(this.mode&61440)}},createNode(a,b,c,d){m("object"==typeof a);a=new O.qa(a,b,c,d);Db(a);return a},N(a){return a===a.parent},isFile(a){return 32768===(a&61440)},isFIFO(a){return 4096===
|
||||
(a&61440)},isSocket(a){return 49152===(a&49152)},aa:4096,ga:a=>O.streams[a],ta:{open(a){a.i=O.wa(a.node.rdev).i;a.i.open?.(a)},s(){throw new O.g(70);}},X:a=>a>>8,hb:a=>a&255,K:(a,b)=>a<<8|b,wa:a=>O.ea[a],pa(a,b){function c(h){m(0<O.R);O.R--;return b(h)}function d(h){if(h){if(!d.ua)return d.ua=!0,c(h)}else++g>=e.length&&c(null)}"function"==typeof a&&(b=a,a=!1);O.R++;1<O.R&&t(`warning: ${O.R} FS.syncfs operations in flight at once, probably just doing extra work`);var e=Lb(O.root.m),g=0;e.forEach(h=>
|
||||
{if(!h.type.pa)return d(null);h.type.pa(h,a,d)})},m(a,b,c){if("string"==typeof a)throw a;var d="/"===c,e=!c;if(d&&O.root)throw new O.g(10);if(!d&&!e){var g=T(c,{S:!1});c=g.path;g=g.node;if(g.A)throw new O.g(10);if(!Q(g.mode))throw new O.g(54);}b={type:a,Ea:b,ma:c,O:[]};a=a.m(b);a.m=b;b.root=a;d?O.root=a:g&&(g.A=b,g.m&&g.m.O.push(b));return a},qb(a){a=T(a,{S:!1});if(!a.node.A)throw new O.g(28);a=a.node;var b=a.A,c=Lb(b);Object.keys(O.C).forEach(d=>{for(d=O.C[d];d;){var e=d.L;c.includes(d.m)&&tb(d);
|
||||
d=e}});a.A=null;b=a.m.O.indexOf(b);m(-1!==b);a.m.O.splice(b,1)},lookup(a,b){return a.h.lookup(a,b)},G(a,b,c){var d=T(a,{parent:!0}).node;a=N(a);if(!a)throw new O.g(28);if("."===a||".."===a)throw new O.g(20);var e=Fb(d,a);if(e)throw new O.g(e);if(!d.h.G)throw new O.g(63);return d.h.G(d,a,b,c)},oa(a){return Mb(T(a,{u:!0}).node)},ob(a){return Mb(a.node)},create(a,b=438){return O.G(a,b&4095|32768,0)},mkdir(a,b=511){return O.G(a,b&1023|16384,0)},ib(a,b){var c=a.split("/"),d="",e;for(e of c)if(e){if(d||
|
||||
"/"===a.charAt(0))d+="/";d+=e;try{O.mkdir(d,b)}catch(g){if(20!=g.l)throw g;}}},symlink(a,b){if(!gb(a))throw new O.g(44);var c=T(b,{parent:!0}).node;if(!c)throw new O.g(44);b=N(b);var d=Fb(c,b);if(d)throw new O.g(d);if(!c.h.symlink)throw new O.g(63);return c.h.symlink(c,b,a)},rename(a,b){var c=cb(a),d=cb(b),e=N(a),g=N(b);var h=T(a,{parent:!0});var l=h.node;h=T(b,{parent:!0});h=h.node;if(!l||!h)throw new O.g(44);if(l.m!==h.m)throw new O.g(75);var r=R(l,e);a=hb(a,d);if("."!==a.charAt(0))throw new O.g(28);
|
||||
a=hb(b,c);if("."!==a.charAt(0))throw new O.g(55);try{var q=R(h,g)}catch(u){}if(r!==q){b=Q(r.mode);if(e=Gb(l,e,b))throw new O.g(e);if(e=q?Gb(h,g,b):Fb(h,g))throw new O.g(e);if(!l.h.rename)throw new O.g(63);if(r.A||q&&q.A)throw new O.g(10);if(h!==l&&(e=S(l,"w")))throw new O.g(e);tb(r);try{l.h.rename(r,h,g),r.parent=h}catch(u){throw u;}finally{Db(r)}}},rmdir(a){var b=T(a,{parent:!0}).node;a=N(a);var c=R(b,a),d=Gb(b,a,!0);if(d)throw new O.g(d);if(!b.h.rmdir)throw new O.g(63);if(c.A)throw new O.g(10);
|
||||
b.h.rmdir(b,a);tb(c)},readdir(a){a=T(a,{u:!0}).node;return Hb(a.h.readdir,54)(a)},unlink(a){var b=T(a,{parent:!0}).node;if(!b)throw new O.g(44);a=N(a);var c=R(b,a),d=Gb(b,a,!1);if(d)throw new O.g(d);if(!b.h.unlink)throw new O.g(63);if(c.A)throw new O.g(10);b.h.unlink(b,a);tb(c)},readlink(a){a=T(a).node;if(!a)throw new O.g(44);if(!a.h.readlink)throw new O.g(28);return a.h.readlink(a)},stat(a,b){a=T(a,{u:!b}).node;return Hb(a.h.v,63)(a)},fstat(a){var b=U(a);a=b.node;var c=b.i.v;b=c?b:a;c??=a.h.v;Hb(c,
|
||||
63);return c(b)},lstat(a){return O.stat(a,!0)},chmod(a,b,c){a="string"==typeof a?T(a,{u:!c}).node:a;Ob(null,a,b,c)},lchmod(a,b){O.chmod(a,b,!0)},fchmod(a,b){a=U(a);Ob(a,a.node,b,!1)},chown(a,b,c,d){a="string"==typeof a?T(a,{u:!d}).node:a;Kb(null,a,{timestamp:Date.now(),fa:d})},lchown(a,b,c){O.chown(a,b,c,!0)},fchown(a){a=U(a);Kb(a,a.node,{timestamp:Date.now(),fa:!1})},truncate(a,b){if(0>b)throw new O.g(28);a="string"==typeof a?T(a,{u:!0}).node:a;Pb(null,a,b)},eb(a,b){a=U(a);if(0>b||0===(a.flags&2097155))throw new O.g(28);
|
||||
Pb(a,a.node,b)},rb(a,b,c){a=T(a,{u:!0}).node;Hb(a.h.B,63)(a,{atime:b,mtime:c})},open(a,b,c=438){if(""===a)throw new O.g(44);if("string"==typeof b){var d={r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090}[b];if("undefined"==typeof d)throw Error(`Unknown file open mode: ${b}`);b=d}c=b&64?c&4095|32768:0;if("object"==typeof a)d=a;else{var e=a.endsWith("/");a=T(a,{u:!(b&131072),Ca:!0});d=a.node;a=a.path}var g=!1;if(b&64)if(d){if(b&128)throw new O.g(20);}else{if(e)throw new O.g(31);d=O.G(a,c|511,0);g=!0}if(!d)throw new O.g(44);
|
||||
8192===(d.mode&61440)&&(b&=-513);if(b&65536&&!Q(d.mode))throw new O.g(54);if(!g&&(e=d?40960===(d.mode&61440)?32:Q(d.mode)&&("r"!==Eb(b)||b&576)?31:S(d,Eb(b)):44))throw new O.g(e);b&512&&!g&&O.truncate(d,0);b&=-131713;e=Ib({node:d,path:Ab(d),flags:b,seekable:!0,position:0,i:d.i,Ja:[],error:!1});e.i.open&&e.i.open(e);g&&O.chmod(d,c&511);!f.logReadFiles||b&1||a in O.na||(O.na[a]=1);return e},close(a){if(null===a.fd)throw new O.g(8);a.J&&(a.J=null);try{a.i.close&&a.i.close(a)}catch(b){throw b;}finally{O.streams[a.fd]=
|
||||
null}a.fd=null},s(a,b,c){if(null===a.fd)throw new O.g(8);if(!a.seekable||!a.i.s)throw new O.g(70);if(0!=c&&1!=c&&2!=c)throw new O.g(28);a.position=a.i.s(a,b,c);a.Ja=[];return a.position},read(a,b,c,d,e){m(0<=c);if(0>d||0>e)throw new O.g(28);if(null===a.fd)throw new O.g(8);if(1===(a.flags&2097155))throw new O.g(8);if(Q(a.node.mode))throw new O.g(31);if(!a.i.read)throw new O.g(28);var g="undefined"!=typeof e;if(!g)e=a.position;else if(!a.seekable)throw new O.g(70);b=a.i.read(a,b,c,d,e);g||(a.position+=
|
||||
b);return b},write(a,b,c,d,e,g){m(0<=c);if(0>d||0>e)throw new O.g(28);if(null===a.fd)throw new O.g(8);if(0===(a.flags&2097155))throw new O.g(8);if(Q(a.node.mode))throw new O.g(31);if(!a.i.write)throw new O.g(28);a.seekable&&a.flags&1024&&O.s(a,0,2);var h="undefined"!=typeof e;if(!h)e=a.position;else if(!a.seekable)throw new O.g(70);b=a.i.write(a,b,c,d,e,g);h||(a.position+=b);return b},M(a,b,c,d,e){if(0!==(d&2)&&0===(e&2)&&2!==(a.flags&2097155))throw new O.g(2);if(1===(a.flags&2097155))throw new O.g(2);
|
||||
if(!a.i.M)throw new O.g(43);if(!b)throw new O.g(28);return a.i.M(a,b,c,d,e)},P(a,b,c,d,e){m(0<=c);return a.i.P?a.i.P(a,b,c,d,e):0},W(a,b,c){if(!a.i.W)throw new O.g(59);return a.i.W(a,b,c)},readFile(a,b={}){b.flags=b.flags||0;b.encoding=b.encoding||"binary";if("utf8"!==b.encoding&&"binary"!==b.encoding)throw Error(`Invalid encoding type "${b.encoding}"`);var c=O.open(a,b.flags);a=O.stat(a).size;var d=new Uint8Array(a);O.read(c,d,0,a,0);"utf8"===b.encoding&&(d=$a(d));O.close(c);return d},writeFile(a,
|
||||
b,c={}){c.flags=c.flags||577;a=O.open(a,c.flags,c.mode);"string"==typeof b&&(b=new Uint8Array(lb(b)));if(ArrayBuffer.isView(b))O.write(a,b,0,b.byteLength,void 0,c.Ta);else throw Error("Unsupported data type");O.close(a)},cwd:()=>O.da,chdir(a){a=T(a,{u:!0});if(null===a.node)throw new O.g(44);if(!Q(a.node.mode))throw new O.g(54);var b=S(a.node,"x");if(b)throw new O.g(b);O.da=a.path},mb(){O.T=!1;Ub(0);for(var a of O.streams)a&&O.close(a)},ab(a,b){a=Qb(a,b);return a.exists?a.object:null},Xa(a,b){a="string"==
|
||||
typeof a?a:Ab(a);for(b=b.split("/").reverse();b.length;){var c=b.pop();if(c){var d=bb(a+"/"+c);try{O.mkdir(d)}catch(e){if(20!=e.l)throw e;}a=d}}return d},I(a,b,c,d){a=db("string"==typeof a?a:Ab(a),b);b=ub(!!c,!!d);var e;(e=O.I).X??(e.X=64);e=O.K(O.I.X++,0);ob(e,{open(g){g.seekable=!1},close(){d?.buffer?.length&&d(10)},read(g,h,l,r){for(var q=0,u=0;u<r;u++){try{var n=c()}catch(w){throw new O.g(29);}if(void 0===n&&0===q)throw new O.g(6);if(null===n||void 0===n)break;q++;h[l+u]=n}q&&(g.node.atime=Date.now());
|
||||
return q},write(g,h,l,r){for(var q=0;q<r;q++)try{d(h[l+q])}catch(u){throw new O.g(29);}r&&(g.node.mtime=g.node.ctime=Date.now());return q}});return Nb(a,b,e)},Va(a,b,c,d,e){function g(n,w,F,G,D){n=n.node.j;if(D>=n.length)return 0;G=Math.min(n.length-D,G);m(0<=G);if(n.slice)for(var H=0;H<G;H++)w[F+H]=n[D+H];else for(H=0;H<G;H++)w[F+H]=n.get(D+H);return G}class h{V=!1;F=[];U=void 0;ka=0;ja=0;get(n){if(!(n>this.length-1||0>n)){var w=n%this.chunkSize;return this.U(n/this.chunkSize|0)[w]}}Da(n){this.U=
|
||||
n}la(){var n=new XMLHttpRequest;n.open("HEAD",c,!1);n.send(null);if(!(200<=n.status&&300>n.status||304===n.status))throw Error("Couldn't load "+c+". Status: "+n.status);var w=Number(n.getResponseHeader("Content-length")),F,G=(F=n.getResponseHeader("Accept-Ranges"))&&"bytes"===F;n=(F=n.getResponseHeader("Content-Encoding"))&&"gzip"===F;var D=1048576;G||(D=w);var H=this;H.Da(fa=>{var za=fa*D,ha=(fa+1)*D-1;ha=Math.min(ha,w-1);if("undefined"==typeof H.F[fa]){var Bc=H.F;if(za>ha)throw Error("invalid range ("+
|
||||
za+", "+ha+") or no bytes requested!");if(ha>w-1)throw Error("only "+w+" bytes available! programmer error!");var J=new XMLHttpRequest;J.open("GET",c,!1);w!==D&&J.setRequestHeader("Range","bytes="+za+"-"+ha);J.responseType="arraybuffer";J.overrideMimeType&&J.overrideMimeType("text/plain; charset=x-user-defined");J.send(null);if(!(200<=J.status&&300>J.status||304===J.status))throw Error("Couldn't load "+c+". Status: "+J.status);za=void 0!==J.response?new Uint8Array(J.response||[]):lb(J.responseText||
|
||||
"");Bc[fa]=za}if("undefined"==typeof H.F[fa])throw Error("doXHR failed!");return H.F[fa]});if(n||!w)D=w=1,D=w=this.U(0).length,p("LazyFiles on gzip forces download of the whole file when length is accessed");this.ka=w;this.ja=D;this.V=!0}get length(){this.V||this.la();return this.ka}get chunkSize(){this.V||this.la();return this.ja}}if("undefined"!=typeof XMLHttpRequest){if(!ba)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";
|
||||
var l=new h;var r=void 0}else r=c,l=void 0;var q=Rb(a,b,d,e);l?q.j=l:r&&(q.j=null,q.url=r);Object.defineProperties(q,{o:{get:function(){return this.j.length}}});var u={};Object.keys(q.i).forEach(n=>{var w=q.i[n];u[n]=(...F)=>{Sb(q);return w(...F)}});u.read=(n,w,F,G,D)=>{Sb(q);return g(n,w,F,G,D)};u.M=(n,w,F)=>{Sb(q);var G=sb();if(!G)throw new O.g(48);g(n,A,G,w,F);return{Ia:G,sa:!0}};q.i=u;return q},Ka(){v("FS.absolutePath has been removed; use PATH_FS.resolve instead")},Ua(){v("FS.createFolder has been removed; use FS.mkdir instead")},
|
||||
Wa(){v("FS.createLink has been removed; use FS.symlink instead")},gb(){v("FS.joinPath has been removed; use PATH.join instead")},jb(){v("FS.mmapAlloc has been replaced by the top level function mmapAlloc")},nb(){v("FS.standardizePath has been removed; use PATH.normalize instead")}};function Vb(a,b,c){if("/"===b.charAt(0))return b;a=-100===a?O.cwd():U(a).path;if(0==b.length){if(!c)throw new O.g(44);return a}return a+"/"+b}
|
||||
function Wb(a,b){x[a>>2]=b.dev;x[a+4>>2]=b.mode;x[a+8>>2]=b.nlink;x[a+12>>2]=b.uid;x[a+16>>2]=b.gid;x[a+20>>2]=b.rdev;C[a+24>>3]=BigInt(b.size);B[a+32>>2]=4096;B[a+36>>2]=b.blocks;var c=b.atime.getTime(),d=b.mtime.getTime(),e=b.ctime.getTime();C[a+40>>3]=BigInt(Math.floor(c/1E3));x[a+48>>2]=c%1E3*1E6;C[a+56>>3]=BigInt(Math.floor(d/1E3));x[a+64>>2]=d%1E3*1E6;C[a+72>>3]=BigInt(Math.floor(e/1E3));x[a+80>>2]=e%1E3*1E6;C[a+88>>3]=BigInt(b.ino);return 0}
|
||||
var Xb=void 0,V=()=>{m(void 0!=Xb);var a=B[+Xb>>2];Xb+=4;return a},W=(a,b,c)=>{m("number"==typeof c,"stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!");return kb(a,Ha,b,c)},Yb=0,Zb=a=>0===a%4&&(0!==a%100||0===a%400),$b=[0,31,60,91,121,152,182,213,244,274,305,335],ac=[0,31,59,90,120,151,181,212,243,273,304,334],bc={},cc=a=>{if(a instanceof Ta||"unwind"==a)return ra;ua();a instanceof WebAssembly.RuntimeError&&0>=X()&&t("Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)");
|
||||
ea(1,a)},dc=a=>{ra=a;Ya||0<Yb||(f.onExit?.(a),qa=!0);ea(a,new Ta(a))},fc=(a,b)=>{ra=a;ec();(Ya||0<Yb)&&!b&&(b=`program exited (with status: ${a}), but keepRuntimeAlive() is set (counter=${Yb}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`,Fa?.(b),t(b));dc(a)},gc=a=>{if(qa)t("user callback triggered after runtime exited or application aborted. Ignoring.");
|
||||
else try{if(a(),!(Ya||0<Yb))try{fc(ra)}catch(b){cc(b)}}catch(b){cc(b)}},hc={},jc=()=>{if(!ic){var a={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:("object"==typeof navigator&&navigator.language||"C").replace("-","_")+".UTF-8",_:da||"./this.program"},b;for(b in hc)void 0===hc[b]?delete a[b]:a[b]=hc[b];var c=[];for(b in a)c.push(`${b}=${a[b]}`);ic=c}return ic},ic,kc=(a,b,c,d)=>{for(var e=0,g=0;g<c;g++){var h=x[b>>2],l=x[b+4>>2];b+=8;h=O.read(a,A,h,l,d);if(0>h)return-1;
|
||||
e+=h;if(h<l)break;"undefined"!=typeof d&&(d+=h)}return e},lc=(a,b,c,d)=>{for(var e=0,g=0;g<c;g++){var h=x[b>>2],l=x[b+4>>2];b+=8;h=O.write(a,A,h,l,d);if(0>h)return-1;e+=h;if(h<l)break;"undefined"!=typeof d&&(d+=h)}return e},mc;O.Ya=(a,b,c,d,e,g,h,l,r,q)=>{Bb(a,b,c,d,e,l,r,q).then(g).catch(h)};O.lb=Bb;O.C=Array(4096);O.m(P,{},"/");O.mkdir("/tmp");O.mkdir("/home");O.mkdir("/home/web_user");
|
||||
(function(){O.mkdir("/dev");ob(O.K(1,3),{read:()=>0,write:(d,e,g,h)=>h,s:()=>0});Nb("/dev/null",O.K(1,3));nb(O.K(5,0),qb);nb(O.K(6,0),rb);Nb("/dev/tty",O.K(5,0));Nb("/dev/tty1",O.K(6,0));var a=new Uint8Array(1024),b=0,c=()=>{0===b&&(fb(a),b=a.byteLength);return a[--b]};O.I("/dev","random",c);O.I("/dev","urandom",c);O.mkdir("/dev/shm");O.mkdir("/dev/shm/tmp")})();
|
||||
(function(){O.mkdir("/proc");var a=O.mkdir("/proc/self");O.mkdir("/proc/self/fd");O.m({m(){var b=O.createNode(a,"fd",16895,73);b.i={s:P.i.s};b.h={lookup(c,d){c=+d;var e=U(c);c={parent:null,m:{ma:"fake"},h:{readlink:()=>e.path},id:c+1};return c.parent=c},readdir(){return Array.from(O.streams.entries()).filter(([,c])=>c).map(([c])=>c.toString())}};return b}},{},"/proc/self/fd")})();O.va={MEMFS:P};f.noExitRuntime&&(Ya=f.noExitRuntime);f.preloadPlugins&&(xb=f.preloadPlugins);f.print&&(p=f.print);
|
||||
f.printErr&&(t=f.printErr);f.wasmBinary&&(pa=f.wasmBinary);Object.getOwnPropertyDescriptor(f,"fetchSettings")&&v("`Module.fetchSettings` was supplied but `fetchSettings` not included in INCOMING_MODULE_JS_API");f.thisProgram&&(da=f.thisProgram);m("undefined"==typeof f.memoryInitializerPrefixURL,"Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead");m("undefined"==typeof f.pthreadMainPrefixURL,"Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead");
|
||||
m("undefined"==typeof f.cdInitializerPrefixURL,"Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead");m("undefined"==typeof f.filePackagePrefixURL,"Module.filePackagePrefixURL option was removed, use Module.locateFile instead");m("undefined"==typeof f.read,"Module.read option was removed");m("undefined"==typeof f.readAsync,"Module.readAsync option was removed (modify readAsync in JS)");m("undefined"==typeof f.readBinary,"Module.readBinary option was removed (modify readBinary in JS)");
|
||||
m("undefined"==typeof f.setWindowTitle,"Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)");m("undefined"==typeof f.TOTAL_MEMORY,"Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY");m("undefined"==typeof f.ENVIRONMENT,"Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)");m("undefined"==typeof f.STACK_SIZE,"STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time");
|
||||
m("undefined"==typeof f.wasmMemory,"Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally");m("undefined"==typeof f.INITIAL_MEMORY,"Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically");f.callMain=nc;f.FS=O;
|
||||
"writeI53ToI64 writeI53ToI64Clamped writeI53ToI64Signaling writeI53ToU64Clamped writeI53ToU64Signaling readI53FromI64 readI53FromU64 convertI32PairToI53 convertI32PairToI53Checked convertU32PairToI53 getTempRet0 setTempRet0 zeroMemory withStackSave inetPton4 inetNtop4 inetPton6 inetNtop6 readSockaddr writeSockaddr readEmAsmArgs jstoi_q autoResumeAudioContext dynCallLegacy getDynCaller dynCall runtimeKeepalivePush runtimeKeepalivePop asmjsMangle HandleAllocator getNativeTypeSize addOnInit addOnPostCtor addOnPreMain addOnExit STACK_SIZE STACK_ALIGN POINTER_SIZE ASSERTIONS ccall cwrap convertJsFunctionToWasm getEmptyTableSlot updateTableMap getFunctionAddress addFunction removeFunction intArrayToString AsciiToString stringToAscii UTF16ToString stringToUTF16 lengthBytesUTF16 UTF32ToString stringToUTF32 lengthBytesUTF32 stringToNewUTF8 writeArrayToMemory registerKeyEventCallback maybeCStringToJsString findEventTarget getBoundingClientRect fillMouseEventData registerMouseEventCallback registerWheelEventCallback registerUiEventCallback registerFocusEventCallback fillDeviceOrientationEventData registerDeviceOrientationEventCallback fillDeviceMotionEventData registerDeviceMotionEventCallback screenOrientation fillOrientationChangeEventData registerOrientationChangeEventCallback fillFullscreenChangeEventData registerFullscreenChangeEventCallback JSEvents_requestFullscreen JSEvents_resizeCanvasForFullscreen registerRestoreOldStyle hideEverythingExceptGivenElement restoreHiddenElements setLetterbox softFullscreenResizeWebGLRenderTarget doRequestFullscreen fillPointerlockChangeEventData registerPointerlockChangeEventCallback registerPointerlockErrorEventCallback requestPointerLock fillVisibilityChangeEventData registerVisibilityChangeEventCallback registerTouchEventCallback fillGamepadEventData registerGamepadEventCallback registerBeforeUnloadEventCallback fillBatteryEventData registerBatteryEventCallback setCanvasElementSize getCanvasElementSize jsStackTrace getCallstack convertPCtoSourceLocation wasiRightsToMuslOFlags wasiOFlagsToMuslOFlags safeSetTimeout setImmediateWrapped safeRequestAnimationFrame clearImmediateWrapped registerPostMainLoop registerPreMainLoop getPromise makePromise idsToPromises makePromiseCallback ExceptionInfo findMatchingCatch Browser_asyncPrepareDataCounter arraySum addDays getSocketFromFD getSocketAddress FS_mkdirTree _setNetworkCallback heapObjectForWebGLType toTypedArrayIndex webgl_enable_ANGLE_instanced_arrays webgl_enable_OES_vertex_array_object webgl_enable_WEBGL_draw_buffers webgl_enable_WEBGL_multi_draw webgl_enable_EXT_polygon_offset_clamp webgl_enable_EXT_clip_control webgl_enable_WEBGL_polygon_mode emscriptenWebGLGet computeUnpackAlignedImageSize colorChannelsInGlTextureFormat emscriptenWebGLGetTexPixelData emscriptenWebGLGetUniform webglGetUniformLocation webglPrepareUniformLocationsBeforeFirstUse webglGetLeftBracePos emscriptenWebGLGetVertexAttrib __glGetActiveAttribOrUniform writeGLArray registerWebGlEventCallback runAndAbortIfError ALLOC_NORMAL ALLOC_STACK allocate writeStringToMemory writeAsciiToMemory demangle stackTrace".split(" ").forEach(function(a){Ba(a,()=>
|
||||
{var b=`\`${a}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`,c=a;c.startsWith("_")||(c="$"+a);b+=` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${c}')`;Aa(a)&&(b+=". Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you");z(b)});Da(a)});"run addRunDependency removeRunDependency out err abort wasmMemory wasmExports HEAPF32 HEAPF64 HEAP8 HEAPU8 HEAP16 HEAPU16 HEAP32 HEAPU32 HEAP64 HEAPU64 writeStackCookie checkStackCookie INT53_MAX INT53_MIN bigintToI53Checked stackSave stackRestore stackAlloc ptrToString exitJS getHeapMax growMemory ENV ERRNO_CODES strError DNS Protocols Sockets timers warnOnce readEmAsmArgsArray getExecutableName handleException keepRuntimeAlive callUserCallback maybeExit asyncLoad alignMemory mmapAlloc wasmTable getUniqueRunDependency noExitRuntime addOnPreRun addOnPostRun freeTableIndexes functionsInTableMap setValue getValue PATH PATH_FS UTF8Decoder UTF8ArrayToString UTF8ToString stringToUTF8Array stringToUTF8 lengthBytesUTF8 intArrayFromString UTF16Decoder stringToUTF8OnStack JSEvents specialHTMLTargets findCanvasEventTarget currentFullscreenStrategy restoreOldWindowedStyle UNWIND_CACHE ExitStatus getEnvStrings checkWasiClock doReadv doWritev initRandomFill randomFill emSetImmediate emClearImmediate_deps emClearImmediate promiseMap uncaughtExceptionCount exceptionLast exceptionCaught Browser requestFullscreen requestFullScreen setCanvasSize getUserMedia createContext getPreloadedImageData__data wget MONTH_DAYS_REGULAR MONTH_DAYS_LEAP MONTH_DAYS_REGULAR_CUMULATIVE MONTH_DAYS_LEAP_CUMULATIVE isLeapYear ydayFromDate SYSCALLS preloadPlugins FS_createPreloadedFile FS_preloadFile FS_modeStringToFlags FS_getMode FS_stdin_getChar_buffer FS_stdin_getChar FS_unlink FS_createPath FS_createDevice FS_readFile FS_root FS_mounts FS_devices FS_streams FS_nextInode FS_nameTable FS_currentPath FS_initialized FS_ignorePermissions FS_filesystems FS_syncFSRequests FS_readFiles FS_lookupPath FS_getPath FS_hashName FS_hashAddNode FS_hashRemoveNode FS_lookupNode FS_createNode FS_destroyNode FS_isRoot FS_isMountpoint FS_isFile FS_isDir FS_isLink FS_isChrdev FS_isBlkdev FS_isFIFO FS_isSocket FS_flagsToPermissionString FS_nodePermissions FS_mayLookup FS_mayCreate FS_mayDelete FS_mayOpen FS_checkOpExists FS_nextfd FS_getStreamChecked FS_getStream FS_createStream FS_closeStream FS_dupStream FS_doSetAttr FS_chrdev_stream_ops FS_major FS_minor FS_makedev FS_registerDevice FS_getDevice FS_getMounts FS_syncfs FS_mount FS_unmount FS_lookup FS_mknod FS_statfs FS_statfsStream FS_statfsNode FS_create FS_mkdir FS_mkdev FS_symlink FS_rename FS_rmdir FS_readdir FS_readlink FS_stat FS_fstat FS_lstat FS_doChmod FS_chmod FS_lchmod FS_fchmod FS_doChown FS_chown FS_lchown FS_fchown FS_doTruncate FS_truncate FS_ftruncate FS_utime FS_open FS_close FS_isClosed FS_llseek FS_read FS_write FS_mmap FS_msync FS_ioctl FS_writeFile FS_cwd FS_chdir FS_createDefaultDirectories FS_createDefaultDevices FS_createSpecialDirectories FS_createStandardStreams FS_staticInit FS_init FS_quit FS_findObject FS_analyzePath FS_createFile FS_createDataFile FS_forceLoadFile FS_createLazyFile FS_absolutePath FS_createFolder FS_createLink FS_joinPath FS_mmapAlloc FS_standardizePath MEMFS TTY PIPEFS SOCKFS tempFixedLengthArray miniTempWebGLFloatBuffers miniTempWebGLIntBuffers GL AL GLUT EGL GLEW IDBStore SDL SDL_gfx allocateUTF8 allocateUTF8OnStack print printErr jstoi_s".split(" ").forEach(Da);
|
||||
var oc=f._main=y("_main"),Tb=y("_strerror"),Ub=y("_fflush"),ta=y("_emscripten_stack_get_end"),pc=y("__emscripten_timeout"),Y=y("_setThrew"),qc=y("_emscripten_stack_init"),Z=y("__emscripten_stack_restore"),rc=y("__emscripten_stack_alloc"),X=y("_emscripten_stack_get_current"),dynCall_v=y("dynCall_v"),dynCall_iii=y("dynCall_iii"),sc=y("dynCall_viii"),tc=y("dynCall_iiii"),uc=y("dynCall_ii"),dynCall_vi=y("dynCall_vi"),vc=y("dynCall_iiiii"),wc=y("dynCall_iiiiiiiii"),dynCall_vii=y("dynCall_vii"),xc=y("dynCall_iiji"),
|
||||
yc=y("dynCall_viiii"),zc=y("dynCall_viiiii"),Ac=y("dynCall_viiiiii"),Oc={__assert_fail:(a,b,c,d)=>v(`Assertion failed: ${M(a)}, at: `+[b?M(b):"unknown filename",c,d?M(d):"unknown function"]),__syscall_dup:function(a){try{var b=U(a);return Jb(b).fd}catch(c){if("undefined"==typeof O||"ErrnoError"!==c.name)throw c;return-c.l}},__syscall_dup3:function(a,b,c){try{var d=U(a);m(!c);if(d.fd===b)return-28;if(0>b||b>=O.aa)return-8;var e=O.ga(b);e&&O.close(e);return Jb(d,b).fd}catch(g){if("undefined"==typeof O||
|
||||
"ErrnoError"!==g.name)throw g;return-g.l}},__syscall_fcntl64:function(a,b,c){Xb=c;try{var d=U(a);switch(b){case 0:var e=V();if(0>e)break;for(;O.streams[e];)e++;return Jb(d,e).fd;case 1:case 2:return 0;case 3:return d.flags;case 4:return e=V(),d.flags|=e,0;case 12:return e=V(),Ia[e+0>>1]=2,0;case 13:case 14:return 0}return-28}catch(g){if("undefined"==typeof O||"ErrnoError"!==g.name)throw g;return-g.l}},__syscall_fstat64:function(a,b){try{return Wb(b,O.fstat(a))}catch(c){if("undefined"==typeof O||"ErrnoError"!==
|
||||
c.name)throw c;return-c.l}},__syscall_getdents64:function(a,b,c){try{var d=U(a);d.J||(d.J=O.readdir(d.path));a=0;var e=O.s(d,0,1),g=Math.floor(e/280),h=Math.min(d.J.length,g+Math.floor(c/280));for(c=g;c<h;c++){var l=d.J[c];if("."===l){var r=d.node.id;var q=4}else if(".."===l)r=T(d.path,{parent:!0}).node.id,q=4;else{try{var u=R(d.node,l)}catch(n){if(28===n?.l)continue;throw n;}r=u.id;q=8192===(u.mode&61440)?2:Q(u.mode)?4:40960===(u.mode&61440)?10:8}m(r);C[b+a>>3]=BigInt(r);C[b+a+8>>3]=BigInt(280*(c+
|
||||
1));Ia[b+a+16>>1]=280;A[b+a+18]=q;W(l,b+a+19,256);a+=280}O.s(d,280*c,0);return a}catch(n){if("undefined"==typeof O||"ErrnoError"!==n.name)throw n;return-n.l}},__syscall_ioctl:function(a,b,c){Xb=c;try{var d=U(a);switch(b){case 21509:return d.tty?0:-59;case 21505:if(!d.tty)return-59;if(d.tty.H.xa){a=[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];var e=V();B[e>>2]=25856;B[e+4>>2]=5;B[e+8>>2]=191;B[e+12>>2]=35387;for(var g=0;32>g;g++)A[e+g+17]=a[g]||0}return 0;case 21510:case 21511:case 21512:return d.tty?
|
||||
0:-59;case 21506:case 21507:case 21508:if(!d.tty)return-59;if(d.tty.H.ya)for(e=V(),a=[],g=0;32>g;g++)a.push(A[e+g+17]);return 0;case 21519:if(!d.tty)return-59;e=V();return B[e>>2]=0;case 21520:return d.tty?-28:-59;case 21537:case 21531:return e=V(),O.W(d,b,e);case 21523:if(!d.tty)return-59;d.tty.H.za&&(g=[24,80],e=V(),Ia[e>>1]=g[0],Ia[e+2>>1]=g[1]);return 0;case 21524:return d.tty?0:-59;case 21515:return d.tty?0:-59;default:return-28}}catch(h){if("undefined"==typeof O||"ErrnoError"!==h.name)throw h;
|
||||
return-h.l}},__syscall_lstat64:function(a,b){try{return a=M(a),Wb(b,O.lstat(a))}catch(c){if("undefined"==typeof O||"ErrnoError"!==c.name)throw c;return-c.l}},__syscall_newfstatat:function(a,b,c,d){try{b=M(b);var e=d&256,g=d&4096;d&=-6401;m(!d,`unknown flags in __syscall_newfstatat: ${d}`);b=Vb(a,b,g);return Wb(c,e?O.lstat(b):O.stat(b))}catch(h){if("undefined"==typeof O||"ErrnoError"!==h.name)throw h;return-h.l}},__syscall_openat:function(a,b,c,d){Xb=d;try{b=M(b);b=Vb(a,b);var e=d?V():0;return O.open(b,
|
||||
c,e).fd}catch(g){if("undefined"==typeof O||"ErrnoError"!==g.name)throw g;return-g.l}},__syscall_renameat:function(a,b,c,d){try{return b=M(b),d=M(d),b=Vb(a,b),d=Vb(c,d),O.rename(b,d),0}catch(e){if("undefined"==typeof O||"ErrnoError"!==e.name)throw e;return-e.l}},__syscall_rmdir:function(a){try{return a=M(a),O.rmdir(a),0}catch(b){if("undefined"==typeof O||"ErrnoError"!==b.name)throw b;return-b.l}},__syscall_stat64:function(a,b){try{return a=M(a),Wb(b,O.stat(a))}catch(c){if("undefined"==typeof O||"ErrnoError"!==
|
||||
c.name)throw c;return-c.l}},__syscall_unlinkat:function(a,b,c){try{b=M(b);b=Vb(a,b);if(c)if(512===c)O.rmdir(b);else return-28;else O.unlink(b);return 0}catch(d){if("undefined"==typeof O||"ErrnoError"!==d.name)throw d;return-d.l}},_abort_js:()=>v("native code called abort()"),_emscripten_runtime_keepalive_clear:()=>{Ya=!1;Yb=0},_emscripten_throw_longjmp:()=>{throw Infinity;},_gmtime_js:function(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);a=new Date(1E3*a);B[b>>2]=a.getUTCSeconds();
|
||||
B[b+4>>2]=a.getUTCMinutes();B[b+8>>2]=a.getUTCHours();B[b+12>>2]=a.getUTCDate();B[b+16>>2]=a.getUTCMonth();B[b+20>>2]=a.getUTCFullYear()-1900;B[b+24>>2]=a.getUTCDay();B[b+28>>2]=(a.getTime()-Date.UTC(a.getUTCFullYear(),0,1,0,0,0,0))/864E5|0},_localtime_js:function(a,b){a=-9007199254740992>a||9007199254740992<a?NaN:Number(a);a=new Date(1E3*a);B[b>>2]=a.getSeconds();B[b+4>>2]=a.getMinutes();B[b+8>>2]=a.getHours();B[b+12>>2]=a.getDate();B[b+16>>2]=a.getMonth();B[b+20>>2]=a.getFullYear()-1900;B[b+24>>
|
||||
2]=a.getDay();B[b+28>>2]=(Zb(a.getFullYear())?$b:ac)[a.getMonth()]+a.getDate()-1|0;B[b+36>>2]=-(60*a.getTimezoneOffset());var c=(new Date(a.getFullYear(),6,1)).getTimezoneOffset(),d=(new Date(a.getFullYear(),0,1)).getTimezoneOffset();B[b+32>>2]=(c!=d&&a.getTimezoneOffset()==Math.min(d,c))|0},_mktime_js:function(a){var b=new Date(B[a+20>>2]+1900,B[a+16>>2],B[a+12>>2],B[a+8>>2],B[a+4>>2],B[a>>2],0),c=B[a+32>>2],d=b.getTimezoneOffset(),e=(new Date(b.getFullYear(),6,1)).getTimezoneOffset(),g=(new Date(b.getFullYear(),
|
||||
0,1)).getTimezoneOffset(),h=Math.min(g,e);0>c?B[a+32>>2]=Number(e!=g&&h==d):0<c!=(h==d)&&(e=Math.max(g,e),b.setTime(b.getTime()+6E4*((0<c?h:e)-d)));B[a+24>>2]=b.getDay();B[a+28>>2]=(Zb(b.getFullYear())?$b:ac)[b.getMonth()]+b.getDate()-1|0;B[a>>2]=b.getSeconds();B[a+4>>2]=b.getMinutes();B[a+8>>2]=b.getHours();B[a+12>>2]=b.getDate();B[a+16>>2]=b.getMonth();B[a+20>>2]=b.getYear();a=b.getTime();return BigInt(isNaN(a)?-1:a/1E3)},_setitimer_js:(a,b)=>{bc[a]&&(clearTimeout(bc[a].id),delete bc[a]);if(!b)return 0;
|
||||
var c=setTimeout(()=>{m(a in bc);delete bc[a];gc(()=>pc(a,performance.now()))},b);bc[a]={id:c,pb:b};return 0},_tzset_js:(a,b,c,d)=>{var e=(new Date).getFullYear(),g=(new Date(e,0,1)).getTimezoneOffset();e=(new Date(e,6,1)).getTimezoneOffset();x[a>>2]=60*Math.max(g,e);B[b>>2]=Number(g!=e);b=h=>{var l=Math.abs(h);return`UTC${0<=h?"-":"+"}${String(Math.floor(l/60)).padStart(2,"0")}${String(l%60).padStart(2,"0")}`};a=b(g);b=b(e);m(a);m(b);m(16>=jb(a),`timezone name truncated to fit in TZNAME_MAX (${a})`);
|
||||
m(16>=jb(b),`timezone name truncated to fit in TZNAME_MAX (${b})`);e<g?(W(a,c,17),W(b,d,17)):(W(a,d,17),W(b,c,17))},clock_time_get:function(a,b,c){if(!(0<=a&&3>=a))return 28;C[c>>3]=BigInt(Math.round(1E6*(0===a?Date.now():performance.now())));return 0},emscripten_date_now:()=>Date.now(),emscripten_resize_heap:a=>{var b=Ha.length;a>>>=0;m(a>b);if(2147483648<a)return t(`Cannot enlarge memory, requested ${a} bytes, but the limit is ${2147483648} bytes!`),!1;for(var c=1;4>=c;c*=2){var d=b*(1+.2/c);d=
|
||||
Math.min(d,a+100663296);var e=Math,g=e.min;d=Math.max(a,d);m(65536,"alignment argument is required");e=g.call(e,2147483648,65536*Math.ceil(d/65536));a:{g=e;d=Ga.buffer.byteLength;try{Ga.grow((g-d+65535)/65536|0);Ka();var h=1;break a}catch(l){t(`growMemory: Attempted to grow heap from ${d} bytes to ${g} bytes, but got error: ${l}`)}h=void 0}if(h)return!0}t(`Failed to grow the heap from ${b} bytes to ${e} bytes, not enough memory!`);return!1},environ_get:(a,b)=>{var c=0,d=0,e;for(e of jc()){var g=b+
|
||||
c;x[a+d>>2]=g;c+=W(e,g,Infinity)+1;d+=4}return 0},environ_sizes_get:(a,b)=>{var c=jc();x[a>>2]=c.length;a=0;for(var d of c)a+=jb(d)+1;x[b>>2]=a;return 0},exit:fc,fd_close:function(a){try{var b=U(a);O.close(b);return 0}catch(c){if("undefined"==typeof O||"ErrnoError"!==c.name)throw c;return c.l}},fd_pread:function(a,b,c,d,e){d=-9007199254740992>d||9007199254740992<d?NaN:Number(d);try{if(isNaN(d))return 61;var g=U(a),h=kc(g,b,c,d);x[e>>2]=h;return 0}catch(l){if("undefined"==typeof O||"ErrnoError"!==
|
||||
l.name)throw l;return l.l}},fd_pwrite:function(a,b,c,d,e){d=-9007199254740992>d||9007199254740992<d?NaN:Number(d);try{if(isNaN(d))return 61;var g=U(a),h=lc(g,b,c,d);x[e>>2]=h;return 0}catch(l){if("undefined"==typeof O||"ErrnoError"!==l.name)throw l;return l.l}},fd_read:function(a,b,c,d){try{var e=U(a),g=kc(e,b,c);x[d>>2]=g;return 0}catch(h){if("undefined"==typeof O||"ErrnoError"!==h.name)throw h;return h.l}},fd_seek:function(a,b,c,d){b=-9007199254740992>b||9007199254740992<b?NaN:Number(b);try{if(isNaN(b))return 61;
|
||||
var e=U(a);O.s(e,b,c);C[d>>3]=BigInt(e.position);e.J&&0===b&&0===c&&(e.J=null);return 0}catch(g){if("undefined"==typeof O||"ErrnoError"!==g.name)throw g;return g.l}},fd_write:function(a,b,c,d){try{var e=U(a),g=lc(e,b,c);x[d>>2]=g;return 0}catch(h){if("undefined"==typeof O||"ErrnoError"!==h.name)throw h;return h.l}},invoke_ii:Cc,invoke_iii:Dc,invoke_iiii:Ec,invoke_iiiii:Fc,invoke_iiiiiiiii:Gc,invoke_iiji:Hc,invoke_vi:Ic,invoke_vii:Jc,invoke_viii:Kc,invoke_viiii:Lc,invoke_viiiii:Mc,invoke_viiiiii:Nc,
|
||||
proc_exit:dc},L=await (async function(){function a(d){L=d.exports;Ga=L.memory;m(Ga,"memory not found in wasm exports");Ka();mc=L.__indirect_function_table;m(mc,"table not found in wasm exports");d=L;f._main=oc=K("__main_argc_argv",2);Tb=K("strerror",1);Ub=K("fflush",1);ta=d.emscripten_stack_get_end;pc=K("_emscripten_timeout",2);Y=K("setThrew",2);qc=d.emscripten_stack_init;Z=d._emscripten_stack_restore;rc=d._emscripten_stack_alloc;X=d.emscripten_stack_get_current;dynCall_v=K("dynCall_v",
|
||||
1);dynCall_iii=K("dynCall_iii",3);sc=K("dynCall_viii",4);tc=K("dynCall_iiii",4);uc=K("dynCall_ii",2);dynCall_vi=K("dynCall_vi",2);vc=K("dynCall_iiiii",5);wc=K("dynCall_iiiiiiiii",9);dynCall_vii=K("dynCall_vii",3);xc=K("dynCall_iiji",4);yc=K("dynCall_viiii",5);zc=K("dynCall_viiiii",6);Ac=K("dynCall_viiiiii",7);Oa("wasm-instantiate");return L}Na("wasm-instantiate");var b=f,c={env:Oc,wasi_snapshot_preview1:Oc};if(f.instantiateWasm)return new Promise((d,e)=>{try{f.instantiateWasm(c,(g,h)=>{d(a(g,h))})}catch(g){t(`Module.instantiateWasm callback failed with error: ${g}`),
|
||||
e(g)}});Pa??=f.locateFile?f.locateFile?f.locateFile("gs.wasm",ja):ja+"gs.wasm":(new URL("gs.wasm",import.meta.url)).href;return function(d){m(f===b,"the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?");b=null;return a(d.instance)}(await Sa(c))}());function Ic(a,b){var c=X();try{dynCall_vi(a,b)}catch(d){Z(c);if(d!==d+0)throw d;Y(1,0)}}
|
||||
function Jc(a,b,c){var d=X();try{dynCall_vii(a,b,c)}catch(e){Z(d);if(e!==e+0)throw e;Y(1,0)}}function Cc(a,b){var c=X();try{return uc(a,b)}catch(d){Z(c);if(d!==d+0)throw d;Y(1,0)}}function Ec(a,b,c,d){var e=X();try{return tc(a,b,c,d)}catch(g){Z(e);if(g!==g+0)throw g;Y(1,0)}}function Dc(a,b,c){var d=X();try{return dynCall_iii(a,b,c)}catch(e){Z(d);if(e!==e+0)throw e;Y(1,0)}}function Kc(a,b,c,d){var e=X();try{sc(a,b,c,d)}catch(g){Z(e);if(g!==g+0)throw g;Y(1,0)}}
|
||||
function Lc(a,b,c,d,e){var g=X();try{yc(a,b,c,d,e)}catch(h){Z(g);if(h!==h+0)throw h;Y(1,0)}}function Hc(a,b,c,d){var e=X();try{return xc(a,b,c,d)}catch(g){Z(e);if(g!==g+0)throw g;Y(1,0)}}function Fc(a,b,c,d,e){var g=X();try{return vc(a,b,c,d,e)}catch(h){Z(g);if(h!==h+0)throw h;Y(1,0)}}function Mc(a,b,c,d,e,g){var h=X();try{zc(a,b,c,d,e,g)}catch(l){Z(h);if(l!==l+0)throw l;Y(1,0)}}function Nc(a,b,c,d,e,g,h){var l=X();try{Ac(a,b,c,d,e,g,h)}catch(r){Z(l);if(r!==r+0)throw r;Y(1,0)}}
|
||||
function Gc(a,b,c,d,e,g,h,l,r){var q=X();try{return wc(a,b,c,d,e,g,h,l,r)}catch(u){Z(q);if(u!==u+0)throw u;Y(1,0)}}var Pc;
|
||||
function nc(a=[]){m(0==E,'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])');m("undefined"===typeof Wa||0==Wa.length,"cannot call main when preRun functions remain to be called");var b=oc;a.unshift(da);var c=a.length,d=rc(4*(c+1)),e=d;a.forEach(h=>{var l=x,r=e>>2,q=jb(h)+1,u=rc(q);W(h,u,q);l[r]=u;e+=4});x[e>>2]=0;try{var g=b(c,d);fc(g,!0);return g}catch(h){return cc(h)}}
|
||||
function Qc(){function a(){m(!Pc);Pc=!0;f.calledRun=!0;if(!qa){m(!Ja);Ja=!0;ua();f.noFSInit||O.T||yb();L.__wasm_call_ctors();O.ia=!1;ua();Ea?.(f);f.onRuntimeInitialized?.();ya("onRuntimeInitialized");ua();if(f.postRun)for("function"==typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var b=f.postRun.shift();Va.push(b)}ya("postRun");Ua(Va)}}if(0<E)La=Qc;else{qc();sa();if(f.preRun)for("function"==typeof f.preRun&&(f.preRun=[f.preRun]);f.preRun.length;)Xa();ya("preRun");Ua(Wa);0<E?La=Qc:(f.setStatus?
|
||||
(f.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>f.setStatus(""),1);a()},1)):a(),ua())}}function ec(){var a=p,b=t,c=!1;p=t=()=>{c=!0};try{Ub(0),["stdout","stderr"].forEach(d=>{(d=Qb("/dev/"+d))&&mb[d.object.rdev]?.output?.length&&(c=!0)})}catch(d){}p=a;t=b;c&&z("stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.")}
|
||||
if(f.preInit)for("function"==typeof f.preInit&&(f.preInit=[f.preInit]);0<f.preInit.length;)f.preInit.shift()();ya("preInit");Qc();Ja?moduleRtn=f:moduleRtn=new Promise((a,b)=>{Ea=a;Fa=b});for(const a of Object.keys(f))a in moduleArg||Object.defineProperty(moduleArg,a,{configurable:!0,get(){v(`Access to module property ('${a}') is no longer possible via the module constructor argument; Instead, use the result of the module constructor.`)}});
|
||||
;return moduleRtn}export default Module;
|
||||
BIN
public/ghostscript-wasm/gs.wasm
Executable file
BIN
public/ghostscript-wasm/sRGB_IEC61966-2-1_no_black_scaling.icc
Normal file
BIN
public/images/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
public/images/favicon-192x192.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
public/images/favicon-512x512.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
7
public/images/favicon-no-bg.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg width="166" height="166" viewBox="0 0 166 166" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(40, 0)">
|
||||
<path d="M56.7848 80.9116L0 25.6211L24.8434 1.43151C26.8037 -0.47717 29.9814 -0.47717 31.9414 1.43151L85.177 53.2662L56.7848 80.9116Z" fill="#A5B4FC"/>
|
||||
<path d="M-1.30805e-05 80.7335L21.2939 101.467L42.5878 80.7335L21.2939 60L-1.30805e-05 80.7335Z" fill="#E0E7FF"/>
|
||||
<path d="M56.7848 83L81.6279 107.19C83.5881 109.098 83.5881 112.192 81.6279 114.101L28.3925 165.936L0 138.29L56.7848 83Z" fill="#6366F1"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 550 B |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 6.9 KiB |
@@ -1,5 +1,7 @@
|
||||
<svg width="166" height="166" viewBox="0 0 166 166" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g transform="translate(40, 0)">
|
||||
<!-- Circular Background -->
|
||||
<circle cx="83" cy="83" r="83" fill="#111827"/>
|
||||
<g transform="translate(48, 12) scale(0.85)">
|
||||
<path d="M56.7848 80.9116L0 25.6211L24.8434 1.43151C26.8037 -0.47717 29.9814 -0.47717 31.9414 1.43151L85.177 53.2662L56.7848 80.9116Z" fill="#A5B4FC"/>
|
||||
<path d="M-1.30805e-05 80.7335L21.2939 101.467L42.5878 80.7335L21.2939 60L-1.30805e-05 80.7335Z" fill="#E0E7FF"/>
|
||||
<path d="M56.7848 83L81.6279 107.19C83.5881 109.098 83.5881 112.192 81.6279 114.101L28.3925 165.936L0 138.29L56.7848 83Z" fill="#6366F1"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 550 B After Width: | Height: | Size: 640 B |
BIN
public/images/og-pdf-converter.png
Normal file
|
After Width: | Height: | Size: 750 KiB |
BIN
public/images/og-pdf-editor.png
Normal file
|
After Width: | Height: | Size: 722 KiB |
BIN
public/images/og-pdf-merge-split.png
Normal file
|
After Width: | Height: | Size: 770 KiB |
BIN
public/images/og-pdf-security.png
Normal file
|
After Width: | Height: | Size: 718 KiB |
BIN
public/images/og-tools.png
Normal file
|
After Width: | Height: | Size: 496 KiB |
3
public/libreoffice-wasm/browser.worker.global.js
Normal file
BIN
public/libreoffice-wasm/soffice.data.gz
Normal file
2
public/libreoffice-wasm/soffice.js
Normal file
BIN
public/libreoffice-wasm/soffice.wasm.gz
Executable file
1
public/libreoffice-wasm/soffice.worker.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");var vm=require("vm");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:f=>vm.runInThisContext(fs.readFileSync(f,"utf8"),{filename:f}),postMessage:msg=>parentPort.postMessage(msg),performance:global.performance||{now:Date.now}})}var initializedJS=false;function assert(condition,text){if(!condition)abort("Assertion failed: "+text)}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var out=()=>{throw"out() is not defined in worker.js."};var err=threadPrintErr;self.alert=threadAlert;var dbg=threadPrintErr;Module["instantiateWasm"]=(info,receiveInstance)=>{var module=Module["wasmModule"];Module["wasmModule"]=null;var instance=new WebAssembly.Instance(module,info);return receiveInstance(instance)};self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{if(e.data.cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{postMessage({"cmd":"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler:handler,args:args})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["workerID"]=e.data.workerID;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["__emscripten_thread_mailbox_await"](e.data.pthread_ptr);assert(e.data.pthread_ptr);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){Module["__embind_initialize_bindings"]();initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="checkMailbox"){if(initializedJS){Module["checkMailbox"]()}}else if(e.data.cmd){err(`worker.js received unknown command ${e.data.cmd}`);err(e.data)}}catch(ex){err(`worker.js onmessage() captured an uncaught exception: ${ex}`);if(ex?.stack){var lines=ex.stack.split("\n").slice(0,10);err(lines.join("\n"))};Module["__emscripten_thread_crashed"]?.();throw ex}}self.onmessage=handleMessage;
|
||||
@@ -1,318 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Startseite",
|
||||
"about": "Über uns",
|
||||
"contact": "Kontakt",
|
||||
"licensing": "Lizenzierung",
|
||||
"allTools": "Alle Werkzeuge",
|
||||
"openMainMenu": "Hauptmenü öffnen",
|
||||
"language": "Sprache"
|
||||
"nav": {
|
||||
"home": "Startseite",
|
||||
"about": "Über uns",
|
||||
"contact": "Kontakt",
|
||||
"licensing": "Lizenzierung",
|
||||
"allTools": "Alle Werkzeuge",
|
||||
"openMainMenu": "Hauptmenü öffnen",
|
||||
"language": "Sprache"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Lieben Sie BentoPDF? Helfen Sie uns, es kostenlos und Open Source zu halten!",
|
||||
"button": "Spenden"
|
||||
},
|
||||
"hero": {
|
||||
"title": "Das",
|
||||
"pdfToolkit": "PDF-Toolkit",
|
||||
"builtForPrivacy": "für maximale Privatsphäre",
|
||||
"noSignups": "Keine Anmeldung",
|
||||
"unlimitedUse": "Unbegrenzte Nutzung",
|
||||
"worksOffline": "Funktioniert offline",
|
||||
"startUsing": "Jetzt starten"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Verwendet von Unternehmen und Mitarbeitern bei"
|
||||
},
|
||||
"features": {
|
||||
"title": "Warum",
|
||||
"bentoPdf": "BentoPDF wählen?",
|
||||
"noSignup": {
|
||||
"title": "Keine Anmeldung",
|
||||
"description": "Sofort starten, keine Konten oder E-Mails erforderlich."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Das",
|
||||
"pdfToolkit": "PDF-Toolkit",
|
||||
"builtForPrivacy": "für maximale Privatsphäre",
|
||||
"noSignups": "Keine Anmeldung",
|
||||
"unlimitedUse": "Unbegrenzte Nutzung",
|
||||
"worksOffline": "Funktioniert offline",
|
||||
"startUsing": "Jetzt starten"
|
||||
"noUploads": {
|
||||
"title": "Kein Upload",
|
||||
"description": "100% clientseitig, Ihre Dateien verlassen nie Ihr Gerät."
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Verwendet von Unternehmen und Mitarbeitern bei"
|
||||
"foreverFree": {
|
||||
"title": "Für immer kostenlos",
|
||||
"description": "Alle Werkzeuge, keine Testversionen, keine Bezahlschranken."
|
||||
},
|
||||
"features": {
|
||||
"title": "Warum",
|
||||
"bentoPdf": "BentoPDF wählen?",
|
||||
"noSignup": {
|
||||
"title": "Keine Anmeldung",
|
||||
"description": "Sofort starten, keine Konten oder E-Mails erforderlich."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Kein Upload",
|
||||
"description": "100% clientseitig, Ihre Dateien verlassen nie Ihr Gerät."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Für immer kostenlos",
|
||||
"description": "Alle Werkzeuge, keine Testversionen, keine Bezahlschranken."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Keine Limits",
|
||||
"description": "Nutzen Sie so viel Sie wollen, ohne versteckte Grenzen."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Stapelverarbeitung",
|
||||
"description": "Verarbeiten Sie unbegrenzt viele PDFs auf einmal."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Blitzschnell",
|
||||
"description": "PDFs sofort verarbeiten, ohne Wartezeiten."
|
||||
}
|
||||
"noLimits": {
|
||||
"title": "Keine Limits",
|
||||
"description": "Nutzen Sie so viel Sie wollen, ohne versteckte Grenzen."
|
||||
},
|
||||
"tools": {
|
||||
"title": "Starten Sie mit",
|
||||
"toolsLabel": "Werkzeugen",
|
||||
"subtitle": "Klicken Sie auf ein Werkzeug, um den Datei-Uploader zu öffnen",
|
||||
"searchPlaceholder": "Werkzeug suchen (z.B. 'teilen', 'organisieren'...)",
|
||||
"backToTools": "Zurück zu den Werkzeugen"
|
||||
"batchProcessing": {
|
||||
"title": "Stapelverarbeitung",
|
||||
"description": "Verarbeiten Sie unbegrenzt viele PDFs auf einmal."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Klicken Sie, um eine Datei auszuwählen",
|
||||
"orDragAndDrop": "oder per Drag & Drop",
|
||||
"pdfOrImages": "PDFs oder Bilder",
|
||||
"filesNeverLeave": "Ihre Dateien verlassen nie Ihr Gerät.",
|
||||
"addMore": "Weitere Dateien hinzufügen",
|
||||
"clearAll": "Alle löschen"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Verarbeitung..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Hinweis",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Dokumentvorschau",
|
||||
"downloadAsPdf": "Als PDF herunterladen",
|
||||
"close": "Schließen"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Einstellungen",
|
||||
"shortcuts": "Tastenkürzel",
|
||||
"preferences": "Voreinstellungen",
|
||||
"displayPreferences": "Anzeige-Einstellungen",
|
||||
"searchShortcuts": "Tastenkürzel suchen...",
|
||||
"shortcutsInfo": "Halten Sie Tasten gedrückt, um ein Kürzel festzulegen. Änderungen werden automatisch gespeichert.",
|
||||
"shortcutsWarning": "⚠️ Vermeiden Sie gängige Browser-Tastenkürzel (Strg+W, Strg+T, Strg+N usw.), da diese möglicherweise nicht zuverlässig funktionieren.",
|
||||
"import": "Importieren",
|
||||
"export": "Exportieren",
|
||||
"resetToDefaults": "Auf Standard zurücksetzen",
|
||||
"fullWidthMode": "Vollbreite-Modus",
|
||||
"fullWidthDescription": "Verwenden Sie die volle Bildschirmbreite für alle Werkzeuge anstelle eines zentrierten Containers",
|
||||
"settingsAutoSaved": "Einstellungen werden automatisch gespeichert",
|
||||
"clickToSet": "Klicken zum Festlegen",
|
||||
"pressKeys": "Tasten drücken...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Tastenkombination bereits vergeben",
|
||||
"assignedTo": "ist bereits zugewiesen an:",
|
||||
"chooseDifferent": "Bitte wählen Sie eine andere Tastenkombination.",
|
||||
"reserved": "Warnung: Reservierte Tastenkombination",
|
||||
"commonlyUsed": "wird häufig verwendet für:",
|
||||
"unreliable": "Diese Tastenkombination funktioniert möglicherweise nicht zuverlässig oder könnte mit Browser-/Systemfunktionen in Konflikt geraten.",
|
||||
"useAnyway": "Möchten Sie sie trotzdem verwenden?",
|
||||
"resetTitle": "Tastenkombinationen zurücksetzen",
|
||||
"resetMessage": "Sind Sie sicher, dass Sie alle Tastenkombinationen auf die Standardwerte zurücksetzen möchten?<br><br>Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"importSuccessTitle": "Import erfolgreich",
|
||||
"importSuccessMessage": "Tastenkombinationen erfolgreich importiert!",
|
||||
"importFailTitle": "Import fehlgeschlagen",
|
||||
"importFailMessage": "Fehler beim Importieren der Tastenkombinationen. Ungültiges Dateiformat."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Warnung",
|
||||
"cancel": "Abbrechen",
|
||||
"proceed": "Fortfahren"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Ihre Daten verlassen nie Ihr Gerät",
|
||||
"weKeep": "Wir schützen",
|
||||
"yourInfoSafe": "Ihre Informationen",
|
||||
"byFollowingStandards": "nach globalen Sicherheitsstandards.",
|
||||
"processingLocal": "Die gesamte Verarbeitung erfolgt lokal auf Ihrem Gerät.",
|
||||
"gdpr": {
|
||||
"title": "DSGVO-konform",
|
||||
"description": "Schützt die personenbezogenen Daten und die Privatsphäre von Personen innerhalb der Europäischen Union."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA-konform",
|
||||
"description": "Gibt Einwohnern Kaliforniens Rechte darüber, wie ihre persönlichen Daten gesammelt, verwendet und weitergegeben werden."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA-konform",
|
||||
"description": "Legt Schutzmaßnahmen für den Umgang mit sensiblen Gesundheitsinformationen im US-Gesundheitssystem fest."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Häufig gestellte",
|
||||
"questions": "Fragen",
|
||||
"isFree": {
|
||||
"question": "Ist BentoPDF wirklich kostenlos?",
|
||||
"answer": "Ja, absolut. Alle Werkzeuge auf BentoPDF sind zu 100% kostenlos nutzbar, ohne Dateilimits, ohne Anmeldung und ohne Wasserzeichen. Wir glauben, dass jeder Zugang zu einfachen, leistungsstarken PDF-Werkzeugen verdient, ohne Bezahlschranke."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Sind meine Dateien sicher? Wo werden sie verarbeitet?",
|
||||
"answer": "Ihre Dateien sind so sicher wie möglich, da sie nie Ihren Computer verlassen. Die gesamte Verarbeitung erfolgt direkt in Ihrem Webbrowser (clientseitig). Wir laden Ihre Dateien nie auf einen Server hoch, sodass Sie die vollständige Privatsphäre und Kontrolle über Ihre Dokumente behalten."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Funktioniert es auf Mac, Windows und Mobilgeräten?",
|
||||
"answer": "Ja! Da BentoPDF vollständig in Ihrem Browser läuft, funktioniert es auf jedem Betriebssystem mit einem modernen Webbrowser, einschließlich Windows, macOS, Linux, iOS und Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Ist BentoPDF DSGVO-konform?",
|
||||
"answer": "Ja. BentoPDF ist vollständig DSGVO-konform. Da die gesamte Dateiverarbeitung lokal in Ihrem Browser erfolgt und wir Ihre Dateien nie sammeln oder übertragen, haben wir keinen Zugang zu Ihren Daten. Dies stellt sicher, dass Sie immer die Kontrolle über Ihre Dokumente haben."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Speichern oder verfolgen Sie meine Dateien?",
|
||||
"answer": "Nein. Wir speichern, verfolgen oder protokollieren Ihre Dateien niemals. Alles, was Sie auf BentoPDF tun, geschieht im Speicher Ihres Browsers und verschwindet, sobald Sie die Seite schließen. Es gibt keine Uploads, keine Verlaufsprotokolle und keine Server."
|
||||
},
|
||||
"different": {
|
||||
"question": "Was unterscheidet BentoPDF von anderen PDF-Werkzeugen?",
|
||||
"answer": "Die meisten PDF-Werkzeuge laden Ihre Dateien zur Verarbeitung auf einen Server hoch. BentoPDF tut das nie. Wir verwenden sichere, moderne Webtechnologie, um Ihre Dateien direkt in Ihrem Browser zu verarbeiten. Das bedeutet schnellere Leistung, stärkere Privatsphäre und vollständige Sicherheit."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Wie schützt mich die browserbasierte Verarbeitung?",
|
||||
"answer": "Durch die vollständige Ausführung in Ihrem Browser stellt BentoPDF sicher, dass Ihre Dateien nie Ihr Gerät verlassen. Dies eliminiert die Risiken von Server-Hacks, Datenschutzverletzungen oder unbefugtem Zugriff. Ihre Dateien bleiben Ihre — immer."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Verwenden Sie Cookies oder Analysen, um mich zu verfolgen?",
|
||||
"answer": "Uns liegt Ihre Privatsphäre am Herzen. BentoPDF verfolgt keine persönlichen Informationen. Wir verwenden Simple Analytics ausschließlich, um anonyme Besucherzahlen zu sehen. Das bedeutet, wir können wissen, wie viele Benutzer unsere Seite besuchen, aber wir wissen nie, wer Sie sind. Simple Analytics ist vollständig DSGVO-konform und respektiert Ihre Privatsphäre."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Was unsere",
|
||||
"users": "Nutzer",
|
||||
"say": "sagen"
|
||||
},
|
||||
"support": {
|
||||
"title": "Gefällt Ihnen meine Arbeit?",
|
||||
"description": "BentoPDF ist ein Leidenschaftsprojekt, entwickelt um ein kostenloses, privates und leistungsstarkes PDF-Toolkit für alle bereitzustellen. Wenn Sie es nützlich finden, erwägen Sie, die Entwicklung zu unterstützen. Jeder Kaffee hilft!",
|
||||
"buyMeCoffee": "Kauf mir einen Kaffee"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2025 BentoPDF. Alle Rechte vorbehalten.",
|
||||
"version": "Version",
|
||||
"company": "Unternehmen",
|
||||
"aboutUs": "Über uns",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Kontakt",
|
||||
"legal": "Rechtliches",
|
||||
"termsAndConditions": "Nutzungsbedingungen",
|
||||
"privacyPolicy": "Datenschutzrichtlinie",
|
||||
"followUs": "Folgen Sie uns"
|
||||
},
|
||||
"merge": {
|
||||
"title": "PDFs zusammenführen",
|
||||
"description": "Kombinieren Sie ganze Dateien oder wählen Sie bestimmte Seiten zum Zusammenführen in ein neues Dokument.",
|
||||
"fileMode": "Datei-Modus",
|
||||
"pageMode": "Seiten-Modus",
|
||||
"howItWorks": "So funktioniert es:",
|
||||
"fileModeInstructions": [
|
||||
"Klicken und ziehen Sie das Symbol, um die Reihenfolge der Dateien zu ändern.",
|
||||
"Im Feld \"Seiten\" für jede Datei können Sie Bereiche angeben (z.B. \"1-3, 5\"), um nur diese Seiten zusammenzuführen.",
|
||||
"Lassen Sie das Feld \"Seiten\" leer, um alle Seiten dieser Datei einzuschließen."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Alle Seiten Ihrer hochgeladenen PDFs werden unten angezeigt.",
|
||||
"Ziehen Sie einfach die einzelnen Seitenvorschauen per Drag & Drop, um die gewünschte Reihenfolge für Ihre neue Datei zu erstellen."
|
||||
],
|
||||
"mergePdfs": "PDFs zusammenführen"
|
||||
},
|
||||
"common": {
|
||||
"page": "Seite",
|
||||
"pages": "Seiten",
|
||||
"of": "von",
|
||||
"download": "Herunterladen",
|
||||
"cancel": "Abbrechen",
|
||||
"save": "Speichern",
|
||||
"delete": "Löschen",
|
||||
"edit": "Bearbeiten",
|
||||
"add": "Hinzufügen",
|
||||
"remove": "Entfernen",
|
||||
"loading": "Laden...",
|
||||
"error": "Fehler",
|
||||
"success": "Erfolg",
|
||||
"file": "Datei",
|
||||
"files": "Dateien"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Wir glauben PDF-Werkzeuge sollten",
|
||||
"subtitle": "schnell, privat und kostenlos sein.",
|
||||
"noCompromises": "Ohne Kompromisse."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Unsere Mission",
|
||||
"description": "Die umfassendste PDF-Toolbox bereitzustellen, die Ihre Privatsphäre respektiert und niemals eine Bezahlung verlangt. Wir glauben, dass wichtige Dokumentenwerkzeuge für jeden, überall und ohne Barrieren zugänglich sein sollten."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Unsere Kernphilosophie",
|
||||
"title": "Privatsphäre zuerst. Immer.",
|
||||
"description": "In einer Zeit, in der Daten eine Ware sind, gehen wir einen anderen Weg. Die gesamte Verarbeitung für Bentopdf-Werkzeuge erfolgt lokal in Ihrem Browser. Das bedeutet, Ihre Dateien berühren niemals unsere Server, wir sehen Ihre Dokumente nie und verfolgen nicht, was Sie tun. Ihre Dokumente bleiben vollständig und unmissverständlich privat. Es ist nicht nur eine Funktion; es ist unser Fundament."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Warum",
|
||||
"speed": {
|
||||
"title": "Für Geschwindigkeit gebaut",
|
||||
"description": "Kein Warten auf Uploads oder Downloads zu einem Server. Durch die Verarbeitung von Dateien direkt in Ihrem Browser mit modernen Webtechnologien wie WebAssembly bieten wir unvergleichliche Geschwindigkeit für alle unsere Werkzeuge."
|
||||
},
|
||||
"free": {
|
||||
"title": "Komplett kostenlos",
|
||||
"description": "Keine Testversionen, keine Abonnements, keine versteckten Gebühren und keine \"Premium\"-Funktionen als Geiseln. Wir glauben, leistungsstarke PDF-Werkzeuge sollten ein öffentliches Gut sein, kein Profitcenter."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Kein Konto erforderlich",
|
||||
"description": "Beginnen Sie sofort mit der Nutzung eines beliebigen Werkzeugs. Wir brauchen weder Ihre E-Mail noch ein Passwort oder persönliche Informationen. Ihr Workflow sollte reibungslos und anonym sein."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Open-Source-Geist",
|
||||
"description": "Mit Transparenz im Blick entwickelt. Wir nutzen großartige Open-Source-Bibliotheken wie PDF-lib und PDF.js und glauben an die gemeinschaftsgetriebene Bemühung, leistungsstarke Werkzeuge für alle zugänglich zu machen."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Bereit loszulegen?",
|
||||
"description": "Schließen Sie sich Tausenden von Benutzern an, die Bentopdf für ihre täglichen Dokumentenbedürfnisse vertrauen. Erleben Sie den Unterschied, den Privatsphäre und Leistung machen können.",
|
||||
"button": "Alle Werkzeuge erkunden"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Kontakt aufnehmen",
|
||||
"subtitle": "Wir freuen uns, von Ihnen zu hören. Ob Sie eine Frage, Feedback oder eine Funktionsanfrage haben, zögern Sie nicht, uns zu kontaktieren.",
|
||||
"email": "Sie können uns direkt per E-Mail erreichen unter:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Lizenzierung für",
|
||||
"subtitle": "Wählen Sie die Lizenz, die Ihren Anforderungen entspricht."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "PDFs hochladen",
|
||||
"upload": "Hochladen",
|
||||
"addBlankPage": "Leere Seite hinzufügen",
|
||||
"edit": "Bearbeiten:",
|
||||
"undo": "Rückgängig",
|
||||
"redo": "Wiederholen",
|
||||
"reset": "Zurücksetzen",
|
||||
"selection": "Auswahl:",
|
||||
"selectAll": "Alles auswählen",
|
||||
"deselectAll": "Auswahl aufheben",
|
||||
"rotate": "Drehen:",
|
||||
"rotateLeft": "Links",
|
||||
"rotateRight": "Rechts",
|
||||
"transform": "Transformieren:",
|
||||
"duplicate": "Duplizieren",
|
||||
"split": "Teilen",
|
||||
"clear": "Löschen:",
|
||||
"delete": "Entfernen",
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Auswahl herunterladen",
|
||||
"exportPdf": "PDF exportieren",
|
||||
"uploadPdfFiles": "PDF-Dateien auswählen",
|
||||
"dragAndDrop": "PDF-Dateien hierhin ziehen oder klicken zum Auswählen",
|
||||
"selectFiles": "Dateien auswählen",
|
||||
"renderingPages": "Seiten werden gerendert...",
|
||||
"actions": {
|
||||
"duplicatePage": "Diese Seite duplizieren",
|
||||
"deletePage": "Diese Seite löschen",
|
||||
"insertPdf": "PDF nach dieser Seite einfügen",
|
||||
"toggleSplit": "Trennung nach dieser Seite umschalten"
|
||||
},
|
||||
"pleaseWait": "Bitte warten",
|
||||
"pagesRendering": "Seiten werden noch gerendert. Bitte warten...",
|
||||
"noPagesSelected": "Keine Seiten ausgewählt",
|
||||
"selectOnePage": "Bitte wählen Sie mindestens eine Seite zum Herunterladen aus.",
|
||||
"noPages": "Keine Seiten",
|
||||
"noPagesToExport": "Keine Seiten zum Exportieren vorhanden.",
|
||||
"renderingTitle": "Seiten-Vorschau wird gerendert",
|
||||
"errorRendering": "Fehler beim Rendern der Seitenvorschau",
|
||||
"error": "Fehler",
|
||||
"failedToLoad": "Laden fehlgeschlagen"
|
||||
"lightningFast": {
|
||||
"title": "Blitzschnell",
|
||||
"description": "PDFs sofort verarbeiten, ohne Wartezeiten."
|
||||
}
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Starten Sie mit",
|
||||
"toolsLabel": "Werkzeugen",
|
||||
"subtitle": "Klicken Sie auf ein Werkzeug, um den Datei-Uploader zu öffnen",
|
||||
"searchPlaceholder": "Werkzeug suchen (z.B. 'teilen', 'organisieren'...)",
|
||||
"backToTools": "Zurück zu den Werkzeugen",
|
||||
"firstLoadNotice": "Der erste Ladevorgang dauert einen Moment, da wir unsere Konvertierungs-Engine herunterladen. Danach erfolgt jedes Laden sofort."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Klicken Sie, um eine Datei auszuwählen",
|
||||
"orDragAndDrop": "oder per Drag & Drop",
|
||||
"pdfOrImages": "PDFs oder Bilder",
|
||||
"filesNeverLeave": "Ihre Dateien verlassen nie Ihr Gerät.",
|
||||
"addMore": "Weitere Dateien hinzufügen",
|
||||
"clearAll": "Alle löschen"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Verarbeitung..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Hinweis",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Dokumentvorschau",
|
||||
"downloadAsPdf": "Als PDF herunterladen",
|
||||
"close": "Schließen"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Einstellungen",
|
||||
"shortcuts": "Tastenkürzel",
|
||||
"preferences": "Voreinstellungen",
|
||||
"displayPreferences": "Anzeige-Einstellungen",
|
||||
"searchShortcuts": "Tastenkürzel suchen...",
|
||||
"shortcutsInfo": "Halten Sie Tasten gedrückt, um ein Kürzel festzulegen. Änderungen werden automatisch gespeichert.",
|
||||
"shortcutsWarning": "⚠️ Vermeiden Sie gängige Browser-Tastenkürzel (Strg+W, Strg+T, Strg+N usw.), da diese möglicherweise nicht zuverlässig funktionieren.",
|
||||
"import": "Importieren",
|
||||
"export": "Exportieren",
|
||||
"resetToDefaults": "Auf Standard zurücksetzen",
|
||||
"fullWidthMode": "Vollbreite-Modus",
|
||||
"fullWidthDescription": "Verwenden Sie die volle Bildschirmbreite für alle Werkzeuge anstelle eines zentrierten Containers",
|
||||
"settingsAutoSaved": "Einstellungen werden automatisch gespeichert",
|
||||
"clickToSet": "Klicken zum Festlegen",
|
||||
"pressKeys": "Tasten drücken...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Tastenkombination bereits vergeben",
|
||||
"assignedTo": "ist bereits zugewiesen an:",
|
||||
"chooseDifferent": "Bitte wählen Sie eine andere Tastenkombination.",
|
||||
"reserved": "Warnung: Reservierte Tastenkombination",
|
||||
"commonlyUsed": "wird häufig verwendet für:",
|
||||
"unreliable": "Diese Tastenkombination funktioniert möglicherweise nicht zuverlässig oder könnte mit Browser-/Systemfunktionen in Konflikt geraten.",
|
||||
"useAnyway": "Möchten Sie sie trotzdem verwenden?",
|
||||
"resetTitle": "Tastenkombinationen zurücksetzen",
|
||||
"resetMessage": "Sind Sie sicher, dass Sie alle Tastenkombinationen auf die Standardwerte zurücksetzen möchten?<br><br>Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"importSuccessTitle": "Import erfolgreich",
|
||||
"importSuccessMessage": "Tastenkombinationen erfolgreich importiert!",
|
||||
"importFailTitle": "Import fehlgeschlagen",
|
||||
"importFailMessage": "Fehler beim Importieren der Tastenkombinationen. Ungültiges Dateiformat."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Warnung",
|
||||
"cancel": "Abbrechen",
|
||||
"proceed": "Fortfahren"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Ihre Daten verlassen nie Ihr Gerät",
|
||||
"weKeep": "Wir schützen",
|
||||
"yourInfoSafe": "Ihre Informationen",
|
||||
"byFollowingStandards": "nach globalen Sicherheitsstandards.",
|
||||
"processingLocal": "Die gesamte Verarbeitung erfolgt lokal auf Ihrem Gerät.",
|
||||
"gdpr": {
|
||||
"title": "DSGVO-konform",
|
||||
"description": "Schützt die personenbezogenen Daten und die Privatsphäre von Personen innerhalb der Europäischen Union."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA-konform",
|
||||
"description": "Gibt Einwohnern Kaliforniens Rechte darüber, wie ihre persönlichen Daten gesammelt, verwendet und weitergegeben werden."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA-konform",
|
||||
"description": "Legt Schutzmaßnahmen für den Umgang mit sensiblen Gesundheitsinformationen im US-Gesundheitssystem fest."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Häufig gestellte",
|
||||
"questions": "Fragen",
|
||||
"isFree": {
|
||||
"question": "Ist BentoPDF wirklich kostenlos?",
|
||||
"answer": "Ja, absolut. Alle Werkzeuge auf BentoPDF sind zu 100% kostenlos nutzbar, ohne Dateilimits, ohne Anmeldung und ohne Wasserzeichen. Wir glauben, dass jeder Zugang zu einfachen, leistungsstarken PDF-Werkzeugen verdient, ohne Bezahlschranke."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Sind meine Dateien sicher? Wo werden sie verarbeitet?",
|
||||
"answer": "Ihre Dateien sind so sicher wie möglich, da sie nie Ihren Computer verlassen. Die gesamte Verarbeitung erfolgt direkt in Ihrem Webbrowser (clientseitig). Wir laden Ihre Dateien nie auf einen Server hoch, sodass Sie die vollständige Privatsphäre und Kontrolle über Ihre Dokumente behalten."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Funktioniert es auf Mac, Windows und Mobilgeräten?",
|
||||
"answer": "Ja! Da BentoPDF vollständig in Ihrem Browser läuft, funktioniert es auf jedem Betriebssystem mit einem modernen Webbrowser, einschließlich Windows, macOS, Linux, iOS und Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Ist BentoPDF DSGVO-konform?",
|
||||
"answer": "Ja. BentoPDF ist vollständig DSGVO-konform. Da die gesamte Dateiverarbeitung lokal in Ihrem Browser erfolgt und wir Ihre Dateien nie sammeln oder übertragen, haben wir keinen Zugang zu Ihren Daten. Dies stellt sicher, dass Sie immer die Kontrolle über Ihre Dokumente haben."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Speichern oder verfolgen Sie meine Dateien?",
|
||||
"answer": "Nein. Wir speichern, verfolgen oder protokollieren Ihre Dateien niemals. Alles, was Sie auf BentoPDF tun, geschieht im Speicher Ihres Browsers und verschwindet, sobald Sie die Seite schließen. Es gibt keine Uploads, keine Verlaufsprotokolle und keine Server."
|
||||
},
|
||||
"different": {
|
||||
"question": "Was unterscheidet BentoPDF von anderen PDF-Werkzeugen?",
|
||||
"answer": "Die meisten PDF-Werkzeuge laden Ihre Dateien zur Verarbeitung auf einen Server hoch. BentoPDF tut das nie. Wir verwenden sichere, moderne Webtechnologie, um Ihre Dateien direkt in Ihrem Browser zu verarbeiten. Das bedeutet schnellere Leistung, stärkere Privatsphäre und vollständige Sicherheit."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Wie schützt mich die browserbasierte Verarbeitung?",
|
||||
"answer": "Durch die vollständige Ausführung in Ihrem Browser stellt BentoPDF sicher, dass Ihre Dateien nie Ihr Gerät verlassen. Dies eliminiert die Risiken von Server-Hacks, Datenschutzverletzungen oder unbefugtem Zugriff. Ihre Dateien bleiben Ihre — immer."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Verwenden Sie Cookies oder Analysen, um mich zu verfolgen?",
|
||||
"answer": "Uns liegt Ihre Privatsphäre am Herzen. BentoPDF verfolgt keine persönlichen Informationen. Wir verwenden Simple Analytics ausschließlich, um anonyme Besucherzahlen zu sehen. Das bedeutet, wir können wissen, wie viele Benutzer unsere Seite besuchen, aber wir wissen nie, wer Sie sind. Simple Analytics ist vollständig DSGVO-konform und respektiert Ihre Privatsphäre."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Was unsere",
|
||||
"users": "Nutzer",
|
||||
"say": "sagen"
|
||||
},
|
||||
"support": {
|
||||
"title": "Gefällt Ihnen meine Arbeit?",
|
||||
"description": "BentoPDF ist ein Leidenschaftsprojekt, entwickelt um ein kostenloses, privates und leistungsstarkes PDF-Toolkit für alle bereitzustellen. Wenn Sie es nützlich finden, erwägen Sie, die Entwicklung zu unterstützen. Jeder Kaffee hilft!",
|
||||
"buyMeCoffee": "Kauf mir einen Kaffee"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Alle Rechte vorbehalten.",
|
||||
"version": "Version",
|
||||
"company": "Unternehmen",
|
||||
"aboutUs": "Über uns",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Kontakt",
|
||||
"legal": "Rechtliches",
|
||||
"termsAndConditions": "Nutzungsbedingungen",
|
||||
"privacyPolicy": "Datenschutzrichtlinie",
|
||||
"followUs": "Folgen Sie uns"
|
||||
},
|
||||
"merge": {
|
||||
"title": "PDFs zusammenführen",
|
||||
"description": "Kombinieren Sie ganze Dateien oder wählen Sie bestimmte Seiten zum Zusammenführen in ein neues Dokument.",
|
||||
"fileMode": "Datei-Modus",
|
||||
"pageMode": "Seiten-Modus",
|
||||
"howItWorks": "So funktioniert es:",
|
||||
"fileModeInstructions": [
|
||||
"Klicken und ziehen Sie das Symbol, um die Reihenfolge der Dateien zu ändern.",
|
||||
"Im Feld \"Seiten\" für jede Datei können Sie Bereiche angeben (z.B. \"1-3, 5\"), um nur diese Seiten zusammenzuführen.",
|
||||
"Lassen Sie das Feld \"Seiten\" leer, um alle Seiten dieser Datei einzuschließen."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Alle Seiten Ihrer hochgeladenen PDFs werden unten angezeigt.",
|
||||
"Ziehen Sie einfach die einzelnen Seitenvorschauen per Drag & Drop, um die gewünschte Reihenfolge für Ihre neue Datei zu erstellen."
|
||||
],
|
||||
"mergePdfs": "PDFs zusammenführen"
|
||||
},
|
||||
"common": {
|
||||
"page": "Seite",
|
||||
"pages": "Seiten",
|
||||
"of": "von",
|
||||
"download": "Herunterladen",
|
||||
"cancel": "Abbrechen",
|
||||
"save": "Speichern",
|
||||
"delete": "Löschen",
|
||||
"edit": "Bearbeiten",
|
||||
"add": "Hinzufügen",
|
||||
"remove": "Entfernen",
|
||||
"loading": "Laden...",
|
||||
"error": "Fehler",
|
||||
"success": "Erfolg",
|
||||
"file": "Datei",
|
||||
"files": "Dateien"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Wir glauben PDF-Werkzeuge sollten",
|
||||
"subtitle": "schnell, privat und kostenlos sein.",
|
||||
"noCompromises": "Ohne Kompromisse."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Unsere Mission",
|
||||
"description": "Die umfassendste PDF-Toolbox bereitzustellen, die Ihre Privatsphäre respektiert und niemals eine Bezahlung verlangt. Wir glauben, dass wichtige Dokumentenwerkzeuge für jeden, überall und ohne Barrieren zugänglich sein sollten."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Unsere Kernphilosophie",
|
||||
"title": "Privatsphäre zuerst. Immer.",
|
||||
"description": "In einer Zeit, in der Daten eine Ware sind, gehen wir einen anderen Weg. Die gesamte Verarbeitung für Bentopdf-Werkzeuge erfolgt lokal in Ihrem Browser. Das bedeutet, Ihre Dateien berühren niemals unsere Server, wir sehen Ihre Dokumente nie und verfolgen nicht, was Sie tun. Ihre Dokumente bleiben vollständig und unmissverständlich privat. Es ist nicht nur eine Funktion; es ist unser Fundament."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Warum",
|
||||
"speed": {
|
||||
"title": "Für Geschwindigkeit gebaut",
|
||||
"description": "Kein Warten auf Uploads oder Downloads zu einem Server. Durch die Verarbeitung von Dateien direkt in Ihrem Browser mit modernen Webtechnologien wie WebAssembly bieten wir unvergleichliche Geschwindigkeit für alle unsere Werkzeuge."
|
||||
},
|
||||
"free": {
|
||||
"title": "Komplett kostenlos",
|
||||
"description": "Keine Testversionen, keine Abonnements, keine versteckten Gebühren und keine \"Premium\"-Funktionen als Geiseln. Wir glauben, leistungsstarke PDF-Werkzeuge sollten ein öffentliches Gut sein, kein Profitcenter."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Kein Konto erforderlich",
|
||||
"description": "Beginnen Sie sofort mit der Nutzung eines beliebigen Werkzeugs. Wir brauchen weder Ihre E-Mail noch ein Passwort oder persönliche Informationen. Ihr Workflow sollte reibungslos und anonym sein."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Open-Source-Geist",
|
||||
"description": "Mit Transparenz im Blick entwickelt. Wir nutzen großartige Open-Source-Bibliotheken wie PDF-lib und PDF.js und glauben an die gemeinschaftsgetriebene Bemühung, leistungsstarke Werkzeuge für alle zugänglich zu machen."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Bereit loszulegen?",
|
||||
"description": "Schließen Sie sich Tausenden von Benutzern an, die Bentopdf für ihre täglichen Dokumentenbedürfnisse vertrauen. Erleben Sie den Unterschied, den Privatsphäre und Leistung machen können.",
|
||||
"button": "Alle Werkzeuge erkunden"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Kontakt aufnehmen",
|
||||
"subtitle": "Wir freuen uns, von Ihnen zu hören. Ob Sie eine Frage, Feedback oder eine Funktionsanfrage haben, zögern Sie nicht, uns zu kontaktieren.",
|
||||
"email": "Sie können uns direkt per E-Mail erreichen unter:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Lizenzierung für",
|
||||
"subtitle": "Wählen Sie die Lizenz, die Ihren Anforderungen entspricht."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "PDFs hochladen",
|
||||
"upload": "Hochladen",
|
||||
"addBlankPage": "Leere Seite hinzufügen",
|
||||
"edit": "Bearbeiten:",
|
||||
"undo": "Rückgängig",
|
||||
"redo": "Wiederholen",
|
||||
"reset": "Zurücksetzen",
|
||||
"selection": "Auswahl:",
|
||||
"selectAll": "Alles auswählen",
|
||||
"deselectAll": "Auswahl aufheben",
|
||||
"rotate": "Drehen:",
|
||||
"rotateLeft": "Links",
|
||||
"rotateRight": "Rechts",
|
||||
"transform": "Transformieren:",
|
||||
"duplicate": "Duplizieren",
|
||||
"split": "Teilen",
|
||||
"clear": "Löschen:",
|
||||
"delete": "Entfernen",
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Auswahl herunterladen",
|
||||
"exportPdf": "PDF exportieren",
|
||||
"uploadPdfFiles": "PDF-Dateien auswählen",
|
||||
"dragAndDrop": "PDF-Dateien hierhin ziehen oder klicken zum Auswählen",
|
||||
"selectFiles": "Dateien auswählen",
|
||||
"renderingPages": "Seiten werden gerendert...",
|
||||
"actions": {
|
||||
"duplicatePage": "Diese Seite duplizieren",
|
||||
"deletePage": "Diese Seite löschen",
|
||||
"insertPdf": "PDF nach dieser Seite einfügen",
|
||||
"toggleSplit": "Trennung nach dieser Seite umschalten"
|
||||
},
|
||||
"pleaseWait": "Bitte warten",
|
||||
"pagesRendering": "Seiten werden noch gerendert. Bitte warten...",
|
||||
"noPagesSelected": "Keine Seiten ausgewählt",
|
||||
"selectOnePage": "Bitte wählen Sie mindestens eine Seite zum Herunterladen aus.",
|
||||
"noPages": "Keine Seiten",
|
||||
"noPagesToExport": "Keine Seiten zum Exportieren vorhanden.",
|
||||
"renderingTitle": "Seiten-Vorschau wird gerendert",
|
||||
"errorRendering": "Fehler beim Rendern der Seitenvorschau",
|
||||
"error": "Fehler",
|
||||
"failedToLoad": "Laden fehlgeschlagen"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,282 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Beliebte Werkzeuge",
|
||||
"editAnnotate": "Bearbeiten & Annotieren",
|
||||
"convertToPdf": "In PDF konvertieren",
|
||||
"convertFromPdf": "Aus PDF konvertieren",
|
||||
"organizeManage": "Organisieren & Verwalten",
|
||||
"optimizeRepair": "Optimieren & Reparieren",
|
||||
"securePdf": "PDF sichern"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi-Werkzeug",
|
||||
"subtitle": "Zusammenführen, Teilen, Organisieren, Löschen, Drehen, Leere Seiten hinzufügen, Extrahieren und Duplizieren in einer einheitlichen Oberfläche."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF zusammenführen",
|
||||
"subtitle": "Mehrere PDFs zu einer Datei kombinieren. Lesezeichen werden beibehalten."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF teilen",
|
||||
"subtitle": "Einen Seitenbereich in eine neue PDF extrahieren."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "PDF komprimieren",
|
||||
"subtitle": "Die Dateigröße Ihrer PDF reduzieren."
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF-Editor",
|
||||
"subtitle": "Annotieren, hervorheben, schwärzen, kommentieren, Formen/Bilder hinzufügen, suchen und PDFs anzeigen."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren JPG-Bildern erstellen."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "PDF unterschreiben",
|
||||
"subtitle": "Zeichnen, tippen oder laden Sie Ihre Unterschrift hoch."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "PDF zuschneiden",
|
||||
"subtitle": "Die Ränder jeder Seite in Ihrer PDF beschneiden."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Seiten extrahieren",
|
||||
"subtitle": "Eine Auswahl von Seiten als neue Dateien speichern."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplizieren & Organisieren",
|
||||
"subtitle": "Seiten duplizieren, neu anordnen und löschen."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Seiten löschen",
|
||||
"subtitle": "Bestimmte Seiten aus Ihrem Dokument entfernen."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Lesezeichen bearbeiten",
|
||||
"subtitle": "PDF-Lesezeichen hinzufügen, bearbeiten, importieren, löschen und extrahieren."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Inhaltsverzeichnis",
|
||||
"subtitle": "Ein Inhaltsverzeichnis aus PDF-Lesezeichen generieren."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Seitenzahlen",
|
||||
"subtitle": "Seitenzahlen in Ihr Dokument einfügen."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Wasserzeichen hinzufügen",
|
||||
"subtitle": "Text oder ein Bild über Ihre PDF-Seiten stempeln."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Kopf- & Fußzeile",
|
||||
"subtitle": "Text oben und unten auf Seiten hinzufügen."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Farben invertieren",
|
||||
"subtitle": "Eine \"Dunkelmodus\"-Version Ihrer PDF erstellen."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Hintergrundfarbe",
|
||||
"subtitle": "Die Hintergrundfarbe Ihrer PDF ändern."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Textfarbe ändern",
|
||||
"subtitle": "Die Farbe des Textes in Ihrer PDF ändern."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Stempel hinzufügen",
|
||||
"subtitle": "Bildstempel zu Ihrer PDF über die Annotations-Symbolleiste hinzufügen.",
|
||||
"usernameLabel": "Stempel-Benutzername",
|
||||
"usernamePlaceholder": "Geben Sie Ihren Namen ein (für Stempel)",
|
||||
"usernameHint": "Dieser Name erscheint auf von Ihnen erstellten Stempeln."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Annotationen entfernen",
|
||||
"subtitle": "Kommentare, Hervorhebungen und Links entfernen."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF-Formular ausfüllen",
|
||||
"subtitle": "Formulare direkt im Browser ausfüllen. Unterstützt auch XFA-Formulare."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF-Formular erstellen",
|
||||
"subtitle": "Ausfüllbare PDF-Formulare mit Drag-and-Drop-Textfeldern erstellen."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Leere Seiten entfernen",
|
||||
"subtitle": "Leere Seiten automatisch erkennen und löschen."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Bild zu PDF",
|
||||
"subtitle": "JPG, PNG, WebP, BMP, TIFF, SVG, HEIC in PDF konvertieren."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren PNG-Bildern erstellen."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren WebP-Bildern erstellen."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren SVG-Bildern erstellen."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren BMP-Bildern erstellen."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren HEIC-Bildern erstellen."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren TIFF-Bildern erstellen."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text zu PDF",
|
||||
"subtitle": "Eine Textdatei in eine PDF konvertieren."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON zu PDF",
|
||||
"subtitle": "JSON-Dateien in PDF-Format konvertieren."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF zu JPG",
|
||||
"subtitle": "Jede PDF-Seite in ein JPG-Bild konvertieren."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF zu PNG",
|
||||
"subtitle": "Jede PDF-Seite in ein PNG-Bild konvertieren."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF zu WebP",
|
||||
"subtitle": "Jede PDF-Seite in ein WebP-Bild konvertieren."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF zu BMP",
|
||||
"subtitle": "Jede PDF-Seite in ein BMP-Bild konvertieren."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF zu TIFF",
|
||||
"subtitle": "Jede PDF-Seite in ein TIFF-Bild konvertieren."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF zu Graustufen",
|
||||
"subtitle": "Alle Farben in Schwarz-Weiß konvertieren."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF zu JSON",
|
||||
"subtitle": "PDF-Dateien in JSON-Format konvertieren."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Eine PDF durchsuchbar und kopierbar machen."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Seiten abwechselnd mischen",
|
||||
"subtitle": "PDFs durch abwechselnde Seiten aus jedem PDF zusammenführen. Lesezeichen werden beibehalten."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Anhänge hinzufügen",
|
||||
"subtitle": "Eine oder mehrere Dateien in Ihre PDF einbetten."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Anhänge extrahieren",
|
||||
"subtitle": "Alle eingebetteten Dateien aus PDF(s) als ZIP extrahieren."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Anhänge bearbeiten",
|
||||
"subtitle": "Anhänge in Ihrer PDF anzeigen oder entfernen."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Seiten teilen",
|
||||
"subtitle": "Seiten horizontal oder vertikal teilen."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Leere Seite hinzufügen",
|
||||
"subtitle": "Eine leere Seite an beliebiger Stelle in Ihre PDF einfügen."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Seiten umkehren",
|
||||
"subtitle": "Die Reihenfolge aller Seiten in Ihrem Dokument umkehren."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "PDF drehen",
|
||||
"subtitle": "Seiten in 90-Grad-Schritten drehen."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Mehrere Seiten auf einem einzigen Blatt anordnen."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Zu einer Seite kombinieren",
|
||||
"subtitle": "Alle Seiten zu einem fortlaufenden Dokument zusammenfügen."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Metadaten anzeigen",
|
||||
"subtitle": "Die versteckten Eigenschaften Ihrer PDF inspizieren."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Metadaten bearbeiten",
|
||||
"subtitle": "Autor, Titel und andere Eigenschaften ändern."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDFs zu ZIP",
|
||||
"subtitle": "Mehrere PDF-Dateien in ein ZIP-Archiv packen."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "PDFs vergleichen",
|
||||
"subtitle": "Zwei PDFs nebeneinander vergleichen."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "PDF posterisieren",
|
||||
"subtitle": "Eine große Seite in mehrere kleinere Seiten aufteilen."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Seitengröße reparieren",
|
||||
"subtitle": "Alle Seiten auf eine einheitliche Größe standardisieren."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "PDF linearisieren",
|
||||
"subtitle": "PDF für schnelle Web-Anzeige optimieren."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Seitenmaße",
|
||||
"subtitle": "Seitengröße, Ausrichtung und Einheiten analysieren."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Beschränkungen entfernen",
|
||||
"subtitle": "Passwortschutz und Sicherheitsbeschränkungen von digital signierten PDF-Dateien entfernen."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "PDF reparieren",
|
||||
"subtitle": "Daten aus beschädigten PDF-Dateien wiederherstellen."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "PDF verschlüsseln",
|
||||
"subtitle": "Ihre PDF durch Hinzufügen eines Passworts sperren."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "PDF bereinigen",
|
||||
"subtitle": "Metadaten, Annotationen, Skripte und mehr entfernen."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "PDF entschlüsseln",
|
||||
"subtitle": "PDF durch Entfernen des Passwortschutzes entsperren."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "PDF reduzieren",
|
||||
"subtitle": "Formularfelder und Annotationen nicht editierbar machen."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Metadaten entfernen",
|
||||
"subtitle": "Versteckte Daten aus Ihrer PDF entfernen."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Berechtigungen ändern",
|
||||
"subtitle": "Benutzerberechtigungen für eine PDF festlegen oder ändern."
|
||||
}
|
||||
}
|
||||
"categories": {
|
||||
"popularTools": "Beliebte Werkzeuge",
|
||||
"editAnnotate": "Bearbeiten & Annotieren",
|
||||
"convertToPdf": "In PDF konvertieren",
|
||||
"convertFromPdf": "Aus PDF konvertieren",
|
||||
"organizeManage": "Organisieren & Verwalten",
|
||||
"optimizeRepair": "Optimieren & Reparieren",
|
||||
"securePdf": "PDF sichern"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi-Werkzeug",
|
||||
"subtitle": "Zusammenführen, Teilen, Organisieren, Löschen, Drehen, Leere Seiten hinzufügen, Extrahieren und Duplizieren in einer einheitlichen Oberfläche."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF zusammenführen",
|
||||
"subtitle": "Mehrere PDFs zu einer Datei kombinieren. Lesezeichen werden beibehalten."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF teilen",
|
||||
"subtitle": "Einen Seitenbereich in eine neue PDF extrahieren."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "PDF komprimieren",
|
||||
"subtitle": "Die Dateigröße Ihrer PDF reduzieren.",
|
||||
"algorithmLabel": "Komprimierungsalgorithmus",
|
||||
"condense": "Condense (Empfohlen)",
|
||||
"photon": "Photon (Für bildlastige PDFs)",
|
||||
"condenseInfo": "Condense nutzt fortschrittliche Komprimierung: entfernt unnötige Daten, optimiert Bilder, reduziert Schriftarten. Optimal für die meisten PDFs.",
|
||||
"photonInfo": "Photon wandelt Seiten in Bilder um. Für bildlastige/gescannte PDFs.",
|
||||
"photonWarning": "Warnung: Text wird nicht mehr auswählbar und Links funktionieren nicht mehr.",
|
||||
"levelLabel": "Komprimierungsstufe",
|
||||
"light": "Leicht (Qualität erhalten)",
|
||||
"balanced": "Ausgewogen (Empfohlen)",
|
||||
"aggressive": "Aggressiv (Kleinere Dateien)",
|
||||
"extreme": "Extrem (Maximale Komprimierung)",
|
||||
"grayscale": "In Graustufen umwandeln",
|
||||
"grayscaleHint": "Reduziert Dateigröße durch Entfernen von Farbinformationen",
|
||||
"customSettings": "Erweiterte Einstellungen",
|
||||
"customSettingsHint": "Komprimierungsparameter anpassen:",
|
||||
"outputQuality": "Ausgabequalität",
|
||||
"resizeImagesTo": "Bilder anpassen auf",
|
||||
"onlyProcessAbove": "Nur verarbeiten über",
|
||||
"removeMetadata": "Metadaten entfernen",
|
||||
"subsetFonts": "Schriftarten optimieren (ungenutzte Zeichen entfernen)",
|
||||
"removeThumbnails": "Eingebettete Miniaturansichten entfernen",
|
||||
"compressButton": "PDF komprimieren"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF-Editor",
|
||||
"subtitle": "Annotieren, hervorheben, schwärzen, kommentieren, Formen/Bilder hinzufügen, suchen und PDFs anzeigen."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG zu PDF",
|
||||
"subtitle": "Eine PDF aus JPG, JPEG und JPEG2000 (JP2/JPX) Bildern erstellen."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "PDF unterschreiben",
|
||||
"subtitle": "Zeichnen, tippen oder laden Sie Ihre Unterschrift hoch."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "PDF zuschneiden",
|
||||
"subtitle": "Die Ränder jeder Seite in Ihrer PDF beschneiden."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Seiten extrahieren",
|
||||
"subtitle": "Eine Auswahl von Seiten als neue Dateien speichern."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplizieren & Organisieren",
|
||||
"subtitle": "Seiten duplizieren, neu anordnen und löschen."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Seiten löschen",
|
||||
"subtitle": "Bestimmte Seiten aus Ihrem Dokument entfernen."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Lesezeichen bearbeiten",
|
||||
"subtitle": "PDF-Lesezeichen hinzufügen, bearbeiten, importieren, löschen und extrahieren."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Inhaltsverzeichnis",
|
||||
"subtitle": "Ein Inhaltsverzeichnis aus PDF-Lesezeichen generieren."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Seitenzahlen",
|
||||
"subtitle": "Seitenzahlen in Ihr Dokument einfügen."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Wasserzeichen hinzufügen",
|
||||
"subtitle": "Text oder ein Bild über Ihre PDF-Seiten stempeln."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Kopf- & Fußzeile",
|
||||
"subtitle": "Text oben und unten auf Seiten hinzufügen."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Farben invertieren",
|
||||
"subtitle": "Eine \"Dunkelmodus\"-Version Ihrer PDF erstellen."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Hintergrundfarbe",
|
||||
"subtitle": "Die Hintergrundfarbe Ihrer PDF ändern."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Textfarbe ändern",
|
||||
"subtitle": "Die Farbe des Textes in Ihrer PDF ändern."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Stempel hinzufügen",
|
||||
"subtitle": "Bildstempel zu Ihrer PDF über die Annotations-Symbolleiste hinzufügen.",
|
||||
"usernameLabel": "Stempel-Benutzername",
|
||||
"usernamePlaceholder": "Geben Sie Ihren Namen ein (für Stempel)",
|
||||
"usernameHint": "Dieser Name erscheint auf von Ihnen erstellten Stempeln."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Annotationen entfernen",
|
||||
"subtitle": "Kommentare, Hervorhebungen und Links entfernen."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF-Formular ausfüllen",
|
||||
"subtitle": "Formulare direkt im Browser ausfüllen. Unterstützt auch XFA-Formulare."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF-Formular erstellen",
|
||||
"subtitle": "Ausfüllbare PDF-Formulare mit Drag-and-Drop-Textfeldern erstellen."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Leere Seiten entfernen",
|
||||
"subtitle": "Leere Seiten automatisch erkennen und löschen."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Bilder zu PDF",
|
||||
"subtitle": "JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP in PDF konvertieren."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren PNG-Bildern erstellen."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren WebP-Bildern erstellen."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren SVG-Bildern erstellen."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren BMP-Bildern erstellen."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren HEIC-Bildern erstellen."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF zu PDF",
|
||||
"subtitle": "Eine PDF aus einem oder mehreren TIFF-Bildern erstellen."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text zu PDF",
|
||||
"subtitle": "Eine Textdatei in eine PDF konvertieren."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON zu PDF",
|
||||
"subtitle": "JSON-Dateien in PDF-Format konvertieren."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF zu JPG",
|
||||
"subtitle": "Jede PDF-Seite in ein JPG-Bild konvertieren."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF zu PNG",
|
||||
"subtitle": "Jede PDF-Seite in ein PNG-Bild konvertieren."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF zu WebP",
|
||||
"subtitle": "Jede PDF-Seite in ein WebP-Bild konvertieren."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF zu BMP",
|
||||
"subtitle": "Jede PDF-Seite in ein BMP-Bild konvertieren."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF zu TIFF",
|
||||
"subtitle": "Jede PDF-Seite in ein TIFF-Bild konvertieren."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF zu Graustufen",
|
||||
"subtitle": "Alle Farben in Schwarz-Weiß konvertieren."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF zu JSON",
|
||||
"subtitle": "PDF-Dateien in JSON-Format konvertieren."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Eine PDF durchsuchbar und kopierbar machen."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Seiten abwechselnd mischen",
|
||||
"subtitle": "PDFs durch abwechselnde Seiten aus jedem PDF zusammenführen. Lesezeichen werden beibehalten."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Anhänge hinzufügen",
|
||||
"subtitle": "Eine oder mehrere Dateien in Ihre PDF einbetten."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Anhänge extrahieren",
|
||||
"subtitle": "Alle eingebetteten Dateien aus PDF(s) als ZIP extrahieren."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Anhänge bearbeiten",
|
||||
"subtitle": "Anhänge in Ihrer PDF anzeigen oder entfernen."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Seiten teilen",
|
||||
"subtitle": "Seiten horizontal oder vertikal teilen."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Leere Seite hinzufügen",
|
||||
"subtitle": "Eine leere Seite an beliebiger Stelle in Ihre PDF einfügen."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Seiten umkehren",
|
||||
"subtitle": "Die Reihenfolge aller Seiten in Ihrem Dokument umkehren."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "PDF drehen",
|
||||
"subtitle": "Seiten in 90-Grad-Schritten drehen."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Um benutzerdefinierte Grad drehen",
|
||||
"subtitle": "Seiten um einen beliebigen Winkel drehen."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Mehrere Seiten auf einem einzigen Blatt anordnen."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Zu einer Seite kombinieren",
|
||||
"subtitle": "Alle Seiten zu einem fortlaufenden Dokument zusammenfügen."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Metadaten anzeigen",
|
||||
"subtitle": "Die versteckten Eigenschaften Ihrer PDF inspizieren."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Metadaten bearbeiten",
|
||||
"subtitle": "Autor, Titel und andere Eigenschaften ändern."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDFs zu ZIP",
|
||||
"subtitle": "Mehrere PDF-Dateien in ein ZIP-Archiv packen."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "PDFs vergleichen",
|
||||
"subtitle": "Zwei PDFs nebeneinander vergleichen."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "PDF posterisieren",
|
||||
"subtitle": "Eine große Seite in mehrere kleinere Seiten aufteilen."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Seitengröße reparieren",
|
||||
"subtitle": "Alle Seiten auf eine einheitliche Größe standardisieren."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "PDF linearisieren",
|
||||
"subtitle": "PDF für schnelle Web-Anzeige optimieren."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Seitenmaße",
|
||||
"subtitle": "Seitengröße, Ausrichtung und Einheiten analysieren."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Beschränkungen entfernen",
|
||||
"subtitle": "Passwortschutz und Sicherheitsbeschränkungen von digital signierten PDF-Dateien entfernen."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "PDF reparieren",
|
||||
"subtitle": "Daten aus beschädigten PDF-Dateien wiederherstellen."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "PDF verschlüsseln",
|
||||
"subtitle": "Ihre PDF durch Hinzufügen eines Passworts sperren."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "PDF bereinigen",
|
||||
"subtitle": "Metadaten, Annotationen, Skripte und mehr entfernen."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "PDF entschlüsseln",
|
||||
"subtitle": "PDF durch Entfernen des Passwortschutzes entsperren."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "PDF reduzieren",
|
||||
"subtitle": "Formularfelder und Annotationen nicht editierbar machen."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Metadaten entfernen",
|
||||
"subtitle": "Versteckte Daten aus Ihrer PDF entfernen."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Berechtigungen ändern",
|
||||
"subtitle": "Benutzerberechtigungen für eine PDF festlegen oder ändern."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT zu PDF",
|
||||
"subtitle": "OpenDocument Text-Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "ODT-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV zu PDF",
|
||||
"subtitle": "CSV-Tabellendateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "CSV-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF zu PDF",
|
||||
"subtitle": "Rich Text Format-Dokumente in PDF konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "RTF-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word zu PDF",
|
||||
"subtitle": "Word-Dokumente (DOCX, DOC, ODT, RTF) in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "DOCX, DOC, ODT, RTF-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel zu PDF",
|
||||
"subtitle": "Excel-Tabellen (XLSX, XLS, ODS, CSV) in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "XLSX, XLS, ODS, CSV-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint zu PDF",
|
||||
"subtitle": "PowerPoint-Präsentationen (PPTX, PPT, ODP) in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "PPTX, PPT, ODP-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown zu PDF",
|
||||
"subtitle": "Schreiben oder fügen Sie Markdown ein und exportieren Sie es als schön formatiertes PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Vorschau",
|
||||
"btnUpload": "Hochladen",
|
||||
"btnSyncScroll": "Sync-Scrollen",
|
||||
"btnSettings": "Einstellungen",
|
||||
"btnExportPdf": "PDF exportieren",
|
||||
"settingsTitle": "Markdown-Einstellungen",
|
||||
"settingsPreset": "Voreinstellung",
|
||||
"presetDefault": "Standard (GFM-ähnlich)",
|
||||
"presetCommonmark": "CommonMark (strikt)",
|
||||
"presetZero": "Minimal (keine Funktionen)",
|
||||
"settingsOptions": "Markdown-Optionen",
|
||||
"optAllowHtml": "HTML-Tags erlauben",
|
||||
"optBreaks": "Zeilenumbrüche in <br> umwandeln",
|
||||
"optLinkify": "URLs automatisch in Links umwandeln",
|
||||
"optTypographer": "Typograf (intelligente Anführungszeichen usw.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "PDF-Broschüre",
|
||||
"subtitle": "Seiten für beidseitigen Broschürendruck neu anordnen. Falten und heften zum Erstellen einer Broschüre.",
|
||||
"howItWorks": "So funktioniert es:",
|
||||
"step1": "Eine PDF-Datei hochladen.",
|
||||
"step2": "Die Seiten werden in Broschürenreihenfolge neu angeordnet.",
|
||||
"step3": "Beidseitig drucken, an der kurzen Kante wenden, falten und heften.",
|
||||
"paperSize": "Papiergröße",
|
||||
"orientation": "Ausrichtung",
|
||||
"portrait": "Hochformat",
|
||||
"landscape": "Querformat",
|
||||
"pagesPerSheet": "Seiten pro Blatt",
|
||||
"createBooklet": "Broschüre erstellen",
|
||||
"processing": "Verarbeitung...",
|
||||
"pageCount": "Die Seitenzahl wird bei Bedarf auf ein Vielfaches von 4 aufgerundet."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS zu PDF",
|
||||
"subtitle": "XPS/OXPS-Dokumente in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "XPS, OXPS-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI zu PDF",
|
||||
"subtitle": "MOBI-E-Books in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "MOBI-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB zu PDF",
|
||||
"subtitle": "EPUB-E-Books in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "EPUB-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 zu PDF",
|
||||
"subtitle": "FictionBook (FB2) E-Books in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "FB2-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ zu PDF",
|
||||
"subtitle": "Comic-Archive (CBZ/CBR) in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "CBZ, CBR-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD zu PDF",
|
||||
"subtitle": "WordPerfect-Dokumente (WPD) in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "WPD-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS zu PDF",
|
||||
"subtitle": "WPS Office-Dokumente in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "WPS-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML zu PDF",
|
||||
"subtitle": "XML-Dokumente in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "XML-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages zu PDF",
|
||||
"subtitle": "Apple Pages-Dokumente in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "Pages-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG zu PDF",
|
||||
"subtitle": "OpenDocument Graphics (ODG) Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "ODG-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS zu PDF",
|
||||
"subtitle": "OpenDocument Spreadsheet (ODS) Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "ODS-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP zu PDF",
|
||||
"subtitle": "OpenDocument Presentation (ODP) Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "ODP-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB zu PDF",
|
||||
"subtitle": "Microsoft Publisher (PUB) Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "PUB-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD zu PDF",
|
||||
"subtitle": "Microsoft Visio (VSD, VSDX) Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "VSD, VSDX-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD zu PDF",
|
||||
"subtitle": "Adobe Photoshop (PSD) Dateien in PDF-Format konvertieren. Unterstützt mehrere Dateien.",
|
||||
"acceptedFormats": "PSD-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF zu SVG",
|
||||
"subtitle": "Jede Seite einer PDF-Datei in eine skalierbare Vektorgrafik (SVG) konvertieren für perfekte Qualität in jeder Größe."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "PDF-Tabellen extrahieren",
|
||||
"subtitle": "Tabellen aus PDF-Dateien extrahieren und als CSV, JSON oder Markdown exportieren."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF zu CSV",
|
||||
"subtitle": "Tabellen aus PDF extrahieren und in CSV-Format konvertieren."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF zu Excel",
|
||||
"subtitle": "Tabellen aus PDF extrahieren und in Excel (XLSX) Format konvertieren."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF zu Text",
|
||||
"subtitle": "Text aus PDF-Dateien extrahieren und als Textdatei (.txt) speichern. Unterstützt mehrere Dateien.",
|
||||
"note": "Dieses Tool funktioniert NUR mit digital erstellten PDFs. Für gescannte Dokumente oder bildbasierte PDFs verwenden Sie stattdessen unser OCR PDF-Tool.",
|
||||
"convertButton": "Text extrahieren"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digitale PDF-Signatur",
|
||||
"pageTitle": "Digitale PDF-Signatur - Kryptografische Signatur hinzufügen | BentoPDF",
|
||||
"subtitle": "Fügen Sie eine kryptografische digitale Signatur mit X.509-Zertifikaten zu Ihrer PDF hinzu. Unterstützt PKCS#12 (.pfx, .p12) und PEM-Formate. Ihr privater Schlüssel verlässt niemals Ihren Browser.",
|
||||
"certificateSection": "Zertifikat",
|
||||
"uploadCert": "Zertifikat hochladen (.pfx, .p12)",
|
||||
"certPassword": "Zertifikat-Passwort",
|
||||
"certPasswordPlaceholder": "Zertifikat-Passwort eingeben",
|
||||
"certInfo": "Zertifikat-Informationen",
|
||||
"certSubject": "Betreff",
|
||||
"certIssuer": "Aussteller",
|
||||
"certValidity": "Gültig",
|
||||
"signatureDetails": "Signatur-Details (Optional)",
|
||||
"reason": "Grund",
|
||||
"reasonPlaceholder": "z.B. Ich genehmige dieses Dokument",
|
||||
"location": "Ort",
|
||||
"locationPlaceholder": "z.B. Berlin, Deutschland",
|
||||
"contactInfo": "Kontaktdaten",
|
||||
"contactPlaceholder": "z.B. email@beispiel.de",
|
||||
"applySignature": "Digitale Signatur anwenden",
|
||||
"successMessage": "PDF erfolgreich signiert! Die Signatur kann in jedem PDF-Reader überprüft werden."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "PDF-Signatur überprüfen",
|
||||
"pageTitle": "PDF-Signatur überprüfen - Digitale Signaturen verifizieren | BentoPDF",
|
||||
"subtitle": "Überprüfen Sie digitale Signaturen in Ihren PDF-Dateien. Prüfen Sie die Zertifikatsgültigkeit, sehen Sie Unterzeichnerdetails und bestätigen Sie die Dokumentenintegrität. Die gesamte Verarbeitung erfolgt in Ihrem Browser."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-Mail zu PDF",
|
||||
"subtitle": "E-Mail-Dateien (EML, MSG) in PDF-Format konvertieren. Unterstützt Outlook-Exporte und Standard-E-Mail-Formate.",
|
||||
"acceptedFormats": "EML, MSG-Dateien",
|
||||
"convertButton": "In PDF konvertieren"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Schriftart zu Umriss",
|
||||
"subtitle": "Alle Schriftarten in Vektorumrisse für konsistente Darstellung auf allen Geräten konvertieren."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "PDF entzerren",
|
||||
"subtitle": "Automatisch schiefe gescannte Seiten mit OpenCV begradigen."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,318 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"about": "About",
|
||||
"contact": "Contact",
|
||||
"licensing": "Licensing",
|
||||
"allTools": "All Tools",
|
||||
"openMainMenu": "Open main menu",
|
||||
"language": "Language"
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"about": "About",
|
||||
"contact": "Contact",
|
||||
"licensing": "Licensing",
|
||||
"allTools": "All Tools",
|
||||
"openMainMenu": "Open main menu",
|
||||
"language": "Language"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Love BentoPDF? Help us keep it free and open source!",
|
||||
"button": "Donate"
|
||||
},
|
||||
"hero": {
|
||||
"title": "The",
|
||||
"pdfToolkit": "PDF Toolkit",
|
||||
"builtForPrivacy": "built for privacy",
|
||||
"noSignups": "No Signups",
|
||||
"unlimitedUse": "Unlimited Use",
|
||||
"worksOffline": "Works Offline",
|
||||
"startUsing": "Start Using Now"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Used by companies and people working at"
|
||||
},
|
||||
"features": {
|
||||
"title": "Why choose",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "No Signup",
|
||||
"description": "Start instantly, no accounts or emails."
|
||||
},
|
||||
"hero": {
|
||||
"title": "The",
|
||||
"pdfToolkit": "PDF Toolkit",
|
||||
"builtForPrivacy": "built for privacy",
|
||||
"noSignups": "No Signups",
|
||||
"unlimitedUse": "Unlimited Use",
|
||||
"worksOffline": "Works Offline",
|
||||
"startUsing": "Start Using Now"
|
||||
"noUploads": {
|
||||
"title": "No Uploads",
|
||||
"description": "100% client-side, your files never leave your device."
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Used by companies and people working at"
|
||||
"foreverFree": {
|
||||
"title": "Forever Free",
|
||||
"description": "All tools, no trials, no paywalls."
|
||||
},
|
||||
"features": {
|
||||
"title": "Why choose",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "No Signup",
|
||||
"description": "Start instantly, no accounts or emails."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "No Uploads",
|
||||
"description": "100% client-side, your files never leave your device."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Forever Free",
|
||||
"description": "All tools, no trials, no paywalls."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "No Limits",
|
||||
"description": "Use as much as you want, no hidden caps."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Batch Processing",
|
||||
"description": "Handle unlimited PDFs in one go."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Lightning Fast",
|
||||
"description": "Process PDFs instantly, without waiting or delays."
|
||||
}
|
||||
"noLimits": {
|
||||
"title": "No Limits",
|
||||
"description": "Use as much as you want, no hidden caps."
|
||||
},
|
||||
"tools": {
|
||||
"title": "Get Started with",
|
||||
"toolsLabel": "Tools",
|
||||
"subtitle": "Click a tool to open the file uploader",
|
||||
"searchPlaceholder": "Search for a tool (e.g., 'split', 'organize'...)",
|
||||
"backToTools": "Back to Tools"
|
||||
"batchProcessing": {
|
||||
"title": "Batch Processing",
|
||||
"description": "Handle unlimited PDFs in one go."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Click to select a file",
|
||||
"orDragAndDrop": "or drag and drop",
|
||||
"pdfOrImages": "PDFs or Images",
|
||||
"filesNeverLeave": "Your files never leave your device.",
|
||||
"addMore": "Add More Files",
|
||||
"clearAll": "Clear All"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Processing..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Alert",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Document Preview",
|
||||
"downloadAsPdf": "Download as PDF",
|
||||
"close": "Close"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"shortcuts": "Shortcuts",
|
||||
"preferences": "Preferences",
|
||||
"displayPreferences": "Display Preferences",
|
||||
"searchShortcuts": "Search shortcuts...",
|
||||
"shortcutsInfo": "Press and hold keys to set a shortcut. Changes are auto-saved.",
|
||||
"shortcutsWarning": "⚠️ Avoid common browser shortcuts (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N etc.) as they may not work reliably.",
|
||||
"import": "Import",
|
||||
"export": "Export",
|
||||
"resetToDefaults": "Reset to Defaults",
|
||||
"fullWidthMode": "Full Width Mode",
|
||||
"fullWidthDescription": "Use the full screen width for all tools instead of a centered container",
|
||||
"settingsAutoSaved": "Settings are automatically saved",
|
||||
"clickToSet": "Click to set",
|
||||
"pressKeys": "Press keys...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Shortcut Already in Use",
|
||||
"assignedTo": "is already assigned to:",
|
||||
"chooseDifferent": "Please choose a different shortcut.",
|
||||
"reserved": "Reserved Shortcut Warning",
|
||||
"commonlyUsed": "is commonly used for:",
|
||||
"unreliable": "This shortcut may not work reliably or might conflict with browser/system behavior.",
|
||||
"useAnyway": "Do you want to use it anyway?",
|
||||
"resetTitle": "Reset Shortcuts",
|
||||
"resetMessage": "Are you sure you want to reset all shortcuts to default?<br><br>This action cannot be undone.",
|
||||
"importSuccessTitle": "Import Successful",
|
||||
"importSuccessMessage": "Shortcuts imported successfully!",
|
||||
"importFailTitle": "Import Failed",
|
||||
"importFailMessage": "Failed to import shortcuts. Invalid file format."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Warning",
|
||||
"cancel": "Cancel",
|
||||
"proceed": "Proceed"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Your data never leaves your device",
|
||||
"weKeep": "We keep",
|
||||
"yourInfoSafe": "your information safe",
|
||||
"byFollowingStandards": "by following global security standards.",
|
||||
"processingLocal": "All the processing happens locally on your device.",
|
||||
"gdpr": {
|
||||
"title": "GDPR compliance",
|
||||
"description": "Protects the personal data and privacy of individuals within the European Union."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA compliance",
|
||||
"description": "Gives California residents rights over how their personal information is collected, used, and shared."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA compliance",
|
||||
"description": "Sets safeguards for handling sensitive health information in the United States healthcare system."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Frequently Asked",
|
||||
"questions": "Questions",
|
||||
"isFree": {
|
||||
"question": "Is BentoPDF really free?",
|
||||
"answer": "Yes, absolutely. All tools on BentoPDF are 100% free to use, with no file limits, no sign-ups, and no watermarks. We believe everyone deserves access to simple, powerful PDF tools without a paywall."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Are my files secure? Where are they processed?",
|
||||
"answer": "Your files are as secure as possible because they never leave your computer. All processing happens directly in your web browser (client-side). We never upload your files to a server, so you maintain complete privacy and control over your documents."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Does it work on Mac, Windows, and Mobile?",
|
||||
"answer": "Yes! Since BentoPDF runs entirely in your browser, it works on any operating system with a modern web browser, including Windows, macOS, Linux, iOS, and Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Is BentoPDF GDPR compliant?",
|
||||
"answer": "Yes. BentoPDF is fully GDPR compliant. Since all file processing happens locally in your browser and we never collect or transmit your files to any server, we have no access to your data. This ensures you are always in control of your documents."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Do you store or track any of my files?",
|
||||
"answer": "No. We never store, track, or log your files. Everything you do on BentoPDF happens in your browser memory and disappears once you close the page. There are no uploads, no history logs, and no servers involved."
|
||||
},
|
||||
"different": {
|
||||
"question": "What makes BentoPDF different from other PDF tools?",
|
||||
"answer": "Most PDF tools upload your files to a server for processing. BentoPDF never does that. We use secure, modern web technology to process your files directly in your browser. This means faster performance, stronger privacy, and complete peace of mind."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "How does browser-based processing keep me safe?",
|
||||
"answer": "By running entirely inside your browser, BentoPDF ensures that your files never leave your device. This eliminates the risks of server hacks, data breaches, or unauthorized access. Your files remain yours—always."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Do you use cookies or analytics to track me?",
|
||||
"answer": "We care about your privacy. BentoPDF does not track personal information. We use Simple Analytics solely to see anonymous visit counts. This means we can know how many users visit our site, but we never know who you are. Simple Analytics is fully GDPR-compliant and respects your privacy."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "What Our",
|
||||
"users": "Users",
|
||||
"say": "Say"
|
||||
},
|
||||
"support": {
|
||||
"title": "Like My Work?",
|
||||
"description": "BentoPDF is a passion project, built to provide a free, private, and powerful PDF toolkit for everyone. If you find it useful, consider supporting its development. Every coffee helps!",
|
||||
"buyMeCoffee": "Buy Me a Coffee"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2025 BentoPDF. All rights reserved.",
|
||||
"version": "Version",
|
||||
"company": "Company",
|
||||
"aboutUs": "About Us",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Contact Us",
|
||||
"legal": "Legal",
|
||||
"termsAndConditions": "Terms and Conditions",
|
||||
"privacyPolicy": "Privacy Policy",
|
||||
"followUs": "Follow Us"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Merge PDFs",
|
||||
"description": "Combine whole files, or select specific pages to merge into a new document.",
|
||||
"fileMode": "File Mode",
|
||||
"pageMode": "Page Mode",
|
||||
"howItWorks": "How it works:",
|
||||
"fileModeInstructions": [
|
||||
"Click and drag the icon to change the order of the files.",
|
||||
"In the \"Pages\" box for each file, you can specify ranges (e.g., \"1-3, 5\") to merge only those pages.",
|
||||
"Leave the \"Pages\" box blank to include all pages from that file."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"All pages from your uploaded PDFs are shown below.",
|
||||
"Simply drag and drop the individual page thumbnails to create the exact order you want for your new file."
|
||||
],
|
||||
"mergePdfs": "Merge PDFs"
|
||||
},
|
||||
"common": {
|
||||
"page": "Page",
|
||||
"pages": "Pages",
|
||||
"of": "of",
|
||||
"download": "Download",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"loading": "Loading...",
|
||||
"error": "Error",
|
||||
"success": "Success",
|
||||
"file": "File",
|
||||
"files": "Files"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "We believe PDF tools should be",
|
||||
"subtitle": "fast, private, and free.",
|
||||
"noCompromises": "No compromises."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Our Mission",
|
||||
"description": "To provide the most comprehensive PDF toolbox that respects your privacy and never asks for payment. We believe essential document tools should be accessible to everyone, everywhere, without barriers."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Our Core Philosophy",
|
||||
"title": "Privacy First. Always.",
|
||||
"description": "In an era where data is a commodity, we take a different approach. All processing for Bentopdf tools happens locally in your browser. This means your files never touch our servers, we never see your documents, and we don't track what you do. Your documents remain completely and unequivocally private. It's not just a feature; it's our foundation."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Why",
|
||||
"speed": {
|
||||
"title": "Built for Speed",
|
||||
"description": "No waiting for uploads or downloads to a server. By processing files directly in your browser using modern web technologies like WebAssembly, we offer unparalleled speed for all our tools."
|
||||
},
|
||||
"free": {
|
||||
"title": "Completely Free",
|
||||
"description": "No trials, no subscriptions, no hidden fees, and no \"premium\" features held hostage. We believe powerful PDF tools should be a public utility, not a profit center."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "No Account Required",
|
||||
"description": "Start using any tool immediately. We don't need your email, a password, or any personal information. Your workflow should be frictionless and anonymous."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Open Source Spirit",
|
||||
"description": "Built with transparency in mind. We leverage incredible open-source libraries like PDF-lib and PDF.js, and believe in the community-driven effort to make powerful tools accessible to everyone."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Ready to get started?",
|
||||
"description": "Join thousands of users who trust Bentopdf for their daily document needs. Experience the difference that privacy and performance can make.",
|
||||
"button": "Explore All Tools"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Get in Touch",
|
||||
"subtitle": "We'd love to hear from you. Whether you have a question, feedback, or a feature request, please don't hesitate to reach out.",
|
||||
"email": "You can reach us directly by email at:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licensing for",
|
||||
"subtitle": "Choose the license that fits your needs."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Upload PDFs",
|
||||
"upload": "Upload",
|
||||
"addBlankPage": "Add Blank Page",
|
||||
"edit": "Edit:",
|
||||
"undo": "Undo",
|
||||
"redo": "Redo",
|
||||
"reset": "Reset",
|
||||
"selection": "Selection:",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"rotate": "Rotate:",
|
||||
"rotateLeft": "Left",
|
||||
"rotateRight": "Right",
|
||||
"transform": "Transform:",
|
||||
"duplicate": "Duplicate",
|
||||
"split": "Split",
|
||||
"clear": "Clear:",
|
||||
"delete": "Delete",
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Download Selected",
|
||||
"exportPdf": "Export PDF",
|
||||
"uploadPdfFiles": "Select PDF Files",
|
||||
"dragAndDrop": "Drag and drop PDF files here, or click to select",
|
||||
"selectFiles": "Select Files",
|
||||
"renderingPages": "Rendering pages...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicate this page",
|
||||
"deletePage": "Delete this page",
|
||||
"insertPdf": "Insert PDF after this page",
|
||||
"toggleSplit": "Toggle split after this page"
|
||||
},
|
||||
"pleaseWait": "Please Wait",
|
||||
"pagesRendering": "Pages are still being rendered. Please wait...",
|
||||
"noPagesSelected": "No Pages Selected",
|
||||
"selectOnePage": "Please select at least one page to download.",
|
||||
"noPages": "No Pages",
|
||||
"noPagesToExport": "There are no pages to export.",
|
||||
"renderingTitle": "Rendering page previews",
|
||||
"errorRendering": "Failed to render page thumbnails",
|
||||
"error": "Error",
|
||||
"failedToLoad": "Failed to load"
|
||||
"lightningFast": {
|
||||
"title": "Lightning Fast",
|
||||
"description": "Process PDFs instantly, without waiting or delays."
|
||||
}
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Get Started with",
|
||||
"toolsLabel": "Tools",
|
||||
"subtitle": "Click a tool to open the file uploader",
|
||||
"searchPlaceholder": "Search for a tool (e.g., 'split', 'organize'...)",
|
||||
"backToTools": "Back to Tools",
|
||||
"firstLoadNotice": "First load takes a moment as we download our conversion engine. After that, all loads will be instant."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Click to select a file",
|
||||
"orDragAndDrop": "or drag and drop",
|
||||
"pdfOrImages": "PDFs or Images",
|
||||
"filesNeverLeave": "Your files never leave your device.",
|
||||
"addMore": "Add More Files",
|
||||
"clearAll": "Clear All"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Processing..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Alert",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Document Preview",
|
||||
"downloadAsPdf": "Download as PDF",
|
||||
"close": "Close"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"shortcuts": "Shortcuts",
|
||||
"preferences": "Preferences",
|
||||
"displayPreferences": "Display Preferences",
|
||||
"searchShortcuts": "Search shortcuts...",
|
||||
"shortcutsInfo": "Press and hold keys to set a shortcut. Changes are auto-saved.",
|
||||
"shortcutsWarning": "⚠️ Avoid common browser shortcuts (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N etc.) as they may not work reliably.",
|
||||
"import": "Import",
|
||||
"export": "Export",
|
||||
"resetToDefaults": "Reset to Defaults",
|
||||
"fullWidthMode": "Full Width Mode",
|
||||
"fullWidthDescription": "Use the full screen width for all tools instead of a centered container",
|
||||
"settingsAutoSaved": "Settings are automatically saved",
|
||||
"clickToSet": "Click to set",
|
||||
"pressKeys": "Press keys...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Shortcut Already in Use",
|
||||
"assignedTo": "is already assigned to:",
|
||||
"chooseDifferent": "Please choose a different shortcut.",
|
||||
"reserved": "Reserved Shortcut Warning",
|
||||
"commonlyUsed": "is commonly used for:",
|
||||
"unreliable": "This shortcut may not work reliably or might conflict with browser/system behavior.",
|
||||
"useAnyway": "Do you want to use it anyway?",
|
||||
"resetTitle": "Reset Shortcuts",
|
||||
"resetMessage": "Are you sure you want to reset all shortcuts to default?<br><br>This action cannot be undone.",
|
||||
"importSuccessTitle": "Import Successful",
|
||||
"importSuccessMessage": "Shortcuts imported successfully!",
|
||||
"importFailTitle": "Import Failed",
|
||||
"importFailMessage": "Failed to import shortcuts. Invalid file format."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Warning",
|
||||
"cancel": "Cancel",
|
||||
"proceed": "Proceed"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Your data never leaves your device",
|
||||
"weKeep": "We keep",
|
||||
"yourInfoSafe": "your information safe",
|
||||
"byFollowingStandards": "by following global security standards.",
|
||||
"processingLocal": "All the processing happens locally on your device.",
|
||||
"gdpr": {
|
||||
"title": "GDPR compliance",
|
||||
"description": "Protects the personal data and privacy of individuals within the European Union."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA compliance",
|
||||
"description": "Gives California residents rights over how their personal information is collected, used, and shared."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA compliance",
|
||||
"description": "Sets safeguards for handling sensitive health information in the United States healthcare system."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Frequently Asked",
|
||||
"questions": "Questions",
|
||||
"isFree": {
|
||||
"question": "Is BentoPDF really free?",
|
||||
"answer": "Yes, absolutely. All tools on BentoPDF are 100% free to use, with no file limits, no sign-ups, and no watermarks. We believe everyone deserves access to simple, powerful PDF tools without a paywall."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Are my files secure? Where are they processed?",
|
||||
"answer": "Your files are as secure as possible because they never leave your computer. All processing happens directly in your web browser (client-side). We never upload your files to a server, so you maintain complete privacy and control over your documents."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Does it work on Mac, Windows, and Mobile?",
|
||||
"answer": "Yes! Since BentoPDF runs entirely in your browser, it works on any operating system with a modern web browser, including Windows, macOS, Linux, iOS, and Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Is BentoPDF GDPR compliant?",
|
||||
"answer": "Yes. BentoPDF is fully GDPR compliant. Since all file processing happens locally in your browser and we never collect or transmit your files to any server, we have no access to your data. This ensures you are always in control of your documents."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Do you store or track any of my files?",
|
||||
"answer": "No. We never store, track, or log your files. Everything you do on BentoPDF happens in your browser memory and disappears once you close the page. There are no uploads, no history logs, and no servers involved."
|
||||
},
|
||||
"different": {
|
||||
"question": "What makes BentoPDF different from other PDF tools?",
|
||||
"answer": "Most PDF tools upload your files to a server for processing. BentoPDF never does that. We use secure, modern web technology to process your files directly in your browser. This means faster performance, stronger privacy, and complete peace of mind."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "How does browser-based processing keep me safe?",
|
||||
"answer": "By running entirely inside your browser, BentoPDF ensures that your files never leave your device. This eliminates the risks of server hacks, data breaches, or unauthorized access. Your files remain yours—always."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Do you use cookies or analytics to track me?",
|
||||
"answer": "We care about your privacy. BentoPDF does not track personal information. We use Simple Analytics solely to see anonymous visit counts. This means we can know how many users visit our site, but we never know who you are. Simple Analytics is fully GDPR-compliant and respects your privacy."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "What Our",
|
||||
"users": "Users",
|
||||
"say": "Say"
|
||||
},
|
||||
"support": {
|
||||
"title": "Like My Work?",
|
||||
"description": "BentoPDF is a passion project, built to provide a free, private, and powerful PDF toolkit for everyone. If you find it useful, consider supporting its development. Every coffee helps!",
|
||||
"buyMeCoffee": "Buy Me a Coffee"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. All rights reserved.",
|
||||
"version": "Version",
|
||||
"company": "Company",
|
||||
"aboutUs": "About Us",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Contact Us",
|
||||
"legal": "Legal",
|
||||
"termsAndConditions": "Terms and Conditions",
|
||||
"privacyPolicy": "Privacy Policy",
|
||||
"followUs": "Follow Us"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Merge PDFs",
|
||||
"description": "Combine whole files, or select specific pages to merge into a new document.",
|
||||
"fileMode": "File Mode",
|
||||
"pageMode": "Page Mode",
|
||||
"howItWorks": "How it works:",
|
||||
"fileModeInstructions": [
|
||||
"Click and drag the icon to change the order of the files.",
|
||||
"In the \"Pages\" box for each file, you can specify ranges (e.g., \"1-3, 5\") to merge only those pages.",
|
||||
"Leave the \"Pages\" box blank to include all pages from that file."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"All pages from your uploaded PDFs are shown below.",
|
||||
"Simply drag and drop the individual page thumbnails to create the exact order you want for your new file."
|
||||
],
|
||||
"mergePdfs": "Merge PDFs"
|
||||
},
|
||||
"common": {
|
||||
"page": "Page",
|
||||
"pages": "Pages",
|
||||
"of": "of",
|
||||
"download": "Download",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"loading": "Loading...",
|
||||
"error": "Error",
|
||||
"success": "Success",
|
||||
"file": "File",
|
||||
"files": "Files"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "We believe PDF tools should be",
|
||||
"subtitle": "fast, private, and free.",
|
||||
"noCompromises": "No compromises."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Our Mission",
|
||||
"description": "To provide the most comprehensive PDF toolbox that respects your privacy and never asks for payment. We believe essential document tools should be accessible to everyone, everywhere, without barriers."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Our Core Philosophy",
|
||||
"title": "Privacy First. Always.",
|
||||
"description": "In an era where data is a commodity, we take a different approach. All processing for Bentopdf tools happens locally in your browser. This means your files never touch our servers, we never see your documents, and we don't track what you do. Your documents remain completely and unequivocally private. It's not just a feature; it's our foundation."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Why",
|
||||
"speed": {
|
||||
"title": "Built for Speed",
|
||||
"description": "No waiting for uploads or downloads to a server. By processing files directly in your browser using modern web technologies like WebAssembly, we offer unparalleled speed for all our tools."
|
||||
},
|
||||
"free": {
|
||||
"title": "Completely Free",
|
||||
"description": "No trials, no subscriptions, no hidden fees, and no \"premium\" features held hostage. We believe powerful PDF tools should be a public utility, not a profit center."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "No Account Required",
|
||||
"description": "Start using any tool immediately. We don't need your email, a password, or any personal information. Your workflow should be frictionless and anonymous."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Open Source Spirit",
|
||||
"description": "Built with transparency in mind. We leverage incredible open-source libraries like PDF-lib and PDF.js, and believe in the community-driven effort to make powerful tools accessible to everyone."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Ready to get started?",
|
||||
"description": "Join thousands of users who trust Bentopdf for their daily document needs. Experience the difference that privacy and performance can make.",
|
||||
"button": "Explore All Tools"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Get in Touch",
|
||||
"subtitle": "We'd love to hear from you. Whether you have a question, feedback, or a feature request, please don't hesitate to reach out.",
|
||||
"email": "You can reach us directly by email at:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licensing for",
|
||||
"subtitle": "Choose the license that fits your needs."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Upload PDFs",
|
||||
"upload": "Upload",
|
||||
"addBlankPage": "Add Blank Page",
|
||||
"edit": "Edit:",
|
||||
"undo": "Undo",
|
||||
"redo": "Redo",
|
||||
"reset": "Reset",
|
||||
"selection": "Selection:",
|
||||
"selectAll": "Select All",
|
||||
"deselectAll": "Deselect All",
|
||||
"rotate": "Rotate:",
|
||||
"rotateLeft": "Left",
|
||||
"rotateRight": "Right",
|
||||
"transform": "Transform:",
|
||||
"duplicate": "Duplicate",
|
||||
"split": "Split",
|
||||
"clear": "Clear:",
|
||||
"delete": "Delete",
|
||||
"download": "Download:",
|
||||
"downloadSelected": "Download Selected",
|
||||
"exportPdf": "Export PDF",
|
||||
"uploadPdfFiles": "Select PDF Files",
|
||||
"dragAndDrop": "Drag and drop PDF files here, or click to select",
|
||||
"selectFiles": "Select Files",
|
||||
"renderingPages": "Rendering pages...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicate this page",
|
||||
"deletePage": "Delete this page",
|
||||
"insertPdf": "Insert PDF after this page",
|
||||
"toggleSplit": "Toggle split after this page"
|
||||
},
|
||||
"pleaseWait": "Please Wait",
|
||||
"pagesRendering": "Pages are still being rendered. Please wait...",
|
||||
"noPagesSelected": "No Pages Selected",
|
||||
"selectOnePage": "Please select at least one page to download.",
|
||||
"noPages": "No Pages",
|
||||
"noPagesToExport": "There are no pages to export.",
|
||||
"renderingTitle": "Rendering page previews",
|
||||
"errorRendering": "Failed to render page thumbnails",
|
||||
"error": "Error",
|
||||
"failedToLoad": "Failed to load"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,282 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Popular Tools",
|
||||
"editAnnotate": "Edit & Annotate",
|
||||
"convertToPdf": "Convert to PDF",
|
||||
"convertFromPdf": "Convert from PDF",
|
||||
"organizeManage": "Organize & Manage",
|
||||
"optimizeRepair": "Optimize & Repair",
|
||||
"securePdf": "Secure PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi Tool",
|
||||
"subtitle": "Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Merge PDF",
|
||||
"subtitle": "Combine multiple PDFs into one file. Preserves Bookmarks."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Split PDF",
|
||||
"subtitle": "Extract a range of pages into a new PDF."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Compress PDF",
|
||||
"subtitle": "Reduce the file size of your PDF."
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF Editor",
|
||||
"subtitle": "Annotate, highlight, redact, comment, add shapes/images, search, and view PDFs."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG to PDF",
|
||||
"subtitle": "Create a PDF from one or more JPG images."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Sign PDF",
|
||||
"subtitle": "Draw, type, or upload your signature."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Crop PDF",
|
||||
"subtitle": "Trim the margins of every page in your PDF."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Extract Pages",
|
||||
"subtitle": "Save a selection of pages as new files."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicate & Organize",
|
||||
"subtitle": "Duplicate, reorder, and delete pages."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Delete Pages",
|
||||
"subtitle": "Remove specific pages from your document."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Edit Bookmarks",
|
||||
"subtitle": "Add, edit, import, delete and extract PDF bookmarks."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Table of Contents",
|
||||
"subtitle": "Generate a table of contents page from PDF bookmarks."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Page Numbers",
|
||||
"subtitle": "Insert page numbers into your document."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Add Watermark",
|
||||
"subtitle": "Stamp text or an image over your PDF pages."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Header & Footer",
|
||||
"subtitle": "Add text to the top and bottom of pages."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Invert Colors",
|
||||
"subtitle": "Create a \"dark mode\" version of your PDF."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Background Color",
|
||||
"subtitle": "Change the background color of your PDF."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Change Text Color",
|
||||
"subtitle": "Change the color of text in your PDF."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Add Stamps",
|
||||
"subtitle": "Add image stamps to your PDF using the annotation toolbar.",
|
||||
"usernameLabel": "Stamp Username",
|
||||
"usernamePlaceholder": "Enter your name (for stamps)",
|
||||
"usernameHint": "This name will appear on stamps you create."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Remove Annotations",
|
||||
"subtitle": "Strip comments, highlights, and links."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF Form Filler",
|
||||
"subtitle": "Fill in forms directly in the browser. Also supports XFA forms."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Create PDF Form",
|
||||
"subtitle": "Create fillable PDF forms with drag-and-drop text fields."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Remove Blank Pages",
|
||||
"subtitle": "Automatically detect and delete blank pages."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Image to PDF",
|
||||
"subtitle": "Convert JPG, PNG, WebP, BMP, TIFF, SVG, HEIC to PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG to PDF",
|
||||
"subtitle": "Create a PDF from one or more PNG images."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP to PDF",
|
||||
"subtitle": "Create a PDF from one or more WebP images."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG to PDF",
|
||||
"subtitle": "Create a PDF from one or more SVG images."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP to PDF",
|
||||
"subtitle": "Create a PDF from one or more BMP images."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC to PDF",
|
||||
"subtitle": "Create a PDF from one or more HEIC images."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF to PDF",
|
||||
"subtitle": "Create a PDF from one or more TIFF images."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text to PDF",
|
||||
"subtitle": "Convert a plain text file into a PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON to PDF",
|
||||
"subtitle": "Convert JSON files to PDF format."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF to JPG",
|
||||
"subtitle": "Convert each PDF page into a JPG image."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF to PNG",
|
||||
"subtitle": "Convert each PDF page into a PNG image."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF to WebP",
|
||||
"subtitle": "Convert each PDF page into a WebP image."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF to BMP",
|
||||
"subtitle": "Convert each PDF page into a BMP image."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF to TIFF",
|
||||
"subtitle": "Convert each PDF page into a TIFF image."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF to Greyscale",
|
||||
"subtitle": "Convert all colors to black and white."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF to JSON",
|
||||
"subtitle": "Convert PDF files to JSON format."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Make a PDF searchable and copyable."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alternate & Mix Pages",
|
||||
"subtitle": "Merge PDFs by alternating pages from each PDF. Preserves Bookmarks."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Add Attachments",
|
||||
"subtitle": "Embed one or more files into your PDF."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Extract Attachments",
|
||||
"subtitle": "Extract all embedded files from PDF(s) as a ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Edit Attachments",
|
||||
"subtitle": "View or remove attachments in your PDF."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Divide Pages",
|
||||
"subtitle": "Divide pages horizontally or vertically."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Add Blank Page",
|
||||
"subtitle": "Insert an empty page anywhere in your PDF."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Reverse Pages",
|
||||
"subtitle": "Flip the order of all pages in your document."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Rotate PDF",
|
||||
"subtitle": "Turn pages in 90-degree increments."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Arrange multiple pages onto a single sheet."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Combine to Single Page",
|
||||
"subtitle": "Stitch all pages into one continuous scroll."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "View Metadata",
|
||||
"subtitle": "Inspect the hidden properties of your PDF."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Edit Metadata",
|
||||
"subtitle": "Change the author, title, and other properties."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDFs to ZIP",
|
||||
"subtitle": "Package multiple PDF files into a ZIP archive."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Compare PDFs",
|
||||
"subtitle": "Compare two PDFs side by side."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterize PDF",
|
||||
"subtitle": "Split a large page into multiple smaller pages."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Fix Page Size",
|
||||
"subtitle": "Standardize all pages to a uniform size."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Linearize PDF",
|
||||
"subtitle": "Optimize PDF for fast web viewing."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Page Dimensions",
|
||||
"subtitle": "Analyze page size, orientation, and units."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Remove Restrictions",
|
||||
"subtitle": "Remove password protection and security restrictions associated with digitally signed PDF files."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Repair PDF",
|
||||
"subtitle": "Recover data from corrupted or damaged PDF files."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Encrypt PDF",
|
||||
"subtitle": "Lock your PDF by adding a password."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Sanitize PDF",
|
||||
"subtitle": "Remove metadata, annotations, scripts, and more."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Decrypt PDF",
|
||||
"subtitle": "Unlock PDF by removing password protection."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Flatten PDF",
|
||||
"subtitle": "Make form fields and annotations non-editable."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Remove Metadata",
|
||||
"subtitle": "Strip hidden data from your PDF."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Change Permissions",
|
||||
"subtitle": "Set or change user permissions on a PDF."
|
||||
}
|
||||
}
|
||||
"categories": {
|
||||
"popularTools": "Popular Tools",
|
||||
"editAnnotate": "Edit & Annotate",
|
||||
"convertToPdf": "Convert to PDF",
|
||||
"convertFromPdf": "Convert from PDF",
|
||||
"organizeManage": "Organize & Manage",
|
||||
"optimizeRepair": "Optimize & Repair",
|
||||
"securePdf": "Secure PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Multi Tool",
|
||||
"subtitle": "Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Merge PDF",
|
||||
"subtitle": "Combine multiple PDFs into one file. Preserves Bookmarks."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Split PDF",
|
||||
"subtitle": "Extract a range of pages into a new PDF."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Compress PDF",
|
||||
"subtitle": "Reduce the file size of your PDF.",
|
||||
"algorithmLabel": "Compression Algorithm",
|
||||
"condense": "Condense (Recommended)",
|
||||
"photon": "Photon (For Photo-Heavy PDFs)",
|
||||
"condenseInfo": "Condense uses advanced compression: removes dead-weight, optimizes images, subsets fonts. Best for most PDFs.",
|
||||
"photonInfo": "Photon converts pages to images. Use for photo-heavy/scanned PDFs.",
|
||||
"photonWarning": "Warning: Text will become non-selectable and links will stop working.",
|
||||
"levelLabel": "Compression Level",
|
||||
"light": "Light (Preserve Quality)",
|
||||
"balanced": "Balanced (Recommended)",
|
||||
"aggressive": "Aggressive (Smaller Files)",
|
||||
"extreme": "Extreme (Maximum Compression)",
|
||||
"grayscale": "Convert to Grayscale",
|
||||
"grayscaleHint": "Reduces file size by removing color information",
|
||||
"customSettings": "Custom Settings",
|
||||
"customSettingsHint": "Fine-tune compression parameters:",
|
||||
"outputQuality": "Output Quality",
|
||||
"resizeImagesTo": "Resize Images To",
|
||||
"onlyProcessAbove": "Only Process Above",
|
||||
"removeMetadata": "Remove metadata",
|
||||
"subsetFonts": "Subset fonts (remove unused glyphs)",
|
||||
"removeThumbnails": "Remove embedded thumbnails",
|
||||
"compressButton": "Compress PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF Editor",
|
||||
"subtitle": "Annotate, highlight, redact, comment, add shapes/images, search, and view PDFs."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG to PDF",
|
||||
"subtitle": "Create a PDF from JPG, JPEG, and JPEG2000 (JP2/JPX) images."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Sign PDF",
|
||||
"subtitle": "Draw, type, or upload your signature."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Crop PDF",
|
||||
"subtitle": "Trim the margins of every page in your PDF."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Extract Pages",
|
||||
"subtitle": "Save a selection of pages as new files."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicate & Organize",
|
||||
"subtitle": "Duplicate, reorder, and delete pages."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Delete Pages",
|
||||
"subtitle": "Remove specific pages from your document."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Edit Bookmarks",
|
||||
"subtitle": "Add, edit, import, delete and extract PDF bookmarks."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Table of Contents",
|
||||
"subtitle": "Generate a table of contents page from PDF bookmarks."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Page Numbers",
|
||||
"subtitle": "Insert page numbers into your document."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Add Watermark",
|
||||
"subtitle": "Stamp text or an image over your PDF pages."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Header & Footer",
|
||||
"subtitle": "Add text to the top and bottom of pages."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Invert Colors",
|
||||
"subtitle": "Create a \"dark mode\" version of your PDF."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Background Color",
|
||||
"subtitle": "Change the background color of your PDF."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Change Text Color",
|
||||
"subtitle": "Change the color of text in your PDF."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Add Stamps",
|
||||
"subtitle": "Add image stamps to your PDF using the annotation toolbar.",
|
||||
"usernameLabel": "Stamp Username",
|
||||
"usernamePlaceholder": "Enter your name (for stamps)",
|
||||
"usernameHint": "This name will appear on stamps you create."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Remove Annotations",
|
||||
"subtitle": "Strip comments, highlights, and links."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF Form Filler",
|
||||
"subtitle": "Fill in forms directly in the browser. Also supports XFA forms."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Create PDF Form",
|
||||
"subtitle": "Create fillable PDF forms with drag-and-drop text fields."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Remove Blank Pages",
|
||||
"subtitle": "Automatically detect and delete blank pages."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Images to PDF",
|
||||
"subtitle": "Convert JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP to PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG to PDF",
|
||||
"subtitle": "Create a PDF from one or more PNG images."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP to PDF",
|
||||
"subtitle": "Create a PDF from one or more WebP images."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG to PDF",
|
||||
"subtitle": "Create a PDF from one or more SVG images."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP to PDF",
|
||||
"subtitle": "Create a PDF from one or more BMP images."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC to PDF",
|
||||
"subtitle": "Create a PDF from one or more HEIC images."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF to PDF",
|
||||
"subtitle": "Create a PDF from one or more TIFF images."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text to PDF",
|
||||
"subtitle": "Convert a plain text file into a PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON to PDF",
|
||||
"subtitle": "Convert JSON files to PDF format."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF to JPG",
|
||||
"subtitle": "Convert each PDF page into a JPG image."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF to PNG",
|
||||
"subtitle": "Convert each PDF page into a PNG image."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF to WebP",
|
||||
"subtitle": "Convert each PDF page into a WebP image."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF to BMP",
|
||||
"subtitle": "Convert each PDF page into a BMP image."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF to TIFF",
|
||||
"subtitle": "Convert each PDF page into a TIFF image."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF to Greyscale",
|
||||
"subtitle": "Convert all colors to black and white."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF to JSON",
|
||||
"subtitle": "Convert PDF files to JSON format."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Make a PDF searchable and copyable."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alternate & Mix Pages",
|
||||
"subtitle": "Merge PDFs by alternating pages from each PDF. Preserves Bookmarks."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Add Attachments",
|
||||
"subtitle": "Embed one or more files into your PDF."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Extract Attachments",
|
||||
"subtitle": "Extract all embedded files from PDF(s) as a ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Edit Attachments",
|
||||
"subtitle": "View or remove attachments in your PDF."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Divide Pages",
|
||||
"subtitle": "Divide pages horizontally or vertically."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Add Blank Page",
|
||||
"subtitle": "Insert an empty page anywhere in your PDF."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Reverse Pages",
|
||||
"subtitle": "Flip the order of all pages in your document."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Rotate PDF",
|
||||
"subtitle": "Turn pages in 90-degree increments."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotate by Custom Degrees",
|
||||
"subtitle": "Rotate pages by any custom angle."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Arrange multiple pages onto a single sheet."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Combine to Single Page",
|
||||
"subtitle": "Stitch all pages into one continuous scroll."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "View Metadata",
|
||||
"subtitle": "Inspect the hidden properties of your PDF."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Edit Metadata",
|
||||
"subtitle": "Change the author, title, and other properties."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDFs to ZIP",
|
||||
"subtitle": "Package multiple PDF files into a ZIP archive."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Compare PDFs",
|
||||
"subtitle": "Compare two PDFs side by side."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterize PDF",
|
||||
"subtitle": "Split a large page into multiple smaller pages."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Fix Page Size",
|
||||
"subtitle": "Standardize all pages to a uniform size."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Linearize PDF",
|
||||
"subtitle": "Optimize PDF for fast web viewing."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Page Dimensions",
|
||||
"subtitle": "Analyze page size, orientation, and units."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Remove Restrictions",
|
||||
"subtitle": "Remove password protection and security restrictions associated with digitally signed PDF files."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Repair PDF",
|
||||
"subtitle": "Recover data from corrupted or damaged PDF files."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Encrypt PDF",
|
||||
"subtitle": "Lock your PDF by adding a password."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Sanitize PDF",
|
||||
"subtitle": "Remove metadata, annotations, scripts, and more."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Decrypt PDF",
|
||||
"subtitle": "Unlock PDF by removing password protection."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Flatten PDF",
|
||||
"subtitle": "Make form fields and annotations non-editable."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Remove Metadata",
|
||||
"subtitle": "Strip hidden data from your PDF."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Change Permissions",
|
||||
"subtitle": "Set or change user permissions on a PDF."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT to PDF",
|
||||
"subtitle": "Convert OpenDocument Text files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODT files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV to PDF",
|
||||
"subtitle": "Convert CSV spreadsheet files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF to PDF",
|
||||
"subtitle": "Convert Rich Text Format documents to PDF. Supports multiple files.",
|
||||
"acceptedFormats": "RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word to PDF",
|
||||
"subtitle": "Convert Word documents (DOCX, DOC, ODT, RTF) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "DOCX, DOC, ODT, RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel to PDF",
|
||||
"subtitle": "Convert Excel spreadsheets (XLSX, XLS, ODS, CSV) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XLSX, XLS, ODS, CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint to PDF",
|
||||
"subtitle": "Convert PowerPoint presentations (PPTX, PPT, ODP) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PPTX, PPT, ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown to PDF",
|
||||
"subtitle": "Write or paste Markdown and export it as a beautifully formatted PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Preview",
|
||||
"btnUpload": "Upload",
|
||||
"btnSyncScroll": "Sync Scroll",
|
||||
"btnSettings": "Settings",
|
||||
"btnExportPdf": "Export PDF",
|
||||
"settingsTitle": "Markdown Settings",
|
||||
"settingsPreset": "Preset",
|
||||
"presetDefault": "Default (GFM-like)",
|
||||
"presetCommonmark": "CommonMark (strict)",
|
||||
"presetZero": "Minimal (no features)",
|
||||
"settingsOptions": "Markdown Options",
|
||||
"optAllowHtml": "Allow HTML tags",
|
||||
"optBreaks": "Convert newlines to <br>",
|
||||
"optLinkify": "Auto-convert URLs to links",
|
||||
"optTypographer": "Typographer (smart quotes, etc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "PDF Booklet",
|
||||
"subtitle": "Rearrange pages for double-sided booklet printing. Fold and staple to create a booklet.",
|
||||
"howItWorks": "How it works:",
|
||||
"step1": "Upload a PDF file.",
|
||||
"step2": "Pages will be rearranged in booklet order.",
|
||||
"step3": "Print double-sided, flip on short edge, fold and staple.",
|
||||
"paperSize": "Paper Size",
|
||||
"orientation": "Orientation",
|
||||
"portrait": "Portrait",
|
||||
"landscape": "Landscape",
|
||||
"pagesPerSheet": "Pages per Sheet",
|
||||
"createBooklet": "Create Booklet",
|
||||
"processing": "Processing...",
|
||||
"pageCount": "Page count will be padded to multiple of 4 if needed."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS to PDF",
|
||||
"subtitle": "Convert XPS/OXPS documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XPS, OXPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI to PDF",
|
||||
"subtitle": "Convert MOBI e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "MOBI files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB to PDF",
|
||||
"subtitle": "Convert EPUB e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "EPUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 to PDF",
|
||||
"subtitle": "Convert FictionBook (FB2) e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "FB2 files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ to PDF",
|
||||
"subtitle": "Convert comic book archives (CBZ/CBR) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CBZ, CBR files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD to PDF",
|
||||
"subtitle": "Convert WordPerfect documents (WPD) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS to PDF",
|
||||
"subtitle": "Convert WPS Office documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML to PDF",
|
||||
"subtitle": "Convert XML documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XML files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages to PDF",
|
||||
"subtitle": "Convert Apple Pages documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "Pages files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG to PDF",
|
||||
"subtitle": "Convert OpenDocument Graphics (ODG) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODG files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS to PDF",
|
||||
"subtitle": "Convert OpenDocument Spreadsheet (ODS) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP to PDF",
|
||||
"subtitle": "Convert OpenDocument Presentation (ODP) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB to PDF",
|
||||
"subtitle": "Convert Microsoft Publisher (PUB) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD to PDF",
|
||||
"subtitle": "Convert Microsoft Visio (VSD, VSDX) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "VSD, VSDX files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD to PDF",
|
||||
"subtitle": "Convert Adobe Photoshop (PSD) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PSD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF to SVG",
|
||||
"subtitle": "Convert each page of a PDF file into a scalable vector graphic (SVG) for perfect quality at any size."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Extract PDF Tables",
|
||||
"subtitle": "Extract tables from PDF files and export as CSV, JSON, or Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF to CSV",
|
||||
"subtitle": "Extract tables from PDF and convert to CSV format."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF to Excel",
|
||||
"subtitle": "Extract tables from PDF and convert to Excel (XLSX) format."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF to Text",
|
||||
"subtitle": "Extract text from PDF files and save as plain text (.txt). Supports multiple files.",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"convertButton": "Extract Text"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digital Signature PDF",
|
||||
"pageTitle": "Digital Signature PDF - Add Cryptographic Signature | BentoPDF",
|
||||
"subtitle": "Add a cryptographic digital signature to your PDF using X.509 certificates. Supports PKCS#12 (.pfx, .p12) and PEM formats. Your private key never leaves your browser.",
|
||||
"certificateSection": "Certificate",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12)",
|
||||
"certPassword": "Certificate Password",
|
||||
"certPasswordPlaceholder": "Enter certificate password",
|
||||
"certInfo": "Certificate Information",
|
||||
"certSubject": "Subject",
|
||||
"certIssuer": "Issuer",
|
||||
"certValidity": "Valid",
|
||||
"signatureDetails": "Signature Details (Optional)",
|
||||
"reason": "Reason",
|
||||
"reasonPlaceholder": "e.g., I approve this document",
|
||||
"location": "Location",
|
||||
"locationPlaceholder": "e.g., New York, USA",
|
||||
"contactInfo": "Contact Info",
|
||||
"contactPlaceholder": "e.g., email@example.com",
|
||||
"applySignature": "Apply Digital Signature",
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validate PDF Signature",
|
||||
"pageTitle": "Validate PDF Signature - Verify Digital Signatures | BentoPDF",
|
||||
"subtitle": "Verify digital signatures in your PDF files. Check certificate validity, view signer details, and confirm document integrity. All processing happens in your browser."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email to PDF",
|
||||
"subtitle": "Convert email files (EML, MSG) to PDF format. Supports Outlook exports and standard email formats.",
|
||||
"acceptedFormats": "EML, MSG files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Font to Outline",
|
||||
"subtitle": "Convert all fonts to vector outlines for consistent rendering across all devices."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Deskew PDF",
|
||||
"subtitle": "Automatically straighten tilted scanned pages using OpenCV."
|
||||
}
|
||||
}
|
||||
|
||||
323
public/locales/es/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Inicio",
|
||||
"about": "Acerca de",
|
||||
"contact": "Contacto",
|
||||
"licensing": "Licencias",
|
||||
"allTools": "Todas las Herramientas",
|
||||
"openMainMenu": "Abrir menú principal",
|
||||
"language": "Idioma"
|
||||
},
|
||||
"donation": {
|
||||
"message": "¿Te encanta BentoPDF? ¡Ayúdanos a mantenerlo gratis y de código abierto!",
|
||||
"button": "Donar"
|
||||
},
|
||||
"hero": {
|
||||
"title": "El",
|
||||
"pdfToolkit": "Kit de Herramientas PDF",
|
||||
"builtForPrivacy": "diseñado para la privacidad",
|
||||
"noSignups": "Sin Registro",
|
||||
"unlimitedUse": "Uso Ilimitado",
|
||||
"worksOffline": "Funciona Sin Conexión",
|
||||
"startUsing": "Comenzar a Usar Ahora"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Usado por empresas y personas que trabajan en"
|
||||
},
|
||||
"features": {
|
||||
"title": "¿Por qué elegir",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Sin Registro",
|
||||
"description": "Comienza al instante, sin cuentas ni correos electrónicos."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Sin Cargas",
|
||||
"description": "100% del lado del cliente, tus archivos nunca salen de tu dispositivo."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Gratis para Siempre",
|
||||
"description": "Todas las herramientas, sin pruebas, sin restricciones de pago."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Sin Límites",
|
||||
"description": "Usa tanto como quieras, sin límites ocultos."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Procesamiento por Lotes",
|
||||
"description": "Maneja PDFs ilimitados de una sola vez."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Ultrarrápido",
|
||||
"description": "Procesa PDFs al instante, sin esperas ni retrasos."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Comienza con",
|
||||
"toolsLabel": "Herramientas",
|
||||
"subtitle": "Haz clic en una herramienta para abrir el cargador de archivos",
|
||||
"searchPlaceholder": "Buscar una herramienta (ej., 'dividir', 'organizar'...)",
|
||||
"backToTools": "Volver a Herramientas",
|
||||
"firstLoadNotice": "La primera carga toma un momento mientras descargamos nuestro motor de conversión. Después de eso, todas las cargas serán instantáneas."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Haz clic para seleccionar un archivo",
|
||||
"orDragAndDrop": "o arrastra y suelta",
|
||||
"pdfOrImages": "PDFs o Imágenes",
|
||||
"filesNeverLeave": "Tus archivos nunca salen de tu dispositivo.",
|
||||
"addMore": "Agregar Más Archivos",
|
||||
"clearAll": "Limpiar Todo"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Procesando..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Alerta",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Vista Previa del Documento",
|
||||
"downloadAsPdf": "Descargar como PDF",
|
||||
"close": "Cerrar"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Configuración",
|
||||
"shortcuts": "Atajos",
|
||||
"preferences": "Preferencias",
|
||||
"displayPreferences": "Preferencias de Visualización",
|
||||
"searchShortcuts": "Buscar atajos...",
|
||||
"shortcutsInfo": "Mantén presionadas las teclas para establecer un atajo. Los cambios se guardan automáticamente.",
|
||||
"shortcutsWarning": "⚠️ Evita los atajos comunes del navegador (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N, etc.) ya que pueden no funcionar de manera confiable.",
|
||||
"import": "Importar",
|
||||
"export": "Exportar",
|
||||
"resetToDefaults": "Restaurar Valores Predeterminados",
|
||||
"fullWidthMode": "Modo de Ancho Completo",
|
||||
"fullWidthDescription": "Usa el ancho completo de la pantalla para todas las herramientas en lugar de un contenedor centrado",
|
||||
"settingsAutoSaved": "La configuración se guarda automáticamente",
|
||||
"clickToSet": "Haz clic para establecer",
|
||||
"pressKeys": "Presiona teclas...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Atajo Ya en Uso",
|
||||
"assignedTo": "ya está asignado a:",
|
||||
"chooseDifferent": "Por favor elige un atajo diferente.",
|
||||
"reserved": "Advertencia de Atajo Reservado",
|
||||
"commonlyUsed": "se usa comúnmente para:",
|
||||
"unreliable": "Este atajo puede no funcionar de manera confiable o puede entrar en conflicto con el comportamiento del navegador/sistema.",
|
||||
"useAnyway": "¿Quieres usarlo de todos modos?",
|
||||
"resetTitle": "Restablecer Atajos",
|
||||
"resetMessage": "¿Estás seguro de que quieres restablecer todos los atajos a los valores predeterminados?<br><br>Esta acción no se puede deshacer.",
|
||||
"importSuccessTitle": "Importación Exitosa",
|
||||
"importSuccessMessage": "¡Atajos importados exitosamente!",
|
||||
"importFailTitle": "Importación Fallida",
|
||||
"importFailMessage": "Error al importar atajos. Formato de archivo inválido."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Advertencia",
|
||||
"cancel": "Cancelar",
|
||||
"proceed": "Continuar"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Tus datos nunca salen de tu dispositivo",
|
||||
"weKeep": "Mantenemos",
|
||||
"yourInfoSafe": "tu información segura",
|
||||
"byFollowingStandards": "siguiendo estándares de seguridad globales.",
|
||||
"processingLocal": "Todo el procesamiento ocurre localmente en tu dispositivo.",
|
||||
"gdpr": {
|
||||
"title": "Cumplimiento GDPR",
|
||||
"description": "Protege los datos personales y la privacidad de las personas dentro de la Unión Europea."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Cumplimiento CCPA",
|
||||
"description": "Otorga a los residentes de California derechos sobre cómo se recopila, usa y comparte su información personal."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Cumplimiento HIPAA",
|
||||
"description": "Establece salvaguardas para el manejo de información de salud sensible en el sistema de atención médica de Estados Unidos."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Preguntas",
|
||||
"questions": "Frecuentes",
|
||||
"isFree": {
|
||||
"question": "¿BentoPDF es realmente gratis?",
|
||||
"answer": "Sí, absolutamente. Todas las herramientas en BentoPDF son 100% gratuitas, sin límites de archivos, sin registro y sin marcas de agua. Creemos que todos merecen acceso a herramientas PDF simples y potentes sin un muro de pago."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "¿Mis archivos están seguros? ¿Dónde se procesan?",
|
||||
"answer": "Tus archivos están lo más seguros posible porque nunca salen de tu computadora. Todo el procesamiento ocurre directamente en tu navegador web (del lado del cliente). Nunca cargamos tus archivos a un servidor, por lo que mantienes total privacidad y control sobre tus documentos."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "¿Funciona en Mac, Windows y Móvil?",
|
||||
"answer": "¡Sí! Dado que BentoPDF se ejecuta completamente en tu navegador, funciona en cualquier sistema operativo con un navegador web moderno, incluyendo Windows, macOS, Linux, iOS y Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "¿BentoPDF cumple con GDPR?",
|
||||
"answer": "Sí. BentoPDF cumple completamente con GDPR. Dado que todo el procesamiento de archivos ocurre localmente en tu navegador y nunca recopilamos ni transmitimos tus archivos a ningún servidor, no tenemos acceso a tus datos. Esto garantiza que siempre tengas el control de tus documentos."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "¿Almacenan o rastrean alguno de mis archivos?",
|
||||
"answer": "No. Nunca almacenamos, rastreamos ni registramos tus archivos. Todo lo que haces en BentoPDF ocurre en la memoria de tu navegador y desaparece una vez que cierras la página. No hay cargas, no hay registros de historial y no hay servidores involucrados."
|
||||
},
|
||||
"different": {
|
||||
"question": "¿Qué hace que BentoPDF sea diferente de otras herramientas PDF?",
|
||||
"answer": "La mayoría de las herramientas PDF cargan tus archivos a un servidor para procesarlos. BentoPDF nunca hace eso. Utilizamos tecnología web moderna y segura para procesar tus archivos directamente en tu navegador. Esto significa un rendimiento más rápido, mayor privacidad y total tranquilidad."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "¿Cómo me mantiene seguro el procesamiento basado en navegador?",
|
||||
"answer": "Al ejecutarse completamente dentro de tu navegador, BentoPDF garantiza que tus archivos nunca salgan de tu dispositivo. Esto elimina los riesgos de hackeos de servidores, violaciones de datos o accesos no autorizados. Tus archivos siguen siendo tuyos, siempre."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "¿Usan cookies o análisis para rastrearme?",
|
||||
"answer": "Nos preocupamos por tu privacidad. BentoPDF no rastrea información personal. Usamos Simple Analytics únicamente para ver recuentos de visitas anónimas. Esto significa que podemos saber cuántos usuarios visitan nuestro sitio, pero nunca sabemos quién eres. Simple Analytics cumple completamente con GDPR y respeta tu privacidad."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Lo que Nuestros",
|
||||
"users": "Usuarios",
|
||||
"say": "Dicen"
|
||||
},
|
||||
"support": {
|
||||
"title": "¿Te Gusta Mi Trabajo?",
|
||||
"description": "BentoPDF es un proyecto de pasión, creado para proporcionar un kit de herramientas PDF gratuito, privado y potente para todos. Si te resulta útil, considera apoyar su desarrollo. ¡Cada café ayuda!",
|
||||
"buyMeCoffee": "Cómprame un Café"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2025 BentoPDF. Todos los derechos reservados.",
|
||||
"version": "Versión",
|
||||
"company": "Empresa",
|
||||
"aboutUs": "Acerca de Nosotros",
|
||||
"faqLink": "Preguntas Frecuentes",
|
||||
"contactUs": "Contáctanos",
|
||||
"legal": "Legal",
|
||||
"termsAndConditions": "Términos y Condiciones",
|
||||
"privacyPolicy": "Política de Privacidad",
|
||||
"followUs": "Síguenos"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Fusionar PDFs",
|
||||
"description": "Combina archivos completos o selecciona páginas específicas para fusionar en un nuevo documento.",
|
||||
"fileMode": "Modo Archivo",
|
||||
"pageMode": "Modo Página",
|
||||
"howItWorks": "Cómo funciona:",
|
||||
"fileModeInstructions": [
|
||||
"Haz clic y arrastra el ícono para cambiar el orden de los archivos.",
|
||||
"En el cuadro \"Páginas\" para cada archivo, puedes especificar rangos (ej., \"1-3, 5\") para fusionar solo esas páginas.",
|
||||
"Deja el cuadro \"Páginas\" en blanco para incluir todas las páginas de ese archivo."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Todas las páginas de tus PDFs cargados se muestran a continuación.",
|
||||
"Simplemente arrastra y suelta las miniaturas de páginas individuales para crear el orden exacto que deseas para tu nuevo archivo."
|
||||
],
|
||||
"mergePdfs": "Fusionar PDFs"
|
||||
},
|
||||
"common": {
|
||||
"page": "Página",
|
||||
"pages": "Páginas",
|
||||
"of": "de",
|
||||
"download": "Descargar",
|
||||
"cancel": "Cancelar",
|
||||
"save": "Guardar",
|
||||
"delete": "Eliminar",
|
||||
"edit": "Editar",
|
||||
"add": "Agregar",
|
||||
"remove": "Remover",
|
||||
"loading": "Cargando...",
|
||||
"error": "Error",
|
||||
"success": "Éxito",
|
||||
"file": "Archivo",
|
||||
"files": "Archivos"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Creemos que las herramientas PDF deben ser",
|
||||
"subtitle": "rápidas, privadas y gratuitas.",
|
||||
"noCompromises": "Sin compromisos."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Nuestra Misión",
|
||||
"description": "Proporcionar la caja de herramientas PDF más completa que respete tu privacidad y nunca pida pago. Creemos que las herramientas de documentos esenciales deben ser accesibles para todos, en todas partes, sin barreras."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Nuestra Filosofía Central",
|
||||
"title": "Privacidad Primero. Siempre.",
|
||||
"description": "En una era donde los datos son una mercancía, adoptamos un enfoque diferente. Todo el procesamiento de las herramientas de Bentopdf ocurre localmente en tu navegador. Esto significa que tus archivos nunca tocan nuestros servidores, nunca vemos tus documentos y no rastreamos lo que haces. Tus documentos permanecen completa e inequívocamente privados. No es solo una característica; es nuestra base."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Por qué",
|
||||
"speed": {
|
||||
"title": "Diseñado para la Velocidad",
|
||||
"description": "Sin esperar cargas o descargas a un servidor. Al procesar archivos directamente en tu navegador usando tecnologías web modernas como WebAssembly, ofrecemos una velocidad incomparable para todas nuestras herramientas."
|
||||
},
|
||||
"free": {
|
||||
"title": "Completamente Gratis",
|
||||
"description": "Sin pruebas, sin suscripciones, sin tarifas ocultas y sin funciones \"premium\" retenidas como rehenes. Creemos que las herramientas PDF potentes deben ser una utilidad pública, no un centro de ganancias."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "No Requiere Cuenta",
|
||||
"description": "Comienza a usar cualquier herramienta de inmediato. No necesitamos tu correo electrónico, una contraseña o cualquier información personal. Tu flujo de trabajo debe ser sin fricciones y anónimo."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Espíritu de Código Abierto",
|
||||
"description": "Construido con transparencia en mente. Aprovechamos increíbles bibliotecas de código abierto como PDF-lib y PDF.js, y creemos en el esfuerzo impulsado por la comunidad para hacer que las herramientas potentes sean accesibles para todos."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "¿Listo para comenzar?",
|
||||
"description": "Únete a miles de usuarios que confían en Bentopdf para sus necesidades diarias de documentos. Experimenta la diferencia que la privacidad y el rendimiento pueden hacer.",
|
||||
"button": "Explorar Todas las Herramientas"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Ponte en Contacto",
|
||||
"subtitle": "Nos encantaría saber de ti. Ya sea que tengas una pregunta, comentario o solicitud de función, no dudes en comunicarte.",
|
||||
"email": "Puedes contactarnos directamente por correo electrónico en:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licencias para",
|
||||
"subtitle": "Elige la licencia que se ajuste a tus necesidades."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Cargar PDFs",
|
||||
"upload": "Cargar",
|
||||
"addBlankPage": "Agregar Página en Blanco",
|
||||
"edit": "Editar:",
|
||||
"undo": "Deshacer",
|
||||
"redo": "Rehacer",
|
||||
"reset": "Restablecer",
|
||||
"selection": "Selección:",
|
||||
"selectAll": "Seleccionar Todo",
|
||||
"deselectAll": "Deseleccionar Todo",
|
||||
"rotate": "Rotar:",
|
||||
"rotateLeft": "Izquierda",
|
||||
"rotateRight": "Derecha",
|
||||
"transform": "Transformar:",
|
||||
"duplicate": "Duplicar",
|
||||
"split": "Dividir",
|
||||
"clear": "Limpiar:",
|
||||
"delete": "Eliminar",
|
||||
"download": "Descargar:",
|
||||
"downloadSelected": "Descargar Seleccionados",
|
||||
"exportPdf": "Exportar PDF",
|
||||
"uploadPdfFiles": "Seleccionar Archivos PDF",
|
||||
"dragAndDrop": "Arrastra y suelta archivos PDF aquí, o haz clic para seleccionar",
|
||||
"selectFiles": "Seleccionar Archivos",
|
||||
"renderingPages": "Renderizando páginas...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicar esta página",
|
||||
"deletePage": "Eliminar esta página",
|
||||
"insertPdf": "Insertar PDF después de esta página",
|
||||
"toggleSplit": "Alternar división después de esta página"
|
||||
},
|
||||
"pleaseWait": "Por Favor Espera",
|
||||
"pagesRendering": "Las páginas aún se están renderizando. Por favor espera...",
|
||||
"noPagesSelected": "No Se Seleccionaron Páginas",
|
||||
"selectOnePage": "Por favor selecciona al menos una página para descargar.",
|
||||
"noPages": "Sin Páginas",
|
||||
"noPagesToExport": "No hay páginas para exportar.",
|
||||
"renderingTitle": "Renderizando vistas previas de páginas",
|
||||
"errorRendering": "Error al renderizar miniaturas de páginas",
|
||||
"error": "Error",
|
||||
"failedToLoad": "Error al cargar"
|
||||
}
|
||||
}
|
||||
533
public/locales/es/tools.json
Normal file
@@ -0,0 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Herramientas Populares",
|
||||
"editAnnotate": "Editar y Anotar",
|
||||
"convertToPdf": "Convertir a PDF",
|
||||
"convertFromPdf": "Convertir desde PDF",
|
||||
"organizeManage": "Organizar y Gestionar",
|
||||
"optimizeRepair": "Optimizar y Reparar",
|
||||
"securePdf": "Asegurar PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Multiherramienta PDF",
|
||||
"subtitle": "Fusionar, Dividir, Organizar, Eliminar, Rotar, Agregar Páginas en Blanco, Extraer y Duplicar en una interfaz unificada."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Fusionar PDF",
|
||||
"subtitle": "Combina múltiples PDFs en un solo archivo. Preserva Marcadores."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dividir PDF",
|
||||
"subtitle": "Extrae un rango de páginas en un nuevo PDF."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Comprimir PDF",
|
||||
"subtitle": "Reduce el tamaño de archivo de tu PDF.",
|
||||
"algorithmLabel": "Algoritmo de Compresión",
|
||||
"condense": "Condensar (Recomendado)",
|
||||
"photon": "Photon (Para PDFs con Muchas Fotos)",
|
||||
"condenseInfo": "Condensar usa compresión avanzada: elimina peso muerto, optimiza imágenes, reduce fuentes. Mejor para la mayoría de PDFs.",
|
||||
"photonInfo": "Photon convierte páginas en imágenes. Úsalo para PDFs con muchas fotos/escaneados.",
|
||||
"photonWarning": "Advertencia: El texto dejará de ser seleccionable y los enlaces dejarán de funcionar.",
|
||||
"levelLabel": "Nivel de Compresión",
|
||||
"light": "Ligero (Preservar Calidad)",
|
||||
"balanced": "Equilibrado (Recomendado)",
|
||||
"aggressive": "Agresivo (Archivos Más Pequeños)",
|
||||
"extreme": "Extremo (Compresión Máxima)",
|
||||
"grayscale": "Convertir a Escala de Grises",
|
||||
"grayscaleHint": "Reduce el tamaño del archivo eliminando información de color",
|
||||
"customSettings": "Configuración Personalizada",
|
||||
"customSettingsHint": "Ajusta los parámetros de compresión:",
|
||||
"outputQuality": "Calidad de Salida",
|
||||
"resizeImagesTo": "Redimensionar Imágenes a",
|
||||
"onlyProcessAbove": "Solo Procesar Arriba de",
|
||||
"removeMetadata": "Eliminar metadatos",
|
||||
"subsetFonts": "Reducir fuentes (eliminar glifos no usados)",
|
||||
"removeThumbnails": "Eliminar miniaturas incrustadas",
|
||||
"compressButton": "Comprimir PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Editor PDF",
|
||||
"subtitle": "Anotar, resaltar, redactar, comentar, agregar formas/imágenes, buscar y ver PDFs."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG a PDF",
|
||||
"subtitle": "Crea un PDF desde imágenes JPG, JPEG y JPEG2000 (JP2/JPX)."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Firmar PDF",
|
||||
"subtitle": "Dibuja, escribe o carga tu firma."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Recortar PDF",
|
||||
"subtitle": "Recorta los márgenes de cada página en tu PDF."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Extraer Páginas",
|
||||
"subtitle": "Guarda una selección de páginas como nuevos archivos."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicar y Organizar",
|
||||
"subtitle": "Duplica, reordena y elimina páginas."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Eliminar Páginas",
|
||||
"subtitle": "Elimina páginas específicas de tu documento."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Editar Marcadores",
|
||||
"subtitle": "Agrega, edita, importa, elimina y extrae marcadores PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Tabla de Contenidos",
|
||||
"subtitle": "Genera una página de tabla de contenidos desde los marcadores PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Números de Página",
|
||||
"subtitle": "Inserta números de página en tu documento."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Agregar Marca de Agua",
|
||||
"subtitle": "Estampa texto o una imagen sobre tus páginas PDF."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Encabezado y Pie de Página",
|
||||
"subtitle": "Agrega texto en la parte superior e inferior de las páginas."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Invertir Colores",
|
||||
"subtitle": "Crea una versión en \"modo oscuro\" de tu PDF."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Color de Fondo",
|
||||
"subtitle": "Cambia el color de fondo de tu PDF."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Cambiar Color de Texto",
|
||||
"subtitle": "Cambia el color del texto en tu PDF."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Agregar Sellos",
|
||||
"subtitle": "Agrega sellos de imagen a tu PDF usando la barra de herramientas de anotación.",
|
||||
"usernameLabel": "Nombre de Usuario del Sello",
|
||||
"usernamePlaceholder": "Ingresa tu nombre (para sellos)",
|
||||
"usernameHint": "Este nombre aparecerá en los sellos que crees."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Eliminar Anotaciones",
|
||||
"subtitle": "Elimina comentarios, resaltados y enlaces."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Rellenar Formularios PDF",
|
||||
"subtitle": "Rellena formularios directamente en el navegador. También soporta formularios XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Crear Formulario PDF",
|
||||
"subtitle": "Crea formularios PDF rellenables con campos de texto arrastrables."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Eliminar Páginas en Blanco",
|
||||
"subtitle": "Detecta y elimina automáticamente páginas en blanco."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Imágenes a PDF",
|
||||
"subtitle": "Convierte JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP a PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG a PDF",
|
||||
"subtitle": "Crea un PDF desde una o más imágenes PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP a PDF",
|
||||
"subtitle": "Crea un PDF desde una o más imágenes WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG a PDF",
|
||||
"subtitle": "Crea un PDF desde una o más imágenes SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP a PDF",
|
||||
"subtitle": "Crea un PDF desde una o más imágenes BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC a PDF",
|
||||
"subtitle": "Crea un PDF desde una o más imágenes HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF a PDF",
|
||||
"subtitle": "Crea un PDF desde una o más imágenes TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Texto a PDF",
|
||||
"subtitle": "Convierte un archivo de texto plano en un PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON a PDF",
|
||||
"subtitle": "Convierte archivos JSON a formato PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF a JPG",
|
||||
"subtitle": "Convierte cada página PDF en una imagen JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF a PNG",
|
||||
"subtitle": "Convierte cada página PDF en una imagen PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF a WebP",
|
||||
"subtitle": "Convierte cada página PDF en una imagen WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF a BMP",
|
||||
"subtitle": "Convierte cada página PDF en una imagen BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF a TIFF",
|
||||
"subtitle": "Convierte cada página PDF en una imagen TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF a Escala de Grises",
|
||||
"subtitle": "Convierte todos los colores a blanco y negro."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF a JSON",
|
||||
"subtitle": "Convierte archivos PDF a formato JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Hace que un PDF sea buscable y copiable."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alternar y Mezclar Páginas",
|
||||
"subtitle": "Fusiona PDFs alternando páginas de cada PDF. Preserva Marcadores."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Agregar Adjuntos",
|
||||
"subtitle": "Incrusta uno o más archivos en tu PDF."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Extraer Adjuntos",
|
||||
"subtitle": "Extrae todos los archivos incrustados de PDF(s) como un ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Editar Adjuntos",
|
||||
"subtitle": "Ve o elimina adjuntos en tu PDF."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Dividir Páginas",
|
||||
"subtitle": "Divide páginas horizontal o verticalmente."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Agregar Página en Blanco",
|
||||
"subtitle": "Inserta una página vacía en cualquier lugar de tu PDF."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Invertir Páginas",
|
||||
"subtitle": "Invierte el orden de todas las páginas en tu documento."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Rotar PDF",
|
||||
"subtitle": "Gira páginas en incrementos de 90 grados."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotar por Grados Personalizados",
|
||||
"subtitle": "Rota páginas por cualquier ángulo personalizado."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Organiza múltiples páginas en una sola hoja."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Combinar en Una Sola Página",
|
||||
"subtitle": "Une todas las páginas en un desplazamiento continuo."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Ver Metadatos",
|
||||
"subtitle": "Inspecciona las propiedades ocultas de tu PDF."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Editar Metadatos",
|
||||
"subtitle": "Cambia el autor, título y otras propiedades."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDFs a ZIP",
|
||||
"subtitle": "Empaqueta múltiples archivos PDF en un archivo ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Comparar PDFs",
|
||||
"subtitle": "Compara dos PDFs lado a lado."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterizar PDF",
|
||||
"subtitle": "Divide una página grande en múltiples páginas más pequeñas."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Fijar Tamaño de Página",
|
||||
"subtitle": "Estandariza todas las páginas a un tamaño uniforme."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Linealizar PDF",
|
||||
"subtitle": "Optimiza el PDF para visualización web rápida."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Dimensiones de Página",
|
||||
"subtitle": "Analiza el tamaño, orientación y unidades de página."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Eliminar Restricciones",
|
||||
"subtitle": "Elimina la protección por contraseña y las restricciones de seguridad asociadas con archivos PDF firmados digitalmente."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Reparar PDF",
|
||||
"subtitle": "Recupera datos de archivos PDF corruptos o dañados."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Cifrar PDF",
|
||||
"subtitle": "Bloquea tu PDF agregando una contraseña."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Sanear PDF",
|
||||
"subtitle": "Elimina metadatos, anotaciones, scripts y más."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Descifrar PDF",
|
||||
"subtitle": "Desbloquea PDF eliminando la protección por contraseña."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Aplanar PDF",
|
||||
"subtitle": "Hace que los campos de formulario y las anotaciones no sean editables."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Eliminar Metadatos",
|
||||
"subtitle": "Elimina datos ocultos de tu PDF."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Cambiar Permisos",
|
||||
"subtitle": "Establece o cambia los permisos de usuario en un PDF."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT a PDF",
|
||||
"subtitle": "Convierte archivos OpenDocument Text a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos ODT",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV a PDF",
|
||||
"subtitle": "Convierte archivos de hoja de cálculo CSV a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos CSV",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF a PDF",
|
||||
"subtitle": "Convierte documentos Rich Text Format a PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos RTF",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word a PDF",
|
||||
"subtitle": "Convierte documentos Word (DOCX, DOC, ODT, RTF) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos DOCX, DOC, ODT, RTF",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel a PDF",
|
||||
"subtitle": "Convierte hojas de cálculo Excel (XLSX, XLS, ODS, CSV) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos XLSX, XLS, ODS, CSV",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint a PDF",
|
||||
"subtitle": "Convierte presentaciones PowerPoint (PPTX, PPT, ODP) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos PPTX, PPT, ODP",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown a PDF",
|
||||
"subtitle": "Escribe o pega Markdown y expórtalo como un PDF bellamente formateado.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Vista Previa",
|
||||
"btnUpload": "Cargar",
|
||||
"btnSyncScroll": "Sincronizar Desplazamiento",
|
||||
"btnSettings": "Configuración",
|
||||
"btnExportPdf": "Exportar PDF",
|
||||
"settingsTitle": "Configuración de Markdown",
|
||||
"settingsPreset": "Predefinido",
|
||||
"presetDefault": "Predeterminado (similar a GFM)",
|
||||
"presetCommonmark": "CommonMark (estricto)",
|
||||
"presetZero": "Mínimo (sin funciones)",
|
||||
"settingsOptions": "Opciones de Markdown",
|
||||
"optAllowHtml": "Permitir etiquetas HTML",
|
||||
"optBreaks": "Convertir saltos de línea a <br>",
|
||||
"optLinkify": "Auto-convertir URLs a enlaces",
|
||||
"optTypographer": "Tipógrafo (comillas inteligentes, etc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "Folleto PDF",
|
||||
"subtitle": "Reorganiza páginas para impresión de folleto a doble cara. Dobla y engrapa para crear un folleto.",
|
||||
"howItWorks": "Cómo funciona:",
|
||||
"step1": "Carga un archivo PDF.",
|
||||
"step2": "Las páginas se reorganizarán en orden de folleto.",
|
||||
"step3": "Imprime a doble cara, voltea por el borde corto, dobla y engrapa.",
|
||||
"paperSize": "Tamaño de Papel",
|
||||
"orientation": "Orientación",
|
||||
"portrait": "Vertical",
|
||||
"landscape": "Horizontal",
|
||||
"pagesPerSheet": "Páginas por Hoja",
|
||||
"createBooklet": "Crear Folleto",
|
||||
"processing": "Procesando...",
|
||||
"pageCount": "El recuento de páginas se rellenará a múltiplo de 4 si es necesario."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS a PDF",
|
||||
"subtitle": "Convierte documentos XPS/OXPS a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos XPS, OXPS",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI a PDF",
|
||||
"subtitle": "Convierte e-books MOBI a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos MOBI",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB a PDF",
|
||||
"subtitle": "Convierte e-books EPUB a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos EPUB",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 a PDF",
|
||||
"subtitle": "Convierte e-books FictionBook (FB2) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos FB2",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ a PDF",
|
||||
"subtitle": "Convierte archivos de cómics (CBZ/CBR) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos CBZ, CBR",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD a PDF",
|
||||
"subtitle": "Convierte documentos WordPerfect (WPD) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos WPD",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS a PDF",
|
||||
"subtitle": "Convierte documentos WPS Office a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos WPS",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML a PDF",
|
||||
"subtitle": "Convierte documentos XML a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos XML",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages a PDF",
|
||||
"subtitle": "Convierte documentos Apple Pages a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos Pages",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG a PDF",
|
||||
"subtitle": "Convierte archivos OpenDocument Graphics (ODG) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos ODG",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS a PDF",
|
||||
"subtitle": "Convierte archivos OpenDocument Spreadsheet (ODS) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos ODS",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP a PDF",
|
||||
"subtitle": "Convierte archivos OpenDocument Presentation (ODP) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos ODP",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB a PDF",
|
||||
"subtitle": "Convierte archivos Microsoft Publisher (PUB) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos PUB",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD a PDF",
|
||||
"subtitle": "Convierte archivos Microsoft Visio (VSD, VSDX) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos VSD, VSDX",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD a PDF",
|
||||
"subtitle": "Convierte archivos Adobe Photoshop (PSD) a formato PDF. Soporta múltiples archivos.",
|
||||
"acceptedFormats": "Archivos PSD",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF a SVG",
|
||||
"subtitle": "Convierte cada página de un archivo PDF en un gráfico vectorial escalable (SVG) para calidad perfecta a cualquier tamaño."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Extraer Tablas de PDF",
|
||||
"subtitle": "Extrae tablas de archivos PDF y exporta como CSV, JSON o Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF a CSV",
|
||||
"subtitle": "Extrae tablas de PDF y convierte a formato CSV."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF a Excel",
|
||||
"subtitle": "Extrae tablas de PDF y convierte a formato Excel (XLSX)."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF a Texto",
|
||||
"subtitle": "Extrae texto de archivos PDF y guarda como texto plano (.txt). Soporta múltiples archivos.",
|
||||
"note": "Esta herramienta funciona SOLO con PDFs creados digitalmente. Para documentos escaneados o PDFs basados en imágenes, usa nuestra herramienta OCR PDF en su lugar.",
|
||||
"convertButton": "Extraer Texto"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Firma Digital PDF",
|
||||
"pageTitle": "Firma Digital PDF - Agregar Firma Criptográfica | BentoPDF",
|
||||
"subtitle": "Agrega una firma digital criptográfica a tu PDF usando certificados X.509. Soporta formatos PKCS#12 (.pfx, .p12) y PEM. Tu clave privada nunca sale de tu navegador.",
|
||||
"certificateSection": "Certificado",
|
||||
"uploadCert": "Cargar certificado (.pfx, .p12)",
|
||||
"certPassword": "Contraseña del Certificado",
|
||||
"certPasswordPlaceholder": "Ingresa la contraseña del certificado",
|
||||
"certInfo": "Información del Certificado",
|
||||
"certSubject": "Sujeto",
|
||||
"certIssuer": "Emisor",
|
||||
"certValidity": "Válido",
|
||||
"signatureDetails": "Detalles de la Firma (Opcional)",
|
||||
"reason": "Razón",
|
||||
"reasonPlaceholder": "ej., Apruebo este documento",
|
||||
"location": "Ubicación",
|
||||
"locationPlaceholder": "ej., Madrid, España",
|
||||
"contactInfo": "Información de Contacto",
|
||||
"contactPlaceholder": "ej., email@ejemplo.com",
|
||||
"applySignature": "Aplicar Firma Digital",
|
||||
"successMessage": "¡PDF firmado exitosamente! La firma se puede verificar en cualquier lector de PDF."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validar Firma PDF",
|
||||
"pageTitle": "Validar Firma PDF - Verificar Firmas Digitales | BentoPDF",
|
||||
"subtitle": "Verifica firmas digitales en tus archivos PDF. Comprueba la validez del certificado, ve los detalles del firmante y confirma la integridad del documento."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email a PDF",
|
||||
"subtitle": "Convierte archivos de correo (EML, MSG) a formato PDF. Soporta exportaciones de Outlook y formatos de correo estándar.",
|
||||
"acceptedFormats": "Archivos EML, MSG",
|
||||
"convertButton": "Convertir a PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Fuente a Contorno",
|
||||
"subtitle": "Convierte todas las fuentes a contornos vectoriales para una renderización consistente en todos los dispositivos."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Enderezar PDF",
|
||||
"subtitle": "Endereza automáticamente páginas escaneadas inclinadas usando OpenCV."
|
||||
}
|
||||
}
|
||||
323
public/locales/fr/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Accueil",
|
||||
"about": "À propos",
|
||||
"contact": "Contact",
|
||||
"licensing": "Licence",
|
||||
"allTools": "Tous les outils",
|
||||
"openMainMenu": "Ouvrir le menu principal",
|
||||
"language": "Langue"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Vous aimez BentoPDF ? Aidez-nous à le garder open source !",
|
||||
"button": "Soutenir"
|
||||
},
|
||||
"hero": {
|
||||
"title": "La",
|
||||
"pdfToolkit": "palette d’outils PDF",
|
||||
"builtForPrivacy": "conçue pour la confidentialité",
|
||||
"noSignups": "Sans inscription",
|
||||
"unlimitedUse": "Utilisation illimitée",
|
||||
"worksOffline": "Fonctionne hors ligne",
|
||||
"startUsing": "Commencer maintenant"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Utilisé par des entreprises et des professionnels de"
|
||||
},
|
||||
"features": {
|
||||
"title": "Pourquoi choisir",
|
||||
"bentoPdf": "BentoPDF ?",
|
||||
"noSignup": {
|
||||
"title": "Sans inscription",
|
||||
"description": "Utilisation immédiate, sans compte ni email."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Aucun envoi de fichiers",
|
||||
"description": "100 % côté navigateur, vos fichiers ne quittent jamais votre appareil."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Gratuit pour toujours",
|
||||
"description": "Tous les outils, sans essai, sans paiement, sans restrictions."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Sans limites",
|
||||
"description": "Utilisez autant que vous voulez, sans plafonds cachés."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Traitement par lots",
|
||||
"description": "Gérez un nombre illimité de PDF en une seule fois."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Ultra rapide",
|
||||
"description": "Traitez vos PDF instantanément, sans attente."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Commencer avec",
|
||||
"toolsLabel": "Les outils",
|
||||
"subtitle": "Cliquez sur un outil pour importer vos fichiers",
|
||||
"searchPlaceholder": "Rechercher un outil (ex. « scinder », « organiser »...)",
|
||||
"backToTools": "Retour aux outils",
|
||||
"firstLoadNotice": "Le premier chargement peut prendre quelques instants, le temps de charger notre moteur de conversion. Les prochaines fois, tout se chargera instantanément."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Cliquez pour sélectionner un fichier",
|
||||
"orDragAndDrop": "ou glissez-déposez",
|
||||
"pdfOrImages": "PDF ou images",
|
||||
"filesNeverLeave": "Vos fichiers restent sur votre appareil.",
|
||||
"addMore": "Ajouter d’autres fichiers",
|
||||
"clearAll": "Tout effacer"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Traitement en cours..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Alerte",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Aperçu du document",
|
||||
"downloadAsPdf": "Télécharger en PDF",
|
||||
"close": "Fermer"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Paramètres",
|
||||
"shortcuts": "Raccourcis",
|
||||
"preferences": "Préférences",
|
||||
"displayPreferences": "Préférences d’affichage",
|
||||
"searchShortcuts": "Rechercher un raccourci...",
|
||||
"shortcutsInfo": "Maintenez les touches pour définir un raccourci. Les changements sont enregistrés automatiquement.",
|
||||
"shortcutsWarning": "⚠️ Évitez les raccourcis courants du navigateur (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N, etc.), ils peuvent ne pas fonctionner correctement.",
|
||||
"import": "Importer",
|
||||
"export": "Exporter",
|
||||
"resetToDefaults": "Rétablir les paramètres par défaut",
|
||||
"fullWidthMode": "Mode pleine largeur",
|
||||
"fullWidthDescription": "Utiliser toute la largeur de l’écran au lieu d’un affichage centré",
|
||||
"settingsAutoSaved": "Les paramètres sont enregistrés automatiquement",
|
||||
"clickToSet": "Cliquez pour définir",
|
||||
"pressKeys": "Appuyez sur les touches...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Raccourci déjà utilisé",
|
||||
"assignedTo": "est déjà attribué à :",
|
||||
"chooseDifferent": "Veuillez choisir un autre raccourci.",
|
||||
"reserved": "Avertissement de raccourci réservé",
|
||||
"commonlyUsed": "est couramment utilisé pour :",
|
||||
"unreliable": "Ce raccourci peut ne pas fonctionner correctement ou entrer en conflit avec le navigateur ou le système.",
|
||||
"useAnyway": "Souhaitez-vous l’utiliser quand même ?",
|
||||
"resetTitle": "Réinitialiser les raccourcis",
|
||||
"resetMessage": "Êtes-vous sûr de vouloir réinitialiser tous les raccourcis par défaut ?<br><br>Cette action est irréversible.",
|
||||
"importSuccessTitle": "Importation réussie",
|
||||
"importSuccessMessage": "Les raccourcis ont été importés avec succès !",
|
||||
"importFailTitle": "Échec de l’importation",
|
||||
"importFailMessage": "Impossible d’importer les raccourcis. Format de fichier invalide."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Attention",
|
||||
"cancel": "Annuler",
|
||||
"proceed": "Continuer"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Vos données ne quittent jamais votre appareil",
|
||||
"weKeep": "Nous protégeons",
|
||||
"yourInfoSafe": "vos informations",
|
||||
"byFollowingStandards": "en respectant les normes de sécurité internationales.",
|
||||
"processingLocal": "Tous les traitements sont effectués localement sur votre appareil.",
|
||||
"gdpr": {
|
||||
"title": "Conformité RGPD",
|
||||
"description": "Protège les données personnelles et la vie privée des citoyens de l’Union européenne."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Conformité CCPA",
|
||||
"description": "Accorde aux résidents de Californie des droits sur l’utilisation de leurs données personnelles."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Conformité HIPAA",
|
||||
"description": "Définit des règles strictes pour la gestion des données de santé aux États-Unis."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Questions",
|
||||
"questions": "fréquentes",
|
||||
"isFree": {
|
||||
"question": "BentoPDF est-il vraiment gratuit ?",
|
||||
"answer": "Oui, totalement. Tous les outils BentoPDF sont 100 % gratuits, sans limite de fichiers, sans inscription et sans filigrane. Nous pensons que chacun doit avoir accès à des outils PDF simples et puissants, sans barrière payante."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Mes fichiers sont-ils en sécurité ? Où sont-ils traités ?",
|
||||
"answer": "Vos fichiers sont parfaitement sécurisés car ils ne quittent jamais votre ordinateur. Tous les traitements se font directement dans votre navigateur. Aucun fichier n’est envoyé sur un serveur."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Est-ce compatible avec Mac, Windows et mobile ?",
|
||||
"answer": "Oui ! BentoPDF fonctionne entièrement dans le navigateur et est compatible avec Windows, macOS, Linux, iOS et Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF est-il conforme au RGPD ?",
|
||||
"answer": "Oui. Comme tous les traitements sont locaux et qu’aucune donnée n’est collectée ou transmise, vous restez entièrement maître de vos documents."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Stockez-vous ou suivez-vous mes fichiers ?",
|
||||
"answer": "Non. Aucun stockage, aucun suivi, aucun historique. Tout disparaît dès que vous fermez la page."
|
||||
},
|
||||
"different": {
|
||||
"question": "Qu’est-ce qui différencie BentoPDF des autres outils PDF ?",
|
||||
"answer": "La plupart des outils envoient vos fichiers sur un serveur. BentoPDF traite tout localement dans votre navigateur, pour plus de rapidité, de confidentialité et de tranquillité d’esprit."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Pourquoi le traitement dans le navigateur est-il plus sûr ?",
|
||||
"answer": "Parce que vos fichiers restent sur votre appareil. Aucun risque de fuite, de piratage ou d’accès non autorisé."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Utilisez-vous des cookies ou des outils de suivi ?",
|
||||
"answer": "Nous respectons votre vie privée. BentoPDF utilise uniquement des statistiques anonymes pour connaître le nombre de visites, sans jamais identifier les utilisateurs."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Ce que disent",
|
||||
"users": "nos utilisateurs",
|
||||
"say": ""
|
||||
},
|
||||
"support": {
|
||||
"title": "Vous aimez ce projet ?",
|
||||
"description": "BentoPDF est un projet passion, créé pour offrir une palette d’outils PDF gratuite, privée et puissante. Si cela vous aide, vous pouvez soutenir son développement. Chaque café compte !",
|
||||
"buyMeCoffee": "M’offrir un café"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Tous droits réservés.",
|
||||
"version": "Version",
|
||||
"company": "Entreprise",
|
||||
"aboutUs": "À propos",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Nous contacter",
|
||||
"legal": "Mentions légales",
|
||||
"termsAndConditions": "Conditions générales",
|
||||
"privacyPolicy": "Politique de confidentialité",
|
||||
"followUs": "Nous suivre"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Fusionner des PDF",
|
||||
"description": "Combinez des fichiers entiers ou sélectionnez des pages spécifiques pour créer un nouveau document.",
|
||||
"fileMode": "Mode fichiers",
|
||||
"pageMode": "Mode pages",
|
||||
"howItWorks": "Fonctionnement :",
|
||||
"fileModeInstructions": [
|
||||
"Cliquez-glissez l’icône pour modifier l’ordre des fichiers.",
|
||||
"Dans le champ « Pages » de chaque fichier, vous pouvez définir des plages (ex. « 1-3, 5 ») pour ne fusionner que certaines pages.",
|
||||
"Laissez le champ « Pages » vide pour inclure toutes les pages du fichier."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Toutes les pages de vos PDF importés s’affichent ci-dessous.",
|
||||
"Glissez-déposez simplement les miniatures pour définir l’ordre exact de votre nouveau document."
|
||||
],
|
||||
"mergePdfs": "Fusionner les PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Page",
|
||||
"pages": "Pages",
|
||||
"of": "sur",
|
||||
"download": "Télécharger",
|
||||
"cancel": "Annuler",
|
||||
"save": "Enregistrer",
|
||||
"delete": "Supprimer",
|
||||
"edit": "Modifier",
|
||||
"add": "Ajouter",
|
||||
"remove": "Retirer",
|
||||
"loading": "Chargement...",
|
||||
"error": "Erreur",
|
||||
"success": "Succès",
|
||||
"file": "Fichier",
|
||||
"files": "Fichiers"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Nous pensons que les outils PDF doivent être",
|
||||
"subtitle": "rapides, privés et gratuits.",
|
||||
"noCompromises": "Sans compromis."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Notre mission",
|
||||
"description": "Proposer la palette d’outils PDF la plus complète, tout en respectant votre vie privée et sans jamais demander de paiement. Les outils essentiels doivent être accessibles à tous, partout, sans barrières."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Notre philosophie",
|
||||
"title": "La confidentialité avant tout. Toujours.",
|
||||
"description": "À une époque où les données sont devenues une monnaie, nous faisons un choix différent. Tous les traitements des outils BentoPDF sont effectués localement dans votre navigateur. Vos fichiers ne passent jamais par nos serveurs, nous ne voyons jamais vos documents et nous ne suivons pas votre activité. Ce n’est pas une option, c’est notre fondation."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Pourquoi",
|
||||
"speed": {
|
||||
"title": "Pensé pour la vitesse",
|
||||
"description": "Aucune attente liée aux envois ou téléchargements serveur. Grâce au traitement local et aux technologies web modernes comme WebAssembly, nos outils sont extrêmement rapides."
|
||||
},
|
||||
"free": {
|
||||
"title": "Entièrement gratuit",
|
||||
"description": "Aucun essai, aucun abonnement, aucun coût caché, aucune fonctionnalité « premium » bloquée. Les outils PDF doivent être un service public, pas un produit de luxe."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Aucun compte requis",
|
||||
"description": "Utilisez n’importe quel outil immédiatement. Pas d’email, pas de mot de passe, aucune donnée personnelle. Votre flux de travail reste fluide et anonyme."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Esprit open source",
|
||||
"description": "Conçu dans un esprit de transparence. Nous utilisons des bibliothèques open source reconnues comme PDF-lib et PDF.js, et croyons en la force de la communauté."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Prêt à commencer ?",
|
||||
"description": "Rejoignez des milliers d’utilisateurs qui font confiance à BentoPDF au quotidien. Découvrez la différence qu’apportent la confidentialité et la performance.",
|
||||
"button": "Explorer tous les outils"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Nous contacter",
|
||||
"subtitle": "Nous serions ravis d’échanger avec vous. Question, retour ou suggestion de fonctionnalité, n’hésitez pas à nous écrire.",
|
||||
"email": "Vous pouvez nous contacter directement par email à :"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licences pour",
|
||||
"subtitle": "Choisissez la licence adaptée à vos besoins."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Importer des PDF",
|
||||
"upload": "Importer",
|
||||
"addBlankPage": "Ajouter une page vierge",
|
||||
"edit": "Modifier :",
|
||||
"undo": "Annuler",
|
||||
"redo": "Rétablir",
|
||||
"reset": "Réinitialiser",
|
||||
"selection": "Sélection :",
|
||||
"selectAll": "Tout sélectionner",
|
||||
"deselectAll": "Tout désélectionner",
|
||||
"rotate": "Rotation :",
|
||||
"rotateLeft": "Gauche",
|
||||
"rotateRight": "Droite",
|
||||
"transform": "Transformer :",
|
||||
"duplicate": "Dupliquer",
|
||||
"split": "Scinder",
|
||||
"clear": "Effacer :",
|
||||
"delete": "Supprimer",
|
||||
"download": "Téléchargement :",
|
||||
"downloadSelected": "Télécharger la sélection",
|
||||
"exportPdf": "Exporter en PDF",
|
||||
"uploadPdfFiles": "Sélectionner des fichiers PDF",
|
||||
"dragAndDrop": "Glissez-déposez vos fichiers PDF ici ou cliquez pour sélectionner",
|
||||
"selectFiles": "Sélectionner des fichiers",
|
||||
"renderingPages": "Rendu des pages...",
|
||||
"actions": {
|
||||
"duplicatePage": "Dupliquer cette page",
|
||||
"deletePage": "Supprimer cette page",
|
||||
"insertPdf": "Insérer un PDF après cette page",
|
||||
"toggleSplit": "Activer/désactiver la séparation après cette page"
|
||||
},
|
||||
"pleaseWait": "Veuillez patienter",
|
||||
"pagesRendering": "Les pages sont en cours de rendu. Veuillez patienter...",
|
||||
"noPagesSelected": "Aucune page sélectionnée",
|
||||
"selectOnePage": "Veuillez sélectionner au moins une page à télécharger.",
|
||||
"noPages": "Aucune page",
|
||||
"noPagesToExport": "Aucune page à exporter.",
|
||||
"renderingTitle": "Génération des aperçus",
|
||||
"errorRendering": "Échec du rendu des miniatures",
|
||||
"error": "Erreur",
|
||||
"failedToLoad": "Échec du chargement"
|
||||
}
|
||||
}
|
||||
533
public/locales/fr/tools.json
Normal file
@@ -0,0 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Outils populaires",
|
||||
"editAnnotate": "Éditer et annoter",
|
||||
"convertToPdf": "Convertir en PDF",
|
||||
"convertFromPdf": "Convertir depuis le PDF",
|
||||
"organizeManage": "Organiser et gérer",
|
||||
"optimizeRepair": "Optimiser et réparer",
|
||||
"securePdf": "Sécuriser les PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Outil PDF tout-en-un",
|
||||
"subtitle": "Fusionner, scinder, organiser, supprimer, faire pivoter, ajouter des pages vierges, extraire et dupliquer dans une interface unifiée."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Fusionner des PDF",
|
||||
"subtitle": "Assembler plusieurs PDF en un seul fichier, tout en conservant les signets."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Scinder un PDF",
|
||||
"subtitle": "Extraire une plage de pages dans un nouveau PDF."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Compresser un PDF",
|
||||
"subtitle": "Réduire la taille du fichier PDF.",
|
||||
"algorithmLabel": "Algorithme de compression",
|
||||
"condense": "Condensé (recommandé)",
|
||||
"photon": "Photon (pour les PDF riches en photos)",
|
||||
"condenseInfo": "Condensé utilise une compression avancée : suppression du superflu, optimisation des images, sous-ensemble des polices. Idéal pour la plupart des PDF.",
|
||||
"photonInfo": "Photon convertit les pages en images. À utiliser pour les PDF contenant beaucoup de photos ou scannés.",
|
||||
"photonWarning": "Attention : le texte ne sera plus sélectionnable et les liens ne fonctionneront plus.",
|
||||
"levelLabel": "Niveau de compression",
|
||||
"light": "Léger (préserver la qualité)",
|
||||
"balanced": "Équilibré (recommandé)",
|
||||
"aggressive": "Agressif (fichiers plus petits)",
|
||||
"extreme": "Extrême (compression maximale)",
|
||||
"grayscale": "Convertir en niveaux de gris",
|
||||
"grayscaleHint": "Réduit la taille du fichier en supprimant les informations de couleur",
|
||||
"customSettings": "Paramètres personnalisés",
|
||||
"customSettingsHint": "Affiner les paramètres de compression :",
|
||||
"outputQuality": "Qualité de sortie",
|
||||
"resizeImagesTo": "Redimensionner les images à",
|
||||
"onlyProcessAbove": "Traiter uniquement au-dessus de",
|
||||
"removeMetadata": "Supprimer les métadonnées",
|
||||
"subsetFonts": "Sous-ensemble des polices (supprimer les glyphes inutilisés)",
|
||||
"removeThumbnails": "Supprimer les vignettes intégrées",
|
||||
"compressButton": "Compresser le PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Éditeur PDF",
|
||||
"subtitle": "Annoter, surligner, masquer, commenter, ajouter des formes ou images, rechercher et afficher des PDF."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images JPG."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Signer un PDF",
|
||||
"subtitle": "Dessiner, saisir ou importer votre signature."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Rogner un PDF",
|
||||
"subtitle": "Ajuster les marges de chaque page du PDF."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Extraire des pages",
|
||||
"subtitle": "Enregistrer une sélection de pages dans de nouveaux fichiers."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Dupliquer et organiser",
|
||||
"subtitle": "Dupliquer, réorganiser et supprimer des pages."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Supprimer des pages",
|
||||
"subtitle": "Retirer des pages spécifiques du document."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Modifier les signets",
|
||||
"subtitle": "Ajouter, modifier, importer, supprimer et extraire des signets PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Table des matières",
|
||||
"subtitle": "Générer une table des matières à partir des signets du PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Numéros de page",
|
||||
"subtitle": "Insérer une numérotation dans le document."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Ajouter un filigrane",
|
||||
"subtitle": "Apposer un texte ou une image sur les pages du PDF."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "En-tête et pied de page",
|
||||
"subtitle": "Ajouter du texte en haut et en bas des pages."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Inverser les couleurs",
|
||||
"subtitle": "Créer une version « mode sombre » du PDF."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Couleur de fond",
|
||||
"subtitle": "Modifier la couleur de fond du PDF."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Changer la couleur du texte",
|
||||
"subtitle": "Modifier la couleur du texte dans le PDF."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Ajouter des tampons",
|
||||
"subtitle": "Ajouter des tampons image via la barre d’annotations.",
|
||||
"usernameLabel": "Nom du tampon",
|
||||
"usernamePlaceholder": "Entrez votre nom (pour les tampons)",
|
||||
"usernameHint": "Ce nom apparaîtra sur les tampons que vous créez."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Supprimer les annotations",
|
||||
"subtitle": "Retirer les commentaires, surlignages et liens."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Remplir un formulaire PDF",
|
||||
"subtitle": "Remplir des formulaires directement dans le navigateur, y compris les formulaires XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Créer un formulaire PDF",
|
||||
"subtitle": "Créer des formulaires PDF interactifs avec des champs glisser-déposer."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Supprimer les pages blanches",
|
||||
"subtitle": "Détecter et supprimer automatiquement les pages vides."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Images vers PDF",
|
||||
"subtitle": "Convertir un JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP en PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF vers PDF",
|
||||
"subtitle": "Créer un PDF à partir d’une ou plusieurs images TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Texte vers PDF",
|
||||
"subtitle": "Convertir un fichier texte en PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON vers PDF",
|
||||
"subtitle": "Convertir des fichiers JSON en PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF vers JPG",
|
||||
"subtitle": "Convertir chaque page du PDF en image JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF vers PNG",
|
||||
"subtitle": "Convertir chaque page du PDF en image PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF vers WebP",
|
||||
"subtitle": "Convertir chaque page du PDF en image WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF vers BMP",
|
||||
"subtitle": "Convertir chaque page du PDF en image BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF vers TIFF",
|
||||
"subtitle": "Convertir chaque page du PDF en image TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF en niveaux de gris",
|
||||
"subtitle": "Convertir toutes les couleurs en noir et blanc."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF vers JSON",
|
||||
"subtitle": "Convertir des fichiers PDF en JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Rendre un PDF consultable et copiable."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alterner et mélanger les pages",
|
||||
"subtitle": "Fusionner des PDF en alternant les pages de chaque fichier, tout en conservant les signets."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Ajouter des pièces jointes",
|
||||
"subtitle": "Intégrer un ou plusieurs fichiers dans le PDF."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Extraire les pièces jointes",
|
||||
"subtitle": "Extraire tous les fichiers intégrés des PDF dans une archive ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Gérer les pièces jointes",
|
||||
"subtitle": "Afficher ou supprimer les pièces jointes du PDF."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Diviser les pages",
|
||||
"subtitle": "Diviser les pages horizontalement ou verticalement."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Ajouter une page vierge",
|
||||
"subtitle": "Insérer une page vide à n’importe quel endroit du PDF."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Inverser l’ordre des pages",
|
||||
"subtitle": "Renverser l’ordre de toutes les pages du document."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Faire pivoter un PDF",
|
||||
"subtitle": "Tourner les pages par incréments de 90°."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotation par angle personnalisé",
|
||||
"subtitle": "Faire pivoter les pages selon un angle personnalisé."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "PDF N-up",
|
||||
"subtitle": "Afficher plusieurs pages sur une seule feuille."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Combiner en une seule page",
|
||||
"subtitle": "Assembler toutes les pages en un défilement continu."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Afficher les métadonnées",
|
||||
"subtitle": "Consulter les propriétés internes du PDF."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Modifier les métadonnées",
|
||||
"subtitle": "Changer l’auteur, le titre et autres propriétés."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF vers ZIP",
|
||||
"subtitle": "Regrouper plusieurs fichiers PDF dans une archive ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Comparer des PDF",
|
||||
"subtitle": "Comparer deux PDF côte à côte."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posteriser un PDF",
|
||||
"subtitle": "Découper une grande page en plusieurs pages plus petites."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Uniformiser la taille des pages",
|
||||
"subtitle": "Standardiser toutes les pages à un format identique."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Optimiser pour le web",
|
||||
"subtitle": "Optimiser le PDF pour un affichage rapide en ligne."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Dimensions des pages",
|
||||
"subtitle": "Analyser la taille, l’orientation et les unités des pages."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Supprimer les restrictions",
|
||||
"subtitle": "Supprimer les protections par mot de passe et restrictions de sécurité des PDF signés."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Réparer un PDF",
|
||||
"subtitle": "Récupérer les données de fichiers PDF corrompus ou endommagés."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Chiffrer un PDF",
|
||||
"subtitle": "Protéger le PDF en ajoutant un mot de passe."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Nettoyer un PDF",
|
||||
"subtitle": "Supprimer les métadonnées, annotations, scripts et autres éléments sensibles."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Déverrouiller un PDF",
|
||||
"subtitle": "Supprimer la protection par mot de passe."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Aplatir le PDF",
|
||||
"subtitle": "Rendre les champs de formulaire et annotations non modifiables."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Supprimer les métadonnées",
|
||||
"subtitle": "Effacer les données cachées du PDF."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Modifier les autorisations",
|
||||
"subtitle": "Définir ou modifier les permissions utilisateur du PDF."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT vers PDF",
|
||||
"subtitle": "Convertir des fichiers OpenDocument Text au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers ODT",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV vers PDF",
|
||||
"subtitle": "Convertir des fichiers tableur CSV au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers CSV",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF vers PDF",
|
||||
"subtitle": "Convertir des documents Rich Text Format en PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers RTF",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word vers PDF",
|
||||
"subtitle": "Convertir des documents Word (DOCX, DOC, ODT, RTF) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers DOCX, DOC, ODT, RTF",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel vers PDF",
|
||||
"subtitle": "Convertir des feuilles de calcul Excel (XLSX, XLS, ODS, CSV) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers XLSX, XLS, ODS, CSV",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint vers PDF",
|
||||
"subtitle": "Convertir des présentations PowerPoint (PPTX, PPT, ODP) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers PPTX, PPT, ODP",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown vers PDF",
|
||||
"subtitle": "Écrire ou coller du Markdown et l’exporter en PDF avec une mise en forme soignée.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Aperçu",
|
||||
"btnUpload": "Téléverser",
|
||||
"btnSyncScroll": "Synchroniser le défilement",
|
||||
"btnSettings": "Paramètres",
|
||||
"btnExportPdf": "Exporter en PDF",
|
||||
"settingsTitle": "Paramètres Markdown",
|
||||
"settingsPreset": "Préréglage",
|
||||
"presetDefault": "Par défaut (type GFM)",
|
||||
"presetCommonmark": "CommonMark (strict)",
|
||||
"presetZero": "Minimal (aucune fonctionnalité)",
|
||||
"settingsOptions": "Options Markdown",
|
||||
"optAllowHtml": "Autoriser les balises HTML",
|
||||
"optBreaks": "Convertir les retours à la ligne en <br>",
|
||||
"optLinkify": "Convertir automatiquement les URL en liens",
|
||||
"optTypographer": "Typographie (guillemets intelligents, etc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "Livret PDF",
|
||||
"subtitle": "Réorganiser les pages pour l’impression recto verso en livret. Pliez et agrafez pour créer un livret.",
|
||||
"howItWorks": "Fonctionnement :",
|
||||
"step1": "Téléversez un fichier PDF.",
|
||||
"step2": "Les pages seront réorganisées dans l’ordre du livret.",
|
||||
"step3": "Imprimez en recto verso, retournement sur le bord court, pliez et agrafez.",
|
||||
"paperSize": "Format du papier",
|
||||
"orientation": "Orientation",
|
||||
"portrait": "Portrait",
|
||||
"landscape": "Paysage",
|
||||
"pagesPerSheet": "Pages par feuille",
|
||||
"createBooklet": "Créer le livret",
|
||||
"processing": "Traitement...",
|
||||
"pageCount": "Le nombre de pages sera complété au multiple de 4 si nécessaire."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS vers PDF",
|
||||
"subtitle": "Convertir des documents XPS/OXPS au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers XPS, OXPS",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI vers PDF",
|
||||
"subtitle": "Convertir des livres numériques MOBI au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers MOBI",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB vers PDF",
|
||||
"subtitle": "Convertir des livres numériques EPUB au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers EPUB",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 vers PDF",
|
||||
"subtitle": "Convertir des livres numériques FictionBook (FB2) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers FB2",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ vers PDF",
|
||||
"subtitle": "Convertir des archives de bandes dessinées (CBZ/CBR) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers CBZ, CBR",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD vers PDF",
|
||||
"subtitle": "Convertir des documents WordPerfect (WPD) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers WPD",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS vers PDF",
|
||||
"subtitle": "Convertir des documents WPS Office au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers WPS",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML vers PDF",
|
||||
"subtitle": "Convertir des documents XML au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers XML",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages vers PDF",
|
||||
"subtitle": "Convertir des documents Apple Pages au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers Pages",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG vers PDF",
|
||||
"subtitle": "Convertir des fichiers OpenDocument Graphics (ODG) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers ODG",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS vers PDF",
|
||||
"subtitle": "Convertir des fichiers OpenDocument Spreadsheet (ODS) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers ODS",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP vers PDF",
|
||||
"subtitle": "Convertir des fichiers OpenDocument Presentation (ODP) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers ODP",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB vers PDF",
|
||||
"subtitle": "Convertir des fichiers Microsoft Publisher (PUB) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers PUB",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD vers PDF",
|
||||
"subtitle": "Convertir des fichiers Microsoft Visio (VSD, VSDX) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers VSD, VSDX",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD vers PDF",
|
||||
"subtitle": "Convertir des fichiers Adobe Photoshop (PSD) au format PDF. Prend en charge plusieurs fichiers.",
|
||||
"acceptedFormats": "Fichiers PSD",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF vers SVG",
|
||||
"subtitle": "Convertir chaque page d’un fichier PDF en graphique vectoriel évolutif (SVG) pour une qualité parfaite à toutes les tailles."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Extraire les tableaux PDF",
|
||||
"subtitle": "Extraire les tableaux des fichiers PDF et les exporter en CSV, JSON ou Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF vers CSV",
|
||||
"subtitle": "Extraire les tableaux d’un PDF et les convertir au format CSV."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF vers Excel",
|
||||
"subtitle": "Extraire les tableaux d’un PDF et les convertir au format Excel (XLSX)."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF vers texte",
|
||||
"subtitle": "Extraire le texte des fichiers PDF et l’enregistrer en texte brut (.txt). Prend en charge plusieurs fichiers.",
|
||||
"note": "Cet outil fonctionne UNIQUEMENT avec des PDF créés numériquement. Pour les documents scannés ou les PDF basés sur des images, utilisez plutôt notre outil OCR PDF.",
|
||||
"convertButton": "Extraire le texte"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Signature numérique PDF",
|
||||
"pageTitle": "Signature numérique PDF - Ajouter une signature cryptographique | BentoPDF",
|
||||
"subtitle": "Ajouter une signature numérique cryptographique à votre PDF à l’aide de certificats X.509. Prend en charge les formats PKCS#12 (.pfx, .p12) et PEM. Votre clé privée ne quitte jamais votre navigateur.",
|
||||
"certificateSection": "Certificat",
|
||||
"uploadCert": "Téléverser un certificat (.pfx, .p12)",
|
||||
"certPassword": "Mot de passe du certificat",
|
||||
"certPasswordPlaceholder": "Saisissez le mot de passe du certificat",
|
||||
"certInfo": "Informations du certificat",
|
||||
"certSubject": "Sujet",
|
||||
"certIssuer": "Émetteur",
|
||||
"certValidity": "Validité",
|
||||
"signatureDetails": "Détails de la signature (facultatif)",
|
||||
"reason": "Motif",
|
||||
"reasonPlaceholder": "ex. : J’approuve ce document",
|
||||
"location": "Lieu",
|
||||
"locationPlaceholder": "ex. : Paris, France",
|
||||
"contactInfo": "Coordonnées",
|
||||
"contactPlaceholder": "ex. : email@exemple.com",
|
||||
"applySignature": "Appliquer la signature numérique",
|
||||
"successMessage": "PDF signé avec succès ! La signature peut être vérifiée dans n’importe quel lecteur PDF."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Valider la signature PDF",
|
||||
"pageTitle": "Valider la signature PDF - Vérifier les signatures numériques | BentoPDF",
|
||||
"subtitle": "Vérifier les signatures numériques de vos fichiers PDF. Contrôlez la validité du certificat, consultez les informations du signataire et confirmez l’intégrité du document. Tout le traitement s’effectue dans votre navigateur."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email vers PDF",
|
||||
"subtitle": "Convertir des fichiers email (EML, MSG) au format PDF. Prend en charge les exports Outlook et les formats email standards.",
|
||||
"acceptedFormats": "Fichiers EML, MSG",
|
||||
"convertButton": "Convertir en PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Polices en contours",
|
||||
"subtitle": "Convertir toutes les polices en contours vectoriels pour un rendu cohérent sur tous les appareils."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Redresser un PDF",
|
||||
"subtitle": "Redresser automatiquement les pages scannées inclinées à l’aide d’OpenCV."
|
||||
}
|
||||
}
|
||||
323
public/locales/id/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Beranda",
|
||||
"about": "Tentang",
|
||||
"contact": "Kontak",
|
||||
"licensing": "Lisensi",
|
||||
"allTools": "Semua Alat",
|
||||
"openMainMenu": "Buka menu utama",
|
||||
"language": "Bahasa"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Suka BentoPDF? Bantu kami menjaganya tetap gratis dan sumber terbuka!",
|
||||
"button": "Donasi"
|
||||
},
|
||||
"hero": {
|
||||
"title": " ",
|
||||
"pdfToolkit": "Toolkit PDF",
|
||||
"builtForPrivacy": "yang dibuat untuk privasi",
|
||||
"noSignups": "Tidak Ada Pendaftaran",
|
||||
"unlimitedUse": "Penggunaan Tak Terbatas",
|
||||
"worksOffline": "Bekerja Offline ",
|
||||
"startUsing": "Mulai Menggunakan Sekarang"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Digunakan oleh perusahaan dan orang yang bekerja di"
|
||||
},
|
||||
"features": {
|
||||
"title": "Mengapa memilih",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Tidak Ada Pendaftaran",
|
||||
"description": "Mulai seketika, tanpa akun atau email."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Tidak Ada Unggahan",
|
||||
"description": "100% di sisi klien, file Anda tidak pernah meninggalkan perangkat Anda."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Gratis Selamanya",
|
||||
"description": "Semua alat, tidak ada uji coba, tidak ada biaya berlangganan."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Tanpa Batas",
|
||||
"description": "Gunakan sebanyak yang Anda inginkan, tanpa batas tersembunyi."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Pemrosesan Kelompok",
|
||||
"description": "Tangani PDF tak terbatas dalam satu kali jalan."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Sangat Cepat",
|
||||
"description": "Proses PDF secara instan, tanpa menunggu atau penundaan."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Mulai dengan",
|
||||
"toolsLabel": "Alat",
|
||||
"subtitle": "Klik alat untuk membuka pengunggah file",
|
||||
"searchPlaceholder": "Cari alat (contoh, 'pisah', 'organisir'...)",
|
||||
"backToTools": "Kembali ke Alat",
|
||||
"firstLoadNotice": "Pemuatan pertama memerlukan waktu sebentar karena kami mengunduh mesin konversi kami. Setelah itu, semua pemuatan akan instan."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Klik untuk memilih file",
|
||||
"orDragAndDrop": "atau seret dan jatuhkan",
|
||||
"pdfOrImages": "PDF atau Gambar",
|
||||
"filesNeverLeave": "File Anda tidak pernah meninggalkan perangkat Anda.",
|
||||
"addMore": "Tambah Lebih Banyak File",
|
||||
"clearAll": "Hapus Semua"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Memproses..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Peringatan",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Pratinjau Dokumen",
|
||||
"downloadAsPdf": "Unduh sebagai PDF",
|
||||
"close": "Tutup"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Pengaturan",
|
||||
"shortcuts": "Pintasan",
|
||||
"preferences": "Preferensi",
|
||||
"displayPreferences": "Preferensi Tampilan",
|
||||
"searchShortcuts": "Cari pintasan...",
|
||||
"shortcutsInfo": "Tekan dan tahan tombol untuk mengatur pintasan. Perubahan disimpan otomatis.",
|
||||
"shortcutsWarning": "⚠️ Hindari pintasan browser umum (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N dll.) karena mungkin tidak bekerja dengan baik.",
|
||||
"import": "Impor",
|
||||
"export": "Ekspor",
|
||||
"resetToDefaults": "Atur Ulang ke Default",
|
||||
"fullWidthMode": "Mode Lebar Penuh",
|
||||
"fullWidthDescription": "Gunakan lebar layar penuh untuk semua alat, bukan wadah yang dipusatkan",
|
||||
"settingsAutoSaved": "Pengaturan disimpan secara otomatis",
|
||||
"clickToSet": "Klik untuk mengatur",
|
||||
"pressKeys": "Tekan tombol...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Pintasan Sudah Digunakan",
|
||||
"assignedTo": "sudah ditugaskan ke:",
|
||||
"chooseDifferent": "Silakan pilih pintasan yang berbeda.",
|
||||
"reserved": "Peringatan Pintasan Cadangan",
|
||||
"commonlyUsed": "biasanya digunakan untuk:",
|
||||
"unreliable": "Pintasan ini mungkin tidak berfungsi dengan andal atau mungkin bertentangan dengan perilaku browser/sistem.",
|
||||
"useAnyway": "Apakah Anda ingin menggunakannya saja?",
|
||||
"resetTitle": "Atur Ulang Pintasan",
|
||||
"resetMessage": "Apakah Anda yakin ingin mengatur ulang semua pintasan ke default?<br><br>Tindakan ini tidak dapat dibatalkan.",
|
||||
"importSuccessTitle": "Impor Berhasil",
|
||||
"importSuccessMessage": "Pintasan berhasil diimpor!",
|
||||
"importFailTitle": "Impor Gagal",
|
||||
"importFailMessage": "Gagal mengimpor pintasan. Format file tidak valid."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Peringatan",
|
||||
"cancel": "Batal",
|
||||
"proceed": "Lanjutkan"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Data Anda tidak pernah meninggalkan perangkat Anda",
|
||||
"weKeep": "Kami menjaga",
|
||||
"yourInfoSafe": "informasi Anda aman",
|
||||
"byFollowingStandards": "dengan mengikuti standar keamanan global.",
|
||||
"processingLocal": "Semua pemrosesan terjadi secara lokal di perangkat Anda.",
|
||||
"gdpr": {
|
||||
"title": "Kepatuhan GDPR",
|
||||
"description": "Melindungi data pribadi dan privasi individu dalam Uni Eropa."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Kepatuhan CCPA",
|
||||
"description": "Memberikan hak kepada penduduk California atas bagaimana informasi pribadi mereka dikumpulkan, digunakan, dan dibagikan."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Kepatuhan HIPAA",
|
||||
"description": "Menetapkan perlindungan untuk menangani informasi kesehatan sensitif dalam sistem perawatan kesehatan Amerika Serikat."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Pertanyaan yang Sering Diajukan",
|
||||
"questions": "Pertanyaan",
|
||||
"isFree": {
|
||||
"question": "Apakah BentoPDF benar-benar gratis?",
|
||||
"answer": "Ya, tentu saja. Semua alat di BentoPDF 100% gratis digunakan, tanpa batas file, tanpa pendaftaran, dan tanpa watermark. Kami percaya semua orang berhak mendapatkan akses ke alat PDF sederhana dan kuat tanpa paywall."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Apakah file saya aman? Di mana file diproses?",
|
||||
"answer": "File Anda sangat aman karena tidak pernah meninggalkan komputer Anda. Semua pemrosesan terjadi langsung di browser web Anda (sisi klien). Kami tidak pernah mengunggah file Anda ke server, sehingga Anda mempertahankan privasi dan kontrol lengkap atas dokumen Anda."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Apakah ini bekerja di Mac, Windows, dan Mobile?",
|
||||
"answer": "Ya! Karena BentoPDF berjalan sepenuhnya di browser Anda, ini bekerja di sistem operasi apa pun dengan browser web modern, termasuk Windows, macOS, Linux, iOS, dan Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "Apakah BentoPDF patuh GDPR?",
|
||||
"answer": "Ya. BentoPDF sepenuhnya patuh GDPR. Karena semua pemrosesan file terjadi secara lokal di browser Anda dan kami tidak pernah mengumpulkan atau mentransmisikan file Anda ke server mana pun, kami tidak memiliki akses ke data Anda. Ini memastikan Anda selalu mengontrol dokumen Anda."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Apakah Anda menyimpan atau melacak file saya?",
|
||||
"answer": "Tidak. Kami tidak pernah menyimpan, melacak, atau mencatat file Anda. Semua yang Anda lakukan di BentoPDF terjadi di memori browser Anda dan hilang setelah Anda menutup halaman. Tidak ada unggahan, tidak ada log riwayat, dan tidak ada server yang terlibat."
|
||||
},
|
||||
"different": {
|
||||
"question": "Apa yang membuat BentoPDF berbeda dari alat PDF lainnya?",
|
||||
"answer": "Kebanyakan alat PDF mengunggah file Anda ke server untuk diproses. BentoPDF nggak pernah begitu. Kami pakai teknologi web modern dan aman buat memproses file Anda langsung di browser Anda. Ini berarti performa lebih cepat, privasi lebih kuat, dan ketenangan pikiran."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Bagaimana pemrosesan berbasis browser menjaga keamanan saya?",
|
||||
"answer": "Dengan berjalan sepenuhnya di dalam browser Anda, BentoPDF memastikan file Anda tidak pernah meninggalkan perangkat Anda. Ini menghilangkan risiko peretasan server, pelanggaran data, atau akses tidak sah. File Anda tetap milik Anda—selalu."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Apakah Anda menggunakan cookie atau analitik untuk melacak saya?",
|
||||
"answer": "Kami peduli dengan privasi Anda. BentoPDF tidak melacak informasi pribadi. Kami menggunakan Simple Analytics hanya untuk melihat jumlah kunjungan anonim. Ini berarti kami dapat mengetahui berapa banyak pengguna yang mengunjungi situs kami, tetapi kami tidak pernah tahu siapa Anda. Simple Analytics sepenuhnya patuh GDPR dan menghormati privasi Anda."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Apa Kata",
|
||||
"users": "Pengguna",
|
||||
"say": "Kami"
|
||||
},
|
||||
"support": {
|
||||
"title": "Suka Karya Saya?",
|
||||
"description": "BentoPDF adalah proyek yang dibuat dengan sepenuh hati, untuk menyediakan toolkit PDF gratis, pribadi, dan kuat untuk semua orang. Kalau kamu merasa ini berguna, pertimbangkan untuk mendukung pengembangannya. Setiap secangkir kopi membantu!",
|
||||
"buyMeCoffee": "Beli Kopi untuk Saya"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Hak cipta dilindungi.",
|
||||
"version": "Versi",
|
||||
"company": "Perusahaan",
|
||||
"aboutUs": "Tentang Kami",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Hubungi Kami",
|
||||
"legal": "Hukum",
|
||||
"termsAndConditions": "Syarat dan Ketentuan",
|
||||
"privacyPolicy": "Kebijakan Privasi",
|
||||
"followUs": "Ikuti Kami"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Gabung PDF",
|
||||
"description": "Gabungkan file utuh, atau pilih halaman tertentu untuk digabungkan ke dalam dokumen baru.",
|
||||
"fileMode": "Mode File",
|
||||
"pageMode": "Mode Halaman",
|
||||
"howItWorks": "Cara kerjanya:",
|
||||
"fileModeInstructions": [
|
||||
"Klik dan seret ikon untuk mengubah urutan file.",
|
||||
"Di kotak \"Halaman\" untuk setiap file, Anda dapat menentukan rentang (misalnya, \"1-3, 5\") untuk menggabungkan hanya halaman tersebut.",
|
||||
"Biarkan kotak \"Halaman\" kosong untuk menyertakan semua halaman dari file tersebut."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Semua halaman dari PDF yang Anda unggah ditampilkan di bawah.",
|
||||
"Cukup seret dan jatuhkan thumbnail halaman satu per satu untuk membuat urutan yang tepat sesuai keinginan kamu untuk file baru."
|
||||
],
|
||||
"mergePdfs": "Gabung PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Halaman",
|
||||
"pages": "Halaman",
|
||||
"of": "dari",
|
||||
"download": "Unduh",
|
||||
"cancel": "Batal",
|
||||
"save": "Simpan",
|
||||
"delete": "Hapus",
|
||||
"edit": "Edit",
|
||||
"add": "Tambah",
|
||||
"remove": "Hapus",
|
||||
"loading": "Memuat...",
|
||||
"error": "Kesalahan",
|
||||
"success": "Berhasil",
|
||||
"file": "File",
|
||||
"files": "File"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Kami percaya alat PDF harus",
|
||||
"subtitle": "cepat, pribadi, dan gratis.",
|
||||
"noCompromises": "Tidak ada kompromi."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Misi Kami",
|
||||
"description": "Untuk menyediakan toolbox PDF paling komprehensif yang menghormati privasi Anda dan tidak pernah meminta pembayaran. Kami percaya alat dokumen penting harus dapat diakses oleh semua orang, di mana saja, tanpa hambatan."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Filosofi Inti Kami",
|
||||
"title": "Privasi Yang Utama. Selalu.",
|
||||
"description": "Di era di mana data adalah komoditas, kami mengambil pendekatan berbeda. Semua pemrosesan untuk alat Bentopdf terjadi secara lokal di browser Anda. Ini berarti file Anda tidak pernah menyentuh server kami, kami tidak pernah melihat dokumen Anda, dan kami tidak melacak apa yang Anda lakukan. Dokumen Anda tetap utuh dan privat secara tegas. Ini bukan hanya fitur; ini adalah fondasi kami."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Mengapa",
|
||||
"speed": {
|
||||
"title": "Dibuat untuk Kecepatan",
|
||||
"description": "Tidak ada menunggu unggahan atau unduhan ke server. Dengan memproses file langsung di browser Anda menggunakan teknologi web modern seperti WebAssembly, kami menawarkan kecepatan yang tak tertandingi untuk semua alat kami."
|
||||
},
|
||||
"free": {
|
||||
"title": "Sepenuhnya Gratis",
|
||||
"description": "Tidak ada uji coba, tidak ada langganan, tidak ada biaya tersembunyi, dan tidak ada fitur \"premium\" yang ditahan sebagai sandera. Kami percaya alat PDF yang kuat harus menjadi utilitas publik, bukan pusat keuntungan."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Tidak Perlu Akun",
|
||||
"description": "Langsung mulai pakai alat apa saja. Kami tidak perlu email Anda, kata sandi, atau informasi pribadi apa pun. Alur kerja Anda harus lancar dan anonim."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Semangat Sumber Terbuka",
|
||||
"description": "Dibangun dengan transparansi sebagai prioritas. Kami manfaatkan pustaka open-source yang luar biasa seperti PDF-lib dan PDF.js, dan percaya pada upaya yang didorong komunitas untuk membuat alat-alat kuat bisa diakses semua orang."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Siap untuk memulai?",
|
||||
"description": "Bergabunglah dengan ribuan pengguna yang percaya Bentopdf untuk kebutuhan dokumen harian mereka. Rasakan bedanya privasi dan performa yang ditawarkan.",
|
||||
"button": "Jelajahi Semua Alat"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Hubungi Kami",
|
||||
"subtitle": "Kami senang mendengar dari Anda. Apakah Anda memiliki pertanyaan, umpan balik, atau permintaan fitur, jangan ragu untuk menghubungi kami.",
|
||||
"email": "Anda dapat menghubungi kami secara langsung melalui email di:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Lisensi untuk",
|
||||
"subtitle": "Pilih lisensi yang sesuai dengan kebutuhan Anda."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Unggah PDF",
|
||||
"upload": "Unggah",
|
||||
"addBlankPage": "Tambah Halaman Kosong",
|
||||
"edit": "Edit:",
|
||||
"undo": "Undo",
|
||||
"redo": "Redo",
|
||||
"reset": "Atur Ulang",
|
||||
"selection": "Pilihan:",
|
||||
"selectAll": "Pilih Semua",
|
||||
"deselectAll": "Batalkan Pilih Semua",
|
||||
"rotate": "Putar:",
|
||||
"rotateLeft": "Kiri",
|
||||
"rotateRight": "Kanan",
|
||||
"transform": "Transform:",
|
||||
"duplicate": "Duplikat",
|
||||
"split": "Pisah",
|
||||
"clear": "Hapus:",
|
||||
"delete": "Hapus",
|
||||
"download": "Unduh:",
|
||||
"downloadSelected": "Unduh yang Dipilih",
|
||||
"exportPdf": "Ekspor PDF",
|
||||
"uploadPdfFiles": "Pilih File PDF",
|
||||
"dragAndDrop": "Seret dan jatuhkan file PDF di sini, atau klik untuk memilih",
|
||||
"selectFiles": "Pilih File",
|
||||
"renderingPages": "Merender halaman...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplikat halaman ini",
|
||||
"deletePage": "Hapus halaman ini",
|
||||
"insertPdf": "Sisipkan PDF setelah halaman ini",
|
||||
"toggleSplit": "Alihkan pisah setelah halaman ini"
|
||||
},
|
||||
"pleaseWait": "Harap Tunggu",
|
||||
"pagesRendering": "Halaman masih dirender. Harap tunggu...",
|
||||
"noPagesSelected": "Tidak Ada Halaman yang Dipilih",
|
||||
"selectOnePage": "Silakan pilih setidaknya satu halaman untuk diunduh.",
|
||||
"noPages": "Tidak Ada Halaman",
|
||||
"noPagesToExport": "Tidak ada halaman untuk diekspor.",
|
||||
"renderingTitle": "Merender pratinjau halaman",
|
||||
"errorRendering": "Gagal merender thumbnail halaman",
|
||||
"error": "Kesalahan",
|
||||
"failedToLoad": "Gagal memuat"
|
||||
}
|
||||
}
|
||||
533
public/locales/id/tools.json
Normal file
@@ -0,0 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Alat Populer",
|
||||
"editAnnotate": "Edit & Anotasi",
|
||||
"convertToPdf": "Konversi ke PDF",
|
||||
"convertFromPdf": "Konversi dari PDF",
|
||||
"organizeManage": "Atur & Kelola",
|
||||
"optimizeRepair": "Optimalkan & Perbaiki",
|
||||
"securePdf": "Amankan PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Alat Multi PDF",
|
||||
"subtitle": "Gabung, Pisah, Atur, Hapus, Putar, Tambah Halaman Kosong, Ekstrak dan Duplikat dalam antarmuka terpadu."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Gabung PDF",
|
||||
"subtitle": "Gabungkan beberapa PDF menjadi satu file. Mempertahankan Bookmark."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Pisah PDF",
|
||||
"subtitle": "Ekstrak rentang halaman ke PDF baru."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Kompres PDF",
|
||||
"subtitle": "Kurangi ukuran file PDF Anda.",
|
||||
"algorithmLabel": "Algoritma Kompresi",
|
||||
"condense": "Kondensasi (Direkomendasikan)",
|
||||
"photon": "Photon (Untuk PDF yang penuh Foto)",
|
||||
"condenseInfo": "Kondensasi menggunakan kompresi lanjutan: menghapus bobot mati, mengoptimalkan gambar, subset font. Terbaik untuk sebagian besar PDF.",
|
||||
"photonInfo": "Photon mengkonversi halaman ke gambar. Gunakan untuk PDF penuh foto/terpindai.",
|
||||
"photonWarning": "Peringatan: Teks akan menjadi tidak dapat dipilih dan tautan akan berhenti berfungsi.",
|
||||
"levelLabel": "Tingkat Kompresi",
|
||||
"light": "Ringan (Pertahankan Kualitas)",
|
||||
"balanced": "Seimbang (Direkomendasikan)",
|
||||
"aggressive": "Agresif (File Lebih Kecil)",
|
||||
"extreme": "Ekstrem (Kompresi Maksimum)",
|
||||
"grayscale": "Konversi ke Grayscale",
|
||||
"grayscaleHint": "Mengurangi ukuran file dengan menghapus informasi warna",
|
||||
"customSettings": "Pengaturan Kustom",
|
||||
"customSettingsHint": "Sesuaikan parameter kompresi:",
|
||||
"outputQuality": "Kualitas Output",
|
||||
"resizeImagesTo": "Ubah Ukuran Gambar Ke",
|
||||
"onlyProcessAbove": "Hanya Proses Di Atas",
|
||||
"removeMetadata": "Hapus metadata",
|
||||
"subsetFonts": "Subset font (hapus glyph yang tidak digunakan)",
|
||||
"removeThumbnails": "Hapus thumbnail tersemat",
|
||||
"compressButton": "Kompres PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Editor PDF",
|
||||
"subtitle": "Anotasi, sorot, redaksi, komentar, tambah bentuk/gambar, cari, dan lihat PDF."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG ke PDF",
|
||||
"subtitle": "Buat PDF dari gambar JPG, JPEG, dan JPEG2000 (JP2/JPX)."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Tanda Tangan PDF",
|
||||
"subtitle": "Gambar, ketik, atau unggah tanda tangan Anda."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Potong PDF",
|
||||
"subtitle": "Potong margin setiap halaman di PDF Anda."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Ekstrak Halaman",
|
||||
"subtitle": "Simpan pilihan halaman sebagai file baru."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplikat & Atur",
|
||||
"subtitle": "Duplikat, susun ulang, dan hapus halaman."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Hapus Halaman",
|
||||
"subtitle": "Hapus halaman tertentu dari dokumen Anda."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Edit Bookmark",
|
||||
"subtitle": "Tambah, edit, impor, hapus dan ekstrak bookmark PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Daftar Isi",
|
||||
"subtitle": "Hasilkan halaman daftar isi dari bookmark PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Nomor Halaman",
|
||||
"subtitle": "Sisipkan nomor halaman ke dokumen Anda."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Tambah Watermark",
|
||||
"subtitle": "Cap teks atau gambar di atas halaman PDF Anda."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Header & Footer",
|
||||
"subtitle": "Tambah teks ke bagian atas dan bawah halaman."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Balik Warna",
|
||||
"subtitle": "Buat versi \"mode gelap\" dari PDF Anda."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Warna Latar Belakang",
|
||||
"subtitle": "Ubah warna latar belakang PDF Anda."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Ubah Warna Teks",
|
||||
"subtitle": "Ubah warna teks di PDF Anda."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Tambah Stempel",
|
||||
"subtitle": "Tambah stempel gambar ke PDF Anda menggunakan toolbar anotasi.",
|
||||
"usernameLabel": "Nama Pengguna Stempel",
|
||||
"usernamePlaceholder": "Masukkan nama Anda (untuk stempel)",
|
||||
"usernameHint": "Nama ini akan muncul pada stempel yang Anda buat."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Hapus Anotasi",
|
||||
"subtitle": "Hapus komentar, sorotan, dan tautan."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Pengisi Formulir PDF",
|
||||
"subtitle": "Isi formulir langsung di browser. Juga mendukung formulir XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Buat Formulir PDF",
|
||||
"subtitle": "Buat formulir PDF yang dapat diisi dengan bidang teks drag-and-drop."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Hapus Halaman Kosong",
|
||||
"subtitle": "Deteksi dan hapus halaman kosong secara otomatis."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Gambar ke PDF",
|
||||
"subtitle": "Konversi JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP ke PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG ke PDF",
|
||||
"subtitle": "Buat PDF dari satu atau lebih gambar PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP ke PDF",
|
||||
"subtitle": "Buat PDF dari satu atau lebih gambar WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG ke PDF",
|
||||
"subtitle": "Buat PDF dari satu atau lebih gambar SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP ke PDF",
|
||||
"subtitle": "Buat PDF dari satu atau lebih gambar BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC ke PDF",
|
||||
"subtitle": "Buat PDF dari satu atau lebih gambar HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF ke PDF",
|
||||
"subtitle": "Buat PDF dari satu atau lebih gambar TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Teks ke PDF",
|
||||
"subtitle": "Konversi file teks biasa menjadi PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON ke PDF",
|
||||
"subtitle": "Konversi file JSON ke format PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF ke JPG",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF ke PNG",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF ke WebP",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF ke BMP",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF ke TIFF",
|
||||
"subtitle": "Konversi setiap halaman PDF menjadi gambar TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF ke Skala Abu-abu",
|
||||
"subtitle": "Konversi semua warna ke hitam dan putih."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF ke JSON",
|
||||
"subtitle": "Konversi file PDF ke format JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Buat PDF dapat dicari dan disalin."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alternatif & Campur Halaman",
|
||||
"subtitle": "Gabung PDF dengan menggantikan halaman dari setiap PDF. Mempertahankan Bookmark."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Tambah Lampiran",
|
||||
"subtitle": "Sematkan satu atau lebih file ke PDF Anda."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Ekstrak Lampiran",
|
||||
"subtitle": "Ekstrak semua file tersemat dari PDF sebagai ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Edit Lampiran",
|
||||
"subtitle": "Lihat atau hapus lampiran di PDF Anda."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Bagi Halaman",
|
||||
"subtitle": "Bagi halaman secara horizontal atau vertikal."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Tambah Halaman Kosong",
|
||||
"subtitle": "Sisipkan halaman kosong di mana saja di PDF Anda."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Balik Halaman",
|
||||
"subtitle": "Balik urutan semua halaman di dokumen Anda."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Putar PDF",
|
||||
"subtitle": "Putar halaman dalam kenaikan 90 derajat."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Putar dengan Derajat Kustom",
|
||||
"subtitle": "Putar halaman dengan sudut kustom apa pun."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Susun beberapa halaman ke satu lembar."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Gabung ke Halaman Tunggal",
|
||||
"subtitle": "Jahit semua halaman menjadi satu gulungan berkelanjutan."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Lihat Metadata",
|
||||
"subtitle": "Periksa properti tersembunyi PDF Anda."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Edit Metadata",
|
||||
"subtitle": "Ubah penulis, judul, dan properti lainnya."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF ke ZIP",
|
||||
"subtitle": "Paket beberapa file PDF ke arsip ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Bandingkan PDF",
|
||||
"subtitle": "Bandingkan dua PDF berdampingan."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterisasi PDF",
|
||||
"subtitle": "Pisah halaman besar menjadi beberapa halaman lebih kecil."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Perbaiki Ukuran Halaman",
|
||||
"subtitle": "Standarkan semua halaman ke ukuran seragam."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Linierisasi PDF",
|
||||
"subtitle": "Optimalkan PDF untuk tampilan web cepat."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Dimensi Halaman",
|
||||
"subtitle": "Analisis ukuran halaman, orientasi, dan unit."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Hapus Pembatasan",
|
||||
"subtitle": "Hapus perlindungan kata sandi dan pembatasan keamanan yang terkait dengan file PDF yang ditandatangani secara digital."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Perbaiki PDF",
|
||||
"subtitle": "Pulihkan data dari file PDF yang rusak atau rusak."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Enkripsi PDF",
|
||||
"subtitle": "Kunci PDF Anda dengan menambahkan kata sandi."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Sanitasi PDF",
|
||||
"subtitle": "Hapus metadata, anotasi, skrip, dan lainnya."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Dekripsi PDF",
|
||||
"subtitle": "Buka kunci PDF dengan menghapus perlindungan kata sandi."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Ratakan PDF",
|
||||
"subtitle": "Buat bidang formulir dan anotasi tidak dapat diedit."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Hapus Metadata",
|
||||
"subtitle": "Hapus data tersembunyi dari PDF Anda."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Ubah Izin",
|
||||
"subtitle": "Atur atau ubah izin pengguna pada PDF."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT ke PDF",
|
||||
"subtitle": "Konversi file OpenDocument Text ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File ODT",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV ke PDF",
|
||||
"subtitle": "Konversi file spreadsheet CSV ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File CSV",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF ke PDF",
|
||||
"subtitle": "Konversi dokumen Rich Text Format ke PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File RTF",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word ke PDF",
|
||||
"subtitle": "Konversi dokumen Word (DOCX, DOC, ODT, RTF) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File DOCX, DOC, ODT, RTF",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel ke PDF",
|
||||
"subtitle": "Konversi spreadsheet Excel (XLSX, XLS, ODS, CSV) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File XLSX, XLS, ODS, CSV",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint ke PDF",
|
||||
"subtitle": "Konversi presentasi PowerPoint (PPTX, PPT, ODP) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File PPTX, PPT, ODP",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown ke PDF",
|
||||
"subtitle": "Tulis atau tempel Markdown dan ekspor sebagai PDF yang diformat dengan indah.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Pratinjau",
|
||||
"btnUpload": "Unggah",
|
||||
"btnSyncScroll": "Sinkron Gulir",
|
||||
"btnSettings": "Pengaturan",
|
||||
"btnExportPdf": "Ekspor PDF",
|
||||
"settingsTitle": "Pengaturan Markdown",
|
||||
"settingsPreset": "Preset",
|
||||
"presetDefault": "Default (seperti GFM)",
|
||||
"presetCommonmark": "CommonMark (ketat)",
|
||||
"presetZero": "Minimal (tanpa fitur)",
|
||||
"settingsOptions": "Opsi Markdown",
|
||||
"optAllowHtml": "Izinkan tag HTML",
|
||||
"optBreaks": "Konversi baris baru ke <br>",
|
||||
"optLinkify": "Konversi otomatis URL ke tautan",
|
||||
"optTypographer": "Typographer (kutipan cerdas, dll.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "Buku Kecil PDF",
|
||||
"subtitle": "Susun ulang halaman untuk pencetakan buku kecil dua sisi. Lipat dan jahit untuk membuat buku kecil.",
|
||||
"howItWorks": "Cara kerjanya:",
|
||||
"step1": "Unggah file PDF.",
|
||||
"step2": "Halaman akan disusun ulang dalam urutan buku kecil.",
|
||||
"step3": "Cetak dua sisi, balik di tepi pendek, lipat dan jahit.",
|
||||
"paperSize": "Ukuran Kertas",
|
||||
"orientation": "Orientasi",
|
||||
"portrait": "Potret",
|
||||
"landscape": "Lanskap",
|
||||
"pagesPerSheet": "Halaman per Lembar",
|
||||
"createBooklet": "Buat Buku Kecil",
|
||||
"processing": "Memproses...",
|
||||
"pageCount": "Jumlah halaman akan diisi ke kelipatan 4 jika diperlukan."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS ke PDF",
|
||||
"subtitle": "Konversi dokumen XPS/OXPS ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File XPS, OXPS",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI ke PDF",
|
||||
"subtitle": "Konversi e-book MOBI ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File MOBI",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB ke PDF",
|
||||
"subtitle": "Konversi e-book EPUB ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File EPUB",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 ke PDF",
|
||||
"subtitle": "Konversi e-book FictionBook (FB2) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File FB2",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ ke PDF",
|
||||
"subtitle": "Konversi arsip buku komik (CBZ/CBR) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File CBZ, CBR",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD ke PDF",
|
||||
"subtitle": "Konversi dokumen WordPerfect (WPD) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File WPD",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS ke PDF",
|
||||
"subtitle": "Konversi dokumen WPS Office ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File WPS",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML ke PDF",
|
||||
"subtitle": "Konversi dokumen XML ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File XML",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages ke PDF",
|
||||
"subtitle": "Konversi dokumen Apple Pages ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File Pages",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG ke PDF",
|
||||
"subtitle": "Konversi file OpenDocument Graphics (ODG) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File ODG",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS ke PDF",
|
||||
"subtitle": "Konversi file OpenDocument Spreadsheet (ODS) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File ODS",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP ke PDF",
|
||||
"subtitle": "Konversi file OpenDocument Presentation (ODP) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File ODP",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB ke PDF",
|
||||
"subtitle": "Konversi file Microsoft Publisher (PUB) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File PUB",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD ke PDF",
|
||||
"subtitle": "Konversi file Microsoft Visio (VSD, VSDX) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File VSD, VSDX",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD ke PDF",
|
||||
"subtitle": "Konversi file Adobe Photoshop (PSD) ke format PDF. Mendukung beberapa file.",
|
||||
"acceptedFormats": "File PSD",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF ke SVG",
|
||||
"subtitle": "Konversi setiap halaman file PDF menjadi grafik vektor skalabel (SVG) untuk kualitas sempurna di ukuran apa pun."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Ekstrak Tabel PDF",
|
||||
"subtitle": "Ekstrak tabel dari file PDF dan ekspor sebagai CSV, JSON, atau Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF ke CSV",
|
||||
"subtitle": "Ekstrak tabel dari PDF dan konversi ke format CSV."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF ke Excel",
|
||||
"subtitle": "Ekstrak tabel dari PDF dan konversi ke format Excel (XLSX)."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF ke Teks",
|
||||
"subtitle": "Ekstrak teks dari file PDF dan simpan sebagai teks biasa (.txt). Mendukung beberapa file.",
|
||||
"note": "Alat ini bekerja HANYA dengan PDF yang dibuat secara digital. Untuk dokumen terpindai atau PDF berbasis gambar, gunakan alat OCR PDF kami sebagai gantinya.",
|
||||
"convertButton": "Ekstrak Teks"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Tanda Tangan Digital PDF",
|
||||
"pageTitle": "Tanda Tangan Digital PDF - Tambah Tanda Tangan Kriptografi | BentoPDF",
|
||||
"subtitle": "Tambah tanda tangan digital kriptografi ke PDF Anda menggunakan sertifikat X.509. Mendukung format PKCS#12 (.pfx, .p12) dan PEM. Kunci pribadi Anda tidak pernah meninggalkan browser Anda.",
|
||||
"certificateSection": "Sertifikat",
|
||||
"uploadCert": "Unggah sertifikat (.pfx, .p12)",
|
||||
"certPassword": "Kata Sandi Sertifikat",
|
||||
"certPasswordPlaceholder": "Masukkan kata sandi sertifikat",
|
||||
"certInfo": "Informasi Sertifikat",
|
||||
"certSubject": "Subjek",
|
||||
"certIssuer": "Penerbit",
|
||||
"certValidity": "Valid",
|
||||
"signatureDetails": "Detail Tanda Tangan (Opsional)",
|
||||
"reason": "Alasan",
|
||||
"reasonPlaceholder": "misalnya, Saya menyetujui dokumen ini",
|
||||
"location": "Lokasi",
|
||||
"locationPlaceholder": "misalnya, Jakarta, Indonesia",
|
||||
"contactInfo": "Info Kontak",
|
||||
"contactPlaceholder": "misalnya, email@contoh.com",
|
||||
"applySignature": "Terapkan Tanda Tangan Digital",
|
||||
"successMessage": "PDF berhasil ditandatangani! Tanda tangan dapat diverifikasi di pembaca PDF apa pun."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validasi Tanda Tangan PDF",
|
||||
"pageTitle": "Validasi Tanda Tangan PDF - Verifikasi Tanda Tangan Digital | BentoPDF",
|
||||
"subtitle": "Verifikasi tanda tangan digital di file PDF Anda. Periksa validitas sertifikat, lihat detail penandatangan, dan konfirmasi integritas dokumen. Semua pemrosesan terjadi di browser Anda."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email ke PDF",
|
||||
"subtitle": "Konversi file email (EML, MSG) ke format PDF. Mendukung ekspor Outlook dan format email standar.",
|
||||
"acceptedFormats": "File EML, MSG",
|
||||
"convertButton": "Konversi ke PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Font ke Garis Tepi",
|
||||
"subtitle": "Konversi semua font ke garis tepi vektor untuk tampilan konsisten di semua perangkat."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Luruskan PDF",
|
||||
"subtitle": "Otomatis meluruskan halaman hasil pindai yang miring menggunakan OpenCV."
|
||||
}
|
||||
}
|
||||
323
public/locales/it/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"about": "Chi siamo",
|
||||
"contact": "Contatti",
|
||||
"licensing": "Licenze",
|
||||
"allTools": "Tutti gli strumenti",
|
||||
"openMainMenu": "Apri il menu principale",
|
||||
"language": "Lingua"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Ti piace BentoPDF? Aiutaci a mantenerlo gratuito e open source!",
|
||||
"button": "Dona"
|
||||
},
|
||||
"hero": {
|
||||
"title": "Il",
|
||||
"pdfToolkit": "kit di strumenti PDF",
|
||||
"builtForPrivacy": "pensato per la privacy",
|
||||
"noSignups": "Nessuna registrazione",
|
||||
"unlimitedUse": "Uso illimitato",
|
||||
"worksOffline": "Funziona offline",
|
||||
"startUsing": "Inizia a usarlo ora"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Usato da aziende e persone che lavorano in"
|
||||
},
|
||||
"features": {
|
||||
"title": "Perché scegliere",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Nessuna registrazione",
|
||||
"description": "Inizia subito, senza account né email."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Nessun caricamento",
|
||||
"description": "100% client-side, i tuoi file non lasciano mai il dispositivo."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Sempre gratis",
|
||||
"description": "Tutti gli strumenti, nessuna prova, nessun paywall."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Senza limiti",
|
||||
"description": "Usalo quanto vuoi, senza limiti nascosti."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Elaborazione in batch",
|
||||
"description": "Gestisci un numero illimitato di PDF in un'unica operazione."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Fulmineo",
|
||||
"description": "Elabora i PDF istantaneamente, senza attese o ritardi."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Inizia con",
|
||||
"toolsLabel": "Strumenti",
|
||||
"subtitle": "Clicca su uno strumento per aprire il caricatore di file",
|
||||
"searchPlaceholder": "Cerca uno strumento (es. \"split\", \"organizza\"...)",
|
||||
"backToTools": "Torna agli strumenti",
|
||||
"firstLoadNotice": "Il primo caricamento richiede qualche istante mentre scarichiamo il motore di conversione. Dopo di ciò, tutti i caricamenti saranno immediati."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Clicca per selezionare un file",
|
||||
"orDragAndDrop": "oppure trascina e rilascia",
|
||||
"pdfOrImages": "PDF o immagini",
|
||||
"filesNeverLeave": "I tuoi file non lasciano mai il tuo dispositivo.",
|
||||
"addMore": "Aggiungi altri file",
|
||||
"clearAll": "Svuota tutto"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Elaborazione..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Avviso",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Anteprima documento",
|
||||
"downloadAsPdf": "Scarica come PDF",
|
||||
"close": "Chiudi"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Impostazioni",
|
||||
"shortcuts": "Scorciatoie",
|
||||
"preferences": "Preferenze",
|
||||
"displayPreferences": "Preferenze di visualizzazione",
|
||||
"searchShortcuts": "Cerca scorciatoie...",
|
||||
"shortcutsInfo": "Premi e tieni premuti i tasti per impostare una scorciatoia. Le modifiche vengono salvate automaticamente.",
|
||||
"shortcutsWarning": "⚠️ Evita le scorciatoie comuni del browser (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N ecc.) perché potrebbero non funzionare in modo affidabile.",
|
||||
"import": "Importa",
|
||||
"export": "Esporta",
|
||||
"resetToDefaults": "Reimposta ai valori predefiniti",
|
||||
"fullWidthMode": "Modalità a tutta larghezza",
|
||||
"fullWidthDescription": "Usa l'intera larghezza dello schermo per tutti gli strumenti invece di un contenitore centrato",
|
||||
"settingsAutoSaved": "Le impostazioni vengono salvate automaticamente",
|
||||
"clickToSet": "Clicca per impostare",
|
||||
"pressKeys": "Premi i tasti...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Scorciatoia già in uso",
|
||||
"assignedTo": "è già assegnata a:",
|
||||
"chooseDifferent": "Per favore scegli una scorciatoia diversa.",
|
||||
"reserved": "Avviso: scorciatoia riservata",
|
||||
"commonlyUsed": "è comunemente usata per:",
|
||||
"unreliable": "Questa scorciatoia potrebbe non funzionare in modo affidabile o potrebbe avere conflitti con il comportamento del browser/sistema.",
|
||||
"useAnyway": "Vuoi usarla comunque?",
|
||||
"resetTitle": "Reimposta scorciatoie",
|
||||
"resetMessage": "Sei sicuro di voler reimpostare tutte le scorciatoie ai valori predefiniti?<br><br>Questa azione non può essere annullata.",
|
||||
"importSuccessTitle": "Importazione riuscita",
|
||||
"importSuccessMessage": "Scorciatoie importate con successo!",
|
||||
"importFailTitle": "Importazione fallita",
|
||||
"importFailMessage": "Impossibile importare le scorciatoie. Formato file non valido."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Avviso",
|
||||
"cancel": "Annulla",
|
||||
"proceed": "Procedi"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "I tuoi dati non lasciano mai il tuo dispositivo",
|
||||
"weKeep": "Manteniamo",
|
||||
"yourInfoSafe": "le tue informazioni al sicuro",
|
||||
"byFollowingStandards": "seguendo gli standard di sicurezza globali.",
|
||||
"processingLocal": "Tutte le elaborazioni avvengono localmente sul tuo dispositivo.",
|
||||
"gdpr": {
|
||||
"title": "Conformità GDPR",
|
||||
"description": "Protegge i dati personali e la privacy delle persone all'interno dell'Unione Europea."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Conformità CCPA",
|
||||
"description": "Conferisce ai residenti della California diritti su come le loro informazioni personali vengono raccolte, usate e condivise."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Conformità HIPAA",
|
||||
"description": "Stabilisce salvaguardie per la gestione delle informazioni sanitarie sensibili nel sistema sanitario degli Stati Uniti."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Domande",
|
||||
"questions": "Frequenti",
|
||||
"isFree": {
|
||||
"question": "BentoPDF è davvero gratuito?",
|
||||
"answer": "Sì, assolutamente. Tutti gli strumenti su BentoPDF sono gratuiti al 100%, senza limiti di file, senza registrazioni e senza filigrane. Crediamo che tutti debbano poter accedere a strumenti PDF semplici e potenti senza barriere a pagamento."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "I miei file sono sicuri? Dove vengono elaborati?",
|
||||
"answer": "I tuoi file sono il più sicuri possibile perché non lasciano mai il tuo computer. Tutte le elaborazioni avvengono direttamente nel tuo browser (lato client). Non carichiamo mai i tuoi file su un server, quindi mantieni la privacy completa e il controllo sui tuoi documenti."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Funziona su Mac, Windows e dispositivi mobili?",
|
||||
"answer": "Sì! Poiché BentoPDF viene eseguito interamente nel tuo browser, funziona su qualsiasi sistema operativo con un browser moderno, inclusi Windows, macOS, Linux, iOS e Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF è conforme al GDPR?",
|
||||
"answer": "Sì. BentoPDF è pienamente conforme al GDPR. Poiché tutte le elaborazioni avvengono localmente nel tuo browser e non raccogliamo né trasmettiamo i tuoi file a server, non abbiamo accesso ai tuoi dati. Questo garantisce che tu abbia sempre il controllo sui tuoi documenti."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Conservate o tracciate i miei file?",
|
||||
"answer": "No. Non conserviamo, tracciamo né registriamo i tuoi file. Tutto ciò che fai su BentoPDF avviene nella memoria del tuo browser e scompare quando chiudi la pagina. Non ci sono upload, né log di cronologia, né server coinvolti."
|
||||
},
|
||||
"different": {
|
||||
"question": "Cosa rende BentoPDF diverso dagli altri strumenti PDF?",
|
||||
"answer": "La maggior parte degli strumenti PDF carica i file su un server per l'elaborazione. BentoPDF non lo fa mai. Utilizziamo tecnologie web moderne e sicure per elaborare i tuoi file direttamente nel browser. Questo significa prestazioni più rapide, maggiore privacy e tranquillità."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "In che modo l'elaborazione nel browser mi protegge?",
|
||||
"answer": "Eseguendosi interamente nel browser, BentoPDF garantisce che i tuoi file non lascino mai il tuo dispositivo. Questo elimina i rischi di attacchi ai server, violazioni dei dati o accessi non autorizzati. I tuoi file restano sempre tuoi."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Usate cookie o analytics per tracciarmi?",
|
||||
"answer": "Ci teniamo alla tua privacy. BentoPDF non traccia informazioni personali. Usiamo Simple Analytics solo per visualizzare conteggi di visite anonime. Questo significa che possiamo sapere quante persone visitano il sito, ma non chi sei. Simple Analytics è pienamente conforme al GDPR e rispetta la tua privacy."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Cosa",
|
||||
"users": "dicono i nostri",
|
||||
"say": "utenti"
|
||||
},
|
||||
"support": {
|
||||
"title": "Ti piace il mio lavoro?",
|
||||
"description": "BentoPDF è un progetto nato per passione, creato per offrire una cassetta degli attrezzi PDF gratuita, privata e potente per tutti. Se lo trovi utile, considera di supportarne lo sviluppo. Ogni caffè aiuta!",
|
||||
"buyMeCoffee": "Offrimi un caffè"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Tutti i diritti riservati.",
|
||||
"version": "Versione",
|
||||
"company": "Azienda",
|
||||
"aboutUs": "Chi siamo",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Contattaci",
|
||||
"legal": "Legale",
|
||||
"termsAndConditions": "Termini e condizioni",
|
||||
"privacyPolicy": "Informativa sulla privacy",
|
||||
"followUs": "Seguici"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Unisci PDF",
|
||||
"description": "Combina file interi, oppure seleziona pagine specifiche da unire in un nuovo documento.",
|
||||
"fileMode": "Modalità file",
|
||||
"pageMode": "Modalità pagina",
|
||||
"howItWorks": "Come funziona:",
|
||||
"fileModeInstructions": [
|
||||
"Clicca e trascina l'icona per cambiare l'ordine dei file.",
|
||||
"Nella casella \"Pagine\" per ogni file, puoi specificare intervalli (es., \"1-3, 5\") per unire solo quelle pagine.",
|
||||
"Lascia vuota la casella \"Pagine\" per includere tutte le pagine di quel file."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Tutte le pagine dei tuoi PDF caricati vengono mostrate qui sotto.",
|
||||
"Trascina e rilascia le miniature delle singole pagine per creare l'ordine esatto che desideri per il nuovo file."
|
||||
],
|
||||
"mergePdfs": "Unisci PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Pagina",
|
||||
"pages": "Pagine",
|
||||
"of": "di",
|
||||
"download": "Scarica",
|
||||
"cancel": "Annulla",
|
||||
"save": "Salva",
|
||||
"delete": "Elimina",
|
||||
"edit": "Modifica",
|
||||
"add": "Aggiungi",
|
||||
"remove": "Rimuovi",
|
||||
"loading": "Caricamento...",
|
||||
"error": "Errore",
|
||||
"success": "Successo",
|
||||
"file": "File",
|
||||
"files": "File"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Crediamo che gli strumenti PDF debbano essere",
|
||||
"subtitle": "veloci, privati e gratuiti.",
|
||||
"noCompromises": "Nessun compromesso."
|
||||
},
|
||||
"mission": {
|
||||
"title": "La nostra missione",
|
||||
"description": "Fornire la cassetta degli attrezzi per PDF più completa che rispetti la tua privacy e non richieda mai pagamenti. Crediamo che gli strumenti essenziali per i documenti debbano essere accessibili a tutti, ovunque, senza barriere."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "La nostra filosofia fondamentale",
|
||||
"title": "Prima la privacy. Sempre.",
|
||||
"description": "In un'epoca in cui i dati sono una merce, adottiamo un approccio diverso. Tutte le elaborazioni per gli strumenti BentoPDF avvengono localmente nel tuo browser. Questo significa che i tuoi file non toccano mai i nostri server, non vediamo i tuoi documenti e non tracciamo ciò che fai. I tuoi documenti restano completamente e inequivocabilmente privati. Non è solo una funzionalità; è il nostro fondamento."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Perché BentoPDF",
|
||||
"speed": {
|
||||
"title": "Progettato per la velocità",
|
||||
"description": "Nessuna attesa per upload o download verso un server. Elaborando i file direttamente nel browser con tecnologie web moderne come WebAssembly, offriamo una velocità impareggiabile per tutti i nostri strumenti."
|
||||
},
|
||||
"free": {
|
||||
"title": "Completamente gratuito",
|
||||
"description": "Niente prove, niente abbonamenti, nessun costo nascosto e nessuna funzione \"premium\" tenuta in ostaggio. Crediamo che potenti strumenti PDF debbano essere un servizio pubblico, non una fonte di profitto."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Nessun account richiesto",
|
||||
"description": "Inizia a usare qualsiasi strumento immediatamente. Non abbiamo bisogno della tua email, di una password o di informazioni personali. Il tuo flusso di lavoro deve essere semplice e anonimo."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Spirito open source",
|
||||
"description": "Costruito con trasparenza. Sfruttiamo librerie open‑source incredibili come PDF-lib e PDF.js, e crediamo nello sforzo della community per rendere strumenti potenti accessibili a tutti."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Pronto per iniziare?",
|
||||
"description": "Unisciti a migliaia di utenti che si affidano a BentoPDF per le loro esigenze quotidiane sui documenti. Sperimenta la differenza che privacy e prestazioni possono offrire.",
|
||||
"button": "Esplora tutti gli strumenti"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Contattaci",
|
||||
"subtitle": "Ci farebbe piacere sentirti. Che tu abbia una domanda, un feedback o una richiesta di funzionalità, non esitare a contattarci.",
|
||||
"email": "Puoi contattarci direttamente via email a:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licenze per",
|
||||
"subtitle": "Scegli la licenza che si adatta alle tue esigenze."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Carica PDF",
|
||||
"upload": "Carica",
|
||||
"addBlankPage": "Aggiungi pagina vuota",
|
||||
"edit": "Modifica:",
|
||||
"undo": "Annulla",
|
||||
"redo": "Ripeti",
|
||||
"reset": "Reimposta",
|
||||
"selection": "Selezione:",
|
||||
"selectAll": "Seleziona tutto",
|
||||
"deselectAll": "Deseleziona tutto",
|
||||
"rotate": "Ruota:",
|
||||
"rotateLeft": "Sinistra",
|
||||
"rotateRight": "Destra",
|
||||
"transform": "Trasforma:",
|
||||
"duplicate": "Duplica",
|
||||
"split": "Dividi",
|
||||
"clear": "Svuota:",
|
||||
"delete": "Elimina",
|
||||
"download": "Scarica:",
|
||||
"downloadSelected": "Scarica selezionati",
|
||||
"exportPdf": "Esporta PDF",
|
||||
"uploadPdfFiles": "Seleziona file PDF",
|
||||
"dragAndDrop": "Trascina e rilascia i file PDF qui, oppure clicca per selezionare",
|
||||
"selectFiles": "Seleziona file",
|
||||
"renderingPages": "Generazione anteprime pagine...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplica questa pagina",
|
||||
"deletePage": "Elimina questa pagina",
|
||||
"insertPdf": "Inserisci PDF dopo questa pagina",
|
||||
"toggleSplit": "Attiva la divisione dopo questa pagina"
|
||||
},
|
||||
"pleaseWait": "Attendere...",
|
||||
"pagesRendering": "Le pagine sono ancora in fase di generazione. Attendere...",
|
||||
"noPagesSelected": "Nessuna pagina selezionata",
|
||||
"selectOnePage": "Seleziona almeno una pagina da scaricare.",
|
||||
"noPages": "Nessuna pagina",
|
||||
"noPagesToExport": "Non ci sono pagine da esportare.",
|
||||
"renderingTitle": "Generazione anteprime delle pagine",
|
||||
"errorRendering": "Impossibile generare le miniature delle pagine",
|
||||
"error": "Errore",
|
||||
"failedToLoad": "Caricamento fallito"
|
||||
}
|
||||
}
|
||||
533
public/locales/it/tools.json
Normal file
@@ -0,0 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Strumenti popolari",
|
||||
"editAnnotate": "Modifica e Annota",
|
||||
"convertToPdf": "Converti in PDF",
|
||||
"convertFromPdf": "Converti da PDF",
|
||||
"organizeManage": "Organizza e Gestisci",
|
||||
"optimizeRepair": "Ottimizza e Ripara",
|
||||
"securePdf": "Proteggi PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Strumento PDF multifunzione",
|
||||
"subtitle": "Unisci, dividi, organizza, elimina, ruota, aggiungi pagine vuote, estrai e duplica in un'interfaccia unificata."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Unisci PDF",
|
||||
"subtitle": "Unisci più PDF in un unico file. Conserva i segnalibri."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dividi PDF",
|
||||
"subtitle": "Estrai un insieme di pagine in un nuovo PDF."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Comprimi PDF",
|
||||
"subtitle": "Riduci le dimensioni del tuo PDF.",
|
||||
"algorithmLabel": "Algoritmo di compressione",
|
||||
"condense": "Condensa (Consigliato)",
|
||||
"photon": "Photon (Per PDF con molte foto)",
|
||||
"condenseInfo": "Condensa usa la compressione avanzata: rimuove peso inutile, ottimizza le immagini, riduce i font. Migliore per la maggior parte dei PDF.",
|
||||
"photonInfo": "Photon converte le pagine in immagini. Usalo per PDF con molte foto o scannerizzati.",
|
||||
"photonWarning": "Attenzione: il testo non sarà selezionabile e i link smetteranno di funzionare.",
|
||||
"levelLabel": "Livello di compressione",
|
||||
"light": "Leggero (Preserva qualità)",
|
||||
"balanced": "Bilanciato (Consigliato)",
|
||||
"aggressive": "Aggressivo (File più piccoli)",
|
||||
"extreme": "Estremo (Compressione massima)",
|
||||
"grayscale": "Converti in scala di grigi",
|
||||
"grayscaleHint": "Riduce le dimensioni rimuovendo le informazioni di colore",
|
||||
"customSettings": "Impostazioni personalizzate",
|
||||
"customSettingsHint": "Affina i parametri di compressione:",
|
||||
"outputQuality": "Qualità di output",
|
||||
"resizeImagesTo": "Ridimensiona le immagini a",
|
||||
"onlyProcessAbove": "Elabora solo sopra",
|
||||
"removeMetadata": "Rimuovi metadati",
|
||||
"subsetFonts": "Riduci i font (rimuovi glifi non usati)",
|
||||
"removeThumbnails": "Rimuovi miniature incorporate",
|
||||
"compressButton": "Comprimi PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Editor PDF",
|
||||
"subtitle": "Annota, evidenzia, redigi, commenta, aggiungi forme/immagini, cerca e visualizza PDF."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG in PDF",
|
||||
"subtitle": "Crea un PDF da immagini JPG, JPEG e JPEG2000 (JP2/JPX)."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Firma PDF",
|
||||
"subtitle": "Disegna, digita o carica la tua firma."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Ritaglia PDF",
|
||||
"subtitle": "Rimuovi i margini di ogni pagina del tuo PDF."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Estrai Pagine",
|
||||
"subtitle": "Salva una selezione di pagine come nuovi file."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplica e Organizza",
|
||||
"subtitle": "Duplica, riordina ed elimina pagine."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Elimina Pagine",
|
||||
"subtitle": "Rimuovi pagine specifiche dal tuo documento."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Modifica Segnalibri",
|
||||
"subtitle": "Aggiungi, modifica, importa, elimina ed estrai segnalibri PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Indice",
|
||||
"subtitle": "Genera una pagina di indice dai segnalibri del PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Numeri di Pagina",
|
||||
"subtitle": "Inserisci i numeri di pagina nel tuo documento."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Aggiungi Filigrana",
|
||||
"subtitle": "Applica testo o un'immagine sulle pagine del tuo PDF."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Intestazione e Piè di Pagina",
|
||||
"subtitle": "Aggiungi testo nella parte superiore e inferiore delle pagine."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Inverti Colori",
|
||||
"subtitle": "Crea una versione \"modalità scura\" del tuo PDF."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Colore di Sfondo",
|
||||
"subtitle": "Cambia il colore di sfondo del tuo PDF."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Cambia Colore Testo",
|
||||
"subtitle": "Cambia il colore del testo nel tuo PDF."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Aggiungi Timbri",
|
||||
"subtitle": "Aggiungi timbri immagine al tuo PDF usando la barra degli strumenti di annotazione.",
|
||||
"usernameLabel": "Nome sul timbro",
|
||||
"usernamePlaceholder": "Inserisci il tuo nome (per i timbri)",
|
||||
"usernameHint": "Questo nome apparirà sui timbri che crei."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Rimuovi Annotazioni",
|
||||
"subtitle": "Rimuovi commenti, evidenziazioni e link."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Compilatore Moduli PDF",
|
||||
"subtitle": "Compila i moduli direttamente nel browser. Supporta anche i moduli XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Crea Modulo PDF",
|
||||
"subtitle": "Crea moduli PDF compilabili con campi di testo drag-and-drop."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Rimuovi Pagine Vuote",
|
||||
"subtitle": "Rileva e elimina automaticamente le pagine vuote."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Immagini in PDF",
|
||||
"subtitle": "Converti JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP in PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG in PDF",
|
||||
"subtitle": "Crea un PDF da una o più immagini PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP in PDF",
|
||||
"subtitle": "Crea un PDF da una o più immagini WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG in PDF",
|
||||
"subtitle": "Crea un PDF da una o più immagini SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP in PDF",
|
||||
"subtitle": "Crea un PDF da una o più immagini BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC in PDF",
|
||||
"subtitle": "Crea un PDF da una o più immagini HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF in PDF",
|
||||
"subtitle": "Crea un PDF da una o più immagini TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Testo in PDF",
|
||||
"subtitle": "Converti un file di testo semplice in un PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON in PDF",
|
||||
"subtitle": "Converti file JSON in formato PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF in JPG",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF in PNG",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF in WebP",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF in BMP",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF in TIFF",
|
||||
"subtitle": "Converti ogni pagina del PDF in un'immagine TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF in Scala di Grigi",
|
||||
"subtitle": "Converti tutti i colori in scala di grigi."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF in JSON",
|
||||
"subtitle": "Converti file PDF in formato JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Rendi un PDF ricercabile e copiabile."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alterna e Riordina Pagine",
|
||||
"subtitle": "Unisci i PDF alternando le pagine di ogni file. Conserva i segnalibri."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Aggiungi Allegati",
|
||||
"subtitle": "Incorpora uno o più file nel tuo PDF."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Estrai Allegati",
|
||||
"subtitle": "Estrai tutti i file incorporati dai PDF come archivio ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Modifica Allegati",
|
||||
"subtitle": "Visualizza o rimuovi gli allegati nel tuo PDF."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Dividi Pagine",
|
||||
"subtitle": "Dividi le pagine orizzontalmente o verticalmente."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Aggiungi Pagina Vuota",
|
||||
"subtitle": "Inserisci una pagina vuota in qualsiasi punto del tuo PDF."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Inverti Pagine",
|
||||
"subtitle": "Inverti l'ordine di tutte le pagine del documento."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Ruota PDF",
|
||||
"subtitle": "Ruota le pagine per multipli di 90 gradi."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Ruota di Gradi Personalizzati",
|
||||
"subtitle": "Ruota le pagine di un angolo personalizzato."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Disponi più pagine su un unico foglio."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Combina in Una Pagina",
|
||||
"subtitle": "Unisci tutte le pagine in un'unica pagina continua."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Visualizza Metadati",
|
||||
"subtitle": "Ispeziona le proprietà nascoste del tuo PDF."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Modifica Metadati",
|
||||
"subtitle": "Modifica autore, titolo e altre proprietà."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF in ZIP",
|
||||
"subtitle": "Raggruppa più file PDF in un archivio ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Confronta PDF",
|
||||
"subtitle": "Confronta due PDF fianco a fianco."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterizza PDF",
|
||||
"subtitle": "Dividi una pagina grande in più pagine più piccole."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Correggi Dimensione Pagina",
|
||||
"subtitle": "Uniforma tutte le pagine a una dimensione standard."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Linearizza PDF",
|
||||
"subtitle": "Ottimizza il PDF per una visualizzazione web più veloce."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Dimensioni Pagina",
|
||||
"subtitle": "Analizza dimensione, orientamento e unità delle pagine."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Rimuovi Restrizioni",
|
||||
"subtitle": "Rimuovi la protezione tramite password e le restrizioni di sicurezza associate ai PDF firmati digitalmente."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Ripara PDF",
|
||||
"subtitle": "Recupera i dati da file PDF corrotti o danneggiati."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Cripta PDF",
|
||||
"subtitle": "Proteggi il tuo PDF aggiungendo una password."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Sanitizza PDF",
|
||||
"subtitle": "Rimuovi metadati, annotazioni, script e altro."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Decrittografa PDF",
|
||||
"subtitle": "Sblocca il PDF rimuovendo la protezione tramite password."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Appiattisci PDF",
|
||||
"subtitle": "Rendi i campi dei moduli e le annotazioni non modificabili."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Rimuovi metadati",
|
||||
"subtitle": "Rimuovi i dati nascosti dal tuo PDF."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Modifica permessi",
|
||||
"subtitle": "Imposta o modifica i permessi utente su un PDF."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT in PDF",
|
||||
"subtitle": "Converti file OpenDocument Text in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File ODT",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV in PDF",
|
||||
"subtitle": "Converti file di foglio di calcolo CSV in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File CSV",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF in PDF",
|
||||
"subtitle": "Converti documenti Rich Text Format in PDF. Supporta più file.",
|
||||
"acceptedFormats": "File RTF",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word in PDF",
|
||||
"subtitle": "Converti documenti Word (DOCX, DOC, ODT, RTF) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File DOCX, DOC, ODT, RTF",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel in PDF",
|
||||
"subtitle": "Converti fogli Excel (XLSX, XLS, ODS, CSV) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File XLSX, XLS, ODS, CSV",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint in PDF",
|
||||
"subtitle": "Converti presentazioni PowerPoint (PPTX, PPT, ODP) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File PPTX, PPT, ODP",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown in PDF",
|
||||
"subtitle": "Scrivi o incolla Markdown ed esportalo come un PDF ben formattato.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Anteprima",
|
||||
"btnUpload": "Carica",
|
||||
"btnSyncScroll": "Sincronizza scorrimento",
|
||||
"btnSettings": "Impostazioni",
|
||||
"btnExportPdf": "Esporta PDF",
|
||||
"settingsTitle": "Impostazioni Markdown",
|
||||
"settingsPreset": "Preset",
|
||||
"presetDefault": "Predefinito (simile a GFM)",
|
||||
"presetCommonmark": "CommonMark (rigoroso)",
|
||||
"presetZero": "Minimale (nessuna funzionalità)",
|
||||
"settingsOptions": "Opzioni Markdown",
|
||||
"optAllowHtml": "Consenti tag HTML",
|
||||
"optBreaks": "Converti nuove righe in <br>",
|
||||
"optLinkify": "Converti automaticamente gli URL in link",
|
||||
"optTypographer": "Tipografia (virgolette intelligenti, ecc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "Opuscolo PDF",
|
||||
"subtitle": "Riorganizza le pagine per la stampa di opuscoli fronte-retro. Piega e pinza per creare un opuscolo.",
|
||||
"howItWorks": "Come funziona:",
|
||||
"step1": "Carica un file PDF.",
|
||||
"step2": "Le pagine saranno riorganizzate in ordine per opuscolo.",
|
||||
"step3": "Stampa fronte-retro, capovolgi sul lato corto, piega e pinza.",
|
||||
"paperSize": "Formato carta",
|
||||
"orientation": "Orientamento",
|
||||
"portrait": "Ritratto",
|
||||
"landscape": "Paesaggio",
|
||||
"pagesPerSheet": "Pagine per foglio",
|
||||
"createBooklet": "Crea opuscolo",
|
||||
"processing": "Elaborazione...",
|
||||
"pageCount": "Il conteggio delle pagine verrà arrotondato ad un multiplo di 4 se necessario."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS in PDF",
|
||||
"subtitle": "Converti documenti XPS/OXPS in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File XPS, OXPS",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI in PDF",
|
||||
"subtitle": "Converti e-book MOBI in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File MOBI",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB in PDF",
|
||||
"subtitle": "Converti e-book EPUB in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File EPUB",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 in PDF",
|
||||
"subtitle": "Converti e-book FictionBook (FB2) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File FB2",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ in PDF",
|
||||
"subtitle": "Converti archivi di fumetti (CBZ/CBR) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File CBZ, CBR",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD in PDF",
|
||||
"subtitle": "Converti documenti WordPerfect (WPD) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File WPD",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS in PDF",
|
||||
"subtitle": "Converti documenti WPS Office in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File WPS",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML in PDF",
|
||||
"subtitle": "Converti documenti XML in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File XML",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages in PDF",
|
||||
"subtitle": "Converti documenti Apple Pages in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File Pages",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG in PDF",
|
||||
"subtitle": "Converti OpenDocument Graphics (ODG) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File ODG",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS in PDF",
|
||||
"subtitle": "Converti fogli OpenDocument (ODS) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File ODS",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP in PDF",
|
||||
"subtitle": "Converti presentazioni OpenDocument (ODP) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File ODP",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB in PDF",
|
||||
"subtitle": "Converti file Microsoft Publisher (PUB) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File PUB",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD in PDF",
|
||||
"subtitle": "Converti file Microsoft Visio (VSD, VSDX) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File VSD, VSDX",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD in PDF",
|
||||
"subtitle": "Converti file Adobe Photoshop (PSD) in formato PDF. Supporta più file.",
|
||||
"acceptedFormats": "File PSD",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF in SVG",
|
||||
"subtitle": "Converti ogni pagina di un file PDF in un'immagine vettoriale scalabile (SVG) per qualità perfetta a qualsiasi dimensione."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Estrai tabelle PDF",
|
||||
"subtitle": "Estrai le tabelle dai file PDF ed esportale come CSV, JSON o Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF in CSV",
|
||||
"subtitle": "Estrai tabelle dai PDF e convertili in formato CSV."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF in Excel",
|
||||
"subtitle": "Estrai tabelle dai PDF e convertili in Excel (XLSX)."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF in Testo",
|
||||
"subtitle": "Estrai il testo dai file PDF e salvalo come testo semplice (.txt). Supporta più file.",
|
||||
"note": "Questo strumento funziona SOLO con PDF creati digitalmente. Per documenti scansionati o basati su immagini, usa invece il nostro strumento OCR PDF.",
|
||||
"convertButton": "Estrai testo"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Firma digitale PDF",
|
||||
"pageTitle": "Firma digitale PDF - Aggiungi firma crittografica | BentoPDF",
|
||||
"subtitle": "Aggiungi una firma digitale crittografica al tuo PDF usando certificati X.509. Supporta i formati PKCS#12 (.pfx, .p12) e PEM. La tua chiave privata non lascia mai il browser.",
|
||||
"certificateSection": "Certificato",
|
||||
"uploadCert": "Carica certificato (.pfx, .p12)",
|
||||
"certPassword": "Password del certificato",
|
||||
"certPasswordPlaceholder": "Inserisci la password del certificato",
|
||||
"certInfo": "Informazioni sul certificato",
|
||||
"certSubject": "Soggetto",
|
||||
"certIssuer": "Emittente",
|
||||
"certValidity": "Valido",
|
||||
"signatureDetails": "Dettagli della firma (opzionale)",
|
||||
"reason": "Motivo",
|
||||
"reasonPlaceholder": "es. Approvo questo documento",
|
||||
"location": "Luogo",
|
||||
"locationPlaceholder": "es. Roma, Italia",
|
||||
"contactInfo": "Contatto",
|
||||
"contactPlaceholder": "es. email@example.com",
|
||||
"applySignature": "Applica firma digitale",
|
||||
"successMessage": "PDF firmato con successo! La firma può essere verificata in qualsiasi lettore PDF."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Verifica firma PDF",
|
||||
"pageTitle": "Verifica firma PDF - Controlla firme digitali | BentoPDF",
|
||||
"subtitle": "Verifica le firme digitali nei tuoi PDF. Controlla la validità del certificato, visualizza i dati del firmatario e conferma l'integrità del documento. Tutto avviene nel tuo browser."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email in PDF",
|
||||
"subtitle": "Converti file email (EML, MSG) in formato PDF. Supporta esportazioni Outlook e formati email standard.",
|
||||
"acceptedFormats": "File EML, MSG",
|
||||
"convertButton": "Converti in PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Font in Contorni",
|
||||
"subtitle": "Converti tutti i font in contorni vettoriali per una visualizzazione coerente su tutti i dispositivi."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Raddrizza PDF",
|
||||
"subtitle": "Raddrizza automaticamente le pagine scansionate inclinate usando OpenCV."
|
||||
}
|
||||
}
|
||||
323
public/locales/pt/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Início",
|
||||
"about": "Sobre",
|
||||
"contact": "Contato",
|
||||
"licensing": "Licenciamento",
|
||||
"allTools": "Todas as Ferramentas",
|
||||
"openMainMenu": "Abrir menu principal",
|
||||
"language": "Idioma"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Adora o BentoPDF? Ajude-nos a mantê-lo gratuito e de código aberto!",
|
||||
"button": "Doar"
|
||||
},
|
||||
"hero": {
|
||||
"title": "O",
|
||||
"pdfToolkit": "Kit de Ferramentas PDF",
|
||||
"builtForPrivacy": "feito para sua privacidade",
|
||||
"noSignups": "Sem Cadastros",
|
||||
"unlimitedUse": "Uso Ilimitado",
|
||||
"worksOffline": "Funciona Offline",
|
||||
"startUsing": "Comece a Usar Agora"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Usado por empresas e pessoas que trabalham em"
|
||||
},
|
||||
"features": {
|
||||
"title": "Por que escolher o",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Sem Cadastro",
|
||||
"description": "Comece instantaneamente, sem contas ou e-mails."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Sem Uploads",
|
||||
"description": "100% no navegador, seus arquivos nunca saem do seu dispositivo."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Sempre Grátis",
|
||||
"description": "Todas as ferramentas, sem testes ou assinaturas."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Sem Limites",
|
||||
"description": "Use o quanto quiser, sem taxas escondidas."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Processamento em Lote",
|
||||
"description": "Gerencie vários PDFs de uma só vez."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Super Rápido",
|
||||
"description": "Processe PDFs instantaneamente, sem esperas ou atrasos."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Comece com as",
|
||||
"toolsLabel": "Ferramentas",
|
||||
"subtitle": "Clique em uma ferramenta para abrir o seletor de arquivos",
|
||||
"searchPlaceholder": "Buscar ferramenta (ex: 'dividir', 'organizar'...)",
|
||||
"backToTools": "Voltar para Ferramentas",
|
||||
"firstLoadNotice": "O primeiro carregamento demora um momento enquanto baixamos nosso mecanismo de conversão. Depois disso, todos os carregamentos serão instantâneos."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Clique para selecionar um arquivo",
|
||||
"orDragAndDrop": "ou arraste e solte",
|
||||
"pdfOrImages": "PDFs ou Imagens",
|
||||
"filesNeverLeave": "Seus arquivos nunca saem do seu dispositivo.",
|
||||
"addMore": "Adicionar Mais Arquivos",
|
||||
"clearAll": "Limpar Tudo"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Processando..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Alerta",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Visualização do Documento",
|
||||
"downloadAsPdf": "Baixar como PDF",
|
||||
"close": "Fechar"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Configurações",
|
||||
"shortcuts": "Atalhos",
|
||||
"preferences": "Preferências",
|
||||
"displayPreferences": "Preferências de Exibição",
|
||||
"searchShortcuts": "Buscar atalhos...",
|
||||
"shortcutsInfo": "Mantenha as teclas pressionadas para definir um atalho. As alterações são salvas automaticamente.",
|
||||
"shortcutsWarning": "⚠️ Evite atalhos comuns do navegador (Cmd/Ctrl+W, T, N etc.), pois podem não funcionar corretamente.",
|
||||
"import": "Importar",
|
||||
"export": "Exportar",
|
||||
"resetToDefaults": "Restaurar Padrões",
|
||||
"fullWidthMode": "Modo Largura Total",
|
||||
"fullWidthDescription": "Usa toda a largura da tela para as ferramentas em vez de um container centralizado",
|
||||
"settingsAutoSaved": "As configurações são salvas automaticamente",
|
||||
"clickToSet": "Clique para definir",
|
||||
"pressKeys": "Pressione as teclas...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Atalho Já em Uso",
|
||||
"assignedTo": "já está atribuído a:",
|
||||
"chooseDifferent": "Por favor, escolha um atalho diferente.",
|
||||
"reserved": "Aviso de Atalho Reservado",
|
||||
"commonlyUsed": "é comumente usado para:",
|
||||
"unreliable": "Este atalho pode não funcionar bem ou conflitar com o navegador/sistema.",
|
||||
"useAnyway": "Deseja usar mesmo assim?",
|
||||
"resetTitle": "Redefinir Atalhos",
|
||||
"resetMessage": "Tem certeza que deseja redefinir todos os atalhos?<br><br>Esta ação não pode ser desfeita.",
|
||||
"importSuccessTitle": "Importação Concluída",
|
||||
"importSuccessMessage": "Atalhos importados com sucesso!",
|
||||
"importFailTitle": "Falha na Importação",
|
||||
"importFailMessage": "Falha ao importar atalhos. Formato de arquivo inválido."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Aviso",
|
||||
"cancel": "Cancelar",
|
||||
"proceed": "Prosseguir"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Seus dados nunca saem do seu dispositivo",
|
||||
"weKeep": "Mantemos",
|
||||
"yourInfoSafe": "suas informações seguras",
|
||||
"byFollowingStandards": "seguindo padrões globais de segurança.",
|
||||
"processingLocal": "Todo o processamento acontece localmente no seu dispositivo.",
|
||||
"gdpr": {
|
||||
"title": "Conformidade GDPR",
|
||||
"description": "Protege os dados pessoais e a privacidade de indivíduos na União Europeia."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Conformidade CCPA",
|
||||
"description": "Dá aos residentes da Califórnia direitos sobre como suas informações pessoais são coletadas e usadas."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Conformidade HIPAA",
|
||||
"description": "Estabelece salvaguardas para o tratamento de informações de saúde sensíveis nos Estados Unidos."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Perguntas",
|
||||
"questions": "Frequentes",
|
||||
"isFree": {
|
||||
"question": "O BentoPDF é realmente grátis?",
|
||||
"answer": "Sim, com certeza. Todas as ferramentas do BentoPDF são 100% gratuitas, sem limites de arquivos, sem cadastros e sem marcas d'água. Acreditamos que todos merecem acesso a ferramentas PDF poderosas sem barreiras financeiras."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Meus arquivos estão seguros? Onde são processados?",
|
||||
"answer": "Seus arquivos estão o mais seguros possível porque nunca saem do seu computador. Todo o processamento ocorre diretamente no seu navegador (client-side). Nunca fazemos upload para um servidor, garantindo privacidade total."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Funciona no Mac, Windows e Celular?",
|
||||
"answer": "Sim! Como o BentoPDF roda inteiramente no navegador, funciona em qualquer sistema operacional moderno, incluindo Windows, macOS, Linux, iOS e Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "O BentoPDF está em conformidade com a GDPR?",
|
||||
"answer": "Sim. Como o processamento é local e não coletamos seus arquivos, não temos acesso aos seus dados. Isso garante total conformidade e controle por parte do usuário."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Vocês armazenam ou rastreiam meus arquivos?",
|
||||
"answer": "Não. Nunca armazenamos, rastreamos ou registramos seus arquivos. Tudo acontece na memória do navegador e desaparece ao fechar a página. Não há logs nem servidores envolvidos."
|
||||
},
|
||||
"different": {
|
||||
"question": "O que torna o BentoPDF diferente de outras ferramentas?",
|
||||
"answer": "A maioria das ferramentas faz upload dos arquivos para um servidor. O BentoPDF usa tecnologia web moderna para processar tudo localmente no seu navegador, garantindo mais velocidade e privacidade."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Como o processamento no navegador me mantém seguro?",
|
||||
"answer": "Ao rodar no seu dispositivo, eliminamos riscos de ataques a servidores ou vazamentos de dados de terceiros. Seus arquivos permanecem seus — sempre."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Vocês usam cookies ou rastreamento?",
|
||||
"answer": "Usamos apenas o Simple Analytics para contar visitas de forma anônima. Sabemos quantos usuários nos visitam, mas nunca quem você é. O sistema respeita totalmente a GDPR."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "O que nossos",
|
||||
"users": "Usuários",
|
||||
"say": "Dizem"
|
||||
},
|
||||
"support": {
|
||||
"title": "Gostou do Trabalho?",
|
||||
"description": "O BentoPDF é um projeto pessoal feito para fornecer ferramentas poderosas e privadas para todos. Se for útil para você, considere apoiar o desenvolvimento!",
|
||||
"buyMeCoffee": "Pague um Café"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Todos os direitos reservados.",
|
||||
"version": "Versão",
|
||||
"company": "Empresa",
|
||||
"aboutUs": "Sobre Nós",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Contato",
|
||||
"legal": "Jurídico",
|
||||
"termsAndConditions": "Termos e Condições",
|
||||
"privacyPolicy": "Política de Privacidade",
|
||||
"followUs": "Siga-nos"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Mesclar PDFs",
|
||||
"description": "Combine arquivos inteiros ou selecione páginas específicas para criar um novo documento.",
|
||||
"fileMode": "Modo Arquivo",
|
||||
"pageMode": "Modo Página",
|
||||
"howItWorks": "Como funciona:",
|
||||
"fileModeInstructions": [
|
||||
"Clique e arraste o ícone para alterar a ordem dos arquivos.",
|
||||
"No campo \"Páginas\", você pode definir intervalos (ex: \"1-3, 5\") para mesclar apenas essas páginas.",
|
||||
"Deixe o campo em branco para incluir todas as páginas do arquivo."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Todas as páginas dos PDFs enviados aparecem abaixo.",
|
||||
"Arraste as miniaturas para criar a ordem exata que deseja no novo arquivo."
|
||||
],
|
||||
"mergePdfs": "Mesclar PDFs"
|
||||
},
|
||||
"common": {
|
||||
"page": "Página",
|
||||
"pages": "Páginas",
|
||||
"of": "de",
|
||||
"download": "Baixar",
|
||||
"cancel": "Cancelar",
|
||||
"save": "Salvar",
|
||||
"delete": "Excluir",
|
||||
"edit": "Editar",
|
||||
"add": "Adicionar",
|
||||
"remove": "Remover",
|
||||
"loading": "Carregando...",
|
||||
"error": "Erro",
|
||||
"success": "Sucesso",
|
||||
"file": "Arquivo",
|
||||
"files": "Arquivos"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Acreditamos que ferramentas PDF devem ser",
|
||||
"subtitle": "rápidas, privadas e gratuitas.",
|
||||
"noCompromises": "Sem concessões."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Nossa Missão",
|
||||
"description": "Fornecer o kit de ferramentas PDF mais completo, respeitando sua privacidade e sem cobrar por isso. Ferramentas essenciais devem ser acessíveis a todos, sem barreiras."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Nossa Filosofia",
|
||||
"title": "Privacidade Primeiro. Sempre.",
|
||||
"description": "Em uma era onde dados são mercadoria, seguimos outro caminho. Todo o processamento ocorre no seu navegador. Arquivos não tocam nossos servidores e não rastreamos você. Privacidade não é apenas um recurso; é nossa base."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Por que o BentoPDF?",
|
||||
"speed": {
|
||||
"title": "Feito para Velocidade",
|
||||
"description": "Sem esperas de upload. Usando tecnologias como WebAssembly, processamos tudo diretamente no navegador com velocidade inigualável."
|
||||
},
|
||||
"free": {
|
||||
"title": "Totalmente Grátis",
|
||||
"description": "Sem períodos de teste, assinaturas ou funções \"premium\" bloqueadas. Acreditamos em ferramentas como um serviço público."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Sem Necessidade de Conta",
|
||||
"description": "Use qualquer ferramenta imediatamente. Não pedimos e-mail, senha ou qualquer dado pessoal. Seu fluxo de trabalho deve ser anônimo."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Espírito Open Source",
|
||||
"description": "Construído com transparência. Utilizamos bibliotecas incríveis como PDF-lib e PDF.js para democratizar o acesso a ferramentas poderosas."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Pronto para começar?",
|
||||
"description": "Junte-se a milhares de usuários que confiam no BentoPDF. Sinta a diferença da privacidade e do desempenho.",
|
||||
"button": "Explorar Ferramentas"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Entre em Contato",
|
||||
"subtitle": "Adoraríamos ouvir você. Se tiver dúvidas, feedback ou sugestões de recursos, não hesite em nos contatar.",
|
||||
"email": "Você pode nos contatar diretamente por e-mail em:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Licenciamento de",
|
||||
"subtitle": "Escolha a licença que melhor atende às suas necessidades."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Enviar PDFs",
|
||||
"upload": "Enviar",
|
||||
"addBlankPage": "Adicionar Página em Branco",
|
||||
"edit": "Editar:",
|
||||
"undo": "Desfazer",
|
||||
"redo": "Refazer",
|
||||
"reset": "Redefinir",
|
||||
"selection": "Seleção:",
|
||||
"selectAll": "Selecionar Tudo",
|
||||
"deselectAll": "Desmarcar Tudo",
|
||||
"rotate": "Girar:",
|
||||
"rotateLeft": "Esquerda",
|
||||
"rotateRight": "Direita",
|
||||
"transform": "Transformar:",
|
||||
"duplicate": "Duplicar",
|
||||
"split": "Dividir",
|
||||
"clear": "Limpar:",
|
||||
"delete": "Excluir",
|
||||
"download": "Baixar:",
|
||||
"downloadSelected": "Baixar Selecionadas",
|
||||
"exportPdf": "Exportar PDF",
|
||||
"uploadPdfFiles": "Selecionar Arquivos PDF",
|
||||
"dragAndDrop": "Arraste arquivos PDF aqui ou clique para selecionar",
|
||||
"selectFiles": "Selecionar Arquivos",
|
||||
"renderingPages": "Renderizando páginas...",
|
||||
"actions": {
|
||||
"duplicatePage": "Duplicar esta página",
|
||||
"deletePage": "Excluir esta página",
|
||||
"insertPdf": "Inserir PDF após esta página",
|
||||
"toggleSplit": "Alternar divisão após esta página"
|
||||
},
|
||||
"pleaseWait": "Aguarde",
|
||||
"pagesRendering": "As páginas ainda estão sendo renderizadas. Por favor, aguarde...",
|
||||
"noPagesSelected": "Nenhuma Página Selecionada",
|
||||
"selectOnePage": "Selecione pelo menos uma página para baixar.",
|
||||
"noPages": "Sem Páginas",
|
||||
"noPagesToExport": "Não há páginas para exportar.",
|
||||
"renderingTitle": "Renderizando visualizações das páginas",
|
||||
"errorRendering": "Falha ao renderizar miniaturas das páginas",
|
||||
"error": "Erro",
|
||||
"failedToLoad": "Falha ao carregar"
|
||||
}
|
||||
}
|
||||
511
public/locales/pt/tools.json
Normal file
@@ -0,0 +1,511 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Ferramentas Populares",
|
||||
"editAnnotate": "Editar e Anotar",
|
||||
"convertToPdf": "Converter para PDF",
|
||||
"convertFromPdf": "Converter de PDF",
|
||||
"organizeManage": "Organizar e Gerenciar",
|
||||
"optimizeRepair": "Otimizar e Reparar",
|
||||
"securePdf": "Segurança de PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Multiferramenta PDF",
|
||||
"subtitle": "Mesclar, dividir, organizar, excluir, girar, adicionar páginas em branco, extrair e duplicar em uma única interface."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Mesclar PDF",
|
||||
"subtitle": "Combine vários PDFs em um único arquivo. Preserva os favoritos (bookmarks)."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Dividir PDF",
|
||||
"subtitle": "Extraia um intervalo de páginas para um novo PDF."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Comprimir PDF",
|
||||
"subtitle": "Reduza o tamanho do arquivo do seu PDF."
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Editor de PDF",
|
||||
"subtitle": "Anotar, destacar, redigir, comentar, adicionar formas/imagens, pesquisar e visualizar PDFs."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens JPG."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Assinar PDF",
|
||||
"subtitle": "Desenhe, digite ou faça upload da sua assinatura."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Cortar PDF",
|
||||
"subtitle": "Corte as margens de cada página do seu PDF."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Extrair Páginas",
|
||||
"subtitle": "Salve uma seleção de páginas como novos arquivos."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Duplicar e Organizar",
|
||||
"subtitle": "Duplique, reordene e exclua páginas."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Excluir Páginas",
|
||||
"subtitle": "Remova páginas específicas do seu documento."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Editar Favoritos",
|
||||
"subtitle": "Adicione, edite, importe, exclua e extraia favoritos de PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Sumário",
|
||||
"subtitle": "Gere uma página de sumário a partir dos favoritos do PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Números de Página",
|
||||
"subtitle": "Insira números de página no seu documento."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Adicionar Marca d'Água",
|
||||
"subtitle": "Carimbe texto ou uma imagem sobre as páginas do seu PDF."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Cabeçalho e Rodapé",
|
||||
"subtitle": "Adicione texto no topo e no final das páginas."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Inverter Cores",
|
||||
"subtitle": "Crie uma versão em \"modo escuro\" do seu PDF."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Cor de Fundo",
|
||||
"subtitle": "Altere a cor de fundo do seu PDF."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Alterar Cor do Texto",
|
||||
"subtitle": "Altere a cor do texto no seu PDF."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Adicionar Carimbos",
|
||||
"subtitle": "Adicione carimbos de imagem ao seu PDF usando a barra de ferramentas de anotação.",
|
||||
"usernameLabel": "Nome do Usuário no Carimbo",
|
||||
"usernamePlaceholder": "Digite seu nome (para os carimbos)",
|
||||
"usernameHint": "Este nome aparecerá nos carimbos que você criar."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Remover Anotações",
|
||||
"subtitle": "Remova comentários, destaques e links."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Preenchimento de Formulário",
|
||||
"subtitle": "Preencha formulários diretamente no navegador. Também suporta formulários XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Criar Formulário PDF",
|
||||
"subtitle": "Crie formulários PDF preenchíveis com campos de texto de arrastar e soltar."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Remover Páginas em Branco",
|
||||
"subtitle": "Detecte e exclua automaticamente páginas em branco."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Imagem para PDF",
|
||||
"subtitle": "Converta JPG, PNG, WebP, BMP, TIFF, SVG, HEIC para PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF para PDF",
|
||||
"subtitle": "Crie um PDF a partir de uma ou mais imagens TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Texto para PDF",
|
||||
"subtitle": "Converta um arquivo de texto simples (.txt) em PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON para PDF",
|
||||
"subtitle": "Converta arquivos JSON para o formato PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF para JPG",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF para PNG",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF para WebP",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF para BMP",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF para TIFF",
|
||||
"subtitle": "Converta cada página do PDF em uma imagem TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF para Tons de Cinza",
|
||||
"subtitle": "Converta todas as cores para preto e branco."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF para JSON",
|
||||
"subtitle": "Converta arquivos PDF para o formato JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Torne um PDF pesquisável e copiável (reconhecimento de texto)."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Alternar e Misturar Páginas",
|
||||
"subtitle": "Mescle PDFs alternando as páginas de cada arquivo. Preserva os favoritos."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Adicionar Anexos",
|
||||
"subtitle": "Incorpore um ou mais arquivos dentro do seu PDF."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Extrair Anexos",
|
||||
"subtitle": "Extraia todos os arquivos incorporados de PDF(s) como um ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Editar Anexos",
|
||||
"subtitle": "Visualize ou remova anexos do seu PDF."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Dividir Páginas",
|
||||
"subtitle": "Divida as páginas horizontalmente ou verticalmente."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Adicionar Página em Branco",
|
||||
"subtitle": "Insira uma página vazia em qualquer lugar do seu PDF."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Inverter Páginas",
|
||||
"subtitle": "Inverta a ordem de todas as páginas do seu documento."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Girar PDF",
|
||||
"subtitle": "Gire as páginas em incrementos de 90 graus."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "PDF N-Up",
|
||||
"subtitle": "Organize várias páginas em uma única folha de impressão."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Combinar em Página Única",
|
||||
"subtitle": "Costure todas as páginas em um único fluxo contínuo."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Ver Metadados",
|
||||
"subtitle": "Inspecione as propriedades ocultas do seu PDF."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Editar Metadados",
|
||||
"subtitle": "Altere o autor, título e outras propriedades."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDFs para ZIP",
|
||||
"subtitle": "Empacote vários arquivos PDF em um arquivo compactado ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "Comparar PDFs",
|
||||
"subtitle": "Compare dois PDFs lado a lado."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterizar PDF",
|
||||
"subtitle": "Divida uma página grande em várias páginas menores."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Ajustar Tamanho da Página",
|
||||
"subtitle": "Padronize todas as páginas para um tamanho uniforme."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Linearizar PDF",
|
||||
"subtitle": "Otimize o PDF para visualização rápida na web."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Dimensões da Página",
|
||||
"subtitle": "Analise o tamanho, orientação e unidades das páginas."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Remover Restrições",
|
||||
"subtitle": "Remova proteção por senha e restrições de segurança de arquivos assinados digitalmente."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Reparar PDF",
|
||||
"subtitle": "Recupere dados de arquivos PDF corrompidos ou danificados."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Criptografar PDF",
|
||||
"subtitle": "Bloqueie seu PDF adicionando uma senha."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Sanitizar PDF",
|
||||
"subtitle": "Remova metadados, anotações, scripts e outros dados ocultos."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Descriptografar PDF",
|
||||
"subtitle": "Desbloqueie o PDF removendo a proteção por senha."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Achatar PDF (Flatten)",
|
||||
"subtitle": "Torne os campos de formulário e anotações não editáveis."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Remover Metadados",
|
||||
"subtitle": "Limpe dados ocultos do seu PDF."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Alterar Permissões",
|
||||
"subtitle": "Defina ou altere as permissões de usuário em um PDF."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email para PDF",
|
||||
"subtitle": "Converta arquivos de email (EML, MSG) para PDF. Suporta exportações do Outlook e formatos de email padrão.",
|
||||
"acceptedFormats": "Arquivos EML, MSG",
|
||||
"convertButton": "Converter para PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Fonte para Contorno",
|
||||
"subtitle": "Converta todas as fontes em contornos vetoriais para renderização consistente em todos os dispositivos."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Desinclinar PDF",
|
||||
"subtitle": "Endireite automaticamente páginas digitalizadas inclinadas usando OpenCV."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotate by Custom Degrees",
|
||||
"subtitle": "Rotate pages by any custom angle."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT to PDF",
|
||||
"subtitle": "Convert OpenDocument Text files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODT files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV to PDF",
|
||||
"subtitle": "Convert CSV spreadsheet files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF to PDF",
|
||||
"subtitle": "Convert Rich Text Format documents to PDF. Supports multiple files.",
|
||||
"acceptedFormats": "RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word to PDF",
|
||||
"subtitle": "Convert Word documents (DOCX, DOC, ODT, RTF) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "DOCX, DOC, ODT, RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel to PDF",
|
||||
"subtitle": "Convert Excel spreadsheets (XLSX, XLS, ODS, CSV) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XLSX, XLS, ODS, CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint to PDF",
|
||||
"subtitle": "Convert PowerPoint presentations (PPTX, PPT, ODP) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PPTX, PPT, ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown to PDF",
|
||||
"subtitle": "Write or paste Markdown and export it as a beautifully formatted PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Preview",
|
||||
"btnUpload": "Upload",
|
||||
"btnSyncScroll": "Sync Scroll",
|
||||
"btnSettings": "Settings",
|
||||
"btnExportPdf": "Export PDF",
|
||||
"settingsTitle": "Markdown Settings",
|
||||
"settingsPreset": "Preset",
|
||||
"presetDefault": "Default (GFM-like)",
|
||||
"presetCommonmark": "CommonMark (strict)",
|
||||
"presetZero": "Minimal (no features)",
|
||||
"settingsOptions": "Markdown Options",
|
||||
"optAllowHtml": "Allow HTML tags",
|
||||
"optBreaks": "Convert newlines to <br>",
|
||||
"optLinkify": "Auto-convert URLs to links",
|
||||
"optTypographer": "Typographer (smart quotes, etc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "PDF Booklet",
|
||||
"subtitle": "Rearrange pages for double-sided booklet printing. Fold and staple to create a booklet.",
|
||||
"howItWorks": "How it works:",
|
||||
"step1": "Upload a PDF file.",
|
||||
"step2": "Pages will be rearranged in booklet order.",
|
||||
"step3": "Print double-sided, flip on short edge, fold and staple.",
|
||||
"paperSize": "Paper Size",
|
||||
"orientation": "Orientation",
|
||||
"portrait": "Portrait",
|
||||
"landscape": "Landscape",
|
||||
"pagesPerSheet": "Pages per Sheet",
|
||||
"createBooklet": "Create Booklet",
|
||||
"processing": "Processing...",
|
||||
"pageCount": "Page count will be padded to multiple of 4 if needed."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS to PDF",
|
||||
"subtitle": "Convert XPS/OXPS documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XPS, OXPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI to PDF",
|
||||
"subtitle": "Convert MOBI e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "MOBI files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB to PDF",
|
||||
"subtitle": "Convert EPUB e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "EPUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 to PDF",
|
||||
"subtitle": "Convert FictionBook (FB2) e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "FB2 files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ to PDF",
|
||||
"subtitle": "Convert comic book archives (CBZ/CBR) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CBZ, CBR files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD to PDF",
|
||||
"subtitle": "Convert WordPerfect documents (WPD) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS to PDF",
|
||||
"subtitle": "Convert WPS Office documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML to PDF",
|
||||
"subtitle": "Convert XML documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XML files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages to PDF",
|
||||
"subtitle": "Convert Apple Pages documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "Pages files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG to PDF",
|
||||
"subtitle": "Convert OpenDocument Graphics (ODG) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODG files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS to PDF",
|
||||
"subtitle": "Convert OpenDocument Spreadsheet (ODS) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP to PDF",
|
||||
"subtitle": "Convert OpenDocument Presentation (ODP) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB to PDF",
|
||||
"subtitle": "Convert Microsoft Publisher (PUB) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD to PDF",
|
||||
"subtitle": "Convert Microsoft Visio (VSD, VSDX) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "VSD, VSDX files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD to PDF",
|
||||
"subtitle": "Convert Adobe Photoshop (PSD) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PSD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF to SVG",
|
||||
"subtitle": "Convert each page of a PDF file into a scalable vector graphic (SVG) for perfect quality at any size."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Extract PDF Tables",
|
||||
"subtitle": "Extract tables from PDF files and export as CSV, JSON, or Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF to CSV",
|
||||
"subtitle": "Extract tables from PDF and convert to CSV format."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF to Excel",
|
||||
"subtitle": "Extract tables from PDF and convert to Excel (XLSX) format."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF to Text",
|
||||
"subtitle": "Extract text from PDF files and save as plain text (.txt). Supports multiple files.",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"convertButton": "Extract Text"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Assinatura Digital PDF",
|
||||
"pageTitle": "Assinatura Digital PDF - Adicionar Assinatura Criptográfica | BentoPDF",
|
||||
"subtitle": "Adicione uma assinatura digital criptográfica ao seu PDF usando certificados X.509. Suporta formatos PKCS#12 (.pfx, .p12) e PEM. Sua chave privada nunca sai do seu navegador.",
|
||||
"certificateSection": "Certificado",
|
||||
"uploadCert": "Carregar certificado (.pfx, .p12)",
|
||||
"certPassword": "Senha do Certificado",
|
||||
"certPasswordPlaceholder": "Digite a senha",
|
||||
"certInfo": "Informações do Certificado",
|
||||
"certSubject": "Assunto",
|
||||
"certIssuer": "Emissor",
|
||||
"certValidity": "Válido",
|
||||
"signatureDetails": "Detalhes da Assinatura (Opcional)",
|
||||
"reason": "Razão",
|
||||
"reasonPlaceholder": "ex: Eu aprovo este documento",
|
||||
"location": "Localização",
|
||||
"locationPlaceholder": "ex: Lisboa, Portugal",
|
||||
"contactInfo": "Contato",
|
||||
"contactPlaceholder": "ex: email@exemplo.com",
|
||||
"applySignature": "Aplicar Assinatura",
|
||||
"successMessage": "PDF assinado com sucesso! A assinatura pode ser verificada em qualquer leitor de PDF."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validar Assinatura PDF",
|
||||
"pageTitle": "Validar Assinatura PDF - Verificar Assinaturas Digitais | BentoPDF",
|
||||
"subtitle": "Verifique assinaturas digitais em seus arquivos PDF. Verifique a validade do certificado e a integridade do documento."
|
||||
}
|
||||
}
|
||||
323
public/locales/tr/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Ana Sayfa",
|
||||
"about": "Hakkımızda",
|
||||
"contact": "İletişim",
|
||||
"licensing": "Lisanslama",
|
||||
"allTools": "Tüm Araçlar",
|
||||
"openMainMenu": "Ana menüyü aç",
|
||||
"language": "Dil"
|
||||
},
|
||||
"donation": {
|
||||
"message": "BentoPDF'i seviyor musunuz? Ücretsiz ve açık kaynaklı kalmasına yardımcı olun!",
|
||||
"button": "Bağış Yap"
|
||||
},
|
||||
"hero": {
|
||||
"title": " ",
|
||||
"pdfToolkit": "PDF Toolkit",
|
||||
"builtForPrivacy": "gizlilik için tasarlandı",
|
||||
"noSignups": "Kayıt Gerekmez",
|
||||
"unlimitedUse": "Sınırsız Kullanım",
|
||||
"worksOffline": "Çevrimdışı Çalışır",
|
||||
"startUsing": "Hemen Kullanmaya Başla"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Şu şirketler ve çalışanları tarafından kullanılıyor"
|
||||
},
|
||||
"features": {
|
||||
"title": "Neden",
|
||||
"bentoPdf": "BentoPDF'yi seçmelisiniz?",
|
||||
"noSignup": {
|
||||
"title": "Kayıt Gerekmez",
|
||||
"description": "Hemen başlayın, hesap veya e-posta gerekmez."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Yükleme Yok",
|
||||
"description": "%100 istemci tarafında çalışır, dosyalarınız cihazınızı asla terk etmez."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Tamamen Ücretsiz",
|
||||
"description": "Tüm araçlar, deneme sürümü yok, ödeme duvarı yok."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Sınırsız",
|
||||
"description": "İstediğiniz kadar kullanın, gizli sınırlar yok."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Toplu İşlem",
|
||||
"description": "Sınırsız sayıda PDF'yi tek seferde işleyin."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Şimşek Hızında",
|
||||
"description": "PDF'leri anında işleyin, bekleme veya gecikme olmadan."
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Araçlarla",
|
||||
"toolsLabel": "Başlayın",
|
||||
"subtitle": "Dosya yükleyiciyi açmak için bir araç seçin",
|
||||
"searchPlaceholder": "Bir araç arayın (örn. 'böl', 'düzenle'...)",
|
||||
"backToTools": "Araçlara Dön",
|
||||
"firstLoadNotice": "Dönüştürme motorumuzu indirirken ilk yükleme biraz zaman alır. Sonrasında tüm yüklemeler anında gerçekleşir."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Dosya seçmek için tıklayın",
|
||||
"orDragAndDrop": "veya sürükleyip bırakın",
|
||||
"pdfOrImages": "PDF veya Görseller",
|
||||
"filesNeverLeave": "Dosyalarınız cihazınızı asla terk etmez.",
|
||||
"addMore": "Daha Fazla Dosya Ekle",
|
||||
"clearAll": "Tümünü Temizle"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "İşleniyor..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Uyarı",
|
||||
"ok": "Tamam"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Belge Önizleme",
|
||||
"downloadAsPdf": "PDF Olarak İndir",
|
||||
"close": "Kapat"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Ayarlar",
|
||||
"shortcuts": "Kısayollar",
|
||||
"preferences": "Tercihler",
|
||||
"displayPreferences": "Görüntü Tercihleri",
|
||||
"searchShortcuts": "Kısayollarda ara...",
|
||||
"shortcutsInfo": "Bir kısayol atamak için tuşlara basılı tutun. Değişiklikler otomatik olarak kaydedilir.",
|
||||
"shortcutsWarning": "⚠️ Güvenilir çalışmayabileceğinden yaygın tarayıcı kısayollarından (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N vb.) kaçının.",
|
||||
"import": "İçe Aktar",
|
||||
"export": "Dışa Aktar",
|
||||
"resetToDefaults": "Varsayılanlara Sıfırla",
|
||||
"fullWidthMode": "Tam Genişlik Modu",
|
||||
"fullWidthDescription": "Ortalanmış bir konteyner yerine tüm ekran genişliğini kullan",
|
||||
"settingsAutoSaved": "Ayarlar otomatik olarak kaydedildi",
|
||||
"clickToSet": "Ayarlamak için tıklayın",
|
||||
"pressKeys": "Tuşlara basın...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Kısayol Zaten Kullanımda",
|
||||
"assignedTo": "zaten şurada kullanılıyor:",
|
||||
"chooseDifferent": "Lütfen farklı bir kısayol seçin.",
|
||||
"reserved": "Ayrılmış Kısayol Uyarısı",
|
||||
"commonlyUsed": "genellikle şunun için kullanılır:",
|
||||
"unreliable": "Bu kısayol güvenilir çalışmayabilir veya tarayıcı/sistem davranışıyla çakışabilir.",
|
||||
"useAnyway": "Yine de kullanmak istiyor musunuz?",
|
||||
"resetTitle": "Kısayolları Sıfırla",
|
||||
"resetMessage": "Tüm kısayolları varsayılan ayarlara sıfırlamak istediğinizden emin misiniz?<br><br>Bu işlem geri alınamaz.",
|
||||
"importSuccessTitle": "İçe Aktarma Başarılı",
|
||||
"importSuccessMessage": "Kısayollar başarıyla içe aktarıldı!",
|
||||
"importFailTitle": "İçe Aktarma Başarısız",
|
||||
"importFailMessage": "Kısayollar içe aktarılamadı. Geçersiz dosya biçimi."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Uyarı",
|
||||
"cancel": "İptal",
|
||||
"proceed": "Devam Et"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Verileriniz cihazınızı asla terk etmez",
|
||||
"weKeep": "Bilgilerinizi",
|
||||
"yourInfoSafe": "güvende tutuyoruz",
|
||||
"byFollowingStandards": "küresel güvenlik standartlarını takip ederek.",
|
||||
"processingLocal": "Tüm işlemler cihazınızda yerel olarak gerçekleşir.",
|
||||
"gdpr": {
|
||||
"title": "GDPR uyumluluğu",
|
||||
"description": "Avrupa Birliği'ndeki bireylerin kişisel verilerini ve gizliliğini korur."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA uyumluluğu",
|
||||
"description": "Kaliforniya sakinlerine kişisel bilgilerinin nasıl toplandığı, kullanıldığı ve paylaşıldığı konusunda haklar tanır."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA uyumluluğu",
|
||||
"description": "ABD sağlık sisteminde hassas sağlık bilgilerinin işlenmesi için güvenlik önlemleri belirler."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Sıkça Sorulan",
|
||||
"questions": "Sorular",
|
||||
"isFree": {
|
||||
"question": "BentoPDF gerçekten ücretsiz mi?",
|
||||
"answer": "Evet, kesinlikle. BentoPDF'deki tüm araçlar %100 ücretsizdir, dosya sınırı yoktur, kayıt gerekmez ve filigran eklenmez. Herkesin ödeme duvarı olmadan basit, güçlü PDF araçlarına erişimi hak ettiğine inanıyoruz."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Dosyalarım güvende mi? Nerede işleniyorlar?",
|
||||
"answer": "Dosyalarınız mümkün olan en güvenli şekildedir çünkü bilgisayarınızı asla terk etmezler. Tüm işlemler doğrudan web tarayıcınızda (istemci tarafında) gerçekleşir. Dosyalarınızı asla bir sunucuya yüklemeyiz, böylece gizliliğiniz ve belgeleriniz üzerindeki kontrolünüz tam olarak sizde kalır."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Mac, Windows ve Mobil'de çalışıyor mu?",
|
||||
"answer": "Evet! BentoPDF tamamen tarayıcınızda çalıştığı için, Windows, macOS, Linux, iOS ve Android dahil modern bir web tarayıcısı olan herhangi bir işletim sisteminde çalışır."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF GDPR uyumlu mu?",
|
||||
"answer": "Evet. BentoPDF tamamen GDPR uyumludur. Tüm dosya işlemleri tarayıcınızda yerel olarak gerçekleştiği ve dosyalarınızı herhangi bir sunucuya asla iletmediğimiz için verilerinize erişimimiz yoktur. Bu, belgeleriniz üzerindeki kontrolün her zaman sizde olduğundan emin olur."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Dosyalarımı saklıyor veya takip ediyor musunuz?",
|
||||
"answer": "Hayır. Dosyalarınızı asla saklamıyor, takip etmiyor veya kaydetmiyoruz. BentoPDF'de yaptığınız her şey tarayıcı belleğinizde gerçekleşir ve sayfayı kapattığınızda silinir. Yükleme, geçmiş kaydı veya sunucu yoktur."
|
||||
},
|
||||
"different": {
|
||||
"question": "BentoPDF'yi diğer PDF araçlarından farklı kılan nedir?",
|
||||
"answer": "Çoğu PDF aracı, işlem için dosyalarınızı bir sunucuya yükler. BentoPDF asla böyle yapmaz. Dosyalarınızı doğrudan tarayıcınızda işlemek için güvenli, modern web teknolojileri kullanırız. Bu, daha hızlı performans, daha güçlü gizlilik ve tam bir gönül rahatlığı anlamına gelir."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Tarayıcı tabanlı işlem beni nasıl korur?",
|
||||
"answer": "Tamamen tarayıcınızın içinde çalışarak, BentoPDF dosyalarınızın cihazınızı asla terk etmemesini sağlar. Bu, sunucu saldırıları, veri ihlalleri veya yetkisiz erişim risklerini ortadan kaldırır. Dosyalarınız her zaman sizin kalır."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Beni takip etmek için çerez veya analiz kullanıyor musunuz?",
|
||||
"answer": "Gizliliğinizi önemsiyoruz. BentoPDF kişisel bilgileri takip etmez. Sadece anonim ziyaretçi sayılarını görmek için Simple Analytics kullanıyoruz. Bu, sitemizi kaç kişinin ziyaret ettiğini görebileceğimiz, ancak kim olduğunuzu asla bilemeyeceğimiz anlamına gelir. Simple Analytics tamamen GDPR uyumludur ve gizliliğinize saygı gösterir."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Kullanıcılarımız",
|
||||
"users": "Ne Diyor",
|
||||
"say": ""
|
||||
},
|
||||
"support": {
|
||||
"title": "Çalışmamı Beğendiniz mi?",
|
||||
"description": "BentoPDF, herkes için ücretsiz, özel ve güçlü bir PDF araç seti sağlamak amacıyla oluşturulmuş bir tutku projesidir. Faydalı bulduysanız, geliştirilmesini desteklemeyi düşünebilirsiniz. Her kahve yardımcı olur!",
|
||||
"buyMeCoffee": "Bana Kahve Ismarla"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Tüm hakları saklıdır.",
|
||||
"version": "Sürüm",
|
||||
"company": "Şirket",
|
||||
"aboutUs": "Hakkımızda",
|
||||
"faqLink": "SSS",
|
||||
"contactUs": "İletişim",
|
||||
"legal": "Yasal",
|
||||
"termsAndConditions": "Kullanım Koşulları",
|
||||
"privacyPolicy": "Gizlilik Politikası",
|
||||
"followUs": "Bizi Takip Edin"
|
||||
},
|
||||
"merge": {
|
||||
"title": "PDF Birleştir",
|
||||
"description": "Dosyaların tamamını birleştirin veya yeni bir belge oluşturmak için belirli sayfaları seçin.",
|
||||
"fileMode": "Dosya Modu",
|
||||
"pageMode": "Sayfa Modu",
|
||||
"howItWorks": "Nasıl Çalışır:",
|
||||
"fileModeInstructions": [
|
||||
"Dosyaların sırasını değiştirmek için simgeyi tıklayıp sürükleyin.",
|
||||
"Her dosya için \"Sayfalar\" kutusuna, yalnızca o sayfaları birleştirmek için aralıklar belirtebilirsiniz (örn. \"1-3, 5\").",
|
||||
"Tüm sayfaları dahil etmek için \"Sayfalar\" kutusunu boş bırakın."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Yüklediğiniz PDF'lerin tüm sayfaları aşağıda gösterilmiştir.",
|
||||
"Yeni dosyanız için istediğiniz sırayı oluşturmak üzere sayfa küçük resimlerini sürükleyip bırakmanız yeterlidir."
|
||||
],
|
||||
"mergePdfs": "PDF'leri Birleştir"
|
||||
},
|
||||
"common": {
|
||||
"page": "Sayfa",
|
||||
"pages": "Sayfa",
|
||||
"of": "- ",
|
||||
"download": "İndir",
|
||||
"cancel": "İptal",
|
||||
"save": "Kaydet",
|
||||
"delete": "Sil",
|
||||
"edit": "Düzenle",
|
||||
"add": "Ekle",
|
||||
"remove": "Kaldır",
|
||||
"loading": "Yükleniyor...",
|
||||
"error": "Hata",
|
||||
"success": "Başarılı",
|
||||
"file": "Dosya",
|
||||
"files": "Dosya"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "PDF araçlarının",
|
||||
"subtitle": "hızlı, özel ve ücretsiz olması gerektiğine inanıyoruz.",
|
||||
"noCompromises": "Taviz yok."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Misyonumuz",
|
||||
"description": "Gizliliğinize saygı duyan ve asla ödeme talep etmeyen en kapsamlı PDF araç setini sağlamak. Temel belge araçlarının her yerde, herkes için erişilebilir olması gerektiğine inanıyoruz."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Temel Felsefemiz",
|
||||
"title": "Öncelik Her Zaman Gizlilik.",
|
||||
"description": "Verinin bir meta olarak kabul edildiği bir çağda, farklı bir yaklaşım benimsiyoruz. Bentopdf araçları için tüm işlemler tarayıcınızda yerel olarak gerçekleşir. Bu, dosyalarınızın sunucularımıza asla dokunmadığı, belgelerinizi asla görmediğimiz ve ne yaptığınızı takip etmediğimiz anlamına gelir. Belgeleriniz tamamen ve kesinlikle özel kalır. Bu sadece bir özellik değil, temelimizdir."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Neden",
|
||||
"speed": {
|
||||
"title": "Hız İçin Tasarlandı",
|
||||
"description": "Sunucuya yükleme veya indirme için bekleme yok. WebAssembly gibi modern web teknolojilerini kullanarak dosyaları doğrudan tarayıcınızda işleyerek, tüm araçlarımız için benzersiz bir hız sunuyoruz."
|
||||
},
|
||||
"free": {
|
||||
"title": "Tamamen Ücretsiz",
|
||||
"description": "Deneme sürümü yok, abonelik yok, gizli ücret yok ve \"premium\" özellikler rehin alınmamış. Güçlü PDF araçlarının bir kar merkezi değil, bir kamu hizmeti olması gerektiğine inanıyoruz."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Hesap Gerekmez",
|
||||
"description": "Hemen herhangi bir aracı kullanmaya başlayın. E-postanıza, şifrenize veya herhangi bir kişisel bilginize ihtiyacımız yok. İş akışınız sürtünmesiz ve anonim olmalıdır."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Açık Kaynak Ruhu",
|
||||
"description": "Şeffaflık düşünülerek oluşturuldu. PDF-lib ve PDF.js gibi inanılmaz açık kaynaklı kütüphanelerden yararlanıyoruz ve güçlü araçları herkes için erişilebilir kılmak için topluluk odaklı çabaya inanıyoruz."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Başlamaya hazır mısınız?",
|
||||
"description": "Günlük belge ihtiyaçları için BentoPDF'ye güvenen binlerce kullanıcıya katılın. Gizlilik ve performansın yaratabileceği farkı deneyimleyin.",
|
||||
"button": "Tüm Araçları Keşfet"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "İletişime Geçin",
|
||||
"subtitle": "Sizden haber almak isteriz. Bir sorunuz, geri bildiriminiz veya bir özellik isteğiniz varsa, lütfen bize ulaşmaktan çekinmeyin.",
|
||||
"email": "Bize doğrudan şu e-posta adresinden ulaşabilirsiniz:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Lisanslama",
|
||||
"subtitle": "İhtiyaçlarınıza uygun lisansı seçin."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "PDF Yükle",
|
||||
"upload": "Yükle",
|
||||
"addBlankPage": "Boş Sayfa Ekle",
|
||||
"edit": "Düzenle:",
|
||||
"undo": "Geri Al",
|
||||
"redo": "Yinele",
|
||||
"reset": "Sıfırla",
|
||||
"selection": "Seçim:",
|
||||
"selectAll": "Tümünü Seç",
|
||||
"deselectAll": "Seçimi Kaldır",
|
||||
"rotate": "Döndür:",
|
||||
"rotateLeft": "Sola",
|
||||
"rotateRight": "Sağa",
|
||||
"transform": "Dönüştür:",
|
||||
"duplicate": "Çoğalt",
|
||||
"split": "Böl",
|
||||
"clear": "Temizle:",
|
||||
"delete": "Sil",
|
||||
"download": "İndir:",
|
||||
"downloadSelected": "Seçilenleri İndir",
|
||||
"exportPdf": "PDF Olarak Dışa Aktar",
|
||||
"uploadPdfFiles": "PDF Dosyalarını Seçin",
|
||||
"dragAndDrop": "PDF dosyalarını buraya sürükleyip bırakın veya seçmek için tıklayın",
|
||||
"selectFiles": "Dosya Seç",
|
||||
"renderingPages": "Sayfalar oluşturuluyor...",
|
||||
"actions": {
|
||||
"duplicatePage": "Bu sayfayı çoğalt",
|
||||
"deletePage": "Bu sayfayı sil",
|
||||
"insertPdf": "Bu sayfadan sonra PDF ekle",
|
||||
"toggleSplit": "Bu sayfadan sonra bölmeyi aç/kapat"
|
||||
},
|
||||
"pleaseWait": "Lütfen Bekleyin",
|
||||
"pagesRendering": "Sayfalar hala oluşturuluyor. Lütfen bekleyin...",
|
||||
"noPagesSelected": "Hiçbir Sayfa Seçilmedi",
|
||||
"selectOnePage": "Lütfen indirmek için en az bir sayfa seçin.",
|
||||
"noPages": "Sayfa Yok",
|
||||
"noPagesToExport": "Dışa aktarılacak sayfa yok.",
|
||||
"renderingTitle": "Sayfa önizlemeleri oluşturuluyor",
|
||||
"errorRendering": "Sayfa küçük resimleri oluşturulamadı",
|
||||
"error": "Hata",
|
||||
"failedToLoad": "Yüklenemedi"
|
||||
}
|
||||
}
|
||||
511
public/locales/tr/tools.json
Normal file
@@ -0,0 +1,511 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Popüler Araçlar",
|
||||
"editAnnotate": "Düzenle & Açıklama Ekle",
|
||||
"convertToPdf": "PDF'ye Dönüştür",
|
||||
"convertFromPdf": "PDF'den Dönüştür",
|
||||
"organizeManage": "Düzenle & Yönet",
|
||||
"optimizeRepair": "Optimize Et & Onar",
|
||||
"securePdf": "PDF Güvenliği"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF Çoklu Araç",
|
||||
"subtitle": "Birleştir, Böl, Düzenle, Sil, Döndür, Boş Sayfa Ekle, Çıkar ve Çoğalt işlemlerini tek bir arayüzde yapın."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "PDF Birleştir",
|
||||
"subtitle": "Birden fazla PDF'yi tek bir dosyada birleştirin. Yer imlerini korur."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "PDF Böl",
|
||||
"subtitle": "Sayfa aralığını yeni bir PDF olarak çıkarın."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "PDF Sıkıştır",
|
||||
"subtitle": "PDF dosya boyutunu küçültün."
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF Düzenleyici",
|
||||
"subtitle": "Açıklama ekleyin, vurgulayın, düzenleyin, yorum yapın, şekil/resim ekleyin, arama yapın ve PDF'leri görüntüleyin."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla JPG görselinden PDF oluşturun."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "PDF İmzala",
|
||||
"subtitle": "İmzanızı çizin, yazın veya yükleyin."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "PDF Kırp",
|
||||
"subtitle": "PDF'nizdeki her sayfanın kenar boşluklarını kırpın."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Sayfaları Çıkar",
|
||||
"subtitle": "Seçili sayfaları yeni dosyalar olarak kaydedin."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Çoğalt & Düzenle",
|
||||
"subtitle": "Sayfaları çoğaltın, yeniden sıralayın ve silin."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Sayfaları Sil",
|
||||
"subtitle": "Belgenizden belirli sayfaları kaldırın."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Yer İşaretlerini Düzenle",
|
||||
"subtitle": "PDF yer imlerini ekleyin, düzenleyin, içe aktarın, silin ve çıkarın."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "İçindekiler",
|
||||
"subtitle": "PDF yer imlerinden bir içindekiler sayfası oluşturun."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Sayfa Numaraları",
|
||||
"subtitle": "Belgenize sayfa numaraları ekleyin."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Filigran Ekle",
|
||||
"subtitle": "PDF sayfalarınızın üzerine metin veya görsel damgası ekleyin."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Üst Bilgi & Alt Bilgi",
|
||||
"subtitle": "Sayfaların üst ve alt kısmına metin ekleyin."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Renkleri Ters Çevir",
|
||||
"subtitle": "PDF'niz için \"karanlık mod\" sürümü oluşturun."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Arka Plan Rengi",
|
||||
"subtitle": "PDF'nizin arka plan rengini değiştirin."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Metin Rengini Değiştir",
|
||||
"subtitle": "PDF'nizdeki metnin rengini değiştirin."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Damga Ekle",
|
||||
"subtitle": "Açıklama araç çubuğunu kullanarak PDF'nize damga ekleyin.",
|
||||
"usernameLabel": "Kullanıcı Adı",
|
||||
"usernamePlaceholder": "Adınızı girin (damgalar için)",
|
||||
"usernameHint": "Bu isim oluşturduğunuz damgalarda görünecektir."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Açıklamaları Kaldır",
|
||||
"subtitle": "Yorumları, vurguları ve bağlantıları kaldırın."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF Form Doldurucu",
|
||||
"subtitle": "Formları doğrudan tarayıcıda doldurun. XFA formlarını da destekler."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "PDF Formu Oluştur",
|
||||
"subtitle": "Sürükle-bırak metin alanları ile doldurulabilir PDF formları oluşturun."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Boş Sayfaları Kaldır",
|
||||
"subtitle": "Boş sayfaları otomatik olarak tespit edin ve silin."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Görselden PDF'ye",
|
||||
"subtitle": "JPG, PNG, WebP, BMP, TIFF, SVG, HEIC formatlarını PDF'ye dönüştürün."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla PNG görselinden PDF oluşturun."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla WebP görselinden PDF oluşturun."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla SVG görselinden PDF oluşturun."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla BMP görselinden PDF oluşturun."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla HEIC görselinden PDF oluşturun."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF'den PDF'ye",
|
||||
"subtitle": "Bir veya daha fazla TIFF görselinden PDF oluşturun."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Metinden PDF'ye",
|
||||
"subtitle": "Düz metin dosyasını PDF'ye dönüştürün."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON'dan PDF'ye",
|
||||
"subtitle": "JSON dosyalarını PDF formatına dönüştürün."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF'den JPG'ye",
|
||||
"subtitle": "Her PDF sayfasını JPG görseline dönüştürün."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF'den PNG'ye",
|
||||
"subtitle": "Her PDF sayfasını PNG görseline dönüştürün."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF'den WebP'ye",
|
||||
"subtitle": "Her PDF sayfasını WebP görseline dönüştürün."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF'den BMP'ye",
|
||||
"subtitle": "Her PDF sayfasını BMP görseline dönüştürün."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF'den TIFF'e",
|
||||
"subtitle": "Her PDF sayfasını TIFF görseline dönüştürün."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF'yi Gri Tonlamaya Çevir",
|
||||
"subtitle": "Tüm renkleri siyah beyaza çevirin."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF'den JSON'a",
|
||||
"subtitle": "PDF dosyalarını JSON formatına dönüştürün."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "PDF'de OCR",
|
||||
"subtitle": "PDF'yi aranabilir ve kopyalanabilir hale getirin."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Sayfaları Karıştır & Birleştir",
|
||||
"subtitle": "PDF'leri her birinden sayfaları sırayla birleştirin. Yer imlerini korur."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Ek Dosya Ekle",
|
||||
"subtitle": "PDF'nize bir veya daha fazla dosya ekleyin."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Ek Dosyaları Çıkar",
|
||||
"subtitle": "PDF'lerden tüm gömülü dosyaları ZIP olarak çıkarın."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Ek Dosyaları Düzenle",
|
||||
"subtitle": "PDF'nizdeki ek dosyaları görüntüleyin veya kaldırın."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Sayfaları Böl",
|
||||
"subtitle": "Sayfaları yatay veya dikey olarak bölün."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Boş Sayfa Ekle",
|
||||
"subtitle": "PDF'nize herhangi bir yerine boş sayfa ekleyin."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Sayfaları Ters Çevir",
|
||||
"subtitle": "Belgenizdeki tüm sayfaların sırasını tersine çevirin."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "PDF'yi Döndür",
|
||||
"subtitle": "Sayfaları 90 derecelik artışlarla döndürün."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N'li PDF",
|
||||
"subtitle": "Birden fazla sayfayı tek bir sayfaya yerleştirin."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Tek Sayfada Birleştir",
|
||||
"subtitle": "Tüm sayfaları tek bir sürekli kaydırılabilir sayfada birleştirin."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Üst Veriyi Görüntüle",
|
||||
"subtitle": "PDF'nizin gizli özelliklerini inceleyin."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Üst Veriyi Düzenle",
|
||||
"subtitle": "Yazar, başlık ve diğer özellikleri değiştirin."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF'leri ZIP Yap",
|
||||
"subtitle": "Birden fazla PDF dosyasını bir ZIP arşivinde paketleyin."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "PDF'leri Karşılaştır",
|
||||
"subtitle": "İki PDF'yi yan yana karşılaştırın."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "PDF'yi Posta Boyutuna Böl",
|
||||
"subtitle": "Büyük bir sayfayı birden fazla küçük sayfaya bölün."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Sayfa Boyutunu Düzelt",
|
||||
"subtitle": "Tüm sayfaları standart bir boyuta getirin."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "PDF'yi Doğrusallaştır",
|
||||
"subtitle": "Hızlı web görüntüleme için PDF'yi optimize edin."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Sayfa Boyutları",
|
||||
"subtitle": "Sayfa boyutunu, yönlendirmeyi ve birimleri analiz edin."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Kısıtlamaları Kaldır",
|
||||
"subtitle": "Dijital olarak imzalanmış PDF dosyalarıyla ilişkili şifre korumasını ve güvenlik kısıtlamalarını kaldırın."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "PDF'yi Onar",
|
||||
"subtitle": "Bozulmuş veya hasarlı PDF dosyalarından veri kurtarın."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "PDF'yi Şifrele",
|
||||
"subtitle": "PDF'nizi şifre ekleyerek koruyun."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "PDF'yi Temizle",
|
||||
"subtitle": "Üst verileri, açıklamaları, betikleri ve daha fazlasını kaldırın."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "PDF'nin Şifresini Çöz",
|
||||
"subtitle": "Şifre korumasını kaldırarak PDF'nin kilidini açın."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "PDF'yi Düzleştir",
|
||||
"subtitle": "Form alanlarını ve açıklamaları düzenlenemez hale getirin."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Üst Veriyi Kaldır",
|
||||
"subtitle": "PDF'nizdeki gizli verileri temizleyin."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "İzinleri Değiştir",
|
||||
"subtitle": "Bir PDF üzerindeki kullanıcı izinlerini ayarlayın veya değiştirin."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "E-posta'dan PDF'ye",
|
||||
"subtitle": "E-posta dosyalarını (EML, MSG) PDF formatına dönüştürün. Outlook dışa aktarmalarını ve standart e-posta formatlarını destekler.",
|
||||
"acceptedFormats": "EML, MSG Dosyaları",
|
||||
"convertButton": "PDF'ye Dönüştür"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Yazı Tipi Çerçeveye Dönüştür",
|
||||
"subtitle": "Tüm yazı tiplerini vektör çerçevelere dönüştürün, tüm cihazlarda tutarlı görüntü için."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "PDF Eğriliğini Düzelt",
|
||||
"subtitle": "OpenCV kullanarak eğik taranmış sayfaları otomatik olarak düzeltin."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotate by Custom Degrees",
|
||||
"subtitle": "Rotate pages by any custom angle."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT to PDF",
|
||||
"subtitle": "Convert OpenDocument Text files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODT files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV to PDF",
|
||||
"subtitle": "Convert CSV spreadsheet files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF to PDF",
|
||||
"subtitle": "Convert Rich Text Format documents to PDF. Supports multiple files.",
|
||||
"acceptedFormats": "RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word to PDF",
|
||||
"subtitle": "Convert Word documents (DOCX, DOC, ODT, RTF) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "DOCX, DOC, ODT, RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel to PDF",
|
||||
"subtitle": "Convert Excel spreadsheets (XLSX, XLS, ODS, CSV) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XLSX, XLS, ODS, CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint to PDF",
|
||||
"subtitle": "Convert PowerPoint presentations (PPTX, PPT, ODP) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PPTX, PPT, ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown to PDF",
|
||||
"subtitle": "Write or paste Markdown and export it as a beautifully formatted PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Preview",
|
||||
"btnUpload": "Upload",
|
||||
"btnSyncScroll": "Sync Scroll",
|
||||
"btnSettings": "Settings",
|
||||
"btnExportPdf": "Export PDF",
|
||||
"settingsTitle": "Markdown Settings",
|
||||
"settingsPreset": "Preset",
|
||||
"presetDefault": "Default (GFM-like)",
|
||||
"presetCommonmark": "CommonMark (strict)",
|
||||
"presetZero": "Minimal (no features)",
|
||||
"settingsOptions": "Markdown Options",
|
||||
"optAllowHtml": "Allow HTML tags",
|
||||
"optBreaks": "Convert newlines to <br>",
|
||||
"optLinkify": "Auto-convert URLs to links",
|
||||
"optTypographer": "Typographer (smart quotes, etc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "PDF Booklet",
|
||||
"subtitle": "Rearrange pages for double-sided booklet printing. Fold and staple to create a booklet.",
|
||||
"howItWorks": "How it works:",
|
||||
"step1": "Upload a PDF file.",
|
||||
"step2": "Pages will be rearranged in booklet order.",
|
||||
"step3": "Print double-sided, flip on short edge, fold and staple.",
|
||||
"paperSize": "Paper Size",
|
||||
"orientation": "Orientation",
|
||||
"portrait": "Portrait",
|
||||
"landscape": "Landscape",
|
||||
"pagesPerSheet": "Pages per Sheet",
|
||||
"createBooklet": "Create Booklet",
|
||||
"processing": "Processing...",
|
||||
"pageCount": "Page count will be padded to multiple of 4 if needed."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS to PDF",
|
||||
"subtitle": "Convert XPS/OXPS documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XPS, OXPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI to PDF",
|
||||
"subtitle": "Convert MOBI e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "MOBI files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB to PDF",
|
||||
"subtitle": "Convert EPUB e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "EPUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 to PDF",
|
||||
"subtitle": "Convert FictionBook (FB2) e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "FB2 files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ to PDF",
|
||||
"subtitle": "Convert comic book archives (CBZ/CBR) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CBZ, CBR files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD to PDF",
|
||||
"subtitle": "Convert WordPerfect documents (WPD) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS to PDF",
|
||||
"subtitle": "Convert WPS Office documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML to PDF",
|
||||
"subtitle": "Convert XML documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XML files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages to PDF",
|
||||
"subtitle": "Convert Apple Pages documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "Pages files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG to PDF",
|
||||
"subtitle": "Convert OpenDocument Graphics (ODG) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODG files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS to PDF",
|
||||
"subtitle": "Convert OpenDocument Spreadsheet (ODS) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP to PDF",
|
||||
"subtitle": "Convert OpenDocument Presentation (ODP) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB to PDF",
|
||||
"subtitle": "Convert Microsoft Publisher (PUB) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD to PDF",
|
||||
"subtitle": "Convert Microsoft Visio (VSD, VSDX) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "VSD, VSDX files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD to PDF",
|
||||
"subtitle": "Convert Adobe Photoshop (PSD) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PSD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF to SVG",
|
||||
"subtitle": "Convert each page of a PDF file into a scalable vector graphic (SVG) for perfect quality at any size."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Extract PDF Tables",
|
||||
"subtitle": "Extract tables from PDF files and export as CSV, JSON, or Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF to CSV",
|
||||
"subtitle": "Extract tables from PDF and convert to CSV format."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF to Excel",
|
||||
"subtitle": "Extract tables from PDF and convert to Excel (XLSX) format."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF to Text",
|
||||
"subtitle": "Extract text from PDF files and save as plain text (.txt). Supports multiple files.",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"convertButton": "Extract Text"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digital Signature PDF",
|
||||
"pageTitle": "Digital Signature PDF - Add Cryptographic Signature | BentoPDF",
|
||||
"subtitle": "Add a cryptographic digital signature to your PDF using X.509 certificates. Supports PKCS#12 (.pfx, .p12) and PEM formats. Your private key never leaves your browser.",
|
||||
"certificateSection": "Certificate",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12)",
|
||||
"certPassword": "Certificate Password",
|
||||
"certPasswordPlaceholder": "Enter certificate password",
|
||||
"certInfo": "Certificate Information",
|
||||
"certSubject": "Subject",
|
||||
"certIssuer": "Issuer",
|
||||
"certValidity": "Valid",
|
||||
"signatureDetails": "Signature Details (Optional)",
|
||||
"reason": "Reason",
|
||||
"reasonPlaceholder": "e.g., I approve this document",
|
||||
"location": "Location",
|
||||
"locationPlaceholder": "e.g., New York, USA",
|
||||
"contactInfo": "Contact Info",
|
||||
"contactPlaceholder": "e.g., email@example.com",
|
||||
"applySignature": "Apply Digital Signature",
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validate PDF Signature",
|
||||
"pageTitle": "Validate PDF Signature - Verify Digital Signatures | BentoPDF",
|
||||
"subtitle": "Verify digital signatures in your PDF files. Check certificate validity, view signer details, and confirm document integrity. All processing happens in your browser."
|
||||
}
|
||||
}
|
||||
@@ -1,318 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "Trang chủ",
|
||||
"about": "Giới thiệu",
|
||||
"contact": "Liên hệ",
|
||||
"licensing": "Giấy phép",
|
||||
"allTools": "Tất cả công cụ",
|
||||
"openMainMenu": "Mở menu chính",
|
||||
"language": "Ngôn ngữ"
|
||||
"nav": {
|
||||
"home": "Trang chủ",
|
||||
"about": "Giới thiệu",
|
||||
"contact": "Liên hệ",
|
||||
"licensing": "Giấy phép",
|
||||
"allTools": "Tất cả công cụ",
|
||||
"openMainMenu": "Mở menu chính",
|
||||
"language": "Ngôn ngữ"
|
||||
},
|
||||
"donation": {
|
||||
"message": "Bạn yêu thích BentoPDF? Hãy giúp chúng tôi giữ nó miễn phí và mã nguồn mở!",
|
||||
"button": "Quyên góp"
|
||||
},
|
||||
"hero": {
|
||||
"title": "Bộ công cụ",
|
||||
"pdfToolkit": "PDF",
|
||||
"builtForPrivacy": "an toàn và riêng tư",
|
||||
"noSignups": "Không cần đăng ký",
|
||||
"unlimitedUse": "Sử dụng không giới hạn",
|
||||
"worksOffline": "Hoạt động offline",
|
||||
"startUsing": "Bắt đầu sử dụng ngay"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Được sử dụng bởi các công ty và những người làm việc tại"
|
||||
},
|
||||
"features": {
|
||||
"title": "Tại sao chọn",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Không cần đăng ký",
|
||||
"description": "Bắt đầu ngay lập tức, không cần tài khoản hay email."
|
||||
},
|
||||
"hero": {
|
||||
"title": "Bộ công cụ",
|
||||
"pdfToolkit": "PDF",
|
||||
"builtForPrivacy": "an toàn và riêng tư",
|
||||
"noSignups": "Không cần đăng ký",
|
||||
"unlimitedUse": "Sử dụng không giới hạn",
|
||||
"worksOffline": "Hoạt động offline",
|
||||
"startUsing": "Bắt đầu sử dụng ngay"
|
||||
"noUploads": {
|
||||
"title": "Không tải lên",
|
||||
"description": "100% xử lý phía máy khách, tệp của bạn không bao giờ rời khỏi thiết bị."
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "Được sử dụng bởi các công ty và những người làm việc tại"
|
||||
"foreverFree": {
|
||||
"title": "Miễn phí mãi mãi",
|
||||
"description": "Tất cả công cụ, không dùng thử, không có tường phí."
|
||||
},
|
||||
"features": {
|
||||
"title": "Tại sao chọn",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "Không cần đăng ký",
|
||||
"description": "Bắt đầu ngay lập tức, không cần tài khoản hay email."
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "Không tải lên",
|
||||
"description": "100% xử lý phía máy khách, tệp của bạn không bao giờ rời khỏi thiết bị."
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "Miễn phí mãi mãi",
|
||||
"description": "Tất cả công cụ, không dùng thử, không có tường phí."
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "Không giới hạn",
|
||||
"description": "Sử dụng bao nhiêu tùy thích, không có giới hạn ẩn."
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "Xử lý hàng loạt",
|
||||
"description": "Xử lý không giới hạn PDF trong một lần."
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "Cực kỳ nhanh",
|
||||
"description": "Xử lý PDF ngay lập tức, không cần chờ đợi hay trì hoãn."
|
||||
}
|
||||
"noLimits": {
|
||||
"title": "Không giới hạn",
|
||||
"description": "Sử dụng bao nhiêu tùy thích, không có giới hạn ẩn."
|
||||
},
|
||||
"tools": {
|
||||
"title": "Bắt đầu với",
|
||||
"toolsLabel": "Công cụ",
|
||||
"subtitle": "Nhấp vào một công cụ để mở trình tải tệp lên",
|
||||
"searchPlaceholder": "Tìm kiếm công cụ (ví dụ: 'chia', 'sắp xếp'...)",
|
||||
"backToTools": "Quay lại Công cụ"
|
||||
"batchProcessing": {
|
||||
"title": "Xử lý hàng loạt",
|
||||
"description": "Xử lý không giới hạn PDF trong một lần."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Nhấp để chọn tệp",
|
||||
"orDragAndDrop": "hoặc kéo và thả",
|
||||
"pdfOrImages": "PDF hoặc Hình ảnh",
|
||||
"filesNeverLeave": "Tệp của bạn không bao giờ rời khỏi thiết bị.",
|
||||
"addMore": "Thêm tệp",
|
||||
"clearAll": "Xóa tất cả"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Đang xử lý..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Thông báo",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Xem trước tài liệu",
|
||||
"downloadAsPdf": "Tải xuống dưới dạng PDF",
|
||||
"close": "Đóng"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Cài đặt",
|
||||
"shortcuts": "Phím tắt",
|
||||
"preferences": "Tùy chọn",
|
||||
"displayPreferences": "Tùy chọn hiển thị",
|
||||
"searchShortcuts": "Tìm kiếm phím tắt...",
|
||||
"shortcutsInfo": "Nhấn và giữ phím để đặt phím tắt. Thay đổi được lưu tự động.",
|
||||
"shortcutsWarning": "⚠️ Tránh các phím tắt trình duyệt phổ biến (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N, v.v.) vì chúng có thể không hoạt động đáng tin cậy.",
|
||||
"import": "Nhập",
|
||||
"export": "Xuất",
|
||||
"resetToDefaults": "Đặt lại về mặc định",
|
||||
"fullWidthMode": "Chế độ toàn chiều rộng",
|
||||
"fullWidthDescription": "Sử dụng toàn bộ chiều rộng màn hình cho tất cả công cụ thay vì container căn giữa",
|
||||
"settingsAutoSaved": "Cài đặt được lưu tự động",
|
||||
"clickToSet": "Nhấp để đặt",
|
||||
"pressKeys": "Nhấn phím...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Phím tắt đã được sử dụng",
|
||||
"assignedTo": "đã được gán cho:",
|
||||
"chooseDifferent": "Vui lòng chọn một phím tắt khác.",
|
||||
"reserved": "Cảnh báo phím tắt dành riêng",
|
||||
"commonlyUsed": "thường được sử dụng cho:",
|
||||
"unreliable": "Phím tắt này có thể không hoạt động đáng tin cậy hoặc có thể xung đột với hành vi trình duyệt/hệ thống.",
|
||||
"useAnyway": "Bạn có muốn sử dụng nó không?",
|
||||
"resetTitle": "Đặt lại phím tắt",
|
||||
"resetMessage": "Bạn có chắc chắn muốn đặt lại tất cả phím tắt về mặc định?<br><br>Hành động này không thể hoàn tác.",
|
||||
"importSuccessTitle": "Nhập thành công",
|
||||
"importSuccessMessage": "Đã nhập phím tắt thành công!",
|
||||
"importFailTitle": "Nhập thất bại",
|
||||
"importFailMessage": "Không thể nhập phím tắt. Định dạng tệp không hợp lệ."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Cảnh báo",
|
||||
"cancel": "Hủy",
|
||||
"proceed": "Tiếp tục"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Dữ liệu của bạn không bao giờ rời khỏi thiết bị",
|
||||
"weKeep": "Chúng tôi giữ",
|
||||
"yourInfoSafe": "thông tin của bạn an toàn",
|
||||
"byFollowingStandards": "bằng cách tuân theo các tiêu chuẩn bảo mật toàn cầu.",
|
||||
"processingLocal": "Tất cả quá trình xử lý diễn ra cục bộ trên thiết bị của bạn.",
|
||||
"gdpr": {
|
||||
"title": "Tuân thủ GDPR",
|
||||
"description": "Bảo vệ dữ liệu cá nhân và quyền riêng tư của các cá nhân trong Liên minh Châu Âu."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Tuân thủ CCPA",
|
||||
"description": "Trao quyền cho cư dân California về cách thông tin cá nhân của họ được thu thập, sử dụng và chia sẻ."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Tuân thủ HIPAA",
|
||||
"description": "Đặt ra các biện pháp bảo vệ để xử lý thông tin sức khỏe nhạy cảm trong hệ thống chăm sóc sức khỏe Hoa Kỳ."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Câu hỏi",
|
||||
"questions": "Thường gặp",
|
||||
"isFree": {
|
||||
"question": "BentoPDF có thực sự miễn phí không?",
|
||||
"answer": "Có, hoàn toàn miễn phí. Tất cả các công cụ trên BentoPDF đều 100% miễn phí sử dụng, không giới hạn tệp, không cần đăng ký và không có watermark. Chúng tôi tin rằng mọi người đều xứng đáng được tiếp cận với các công cụ PDF đơn giản, mạnh mẽ mà không có tường phí."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Tệp của tôi có an toàn không? Chúng được xử lý ở đâu?",
|
||||
"answer": "Tệp của bạn an toàn nhất có thể vì chúng không bao giờ rời khỏi máy tính của bạn. Tất cả quá trình xử lý diễn ra trực tiếp trong trình duyệt web của bạn (phía máy khách). Chúng tôi không bao giờ tải tệp của bạn lên máy chủ, vì vậy bạn duy trì quyền riêng tư và kiểm soát hoàn toàn đối với tài liệu của mình."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Nó có hoạt động trên Mac, Windows và Mobile không?",
|
||||
"answer": "Có! Vì BentoPDF chạy hoàn toàn trong trình duyệt của bạn, nó hoạt động trên bất kỳ hệ điều hành nào có trình duyệt web hiện đại, bao gồm Windows, macOS, Linux, iOS và Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF có tuân thủ GDPR không?",
|
||||
"answer": "Có. BentoPDF hoàn toàn tuân thủ GDPR. Vì tất cả quá trình xử lý tệp diễn ra cục bộ trong trình duyệt của bạn và chúng tôi không bao giờ thu thập hoặc truyền tệp của bạn đến bất kỳ máy chủ nào, chúng tôi không có quyền truy cập vào dữ liệu của bạn. Điều này đảm bảo bạn luôn kiểm soát tài liệu của mình."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Bạn có lưu trữ hoặc theo dõi bất kỳ tệp nào của tôi không?",
|
||||
"answer": "Không. Chúng tôi không bao giờ lưu trữ, theo dõi hoặc ghi nhật ký tệp của bạn. Mọi thứ bạn làm trên BentoPDF diễn ra trong bộ nhớ trình duyệt của bạn và biến mất khi bạn đóng trang. Không có tải lên, không có nhật ký lịch sử và không có máy chủ liên quan."
|
||||
},
|
||||
"different": {
|
||||
"question": "Điều gì làm cho BentoPDF khác biệt so với các công cụ PDF khác?",
|
||||
"answer": "Hầu hết các công cụ PDF tải tệp của bạn lên máy chủ để xử lý. BentoPDF không bao giờ làm điều đó. Chúng tôi sử dụng công nghệ web hiện đại, an toàn để xử lý tệp của bạn trực tiếp trong trình duyệt. Điều này có nghĩa là hiệu suất nhanh hơn, quyền riêng tư mạnh mẽ hơn và hoàn toàn yên tâm."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Xử lý dựa trên trình duyệt giữ tôi an toàn như thế nào?",
|
||||
"answer": "Bằng cách chạy hoàn toàn bên trong trình duyệt của bạn, BentoPDF đảm bảo rằng tệp của bạn không bao giờ rời khỏi thiết bị. Điều này loại bỏ các rủi ro về hack máy chủ, vi phạm dữ liệu hoặc truy cập trái phép. Tệp của bạn vẫn thuộc về bạn—luôn luôn."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Bạn có sử dụng cookie hoặc phân tích để theo dõi tôi không?",
|
||||
"answer": "Chúng tôi quan tâm đến quyền riêng tư của bạn. BentoPDF không theo dõi thông tin cá nhân. Chúng tôi chỉ sử dụng Simple Analytics để xem số lượt truy cập ẩn danh. Điều này có nghĩa là chúng tôi có thể biết có bao nhiêu người dùng truy cập trang web của chúng tôi, nhưng chúng tôi không bao giờ biết bạn là ai. Simple Analytics hoàn toàn tuân thủ GDPR và tôn trọng quyền riêng tư của bạn."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Người dùng",
|
||||
"users": "của chúng tôi",
|
||||
"say": "nói gì"
|
||||
},
|
||||
"support": {
|
||||
"title": "Thích công việc của tôi?",
|
||||
"description": "BentoPDF là một dự án đam mê, được xây dựng để cung cấp bộ công cụ PDF miễn phí, riêng tư và mạnh mẽ cho mọi người. Nếu bạn thấy nó hữu ích, hãy cân nhắc hỗ trợ phát triển của nó. Mỗi ly cà phê đều giúp ích!",
|
||||
"buyMeCoffee": "Mua cho tôi một ly cà phê"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2025 BentoPDF. Bảo lưu mọi quyền.",
|
||||
"version": "Phiên bản",
|
||||
"company": "Công ty",
|
||||
"aboutUs": "Về chúng tôi",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Liên hệ",
|
||||
"legal": "Pháp lý",
|
||||
"termsAndConditions": "Điều khoản và Điều kiện",
|
||||
"privacyPolicy": "Chính sách Bảo mật",
|
||||
"followUs": "Theo dõi chúng tôi"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Gộp PDF",
|
||||
"description": "Kết hợp toàn bộ tệp hoặc chọn các trang cụ thể để gộp thành tài liệu mới.",
|
||||
"fileMode": "Chế độ tệp",
|
||||
"pageMode": "Chế độ trang",
|
||||
"howItWorks": "Cách hoạt động:",
|
||||
"fileModeInstructions": [
|
||||
"Nhấp và kéo biểu tượng để thay đổi thứ tự các tệp.",
|
||||
"Trong hộp \"Trang\" cho mỗi tệp, bạn có thể chỉ định phạm vi (ví dụ: \"1-3, 5\") để chỉ gộp những trang đó.",
|
||||
"Để trống hộp \"Trang\" để bao gồm tất cả các trang từ tệp đó."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Tất cả các trang từ PDF đã tải lên của bạn được hiển thị bên dưới.",
|
||||
"Chỉ cần kéo và thả các hình thu nhỏ trang riêng lẻ để tạo thứ tự chính xác bạn muốn cho tệp mới của mình."
|
||||
],
|
||||
"mergePdfs": "Gộp PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Trang",
|
||||
"pages": "Trang",
|
||||
"of": "của",
|
||||
"download": "Tải xuống",
|
||||
"cancel": "Hủy",
|
||||
"save": "Lưu",
|
||||
"delete": "Xóa",
|
||||
"edit": "Chỉnh sửa",
|
||||
"add": "Thêm",
|
||||
"remove": "Xóa",
|
||||
"loading": "Đang tải...",
|
||||
"error": "Lỗi",
|
||||
"success": "Thành công",
|
||||
"file": "Tệp",
|
||||
"files": "Tệp"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Chúng tôi tin rằng công cụ PDF nên",
|
||||
"subtitle": "nhanh, riêng tư và miễn phí.",
|
||||
"noCompromises": "Không thỏa hiệp."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Sứ mệnh của chúng tôi",
|
||||
"description": "Cung cấp bộ công cụ PDF toàn diện nhất tôn trọng quyền riêng tư của bạn và không bao giờ yêu cầu thanh toán. Chúng tôi tin rằng các công cụ tài liệu thiết yếu nên có thể truy cập được cho mọi người, ở mọi nơi, không có rào cản."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Triết lý cốt lõi của chúng tôi",
|
||||
"title": "Quyền riêng tư trước tiên. Luôn luôn.",
|
||||
"description": "Trong thời đại mà dữ liệu là hàng hóa, chúng tôi có cách tiếp cận khác. Tất cả quá trình xử lý cho các công cụ Bentopdf diễn ra cục bộ trong trình duyệt của bạn. Điều này có nghĩa là tệp của bạn không bao giờ chạm vào máy chủ của chúng tôi, chúng tôi không bao giờ thấy tài liệu của bạn và chúng tôi không theo dõi những gì bạn làm. Tài liệu của bạn vẫn hoàn toàn và rõ ràng là riêng tư. Đó không chỉ là một tính năng; đó là nền tảng của chúng tôi."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Tại sao chọn",
|
||||
"speed": {
|
||||
"title": "Được xây dựng cho tốc độ",
|
||||
"description": "Không cần chờ tải lên hoặc tải xuống lên máy chủ. Bằng cách xử lý tệp trực tiếp trong trình duyệt của bạn bằng công nghệ web hiện đại như WebAssembly, chúng tôi cung cấp tốc độ vô song cho tất cả các công cụ của chúng tôi."
|
||||
},
|
||||
"free": {
|
||||
"title": "Hoàn toàn miễn phí",
|
||||
"description": "Không dùng thử, không đăng ký, không phí ẩn và không có tính năng \"premium\" bị giữ lại. Chúng tôi tin rằng các công cụ PDF mạnh mẽ nên là tiện ích công cộng, không phải trung tâm lợi nhuận."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Không cần tài khoản",
|
||||
"description": "Bắt đầu sử dụng bất kỳ công cụ nào ngay lập tức. Chúng tôi không cần email, mật khẩu hoặc bất kỳ thông tin cá nhân nào của bạn. Quy trình làm việc của bạn nên không ma sát và ẩn danh."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Tinh thần mã nguồn mở",
|
||||
"description": "Được xây dựng với tinh thần minh bạch. Chúng tôi tận dụng các thư viện mã nguồn mở tuyệt vời như PDF-lib và PDF.js, và tin vào nỗ lực do cộng đồng thúc đẩy để làm cho các công cụ mạnh mẽ có thể truy cập được cho mọi người."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Sẵn sàng bắt đầu?",
|
||||
"description": "Tham gia cùng hàng nghìn người dùng tin tưởng Bentopdf cho nhu cầu tài liệu hàng ngày của họ. Trải nghiệm sự khác biệt mà quyền riêng tư và hiệu suất có thể tạo ra.",
|
||||
"button": "Khám phá tất cả công cụ"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Liên hệ",
|
||||
"subtitle": "Chúng tôi rất muốn nghe từ bạn. Cho dù bạn có câu hỏi, phản hồi hay yêu cầu tính năng, vui lòng đừng ngần ngại liên hệ.",
|
||||
"email": "Bạn có thể liên hệ trực tiếp với chúng tôi qua email tại:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Giấy phép cho",
|
||||
"subtitle": "Chọn giấy phép phù hợp với nhu cầu của bạn."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Tải lên PDF",
|
||||
"upload": "Tải lên",
|
||||
"addBlankPage": "Thêm trang trống",
|
||||
"edit": "Chỉnh sửa:",
|
||||
"undo": "Hoàn tác",
|
||||
"redo": "Làm lại",
|
||||
"reset": "Đặt lại",
|
||||
"selection": "Chọn:",
|
||||
"selectAll": "Chọn tất cả",
|
||||
"deselectAll": "Bỏ chọn tất cả",
|
||||
"rotate": "Xoay:",
|
||||
"rotateLeft": "Trái",
|
||||
"rotateRight": "Phải",
|
||||
"transform": "Biến đổi:",
|
||||
"duplicate": "Nhân bản",
|
||||
"split": "Chia",
|
||||
"clear": "Xóa:",
|
||||
"delete": "Xóa",
|
||||
"download": "Tải xuống:",
|
||||
"downloadSelected": "Tải xuống đã chọn",
|
||||
"exportPdf": "Xuất PDF",
|
||||
"uploadPdfFiles": "Chọn tệp PDF",
|
||||
"dragAndDrop": "Kéo và thả tệp PDF vào đây, hoặc nhấp để chọn",
|
||||
"selectFiles": "Chọn tệp",
|
||||
"renderingPages": "Đang kết xuất trang...",
|
||||
"actions": {
|
||||
"duplicatePage": "Nhân bản trang này",
|
||||
"deletePage": "Xóa trang này",
|
||||
"insertPdf": "Chèn PDF sau trang này",
|
||||
"toggleSplit": "Bật/tắt chia sau trang này"
|
||||
},
|
||||
"pleaseWait": "Vui lòng đợi",
|
||||
"pagesRendering": "Các trang vẫn đang được kết xuất. Vui lòng đợi...",
|
||||
"noPagesSelected": "Chưa chọn trang nào",
|
||||
"selectOnePage": "Vui lòng chọn ít nhất một trang để tải xuống.",
|
||||
"noPages": "Không có trang",
|
||||
"noPagesToExport": "Không có trang nào để xuất.",
|
||||
"renderingTitle": "Đang kết xuất xem trước trang",
|
||||
"errorRendering": "Không thể kết xuất hình thu nhỏ trang",
|
||||
"error": "Lỗi",
|
||||
"failedToLoad": "Không thể tải"
|
||||
"lightningFast": {
|
||||
"title": "Cực kỳ nhanh",
|
||||
"description": "Xử lý PDF ngay lập tức, không cần chờ đợi hay trì hoãn."
|
||||
}
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "Bắt đầu với",
|
||||
"toolsLabel": "Công cụ",
|
||||
"subtitle": "Nhấp vào một công cụ để mở trình tải tệp lên",
|
||||
"searchPlaceholder": "Tìm kiếm công cụ (ví dụ: 'chia', 'sắp xếp'...)",
|
||||
"backToTools": "Quay lại Công cụ",
|
||||
"firstLoadNotice": "Lần tải đầu tiên sẽ mất một chút thời gian vì chúng tôi đang tải xuống công cụ chuyển đổi. Sau đó, mọi lần tải sẽ ngay lập tức."
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "Nhấp để chọn tệp",
|
||||
"orDragAndDrop": "hoặc kéo và thả",
|
||||
"pdfOrImages": "PDF hoặc Hình ảnh",
|
||||
"filesNeverLeave": "Tệp của bạn không bao giờ rời khỏi thiết bị.",
|
||||
"addMore": "Thêm tệp",
|
||||
"clearAll": "Xóa tất cả"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "Đang xử lý..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "Thông báo",
|
||||
"ok": "OK"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Xem trước tài liệu",
|
||||
"downloadAsPdf": "Tải xuống dưới dạng PDF",
|
||||
"close": "Đóng"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Cài đặt",
|
||||
"shortcuts": "Phím tắt",
|
||||
"preferences": "Tùy chọn",
|
||||
"displayPreferences": "Tùy chọn hiển thị",
|
||||
"searchShortcuts": "Tìm kiếm phím tắt...",
|
||||
"shortcutsInfo": "Nhấn và giữ phím để đặt phím tắt. Thay đổi được lưu tự động.",
|
||||
"shortcutsWarning": "⚠️ Tránh các phím tắt trình duyệt phổ biến (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N, v.v.) vì chúng có thể không hoạt động đáng tin cậy.",
|
||||
"import": "Nhập",
|
||||
"export": "Xuất",
|
||||
"resetToDefaults": "Đặt lại về mặc định",
|
||||
"fullWidthMode": "Chế độ toàn chiều rộng",
|
||||
"fullWidthDescription": "Sử dụng toàn bộ chiều rộng màn hình cho tất cả công cụ thay vì container căn giữa",
|
||||
"settingsAutoSaved": "Cài đặt được lưu tự động",
|
||||
"clickToSet": "Nhấp để đặt",
|
||||
"pressKeys": "Nhấn phím...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "Phím tắt đã được sử dụng",
|
||||
"assignedTo": "đã được gán cho:",
|
||||
"chooseDifferent": "Vui lòng chọn một phím tắt khác.",
|
||||
"reserved": "Cảnh báo phím tắt dành riêng",
|
||||
"commonlyUsed": "thường được sử dụng cho:",
|
||||
"unreliable": "Phím tắt này có thể không hoạt động đáng tin cậy hoặc có thể xung đột với hành vi trình duyệt/hệ thống.",
|
||||
"useAnyway": "Bạn có muốn sử dụng nó không?",
|
||||
"resetTitle": "Đặt lại phím tắt",
|
||||
"resetMessage": "Bạn có chắc chắn muốn đặt lại tất cả phím tắt về mặc định?<br><br>Hành động này không thể hoàn tác.",
|
||||
"importSuccessTitle": "Nhập thành công",
|
||||
"importSuccessMessage": "Đã nhập phím tắt thành công!",
|
||||
"importFailTitle": "Nhập thất bại",
|
||||
"importFailMessage": "Không thể nhập phím tắt. Định dạng tệp không hợp lệ."
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "Cảnh báo",
|
||||
"cancel": "Hủy",
|
||||
"proceed": "Tiếp tục"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "Dữ liệu của bạn không bao giờ rời khỏi thiết bị",
|
||||
"weKeep": "Chúng tôi giữ",
|
||||
"yourInfoSafe": "thông tin của bạn an toàn",
|
||||
"byFollowingStandards": "bằng cách tuân theo các tiêu chuẩn bảo mật toàn cầu.",
|
||||
"processingLocal": "Tất cả quá trình xử lý diễn ra cục bộ trên thiết bị của bạn.",
|
||||
"gdpr": {
|
||||
"title": "Tuân thủ GDPR",
|
||||
"description": "Bảo vệ dữ liệu cá nhân và quyền riêng tư của các cá nhân trong Liên minh Châu Âu."
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "Tuân thủ CCPA",
|
||||
"description": "Trao quyền cho cư dân California về cách thông tin cá nhân của họ được thu thập, sử dụng và chia sẻ."
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "Tuân thủ HIPAA",
|
||||
"description": "Đặt ra các biện pháp bảo vệ để xử lý thông tin sức khỏe nhạy cảm trong hệ thống chăm sóc sức khỏe Hoa Kỳ."
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "Câu hỏi",
|
||||
"questions": "Thường gặp",
|
||||
"isFree": {
|
||||
"question": "BentoPDF có thực sự miễn phí không?",
|
||||
"answer": "Có, hoàn toàn miễn phí. Tất cả các công cụ trên BentoPDF đều 100% miễn phí sử dụng, không giới hạn tệp, không cần đăng ký và không có watermark. Chúng tôi tin rằng mọi người đều xứng đáng được tiếp cận với các công cụ PDF đơn giản, mạnh mẽ mà không có tường phí."
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "Tệp của tôi có an toàn không? Chúng được xử lý ở đâu?",
|
||||
"answer": "Tệp của bạn an toàn nhất có thể vì chúng không bao giờ rời khỏi máy tính của bạn. Tất cả quá trình xử lý diễn ra trực tiếp trong trình duyệt web của bạn (phía máy khách). Chúng tôi không bao giờ tải tệp của bạn lên máy chủ, vì vậy bạn duy trì quyền riêng tư và kiểm soát hoàn toàn đối với tài liệu của mình."
|
||||
},
|
||||
"platforms": {
|
||||
"question": "Nó có hoạt động trên Mac, Windows và Mobile không?",
|
||||
"answer": "Có! Vì BentoPDF chạy hoàn toàn trong trình duyệt của bạn, nó hoạt động trên bất kỳ hệ điều hành nào có trình duyệt web hiện đại, bao gồm Windows, macOS, Linux, iOS và Android."
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF có tuân thủ GDPR không?",
|
||||
"answer": "Có. BentoPDF hoàn toàn tuân thủ GDPR. Vì tất cả quá trình xử lý tệp diễn ra cục bộ trong trình duyệt của bạn và chúng tôi không bao giờ thu thập hoặc truyền tệp của bạn đến bất kỳ máy chủ nào, chúng tôi không có quyền truy cập vào dữ liệu của bạn. Điều này đảm bảo bạn luôn kiểm soát tài liệu của mình."
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "Bạn có lưu trữ hoặc theo dõi bất kỳ tệp nào của tôi không?",
|
||||
"answer": "Không. Chúng tôi không bao giờ lưu trữ, theo dõi hoặc ghi nhật ký tệp của bạn. Mọi thứ bạn làm trên BentoPDF diễn ra trong bộ nhớ trình duyệt của bạn và biến mất khi bạn đóng trang. Không có tải lên, không có nhật ký lịch sử và không có máy chủ liên quan."
|
||||
},
|
||||
"different": {
|
||||
"question": "Điều gì làm cho BentoPDF khác biệt so với các công cụ PDF khác?",
|
||||
"answer": "Hầu hết các công cụ PDF tải tệp của bạn lên máy chủ để xử lý. BentoPDF không bao giờ làm điều đó. Chúng tôi sử dụng công nghệ web hiện đại, an toàn để xử lý tệp của bạn trực tiếp trong trình duyệt. Điều này có nghĩa là hiệu suất nhanh hơn, quyền riêng tư mạnh mẽ hơn và hoàn toàn yên tâm."
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "Xử lý dựa trên trình duyệt giữ tôi an toàn như thế nào?",
|
||||
"answer": "Bằng cách chạy hoàn toàn bên trong trình duyệt của bạn, BentoPDF đảm bảo rằng tệp của bạn không bao giờ rời khỏi thiết bị. Điều này loại bỏ các rủi ro về hack máy chủ, vi phạm dữ liệu hoặc truy cập trái phép. Tệp của bạn vẫn thuộc về bạn—luôn luôn."
|
||||
},
|
||||
"analytics": {
|
||||
"question": "Bạn có sử dụng cookie hoặc phân tích để theo dõi tôi không?",
|
||||
"answer": "Chúng tôi quan tâm đến quyền riêng tư của bạn. BentoPDF không theo dõi thông tin cá nhân. Chúng tôi chỉ sử dụng Simple Analytics để xem số lượt truy cập ẩn danh. Điều này có nghĩa là chúng tôi có thể biết có bao nhiêu người dùng truy cập trang web của chúng tôi, nhưng chúng tôi không bao giờ biết bạn là ai. Simple Analytics hoàn toàn tuân thủ GDPR và tôn trọng quyền riêng tư của bạn."
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "Người dùng",
|
||||
"users": "của chúng tôi",
|
||||
"say": "nói gì"
|
||||
},
|
||||
"support": {
|
||||
"title": "Thích công việc của tôi?",
|
||||
"description": "BentoPDF là một dự án đam mê, được xây dựng để cung cấp bộ công cụ PDF miễn phí, riêng tư và mạnh mẽ cho mọi người. Nếu bạn thấy nó hữu ích, hãy cân nhắc hỗ trợ phát triển của nó. Mỗi ly cà phê đều giúp ích!",
|
||||
"buyMeCoffee": "Mua cho tôi một ly cà phê"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. Bảo lưu mọi quyền.",
|
||||
"version": "Phiên bản",
|
||||
"company": "Công ty",
|
||||
"aboutUs": "Về chúng tôi",
|
||||
"faqLink": "FAQ",
|
||||
"contactUs": "Liên hệ",
|
||||
"legal": "Pháp lý",
|
||||
"termsAndConditions": "Điều khoản và Điều kiện",
|
||||
"privacyPolicy": "Chính sách Bảo mật",
|
||||
"followUs": "Theo dõi chúng tôi"
|
||||
},
|
||||
"merge": {
|
||||
"title": "Gộp PDF",
|
||||
"description": "Kết hợp toàn bộ tệp hoặc chọn các trang cụ thể để gộp thành tài liệu mới.",
|
||||
"fileMode": "Chế độ tệp",
|
||||
"pageMode": "Chế độ trang",
|
||||
"howItWorks": "Cách hoạt động:",
|
||||
"fileModeInstructions": [
|
||||
"Nhấp và kéo biểu tượng để thay đổi thứ tự các tệp.",
|
||||
"Trong hộp \"Trang\" cho mỗi tệp, bạn có thể chỉ định phạm vi (ví dụ: \"1-3, 5\") để chỉ gộp những trang đó.",
|
||||
"Để trống hộp \"Trang\" để bao gồm tất cả các trang từ tệp đó."
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"Tất cả các trang từ PDF đã tải lên của bạn được hiển thị bên dưới.",
|
||||
"Chỉ cần kéo và thả các hình thu nhỏ trang riêng lẻ để tạo thứ tự chính xác bạn muốn cho tệp mới của mình."
|
||||
],
|
||||
"mergePdfs": "Gộp PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "Trang",
|
||||
"pages": "Trang",
|
||||
"of": "của",
|
||||
"download": "Tải xuống",
|
||||
"cancel": "Hủy",
|
||||
"save": "Lưu",
|
||||
"delete": "Xóa",
|
||||
"edit": "Chỉnh sửa",
|
||||
"add": "Thêm",
|
||||
"remove": "Xóa",
|
||||
"loading": "Đang tải...",
|
||||
"error": "Lỗi",
|
||||
"success": "Thành công",
|
||||
"file": "Tệp",
|
||||
"files": "Tệp"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "Chúng tôi tin rằng công cụ PDF nên",
|
||||
"subtitle": "nhanh, riêng tư và miễn phí.",
|
||||
"noCompromises": "Không thỏa hiệp."
|
||||
},
|
||||
"mission": {
|
||||
"title": "Sứ mệnh của chúng tôi",
|
||||
"description": "Cung cấp bộ công cụ PDF toàn diện nhất tôn trọng quyền riêng tư của bạn và không bao giờ yêu cầu thanh toán. Chúng tôi tin rằng các công cụ tài liệu thiết yếu nên có thể truy cập được cho mọi người, ở mọi nơi, không có rào cản."
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "Triết lý cốt lõi của chúng tôi",
|
||||
"title": "Quyền riêng tư trước tiên. Luôn luôn.",
|
||||
"description": "Trong thời đại mà dữ liệu là hàng hóa, chúng tôi có cách tiếp cận khác. Tất cả quá trình xử lý cho các công cụ Bentopdf diễn ra cục bộ trong trình duyệt của bạn. Điều này có nghĩa là tệp của bạn không bao giờ chạm vào máy chủ của chúng tôi, chúng tôi không bao giờ thấy tài liệu của bạn và chúng tôi không theo dõi những gì bạn làm. Tài liệu của bạn vẫn hoàn toàn và rõ ràng là riêng tư. Đó không chỉ là một tính năng; đó là nền tảng của chúng tôi."
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "Tại sao chọn",
|
||||
"speed": {
|
||||
"title": "Được xây dựng cho tốc độ",
|
||||
"description": "Không cần chờ tải lên hoặc tải xuống lên máy chủ. Bằng cách xử lý tệp trực tiếp trong trình duyệt của bạn bằng công nghệ web hiện đại như WebAssembly, chúng tôi cung cấp tốc độ vô song cho tất cả các công cụ của chúng tôi."
|
||||
},
|
||||
"free": {
|
||||
"title": "Hoàn toàn miễn phí",
|
||||
"description": "Không dùng thử, không đăng ký, không phí ẩn và không có tính năng \"premium\" bị giữ lại. Chúng tôi tin rằng các công cụ PDF mạnh mẽ nên là tiện ích công cộng, không phải trung tâm lợi nhuận."
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "Không cần tài khoản",
|
||||
"description": "Bắt đầu sử dụng bất kỳ công cụ nào ngay lập tức. Chúng tôi không cần email, mật khẩu hoặc bất kỳ thông tin cá nhân nào của bạn. Quy trình làm việc của bạn nên không ma sát và ẩn danh."
|
||||
},
|
||||
"openSource": {
|
||||
"title": "Tinh thần mã nguồn mở",
|
||||
"description": "Được xây dựng với tinh thần minh bạch. Chúng tôi tận dụng các thư viện mã nguồn mở tuyệt vời như PDF-lib và PDF.js, và tin vào nỗ lực do cộng đồng thúc đẩy để làm cho các công cụ mạnh mẽ có thể truy cập được cho mọi người."
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "Sẵn sàng bắt đầu?",
|
||||
"description": "Tham gia cùng hàng nghìn người dùng tin tưởng Bentopdf cho nhu cầu tài liệu hàng ngày của họ. Trải nghiệm sự khác biệt mà quyền riêng tư và hiệu suất có thể tạo ra.",
|
||||
"button": "Khám phá tất cả công cụ"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Liên hệ",
|
||||
"subtitle": "Chúng tôi rất muốn nghe từ bạn. Cho dù bạn có câu hỏi, phản hồi hay yêu cầu tính năng, vui lòng đừng ngần ngại liên hệ.",
|
||||
"email": "Bạn có thể liên hệ trực tiếp với chúng tôi qua email tại:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "Giấy phép cho",
|
||||
"subtitle": "Chọn giấy phép phù hợp với nhu cầu của bạn."
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "Tải lên PDF",
|
||||
"upload": "Tải lên",
|
||||
"addBlankPage": "Thêm trang trống",
|
||||
"edit": "Chỉnh sửa:",
|
||||
"undo": "Hoàn tác",
|
||||
"redo": "Làm lại",
|
||||
"reset": "Đặt lại",
|
||||
"selection": "Chọn:",
|
||||
"selectAll": "Chọn tất cả",
|
||||
"deselectAll": "Bỏ chọn tất cả",
|
||||
"rotate": "Xoay:",
|
||||
"rotateLeft": "Trái",
|
||||
"rotateRight": "Phải",
|
||||
"transform": "Biến đổi:",
|
||||
"duplicate": "Nhân bản",
|
||||
"split": "Chia",
|
||||
"clear": "Xóa:",
|
||||
"delete": "Xóa",
|
||||
"download": "Tải xuống:",
|
||||
"downloadSelected": "Tải xuống đã chọn",
|
||||
"exportPdf": "Xuất PDF",
|
||||
"uploadPdfFiles": "Chọn tệp PDF",
|
||||
"dragAndDrop": "Kéo và thả tệp PDF vào đây, hoặc nhấp để chọn",
|
||||
"selectFiles": "Chọn tệp",
|
||||
"renderingPages": "Đang kết xuất trang...",
|
||||
"actions": {
|
||||
"duplicatePage": "Nhân bản trang này",
|
||||
"deletePage": "Xóa trang này",
|
||||
"insertPdf": "Chèn PDF sau trang này",
|
||||
"toggleSplit": "Bật/tắt chia sau trang này"
|
||||
},
|
||||
"pleaseWait": "Vui lòng đợi",
|
||||
"pagesRendering": "Các trang vẫn đang được kết xuất. Vui lòng đợi...",
|
||||
"noPagesSelected": "Chưa chọn trang nào",
|
||||
"selectOnePage": "Vui lòng chọn ít nhất một trang để tải xuống.",
|
||||
"noPages": "Không có trang",
|
||||
"noPagesToExport": "Không có trang nào để xuất.",
|
||||
"renderingTitle": "Đang kết xuất xem trước trang",
|
||||
"errorRendering": "Không thể kết xuất hình thu nhỏ trang",
|
||||
"error": "Lỗi",
|
||||
"failedToLoad": "Không thể tải"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,282 +1,533 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "Công cụ phổ biến",
|
||||
"editAnnotate": "Chỉnh sửa & Ghi chú",
|
||||
"convertToPdf": "Chuyển đổi sang PDF",
|
||||
"convertFromPdf": "Chuyển đổi từ PDF",
|
||||
"organizeManage": "Sắp xếp & Quản lý",
|
||||
"optimizeRepair": "Tối ưu hóa & Sửa chữa",
|
||||
"securePdf": "Bảo mật PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Công cụ đa năng PDF",
|
||||
"subtitle": "Gộp, Chia, Sắp xếp, Xóa, Xoay, Thêm trang trống, Trích xuất và Nhân đôi trong một giao diện thống nhất."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Gộp PDF",
|
||||
"subtitle": "Kết hợp nhiều PDF thành một tệp. Giữ nguyên Bookmark."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Chia PDF",
|
||||
"subtitle": "Trích xuất một phạm vi trang thành PDF mới."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Nén PDF",
|
||||
"subtitle": "Giảm kích thước tệp PDF của bạn."
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Trình chỉnh sửa PDF",
|
||||
"subtitle": "Ghi chú, tô sáng, chỉnh sửa, bình luận, thêm hình dạng/hình ảnh, tìm kiếm và xem PDF."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh JPG."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Ký PDF",
|
||||
"subtitle": "Vẽ, gõ hoặc tải lên chữ ký của bạn."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Cắt PDF",
|
||||
"subtitle": "Cắt lề của mọi trang trong PDF của bạn."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Trích xuất trang",
|
||||
"subtitle": "Lưu một lựa chọn trang dưới dạng tệp mới."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Nhân đôi & Sắp xếp",
|
||||
"subtitle": "Nhân đôi, sắp xếp lại và xóa trang."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Xóa trang",
|
||||
"subtitle": "Xóa các trang cụ thể khỏi tài liệu của bạn."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Chỉnh sửa Bookmark",
|
||||
"subtitle": "Thêm, chỉnh sửa, nhập, xóa và trích xuất bookmark PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Mục lục",
|
||||
"subtitle": "Tạo trang mục lục từ bookmark PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Số trang",
|
||||
"subtitle": "Chèn số trang vào tài liệu của bạn."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Thêm Watermark",
|
||||
"subtitle": "Đóng dấu văn bản hoặc hình ảnh lên các trang PDF của bạn."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Đầu trang & Chân trang",
|
||||
"subtitle": "Thêm văn bản vào đầu và cuối trang."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Đảo ngược màu",
|
||||
"subtitle": "Tạo phiên bản \"chế độ tối\" cho PDF của bạn."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Màu nền",
|
||||
"subtitle": "Thay đổi màu nền của PDF của bạn."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Thay đổi màu văn bản",
|
||||
"subtitle": "Thay đổi màu văn bản trong PDF của bạn."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Thêm tem",
|
||||
"subtitle": "Thêm tem hình ảnh vào PDF của bạn bằng thanh công cụ ghi chú.",
|
||||
"usernameLabel": "Tên người dùng tem",
|
||||
"usernamePlaceholder": "Nhập tên của bạn (cho tem)",
|
||||
"usernameHint": "Tên này sẽ xuất hiện trên các tem bạn tạo."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Xóa ghi chú",
|
||||
"subtitle": "Loại bỏ bình luận, tô sáng và liên kết."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Điền form PDF",
|
||||
"subtitle": "Điền form trực tiếp trong trình duyệt. Cũng hỗ trợ form XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Tạo form PDF",
|
||||
"subtitle": "Tạo form PDF có thể điền với các trường văn bản kéo và thả."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Xóa trang trống",
|
||||
"subtitle": "Tự động phát hiện và xóa trang trống."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Hình ảnh sang PDF",
|
||||
"subtitle": "Chuyển đổi JPG, PNG, WebP, BMP, TIFF, SVG, HEIC sang PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Văn bản sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp văn bản thuần túy thành PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp JSON sang định dạng PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF sang JPG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF sang PNG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF sang WebP",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF sang BMP",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF sang TIFF",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF sang thang xám",
|
||||
"subtitle": "Chuyển đổi tất cả màu sắc sang đen trắng."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF sang JSON",
|
||||
"subtitle": "Chuyển đổi tệp PDF sang định dạng JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Làm cho PDF có thể tìm kiếm và sao chép được."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Xen kẽ & Trộn trang",
|
||||
"subtitle": "Gộp PDF bằng cách xen kẽ trang từ mỗi PDF. Giữ nguyên Bookmark."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Thêm tệp đính kèm",
|
||||
"subtitle": "Nhúng một hoặc nhiều tệp vào PDF của bạn."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Trích xuất tệp đính kèm",
|
||||
"subtitle": "Trích xuất tất cả tệp được nhúng từ PDF thành ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Chỉnh sửa tệp đính kèm",
|
||||
"subtitle": "Xem hoặc xóa tệp đính kèm trong PDF của bạn."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Chia trang",
|
||||
"subtitle": "Chia trang theo chiều ngang hoặc chiều dọc."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Thêm trang trống",
|
||||
"subtitle": "Chèn trang trống ở bất kỳ đâu trong PDF của bạn."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Đảo ngược trang",
|
||||
"subtitle": "Lật ngược thứ tự tất cả các trang trong tài liệu của bạn."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Xoay PDF",
|
||||
"subtitle": "Xoay trang theo bội số 90 độ."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Sắp xếp nhiều trang lên một tờ."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Kết hợp thành một trang",
|
||||
"subtitle": "Ghép tất cả các trang thành một cuộn liên tục."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Xem Metadata",
|
||||
"subtitle": "Kiểm tra các thuộc tính ẩn của PDF của bạn."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Chỉnh sửa Metadata",
|
||||
"subtitle": "Thay đổi tác giả, tiêu đề và các thuộc tính khác."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF sang ZIP",
|
||||
"subtitle": "Đóng gói nhiều tệp PDF thành kho lưu trữ ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "So sánh PDF",
|
||||
"subtitle": "So sánh hai PDF cạnh nhau."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterize PDF",
|
||||
"subtitle": "Chia một trang lớn thành nhiều trang nhỏ hơn."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Sửa kích thước trang",
|
||||
"subtitle": "Chuẩn hóa tất cả các trang về cùng một kích thước."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Tuyến tính hóa PDF",
|
||||
"subtitle": "Tối ưu hóa PDF để xem web nhanh."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Kích thước trang",
|
||||
"subtitle": "Phân tích kích thước trang, hướng và đơn vị."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Xóa hạn chế",
|
||||
"subtitle": "Xóa bảo vệ mật khẩu và hạn chế bảo mật liên quan đến tệp PDF được ký số."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Sửa chữa PDF",
|
||||
"subtitle": "Khôi phục dữ liệu từ tệp PDF bị hỏng hoặc hư hỏng."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Mã hóa PDF",
|
||||
"subtitle": "Khóa PDF của bạn bằng cách thêm mật khẩu."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Làm sạch PDF",
|
||||
"subtitle": "Xóa metadata, ghi chú, script và nhiều hơn nữa."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Giải mã PDF",
|
||||
"subtitle": "Mở khóa PDF bằng cách xóa bảo vệ mật khẩu."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Làm phẳng PDF",
|
||||
"subtitle": "Làm cho trường form và ghi chú không thể chỉnh sửa."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Xóa Metadata",
|
||||
"subtitle": "Loại bỏ dữ liệu ẩn khỏi PDF của bạn."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Thay đổi quyền",
|
||||
"subtitle": "Đặt hoặc thay đổi quyền người dùng trên PDF."
|
||||
}
|
||||
}
|
||||
"categories": {
|
||||
"popularTools": "Công cụ phổ biến",
|
||||
"editAnnotate": "Chỉnh sửa & Ghi chú",
|
||||
"convertToPdf": "Chuyển đổi sang PDF",
|
||||
"convertFromPdf": "Chuyển đổi từ PDF",
|
||||
"organizeManage": "Sắp xếp & Quản lý",
|
||||
"optimizeRepair": "Tối ưu hóa & Sửa chữa",
|
||||
"securePdf": "Bảo mật PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "Công cụ đa năng PDF",
|
||||
"subtitle": "Gộp, Chia, Sắp xếp, Xóa, Xoay, Thêm trang trống, Trích xuất và Nhân đôi trong một giao diện thống nhất."
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "Gộp PDF",
|
||||
"subtitle": "Kết hợp nhiều PDF thành một tệp. Giữ nguyên Bookmark."
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "Chia PDF",
|
||||
"subtitle": "Trích xuất một phạm vi trang thành PDF mới."
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "Nén PDF",
|
||||
"subtitle": "Giảm kích thước tệp PDF của bạn.",
|
||||
"algorithmLabel": "Thuật toán nén",
|
||||
"condense": "Condense (Khuyến nghị)",
|
||||
"photon": "Photon (Dành cho PDF nhiều ảnh)",
|
||||
"condenseInfo": "Condense sử dụng nén nâng cao: loại bỏ dữ liệu thừa, tối ưu hóa hình ảnh, gọn phông chữ. Phù hợp với hầu hết PDF.",
|
||||
"photonInfo": "Photon chuyển đổi trang thành hình ảnh. Dùng cho PDF nhiều ảnh/quét.",
|
||||
"photonWarning": "Cảnh báo: Văn bản sẽ không thể chọn được và liên kết sẽ không hoạt động.",
|
||||
"levelLabel": "Mức độ nén",
|
||||
"light": "Nhẹ (Giữ chất lượng)",
|
||||
"balanced": "Cân bằng (Khuyến nghị)",
|
||||
"aggressive": "Mạnh (Tệp nhỏ hơn)",
|
||||
"extreme": "Cực đoan (Nén tối đa)",
|
||||
"grayscale": "Chuyển sang thang xám",
|
||||
"grayscaleHint": "Giảm kích thước tệp bằng cách loại bỏ thông tin màu",
|
||||
"customSettings": "Cài đặt tùy chỉnh",
|
||||
"customSettingsHint": "Tinh chỉnh các thông số nén:",
|
||||
"outputQuality": "Chất lượng đầu ra",
|
||||
"resizeImagesTo": "Thay đổi kích thước ảnh thành",
|
||||
"onlyProcessAbove": "Chỉ xử lý khi trên",
|
||||
"removeMetadata": "Xóa siêu dữ liệu",
|
||||
"subsetFonts": "Gọn phông chữ (xóa ký tự không dùng)",
|
||||
"removeThumbnails": "Xóa hình thu nhỏ nhúng",
|
||||
"compressButton": "Nén PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "Trình chỉnh sửa PDF",
|
||||
"subtitle": "Ghi chú, tô sáng, chỉnh sửa, bình luận, thêm hình dạng/hình ảnh, tìm kiếm và xem PDF."
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG sang PDF",
|
||||
"subtitle": "Tạo PDF từ hình ảnh JPG, JPEG và JPEG2000 (JP2/JPX)."
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "Ký PDF",
|
||||
"subtitle": "Vẽ, gõ hoặc tải lên chữ ký của bạn."
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "Cắt PDF",
|
||||
"subtitle": "Cắt lề của mọi trang trong PDF của bạn."
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "Trích xuất trang",
|
||||
"subtitle": "Lưu một lựa chọn trang dưới dạng tệp mới."
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "Nhân đôi & Sắp xếp",
|
||||
"subtitle": "Nhân đôi, sắp xếp lại và xóa trang."
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "Xóa trang",
|
||||
"subtitle": "Xóa các trang cụ thể khỏi tài liệu của bạn."
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "Chỉnh sửa Bookmark",
|
||||
"subtitle": "Thêm, chỉnh sửa, nhập, xóa và trích xuất bookmark PDF."
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "Mục lục",
|
||||
"subtitle": "Tạo trang mục lục từ bookmark PDF."
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "Số trang",
|
||||
"subtitle": "Chèn số trang vào tài liệu của bạn."
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "Thêm Watermark",
|
||||
"subtitle": "Đóng dấu văn bản hoặc hình ảnh lên các trang PDF của bạn."
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "Đầu trang & Chân trang",
|
||||
"subtitle": "Thêm văn bản vào đầu và cuối trang."
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "Đảo ngược màu",
|
||||
"subtitle": "Tạo phiên bản \"chế độ tối\" cho PDF của bạn."
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "Màu nền",
|
||||
"subtitle": "Thay đổi màu nền của PDF của bạn."
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "Thay đổi màu văn bản",
|
||||
"subtitle": "Thay đổi màu văn bản trong PDF của bạn."
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "Thêm tem",
|
||||
"subtitle": "Thêm tem hình ảnh vào PDF của bạn bằng thanh công cụ ghi chú.",
|
||||
"usernameLabel": "Tên người dùng tem",
|
||||
"usernamePlaceholder": "Nhập tên của bạn (cho tem)",
|
||||
"usernameHint": "Tên này sẽ xuất hiện trên các tem bạn tạo."
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "Xóa ghi chú",
|
||||
"subtitle": "Loại bỏ bình luận, tô sáng và liên kết."
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "Điền form PDF",
|
||||
"subtitle": "Điền form trực tiếp trong trình duyệt. Cũng hỗ trợ form XFA."
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "Tạo form PDF",
|
||||
"subtitle": "Tạo form PDF có thể điền với các trường văn bản kéo và thả."
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "Xóa trang trống",
|
||||
"subtitle": "Tự động phát hiện và xóa trang trống."
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "Hình ảnh sang PDF",
|
||||
"subtitle": "Chuyển đổi JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP sang PDF."
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh PNG."
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh WebP."
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh SVG."
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh BMP."
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh HEIC."
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF sang PDF",
|
||||
"subtitle": "Tạo PDF từ một hoặc nhiều hình ảnh TIFF."
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Văn bản sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp văn bản thuần túy thành PDF."
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp JSON sang định dạng PDF."
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF sang JPG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh JPG."
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF sang PNG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh PNG."
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF sang WebP",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh WebP."
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF sang BMP",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh BMP."
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF sang TIFF",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành hình ảnh TIFF."
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF sang thang xám",
|
||||
"subtitle": "Chuyển đổi tất cả màu sắc sang đen trắng."
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF sang JSON",
|
||||
"subtitle": "Chuyển đổi tệp PDF sang định dạng JSON."
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "Làm cho PDF có thể tìm kiếm và sao chép được."
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "Xen kẽ & Trộn trang",
|
||||
"subtitle": "Gộp PDF bằng cách xen kẽ trang từ mỗi PDF. Giữ nguyên Bookmark."
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "Thêm tệp đính kèm",
|
||||
"subtitle": "Nhúng một hoặc nhiều tệp vào PDF của bạn."
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "Trích xuất tệp đính kèm",
|
||||
"subtitle": "Trích xuất tất cả tệp được nhúng từ PDF thành ZIP."
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "Chỉnh sửa tệp đính kèm",
|
||||
"subtitle": "Xem hoặc xóa tệp đính kèm trong PDF của bạn."
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "Chia trang",
|
||||
"subtitle": "Chia trang theo chiều ngang hoặc chiều dọc."
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "Thêm trang trống",
|
||||
"subtitle": "Chèn trang trống ở bất kỳ đâu trong PDF của bạn."
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "Đảo ngược trang",
|
||||
"subtitle": "Lật ngược thứ tự tất cả các trang trong tài liệu của bạn."
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "Xoay PDF",
|
||||
"subtitle": "Xoay trang theo bội số 90 độ."
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Xoay theo độ tùy chỉnh",
|
||||
"subtitle": "Xoay trang theo bất kỳ góc độ tùy chỉnh nào."
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "Sắp xếp nhiều trang lên một tờ."
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "Kết hợp thành một trang",
|
||||
"subtitle": "Ghép tất cả các trang thành một cuộn liên tục."
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "Xem Metadata",
|
||||
"subtitle": "Kiểm tra các thuộc tính ẩn của PDF của bạn."
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "Chỉnh sửa Metadata",
|
||||
"subtitle": "Thay đổi tác giả, tiêu đề và các thuộc tính khác."
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF sang ZIP",
|
||||
"subtitle": "Đóng gói nhiều tệp PDF thành kho lưu trữ ZIP."
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "So sánh PDF",
|
||||
"subtitle": "So sánh hai PDF cạnh nhau."
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "Posterize PDF",
|
||||
"subtitle": "Chia một trang lớn thành nhiều trang nhỏ hơn."
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "Sửa kích thước trang",
|
||||
"subtitle": "Chuẩn hóa tất cả các trang về cùng một kích thước."
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "Tuyến tính hóa PDF",
|
||||
"subtitle": "Tối ưu hóa PDF để xem web nhanh."
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "Kích thước trang",
|
||||
"subtitle": "Phân tích kích thước trang, hướng và đơn vị."
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "Xóa hạn chế",
|
||||
"subtitle": "Xóa bảo vệ mật khẩu và hạn chế bảo mật liên quan đến tệp PDF được ký số."
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "Sửa chữa PDF",
|
||||
"subtitle": "Khôi phục dữ liệu từ tệp PDF bị hỏng hoặc hư hỏng."
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "Mã hóa PDF",
|
||||
"subtitle": "Khóa PDF của bạn bằng cách thêm mật khẩu."
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "Làm sạch PDF",
|
||||
"subtitle": "Xóa metadata, ghi chú, script và nhiều hơn nữa."
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "Giải mã PDF",
|
||||
"subtitle": "Mở khóa PDF bằng cách xóa bảo vệ mật khẩu."
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "Làm phẳng PDF",
|
||||
"subtitle": "Làm cho trường form và ghi chú không thể chỉnh sửa."
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "Xóa Metadata",
|
||||
"subtitle": "Loại bỏ dữ liệu ẩn khỏi PDF của bạn."
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "Thay đổi quyền",
|
||||
"subtitle": "Đặt hoặc thay đổi quyền người dùng trên PDF."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp OpenDocument Text sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp ODT",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp bảng tính CSV sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp CSV",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu Rich Text Format sang PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp RTF",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu Word (DOCX, DOC, ODT, RTF) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp DOCX, DOC, ODT, RTF",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel sang PDF",
|
||||
"subtitle": "Chuyển đổi bảng tính Excel (XLSX, XLS, ODS, CSV) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp XLSX, XLS, ODS, CSV",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint sang PDF",
|
||||
"subtitle": "Chuyển đổi bài thuyết trình PowerPoint (PPTX, PPT, ODP) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp PPTX, PPT, ODP",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown sang PDF",
|
||||
"subtitle": "Viết hoặc dán Markdown và xuất nó thành PDF được định dạng đẹp.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Xem trước",
|
||||
"btnUpload": "Tải lên",
|
||||
"btnSyncScroll": "Cuộn đồng bộ",
|
||||
"btnSettings": "Cài đặt",
|
||||
"btnExportPdf": "Xuất PDF",
|
||||
"settingsTitle": "Cài đặt Markdown",
|
||||
"settingsPreset": "Cài đặt sẵn",
|
||||
"presetDefault": "Mặc định (kiểu GFM)",
|
||||
"presetCommonmark": "CommonMark (nghiêm ngặt)",
|
||||
"presetZero": "Tối thiểu (không có tính năng)",
|
||||
"settingsOptions": "Tùy chọn Markdown",
|
||||
"optAllowHtml": "Cho phép thẻ HTML",
|
||||
"optBreaks": "Chuyển đổi xuống dòng thành <br>",
|
||||
"optLinkify": "Tự động chuyển URL thành liên kết",
|
||||
"optTypographer": "Trình sắp chữ (dấu ngoặc thông minh, v.v.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "Sách nhỏ PDF",
|
||||
"subtitle": "Sắp xếp lại các trang để in sách nhỏ hai mặt. Gấp và đóng ghim để tạo sách nhỏ.",
|
||||
"howItWorks": "Cách hoạt động:",
|
||||
"step1": "Tải lên tệp PDF.",
|
||||
"step2": "Các trang sẽ được sắp xếp lại theo thứ tự sách nhỏ.",
|
||||
"step3": "In hai mặt, lật cạnh ngắn, gấp và đóng ghim.",
|
||||
"paperSize": "Kích thước giấy",
|
||||
"orientation": "Hướng",
|
||||
"portrait": "Dọc",
|
||||
"landscape": "Ngang",
|
||||
"pagesPerSheet": "Số trang mỗi tờ",
|
||||
"createBooklet": "Tạo sách nhỏ",
|
||||
"processing": "Đang xử lý...",
|
||||
"pageCount": "Số trang sẽ được bổ sung lên bội số của 4 nếu cần."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu XPS/OXPS sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp XPS, OXPS",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI sang PDF",
|
||||
"subtitle": "Chuyển đổi sách điện tử MOBI sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp MOBI",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB sang PDF",
|
||||
"subtitle": "Chuyển đổi sách điện tử EPUB sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp EPUB",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 sang PDF",
|
||||
"subtitle": "Chuyển đổi sách điện tử FictionBook (FB2) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp FB2",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ sang PDF",
|
||||
"subtitle": "Chuyển đổi kho lưu trữ truyện tranh (CBZ/CBR) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp CBZ, CBR",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu WordPerfect (WPD) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp WPD",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu WPS Office sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp WPS",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu XML sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp XML",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages sang PDF",
|
||||
"subtitle": "Chuyển đổi tài liệu Apple Pages sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp Pages",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp OpenDocument Graphics (ODG) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp ODG",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp OpenDocument Spreadsheet (ODS) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp ODS",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp OpenDocument Presentation (ODP) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp ODP",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp Microsoft Publisher (PUB) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp PUB",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp Microsoft Visio (VSD, VSDX) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp VSD, VSDX",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp Adobe Photoshop (PSD) sang định dạng PDF. Hỗ trợ nhiều tệp.",
|
||||
"acceptedFormats": "Tệp PSD",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF sang SVG",
|
||||
"subtitle": "Chuyển đổi mỗi trang PDF thành đồ họa vector có thể mở rộng (SVG) với chất lượng hoàn hảo ở mọi kích thước."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Trích xuất bảng PDF",
|
||||
"subtitle": "Trích xuất bảng từ tệp PDF và xuất dưới dạng CSV, JSON hoặc Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF sang CSV",
|
||||
"subtitle": "Trích xuất bảng từ PDF và chuyển đổi sang định dạng CSV."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF sang Excel",
|
||||
"subtitle": "Trích xuất bảng từ PDF và chuyển đổi sang định dạng Excel (XLSX)."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF sang Văn bản",
|
||||
"subtitle": "Trích xuất văn bản từ tệp PDF và lưu dưới dạng tệp văn bản (.txt). Hỗ trợ nhiều tệp.",
|
||||
"note": "Công cụ này CHỈ hoạt động với các tệp PDF được tạo kỹ thuật số. Đối với tài liệu quét hoặc PDF dựa trên hình ảnh, hãy sử dụng công cụ OCR PDF của chúng tôi.",
|
||||
"convertButton": "Trích xuất văn bản"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Chữ ký số PDF",
|
||||
"pageTitle": "Chữ ký số PDF - Thêm chữ ký mật mã | BentoPDF",
|
||||
"subtitle": "Thêm chữ ký số mật mã vào PDF của bạn bằng chứng chỉ X.509. Hỗ trợ định dạng PKCS#12 (.pfx, .p12) và PEM. Khóa riêng của bạn không bao giờ rời khỏi trình duyệt.",
|
||||
"certificateSection": "Chứng chỉ",
|
||||
"uploadCert": "Tải lên chứng chỉ (.pfx, .p12)",
|
||||
"certPassword": "Mật khẩu chứng chỉ",
|
||||
"certPasswordPlaceholder": "Nhập mật khẩu chứng chỉ",
|
||||
"certInfo": "Thông tin chứng chỉ",
|
||||
"certSubject": "Chủ thể",
|
||||
"certIssuer": "Nhà phát hành",
|
||||
"certValidity": "Hiệu lực",
|
||||
"signatureDetails": "Chi tiết chữ ký (Tùy chọn)",
|
||||
"reason": "Lý do",
|
||||
"reasonPlaceholder": "ví dụ: Tôi phê duyệt tài liệu này",
|
||||
"location": "Địa điểm",
|
||||
"locationPlaceholder": "ví dụ: Hà Nội, Việt Nam",
|
||||
"contactInfo": "Thông tin liên hệ",
|
||||
"contactPlaceholder": "ví dụ: email@example.com",
|
||||
"applySignature": "Áp dụng chữ ký số",
|
||||
"successMessage": "Ký PDF thành công! Chữ ký có thể được xác minh trong bất kỳ trình đọc PDF nào."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Xác minh chữ ký PDF",
|
||||
"pageTitle": "Xác minh chữ ký PDF - Xác thực chữ ký số | BentoPDF",
|
||||
"subtitle": "Xác minh chữ ký số trong tệp PDF của bạn. Kiểm tra hiệu lực chứng chỉ, xem thông tin người ký và xác nhận tính toàn vẹn tài liệu. Tất cả xử lý diễn ra trong trình duyệt của bạn."
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email sang PDF",
|
||||
"subtitle": "Chuyển đổi tệp email (EML, MSG) sang định dạng PDF. Hỗ trợ xuất Outlook và định dạng email tiêu chuẩn.",
|
||||
"acceptedFormats": "Tệp EML, MSG",
|
||||
"convertButton": "Chuyển đổi sang PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "Phông chữ thành đường viền",
|
||||
"subtitle": "Chuyển đổi tất cả phông chữ thành đường viền vector để hiển thị nhất quán trên mọi thiết bị."
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "Chỉnh nghiêng PDF",
|
||||
"subtitle": "Tự động làm thẳng các trang quét bị nghiêng bằng OpenCV."
|
||||
}
|
||||
}
|
||||
|
||||
323
public/locales/zh-TW/common.json
Normal file
@@ -0,0 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "首頁",
|
||||
"about": "關於我們",
|
||||
"contact": "聯絡我們",
|
||||
"licensing": "產品授權",
|
||||
"allTools": "所有工具",
|
||||
"openMainMenu": "開啟主選單",
|
||||
"language": "語言"
|
||||
},
|
||||
"donation": {
|
||||
"message": "喜歡 BentoPDF?幫助我們保持免費和開源!",
|
||||
"button": "捐贈"
|
||||
},
|
||||
"hero": {
|
||||
"title": "專為隱私打造的",
|
||||
"pdfToolkit": "PDF 工具箱",
|
||||
"builtForPrivacy": " ",
|
||||
"noSignups": "不須註冊",
|
||||
"unlimitedUse": "無限使用",
|
||||
"worksOffline": "離線可用",
|
||||
"startUsing": "立刻開始使用"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "被下列公司及其員工採用"
|
||||
},
|
||||
"features": {
|
||||
"title": "為何你該選擇",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "不須註冊",
|
||||
"description": "立即可用,不須帳號或電子郵件。"
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "不須上傳",
|
||||
"description": "所有文件都在用戶端處理,永遠不會離開你的裝置。"
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "永遠免費",
|
||||
"description": "所有工具免費使用,沒有試用期,也沒有付費牆。"
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "沒有限制",
|
||||
"description": "隨心所欲的使用,沒有任何隱藏限制。"
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "批量處理",
|
||||
"description": "一次處理無限量的 PDF 檔案。"
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "快如閃電",
|
||||
"description": "瞬間處理 PDF,無須忍受任何等待或延遲。"
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "開始使用",
|
||||
"toolsLabel": "工具",
|
||||
"subtitle": "點擊任意工具以開始上傳檔案",
|
||||
"searchPlaceholder": "搜尋工具(例如「合併」或「分割」...)",
|
||||
"backToTools": "返回工具列表",
|
||||
"firstLoadNotice": "首次載入需要一點時間,因為我們正在下載轉換引擎。之後所有載入將即時完成。"
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "點擊以選擇檔案",
|
||||
"orDragAndDrop": "或將檔案拖放到此處",
|
||||
"pdfOrImages": "PDF 或圖片",
|
||||
"filesNeverLeave": "你的檔案永遠不會離開你的裝置。",
|
||||
"addMore": "添加更多檔案",
|
||||
"clearAll": "清除全部"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "正在處理..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "提示",
|
||||
"ok": "確認"
|
||||
},
|
||||
"preview": {
|
||||
"title": "文件預覽",
|
||||
"downloadAsPdf": "下載為 PDF",
|
||||
"close": "關閉"
|
||||
},
|
||||
"settings": {
|
||||
"title": "設定",
|
||||
"shortcuts": "快捷鍵",
|
||||
"preferences": "偏好設定",
|
||||
"displayPreferences": "顯示設定",
|
||||
"searchShortcuts": "搜尋快捷鍵...",
|
||||
"shortcutsInfo": "按下並按住按鍵以設定快捷鍵。變更將自動儲存。",
|
||||
"shortcutsWarning": "⚠️ 避免使用瀏覽器常用快捷鍵(Cmd/Ctrl+W、Cmd/Ctrl+T、Cmd/Ctrl+N 等),它們可能無法穩定運作。",
|
||||
"import": "匯入",
|
||||
"export": "匯出",
|
||||
"resetToDefaults": "恢復預設值",
|
||||
"fullWidthMode": "全寬模式",
|
||||
"fullWidthDescription": "使用全螢幕寬度而非置中容器顯示所有工具",
|
||||
"settingsAutoSaved": "設定會自動儲存",
|
||||
"clickToSet": "點擊以設定",
|
||||
"pressKeys": "按下按鍵...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "快捷鍵已被占用",
|
||||
"assignedTo": "已被指定為:",
|
||||
"chooseDifferent": "請選擇一個不同的快捷鍵。",
|
||||
"reserved": "保留快捷鍵警告",
|
||||
"commonlyUsed": "常被用於:",
|
||||
"unreliable": "這個快捷鍵可能與系統/瀏覽器行為衝突或無法穩定運作。",
|
||||
"useAnyway": "仍要使用嗎?",
|
||||
"resetTitle": "重設快捷鍵",
|
||||
"resetMessage": "確定要將所有快捷鍵恢復為預設值嗎?<br><br>這個操作無法被撤回。",
|
||||
"importSuccessTitle": "匯入成功",
|
||||
"importSuccessMessage": "快捷鍵匯入成功!",
|
||||
"importFailTitle": "匯入失敗",
|
||||
"importFailMessage": "匯入快捷鍵失敗。無效的檔案格式。"
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "警告",
|
||||
"cancel": "取消",
|
||||
"proceed": "繼續"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "你的資料永遠不會離開你的裝置",
|
||||
"weKeep": "我們確保",
|
||||
"yourInfoSafe": "你的資訊安全",
|
||||
"byFollowingStandards": "遵循全球安全標準。",
|
||||
"processingLocal": "所有處理過程都在你的裝置上進行。",
|
||||
"gdpr": {
|
||||
"title": "符合 GDPR 規範",
|
||||
"description": "保護歐盟境內個人的數據及隱私。"
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "符合 CCPA 規範",
|
||||
"description": "賦予加州居民對其個人資訊如何被蒐集、使用及分享的權利。"
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "符合 HIPAA 規範",
|
||||
"description": "制定處理美國健保系統中敏感健康資訊的規範。"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "常見",
|
||||
"questions": "問題",
|
||||
"isFree": {
|
||||
"question": "BentoPDF 真的是免費的嗎?",
|
||||
"answer": "沒錯,完全免費。BentoPDF 上的所有工具均為 100% 免費使用,並且沒有檔案限制、無須註冊且無浮水印。我們相信每個人都值得免費使用簡單且強大的 PDF 工具。"
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "我的檔案都是安全的嗎?它們都在哪裡被處理?",
|
||||
"answer": "你的檔案都非常安全,因為它們從未離開你的電腦。所有處理過程都直接在你的網頁瀏覽器中進行(用戶端)。我們永遠不會將你的檔案上傳到伺服器,因此你對你的文件保有完全的隱私與控制權。"
|
||||
},
|
||||
"platforms": {
|
||||
"question": "我能在 Mac、Windows 和行動裝置上使用嗎?",
|
||||
"answer": "可以!由於 BentoPDF 完全在你的瀏覽器中運作,它在任何有著現代網頁瀏覽器的系統中都能運行,包含 Windows、macOS、Linux、iOS 和 Android。"
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF 符合 GDPR 規範嗎?",
|
||||
"answer": "是的。BentoPDF 完全符合 GDPR 規範。由於所有檔案處理都在你的瀏覽器本地發生且我們永不蒐集或傳輸你的檔案至任何伺服器,我們無法存取你的資料。這確保你的文件永遠都在你的控制之中。"
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "你會保存或追蹤我的檔案嗎?",
|
||||
"answer": "不。我們永不儲存、追蹤或記錄你的檔案。你在 BentoPDF 上進行的任何操作都發生在你的瀏覽器記憶體中,並且會在你關閉頁面後立即消失。沒有上傳、沒有歷史紀錄且無伺服器參與。"
|
||||
},
|
||||
"different": {
|
||||
"question": "BentoPDF 跟其他的 PDF 工具有何不同之處?",
|
||||
"answer": "大多數 PDF 工具都透過將你的檔案上傳至伺服器好進行處理。BentoPDF 永遠不會那麼做。我們使用安全且現代的網頁科技以在你的瀏覽器中直接處理檔案。這意味著更快的性能、更強的隱私與完全的安心。"
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "瀏覽器端處理如何保障我的安全?",
|
||||
"answer": "透過完全在你的瀏覽器內運作,BentoPDF 確保你的文件從未離開你的裝置。這消除了伺服器遭駭、資料外洩與未授權訪問的風險。你的檔案永遠都屬於你。"
|
||||
},
|
||||
"analytics": {
|
||||
"question": "你會使用 Cookies 或網站分析來追蹤我嗎?",
|
||||
"answer": "我們在乎你的隱私。BentoPDF 並不追蹤個人資訊。我們僅使用 Simple Analytics 來查看匿名訪問次數。這代表我們能知道有多少使用者造訪過我們的網站,但我們永遠都不會知道你是誰。Simple Analytics 完全符合 GDPR 規範且尊重你的隱私。"
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "看看我們的",
|
||||
"users": "使用者",
|
||||
"say": "怎麼說"
|
||||
},
|
||||
"support": {
|
||||
"title": "喜歡我的作品嗎?",
|
||||
"description": "BentoPDF 是一個出於熱情開發的專案,旨在為每個人提供一個免費、注重隱私且強大的 PDF 工具組。如果有幫上你的忙,請考慮支持它的開發。每杯咖啡都意義重大!",
|
||||
"buyMeCoffee": "買杯咖啡給我"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF。版權所有。",
|
||||
"version": "版本",
|
||||
"company": "公司",
|
||||
"aboutUs": "關於我們",
|
||||
"faqLink": "常見問題",
|
||||
"contactUs": "聯絡我們",
|
||||
"legal": "法律",
|
||||
"termsAndConditions": "服務條款",
|
||||
"privacyPolicy": "隱私政策",
|
||||
"followUs": "關注我們"
|
||||
},
|
||||
"merge": {
|
||||
"title": "合併 PDF",
|
||||
"description": "合併整個檔案,或選擇特定頁面合併為新文件。",
|
||||
"fileMode": "檔案模式",
|
||||
"pageMode": "頁面模式",
|
||||
"howItWorks": "使用說明:",
|
||||
"fileModeInstructions": [
|
||||
"點擊並抓取圖標來改變檔案順序。",
|
||||
"在每個文件的「頁碼」框中,你可以僅指定想要合併的頁面範圍(例如「1-3, 5」)。",
|
||||
"將「頁碼」框留空以包含該檔案的所有頁面。"
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"下列是你上傳的 PDF 中的所有頁面。",
|
||||
"只要將個別頁面縮圖拖放到指定位置,即可為新檔案建立您想要的精確排序。"
|
||||
],
|
||||
"mergePdfs": "合併 PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "頁",
|
||||
"pages": "頁",
|
||||
"of": " / ",
|
||||
"download": "下載",
|
||||
"cancel": "取消",
|
||||
"save": "儲存",
|
||||
"delete": "刪除",
|
||||
"edit": "編輯",
|
||||
"add": "添加",
|
||||
"remove": "移除",
|
||||
"loading": "載入中...",
|
||||
"error": "錯誤",
|
||||
"success": "成功",
|
||||
"file": "檔案",
|
||||
"files": "檔案"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "我們相信 PDF 工具應該",
|
||||
"subtitle": "快速、私密且免費。",
|
||||
"noCompromises": "絕不妥協。"
|
||||
},
|
||||
"mission": {
|
||||
"title": "我們的任務",
|
||||
"description": "在尊重你的隱私且從不要求收費的同時提供最全面的 PDF 工具箱。我們相信核心文件工具應讓任何人隨時隨地不受限的使用。"
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "我們的核心理念",
|
||||
"title": "永遠以隱私為重。",
|
||||
"description": "在數據被商品化的時代,我們採取截然不同的做法。所有 BentoPDF 工具的處理流程皆在你的瀏覽器本地完成。這意味著你的檔案絕不觸及我們的伺服器,我們從未看見你的文件內容,更不會追蹤你的行為。你的文件將始終保持無可置疑的私密性。這不僅是功能,更是我們的立身之本。"
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "為何選擇",
|
||||
"speed": {
|
||||
"title": "生來迅捷",
|
||||
"description": "無需等待與伺服器間的上傳和下載。透過在你的瀏覽器中使用 WebAssembly 等現代網路科技處理檔案,我們得以為所有工具提供無與倫比的速度。"
|
||||
},
|
||||
"free": {
|
||||
"title": "完全免費",
|
||||
"description": "沒有試用期、訂閱、隱藏費用與所謂的「高級」功能。我們相信強大的 PDF 工具應該是一種公共設施,而非以營利為重。"
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "無須帳號",
|
||||
"description": "立即開始使用任何工具。我們不需要你的電子郵件、密碼或任何個人資訊。你的工作流程應當匿名且不受阻礙。"
|
||||
},
|
||||
"openSource": {
|
||||
"title": "開源精神",
|
||||
"description": "將透明性視為核心打造。我們使用了如 PDF-lib 和 PDF.js 等優秀的開源庫,並且相信社群驅動力能讓強大的工具惠及每一個人。"
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "準備好開始了嗎?",
|
||||
"description": "加入成千上萬信任 BentoPDF 能勝任他們日常文件需求的使用者們。體驗隱私與性能所帶來的差距。",
|
||||
"button": "探索所有工具"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "保持聯絡",
|
||||
"subtitle": "我們很樂意收到你的訊息。無論你想提出的是問題、回饋或功能請求,都請隨時聯繫我們。",
|
||||
"email": "你可以直接透過電子郵件聯繫我們:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "授權使用",
|
||||
"subtitle": "選擇適合需求的產品授權。"
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "上傳 PDF",
|
||||
"upload": "上傳",
|
||||
"addBlankPage": "添加空白頁面",
|
||||
"edit": "編輯:",
|
||||
"undo": "復原",
|
||||
"redo": "取消復原",
|
||||
"reset": "重設",
|
||||
"selection": "選取:",
|
||||
"selectAll": "選取全部",
|
||||
"deselectAll": "取消選取全部",
|
||||
"rotate": "旋轉:",
|
||||
"rotateLeft": "左",
|
||||
"rotateRight": "右",
|
||||
"transform": "變換:",
|
||||
"duplicate": "複製",
|
||||
"split": "分割",
|
||||
"clear": "清除:",
|
||||
"delete": "刪除",
|
||||
"download": "下載:",
|
||||
"downloadSelected": "下載選取的項目",
|
||||
"exportPdf": "匯出 PDF",
|
||||
"uploadPdfFiles": "選擇 PDF 檔案",
|
||||
"dragAndDrop": "拖放 PDF 檔案至此處,或是點擊以選取",
|
||||
"selectFiles": "選擇檔案",
|
||||
"renderingPages": "渲染頁面...",
|
||||
"actions": {
|
||||
"duplicatePage": "複製此頁",
|
||||
"deletePage": "刪除此頁",
|
||||
"insertPdf": "在此頁後插入 PDF",
|
||||
"toggleSplit": "在此頁後切換分割"
|
||||
},
|
||||
"pleaseWait": "請稍後",
|
||||
"pagesRendering": "正在渲染頁面。請稍後...",
|
||||
"noPagesSelected": "未選擇頁面",
|
||||
"selectOnePage": "請至少選擇一頁以開始下載。",
|
||||
"noPages": "無頁面",
|
||||
"noPagesToExport": "無可匯出的頁面。",
|
||||
"renderingTitle": "正在渲染頁面預覽",
|
||||
"errorRendering": "無法渲染頁面縮圖",
|
||||
"error": "錯誤",
|
||||
"failedToLoad": "載入失敗"
|
||||
}
|
||||
}
|
||||
511
public/locales/zh-TW/tools.json
Normal file
@@ -0,0 +1,511 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "熱門工具",
|
||||
"editAnnotate": "編輯與註解",
|
||||
"convertToPdf": "轉換為 PDF",
|
||||
"convertFromPdf": "從 PDF 轉換",
|
||||
"organizeManage": "組織與管理",
|
||||
"optimizeRepair": "優化與修復",
|
||||
"securePdf": "安全 PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF 多功能工具",
|
||||
"subtitle": "在統一的頁面中合併、分割、組織、刪除、旋轉、添加空白頁面、提取與複製。"
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "合併 PDF",
|
||||
"subtitle": "將多個 PDF 合併為一個檔案。保留書籤。"
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "分割 PDF",
|
||||
"subtitle": "將指定範圍的頁面提取為新的 PDF。"
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "壓縮 PDF",
|
||||
"subtitle": "降低你的 PDF 檔案大小。"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF 編輯器",
|
||||
"subtitle": "註解、螢光、塗黑、評論、添加圖形或圖片、搜尋與查看 PDF。"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG 轉 PDF",
|
||||
"subtitle": "從一張或多張 JPG 圖片建立 PDF。"
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "簽署 PDF",
|
||||
"subtitle": "繪製、輸入或上傳你的簽名。"
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "裁切 PDF",
|
||||
"subtitle": "修剪你的 PDF 中所有頁面的邊界。"
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "提取頁面",
|
||||
"subtitle": "將選取的頁面保存為新的檔案。"
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "複製與組織",
|
||||
"subtitle": "複製、重新排序與刪除頁面。"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "刪除頁面",
|
||||
"subtitle": "移除你的文件中的特定頁面。"
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "編輯書籤",
|
||||
"subtitle": "添加、編輯、匯入、刪除與提取 PDF 書籤。"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "目錄",
|
||||
"subtitle": "從 PDF 書籤生成目錄頁。"
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "頁碼",
|
||||
"subtitle": "在你的文件中插入頁碼。"
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "添加浮水印",
|
||||
"subtitle": "在你的 PDF 頁面上壓印文字或圖片。"
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "頁首與頁尾",
|
||||
"subtitle": "在頁面的頂部與底部新增文字。"
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "反轉顏色",
|
||||
"subtitle": "為你的 PDF 建立深色版本。"
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "背景顏色",
|
||||
"subtitle": "更改你的 PDF 的背景顏色。"
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "更改文字顏色",
|
||||
"subtitle": "更改你的 PDF 中的文字顏色。"
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "添加印章",
|
||||
"subtitle": "使用註解工具列在你的 PDF 中添加圖片印章。",
|
||||
"usernameLabel": "印章使用者名稱",
|
||||
"usernamePlaceholder": "輸入你的名稱(印章用)",
|
||||
"usernameHint": "該名稱會出現在你建立的印章上。"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "移除註解",
|
||||
"subtitle": "去除留言、螢光與連結。"
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF 表單填寫器",
|
||||
"subtitle": "直接在你的瀏覽器中填寫表單。支援 XFA 表單。"
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "建立 PDF 表單",
|
||||
"subtitle": "透過拖放文字框建立可填寫的 PDF 表單。"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "移除空白頁面",
|
||||
"subtitle": "自動偵測並刪除空白頁面。"
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "圖片轉 PDF",
|
||||
"subtitle": "將 JPG、PNG、WebP、BMP、TIFF、SVG 與 HEIC 轉換為 PDF。"
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG 轉 PDF",
|
||||
"subtitle": "從一張或多張 PNG 圖片建立 PDF。"
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP 轉 PDF",
|
||||
"subtitle": "從一張或多張 WebP 圖片建立 PDF。"
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG 轉 PDF",
|
||||
"subtitle": "從一張或多張 SVG 圖片建立 PDF。"
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP 轉 PDF",
|
||||
"subtitle": "從一張或多張 BMP 圖片建立 PDF。"
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC 轉 PDF",
|
||||
"subtitle": "從一張或多張 HEIC 圖片建立 PDF。"
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF 轉 PDF",
|
||||
"subtitle": "從一張或多張 TIFF 圖片建立 PDF。"
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "Text 轉 PDF",
|
||||
"subtitle": "將純文字檔案轉換為 PDF。"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON 轉 PDF",
|
||||
"subtitle": "將 JSON 檔案轉換為 PDF 格式。"
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF 轉 JPG",
|
||||
"subtitle": "將每個 PDF 頁面轉換為 JPG 圖片。"
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF 轉 PNG",
|
||||
"subtitle": "將每個 PDF 頁面轉換為 PNG 圖片。"
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF 轉 WebP",
|
||||
"subtitle": "將每個 PDF 頁面轉換為 WebP 圖片。"
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF 轉 BMP",
|
||||
"subtitle": "將每個 PDF 頁面轉換為 BMP 圖片。"
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF 轉 TIFF",
|
||||
"subtitle": "將每個 PDF 頁面轉換為 TIFF 圖片。"
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF 轉灰階",
|
||||
"subtitle": "將所有顏色轉換為黑白。"
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF 轉 JSON",
|
||||
"subtitle": "將 PDF 檔案轉換為 JSON 格式。"
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "使 PDF 可搜尋且可複製。"
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "交錯混合頁面",
|
||||
"subtitle": "將每個 PDF 的頁面交錯合併。保留書籤。"
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "添加附件",
|
||||
"subtitle": "嵌入一個或多個檔案至你的 PDF 中。"
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "提取附件",
|
||||
"subtitle": "從 PDF 中提取所有嵌入的檔案為 ZIP。"
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "編輯附件",
|
||||
"subtitle": "查看或移除你的 PDF 中的附件。"
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "分割頁面",
|
||||
"subtitle": "垂直或水平分割頁面。"
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "添加空白頁面",
|
||||
"subtitle": "在你的 PDF 中的任一位置插入空白頁面。"
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "反轉頁面",
|
||||
"subtitle": "反轉你的文件中所有頁面的順序。"
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "旋轉 PDF",
|
||||
"subtitle": "以 90 度增量旋轉頁面。"
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "將多個頁面排列在單張紙上。"
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "合併為單一頁面",
|
||||
"subtitle": "將所有頁面縫合為一個單一且連續的滾動頁面。"
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "查看元資料",
|
||||
"subtitle": "檢視你的 PDF 中的隱藏屬性。"
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "編輯元資料",
|
||||
"subtitle": "更改作者、標題和其他屬性。"
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF 轉 ZIP",
|
||||
"subtitle": "將多個 PDF 檔案打包為 ZIP 壓縮檔。"
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "比較 PDF",
|
||||
"subtitle": "並排比較兩個 PDF。"
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "海報化 PDF",
|
||||
"subtitle": "將大頁面分割為多個較小的頁面。"
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "修復頁面大小",
|
||||
"subtitle": "將所有頁面標準化為統一尺寸。"
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "線性化 PDF",
|
||||
"subtitle": "為快速網頁瀏覽優化 PDF。"
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "頁面尺寸",
|
||||
"subtitle": "分析頁面大小、方向和單位。"
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "移除限制",
|
||||
"subtitle": "移除與數位簽名的 PDF 檔案相關的密碼保護與安全限制。"
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "修復 PDF",
|
||||
"subtitle": "從受損的 PDF 檔案中復原資料。"
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "加密 PDF",
|
||||
"subtitle": "透過添加密碼為你的 PDF 上鎖。"
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "清理 PDF",
|
||||
"subtitle": "移除元資料、註解、腳本與其他資料。"
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "解密 PDF",
|
||||
"subtitle": "透過移除密碼保護解鎖 PDF。"
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "平面化 PDF",
|
||||
"subtitle": "使表單欄位和註解不可編輯。"
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "移除元資料",
|
||||
"subtitle": "除去你的 PDF 中的隱藏資料。"
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "更改權限",
|
||||
"subtitle": "設定或變更 PDF 上的使用者權限。"
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "Email 轉 PDF",
|
||||
"subtitle": "將電子郵件檔案 (EML, MSG) 轉換為 PDF 格式。支援 Outlook 匯出和標準電子郵件格式。",
|
||||
"acceptedFormats": "EML, MSG 檔案",
|
||||
"convertButton": "轉換為 PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "字型轉外框",
|
||||
"subtitle": "將所有字型轉換為向量外框,確保在所有裝置上呈現一致。"
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "PDF 歪斜修正",
|
||||
"subtitle": "使用 OpenCV 自動調正傾斜的掃描頁面。"
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "Rotate by Custom Degrees",
|
||||
"subtitle": "Rotate pages by any custom angle."
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT to PDF",
|
||||
"subtitle": "Convert OpenDocument Text files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODT files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV to PDF",
|
||||
"subtitle": "Convert CSV spreadsheet files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF to PDF",
|
||||
"subtitle": "Convert Rich Text Format documents to PDF. Supports multiple files.",
|
||||
"acceptedFormats": "RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word to PDF",
|
||||
"subtitle": "Convert Word documents (DOCX, DOC, ODT, RTF) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "DOCX, DOC, ODT, RTF files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel to PDF",
|
||||
"subtitle": "Convert Excel spreadsheets (XLSX, XLS, ODS, CSV) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XLSX, XLS, ODS, CSV files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint to PDF",
|
||||
"subtitle": "Convert PowerPoint presentations (PPTX, PPT, ODP) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PPTX, PPT, ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown to PDF",
|
||||
"subtitle": "Write or paste Markdown and export it as a beautifully formatted PDF.",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "Preview",
|
||||
"btnUpload": "Upload",
|
||||
"btnSyncScroll": "Sync Scroll",
|
||||
"btnSettings": "Settings",
|
||||
"btnExportPdf": "Export PDF",
|
||||
"settingsTitle": "Markdown Settings",
|
||||
"settingsPreset": "Preset",
|
||||
"presetDefault": "Default (GFM-like)",
|
||||
"presetCommonmark": "CommonMark (strict)",
|
||||
"presetZero": "Minimal (no features)",
|
||||
"settingsOptions": "Markdown Options",
|
||||
"optAllowHtml": "Allow HTML tags",
|
||||
"optBreaks": "Convert newlines to <br>",
|
||||
"optLinkify": "Auto-convert URLs to links",
|
||||
"optTypographer": "Typographer (smart quotes, etc.)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "PDF Booklet",
|
||||
"subtitle": "Rearrange pages for double-sided booklet printing. Fold and staple to create a booklet.",
|
||||
"howItWorks": "How it works:",
|
||||
"step1": "Upload a PDF file.",
|
||||
"step2": "Pages will be rearranged in booklet order.",
|
||||
"step3": "Print double-sided, flip on short edge, fold and staple.",
|
||||
"paperSize": "Paper Size",
|
||||
"orientation": "Orientation",
|
||||
"portrait": "Portrait",
|
||||
"landscape": "Landscape",
|
||||
"pagesPerSheet": "Pages per Sheet",
|
||||
"createBooklet": "Create Booklet",
|
||||
"processing": "Processing...",
|
||||
"pageCount": "Page count will be padded to multiple of 4 if needed."
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS to PDF",
|
||||
"subtitle": "Convert XPS/OXPS documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XPS, OXPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI to PDF",
|
||||
"subtitle": "Convert MOBI e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "MOBI files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB to PDF",
|
||||
"subtitle": "Convert EPUB e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "EPUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 to PDF",
|
||||
"subtitle": "Convert FictionBook (FB2) e-books to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "FB2 files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ to PDF",
|
||||
"subtitle": "Convert comic book archives (CBZ/CBR) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "CBZ, CBR files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD to PDF",
|
||||
"subtitle": "Convert WordPerfect documents (WPD) to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS to PDF",
|
||||
"subtitle": "Convert WPS Office documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "WPS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML to PDF",
|
||||
"subtitle": "Convert XML documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "XML files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages to PDF",
|
||||
"subtitle": "Convert Apple Pages documents to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "Pages files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG to PDF",
|
||||
"subtitle": "Convert OpenDocument Graphics (ODG) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODG files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS to PDF",
|
||||
"subtitle": "Convert OpenDocument Spreadsheet (ODS) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODS files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP to PDF",
|
||||
"subtitle": "Convert OpenDocument Presentation (ODP) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "ODP files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB to PDF",
|
||||
"subtitle": "Convert Microsoft Publisher (PUB) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PUB files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD to PDF",
|
||||
"subtitle": "Convert Microsoft Visio (VSD, VSDX) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "VSD, VSDX files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD to PDF",
|
||||
"subtitle": "Convert Adobe Photoshop (PSD) files to PDF format. Supports multiple files.",
|
||||
"acceptedFormats": "PSD files",
|
||||
"convertButton": "Convert to PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF to SVG",
|
||||
"subtitle": "Convert each page of a PDF file into a scalable vector graphic (SVG) for perfect quality at any size."
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "Extract PDF Tables",
|
||||
"subtitle": "Extract tables from PDF files and export as CSV, JSON, or Markdown."
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF to CSV",
|
||||
"subtitle": "Extract tables from PDF and convert to CSV format."
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF to Excel",
|
||||
"subtitle": "Extract tables from PDF and convert to Excel (XLSX) format."
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF to Text",
|
||||
"subtitle": "Extract text from PDF files and save as plain text (.txt). Supports multiple files.",
|
||||
"note": "This tool works ONLY with digitally created PDFs. For scanned documents or image-based PDFs, use our OCR PDF tool instead.",
|
||||
"convertButton": "Extract Text"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "Digital Signature PDF",
|
||||
"pageTitle": "Digital Signature PDF - Add Cryptographic Signature | BentoPDF",
|
||||
"subtitle": "Add a cryptographic digital signature to your PDF using X.509 certificates. Supports PKCS#12 (.pfx, .p12) and PEM formats. Your private key never leaves your browser.",
|
||||
"certificateSection": "Certificate",
|
||||
"uploadCert": "Upload certificate (.pfx, .p12)",
|
||||
"certPassword": "Certificate Password",
|
||||
"certPasswordPlaceholder": "Enter certificate password",
|
||||
"certInfo": "Certificate Information",
|
||||
"certSubject": "Subject",
|
||||
"certIssuer": "Issuer",
|
||||
"certValidity": "Valid",
|
||||
"signatureDetails": "Signature Details (Optional)",
|
||||
"reason": "Reason",
|
||||
"reasonPlaceholder": "e.g., I approve this document",
|
||||
"location": "Location",
|
||||
"locationPlaceholder": "e.g., New York, USA",
|
||||
"contactInfo": "Contact Info",
|
||||
"contactPlaceholder": "e.g., email@example.com",
|
||||
"applySignature": "Apply Digital Signature",
|
||||
"successMessage": "PDF signed successfully! The signature can be verified in any PDF reader."
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "Validate PDF Signature",
|
||||
"pageTitle": "Validate PDF Signature - Verify Digital Signatures | BentoPDF",
|
||||
"subtitle": "Verify digital signatures in your PDF files. Check certificate validity, view signer details, and confirm document integrity. All processing happens in your browser."
|
||||
}
|
||||
}
|
||||
@@ -1,318 +1,323 @@
|
||||
{
|
||||
"nav": {
|
||||
"home": "首页",
|
||||
"about": "关于我们",
|
||||
"contact": "联系我们",
|
||||
"licensing": "许可",
|
||||
"allTools": "所有工具",
|
||||
"openMainMenu": "打开主菜单",
|
||||
"language": "语言"
|
||||
"nav": {
|
||||
"home": "首页",
|
||||
"about": "关于我们",
|
||||
"contact": "联系我们",
|
||||
"licensing": "许可",
|
||||
"allTools": "所有工具",
|
||||
"openMainMenu": "打开主菜单",
|
||||
"language": "语言"
|
||||
},
|
||||
"donation": {
|
||||
"message": "喜欢 BentoPDF?帮助我们保持免费和开源!",
|
||||
"button": "捐赠"
|
||||
},
|
||||
"hero": {
|
||||
"title": "专为隐私打造的",
|
||||
"pdfToolkit": "PDF 工具箱",
|
||||
"builtForPrivacy": " ",
|
||||
"noSignups": "无需注册",
|
||||
"unlimitedUse": "无限使用",
|
||||
"worksOffline": "离线可用",
|
||||
"startUsing": "立即开始"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "被众多公司和个人信赖,包括"
|
||||
},
|
||||
"features": {
|
||||
"title": "为什么选择",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "无需注册",
|
||||
"description": "即刻开始,无需账户或电子邮件。"
|
||||
},
|
||||
"hero": {
|
||||
"title": "专为隐私打造的",
|
||||
"pdfToolkit": "PDF 工具箱",
|
||||
"builtForPrivacy": " ",
|
||||
"noSignups": "无需注册",
|
||||
"unlimitedUse": "无限使用",
|
||||
"worksOffline": "离线可用",
|
||||
"startUsing": "立即开始"
|
||||
"noUploads": {
|
||||
"title": "无需上传",
|
||||
"description": "100% 客户端处理,您的文件从未离开您的设备。"
|
||||
},
|
||||
"usedBy": {
|
||||
"title": "被众多公司和个人信赖,包括"
|
||||
"foreverFree": {
|
||||
"title": "永久免费",
|
||||
"description": "所有工具免费,无试用期,无付费墙。"
|
||||
},
|
||||
"features": {
|
||||
"title": "为什么选择",
|
||||
"bentoPdf": "BentoPDF?",
|
||||
"noSignup": {
|
||||
"title": "无需注册",
|
||||
"description": "即刻开始,无需账户或电子邮件。"
|
||||
},
|
||||
"noUploads": {
|
||||
"title": "无需上传",
|
||||
"description": "100% 客户端处理,您的文件从未离开您的设备。"
|
||||
},
|
||||
"foreverFree": {
|
||||
"title": "永久免费",
|
||||
"description": "所有工具免费,无试用期,无付费墙。"
|
||||
},
|
||||
"noLimits": {
|
||||
"title": "无限制",
|
||||
"description": "随心使用,无任何隐形限制。"
|
||||
},
|
||||
"batchProcessing": {
|
||||
"title": "批量处理",
|
||||
"description": "一次处理无限数量的 PDF 文件。"
|
||||
},
|
||||
"lightningFast": {
|
||||
"title": "极速处理",
|
||||
"description": "瞬间处理 PDF, 无需等待。"
|
||||
}
|
||||
"noLimits": {
|
||||
"title": "无限制",
|
||||
"description": "随心使用,无任何隐形限制。"
|
||||
},
|
||||
"tools": {
|
||||
"title": "开始使用",
|
||||
"toolsLabel": "工具",
|
||||
"subtitle": "点击工具以打开文件上传",
|
||||
"searchPlaceholder": "搜索工具 (例如 '合并', '分割'...)",
|
||||
"backToTools": "返回工具列表"
|
||||
"batchProcessing": {
|
||||
"title": "批量处理",
|
||||
"description": "一次处理无限数量的 PDF 文件。"
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "点击选择文件",
|
||||
"orDragAndDrop": "或将文件拖放到此处",
|
||||
"pdfOrImages": "PDF 或图片",
|
||||
"filesNeverLeave": "您的文件从未离开您的设备。",
|
||||
"addMore": "添加更多文件",
|
||||
"clearAll": "清空所有"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "处理中..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "提示",
|
||||
"ok": "确定"
|
||||
},
|
||||
"preview": {
|
||||
"title": "文档预览",
|
||||
"downloadAsPdf": "下载 PDF",
|
||||
"close": "关闭"
|
||||
},
|
||||
"settings": {
|
||||
"title": "设置",
|
||||
"shortcuts": "快捷键",
|
||||
"preferences": "偏好设置",
|
||||
"displayPreferences": "显示设置",
|
||||
"searchShortcuts": "搜索快捷键...",
|
||||
"shortcutsInfo": "按下并按住按键以设置快捷键。更改将自动保存。",
|
||||
"shortcutsWarning": "⚠️ 避免使用通用的浏览器快捷键 (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N 等),因为它们可能无法稳定工作。",
|
||||
"import": "导入",
|
||||
"export": "导出",
|
||||
"resetToDefaults": "恢复默认",
|
||||
"fullWidthMode": "全宽模式",
|
||||
"fullWidthDescription": "使用全屏宽度展示所有工具,而非居中显示",
|
||||
"settingsAutoSaved": "设置已自动保存",
|
||||
"clickToSet": "点击设置",
|
||||
"pressKeys": "按下按键...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "快捷键已被使用",
|
||||
"assignedTo": "已分配给:",
|
||||
"chooseDifferent": "请选择其他快捷键。",
|
||||
"reserved": "保留快捷键警告",
|
||||
"commonlyUsed": "通常用于:",
|
||||
"unreliable": "此快捷键可能无法稳定工作,或与浏览器/系统快捷键冲突。",
|
||||
"useAnyway": "仍要使用吗?",
|
||||
"resetTitle": "重置快捷键",
|
||||
"resetMessage": "确定要将所有快捷键重置为默认值吗?<br><br>此操作无法撤销。",
|
||||
"importSuccessTitle": "导入成功",
|
||||
"importSuccessMessage": "快捷键导入成功!",
|
||||
"importFailTitle": "导入失败",
|
||||
"importFailMessage": "导入快捷键失败。文件格式无效。"
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "警告",
|
||||
"cancel": "取消",
|
||||
"proceed": "继续"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "您的数据从未离开您的设备",
|
||||
"weKeep": "我们会保持",
|
||||
"yourInfoSafe": "您的信息安全",
|
||||
"byFollowingStandards": ",遵循全球安全标准。",
|
||||
"processingLocal": "所有处理都在您的设备上本地进行。",
|
||||
"gdpr": {
|
||||
"title": "GDPR 合规",
|
||||
"description": "保护欧盟境内个人的个人数据和隐私。"
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA 合规",
|
||||
"description": "赋予加州居民对其个人信息的收集、使用和共享的权利。"
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA 合规",
|
||||
"description": "制定美国医疗系统中处理敏感健康信息的保障措施。"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "常见",
|
||||
"questions": "问题",
|
||||
"isFree": {
|
||||
"question": "BentoPDF 真的免费吗?",
|
||||
"answer": "是的,完全免费。BentoPDF 上的所有工具均可 100% 免费使用,没有文件限制,无需注册,也没有水印。我们相信每个人都应该能够使用简单、强大的 PDF 工具,而无需通过付费墙。"
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "我的文件安全吗?它们在哪里处理?",
|
||||
"answer": "您的文件非常安全,因为它们从未离开您的电脑。所有处理都直接在您的网络浏览器(客户端)中进行。我们从不将您的文件上传到服务器,因此您可以对文档保持完全的隐私和控制。"
|
||||
},
|
||||
"platforms": {
|
||||
"question": "它适用于 Mac、Windows 和手机吗?",
|
||||
"answer": "是的!由于 BentoPDF 完全在您的浏览器中运行,因此它适用于任何带有现代网络浏览器的操作系统,包括 Windows、macOS、Linux、iOS 和 Android。"
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF 符合 GDPR 吗?",
|
||||
"answer": "是的。BentoPDF 完全符合 GDPR。由于所有文件处理都在您的浏览器中本地进行,并且我们从不收集或将您的文件传输到任何服务器,因此我们无法访问您的数据。这确保您始终掌控您的文档。"
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "你们会存储或跟踪我的任何文件吗?",
|
||||
"answer": "不。我们从不存储、跟踪或记录您的文件。您在 BentoPDF 上所做的所有操作都在您的浏览器内存中进行,并在您关闭页面后消失。没有上传,没有历史记录,也没有涉及服务器。"
|
||||
},
|
||||
"different": {
|
||||
"question": "BentoPDF 与其他 PDF 工具有何不同?",
|
||||
"answer": "大多数 PDF 工具将您的文件上传到服务器进行处理。BentoPDF 从不这样做。我们使用安全、现代的网络技术直接在您的浏览器中处理您的文件。这意味着更快的性能、更强的隐私和完全的安心。"
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "基于浏览器的处理如何保护我的安全?",
|
||||
"answer": "通过完全在您的浏览器内部运行,BentoPDF 确保您的文件从未离开您的设备。这消除了服务器黑客攻击、数据泄露或未经授权访问的风险。您的文件始终属于您。"
|
||||
},
|
||||
"analytics": {
|
||||
"question": "你们使用 Cookie 或分析来跟踪我吗?",
|
||||
"answer": "我们关心您的隐私。BentoPDF 不会跟踪个人信息。我们仅使用 Simple Analytics 查看匿名访问计数。这意味着我们可以知道有多少用户访问我们的网站,但我们永远不知道您是谁。Simple Analytics 完全符合 GDPR 并尊重您的隐私。"
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "我们的",
|
||||
"users": "用户",
|
||||
"say": "评价"
|
||||
},
|
||||
"support": {
|
||||
"title": "喜欢这个项目?",
|
||||
"description": "BentoPDF 是一个充满激情的项目,旨在为每个人提供免费、私密且强大的 PDF 工具箱。如果您觉得它有用,请考虑支持它的开发。每一杯咖啡都是莫大的支持!",
|
||||
"buyMeCoffee": "请我喝杯咖啡"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2025 BentoPDF. 保留所有权利。",
|
||||
"version": "版本",
|
||||
"company": "公司",
|
||||
"aboutUs": "关于我们",
|
||||
"faqLink": "常见问题",
|
||||
"contactUs": "联系我们",
|
||||
"legal": "法律",
|
||||
"termsAndConditions": "服务条款",
|
||||
"privacyPolicy": "隐私政策",
|
||||
"followUs": "关注我们"
|
||||
},
|
||||
"merge": {
|
||||
"title": "合并 PDF",
|
||||
"description": "合并整个文件,或选择特定页面合并到新文档中。",
|
||||
"fileMode": "文件模式",
|
||||
"pageMode": "页面模式",
|
||||
"howItWorks": "使用说明:",
|
||||
"fileModeInstructions": [
|
||||
"点击并拖动图标以更改文件的顺序。",
|
||||
"在每个文件的 '页码' 框中,您可以指定范围(例如 '1-3, 5')以仅合并这些页面。",
|
||||
"将 '页码' 框留空以包含该文件的所有页面。"
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"您上传的 PDF 的所有页面显示在下方。",
|
||||
"只需拖放单个页面缩略图,即可为您新文件对页面进行排序。"
|
||||
],
|
||||
"mergePdfs": "合并 PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "页",
|
||||
"pages": "页",
|
||||
"of": " / ",
|
||||
"download": "下载",
|
||||
"cancel": "取消",
|
||||
"save": "保存",
|
||||
"delete": "删除",
|
||||
"edit": "编辑",
|
||||
"add": "添加",
|
||||
"remove": "移除",
|
||||
"loading": "加载中...",
|
||||
"error": "错误",
|
||||
"success": "成功",
|
||||
"file": "文件",
|
||||
"files": "文件"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "我们相信 PDF 工具应该是",
|
||||
"subtitle": "快速、私密且免费的。",
|
||||
"noCompromises": "绝不妥协。"
|
||||
},
|
||||
"mission": {
|
||||
"title": "我们的使命",
|
||||
"description": "提供最全面的 PDF 工具箱,尊重您的隐私,且永不收费。我们相信基本的文档工具应该对所有人、在任何地方都触手可及,没有任何障碍。"
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "我们的核心理念",
|
||||
"title": "隐私至上。始终如一。",
|
||||
"description": "在数据被商品化的时代,我们采取不同的方式。BentoPDF 工具的所有处理都在您的浏览器本地进行。这意味着您的文件从未接触我们的服务器,我们从不查看您的文档,也不跟踪您的操作。您的文档保持绝对的私密性。这不仅是一项功能;这是我们的基石。"
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "为什么选择",
|
||||
"speed": {
|
||||
"title": "为速度而生",
|
||||
"description": "无需等待上传或从服务器下载。通过使用 WebAssembly 等现代网络技术直接在您的浏览器中处理文件,我们为所有工具提供了无与伦比的速度。"
|
||||
},
|
||||
"free": {
|
||||
"title": "完全免费",
|
||||
"description": "无试用,无订阅,无隐藏费用,也没有被锁定的 '高级' 功能。我们相信强大的 PDF 工具应该是一种公共设施,而不是盈利中心。"
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "无需账户",
|
||||
"description": "立即开始使用任何工具。我们不需要您的电子邮件、密码或任何个人信息。您的工作流程应该是无摩擦且匿名的。"
|
||||
},
|
||||
"openSource": {
|
||||
"title": "开源精神",
|
||||
"description": "以透明度为核心构建。我们利用了像 PDF-lib 和 PDF.js 这样优秀的开源库,并相信社区驱动的力量能使强大的工具惠及每一个人。"
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "准备好开始了吗?",
|
||||
"description": "加入成千上万信任 BentoPDF 满足日常文档需求的用户。体验隐私和性能带来的不同。",
|
||||
"button": "探索所有工具"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "联系我们",
|
||||
"subtitle": "我们很乐意听到您的声音。无论您有问题、反馈还是功能请求,请随时联系我们。",
|
||||
"email": "您可以直接通过电子邮件联系我们:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "许可适用",
|
||||
"subtitle": "选择适合您需求的许可。"
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "上传 PDF",
|
||||
"upload": "上传",
|
||||
"addBlankPage": "添加空白页",
|
||||
"edit": "编辑:",
|
||||
"undo": "撤销",
|
||||
"redo": "重做",
|
||||
"reset": "重置",
|
||||
"selection": "选择:",
|
||||
"selectAll": "全选",
|
||||
"deselectAll": "取消全选",
|
||||
"rotate": "旋转:",
|
||||
"rotateLeft": "向左",
|
||||
"rotateRight": "向右",
|
||||
"transform": "变换:",
|
||||
"duplicate": "复制",
|
||||
"split": "拆分",
|
||||
"clear": "清除:",
|
||||
"delete": "删除",
|
||||
"download": "下载:",
|
||||
"downloadSelected": "下载选中",
|
||||
"exportPdf": "导出 PDF",
|
||||
"uploadPdfFiles": "选择 PDF 文件",
|
||||
"dragAndDrop": "将 PDF 文件拖放到此处,或点击选择",
|
||||
"selectFiles": "选择文件",
|
||||
"renderingPages": "正在渲染页面...",
|
||||
"actions": {
|
||||
"duplicatePage": "复制此页",
|
||||
"deletePage": "删除此页",
|
||||
"insertPdf": "在此页后插入 PDF",
|
||||
"toggleSplit": "在此页后切换拆分"
|
||||
},
|
||||
"pleaseWait": "请稍候",
|
||||
"pagesRendering": "页面正在渲染中,请稍候...",
|
||||
"noPagesSelected": "未选择页面",
|
||||
"selectOnePage": "请至少选择一页以进行下载。",
|
||||
"noPages": "没有页面",
|
||||
"noPagesToExport": "没有可导出的页面。",
|
||||
"renderingTitle": "正在渲染页面预览",
|
||||
"errorRendering": "渲染页面缩略图失败",
|
||||
"error": "错误",
|
||||
"failedToLoad": "加载失败"
|
||||
"lightningFast": {
|
||||
"title": "极速处理",
|
||||
"description": "瞬间处理 PDF, 无需等待。"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tools": {
|
||||
"title": "开始使用",
|
||||
"toolsLabel": "工具",
|
||||
"subtitle": "点击工具以打开文件上传",
|
||||
"searchPlaceholder": "搜索工具 (例如 '合并', '分割'...)",
|
||||
"backToTools": "返回工具列表",
|
||||
"firstLoadNotice": "首次加载需要一点时间,因为我们正在下载转换引擎。之后所有加载将即时完成。"
|
||||
},
|
||||
"upload": {
|
||||
"clickToSelect": "点击选择文件",
|
||||
"orDragAndDrop": "或将文件拖放到此处",
|
||||
"pdfOrImages": "PDF 或图片",
|
||||
"filesNeverLeave": "您的文件从未离开您的设备。",
|
||||
"addMore": "添加更多文件",
|
||||
"clearAll": "清空所有"
|
||||
},
|
||||
"loader": {
|
||||
"processing": "处理中..."
|
||||
},
|
||||
"alert": {
|
||||
"title": "提示",
|
||||
"ok": "确定"
|
||||
},
|
||||
"preview": {
|
||||
"title": "文档预览",
|
||||
"downloadAsPdf": "下载 PDF",
|
||||
"close": "关闭"
|
||||
},
|
||||
"settings": {
|
||||
"title": "设置",
|
||||
"shortcuts": "快捷键",
|
||||
"preferences": "偏好设置",
|
||||
"displayPreferences": "显示设置",
|
||||
"searchShortcuts": "搜索快捷键...",
|
||||
"shortcutsInfo": "按下并按住按键以设置快捷键。更改将自动保存。",
|
||||
"shortcutsWarning": "⚠️ 避免使用通用的浏览器快捷键 (Cmd/Ctrl+W, Cmd/Ctrl+T, Cmd/Ctrl+N 等),因为它们可能无法稳定工作。",
|
||||
"import": "导入",
|
||||
"export": "导出",
|
||||
"resetToDefaults": "恢复默认",
|
||||
"fullWidthMode": "全宽模式",
|
||||
"fullWidthDescription": "使用全屏宽度展示所有工具,而非居中显示",
|
||||
"settingsAutoSaved": "设置已自动保存",
|
||||
"clickToSet": "点击设置",
|
||||
"pressKeys": "按下按键...",
|
||||
"warnings": {
|
||||
"alreadyInUse": "快捷键已被使用",
|
||||
"assignedTo": "已分配给:",
|
||||
"chooseDifferent": "请选择其他快捷键。",
|
||||
"reserved": "保留快捷键警告",
|
||||
"commonlyUsed": "通常用于:",
|
||||
"unreliable": "此快捷键可能无法稳定工作,或与浏览器/系统快捷键冲突。",
|
||||
"useAnyway": "仍要使用吗?",
|
||||
"resetTitle": "重置快捷键",
|
||||
"resetMessage": "确定要将所有快捷键重置为默认值吗?<br><br>此操作无法撤销。",
|
||||
"importSuccessTitle": "导入成功",
|
||||
"importSuccessMessage": "快捷键导入成功!",
|
||||
"importFailTitle": "导入失败",
|
||||
"importFailMessage": "导入快捷键失败。文件格式无效。"
|
||||
}
|
||||
},
|
||||
"warning": {
|
||||
"title": "警告",
|
||||
"cancel": "取消",
|
||||
"proceed": "继续"
|
||||
},
|
||||
"compliance": {
|
||||
"title": "您的数据从未离开您的设备",
|
||||
"weKeep": "我们会保持",
|
||||
"yourInfoSafe": "您的信息安全",
|
||||
"byFollowingStandards": ",遵循全球安全标准。",
|
||||
"processingLocal": "所有处理都在您的设备上本地进行。",
|
||||
"gdpr": {
|
||||
"title": "GDPR 合规",
|
||||
"description": "保护欧盟境内个人的个人数据和隐私。"
|
||||
},
|
||||
"ccpa": {
|
||||
"title": "CCPA 合规",
|
||||
"description": "赋予加州居民对其个人信息的收集、使用和共享的权利。"
|
||||
},
|
||||
"hipaa": {
|
||||
"title": "HIPAA 合规",
|
||||
"description": "制定美国医疗系统中处理敏感健康信息的保障措施。"
|
||||
}
|
||||
},
|
||||
"faq": {
|
||||
"title": "常见",
|
||||
"questions": "问题",
|
||||
"isFree": {
|
||||
"question": "BentoPDF 真的免费吗?",
|
||||
"answer": "是的,完全免费。BentoPDF 上的所有工具均可 100% 免费使用,没有文件限制,无需注册,也没有水印。我们相信每个人都应该能够使用简单、强大的 PDF 工具,而无需通过付费墙。"
|
||||
},
|
||||
"areFilesSecure": {
|
||||
"question": "我的文件安全吗?它们在哪里处理?",
|
||||
"answer": "您的文件非常安全,因为它们从未离开您的电脑。所有处理都直接在您的网络浏览器(客户端)中进行。我们从不将您的文件上传到服务器,因此您可以对文档保持完全的隐私和控制。"
|
||||
},
|
||||
"platforms": {
|
||||
"question": "它适用于 Mac、Windows 和手机吗?",
|
||||
"answer": "是的!由于 BentoPDF 完全在您的浏览器中运行,因此它适用于任何带有现代网络浏览器的操作系统,包括 Windows、macOS、Linux、iOS 和 Android。"
|
||||
},
|
||||
"gdprCompliant": {
|
||||
"question": "BentoPDF 符合 GDPR 吗?",
|
||||
"answer": "是的。BentoPDF 完全符合 GDPR。由于所有文件处理都在您的浏览器中本地进行,并且我们从不收集或将您的文件传输到任何服务器,因此我们无法访问您的数据。这确保您始终掌控您的文档。"
|
||||
},
|
||||
"dataStorage": {
|
||||
"question": "你们会存储或跟踪我的任何文件吗?",
|
||||
"answer": "不。我们从不存储、跟踪或记录您的文件。您在 BentoPDF 上所做的所有操作都在您的浏览器内存中进行,并在您关闭页面后消失。没有上传,没有历史记录,也没有涉及服务器。"
|
||||
},
|
||||
"different": {
|
||||
"question": "BentoPDF 与其他 PDF 工具有何不同?",
|
||||
"answer": "大多数 PDF 工具将您的文件上传到服务器进行处理。BentoPDF 从不这样做。我们使用安全、现代的网络技术直接在您的浏览器中处理您的文件。这意味着更快的性能、更强的隐私和完全的安心。"
|
||||
},
|
||||
"browserBased": {
|
||||
"question": "基于浏览器的处理如何保护我的安全?",
|
||||
"answer": "通过完全在您的浏览器内部运行,BentoPDF 确保您的文件从未离开您的设备。这消除了服务器黑客攻击、数据泄露或未经授权访问的风险。您的文件始终属于您。"
|
||||
},
|
||||
"analytics": {
|
||||
"question": "你们使用 Cookie 或分析来跟踪我吗?",
|
||||
"answer": "我们关心您的隐私。BentoPDF 不会跟踪个人信息。我们仅使用 Simple Analytics 查看匿名访问计数。这意味着我们可以知道有多少用户访问我们的网站,但我们永远不知道您是谁。Simple Analytics 完全符合 GDPR 并尊重您的隐私。"
|
||||
}
|
||||
},
|
||||
"testimonials": {
|
||||
"title": "我们的",
|
||||
"users": "用户",
|
||||
"say": "评价"
|
||||
},
|
||||
"support": {
|
||||
"title": "喜欢这个项目?",
|
||||
"description": "BentoPDF 是一个充满激情的项目,旨在为每个人提供免费、私密且强大的 PDF 工具箱。如果您觉得它有用,请考虑支持它的开发。每一杯咖啡都是莫大的支持!",
|
||||
"buyMeCoffee": "请我喝杯咖啡"
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "© 2026 BentoPDF. 保留所有权利。",
|
||||
"version": "版本",
|
||||
"company": "公司",
|
||||
"aboutUs": "关于我们",
|
||||
"faqLink": "常见问题",
|
||||
"contactUs": "联系我们",
|
||||
"legal": "法律",
|
||||
"termsAndConditions": "服务条款",
|
||||
"privacyPolicy": "隐私政策",
|
||||
"followUs": "关注我们"
|
||||
},
|
||||
"merge": {
|
||||
"title": "合并 PDF",
|
||||
"description": "合并整个文件,或选择特定页面合并到新文档中。",
|
||||
"fileMode": "文件模式",
|
||||
"pageMode": "页面模式",
|
||||
"howItWorks": "使用说明:",
|
||||
"fileModeInstructions": [
|
||||
"点击并拖动图标以更改文件的顺序。",
|
||||
"在每个文件的 '页码' 框中,您可以指定范围(例如 '1-3, 5')以仅合并这些页面。",
|
||||
"将 '页码' 框留空以包含该文件的所有页面。"
|
||||
],
|
||||
"pageModeInstructions": [
|
||||
"您上传的 PDF 的所有页面显示在下方。",
|
||||
"只需拖放单个页面缩略图,即可为您新文件对页面进行排序。"
|
||||
],
|
||||
"mergePdfs": "合并 PDF"
|
||||
},
|
||||
"common": {
|
||||
"page": "页",
|
||||
"pages": "页",
|
||||
"of": " / ",
|
||||
"download": "下载",
|
||||
"cancel": "取消",
|
||||
"save": "保存",
|
||||
"delete": "删除",
|
||||
"edit": "编辑",
|
||||
"add": "添加",
|
||||
"remove": "移除",
|
||||
"loading": "加载中...",
|
||||
"error": "错误",
|
||||
"success": "成功",
|
||||
"file": "文件",
|
||||
"files": "文件"
|
||||
},
|
||||
"about": {
|
||||
"hero": {
|
||||
"title": "我们相信 PDF 工具应该是",
|
||||
"subtitle": "快速、私密且免费的。",
|
||||
"noCompromises": "绝不妥协。"
|
||||
},
|
||||
"mission": {
|
||||
"title": "我们的使命",
|
||||
"description": "提供最全面的 PDF 工具箱,尊重您的隐私,且永不收费。我们相信基本的文档工具应该对所有人、在任何地方都触手可及,没有任何障碍。"
|
||||
},
|
||||
"philosophy": {
|
||||
"label": "我们的核心理念",
|
||||
"title": "隐私至上。始终如一。",
|
||||
"description": "在数据被商品化的时代,我们采取不同的方式。BentoPDF 工具的所有处理都在您的浏览器本地进行。这意味着您的文件从未接触我们的服务器,我们从不查看您的文档,也不跟踪您的操作。您的文档保持绝对的私密性。这不仅是一项功能;这是我们的基石。"
|
||||
},
|
||||
"whyBentopdf": {
|
||||
"title": "为什么选择",
|
||||
"speed": {
|
||||
"title": "为速度而生",
|
||||
"description": "无需等待上传或从服务器下载。通过使用 WebAssembly 等现代网络技术直接在您的浏览器中处理文件,我们为所有工具提供了无与伦比的速度。"
|
||||
},
|
||||
"free": {
|
||||
"title": "完全免费",
|
||||
"description": "无试用,无订阅,无隐藏费用,也没有被锁定的 '高级' 功能。我们相信强大的 PDF 工具应该是一种公共设施,而不是盈利中心。"
|
||||
},
|
||||
"noAccount": {
|
||||
"title": "无需账户",
|
||||
"description": "立即开始使用任何工具。我们不需要您的电子邮件、密码或任何个人信息。您的工作流程应该是无摩擦且匿名的。"
|
||||
},
|
||||
"openSource": {
|
||||
"title": "开源精神",
|
||||
"description": "以透明度为核心构建。我们利用了像 PDF-lib 和 PDF.js 这样优秀的开源库,并相信社区驱动的力量能使强大的工具惠及每一个人。"
|
||||
}
|
||||
},
|
||||
"cta": {
|
||||
"title": "准备好开始了吗?",
|
||||
"description": "加入成千上万信任 BentoPDF 满足日常文档需求的用户。体验隐私和性能带来的不同。",
|
||||
"button": "探索所有工具"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "联系我们",
|
||||
"subtitle": "我们很乐意听到您的声音。无论您有问题、反馈还是功能请求,请随时联系我们。",
|
||||
"email": "您可以直接通过电子邮件联系我们:"
|
||||
},
|
||||
"licensing": {
|
||||
"title": "许可适用",
|
||||
"subtitle": "选择适合您需求的许可。"
|
||||
},
|
||||
"multiTool": {
|
||||
"uploadPdfs": "上传 PDF",
|
||||
"upload": "上传",
|
||||
"addBlankPage": "添加空白页",
|
||||
"edit": "编辑:",
|
||||
"undo": "撤销",
|
||||
"redo": "重做",
|
||||
"reset": "重置",
|
||||
"selection": "选择:",
|
||||
"selectAll": "全选",
|
||||
"deselectAll": "取消全选",
|
||||
"rotate": "旋转:",
|
||||
"rotateLeft": "向左",
|
||||
"rotateRight": "向右",
|
||||
"transform": "变换:",
|
||||
"duplicate": "复制",
|
||||
"split": "拆分",
|
||||
"clear": "清除:",
|
||||
"delete": "删除",
|
||||
"download": "下载:",
|
||||
"downloadSelected": "下载选中",
|
||||
"exportPdf": "导出 PDF",
|
||||
"uploadPdfFiles": "选择 PDF 文件",
|
||||
"dragAndDrop": "将 PDF 文件拖放到此处,或点击选择",
|
||||
"selectFiles": "选择文件",
|
||||
"renderingPages": "正在渲染页面...",
|
||||
"actions": {
|
||||
"duplicatePage": "复制此页",
|
||||
"deletePage": "删除此页",
|
||||
"insertPdf": "在此页后插入 PDF",
|
||||
"toggleSplit": "在此页后切换拆分"
|
||||
},
|
||||
"pleaseWait": "请稍候",
|
||||
"pagesRendering": "页面正在渲染中,请稍候...",
|
||||
"noPagesSelected": "未选择页面",
|
||||
"selectOnePage": "请至少选择一页以进行下载。",
|
||||
"noPages": "没有页面",
|
||||
"noPagesToExport": "没有可导出的页面。",
|
||||
"renderingTitle": "正在渲染页面预览",
|
||||
"errorRendering": "渲染页面缩略图失败",
|
||||
"error": "错误",
|
||||
"failedToLoad": "加载失败"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,279 +1,530 @@
|
||||
{
|
||||
"categories": {
|
||||
"popularTools": "热门工具",
|
||||
"editAnnotate": "编辑与注释",
|
||||
"convertToPdf": "转换为 PDF",
|
||||
"convertFromPdf": "从 PDF 转换",
|
||||
"organizeManage": "组织与管理",
|
||||
"optimizeRepair": "优化与修复",
|
||||
"securePdf": "安全 PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF 多功能工具",
|
||||
"subtitle": "在一个统一的界面中合并、分割、组织、删除、旋转、添加空白页、提取和复制。"
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "合并 PDF",
|
||||
"subtitle": "将多个 PDF 合并为一个文件。保留书签。"
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "分割 PDF",
|
||||
"subtitle": "将指定范围的页面提取到新 PDF 中。"
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "压缩 PDF",
|
||||
"subtitle": "减小您的 PDF 文件大小。"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF 编辑器",
|
||||
"subtitle": "注释、高亮、涂黑、评论、添加形状/图片、搜索和查看 PDF。"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG 转 PDF",
|
||||
"subtitle": "从一张或多张 JPG 图片创建 PDF。"
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "签署 PDF",
|
||||
"subtitle": "绘制、键入或上传您的签名。"
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "裁剪 PDF",
|
||||
"subtitle": "修剪 PDF 中每一页的边距。"
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "提取页面",
|
||||
"subtitle": "将选定的页面保存为新文件。"
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "复制与组织",
|
||||
"subtitle": "复制、重新排序和删除页面。"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "删除页面",
|
||||
"subtitle": "自您的文档中移除特定页面。"
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "编辑书签",
|
||||
"subtitle": "添加、编辑、导入、删除和提取 PDF 书签。"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "目录",
|
||||
"subtitle": "根据 PDF 书签生成目录页。"
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "页码",
|
||||
"subtitle": "将页码插入到您的文档中。"
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "添加水印",
|
||||
"subtitle": "在您的 PDF 页面上添加文字或图片水印。"
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "页眉和页脚",
|
||||
"subtitle": "在页面顶部和底部添加文字。"
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "反转颜色",
|
||||
"subtitle": "创建您的 PDF 的“暗黑模式”版本。"
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "背景颜色",
|
||||
"subtitle": "更改您的 PDF 的背景颜色。"
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "更改文本颜色",
|
||||
"subtitle": "更改您 PDF 中文本的颜色。"
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "添加印章",
|
||||
"subtitle": "使用注释工具栏向您的 PDF 添加图片印章。"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "移除注释",
|
||||
"subtitle": "移除评论、高亮和链接。"
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF 表单填写器",
|
||||
"subtitle": "直接在浏览器中填写表单。也支持 XFA 表单。"
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "创建 PDF 表单",
|
||||
"subtitle": "使用拖放文本字段创建可填写的 PDF 表单。"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "移除空白页",
|
||||
"subtitle": "自动检测并删除空白页。"
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "图片转 PDF",
|
||||
"subtitle": "将 JPG, PNG, WebP, BMP, TIFF, SVG, HEIC 转换为 PDF。"
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG 转 PDF",
|
||||
"subtitle": "从一张或多张 PNG 图片创建 PDF。"
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP 转 PDF",
|
||||
"subtitle": "从一张或多张 WebP 图片创建 PDF。"
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG 转 PDF",
|
||||
"subtitle": "从一张或多张 SVG 图片创建 PDF。"
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP 转 PDF",
|
||||
"subtitle": "从一张或多张 BMP 图片创建 PDF。"
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC 转 PDF",
|
||||
"subtitle": "从一张或多张 HEIC 图片创建 PDF。"
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF 转 PDF",
|
||||
"subtitle": "从一张或多张 TIFF 图片创建 PDF。"
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "文本转 PDF",
|
||||
"subtitle": "将纯文本文件转换为 PDF。"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON 转 PDF",
|
||||
"subtitle": "将 JSON 文件转换为 PDF 格式。"
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF 转 JPG",
|
||||
"subtitle": "将每一页 PDF 转换为 JPG 图片。"
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF 转 PNG",
|
||||
"subtitle": "将每一页 PDF 转换为 PNG 图片。"
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF 转 WebP",
|
||||
"subtitle": "将每一页 PDF 转换为 WebP 图片。"
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF 转 BMP",
|
||||
"subtitle": "将每一页 PDF 转换为 BMP 图片。"
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF 转 TIFF",
|
||||
"subtitle": "将每一页 PDF 转换为 TIFF 图片。"
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF 转 灰度",
|
||||
"subtitle": "将所有颜色转换为黑白。"
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF 转 JSON",
|
||||
"subtitle": "将 PDF 文件转换为 JSON 格式。"
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "使 PDF 可搜索和可复制。"
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "交替混合页面",
|
||||
"subtitle": "通过交替每个 PDF 的页面来合并 PDF。保留书签。"
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "添加附件",
|
||||
"subtitle": "将一个或多个文件嵌入到您的 PDF 中。"
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "提取附件",
|
||||
"subtitle": "从 PDF 中提取所有嵌入的文件为 ZIP。"
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "编辑附件",
|
||||
"subtitle": "查看或移除 PDF 中的附件。"
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "分割页面",
|
||||
"subtitle": "水平或垂直分割页面。"
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "添加空白页",
|
||||
"subtitle": "在 PDF 的任意位置插入空白页。"
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "反转页面",
|
||||
"subtitle": "反转文档中所有页面的顺序。"
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "旋转 PDF",
|
||||
"subtitle": "以 90 度增量旋转页面。"
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "将多页排列在单张纸上。"
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "合并为单页",
|
||||
"subtitle": "将所有页面拼接成一个连续的滚动页面。"
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "查看元数据",
|
||||
"subtitle": "检查 PDF 的隐藏属性。"
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "编辑元数据",
|
||||
"subtitle": "更改作者、标题和其他属性。"
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF 转 ZIP",
|
||||
"subtitle": "将多个 PDF 文件打包成一个 ZIP 归档。"
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "比较 PDF",
|
||||
"subtitle": "并排比较两个 PDF。"
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "海报化 PDF",
|
||||
"subtitle": "将大页面分割成多个小页面。"
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "修复页面尺寸",
|
||||
"subtitle": "将所有页面标准化为统一尺寸。"
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "线性化 PDF",
|
||||
"subtitle": "优化 PDF 以便快速网络查看。"
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "页面尺寸",
|
||||
"subtitle": "分析页面大小、方向和单位。"
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "移除限制",
|
||||
"subtitle": "移除与数字签名 PDF 文件相关的密码保护和安全限制。"
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "修复 PDF",
|
||||
"subtitle": "从损坏的 PDF 文件中恢复数据。"
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "加密 PDF",
|
||||
"subtitle": "通过添加密码锁定您的 PDF。"
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "清理 PDF",
|
||||
"subtitle": "移除元数据、注释、脚本等。"
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "解密 PDF",
|
||||
"subtitle": "通过移除密码保护解锁 PDF。"
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "扁平化 PDF",
|
||||
"subtitle": "使表单字段和注释不可编辑。"
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "移除元数据",
|
||||
"subtitle": "从 PDF 中剥离隐藏数据。"
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "更改权限",
|
||||
"subtitle": "设置或更改 PDF 上的用户权限。"
|
||||
}
|
||||
}
|
||||
"categories": {
|
||||
"popularTools": "热门工具",
|
||||
"editAnnotate": "编辑与注释",
|
||||
"convertToPdf": "转换为 PDF",
|
||||
"convertFromPdf": "从 PDF 转换",
|
||||
"organizeManage": "组织与管理",
|
||||
"optimizeRepair": "优化与修复",
|
||||
"securePdf": "安全 PDF"
|
||||
},
|
||||
"pdfMultiTool": {
|
||||
"name": "PDF 多功能工具",
|
||||
"subtitle": "在一个统一的界面中合并、分割、组织、删除、旋转、添加空白页、提取和复制。"
|
||||
},
|
||||
"mergePdf": {
|
||||
"name": "合并 PDF",
|
||||
"subtitle": "将多个 PDF 合并为一个文件。保留书签。"
|
||||
},
|
||||
"splitPdf": {
|
||||
"name": "分割 PDF",
|
||||
"subtitle": "将指定范围的页面提取到新 PDF 中。"
|
||||
},
|
||||
"compressPdf": {
|
||||
"name": "压缩 PDF",
|
||||
"subtitle": "减小您的 PDF 文件大小。",
|
||||
"algorithmLabel": "压缩算法",
|
||||
"condense": "Condense(推荐)",
|
||||
"photon": "Photon(适用于图片较多的 PDF)",
|
||||
"condenseInfo": "Condense 使用高级压缩:移除冗余数据、优化图片、精简字体。适用于大多数 PDF。",
|
||||
"photonInfo": "Photon 将页面转换为图片。适用于图片较多/扫描的 PDF。",
|
||||
"photonWarning": "警告:文本将无法选择,链接将失效。",
|
||||
"levelLabel": "压缩级别",
|
||||
"light": "轻度(保持质量)",
|
||||
"balanced": "平衡(推荐)",
|
||||
"aggressive": "积极(更小文件)",
|
||||
"extreme": "极限(最大压缩)",
|
||||
"grayscale": "转换为灰度",
|
||||
"grayscaleHint": "通过移除颜色信息来减小文件大小",
|
||||
"customSettings": "自定义设置",
|
||||
"customSettingsHint": "微调压缩参数:",
|
||||
"outputQuality": "输出质量",
|
||||
"resizeImagesTo": "调整图片至",
|
||||
"onlyProcessAbove": "仅处理高于",
|
||||
"removeMetadata": "移除元数据",
|
||||
"subsetFonts": "精简字体(移除未使用的字符)",
|
||||
"removeThumbnails": "移除嵌入的缩略图",
|
||||
"compressButton": "压缩 PDF"
|
||||
},
|
||||
"pdfEditor": {
|
||||
"name": "PDF 编辑器",
|
||||
"subtitle": "注释、高亮、涂黑、评论、添加形状/图片、搜索和查看 PDF。"
|
||||
},
|
||||
"jpgToPdf": {
|
||||
"name": "JPG 转 PDF",
|
||||
"subtitle": "从 JPG、JPEG 和 JPEG2000 (JP2/JPX) 图片创建 PDF。"
|
||||
},
|
||||
"signPdf": {
|
||||
"name": "签署 PDF",
|
||||
"subtitle": "绘制、键入或上传您的签名。"
|
||||
},
|
||||
"cropPdf": {
|
||||
"name": "裁剪 PDF",
|
||||
"subtitle": "修剪 PDF 中每一页的边距。"
|
||||
},
|
||||
"extractPages": {
|
||||
"name": "提取页面",
|
||||
"subtitle": "将选定的页面保存为新文件。"
|
||||
},
|
||||
"duplicateOrganize": {
|
||||
"name": "复制与组织",
|
||||
"subtitle": "复制、重新排序和删除页面。"
|
||||
},
|
||||
"deletePages": {
|
||||
"name": "删除页面",
|
||||
"subtitle": "自您的文档中移除特定页面。"
|
||||
},
|
||||
"editBookmarks": {
|
||||
"name": "编辑书签",
|
||||
"subtitle": "添加、编辑、导入、删除和提取 PDF 书签。"
|
||||
},
|
||||
"tableOfContents": {
|
||||
"name": "目录",
|
||||
"subtitle": "根据 PDF 书签生成目录页。"
|
||||
},
|
||||
"pageNumbers": {
|
||||
"name": "页码",
|
||||
"subtitle": "将页码插入到您的文档中。"
|
||||
},
|
||||
"addWatermark": {
|
||||
"name": "添加水印",
|
||||
"subtitle": "在您的 PDF 页面上添加文字或图片水印。"
|
||||
},
|
||||
"headerFooter": {
|
||||
"name": "页眉和页脚",
|
||||
"subtitle": "在页面顶部和底部添加文字。"
|
||||
},
|
||||
"invertColors": {
|
||||
"name": "反转颜色",
|
||||
"subtitle": "创建您的 PDF 的“暗黑模式”版本。"
|
||||
},
|
||||
"backgroundColor": {
|
||||
"name": "背景颜色",
|
||||
"subtitle": "更改您的 PDF 的背景颜色。"
|
||||
},
|
||||
"changeTextColor": {
|
||||
"name": "更改文本颜色",
|
||||
"subtitle": "更改您 PDF 中文本的颜色。"
|
||||
},
|
||||
"addStamps": {
|
||||
"name": "添加印章",
|
||||
"subtitle": "使用注释工具栏向您的 PDF 添加图片印章。"
|
||||
},
|
||||
"removeAnnotations": {
|
||||
"name": "移除注释",
|
||||
"subtitle": "移除评论、高亮和链接。"
|
||||
},
|
||||
"pdfFormFiller": {
|
||||
"name": "PDF 表单填写器",
|
||||
"subtitle": "直接在浏览器中填写表单。也支持 XFA 表单。"
|
||||
},
|
||||
"createPdfForm": {
|
||||
"name": "创建 PDF 表单",
|
||||
"subtitle": "使用拖放文本字段创建可填写的 PDF 表单。"
|
||||
},
|
||||
"removeBlankPages": {
|
||||
"name": "移除空白页",
|
||||
"subtitle": "自动检测并删除空白页。"
|
||||
},
|
||||
"imageToPdf": {
|
||||
"name": "图片转 PDF",
|
||||
"subtitle": "将 JPG, PNG, BMP, GIF, TIFF, PNM, PGM, PBM, PPM, PAM, JXR, JPX, JP2, PSD, SVG, HEIC, WebP 转换为 PDF。"
|
||||
},
|
||||
"pngToPdf": {
|
||||
"name": "PNG 转 PDF",
|
||||
"subtitle": "从一张或多张 PNG 图片创建 PDF。"
|
||||
},
|
||||
"webpToPdf": {
|
||||
"name": "WebP 转 PDF",
|
||||
"subtitle": "从一张或多张 WebP 图片创建 PDF。"
|
||||
},
|
||||
"svgToPdf": {
|
||||
"name": "SVG 转 PDF",
|
||||
"subtitle": "从一张或多张 SVG 图片创建 PDF。"
|
||||
},
|
||||
"bmpToPdf": {
|
||||
"name": "BMP 转 PDF",
|
||||
"subtitle": "从一张或多张 BMP 图片创建 PDF。"
|
||||
},
|
||||
"heicToPdf": {
|
||||
"name": "HEIC 转 PDF",
|
||||
"subtitle": "从一张或多张 HEIC 图片创建 PDF。"
|
||||
},
|
||||
"tiffToPdf": {
|
||||
"name": "TIFF 转 PDF",
|
||||
"subtitle": "从一张或多张 TIFF 图片创建 PDF。"
|
||||
},
|
||||
"textToPdf": {
|
||||
"name": "文本转 PDF",
|
||||
"subtitle": "将纯文本文件转换为 PDF。"
|
||||
},
|
||||
"jsonToPdf": {
|
||||
"name": "JSON 转 PDF",
|
||||
"subtitle": "将 JSON 文件转换为 PDF 格式。"
|
||||
},
|
||||
"pdfToJpg": {
|
||||
"name": "PDF 转 JPG",
|
||||
"subtitle": "将每一页 PDF 转换为 JPG 图片。"
|
||||
},
|
||||
"pdfToPng": {
|
||||
"name": "PDF 转 PNG",
|
||||
"subtitle": "将每一页 PDF 转换为 PNG 图片。"
|
||||
},
|
||||
"pdfToWebp": {
|
||||
"name": "PDF 转 WebP",
|
||||
"subtitle": "将每一页 PDF 转换为 WebP 图片。"
|
||||
},
|
||||
"pdfToBmp": {
|
||||
"name": "PDF 转 BMP",
|
||||
"subtitle": "将每一页 PDF 转换为 BMP 图片。"
|
||||
},
|
||||
"pdfToTiff": {
|
||||
"name": "PDF 转 TIFF",
|
||||
"subtitle": "将每一页 PDF 转换为 TIFF 图片。"
|
||||
},
|
||||
"pdfToGreyscale": {
|
||||
"name": "PDF 转 灰度",
|
||||
"subtitle": "将所有颜色转换为黑白。"
|
||||
},
|
||||
"pdfToJson": {
|
||||
"name": "PDF 转 JSON",
|
||||
"subtitle": "将 PDF 文件转换为 JSON 格式。"
|
||||
},
|
||||
"ocrPdf": {
|
||||
"name": "OCR PDF",
|
||||
"subtitle": "使 PDF 可搜索和可复制。"
|
||||
},
|
||||
"alternateMix": {
|
||||
"name": "交替混合页面",
|
||||
"subtitle": "通过交替每个 PDF 的页面来合并 PDF。保留书签。"
|
||||
},
|
||||
"addAttachments": {
|
||||
"name": "添加附件",
|
||||
"subtitle": "将一个或多个文件嵌入到您的 PDF 中。"
|
||||
},
|
||||
"extractAttachments": {
|
||||
"name": "提取附件",
|
||||
"subtitle": "从 PDF 中提取所有嵌入的文件为 ZIP。"
|
||||
},
|
||||
"editAttachments": {
|
||||
"name": "编辑附件",
|
||||
"subtitle": "查看或移除 PDF 中的附件。"
|
||||
},
|
||||
"dividePages": {
|
||||
"name": "分割页面",
|
||||
"subtitle": "水平或垂直分割页面。"
|
||||
},
|
||||
"addBlankPage": {
|
||||
"name": "添加空白页",
|
||||
"subtitle": "在 PDF 的任意位置插入空白页。"
|
||||
},
|
||||
"reversePages": {
|
||||
"name": "反转页面",
|
||||
"subtitle": "反转文档中所有页面的顺序。"
|
||||
},
|
||||
"rotatePdf": {
|
||||
"name": "旋转 PDF",
|
||||
"subtitle": "以 90 度增量旋转页面。"
|
||||
},
|
||||
"rotateCustom": {
|
||||
"name": "按自定义角度旋转",
|
||||
"subtitle": "按任意自定义角度旋转页面。"
|
||||
},
|
||||
"nUpPdf": {
|
||||
"name": "N-Up PDF",
|
||||
"subtitle": "将多页排列在单张纸上。"
|
||||
},
|
||||
"combineToSinglePage": {
|
||||
"name": "合并为单页",
|
||||
"subtitle": "将所有页面拼接成一个连续的滚动页面。"
|
||||
},
|
||||
"viewMetadata": {
|
||||
"name": "查看元数据",
|
||||
"subtitle": "检查 PDF 的隐藏属性。"
|
||||
},
|
||||
"editMetadata": {
|
||||
"name": "编辑元数据",
|
||||
"subtitle": "更改作者、标题和其他属性。"
|
||||
},
|
||||
"pdfsToZip": {
|
||||
"name": "PDF 转 ZIP",
|
||||
"subtitle": "将多个 PDF 文件打包成一个 ZIP 归档。"
|
||||
},
|
||||
"comparePdfs": {
|
||||
"name": "比较 PDF",
|
||||
"subtitle": "并排比较两个 PDF。"
|
||||
},
|
||||
"posterizePdf": {
|
||||
"name": "海报化 PDF",
|
||||
"subtitle": "将大页面分割成多个小页面。"
|
||||
},
|
||||
"fixPageSize": {
|
||||
"name": "修复页面尺寸",
|
||||
"subtitle": "将所有页面标准化为统一尺寸。"
|
||||
},
|
||||
"linearizePdf": {
|
||||
"name": "线性化 PDF",
|
||||
"subtitle": "优化 PDF 以便快速网络查看。"
|
||||
},
|
||||
"pageDimensions": {
|
||||
"name": "页面尺寸",
|
||||
"subtitle": "分析页面大小、方向和单位。"
|
||||
},
|
||||
"removeRestrictions": {
|
||||
"name": "移除限制",
|
||||
"subtitle": "移除与数字签名 PDF 文件相关的密码保护和安全限制。"
|
||||
},
|
||||
"repairPdf": {
|
||||
"name": "修复 PDF",
|
||||
"subtitle": "从损坏的 PDF 文件中恢复数据。"
|
||||
},
|
||||
"encryptPdf": {
|
||||
"name": "加密 PDF",
|
||||
"subtitle": "通过添加密码锁定您的 PDF。"
|
||||
},
|
||||
"sanitizePdf": {
|
||||
"name": "清理 PDF",
|
||||
"subtitle": "移除元数据、注释、脚本等。"
|
||||
},
|
||||
"decryptPdf": {
|
||||
"name": "解密 PDF",
|
||||
"subtitle": "通过移除密码保护解锁 PDF。"
|
||||
},
|
||||
"flattenPdf": {
|
||||
"name": "扁平化 PDF",
|
||||
"subtitle": "使表单字段和注释不可编辑。"
|
||||
},
|
||||
"removeMetadata": {
|
||||
"name": "移除元数据",
|
||||
"subtitle": "从 PDF 中剥离隐藏数据。"
|
||||
},
|
||||
"changePermissions": {
|
||||
"name": "更改权限",
|
||||
"subtitle": "设置或更改 PDF 上的用户权限。"
|
||||
},
|
||||
"odtToPdf": {
|
||||
"name": "ODT 转 PDF",
|
||||
"subtitle": "将 OpenDocument 文本文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "ODT 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"csvToPdf": {
|
||||
"name": "CSV 转 PDF",
|
||||
"subtitle": "将 CSV 电子表格文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "CSV 件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"rtfToPdf": {
|
||||
"name": "RTF 转 PDF",
|
||||
"subtitle": "将富文本格式文档转换为 PDF。支持多个文件。",
|
||||
"acceptedFormats": "RTF 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"wordToPdf": {
|
||||
"name": "Word 转 PDF",
|
||||
"subtitle": "将 Word 文档 (DOCX, DOC, ODT, RTF) 转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "DOCX, DOC, ODT, RTF 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"excelToPdf": {
|
||||
"name": "Excel 转 PDF",
|
||||
"subtitle": "将 Excel 电子表格 (XLSX, XLS, ODS, CSV) 转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "XLSX, XLS, ODS, CSV 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"powerpointToPdf": {
|
||||
"name": "PowerPoint 转 PDF",
|
||||
"subtitle": "将 PowerPoint 演示文稿 (PPTX, PPT, ODP) 转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "PPTX, PPT, ODP 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"markdownToPdf": {
|
||||
"name": "Markdown 转 PDF",
|
||||
"subtitle": "编写或粘贴 Markdown 并将其导出为精美格式的 PDF。",
|
||||
"paneMarkdown": "Markdown",
|
||||
"panePreview": "预览",
|
||||
"btnUpload": "上传",
|
||||
"btnSyncScroll": "同步滚动",
|
||||
"btnSettings": "设置",
|
||||
"btnExportPdf": "导出 PDF",
|
||||
"settingsTitle": "Markdown 设置",
|
||||
"settingsPreset": "预设",
|
||||
"presetDefault": "默认 (GFM 风格)",
|
||||
"presetCommonmark": "CommonMark (严格)",
|
||||
"presetZero": "最小 (无功能)",
|
||||
"settingsOptions": "Markdown 选项",
|
||||
"optAllowHtml": "允许 HTML 标签",
|
||||
"optBreaks": "将换行转换为 <br>",
|
||||
"optLinkify": "自动将 URL 转换为链接",
|
||||
"optTypographer": "排版器 (智能引号等)"
|
||||
},
|
||||
"pdfBooklet": {
|
||||
"name": "PDF 小册子",
|
||||
"subtitle": "重新排列页面用于双面小册子打印。折叠并装订以创建小册子。",
|
||||
"howItWorks": "工作原理:",
|
||||
"step1": "上传 PDF 文件。",
|
||||
"step2": "页面将按小册子顺序重新排列。",
|
||||
"step3": "双面打印,短边翻转,折叠并装订。",
|
||||
"paperSize": "纸张大小",
|
||||
"orientation": "方向",
|
||||
"portrait": "纵向",
|
||||
"landscape": "横向",
|
||||
"pagesPerSheet": "每张页数",
|
||||
"createBooklet": "创建小册子",
|
||||
"processing": "处理中...",
|
||||
"pageCount": "如需要,页数将补齐为 4 的倍数。"
|
||||
},
|
||||
"xpsToPdf": {
|
||||
"name": "XPS 转 PDF",
|
||||
"subtitle": "将 XPS/OXPS 文档转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "XPS, OXPS 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"mobiToPdf": {
|
||||
"name": "MOBI 转 PDF",
|
||||
"subtitle": "将 MOBI 电子书转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "MOBI 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"epubToPdf": {
|
||||
"name": "EPUB 转 PDF",
|
||||
"subtitle": "将 EPUB 电子书转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "EPUB 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"fb2ToPdf": {
|
||||
"name": "FB2 转 PDF",
|
||||
"subtitle": "将 FictionBook (FB2) 电子书转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "FB2 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"cbzToPdf": {
|
||||
"name": "CBZ 转 PDF",
|
||||
"subtitle": "将漫画档案 (CBZ/CBR) 转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "CBZ, CBR 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"wpdToPdf": {
|
||||
"name": "WPD 转 PDF",
|
||||
"subtitle": "将 WordPerfect 文档 (WPD) 转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "WPD 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"wpsToPdf": {
|
||||
"name": "WPS 转 PDF",
|
||||
"subtitle": "将 WPS Office 文档转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "WPS 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"xmlToPdf": {
|
||||
"name": "XML 转 PDF",
|
||||
"subtitle": "将 XML 文档转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "XML 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"pagesToPdf": {
|
||||
"name": "Pages 转 PDF",
|
||||
"subtitle": "将 Apple Pages 文档转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "Pages 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"odgToPdf": {
|
||||
"name": "ODG 转 PDF",
|
||||
"subtitle": "将 OpenDocument Graphics (ODG) 文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "ODG 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"odsToPdf": {
|
||||
"name": "ODS 转 PDF",
|
||||
"subtitle": "将 OpenDocument Spreadsheet (ODS) 文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "ODS 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"odpToPdf": {
|
||||
"name": "ODP 转 PDF",
|
||||
"subtitle": "将 OpenDocument Presentation (ODP) 文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "ODP 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"pubToPdf": {
|
||||
"name": "PUB 转 PDF",
|
||||
"subtitle": "将 Microsoft Publisher (PUB) 文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "PUB 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"vsdToPdf": {
|
||||
"name": "VSD 转 PDF",
|
||||
"subtitle": "将 Microsoft Visio (VSD, VSDX) 文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "VSD, VSDX 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"psdToPdf": {
|
||||
"name": "PSD 转 PDF",
|
||||
"subtitle": "将 Adobe Photoshop (PSD) 文件转换为 PDF 格式。支持多个文件。",
|
||||
"acceptedFormats": "PSD 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"pdfToSvg": {
|
||||
"name": "PDF 转 SVG",
|
||||
"subtitle": "将 PDF 文件的每一页转换为可缩放矢量图形 (SVG),在任何尺寸下都能保持完美质量。"
|
||||
},
|
||||
"extractTables": {
|
||||
"name": "提取 PDF 表格",
|
||||
"subtitle": "从 PDF 文件中提取表格,并导出为 CSV、JSON 或 Markdown 格式。"
|
||||
},
|
||||
"pdfToCsv": {
|
||||
"name": "PDF 转 CSV",
|
||||
"subtitle": "从 PDF 中提取表格并转换为 CSV 格式。"
|
||||
},
|
||||
"pdfToExcel": {
|
||||
"name": "PDF 转 Excel",
|
||||
"subtitle": "从 PDF 中提取表格并转换为 Excel (XLSX) 格式。"
|
||||
},
|
||||
"pdfToText": {
|
||||
"name": "PDF 转 文本",
|
||||
"subtitle": "从 PDF 文件中提取文本并保存为纯文本文件 (.txt)。支持多个文件。",
|
||||
"note": "此工具仅适用于数字创建的 PDF。对于扫描文档或基于图像的 PDF,请使用我们的 OCR PDF 工具。",
|
||||
"convertButton": "提取文本"
|
||||
},
|
||||
"digitalSignPdf": {
|
||||
"name": "PDF 数字签名",
|
||||
"pageTitle": "PDF 数字签名 - 添加加密签名 | BentoPDF",
|
||||
"subtitle": "使用 X.509 证书为您的 PDF 添加加密数字签名。支持 PKCS#12 (.pfx, .p12) 和 PEM 格式。您的私钥永远不会离开您的浏览器。",
|
||||
"certificateSection": "证书",
|
||||
"uploadCert": "上传证书 (.pfx, .p12)",
|
||||
"certPassword": "证书密码",
|
||||
"certPasswordPlaceholder": "输入证书密码",
|
||||
"certInfo": "证书信息",
|
||||
"certSubject": "主体",
|
||||
"certIssuer": "颁发者",
|
||||
"certValidity": "有效期",
|
||||
"signatureDetails": "签名详情(可选)",
|
||||
"reason": "原因",
|
||||
"reasonPlaceholder": "例如:我批准此文档",
|
||||
"location": "位置",
|
||||
"locationPlaceholder": "例如:北京,中国",
|
||||
"contactInfo": "联系信息",
|
||||
"contactPlaceholder": "例如:email@example.com",
|
||||
"applySignature": "应用数字签名",
|
||||
"successMessage": "PDF 签名成功!签名可在任何 PDF 阅读器中验证。"
|
||||
},
|
||||
"validateSignaturePdf": {
|
||||
"name": "验证 PDF 签名",
|
||||
"pageTitle": "验证 PDF 签名 - 验证数字签名 | BentoPDF",
|
||||
"subtitle": "验证您的 PDF 文件中的数字签名。检查证书有效性、查看签名者详情并确认文档完整性。所有处理都在您的浏览器中进行。"
|
||||
},
|
||||
"emailToPdf": {
|
||||
"name": "邮件转 PDF",
|
||||
"subtitle": "将电子邮件文件 (EML, MSG) 转换为 PDF 格式。支持 Outlook 导出和标准邮件格式。",
|
||||
"acceptedFormats": "EML, MSG 文件",
|
||||
"convertButton": "转换为 PDF"
|
||||
},
|
||||
"fontToOutline": {
|
||||
"name": "字体转轮廓",
|
||||
"subtitle": "将所有字体转换为矢量轮廓,确保在所有设备上一致呈现。"
|
||||
},
|
||||
"deskewPdf": {
|
||||
"name": "校正 PDF",
|
||||
"subtitle": "使用 OpenCV 自动校正倾斜的扫描页面。"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,120 +1,123 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html dir="ltr" mozdisallowselectionprint>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="google" content="notranslate">
|
||||
<title>PDF Form Filler - Bento PDF</title>
|
||||
<link rel="stylesheet" href="pdf_viewer.css">
|
||||
<link rel="stylesheet" href="viewer.css">
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: auto;
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 48px;
|
||||
background-color: #323639;
|
||||
box-shadow: 0 1px 4px rgba(0,0,0,0.3);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
z-index: 1000;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.toolbar button {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
border: none;
|
||||
color: #fff;
|
||||
padding: 8px 12px;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.toolbar button:hover {
|
||||
background-color: rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.toolbar button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.toolbar .page-info {
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.toolbar input[type="number"] {
|
||||
width: 60px;
|
||||
padding: 4px 8px;
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
border: 1px solid rgba(255,255,255,0.2);
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
top: 48px;
|
||||
}
|
||||
|
||||
#viewer {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.page {
|
||||
margin: 10px auto;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 0 4px 10px rgba(0,0,0,0.5);
|
||||
}
|
||||
|
||||
.toolbar .spacer {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.toolbar .zoom-controls {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.toolbar select {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
border: 1px solid rgba(255,255,255,0.2);
|
||||
color: #fff;
|
||||
padding: 6px 10px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toolbar select option {
|
||||
background-color: #323639;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Print styles */
|
||||
/* @media print {
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1"
|
||||
/>
|
||||
<meta name="google" content="notranslate" />
|
||||
<title>PDF Form Filler - Bento PDF</title>
|
||||
<link rel="stylesheet" href="pdf_viewer.css" />
|
||||
<link rel="stylesheet" href="viewer.css" />
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: auto;
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 48px;
|
||||
background-color: #323639;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
z-index: 1000;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.toolbar button {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: none;
|
||||
color: #fff;
|
||||
padding: 8px 12px;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.toolbar button:hover {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.toolbar button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.toolbar .page-info {
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.toolbar input[type='number'] {
|
||||
width: 60px;
|
||||
padding: 4px 8px;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
top: 48px;
|
||||
}
|
||||
|
||||
#viewer {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.page {
|
||||
margin: 10px auto;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
|
||||
.toolbar .spacer {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.toolbar .zoom-controls {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.toolbar select {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
color: #fff;
|
||||
padding: 6px 10px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toolbar select option {
|
||||
background-color: #323639;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* Print styles */
|
||||
/* @media print {
|
||||
.toolbar {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -131,212 +134,244 @@
|
||||
margin: 0 auto !important;
|
||||
}
|
||||
} */
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="toolbar">
|
||||
<button id="previousPage" title="Previous Page">‹</button>
|
||||
<input type="number" id="pageNumber" min="1" value="1">
|
||||
<span class="page-info">/ <span id="numPages">--</span></span>
|
||||
<button id="nextPage" title="Next Page">›</button>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
<div class="zoom-controls">
|
||||
<button id="zoomOut" title="Zoom Out">−</button>
|
||||
<select id="scaleSelect">
|
||||
<option value="auto">Auto</option>
|
||||
<option value="page-fit">Fit Page</option>
|
||||
<option value="page-width">Fit Width</option>
|
||||
<option value="0.5">50%</option>
|
||||
<option value="0.75">75%</option>
|
||||
<option value="1" selected>100%</option>
|
||||
<option value="1.25">125%</option>
|
||||
<option value="1.5">150%</option>
|
||||
<option value="2">200%</option>
|
||||
</select>
|
||||
<button id="zoomIn" title="Zoom In">+</button>
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="toolbar">
|
||||
<button id="previousPage" title="Previous Page">‹</button>
|
||||
<input type="number" id="pageNumber" min="1" value="1" />
|
||||
<span class="page-info">/ <span id="numPages">--</span></span>
|
||||
<button id="nextPage" title="Next Page">›</button>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
<div class="zoom-controls">
|
||||
<button id="zoomOut" title="Zoom Out">−</button>
|
||||
<select id="scaleSelect">
|
||||
<option value="auto">Auto</option>
|
||||
<option value="page-fit">Fit Page</option>
|
||||
<option value="page-width">Fit Width</option>
|
||||
<option value="0.5">50%</option>
|
||||
<option value="0.75">75%</option>
|
||||
<option value="1" selected>100%</option>
|
||||
<option value="1.25">125%</option>
|
||||
<option value="1.5">150%</option>
|
||||
<option value="2">200%</option>
|
||||
</select>
|
||||
<button id="zoomIn" title="Zoom In">+</button>
|
||||
</div>
|
||||
|
||||
<button id="print" title="Print to PDF">Print to PDF</button>
|
||||
<button id="download" title="Save & Download">Download</button>
|
||||
</div>
|
||||
|
||||
<button id="print" title="Print to PDF">Print to PDF</button>
|
||||
<button id="download" title="Save & Download">Download</button>
|
||||
</div>
|
||||
|
||||
<div id="viewerContainer">
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
<script type="module">
|
||||
import * as pdfjsLib from './pdf.mjs';
|
||||
import { EventBus, PDFViewer, PDFLinkService, PDFScriptingManager } from './pdf_viewer.mjs';
|
||||
<div id="viewerContainer">
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.mjs';
|
||||
<script type="module">
|
||||
import * as pdfjsLib from './pdf.mjs';
|
||||
import {
|
||||
EventBus,
|
||||
PDFViewer,
|
||||
PDFLinkService,
|
||||
PDFScriptingManager,
|
||||
} from './pdf_viewer.mjs';
|
||||
|
||||
const eventBus = new EventBus();
|
||||
const linkService = new PDFLinkService({ eventBus });
|
||||
|
||||
// Create scripting manager for XFA forms with JavaScript
|
||||
const scriptingManager = new PDFScriptingManager({
|
||||
eventBus,
|
||||
// Use the packaged sandbox for PDF.js JavaScript (required for XFA)
|
||||
sandboxBundleSrc: './pdf.sandbox.mjs',
|
||||
docProperties: async (pdfDocument) => {
|
||||
// Minimal doc properties are fine; XFA scripts mostly need field objects
|
||||
return {
|
||||
title: '',
|
||||
author: '',
|
||||
subject: '',
|
||||
keywords: '',
|
||||
creator: '',
|
||||
producer: '',
|
||||
creationDate: null,
|
||||
modDate: null
|
||||
};
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.mjs';
|
||||
|
||||
const eventBus = new EventBus();
|
||||
const linkService = new PDFLinkService({ eventBus });
|
||||
|
||||
// Create scripting manager for XFA forms with JavaScript
|
||||
const scriptingManager = new PDFScriptingManager({
|
||||
eventBus,
|
||||
// Use the packaged sandbox for PDF.js JavaScript (required for XFA)
|
||||
sandboxBundleSrc: './pdf.sandbox.mjs',
|
||||
docProperties: async (pdfDocument) => {
|
||||
// Minimal doc properties are fine; XFA scripts mostly need field objects
|
||||
return {
|
||||
title: '',
|
||||
author: '',
|
||||
subject: '',
|
||||
keywords: '',
|
||||
creator: '',
|
||||
producer: '',
|
||||
creationDate: null,
|
||||
modDate: null,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
const pdfViewer = new PDFViewer({
|
||||
container: document.getElementById('viewerContainer'),
|
||||
viewer: document.getElementById('viewer'),
|
||||
eventBus,
|
||||
linkService,
|
||||
scriptingManager,
|
||||
renderer: 'canvas',
|
||||
});
|
||||
|
||||
linkService.setViewer(pdfViewer);
|
||||
scriptingManager.setViewer(pdfViewer);
|
||||
|
||||
let pdfDocument = null;
|
||||
let currentScale = 1.0;
|
||||
|
||||
// Listen for messages from parent window
|
||||
window.addEventListener('message', async (event) => {
|
||||
if (event.data.type === 'loadPDF') {
|
||||
const { data } = event.data;
|
||||
loadPDF(data);
|
||||
} else if (event.data.type === 'getData') {
|
||||
const pdfData = await getPDFData();
|
||||
window.parent.postMessage({ type: 'pdfData', data: pdfData }, '*');
|
||||
}
|
||||
});
|
||||
|
||||
async function loadPDF(data) {
|
||||
try {
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
data,
|
||||
enableXfa: true,
|
||||
});
|
||||
pdfDocument = await loadingTask.promise;
|
||||
// Wire scripting to the loaded document so XFA/JS executes
|
||||
await scriptingManager.setDocument(pdfDocument);
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
linkService.setDocument(pdfDocument);
|
||||
|
||||
document.getElementById('numPages').textContent =
|
||||
pdfDocument.numPages;
|
||||
document.getElementById('pageNumber').max = pdfDocument.numPages;
|
||||
|
||||
// Notify parent that PDF is loaded
|
||||
window.parent.postMessage(
|
||||
{ type: 'pdfLoaded', numPages: pdfDocument.numPages },
|
||||
'*'
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error loading PDF:', error);
|
||||
window.parent.postMessage(
|
||||
{ type: 'error', message: error.message },
|
||||
'*'
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
const pdfViewer = new PDFViewer({
|
||||
container: document.getElementById('viewerContainer'),
|
||||
viewer: document.getElementById('viewer'),
|
||||
eventBus,
|
||||
linkService,
|
||||
scriptingManager,
|
||||
renderer: 'canvas'
|
||||
});
|
||||
|
||||
linkService.setViewer(pdfViewer);
|
||||
scriptingManager.setViewer(pdfViewer);
|
||||
|
||||
let pdfDocument = null;
|
||||
let currentScale = 1.0;
|
||||
async function getPDFData() {
|
||||
if (!pdfDocument) return null;
|
||||
|
||||
// Listen for messages from parent window
|
||||
window.addEventListener('message', async (event) => {
|
||||
if (event.data.type === 'loadPDF') {
|
||||
const { data } = event.data;
|
||||
loadPDF(data);
|
||||
} else if (event.data.type === 'getData') {
|
||||
const pdfData = await getPDFData();
|
||||
window.parent.postMessage({ type: 'pdfData', data: pdfData }, '*');
|
||||
// Check if this is an XFA form
|
||||
if (pdfDocument.isPureXfa) {
|
||||
console.warn(
|
||||
'Pure XFA form detected - saving with filled data is not supported'
|
||||
);
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'error',
|
||||
message:
|
||||
'XFA forms cannot be saved with filled data. Please print to PDF instead.',
|
||||
},
|
||||
'*'
|
||||
);
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
// For AcroForms, saveDocument() should work
|
||||
const data = await pdfDocument.saveDocument();
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error('Error saving PDF document:', error);
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'error',
|
||||
message:
|
||||
'Failed to save PDF. This may be an XFA form or protected PDF.',
|
||||
},
|
||||
'*'
|
||||
);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
async function loadPDF(data) {
|
||||
try {
|
||||
const loadingTask = pdfjsLib.getDocument({
|
||||
data,
|
||||
enableXfa: true,
|
||||
});
|
||||
pdfDocument = await loadingTask.promise;
|
||||
// Wire scripting to the loaded document so XFA/JS executes
|
||||
await scriptingManager.setDocument(pdfDocument);
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
linkService.setDocument(pdfDocument);
|
||||
|
||||
document.getElementById('numPages').textContent = pdfDocument.numPages;
|
||||
document.getElementById('pageNumber').max = pdfDocument.numPages;
|
||||
|
||||
// Notify parent that PDF is loaded
|
||||
window.parent.postMessage({ type: 'pdfLoaded', numPages: pdfDocument.numPages }, '*');
|
||||
} catch (error) {
|
||||
console.error('Error loading PDF:', error);
|
||||
window.parent.postMessage({ type: 'error', message: error.message }, '*');
|
||||
}
|
||||
}
|
||||
// Navigation controls
|
||||
document.getElementById('previousPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber > 1) {
|
||||
pdfViewer.currentPageNumber--;
|
||||
}
|
||||
});
|
||||
|
||||
async function getPDFData() {
|
||||
if (!pdfDocument) return null;
|
||||
|
||||
// Check if this is an XFA form
|
||||
if (pdfDocument.isPureXfa) {
|
||||
console.warn('Pure XFA form detected - saving with filled data is not supported');
|
||||
window.parent.postMessage({
|
||||
type: 'error',
|
||||
message: 'XFA forms cannot be saved with filled data. Please print to PDF instead.'
|
||||
}, '*');
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
// For AcroForms, saveDocument() should work
|
||||
const data = await pdfDocument.saveDocument();
|
||||
return data;
|
||||
} catch (error) {
|
||||
console.error('Error saving PDF document:', error);
|
||||
window.parent.postMessage({
|
||||
type: 'error',
|
||||
message: 'Failed to save PDF. This may be an XFA form or protected PDF.'
|
||||
}, '*');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
document.getElementById('nextPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber < pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber++;
|
||||
}
|
||||
});
|
||||
|
||||
// Navigation controls
|
||||
document.getElementById('previousPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber > 1) {
|
||||
pdfViewer.currentPageNumber--;
|
||||
}
|
||||
});
|
||||
document.getElementById('pageNumber').addEventListener('change', (e) => {
|
||||
const pageNum = parseInt(e.target.value);
|
||||
if (pageNum >= 1 && pageNum <= pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber = pageNum;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('nextPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber < pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber++;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('pageNumber').addEventListener('change', (e) => {
|
||||
const pageNum = parseInt(e.target.value);
|
||||
if (pageNum >= 1 && pageNum <= pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber = pageNum;
|
||||
}
|
||||
});
|
||||
|
||||
// Zoom controls
|
||||
document.getElementById('zoomIn').addEventListener('click', () => {
|
||||
currentScale = Math.min(currentScale + 0.1, 3.0);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
document.getElementById('zoomOut').addEventListener('click', () => {
|
||||
currentScale = Math.max(currentScale - 0.1, 0.1);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
document.getElementById('scaleSelect').addEventListener('change', (e) => {
|
||||
const value = e.target.value;
|
||||
if (value === 'auto' || value === 'page-fit' || value === 'page-width') {
|
||||
pdfViewer.currentScaleValue = value;
|
||||
} else {
|
||||
currentScale = parseFloat(value);
|
||||
// Zoom controls
|
||||
document.getElementById('zoomIn').addEventListener('click', () => {
|
||||
currentScale = Math.min(currentScale + 0.1, 3.0);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
}
|
||||
});
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
// Print button - trigger browser print
|
||||
document.getElementById('print').addEventListener('click', () => {
|
||||
if (!pdfDocument) return;
|
||||
window.print();
|
||||
});
|
||||
|
||||
// Download button
|
||||
document.getElementById('download').addEventListener('click', async () => {
|
||||
const data = await getPDFData();
|
||||
if (data) {
|
||||
window.parent.postMessage({ type: 'downloadPDF', data: Array.from(data) }, '*');
|
||||
}
|
||||
});
|
||||
document.getElementById('zoomOut').addEventListener('click', () => {
|
||||
currentScale = Math.max(currentScale - 0.1, 0.1);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
// Update page number display when page changes
|
||||
eventBus.on('pagechanging', (evt) => {
|
||||
document.getElementById('pageNumber').value = evt.pageNumber;
|
||||
document.getElementById('previousPage').disabled = evt.pageNumber <= 1;
|
||||
document.getElementById('nextPage').disabled = evt.pageNumber >= pdfDocument?.numPages;
|
||||
});
|
||||
document.getElementById('scaleSelect').addEventListener('change', (e) => {
|
||||
const value = e.target.value;
|
||||
if (
|
||||
value === 'auto' ||
|
||||
value === 'page-fit' ||
|
||||
value === 'page-width'
|
||||
) {
|
||||
pdfViewer.currentScaleValue = value;
|
||||
} else {
|
||||
currentScale = parseFloat(value);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
}
|
||||
});
|
||||
|
||||
// Notify parent that viewer is ready
|
||||
window.parent.postMessage({ type: 'viewerReady' }, '*');
|
||||
</script>
|
||||
</body>
|
||||
// Print button - trigger browser print
|
||||
document.getElementById('print').addEventListener('click', () => {
|
||||
if (!pdfDocument) return;
|
||||
window.print();
|
||||
});
|
||||
|
||||
// Download button
|
||||
document
|
||||
.getElementById('download')
|
||||
.addEventListener('click', async () => {
|
||||
const data = await getPDFData();
|
||||
if (data) {
|
||||
window.parent.postMessage(
|
||||
{ type: 'downloadPDF', data: Array.from(data) },
|
||||
'*'
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// Update page number display when page changes
|
||||
eventBus.on('pagechanging', (evt) => {
|
||||
document.getElementById('pageNumber').value = evt.pageNumber;
|
||||
document.getElementById('previousPage').disabled = evt.pageNumber <= 1;
|
||||
document.getElementById('nextPage').disabled =
|
||||
evt.pageNumber >= pdfDocument?.numPages;
|
||||
});
|
||||
|
||||
// Notify parent that viewer is ready
|
||||
window.parent.postMessage({ type: 'viewerReady' }, '*');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,353 +1,390 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html dir="ltr" mozdisallowselectionprint>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<meta name="google" content="notranslate">
|
||||
<title>PDF Signer - Bento PDF</title>
|
||||
<link rel="stylesheet" href="pdf_viewer.css">
|
||||
<link rel="stylesheet" href="viewer.css">
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: auto;
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 48px;
|
||||
background-color: #323639;
|
||||
box-shadow: 0 1px 4px rgba(0,0,0,0.3);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
z-index: 1000;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.toolbar button {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
border: none;
|
||||
color: #fff;
|
||||
padding: 8px 12px;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.toolbar button:hover {
|
||||
background-color: rgba(255,255,255,0.2);
|
||||
}
|
||||
|
||||
.toolbar button.active {
|
||||
background-color: #4f46e5;
|
||||
}
|
||||
|
||||
.toolbar button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.toolbar .page-info {
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.toolbar input[type="number"] {
|
||||
width: 60px;
|
||||
padding: 4px 8px;
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
border: 1px solid rgba(255,255,255,0.2);
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
top: 48px;
|
||||
}
|
||||
|
||||
#viewer {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.page {
|
||||
margin: 10px auto;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 0 4px 10px rgba(0,0,0,0.5);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.toolbar .spacer {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.toolbar .zoom-controls {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.toolbar select {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
border: 1px solid rgba(255,255,255,0.2);
|
||||
color: #fff;
|
||||
padding: 6px 10px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toolbar select option {
|
||||
background-color: #323639;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.toolbar-separator {
|
||||
width: 1px;
|
||||
height: 24px;
|
||||
background-color: rgba(255,255,255,0.2);
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
.editor-button {
|
||||
padding: 6px 8px !important;
|
||||
min-width: 32px;
|
||||
}
|
||||
|
||||
.editor-button.active {
|
||||
background-color: #4f46e5 !important;
|
||||
}
|
||||
|
||||
.editor-button svg {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="width=device-width, initial-scale=1, maximum-scale=1"
|
||||
/>
|
||||
<meta name="google" content="notranslate" />
|
||||
<title>PDF Signer - Bento PDF</title>
|
||||
<link rel="stylesheet" href="pdf_viewer.css" />
|
||||
<link rel="stylesheet" href="viewer.css" />
|
||||
<style>
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: sans-serif;
|
||||
background-color: #525252;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="toolbar">
|
||||
<button id="previousPage" title="Previous Page">‹</button>
|
||||
<input type="number" id="pageNumber" min="1" value="1">
|
||||
<span class="page-info">/ <span id="numPages">--</span></span>
|
||||
<button id="nextPage" title="Next Page">›</button>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
<!-- Annotation Editor Tools -->
|
||||
<div class="toolbar-separator"></div>
|
||||
<button id="editorInk" class="editor-button" title="Draw">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
||||
<path d="M13.5 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h11zm-11 4a.5.5 0 0 0-.5.5v2a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-11zm0 4a.5.5 0 0 0-.5.5v2a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-11z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button id="editorFreeText" class="editor-button" title="Add Text">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
||||
<path d="M5 0v3H0v10h16V3h-5V0H5zm9 12H2V4h12v8z"/>
|
||||
<text x="5" y="10" font-family="Arial" font-size="6" fill="currentColor">A</text>
|
||||
</svg>
|
||||
</button>
|
||||
<button id="editorStamp" class="editor-button" title="Add Image/Signature">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
||||
<path d="M2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zm0 1a1 1 0 0 0-1 1v10l3-3 2.5 2.5L12 6l3 3V2a1 1 0 0 0-1-1H2z"/>
|
||||
<circle cx="4.5" cy="4.5" r="1.5"/>
|
||||
</svg>
|
||||
</button>
|
||||
<button id="editorNone" class="editor-button" title="Disable Editing">✕</button>
|
||||
<div class="toolbar-separator"></div>
|
||||
|
||||
<div class="zoom-controls">
|
||||
<button id="zoomOut" title="Zoom Out">−</button>
|
||||
<select id="scaleSelect">
|
||||
<option value="auto">Auto</option>
|
||||
<option value="page-fit">Fit Page</option>
|
||||
<option value="page-width">Fit Width</option>
|
||||
<option value="0.5">50%</option>
|
||||
<option value="0.75">75%</option>
|
||||
<option value="1" selected>100%</option>
|
||||
<option value="1.25">125%</option>
|
||||
<option value="1.5">150%</option>
|
||||
<option value="2">200%</option>
|
||||
</select>
|
||||
<button id="zoomIn" title="Zoom In">+</button>
|
||||
#viewerContainer {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow: auto;
|
||||
background-color: #404040;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 48px;
|
||||
background-color: #323639;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
z-index: 1000;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.toolbar button {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: none;
|
||||
color: #fff;
|
||||
padding: 8px 12px;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.toolbar button:hover {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.toolbar button.active {
|
||||
background-color: #4f46e5;
|
||||
}
|
||||
|
||||
.toolbar button:disabled {
|
||||
opacity: 0.5;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.toolbar .page-info {
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
.toolbar input[type='number'] {
|
||||
width: 60px;
|
||||
padding: 4px 8px;
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
color: #fff;
|
||||
border-radius: 4px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#viewerContainer {
|
||||
top: 48px;
|
||||
}
|
||||
|
||||
#viewer {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.page {
|
||||
margin: 10px auto;
|
||||
border: 1px solid #999;
|
||||
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.5);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.toolbar .spacer {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.toolbar .zoom-controls {
|
||||
display: flex;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.toolbar select {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
color: #fff;
|
||||
padding: 6px 10px;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.toolbar select option {
|
||||
background-color: #323639;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.toolbar-separator {
|
||||
width: 1px;
|
||||
height: 24px;
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
margin: 0 8px;
|
||||
}
|
||||
|
||||
.editor-button {
|
||||
padding: 6px 8px !important;
|
||||
min-width: 32px;
|
||||
}
|
||||
|
||||
.editor-button.active {
|
||||
background-color: #4f46e5 !important;
|
||||
}
|
||||
|
||||
.editor-button svg {
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="toolbar">
|
||||
<button id="previousPage" title="Previous Page">‹</button>
|
||||
<input type="number" id="pageNumber" min="1" value="1" />
|
||||
<span class="page-info">/ <span id="numPages">--</span></span>
|
||||
<button id="nextPage" title="Next Page">›</button>
|
||||
|
||||
<div class="spacer"></div>
|
||||
|
||||
<!-- Annotation Editor Tools -->
|
||||
<div class="toolbar-separator"></div>
|
||||
<button id="editorInk" class="editor-button" title="Draw">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
||||
<path
|
||||
d="M13.5 0a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-2a.5.5 0 0 1 .5-.5h11zm-11 4a.5.5 0 0 0-.5.5v2a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-11zm0 4a.5.5 0 0 0-.5.5v2a.5.5 0 0 0 .5.5h11a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-11z"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
<button id="editorFreeText" class="editor-button" title="Add Text">
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
||||
<path d="M5 0v3H0v10h16V3h-5V0H5zm9 12H2V4h12v8z" />
|
||||
<text
|
||||
x="5"
|
||||
y="10"
|
||||
font-family="Arial"
|
||||
font-size="6"
|
||||
fill="currentColor"
|
||||
>
|
||||
A
|
||||
</text>
|
||||
</svg>
|
||||
</button>
|
||||
<button
|
||||
id="editorStamp"
|
||||
class="editor-button"
|
||||
title="Add Image/Signature"
|
||||
>
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
||||
<path
|
||||
d="M2 0h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zm0 1a1 1 0 0 0-1 1v10l3-3 2.5 2.5L12 6l3 3V2a1 1 0 0 0-1-1H2z"
|
||||
/>
|
||||
<circle cx="4.5" cy="4.5" r="1.5" />
|
||||
</svg>
|
||||
</button>
|
||||
<button id="editorNone" class="editor-button" title="Disable Editing">
|
||||
✕
|
||||
</button>
|
||||
<div class="toolbar-separator"></div>
|
||||
|
||||
<div class="zoom-controls">
|
||||
<button id="zoomOut" title="Zoom Out">−</button>
|
||||
<select id="scaleSelect">
|
||||
<option value="auto">Auto</option>
|
||||
<option value="page-fit">Fit Page</option>
|
||||
<option value="page-width">Fit Width</option>
|
||||
<option value="0.5">50%</option>
|
||||
<option value="0.75">75%</option>
|
||||
<option value="1" selected>100%</option>
|
||||
<option value="1.25">125%</option>
|
||||
<option value="1.5">150%</option>
|
||||
<option value="2">200%</option>
|
||||
</select>
|
||||
<button id="zoomIn" title="Zoom In">+</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="viewerContainer">
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
<script type="module">
|
||||
import * as pdfjsLib from './pdf.mjs';
|
||||
import { EventBus, PDFViewer, PDFLinkService } from './pdf_viewer.mjs';
|
||||
<div id="viewerContainer">
|
||||
<div id="viewer" class="pdfViewer"></div>
|
||||
</div>
|
||||
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.mjs';
|
||||
<script type="module">
|
||||
import * as pdfjsLib from './pdf.mjs';
|
||||
import { EventBus, PDFViewer, PDFLinkService } from './pdf_viewer.mjs';
|
||||
|
||||
const eventBus = new EventBus();
|
||||
const linkService = new PDFLinkService({ eventBus });
|
||||
|
||||
const pdfViewer = new PDFViewer({
|
||||
container: document.getElementById('viewerContainer'),
|
||||
viewer: document.getElementById('viewer'),
|
||||
eventBus,
|
||||
linkService,
|
||||
annotationEditorMode: 1,
|
||||
enableScripting: true,
|
||||
renderer: 'canvas'
|
||||
});
|
||||
|
||||
linkService.setViewer(pdfViewer);
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.mjs';
|
||||
|
||||
let pdfDocument = null;
|
||||
let currentScale = 1.0;
|
||||
const eventBus = new EventBus();
|
||||
const linkService = new PDFLinkService({ eventBus });
|
||||
|
||||
// Listen for messages from parent window
|
||||
window.addEventListener('message', async (event) => {
|
||||
console.log('Sign viewer received message:', event.data.type);
|
||||
|
||||
if (event.data.type === 'loadPDF') {
|
||||
console.log('Loading PDF, data size:', event.data.data?.byteLength || event.data.data?.length);
|
||||
const { data } = event.data;
|
||||
loadPDF(data);
|
||||
} else if (event.data.type === 'save') {
|
||||
console.log('Save requested');
|
||||
// Save the PDF with annotations
|
||||
const data = await pdfDocument.saveDocument();
|
||||
if (data) {
|
||||
console.log('Sending PDF data back, size:', data.byteLength);
|
||||
window.parent.postMessage({
|
||||
type: 'downloadPDF',
|
||||
data: Array.from(data)
|
||||
}, '*');
|
||||
}
|
||||
}
|
||||
});
|
||||
const pdfViewer = new PDFViewer({
|
||||
container: document.getElementById('viewerContainer'),
|
||||
viewer: document.getElementById('viewer'),
|
||||
eventBus,
|
||||
linkService,
|
||||
annotationEditorMode: 1,
|
||||
enableScripting: true,
|
||||
renderer: 'canvas',
|
||||
});
|
||||
|
||||
async function loadPDF(data) {
|
||||
try {
|
||||
console.log('loadPDF called');
|
||||
const loadingTask = pdfjsLib.getDocument({ data });
|
||||
pdfDocument = await loadingTask.promise;
|
||||
console.log('PDF document loaded, pages:', pdfDocument.numPages);
|
||||
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
linkService.setDocument(pdfDocument);
|
||||
pdfViewer.currentScaleValue = 'page-width';
|
||||
|
||||
document.getElementById('numPages').textContent = pdfDocument.numPages;
|
||||
document.getElementById('pageNumber').max = pdfDocument.numPages;
|
||||
|
||||
console.log('Notifying parent: pdfLoaded');
|
||||
// Notify parent that PDF is loaded
|
||||
window.parent.postMessage({ type: 'pdfLoaded', numPages: pdfDocument.numPages }, '*');
|
||||
} catch (error) {
|
||||
console.error('Error loading PDF:', error);
|
||||
window.parent.postMessage({ type: 'error', message: error.message }, '*');
|
||||
}
|
||||
}
|
||||
linkService.setViewer(pdfViewer);
|
||||
|
||||
let pdfDocument = null;
|
||||
let currentScale = 1.0;
|
||||
|
||||
// Navigation controls
|
||||
document.getElementById('previousPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber > 1) {
|
||||
pdfViewer.currentPageNumber--;
|
||||
}
|
||||
});
|
||||
// Listen for messages from parent window
|
||||
window.addEventListener('message', async (event) => {
|
||||
console.log('Sign viewer received message:', event.data.type);
|
||||
|
||||
document.getElementById('nextPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber < pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber++;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('pageNumber').addEventListener('change', (e) => {
|
||||
const pageNum = parseInt(e.target.value);
|
||||
if (pageNum >= 1 && pageNum <= pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber = pageNum;
|
||||
}
|
||||
});
|
||||
|
||||
// Zoom controls
|
||||
document.getElementById('zoomIn').addEventListener('click', () => {
|
||||
currentScale = Math.min(currentScale + 0.1, 3.0);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
document.getElementById('zoomOut').addEventListener('click', () => {
|
||||
currentScale = Math.max(currentScale - 0.1, 0.1);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
document.getElementById('scaleSelect').addEventListener('change', (e) => {
|
||||
const value = e.target.value;
|
||||
if (value === 'auto' || value === 'page-fit' || value === 'page-width') {
|
||||
pdfViewer.currentScaleValue = value;
|
||||
} else {
|
||||
currentScale = parseFloat(value);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
}
|
||||
});
|
||||
|
||||
// Annotation Editor Mode buttons
|
||||
// AnnotationEditorType values from PDF.js:
|
||||
// DISABLE: -1, NONE: 0, FREETEXT: 3, HIGHLIGHT: 9, STAMP: 13, INK: 15
|
||||
const editorButtons = {
|
||||
editorInk: 15, // INK - for drawing/signing
|
||||
editorFreeText: 3, // FREETEXT - for text
|
||||
editorStamp: 13, // STAMP - for images
|
||||
editorNone: -1 // DISABLE editing
|
||||
};
|
||||
|
||||
Object.entries(editorButtons).forEach(([buttonId, mode]) => {
|
||||
const button = document.getElementById(buttonId);
|
||||
if (!button) return;
|
||||
|
||||
button.addEventListener('click', () => {
|
||||
console.log('Setting annotation editor mode to:', mode);
|
||||
|
||||
// Set the annotation editor mode
|
||||
if (pdfViewer) {
|
||||
pdfViewer.annotationEditorMode = mode;
|
||||
}
|
||||
|
||||
// Update active state
|
||||
document.querySelectorAll('.editor-button').forEach(btn => {
|
||||
btn.classList.remove('active');
|
||||
});
|
||||
if (mode !== -1 && mode !== 0) {
|
||||
button.classList.add('active');
|
||||
if (event.data.type === 'loadPDF') {
|
||||
console.log(
|
||||
'Loading PDF, data size:',
|
||||
event.data.data?.byteLength || event.data.data?.length
|
||||
);
|
||||
const { data } = event.data;
|
||||
loadPDF(data);
|
||||
} else if (event.data.type === 'save') {
|
||||
console.log('Save requested');
|
||||
// Save the PDF with annotations
|
||||
const data = await pdfDocument.saveDocument();
|
||||
if (data) {
|
||||
console.log('Sending PDF data back, size:', data.byteLength);
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: 'downloadPDF',
|
||||
data: Array.from(data),
|
||||
},
|
||||
'*'
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Update page number display when page changes
|
||||
eventBus.on('pagechanging', (evt) => {
|
||||
document.getElementById('pageNumber').value = evt.pageNumber;
|
||||
document.getElementById('previousPage').disabled = evt.pageNumber <= 1;
|
||||
document.getElementById('nextPage').disabled = evt.pageNumber >= pdfDocument?.numPages;
|
||||
});
|
||||
async function loadPDF(data) {
|
||||
try {
|
||||
console.log('loadPDF called');
|
||||
const loadingTask = pdfjsLib.getDocument({ data });
|
||||
pdfDocument = await loadingTask.promise;
|
||||
console.log('PDF document loaded, pages:', pdfDocument.numPages);
|
||||
|
||||
// Notify parent that viewer is ready
|
||||
console.log('Sign viewer initialized, notifying parent: viewerReady');
|
||||
window.parent.postMessage({ type: 'viewerReady' }, '*');
|
||||
</script>
|
||||
</body>
|
||||
pdfViewer.setDocument(pdfDocument);
|
||||
linkService.setDocument(pdfDocument);
|
||||
pdfViewer.currentScaleValue = 'page-width';
|
||||
|
||||
document.getElementById('numPages').textContent =
|
||||
pdfDocument.numPages;
|
||||
document.getElementById('pageNumber').max = pdfDocument.numPages;
|
||||
|
||||
console.log('Notifying parent: pdfLoaded');
|
||||
// Notify parent that PDF is loaded
|
||||
window.parent.postMessage(
|
||||
{ type: 'pdfLoaded', numPages: pdfDocument.numPages },
|
||||
'*'
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error loading PDF:', error);
|
||||
window.parent.postMessage(
|
||||
{ type: 'error', message: error.message },
|
||||
'*'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Navigation controls
|
||||
document.getElementById('previousPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber > 1) {
|
||||
pdfViewer.currentPageNumber--;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('nextPage').addEventListener('click', () => {
|
||||
if (pdfViewer.currentPageNumber < pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber++;
|
||||
}
|
||||
});
|
||||
|
||||
document.getElementById('pageNumber').addEventListener('change', (e) => {
|
||||
const pageNum = parseInt(e.target.value);
|
||||
if (pageNum >= 1 && pageNum <= pdfDocument?.numPages) {
|
||||
pdfViewer.currentPageNumber = pageNum;
|
||||
}
|
||||
});
|
||||
|
||||
// Zoom controls
|
||||
document.getElementById('zoomIn').addEventListener('click', () => {
|
||||
currentScale = Math.min(currentScale + 0.1, 3.0);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
document.getElementById('zoomOut').addEventListener('click', () => {
|
||||
currentScale = Math.max(currentScale - 0.1, 0.1);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
document.getElementById('scaleSelect').value = currentScale.toFixed(2);
|
||||
});
|
||||
|
||||
document.getElementById('scaleSelect').addEventListener('change', (e) => {
|
||||
const value = e.target.value;
|
||||
if (
|
||||
value === 'auto' ||
|
||||
value === 'page-fit' ||
|
||||
value === 'page-width'
|
||||
) {
|
||||
pdfViewer.currentScaleValue = value;
|
||||
} else {
|
||||
currentScale = parseFloat(value);
|
||||
pdfViewer.currentScale = currentScale;
|
||||
}
|
||||
});
|
||||
|
||||
// Annotation Editor Mode buttons
|
||||
// AnnotationEditorType values from PDF.js:
|
||||
// DISABLE: -1, NONE: 0, FREETEXT: 3, HIGHLIGHT: 9, STAMP: 13, INK: 15
|
||||
const editorButtons = {
|
||||
editorInk: 15, // INK - for drawing/signing
|
||||
editorFreeText: 3, // FREETEXT - for text
|
||||
editorStamp: 13, // STAMP - for images
|
||||
editorNone: -1, // DISABLE editing
|
||||
};
|
||||
|
||||
Object.entries(editorButtons).forEach(([buttonId, mode]) => {
|
||||
const button = document.getElementById(buttonId);
|
||||
if (!button) return;
|
||||
|
||||
button.addEventListener('click', () => {
|
||||
console.log('Setting annotation editor mode to:', mode);
|
||||
|
||||
// Set the annotation editor mode
|
||||
if (pdfViewer) {
|
||||
pdfViewer.annotationEditorMode = mode;
|
||||
}
|
||||
|
||||
// Update active state
|
||||
document.querySelectorAll('.editor-button').forEach((btn) => {
|
||||
btn.classList.remove('active');
|
||||
});
|
||||
if (mode !== -1 && mode !== 0) {
|
||||
button.classList.add('active');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Update page number display when page changes
|
||||
eventBus.on('pagechanging', (evt) => {
|
||||
document.getElementById('pageNumber').value = evt.pageNumber;
|
||||
document.getElementById('previousPage').disabled = evt.pageNumber <= 1;
|
||||
document.getElementById('nextPage').disabled =
|
||||
evt.pageNumber >= pdfDocument?.numPages;
|
||||
});
|
||||
|
||||
// Notify parent that viewer is ready
|
||||
console.log('Sign viewer initialized, notifying parent: viewerReady');
|
||||
window.parent.postMessage({ type: 'viewerReady' }, '*');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
40
public/robots.txt
Normal file
@@ -0,0 +1,40 @@
|
||||
# BentoPDF Robots.txt
|
||||
# https://www.bentopdf.com
|
||||
|
||||
# Allow all crawlers
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
# Sitemap location
|
||||
Sitemap: https://www.bentopdf.com/sitemap.xml
|
||||
|
||||
# Disallow internal/system paths
|
||||
Disallow: /api/
|
||||
Disallow: /_next/
|
||||
Disallow: /assets/
|
||||
Disallow: /src/
|
||||
Disallow: /*.wasm$
|
||||
Disallow: /*.wasm.gz$
|
||||
Disallow: /*.data.gz$
|
||||
Disallow: /*.br$
|
||||
|
||||
# Disallow temporary/upload directories
|
||||
Disallow: /tmp/
|
||||
Disallow: /temp/
|
||||
Disallow: /uploads/
|
||||
|
||||
# Disallow docs internal files (but allow /docs/ pages)
|
||||
Disallow: /docs/assets/
|
||||
|
||||
# Crawl delay for polite crawling
|
||||
Crawl-delay: 1
|
||||
|
||||
# Google-specific
|
||||
User-agent: Googlebot
|
||||
Allow: /
|
||||
Crawl-delay: 0
|
||||
|
||||
# Bing-specific
|
||||
User-agent: Bingbot
|
||||
Allow: /
|
||||
Crawl-delay: 1
|
||||
45
public/site.webmanifest
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"name": "BentoPDF",
|
||||
"short_name": "BentoPDF",
|
||||
"description": "Free online PDF tools - Privacy-first PDF toolkit that works 100% in your browser",
|
||||
"start_url": "/",
|
||||
"display": "standalone",
|
||||
"background_color": "#262d3b",
|
||||
"theme_color": "#4f46e5",
|
||||
"orientation": "portrait-primary",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/images/favicon-192x192.png",
|
||||
"sizes": "192x192",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable any"
|
||||
},
|
||||
{
|
||||
"src": "/images/favicon-512x512.png",
|
||||
"sizes": "512x512",
|
||||
"type": "image/png",
|
||||
"purpose": "maskable any"
|
||||
},
|
||||
{
|
||||
"src": "/images/apple-touch-icon.png",
|
||||
"sizes": "180x180",
|
||||
"type": "image/png",
|
||||
"purpose": "any"
|
||||
}
|
||||
],
|
||||
"categories": [
|
||||
"productivity",
|
||||
"utilities",
|
||||
"privacy",
|
||||
"pdf",
|
||||
"security",
|
||||
"offline",
|
||||
"tools"
|
||||
],
|
||||
"screenshots": [],
|
||||
"share_target": {
|
||||
"action": "/",
|
||||
"method": "GET",
|
||||
"enctype": "application/x-www-form-urlencoded"
|
||||
}
|
||||
}
|
||||
23962
public/sitemap.xml
Normal file
297
public/sw.js
Normal file
@@ -0,0 +1,297 @@
|
||||
/**
|
||||
* BentoPDF Service Worker
|
||||
* Caches WASM files and static assets for offline support and faster loading
|
||||
* Supports both local and CDN delivery with deduplication
|
||||
* Version: 1.1.0
|
||||
*/
|
||||
|
||||
const CACHE_VERSION = 'bentopdf-v7';
|
||||
const CACHE_NAME = `${CACHE_VERSION}-static`;
|
||||
|
||||
|
||||
const getBasePath = () => {
|
||||
const scope = self.registration?.scope || self.location.href;
|
||||
const url = new URL(scope);
|
||||
return url.pathname.replace(/\/$/, '') || '';
|
||||
};
|
||||
|
||||
const buildCriticalAssets = (basePath) => [
|
||||
`${basePath}/pymupdf-wasm/pyodide.js`,
|
||||
`${basePath}/pymupdf-wasm/pyodide.asm.js`,
|
||||
`${basePath}/pymupdf-wasm/pyodide.asm.wasm`,
|
||||
`${basePath}/pymupdf-wasm/python_stdlib.zip`,
|
||||
`${basePath}/pymupdf-wasm/pyodide-lock.json`,
|
||||
|
||||
`${basePath}/pymupdf-wasm/pymupdf-1.26.3-cp313-none-pyodide_2025_0_wasm32.whl`,
|
||||
`${basePath}/pymupdf-wasm/numpy-2.2.5-cp313-cp313-pyodide_2025_0_wasm32.whl`,
|
||||
`${basePath}/pymupdf-wasm/opencv_python-4.11.0.86-cp313-cp313-pyodide_2025_0_wasm32.whl`,
|
||||
`${basePath}/pymupdf-wasm/lxml-5.4.0-cp313-cp313-pyodide_2025_0_wasm32.whl`,
|
||||
`${basePath}/pymupdf-wasm/python_docx-1.2.0-py3-none-any.whl`,
|
||||
`${basePath}/pymupdf-wasm/pdf2docx-0.5.8-py3-none-any.whl`,
|
||||
`${basePath}/pymupdf-wasm/fonttools-4.56.0-py3-none-any.whl`,
|
||||
`${basePath}/pymupdf-wasm/typing_extensions-4.12.2-py3-none-any.whl`,
|
||||
`${basePath}/pymupdf-wasm/pymupdf4llm-0.0.27-py3-none-any.whl`,
|
||||
|
||||
`${basePath}/ghostscript-wasm/gs.js`,
|
||||
`${basePath}/ghostscript-wasm/gs.wasm`,
|
||||
];
|
||||
|
||||
self.addEventListener('install', (event) => {
|
||||
const basePath = getBasePath();
|
||||
const CRITICAL_ASSETS = buildCriticalAssets(basePath);
|
||||
// console.log('🚀 [ServiceWorker] Installing version:', CACHE_VERSION);
|
||||
// console.log('📍 [ServiceWorker] Base path detected:', basePath || '/');
|
||||
// console.log('📦 [ServiceWorker] Will cache', CRITICAL_ASSETS.length, 'critical assets');
|
||||
|
||||
event.waitUntil(
|
||||
caches.open(CACHE_NAME)
|
||||
.then((cache) => {
|
||||
// console.log('[ServiceWorker] Caching critical assets...');
|
||||
return cacheInBatches(cache, CRITICAL_ASSETS, 5);
|
||||
})
|
||||
.then(() => {
|
||||
// console.log('✅ [ServiceWorker] All critical assets cached successfully!');
|
||||
// console.log('⏭️ [ServiceWorker] Skipping waiting, activating immediately...');
|
||||
return self.skipWaiting();
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('[ServiceWorker] Cache installation failed:', error);
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('activate', (event) => {
|
||||
// console.log('🔄 [ServiceWorker] Activating version:', CACHE_VERSION);
|
||||
|
||||
event.waitUntil(
|
||||
caches.keys()
|
||||
.then((cacheNames) => {
|
||||
return Promise.all(
|
||||
cacheNames.map((cacheName) => {
|
||||
if (cacheName.startsWith('bentopdf-') && cacheName !== CACHE_NAME) {
|
||||
// console.log('[ServiceWorker] Deleting old cache:', cacheName);
|
||||
return caches.delete(cacheName);
|
||||
}
|
||||
})
|
||||
);
|
||||
})
|
||||
.then(() => {
|
||||
// console.log('✅ [ServiceWorker] Activated successfully!');
|
||||
// console.log('🎯 [ServiceWorker] Taking control of all pages...');
|
||||
return self.clients.claim();
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', (event) => {
|
||||
const url = new URL(event.request.url);
|
||||
|
||||
const isCDN = url.hostname === 'cdn.jsdelivr.net';
|
||||
const isLocal = url.origin === location.origin;
|
||||
|
||||
if (!isLocal && !isCDN) {
|
||||
return;
|
||||
}
|
||||
if (isLocal && (url.searchParams.has('t') || url.searchParams.has('import') || url.searchParams.has('direct'))) {
|
||||
// console.log('🔧 [Dev Mode] Skipping Vite HMR request:', url.pathname);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isLocal && (url.pathname.includes('/@vite') || url.pathname.includes('/@id') || url.pathname.includes('/@fs'))) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (shouldCache(url.pathname, isCDN)) {
|
||||
event.respondWith(cacheFirstStrategyWithDedup(event.request, isCDN));
|
||||
} else if (isLocal && (url.pathname.endsWith('.html') || url.pathname === '/')) {
|
||||
event.respondWith(networkFirstStrategy(event.request));
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Cache-first strategy with deduplication
|
||||
* Ensures we only cache CDN OR local version, never both
|
||||
*/
|
||||
async function cacheFirstStrategyWithDedup(request, isCDN) {
|
||||
const url = new URL(request.url);
|
||||
const fileName = url.pathname.split('/').pop();
|
||||
|
||||
try {
|
||||
const cachedResponse = await findCachedFile(fileName);
|
||||
if (cachedResponse) {
|
||||
// console.log('⚡ [Cache HIT] Instant load:', fileName);
|
||||
return cachedResponse;
|
||||
}
|
||||
|
||||
// console.log(`📥 [Cache MISS] Downloading from ${isCDN ? 'CDN' : 'local'}:`, fileName);
|
||||
|
||||
const networkResponse = await fetch(request);
|
||||
|
||||
if (networkResponse && networkResponse.status === 200) {
|
||||
const cache = await caches.open(CACHE_NAME);
|
||||
|
||||
await removeDuplicateCache(cache, fileName, isCDN);
|
||||
|
||||
await cache.put(request, networkResponse.clone());
|
||||
// console.log(`💾 [Cached from ${isCDN ? 'CDN' : 'local'}] Saved:`, fileName);
|
||||
}
|
||||
|
||||
return networkResponse;
|
||||
} catch (error) {
|
||||
if (isCDN) {
|
||||
console.warn(`⚠️ [CDN Failed] Trying local fallback for: ${fileName}`);
|
||||
const basePath = getBasePath();
|
||||
const localPath = getLocalPathForCDNUrl(url.pathname);
|
||||
|
||||
if (localPath) {
|
||||
const localUrl = `${basePath}${localPath}${fileName}`;
|
||||
try {
|
||||
const fallbackResponse = await fetch(localUrl);
|
||||
if (fallbackResponse && fallbackResponse.status === 200) {
|
||||
const cache = await caches.open(CACHE_NAME);
|
||||
await cache.put(localUrl, fallbackResponse.clone());
|
||||
// console.log('✅ [Fallback Success] Cached local version:', fileName);
|
||||
return fallbackResponse;
|
||||
}
|
||||
} catch (fallbackError) {
|
||||
console.error('[ServiceWorker] Both CDN and local failed for:', fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
async function findCachedFile(fileName) {
|
||||
const cache = await caches.open(CACHE_NAME);
|
||||
const requests = await cache.keys();
|
||||
|
||||
for (const req of requests) {
|
||||
const reqUrl = new URL(req.url);
|
||||
if (reqUrl.pathname.endsWith(fileName)) {
|
||||
return await cache.match(req);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
async function removeDuplicateCache(cache, fileName, isCDN) {
|
||||
const requests = await cache.keys();
|
||||
|
||||
for (const req of requests) {
|
||||
const reqUrl = new URL(req.url);
|
||||
if (reqUrl.pathname.endsWith(fileName)) {
|
||||
// If caching CDN version, remove local version (and vice versa)
|
||||
const reqIsCDN = reqUrl.hostname === 'cdn.jsdelivr.net';
|
||||
if (reqIsCDN !== isCDN) {
|
||||
await cache.delete(req);
|
||||
// console.log(`[Dedup] Removed ${reqIsCDN ? 'CDN' : 'local'} version of:`, fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Network-first strategy: Try network first, fallback to cache
|
||||
* Perfect for HTML files that might update
|
||||
*/
|
||||
async function networkFirstStrategy(request) {
|
||||
try {
|
||||
const networkResponse = await fetch(request);
|
||||
|
||||
if (networkResponse && networkResponse.status === 200) {
|
||||
const cache = await caches.open(CACHE_NAME);
|
||||
cache.put(request, networkResponse.clone());
|
||||
}
|
||||
|
||||
return networkResponse;
|
||||
} catch (error) {
|
||||
const cachedResponse = await caches.match(request);
|
||||
if (cachedResponse) {
|
||||
// console.log('[Offline Mode] Serving from cache:', request.url.split('/').pop());
|
||||
return cachedResponse;
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Map CDN URL path to local path
|
||||
* Returns the local directory path for a given CDN package
|
||||
*/
|
||||
function getLocalPathForCDNUrl(pathname) {
|
||||
if (pathname.includes('/@bentopdf/pymupdf-wasm')) {
|
||||
return '/pymupdf-wasm/';
|
||||
}
|
||||
if (pathname.includes('/@bentopdf/gs-wasm')) {
|
||||
return '/ghostscript-wasm/';
|
||||
}
|
||||
if (pathname.includes('/@matbee/libreoffice-converter')) {
|
||||
return '/libreoffice-wasm/';
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a URL should be cached
|
||||
* Handles both local and CDN URLs
|
||||
*/
|
||||
function shouldCache(pathname, isCDN = false) {
|
||||
if (isCDN) {
|
||||
return (
|
||||
pathname.includes('/@bentopdf/pymupdf-wasm') ||
|
||||
pathname.includes('/@bentopdf/gs-wasm') ||
|
||||
pathname.includes('/@matbee/libreoffice-converter') ||
|
||||
pathname.match(/\.(wasm|whl|zip|json|js|gz)$/)
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
pathname.includes('/libreoffice-wasm/') ||
|
||||
pathname.includes('/pymupdf-wasm/') ||
|
||||
pathname.includes('/ghostscript-wasm/') ||
|
||||
pathname.includes('/embedpdf/') ||
|
||||
pathname.includes('/assets/') ||
|
||||
pathname.match(/\.(js|mjs|css|wasm|whl|zip|json|png|jpg|jpeg|gif|svg|woff|woff2|ttf|gz|br)$/)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cache assets in batches to avoid overwhelming the browser
|
||||
*/
|
||||
async function cacheInBatches(cache, urls, batchSize = 5) {
|
||||
for (let i = 0; i < urls.length; i += batchSize) {
|
||||
const batch = urls.slice(i, i + batchSize);
|
||||
// console.log(`[ServiceWorker] Caching batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(urls.length / batchSize)}`);
|
||||
|
||||
await Promise.all(
|
||||
batch.map(async (url) => {
|
||||
try {
|
||||
await cache.add(url);
|
||||
const fileName = url.split('/').pop();
|
||||
const fileSize = fileName.includes('.wasm') || fileName.includes('.whl') ? '(large file)' : '';
|
||||
// console.log(` ✓ Cached: ${fileName} ${fileSize}`);
|
||||
} catch (error) {
|
||||
console.warn('[ServiceWorker] Failed to cache:', url, error.message);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
self.addEventListener('message', (event) => {
|
||||
if (event.data && event.data.type === 'SKIP_WAITING') {
|
||||
self.skipWaiting();
|
||||
}
|
||||
|
||||
if (event.data && event.data.type === 'CLEAR_CACHE') {
|
||||
event.waitUntil(
|
||||
caches.delete(CACHE_NAME).then(() => {
|
||||
console.log('[ServiceWorker] Cache cleared');
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// console.log('🎉 [ServiceWorker] Script loaded successfully! Ready to cache assets.');
|
||||
// console.log('📊 [ServiceWorker] Cache version:', CACHE_VERSION);
|
||||