From af28e30e4c4def9aa38e5bee458a217a7118f6dd Mon Sep 17 00:00:00 2001 From: adrielCarmoUFMS <141935947+adrielCarmoUFMS@users.noreply.github.com> Date: Fri, 11 Aug 2023 09:23:04 -0400 Subject: [PATCH 001/147] Update messages_pt_BR.properties updating new properties for the pt-BR language --- src/main/resources/messages_pt_BR.properties | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 7112ddf1..500a7d55 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -313,6 +313,7 @@ sanitizePDF.selectText.5=Remover fontes sanitizePDF.submit=Sanitizar PDF #addPageNumbers +autoCrop.title=Adicionar Números de Página addPageNumbers.title=Adicionar Números de Página addPageNumbers.header=Adicionar Números de Página addPageNumbers.selectText.1=Selecionar arquivo PDF: @@ -514,13 +515,13 @@ rotate.submit=Girar split.title=Dividir PDF split.header=Dividir PDF split.desc.1=Os números selecionados correspondem às páginas onde você deseja fazer a divisão. -split.desc.2,3,4,5,6,7,8=Por exemplo, selecionar 1,3,7-8 dividirá um documento de 10 páginas em 6 PDFs separados da seguinte forma: -split.desc.2=Documento 1: Página 1 -split.desc.3=Documento 2: Páginas 2 e 3 -split.desc.4=Documento 3: Páginas 4, 5 e 6 -split.desc.5=Documento 4: Página 7 -split.desc.6=Documento 5: Página 8 -split.desc.7=Documento 6: Páginas 9 e 10 +split.desc.2=Por exemplo, selecionar 1,3,7-8 dividirá um documento de 10 páginas em 6 PDFs separados da seguinte forma: +split.desc.3=Documento Nº1: Página 1 +split.desc.4=Documento Nº2: Páginas 2 e 3 +split.desc.5=Documento Nº3: Páginas 4, 5 e 6 +split.desc.6=Documento Nº4: Página 7 +split.desc.7=Documento Nº5: Página 8 +split.desc.8=Documento Nº6: Páginas 9 e 10 split.splitPages=Digite as páginas para a divisão: split.submit=Dividir @@ -579,6 +580,8 @@ watermark.selectText.4=Rotação (0-360) watermark.selectText.5=Espaçamento Horizontal (widthSpacer) watermark.selectText.6=Espaçamento Vertical (heightSpacer) watermark.selectText.7=Opacidade (0% - 100%) +watermark.selectText.8=Tipo de Marca d'Água +watermark.selectText.9=Imagem da Marca d'Água watermark.submit=Adicionar Marca d'Água #remove-watermark From 8a54035a9fc94bcab2abdff68872172477cf90ca Mon Sep 17 00:00:00 2001 From: adrielCarmoUFMS <141935947+adrielCarmoUFMS@users.noreply.github.com> Date: Fri, 11 Aug 2023 10:21:13 -0400 Subject: [PATCH 002/147] Update messages_pt_BR.properties Update messages_pt_BR.properties --- src/main/resources/messages_pt_BR.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 500a7d55..21640a5d 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -220,8 +220,8 @@ home.sanitizePdf.title=Sanitizar home.sanitizePdf.desc=Remover scripts e outros elementos de arquivos PDF sanitizePdf.tags=limpar,seguro,protegido,remover-ameaças -home.URLToPDF.title=URL/Site para PDF -home.URLToPDF.desc=Converte qualquer URL http(s) para PDF +home.URLToPDF.title=Converter Site para PDF +home.URLToPDF.desc=Converte qualquer página da internet para um arquivo PDF URLToPDF.tags=captura-de-web,salvar-página,web-para-doc,arquivar home.HTMLToPDF.title=HTML para PDF From 6f325b5fdbfa8831a92d8f94b681e0cceab273f4 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 12 Aug 2023 02:29:10 +0100 Subject: [PATCH 003/147] init --- build.gradle | 5 + mydatabase.mv.db | Bin 0 -> 24576 bytes mydatabase.trace.db | 382 ++++++++++++++++++ .../software/SPDF/SPdfApplication.java | 2 + .../software/SPDF/config/AppConfig.java | 11 + .../SPDF/config/CleanUrlInterceptor.java | 6 +- .../SPDF/controller/api/UserController.java | 28 ++ .../controller/web/GeneralWebController.java | 21 + .../software/SPDF/model/Authority.java | 52 +++ .../stirling/software/SPDF/model/User.java | 62 +++ .../SPDF/repository/AuthorityRepository.java | 12 + .../SPDF/repository/UserRepository.java | 12 + src/main/resources/application.properties | 15 +- src/main/resources/messages_en_GB.properties | 9 + .../resources/templates/fragments/navbar.html | 43 ++ src/main/resources/templates/home.html | 3 + src/main/resources/templates/login.html | 58 +++ 17 files changed, 718 insertions(+), 3 deletions(-) create mode 100644 mydatabase.mv.db create mode 100644 mydatabase.trace.db create mode 100644 src/main/java/stirling/software/SPDF/controller/api/UserController.java create mode 100644 src/main/java/stirling/software/SPDF/model/Authority.java create mode 100644 src/main/java/stirling/software/SPDF/model/User.java create mode 100644 src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java create mode 100644 src/main/java/stirling/software/SPDF/repository/UserRepository.java create mode 100644 src/main/resources/templates/login.html diff --git a/build.gradle b/build.gradle index 5e95460f..23fa8fd6 100644 --- a/build.gradle +++ b/build.gradle @@ -48,7 +48,12 @@ dependencies { implementation 'org.yaml:snakeyaml:2.1' implementation 'org.springframework.boot:spring-boot-starter-web:3.1.2' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.1.2' + implementation 'org.springframework.boot:spring-boot-starter-security:3.1.2' testImplementation 'org.springframework.boot:spring-boot-starter-test:3.1.2' + implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE' + implementation "org.springframework.boot:spring-boot-starter-data-jpa" + implementation "com.h2database:h2" + // https://mvnrepository.com/artifact/org.apache.pdfbox/jbig2-imageio implementation group: 'org.apache.pdfbox', name: 'jbig2-imageio', version: '3.0.4' implementation 'commons-io:commons-io:2.13.0' diff --git a/mydatabase.mv.db b/mydatabase.mv.db new file mode 100644 index 0000000000000000000000000000000000000000..aab84074cda225de298492153178d5a3242b5ee1 GIT binary patch literal 24576 zcmeI3O>^708OKREjupplXEL*w9y(mbd2v^(;j2h$dRR)LEY`A=CFvwOX~DO|6It@e za%%5s5B&(e?5(}_&{Hq{5N%KGt<#Uvg5VqULR(hsZaWKSh9pQ3c<{#~5I^8ayT+HD z;n@99{gcbr3z1|qA0T}uT}xP0E!44wkRr+pokJzloVEQgaBTspbA(SUI0bmL|!aP zK5zl2f}$L_oT|u9QE?PCd=_1(EW8K+FY&AhFC0NtMNm|Efd?YI18Wpq+4GC4S5;V5 z2#Np%fRi|>=mW=Rd08w5A~a1@m8av$yUKgMa{BRnI-d9yQThQrrjc;Pp}6xdg1 z{$1rM&($@(th|n5GkgzK7*@8|0xq=V>e*aoXqY+vbz)MI>%nH^Z}YjQu%t@;YU*o~ z3Ajq$TBRZPVC2RFWaKKf&$nZFt2YW%fudK6{PiH)Omq>G~X0Or`Qefp; z|6WByey-P`H+0611%DoJm^%Vzd-dViG5x@w_#@Zf3x7UeuJX!}KLsc^MQ!YD^=bNN z)I&I)RyZj-RX4*FkB$O5O6VBfm(jI?jw(7j=;)%OhmQWk5jgcLgI#nw8F~I?h2wUx zlo};q140*kjGn**Y*l&9AxUyHwps4dC&O-4p0?w0=^{D989NAt8#d$dYdX@wSO ziFRn0mJ6Iz;Hnf=`2Mj{pdL|=&|C!iv6o)?=~b|G3V&6V6YpU-_o#5uiH}ZFbaJDU z_eVOO)o@-M+bEW!ShgnmA&%VbuZ4q$i1quL1wQX+bgVUZ|>Yo zMw7Fdxfx$oRX4LYnyN+Sfgefenrm(xHaE_$7 ziNP{S6`I?Lr>C4GOJb5>dDpA%h%%~bCcyz#OrLNLd>KwEzN4t}Kj8T*ihg6GNk)M& z(U}~G0z?6#z$YuP$lpuj={a7Ng{tJ-8AZnhZ6{yK`7aNgq29>59pIN$DvO=-}@t^SjvSqDXx#KFhe&+@LcliGu;eWUsK=?mghgkyh z@#-`V@;^TQe>lVcPD=f5dgZOf|4t5{;&i$i|5q33l#>GmWIT;82jD#IVm$3EgH??G z-Pm4!j;C|&&FB9Rrf2tN;NpcUVD@6m0l2-`_6_GI)3+S{&s$$vi~p}*VaYRb>5>ZK z|7dy|^M8~`kRMewlSueKHiGc~CzA~+fG9u|xJiLU{>I@s{r~i;q&RSkS-m&@pC8FF z{=fa2c-Dk;biO;o;r{>TUmtu!ZSGKXVdKH(!>!_@?Z-RR=gjlBmTof*Q`c;LP(L<0 zO@`;h5>wj!4ISNOjxF6}j26@F*^K_yuxyJdSz3v)w2sZZ@I1~Hc{Y$eM|EY^d%?6d ztIfRd9Z_&RAPFj``m)MM2S^A)HoM8x`%F`BX~(cVn#CARy=xnGpRx3> zkM(W?FVX5-wth57o(!r2^fH-m4C)P09*CSG59+$q8q`He6a`s;ZG#nt%5{%BopNMD zVphMzG}@Y}HEbyGYt8H%-Gi6BB<;ufLgBmGk)D@rd;b~pboVswro<+!{p(q4*_vrH zZw$N5a7)ZG1F z~TUP)qD&y2)b`PT|9mcD?^Nj!DFOInBRUmf?=zSwFiucag5uwxvs(xKgJ9Sl(3 z8~i9W0{zG=re&CxypBLI{!;d<^>t9DI{y0skd}99BSau znvPykx6BmY?ZI)baR@(&sXiwiCUD+Ss3f2eV zcqqSWPxXr{v&|bOuaAPuaj!l8V79dJsPfu8svnqF)l*pDldXRic42{0dGJQz`^|4Q z@GWMLf+Yr=fOf~CloZ886UAaSF>g>5{ks;77lK>OfBFu3 zEKL9T32NZA@d~+3y-#P#Iw#MW*5UsfR#@=P!To*dl1jw?xt$YL6?aZtZ?ylP7(w_S z`5-wE1&9LosX)U28GqyOobf*k`JcT<{-2NJT8aM`*TkbBxU30jbk<$-zeD(+@c+%L z6@>q1SCL{4i`H&3)?5zmg#VMpH+-Rm@c;FT8|(1@-|m|K|FyvX&J6!!8_VfRfWH?1 z=kX~{r!!m3xyTm5;7r?;NuKf1k`k d$|edB1@1(MVStore.java:469) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082) + at org.h2.mvstore.db.Store.(Store.java:136) + at org.h2.engine.Database.(Database.java:324) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.getConnectionUrl(H2ConsoleAutoConfiguration.java:94) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395) + at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) + at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.logDataSources(H2ConsoleAutoConfiguration.java:86) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda$h2Console$0(H2ConsoleAutoConfiguration.java:69) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.withThreadContextClassLoader(H2ConsoleAutoConfiguration.java:78) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.h2Console(H2ConsoleAutoConfiguration.java:69) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:647) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:210) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:201) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:96) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:85) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:261) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:235) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4886) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:846) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:241) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:918) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:485) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:489) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:602) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) + at stirling.software.SPDF.SPdfApplication.main(SPdfApplication.java:53) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:554) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) + ... 103 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) + at org.h2.mvstore.FileStore.open(FileStore.java:178) + at org.h2.mvstore.FileStore.open(FileStore.java:128) + at org.h2.mvstore.MVStore.(MVStore.java:452) + ... 97 more +2023-08-12 00:40:10 database: flush +org.h2.message.DbException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:395) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:125) + at org.h2.mvstore.MVStore.handleException(MVStore.java:3318) + at org.h2.mvstore.MVStore.panic(MVStore.java:593) + at org.h2.mvstore.MVStore.(MVStore.java:469) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082) + at org.h2.mvstore.db.Store.(Store.java:136) + at org.h2.engine.Database.(Database.java:324) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:316) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:152) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:34) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:239) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:216) + at org.hibernate.boot.model.relational.Database.(Database.java:45) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:230) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:198) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:166) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1380) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1451) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1817) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1155) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) + at stirling.software.SPDF.SPdfApplication.main(SPdfApplication.java:53) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:554) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) + ... 64 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) + at org.h2.mvstore.FileStore.open(FileStore.java:178) + at org.h2.mvstore.FileStore.open(FileStore.java:128) + at org.h2.mvstore.MVStore.(MVStore.java:452) + ... 58 more +2023-08-12 00:40:34 database: flush +org.h2.message.DbException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:395) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:125) + at org.h2.mvstore.MVStore.handleException(MVStore.java:3318) + at org.h2.mvstore.MVStore.panic(MVStore.java:593) + at org.h2.mvstore.MVStore.(MVStore.java:469) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082) + at org.h2.mvstore.db.Store.(Store.java:136) + at org.h2.engine.Database.(Database.java:324) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.getConnectionUrl(H2ConsoleAutoConfiguration.java:94) + at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) + at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395) + at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) + at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:258) + at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) + at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) + at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575) + at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616) + at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622) + at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.logDataSources(H2ConsoleAutoConfiguration.java:86) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.lambda$h2Console$0(H2ConsoleAutoConfiguration.java:69) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.withThreadContextClassLoader(H2ConsoleAutoConfiguration.java:78) + at org.springframework.boot.autoconfigure.h2.H2ConsoleAutoConfiguration.h2Console(H2ConsoleAutoConfiguration.java:69) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) + at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:655) + at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:647) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1332) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1162) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:210) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.getOrderedBeansOfType(ServletContextInitializerBeans.java:201) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.addServletContextInitializerBeans(ServletContextInitializerBeans.java:96) + at org.springframework.boot.web.servlet.ServletContextInitializerBeans.(ServletContextInitializerBeans.java:85) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.getServletContextInitializerBeans(ServletWebServerApplicationContext.java:261) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.selfInitialize(ServletWebServerApplicationContext.java:235) + at org.springframework.boot.web.embedded.tomcat.TomcatStarter.onStartup(TomcatStarter.java:52) + at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4886) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:846) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1328) + at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1318) + at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) + at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) + at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) + at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) + at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:241) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardService.startInternal(StandardService.java:428) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:918) + at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) + at org.apache.catalina.startup.Tomcat.start(Tomcat.java:485) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:123) + at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.(TomcatWebServer.java:104) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getTomcatWebServer(TomcatServletWebServerFactory.java:489) + at org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory.getWebServer(TomcatServletWebServerFactory.java:211) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:183) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:161) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:602) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) + at stirling.software.SPDF.SPdfApplication.main(SPdfApplication.java:53) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:554) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) + ... 103 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) + at org.h2.mvstore.FileStore.open(FileStore.java:178) + at org.h2.mvstore.FileStore.open(FileStore.java:128) + at org.h2.mvstore.MVStore.(MVStore.java:452) + ... 97 more +2023-08-12 00:40:36 database: flush +org.h2.message.DbException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.get(DbException.java:212) + at org.h2.message.DbException.convert(DbException.java:395) + at org.h2.mvstore.db.Store.lambda$new$0(Store.java:125) + at org.h2.mvstore.MVStore.handleException(MVStore.java:3318) + at org.h2.mvstore.MVStore.panic(MVStore.java:593) + at org.h2.mvstore.MVStore.(MVStore.java:469) + at org.h2.mvstore.MVStore$Builder.open(MVStore.java:4082) + at org.h2.mvstore.db.Store.(Store.java:136) + at org.h2.engine.Database.(Database.java:324) + at org.h2.engine.Engine.openSession(Engine.java:92) + at org.h2.engine.Engine.openSession(Engine.java:222) + at org.h2.engine.Engine.createSession(Engine.java:201) + at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) + at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122) + at org.h2.Driver.connect(Driver.java:59) + at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) + at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:359) + at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) + at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:470) + at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:561) + at com.zaxxer.hikari.pool.HikariPool.(HikariPool.java:100) + at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) + at org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:122) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcEnvironmentInitiator.java:316) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:152) + at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:34) + at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:239) + at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:216) + at org.hibernate.boot.model.relational.Database.(Database.java:45) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.getDatabase(InFlightMetadataCollectorImpl.java:230) + at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.(InFlightMetadataCollectorImpl.java:198) + at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:166) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1380) + at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1451) + at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) + at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) + at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:352) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1817) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) + at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520) + at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) + at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) + at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) + at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) + at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1155) + at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) + at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608) + at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) + at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) + at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:436) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) + at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) + at stirling.software.SPDF.SPdfApplication.main(SPdfApplication.java:53) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:568) + at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:50) +Caused by: org.h2.jdbc.JdbcSQLNonTransientException: General error: "org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7]" [50000-214] + at org.h2.message.DbException.getJdbcSQLException(DbException.java:554) + at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) + ... 64 more +Caused by: org.h2.mvstore.MVStoreException: The file is locked: C:/Users/systo/git/Stirling-PDF/mydatabase.mv.db [2.1.214/7] + at org.h2.mvstore.DataUtils.newMVStoreException(DataUtils.java:1004) + at org.h2.mvstore.FileStore.open(FileStore.java:178) + at org.h2.mvstore.FileStore.open(FileStore.java:128) + at org.h2.mvstore.MVStore.(MVStore.java:452) + ... 58 more diff --git a/src/main/java/stirling/software/SPDF/SPdfApplication.java b/src/main/java/stirling/software/SPDF/SPdfApplication.java index f9512295..f374f9b1 100644 --- a/src/main/java/stirling/software/SPDF/SPdfApplication.java +++ b/src/main/java/stirling/software/SPDF/SPdfApplication.java @@ -10,11 +10,13 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.core.env.Environment; import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import jakarta.annotation.PostConstruct; import stirling.software.SPDF.utils.GeneralUtils; @SpringBootApplication +@EnableWebSecurity(debug = true) //@EnableScheduling public class SPdfApplication { diff --git a/src/main/java/stirling/software/SPDF/config/AppConfig.java b/src/main/java/stirling/software/SPDF/config/AppConfig.java index 430bcae8..9212bf7e 100644 --- a/src/main/java/stirling/software/SPDF/config/AppConfig.java +++ b/src/main/java/stirling/software/SPDF/config/AppConfig.java @@ -5,6 +5,17 @@ import org.springframework.context.annotation.Configuration; @Configuration public class AppConfig { + + + @Bean(name = "loginEnabled") + public boolean loginEnabled() { + String appName = System.getProperty("login.enabled"); + if (appName == null) + appName = System.getenv("login.enabled"); + + return (appName != null) ? Boolean.valueOf(appName) : false; + } + @Bean(name = "appName") public String appName() { String appName = System.getProperty("APP_HOME_NAME"); diff --git a/src/main/java/stirling/software/SPDF/config/CleanUrlInterceptor.java b/src/main/java/stirling/software/SPDF/config/CleanUrlInterceptor.java index efa084b3..dc2e144b 100644 --- a/src/main/java/stirling/software/SPDF/config/CleanUrlInterceptor.java +++ b/src/main/java/stirling/software/SPDF/config/CleanUrlInterceptor.java @@ -24,8 +24,9 @@ import org.springframework.web.servlet.ModelAndView; public class CleanUrlInterceptor implements HandlerInterceptor { - private static final List ALLOWED_PARAMS = Arrays.asList("lang", "endpoint", "endpoints"); + private static final List ALLOWED_PARAMS = Arrays.asList("lang", "endpoint", "endpoints", "logout", "error"); + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { @@ -39,9 +40,12 @@ public class CleanUrlInterceptor implements HandlerInterceptor { String[] queryParameters = queryString.split("&"); for (String param : queryParameters) { String[] keyValue = param.split("="); + System.out.print("astirli " + keyValue[0]); if (keyValue.length != 2) { continue; } + System.out.print("astirli2 " + keyValue[0]); + if (ALLOWED_PARAMS.contains(keyValue[0])) { parameters.put(keyValue[0], keyValue[1]); } diff --git a/src/main/java/stirling/software/SPDF/controller/api/UserController.java b/src/main/java/stirling/software/SPDF/controller/api/UserController.java new file mode 100644 index 00000000..0fdfebb4 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/UserController.java @@ -0,0 +1,28 @@ +package stirling.software.SPDF.controller.api; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import stirling.software.SPDF.config.security.UserService; + +@Controller +public class UserController { + + @Autowired + private UserService userService; + + @PostMapping("/register") + public String register(@RequestParam String username, @RequestParam String password, Model model) { + if(userService.usernameExists(username)) { + model.addAttribute("error", "Username already exists"); + return "register"; + } + + userService.saveUser(username, password); + return "redirect:/login?registered=true"; + } +} diff --git a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index 4d6e991a..7da338ba 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -16,6 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.ResourcePatternUtils; +import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @@ -24,10 +25,30 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; @Controller @Tag(name = "General", description = "General APIs") public class GeneralWebController { + + @GetMapping("/login") + public String login(HttpServletRequest request, Model model, Authentication authentication) { + if (authentication != null && authentication.isAuthenticated()) { + return "redirect:/"; + } + + if (request.getParameter("error") != null) { + + model.addAttribute("error", request.getParameter("error")); + } + if (request.getParameter("logout") != null) { + + model.addAttribute("logoutMessage", "You have been logged out."); + } + + return "login"; + } + @GetMapping("/pipeline") @Hidden public String pipelineForm(Model model) { diff --git a/src/main/java/stirling/software/SPDF/model/Authority.java b/src/main/java/stirling/software/SPDF/model/Authority.java new file mode 100644 index 00000000..e87ece3f --- /dev/null +++ b/src/main/java/stirling/software/SPDF/model/Authority.java @@ -0,0 +1,52 @@ +package stirling.software.SPDF.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +@Entity +@Table(name = "authorities") +public class Authority { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "authority") + private String authority; + + @ManyToOne + @JoinColumn(name = "username") + private User user; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getAuthority() { + return authority; + } + + public void setAuthority(String authority) { + this.authority = authority; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + +} diff --git a/src/main/java/stirling/software/SPDF/model/User.java b/src/main/java/stirling/software/SPDF/model/User.java new file mode 100644 index 00000000..2cea4d73 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/model/User.java @@ -0,0 +1,62 @@ +package stirling.software.SPDF.model; + +import java.util.Set; + +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +@Entity +@Table(name = "users") +public class User { + + @Id + @Column(name = "username") + private String username; + + @Column(name = "password") + private String password; + + @Column(name = "enabled") + private boolean enabled; + + @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "user") + private Set authorities; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public Set getAuthorities() { + return authorities; + } + + public void setAuthorities(Set authorities) { + this.authorities = authorities; + } + +} diff --git a/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java b/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java new file mode 100644 index 00000000..62f546b8 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java @@ -0,0 +1,12 @@ +package stirling.software.SPDF.repository; + +import java.util.Set; + +import org.springframework.data.jpa.repository.JpaRepository; + +import stirling.software.SPDF.model.Authority; + +public interface AuthorityRepository extends JpaRepository { + //Set findByUsername(String username); + Set findByUser_Username(String username); +} diff --git a/src/main/java/stirling/software/SPDF/repository/UserRepository.java b/src/main/java/stirling/software/SPDF/repository/UserRepository.java new file mode 100644 index 00000000..064df341 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/repository/UserRepository.java @@ -0,0 +1,12 @@ +package stirling.software.SPDF.repository; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; + +import stirling.software.SPDF.model.User; + +public interface UserRepository extends JpaRepository { + Optional findByUsername(String username); +} + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index c4118342..bf594bfc 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -16,8 +16,11 @@ server.error.include-stacktrace=always server.error.include-exception=true server.error.include-message=always -#logging.level.org.springframework.web=DEBUG +logging.level.org.springframework.web=DEBUG +logging.level.org.springframework=DEBUG +logging.level.org.springframework.security=DEBUG +login.enabled=true server.servlet.session.tracking-modes=cookie server.servlet.context-path=${APP_ROOT_PATH:/} @@ -32,4 +35,12 @@ spring.mvc.async.request-timeout=${ASYNC_CONNECTION_TIMEOUT:300000} spring.resources.static-locations=file:customFiles/static/ #spring.thymeleaf.prefix=file:/customFiles/templates/,classpath:/templates/ -#spring.thymeleaf.cache=false \ No newline at end of file +#spring.thymeleaf.cache=false + + +spring.datasource.url=jdbc:h2:file:./mydatabase;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +spring.datasource.driver-class-name=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password= +spring.h2.console.enabled=true +spring.jpa.hibernate.ddl-auto=update diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 977260a5..182701ce 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -55,6 +55,15 @@ settings.downloadOption.2=Open in new window settings.downloadOption.3=Download file settings.zipThreshold=Zip files when the number of downloaded files exceeds +settings.userSettings=User Settings +settings.changeUsername=New Username +settings.changeUsernameButton=Change Username +settings.password=Password +settings.oldPassword=Old password +settings.newPassword=New Password +settings.changePasswordButton=Change Password +settings.confirmNewPassword=Confirm New Password +settings.signOut=Sign Out ############# # HOME-PAGE # ############# diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index ea253dab..4ae83570 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -338,6 +338,49 @@ + +
+
User Settings
+ +
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + + - +
From 39a187b6da89f05a2cffd3c2e0eeeac5c23e21e2 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 19 Aug 2023 16:59:34 +0100 Subject: [PATCH 037/147] darkmode fix for account and pagenumber support filename --- .../api/other/PageNumbersController.java | 2 +- src/main/resources/application.properties | 1 - src/main/resources/messages_en_GB.properties | 3 + src/main/resources/static/css/dark-mode.css | 53 ++++++++++- src/main/resources/static/js/darkmode.js | 95 ++++++++++--------- src/main/resources/templates/account.html | 10 +- .../templates/other/add-page-numbers.html | 4 +- 7 files changed, 111 insertions(+), 57 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java b/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java index 9096e64e..92aa8d91 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java @@ -116,7 +116,7 @@ public class PageNumbersController { Rectangle pageSize = page.getPageSize(); PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), pdfDoc); - String text = customText != null ? customText.replace("{n}", String.valueOf(pageNumber)).replace("{total}", String.valueOf(pdfDoc.getNumberOfPages())) : String.valueOf(pageNumber); + String text = customText != null ? customText.replace("{n}", String.valueOf(pageNumber)).replace("{total}", String.valueOf(pdfDoc.getNumberOfPages())).replace("{filename}", file.getOriginalFilename().replaceFirst("[.][^.]+$", "")) : String.valueOf(pageNumber); PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA); float textWidth = font.getWidth(text, fontSize); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 20638f7d..da508e20 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,7 +20,6 @@ server.error.include-message=always #logging.level.org.springframework=DEBUG #logging.level.org.springframework.security=DEBUG -#login.enabled=true server.servlet.session.tracking-modes=cookie server.servlet.context-path=${APP_ROOT_PATH:/} diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 58fc107f..5ca0bd74 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -374,6 +374,9 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers diff --git a/src/main/resources/static/css/dark-mode.css b/src/main/resources/static/css/dark-mode.css index 0e78e4ae..cf2e028d 100644 --- a/src/main/resources/static/css/dark-mode.css +++ b/src/main/resources/static/css/dark-mode.css @@ -1,5 +1,5 @@ /* Dark Mode Styles */ -body { +body, select, textarea { --body-background-color: 51, 51, 51; --base-font-color: 255, 255, 255; background-color: rgb(var(--body-background-color)) !important; @@ -41,4 +41,53 @@ body { .favorite-icon img { filter: brightness(0) invert(1) !important; -} \ No newline at end of file +} +table thead { + background-color: #333 !important; + border: 1px solid #444; +} +table th, table td { + border: 1px solid #444 !important; + color: white; +} +.btn { + background-color: #444 !important; + border: none; + color: #fff !important; +} +.btn-primary { + background-color: #007bff !important; + border: none; + color: #fff !important; +} +.btn-secondary { + background-color: #6c757d !important; + border: none; + color: #fff !important; +} +.btn-info { + background-color: #17a2b8 !important; + border: none; + color: #fff !important; +} +.btn-danger { + background-color: #dc3545 !important; + border: none; + color: #fff !important; +} +.btn-outline-secondary { + color: #fff !important; + border-color: #fff; +} +.btn-outline-secondary:hover { + background-color: #444 !important; + color: #007bff !important; + border-color: #007bff; +} +.blackwhite-icon { + filter: brightness(0) invert(1); +} +hr { + border-color: rgba(255, 255, 255, 0.6); /* semi-transparent white */ + background-color: rgba(255, 255, 255, 0.6); /* for some browsers that might use background instead of border for
*/ +} diff --git a/src/main/resources/static/js/darkmode.js b/src/main/resources/static/js/darkmode.js index c91bfa68..9139e801 100644 --- a/src/main/resources/static/js/darkmode.js +++ b/src/main/resources/static/js/darkmode.js @@ -1,6 +1,44 @@ var toggleCount = 0; var lastToggleTime = Date.now(); +var elements = { + lightModeStyles: null, + darkModeStyles: null, + rainbowModeStyles: null, + darkModeIcon: null +}; + +function getElements() { + elements.lightModeStyles = document.getElementById("light-mode-styles"); + elements.darkModeStyles = document.getElementById("dark-mode-styles"); + elements.rainbowModeStyles = document.getElementById("rainbow-mode-styles"); + elements.darkModeIcon = document.getElementById("dark-mode-icon"); +} + +function setMode(mode) { + elements.lightModeStyles.disabled = mode !== "off"; + elements.darkModeStyles.disabled = mode !== "on"; + elements.rainbowModeStyles.disabled = mode !== "rainbow"; + + if (mode === "on") { + elements.darkModeIcon.src = "moon.svg"; + // Add the table-dark class to tables for dark mode + var tables = document.querySelectorAll('.table'); + tables.forEach(table => { + table.classList.add('table-dark'); + }); + } else if (mode === "off") { + elements.darkModeIcon.src = "sun.svg"; + // Remove the table-dark class for light mode + var tables = document.querySelectorAll('.table-dark'); + tables.forEach(table => { + table.classList.remove('table-dark'); + }); + } else if (mode === "rainbow") { + elements.darkModeIcon.src = "rainbow.svg"; + } +} + function toggleDarkMode() { var currentTime = Date.now(); if (currentTime - lastToggleTime < 1000) { @@ -10,67 +48,32 @@ function toggleDarkMode() { } lastToggleTime = currentTime; - var lightModeStyles = document.getElementById("light-mode-styles"); - var darkModeStyles = document.getElementById("dark-mode-styles"); - var rainbowModeStyles = document.getElementById("rainbow-mode-styles"); - var darkModeIcon = document.getElementById("dark-mode-icon"); - if (toggleCount >= 18) { localStorage.setItem("dark-mode", "rainbow"); - lightModeStyles.disabled = true; - darkModeStyles.disabled = true; - rainbowModeStyles.disabled = false; - darkModeIcon.src = "rainbow.svg"; + setMode("rainbow"); } else if (localStorage.getItem("dark-mode") == "on") { localStorage.setItem("dark-mode", "off"); - lightModeStyles.disabled = false; - darkModeStyles.disabled = true; - rainbowModeStyles.disabled = true; - darkModeIcon.src = "sun.svg"; + setMode("off"); } else { localStorage.setItem("dark-mode", "on"); - lightModeStyles.disabled = true; - darkModeStyles.disabled = false; - rainbowModeStyles.disabled = true; - darkModeIcon.src = "moon.svg"; + setMode("on"); } } document.addEventListener("DOMContentLoaded", function() { - var lightModeStyles = document.getElementById("light-mode-styles"); - var darkModeStyles = document.getElementById("dark-mode-styles"); - var rainbowModeStyles = document.getElementById("rainbow-mode-styles"); - var darkModeIcon = document.getElementById("dark-mode-icon"); + getElements(); - if (localStorage.getItem("dark-mode") == "on") { - lightModeStyles.disabled = true; - darkModeStyles.disabled = false; - rainbowModeStyles.disabled = true; - darkModeIcon.src = "moon.svg"; - } else if (localStorage.getItem("dark-mode") == "off") { - lightModeStyles.disabled = false; - darkModeStyles.disabled = true; - rainbowModeStyles.disabled = true; - darkModeIcon.src = "sun.svg"; - } else if (localStorage.getItem("dark-mode") == "rainbow") { - lightModeStyles.disabled = true; - darkModeStyles.disabled = true; - rainbowModeStyles.disabled = false; - darkModeIcon.src = "rainbow.svg"; + var currentMode = localStorage.getItem("dark-mode"); + if (currentMode === "on" || currentMode === "off" || currentMode === "rainbow") { + setMode(currentMode); + } else if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) { + setMode("on"); } else { - if (window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) { - darkModeStyles.disabled = false; - rainbowModeStyles.disabled = true; - darkModeIcon.src = "moon.svg"; - } else { - darkModeStyles.disabled = true; - rainbowModeStyles.disabled = true; - darkModeIcon.src = "sun.svg"; - } + setMode("off"); } document.getElementById("dark-mode-toggle").addEventListener("click", function(event) { event.preventDefault(); toggleDarkMode(); }); -}); \ No newline at end of file +}); diff --git a/src/main/resources/templates/account.html b/src/main/resources/templates/account.html index ceba9cc4..bd01c24e 100644 --- a/src/main/resources/templates/account.html +++ b/src/main/resources/templates/account.html @@ -30,7 +30,7 @@
- +
@@ -44,7 +44,7 @@
- +
@@ -70,13 +70,13 @@
diff --git a/src/main/resources/templates/other/add-page-numbers.html b/src/main/resources/templates/other/add-page-numbers.html index 8972d1cc..9111ab44 100644 --- a/src/main/resources/templates/other/add-page-numbers.html +++ b/src/main/resources/templates/other/add-page-numbers.html @@ -103,12 +103,12 @@ + th:placeholder="#{addPageNumbers.numberPagesDesc}" />
+ th:placeholder="#{addPageNumbers.customNumberDesc}" />
From e88a780efeed53a6626fbcaa0ba185fbb9301449 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 19 Aug 2023 17:00:34 +0100 Subject: [PATCH 038/147] lang --- src/main/resources/messages_ar_AR.properties | 26 +++++----------- src/main/resources/messages_ca_CA.properties | 26 +++++----------- src/main/resources/messages_de_DE.properties | 26 +++++----------- src/main/resources/messages_en_US.properties | 26 +++++----------- src/main/resources/messages_es_ES.properties | 26 +++++----------- src/main/resources/messages_eu_ES.properties | 26 +++++----------- src/main/resources/messages_fr_FR.properties | 32 +++++--------------- src/main/resources/messages_it_IT.properties | 26 +++++----------- src/main/resources/messages_ja_JP.properties | 26 +++++----------- src/main/resources/messages_ko_KR.properties | 26 +++++----------- src/main/resources/messages_nl_NL.properties | 18 +++++++---- src/main/resources/messages_pl_PL.properties | 26 +++++----------- src/main/resources/messages_pt_BR.properties | 26 +++++----------- src/main/resources/messages_ro_RO.properties | 26 +++++----------- src/main/resources/messages_ru_RU.properties | 26 +++++----------- src/main/resources/messages_sv_SE.properties | 26 +++++----------- src/main/resources/messages_zh_CN.properties | 26 +++++----------- 17 files changed, 124 insertions(+), 316 deletions(-) diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 7f9cd9cb..24129d2d 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=\u0641\u062A\u062D \u0641\u064A \u0646\u0641\u0633 \u0 settings.downloadOption.2=\u0641\u062A\u062D \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629 settings.downloadOption.3=\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 settings.zipThreshold=\u0645\u0644\u0641\u0627\u062A \u0645\u0636\u063A\u0648\u0637\u0629 \u0639\u0646\u062F \u062A\u062C\u0627\u0648\u0632 \u0639\u062F\u062F \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u062A\u0646\u0632\u064A\u0644\u0647\u0627 -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=إضافة صورة #merge merge.title=دمج merge.header=دمج ملفات PDF متعددة (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=دمج @@ -676,9 +667,6 @@ watermark.selectText.4=دوران (0-360): watermark.selectText.5=widthSpacer (مسافة بين كل علامة مائية أفقيًا): watermark.selectText.6=heightSpacer (مسافة بين كل علامة مائية عموديًا): watermark.selectText.7=\u0627\u0644\u062A\u0639\u062A\u064A\u0645 (0\u066A - 100\u066A): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=إضافة علامة مائية diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 68d8b466..6319e5a0 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Obre mateixa finestra settings.downloadOption.2=Obre mateixa finestra settings.downloadOption.3=Descarrega Arxiu settings.zipThreshold=Comprimiu els fitxers quan el nombre de fitxers baixats superi -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Afegir Imatge #merge merge.title=Fusiona merge.header=Fusiona múltiples PDFs (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Fusiona @@ -676,9 +667,6 @@ watermark.selectText.4=Rotació (0-360): watermark.selectText.5=separació d'amplada (Espai horitzontal entre cada Marca d'Aigua): watermark.selectText.6=separació d'alçada (Espai vertical entre cada Marca d'Aigua): watermark.selectText.7=Opacitat (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Afegir Marca d'Aigua diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 35043038..11cf141d 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Im selben Fenster öffnen settings.downloadOption.2=In neuem Fenster öffnen settings.downloadOption.3=Datei herunterladen settings.zipThreshold=Dateien komprimieren, wenn die Anzahl der heruntergeladenen Dateien überschritten wird -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Bild hinzufügen #merge merge.title=Zusammenführen merge.header=Mehrere PDFs zusammenführen (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Zusammenführen @@ -676,9 +667,6 @@ watermark.selectText.4=Drehung (0-360): watermark.selectText.5=breiteSpacer (horizontaler Abstand zwischen den einzelnen Wasserzeichen): watermark.selectText.6=höheSpacer (vertikaler Abstand zwischen den einzelnen Wasserzeichen): watermark.selectText.7=Deckkraft (0% - 100 %): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Wasserzeichen hinzufügen diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 778629bf..cf228aad 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Open in same window settings.downloadOption.2=Open in new window settings.downloadOption.3=Download file settings.zipThreshold=Zip files when the number of downloaded files exceeds -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Add image #merge merge.title=Merge merge.header=Merge multiple PDFs (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Merge @@ -676,9 +667,6 @@ watermark.selectText.4=Rotation (0-360): watermark.selectText.5=widthSpacer (Space between each watermark horizontally): watermark.selectText.6=heightSpacer (Space between each watermark vertically): watermark.selectText.7=Opacity (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Add Watermark diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 6199dad7..35065a1a 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -31,9 +31,6 @@ sizes.medium=Mediano sizes.large=Grande sizes.x-large=Extra grande error.pdfPassword=El documento PDF está protegido con contraseña y no se ha proporcionado o es incorrecta -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Abrir en la misma ventana settings.downloadOption.2=Abrir en una nueva ventana settings.downloadOption.3=Descargar el fichero settings.zipThreshold=Ficheros ZIP cuando excede el número de ficheros descargados -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Posición addPageNumbers.selectText.4=Número de inicio addPageNumbers.selectText.5=Páginas a numerar addPageNumbers.selectText.6=Texto personalizado +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Añadir Números de Página @@ -571,9 +565,6 @@ addImage.submit=Añadir imagen #merge merge.title=Unir merge.header=Unir múltiples PDFs (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Unir @@ -676,9 +667,6 @@ watermark.selectText.4=Rotación (0-360): watermark.selectText.5=Ancho (Espacio entre cada marca de agua horizontalmente): watermark.selectText.6=Alto (Espacio entre cada marca de agua verticalmente): watermark.selectText.7=Opacidad (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Añadir marca de agua diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 47aa1990..22703f65 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=PDF dokumentua pasahitzarekin babestuta dago eta pasahitza ez da sartu edo akastuna da -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Ireki leiho berean settings.downloadOption.2=Ireki leiho berrian settings.downloadOption.3=Deskargatu fitxategia settings.zipThreshold=ZIP fitxategiak deskargatutako fitxategi kopurua gainditzen denean -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Gehitu irudia #merge merge.title=Elkartu merge.header=Elkartu zenbait PDF (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Elkartu @@ -676,9 +667,6 @@ watermark.selectText.4=Errotazioa (0-360): watermark.selectText.5=Zabalera (ur-marka bakoitzaren arteko espazioa horizontalean): watermark.selectText.6=Altuera (ur-marka bakoitzaren arteko espazioa bertikalean): watermark.selectText.7=Opakutasuna (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Gehitu ur-marka diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index d35a801d..521bd784 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -31,9 +31,6 @@ sizes.medium=Moyen sizes.large=Grand sizes.x-large=Très grand error.pdfPassword=Le document PDF est protégé par un mot de passe et le mot de passe n\u2019a pas été fourni ou était incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Ouvrir dans la même fenêtre settings.downloadOption.2=Ouvrir dans une nouvelle fenêtre settings.downloadOption.3=Télécharger le fichier settings.zipThreshold=Compresser les fichiers en ZIP lorsque le nombre de fichiers téléchargés dépasse -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -330,9 +318,6 @@ pdfToSinglePage.submit=Convertir en une seule page #pageExtracter -########################## -### TODO: Translate ### -########################## pageExtracter.title=Extract Pages pageExtracter.header=Extract Pages pageExtracter.submit=Extract @@ -389,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Numéro de départ addPageNumbers.selectText.5=Pages à numéroter addPageNumbers.selectText.6=Texte personnalisé +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Ajouter les numéros de page @@ -574,9 +565,6 @@ addImage.submit=Ajouter une image #merge merge.title=Fusionner merge.header=Fusionner plusieurs PDF -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Fusionner @@ -594,9 +582,6 @@ multiTool.header=Outil multifonction PDF #pageRemover -########################## -### TODO: Translate ### -########################## pageRemover.title=Page Remover pageRemover.header=PDF Page remover pageRemover.pagesToDelete=Pages to delete (Enter a comma-separated list of page numbers) : @@ -733,9 +718,6 @@ changeMetadata.submit=Modifier #xlsToPdf -########################## -### TODO: Translate ### -########################## xlsToPdf.title=Excel to PDF xlsToPdf.header=Excel to PDF xlsToPdf.selectText.1=Select XLS or XLSX Excel sheet to convert diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 219a3685..17f06989 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Apri in questa finestra settings.downloadOption.2=Apri in una nuova finestra settings.downloadOption.3=Scarica file settings.zipThreshold=Comprimi file in .zip quando il numero di download supera -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Aggiungi immagine #merge merge.title=Unisci merge.header=Unisci 2 o più PDF -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Unisci @@ -676,9 +667,6 @@ watermark.selectText.4=Rotazione (0-360): watermark.selectText.5=spazio orizzontale (tra ogni filigrana): watermark.selectText.6=spazio verticale (tra ogni filigrana): watermark.selectText.7=Opacità (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Aggiungi Filigrana diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 5847a5f6..534523c8 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=PDFにパスワードが設定されてますが、パスワードが入力されてないか間違ってます。 -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=同じウィンドウで開く settings.downloadOption.2=新しいウィンドウで開く settings.downloadOption.3=ファイルをダウンロード settings.zipThreshold=このファイル数を超えたときにファイルを圧縮する -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=画像の追加 #merge merge.title=結合 merge.header=複数のPDFを結合 (2ファイル以上) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=結合 @@ -676,9 +667,6 @@ watermark.selectText.4=回転 (0-360): watermark.selectText.5=幅スペース (各透かし間の水平方向のスペース): watermark.selectText.6=高さスペース (各透かし間の垂直方向のスペース): watermark.selectText.7=不透明度 (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=透かしを追加 diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 889929f8..2ca0e8e1 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=현재 창에서 열기 settings.downloadOption.2=새 창에서 열기 settings.downloadOption.3=다운로드 settings.zipThreshold=다운로드한 파일 수가 초과된 경우 파일 압축하기 -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=이미지 추가 #merge merge.title=병합 merge.header=여러 개의 PDF 병합 (2개 이상) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=병합 @@ -676,9 +667,6 @@ watermark.selectText.4=회전 각도 (0-360): watermark.selectText.5=가로 간격 (각 워터마크 사이의 가로 공간): watermark.selectText.6=세로 간격 (각 워터마크 사이의 세로 공간): watermark.selectText.7=투명도 (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=워터마크 추가 diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index 13fc2702..fae05b89 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Selecteer PDF(s) @@ -65,7 +65,7 @@ account.title=Account instellingen account.accountSettings=Account instellingen account.adminSettings=Beheerdersinstellingen - Gebruikers bekijken en toevoegen account.userControlSettings=Gebruikerscontrole instellingen -account.changeUsername=Nieuwe gebruikersnaam +account.changeUsername=Wijzig gebruikersnaam account.changeUsername=Wijzig gebruikersnaam account.password=Bevestigingswachtwoord account.oldPassword=Oud wachtwoord @@ -374,6 +374,12 @@ addPageNumbers.selectText.3=Positie addPageNumbers.selectText.4=Startnummer addPageNumbers.selectText.5=Pagina''s om te nummeren addPageNumbers.selectText.6=Aangepaste tekst +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Paginanummers toevoegen @@ -500,7 +506,7 @@ ScannerImageSplit.selectText.8=Stelt de minimale contour oppervlakte drempel in ScannerImageSplit.selectText.9=Randgrootte: ScannerImageSplit.selectText.10=Stelt de grootte van de toegevoegde en verwijderde rand in om witte randen in de uitvoer te voorkomen (standaard: 1). - + #OCR ocr.title=OCR / Scan opruimen ocr.header=Scans opruimen / OCR (Optical Character Recognition) @@ -613,8 +619,8 @@ imageToPDF.selectText.2=PDF automatisch draaien imageToPDF.selectText.3=Meervoudige bestandslogica (Alleen ingeschakeld bij werken met meerdere afbeeldingen) imageToPDF.selectText.4=Voeg samen in één PDF imageToPDF.selectText.5=Zet om naar afzonderlijke PDF''s - - + + #pdfToImage pdfToImage.title=PDF naar afbeelding pdfToImage.header=PDF naar afbeelding @@ -692,7 +698,7 @@ removePassword.submit=Verwijderen #changeMetadata -changeMetadata.title=Metadata wijzigen +changeMetadata.title=Titel: changeMetadata.header=Metadata wijzigen changeMetadata.selectText.1=Pas de variabelen aan die je wilt wijzigen changeMetadata.selectText.2=Verwijder alle metadata diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index a386b8dd..d327b9e7 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=Dokument PDF jest zabezpieczony hasłem, musisz podać prawidłowe hasło. -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Otwórz w tym samym oknie settings.downloadOption.2=Otwórz w nowym oknie settings.downloadOption.3=Pobierz plik settings.zipThreshold=Spakuj pliki, gdy liczba pobranych plików przekroczy -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Dodaj obraz #merge merge.title=Połącz merge.header=Połącz wiele dokumentów PDF (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Połącz @@ -676,9 +667,6 @@ watermark.selectText.4=Obrót (0-360): watermark.selectText.5=Odstęp w poziomie (odstęp między każdym znakiem wodnym w poziomie): watermark.selectText.6=Odstęp w pionie (odstęp między każdym znakiem wodnym w pionie): watermark.selectText.7=Nieprzezroczystość (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Dodaj znak wodny diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 1e334c0d..79f9dc18 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -31,9 +31,6 @@ sizes.medium=Médio sizes.large=Grande sizes.x-large=Muito grande error.pdfPassword=O documento PDF está protegido por senha e a senha não foi fornecida ou está incorreta -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Abrir na mesma janela settings.downloadOption.2=Abrir em nova janela settings.downloadOption.3=⇬ Fazer download do arquivo settings.zipThreshold=Compactar arquivos quando o número de arquivos baixados exceder -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Posição addPageNumbers.selectText.4=Número Inicial addPageNumbers.selectText.5=Páginas a Numerar addPageNumbers.selectText.6=Texto Personalizado +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Adicionar Números de Página @@ -527,9 +521,6 @@ ocr.selectText.8=Normal (gerará um erro se o PDF já contiver texto) ocr.selectText.9=Configurações adicionais ocr.selectText.10=Modo OCR ocr.selectText.11=Remover imagens após o OCR (remove TODAS as imagens, útil apenas como parte do processo de conversão) -########################## -### TODO: Translate ### -########################## ocr.selectText.12=Render Type (Advanced) ocr.help=Por favor, leia a documentação sobre como usar isso para outros idiomas e/ou fora do ambiente Docker ocr.credit=Este serviço usa OCRmyPDF e Tesseract para OCR. @@ -574,9 +565,6 @@ addImage.submit=Adicionar Imagem #merge merge.title=Mesclar merge.header=Mesclar Vários PDFs (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Mesclar diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index f03af619..11c66c75 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Deschide în aceeași fereastră settings.downloadOption.2=Deschide într-o fereastră nouă settings.downloadOption.3=Descarcă fișierul settings.zipThreshold=Împachetează fișierele când numărul de fișiere descărcate depășește -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Adăugare imagine #merge merge.title=Unire merge.header=Unirea mai multor PDF-uri (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Unire @@ -676,9 +667,6 @@ watermark.selectText.4=Rotire (0-360): watermark.selectText.5=widthSpacer (Spațiu între fiecare filigran pe orizontală): watermark.selectText.6=heightSpacer (Spațiu între fiecare filigran pe verticală): watermark.selectText.7=Opacitate (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Adăugați Filigran diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 425b2a0a..af466cad 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Открыть в том же окне settings.downloadOption.2=Открыть в новом окне settings.downloadOption.3=Загрузить файл settings.zipThreshold=Zip-файлы, когда количество загруженных файлов превышает -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Добавить изображение #merge merge.title=Объединить merge.header=Объединение нескольких PDF-файлов (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Объединить @@ -676,9 +667,6 @@ watermark.selectText.4=Поворот (0-360): watermark.selectText.5=widthSpacer (пробел между каждым водяным знаком по горизонтали): watermark.selectText.6=heightSpacer (пробел между каждым водяным знаком по вертикали): watermark.selectText.7=Непрозрачность (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Добавить водяной знак diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 847f94a6..49a57919 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=Öppnas i samma fönster settings.downloadOption.2=Öppna i nytt fönster settings.downloadOption.3=Ladda ner fil settings.zipThreshold=Zip-filer när antalet nedladdade filer överskrider -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=Lägg till bild #merge merge.title=Sammanfoga merge.header=Slå samman flera PDF-filer (2+) -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=Slå samman @@ -676,9 +667,6 @@ watermark.selectText.4=Rotation (0-360): watermark.selectText.5=widthSpacer (mellanrum mellan varje vattenstämpel horisontellt): watermark.selectText.6=heightSpacer (mellanrum mellan varje vattenstämpel vertikalt): watermark.selectText.7=Opacitet (0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=Lägg till vattenstämpel diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 82c047ea..5d1d1c1d 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -31,9 +31,6 @@ sizes.medium=Medium sizes.large=Large sizes.x-large=X-Large error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect -########################## -### TODO: Translate ### -########################## delete=Delete username=Username password=Password @@ -61,20 +58,14 @@ settings.downloadOption.1=在同一窗口打开 settings.downloadOption.2=在新窗口中打开 settings.downloadOption.3=下载文件 settings.zipThreshold=当下载的文件数量超过限制时,将文件压缩。 -########################## -### TODO: Translate ### -########################## settings.signOut=Sign Out settings.accountSettings=Account Settings -########################## -### TODO: Translate ### -########################## account.title=Account Settings account.accountSettings=Account Settings account.adminSettings=Admin Settings - View and Add Users account.userControlSettings=User Control Settings -account.changeUsername=New Username +account.changeUsername=Change Username account.changeUsername=Change Username account.password=Confirmation Password account.oldPassword=Old password @@ -91,9 +82,6 @@ account.syncToBrowser=Sync Account -> Browser account.syncToAccount=Sync Account <- Browser -########################## -### TODO: Translate ### -########################## adminUserSettings.title=User Control Settings adminUserSettings.header=Admin User Control Settings adminUserSettings.admin=Admin @@ -386,6 +374,12 @@ addPageNumbers.selectText.3=Position addPageNumbers.selectText.4=Starting Number addPageNumbers.selectText.5=Pages to Number addPageNumbers.selectText.6=Custom Text +########################## +### TODO: Translate ### +########################## +addPageNumbers.customTextDesc=Custom Text +addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc +addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} addPageNumbers.submit=Add Page Numbers @@ -571,9 +565,6 @@ addImage.submit=添加图片 #merge merge.title=合并 merge.header=合并多个PDF(2个以上)。 -########################## -### TODO: Translate ### -########################## merge.sortByName=Sort by name merge.sortByDate=Sort by date merge.submit=合并 @@ -676,9 +667,6 @@ watermark.selectText.4=旋转(0-360): watermark.selectText.5=widthSpacer(水平方向上每个水印之间的空间): watermark.selectText.6=heightSpacer(每个水印之间的垂直空间): watermark.selectText.7=透明度(0% - 100%): -########################## -### TODO: Translate ### -########################## watermark.selectText.8=Watermark Type: watermark.selectText.9=Watermark Image: watermark.submit=添加水印 From 7c26c56210ef09691c9de897029f4cd6bb94e571 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sun, 20 Aug 2023 21:57:19 +0100 Subject: [PATCH 039/147] test --- src/main/resources/static/css/home.css | 2 +- .../resources/static/js/draggable-utils.js | 20 ++--- src/main/resources/static/js/fileInput.js | 6 +- src/main/resources/static/js/homecard.js | 2 +- .../resources/static/js/languageSelection.js | 53 +++++++------ src/main/resources/static/js/pipeline.js | 2 +- src/main/resources/static/js/search.js | 2 +- src/main/resources/templates/account.html | 18 ++--- src/main/resources/templates/addUsers.html | 6 +- .../resources/templates/auto-split-pdf.html | 2 +- .../templates/convert/img-to-pdf.html | 8 +- .../templates/convert/pdf-to-img.html | 8 +- .../convert/pdf-to-presentation.html | 2 +- .../templates/convert/pdf-to-text.html | 2 +- .../templates/convert/pdf-to-word.html | 2 +- .../resources/templates/extract-page.html | 2 +- .../resources/templates/fragments/card.html | 4 +- .../resources/templates/fragments/common.html | 33 ++++---- .../templates/fragments/errorBanner.html | 2 +- .../fragments/errorBannerPerPage.html | 6 +- .../templates/fragments/langAndDarkMode.html | 75 +++++++++++++++++++ .../resources/templates/fragments/navbar.html | 68 ++++++++--------- .../templates/fragments/navbarEntry.html | 2 +- src/main/resources/templates/home.html | 2 +- src/main/resources/templates/login.html | 10 +-- src/main/resources/templates/merge-pdfs.html | 6 +- .../templates/other/add-page-numbers.html | 10 +-- .../templates/other/change-metadata.html | 34 ++++----- .../templates/other/extract-image-scans.html | 10 +-- .../templates/other/extract-images.html | 2 +- .../templates/other/multi-page-layout.html | 2 +- .../resources/templates/other/ocr-pdf.html | 6 +- .../templates/other/remove-blanks.html | 4 +- .../templates/other/scale-pages.html | 4 +- .../resources/templates/pdf-organizer.html | 4 +- src/main/resources/templates/pipeline.html | 8 +- .../resources/templates/remove-pages.html | 2 +- .../templates/security/add-password.html | 12 +-- .../templates/security/add-watermark.html | 20 ++--- .../templates/security/cert-sign.html | 24 +++--- .../security/change-permissions.html | 6 +- .../templates/security/remove-password.html | 6 +- .../templates/security/remove-watermark.html | 6 +- .../templates/security/sanitize-pdf.html | 4 +- src/main/resources/templates/split-pdfs.html | 2 +- 45 files changed, 297 insertions(+), 214 deletions(-) create mode 100644 src/main/resources/templates/fragments/langAndDarkMode.html diff --git a/src/main/resources/static/css/home.css b/src/main/resources/static/css/home.css index 998278e1..f7549167 100644 --- a/src/main/resources/static/css/home.css +++ b/src/main/resources/static/css/home.css @@ -14,7 +14,7 @@ .features-container { display: grid; - grid-template-columns: repeat(auto-fill, minmax(21rem, 3fr)); + grid-template-columns: repeat(auto-fill, minmax(15rem, 3fr)); gap: 25px 30px; } diff --git a/src/main/resources/static/js/draggable-utils.js b/src/main/resources/static/js/draggable-utils.js index f90a80f1..4dadf920 100644 --- a/src/main/resources/static/js/draggable-utils.js +++ b/src/main/resources/static/js/draggable-utils.js @@ -13,12 +13,12 @@ const DraggableUtils = { listeners: { move: (event) => { const target = event.target; - const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx; - const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy; + const x = (parseFloat(target.getAttribute('data-bs-x')) || 0) + event.dx; + const y = (parseFloat(target.getAttribute('data-bs-y')) || 0) + event.dy; target.style.transform = `translate(${x}px, ${y}px)`; - target.setAttribute('data-x', x); - target.setAttribute('data-y', y); + target.setAttribute('data-bs-x', x); + target.setAttribute('data-bs-y', y); this.onInteraction(target); }, @@ -29,8 +29,8 @@ const DraggableUtils = { listeners: { move: (event) => { var target = event.target - var x = (parseFloat(target.getAttribute('data-x')) || 0) - var y = (parseFloat(target.getAttribute('data-y')) || 0) + var x = (parseFloat(target.getAttribute('data-bs-x')) || 0) + var y = (parseFloat(target.getAttribute('data-bs-y')) || 0) // check if control key is pressed if (event.ctrlKey) { @@ -58,8 +58,8 @@ const DraggableUtils = { target.style.transform = 'translate(' + x + 'px,' + y + 'px)' - target.setAttribute('data-x', x) - target.setAttribute('data-y', y) + target.setAttribute('data-bs-x', x) + target.setAttribute('data-bs-y', y) target.textContent = Math.round(event.rect.width) + '\u00D7' + Math.round(event.rect.height) this.onInteraction(target); @@ -86,8 +86,8 @@ const DraggableUtils = { const x = 0; const y = 20; createdCanvas.style.transform = `translate(${x}px, ${y}px)`; - createdCanvas.setAttribute('data-x', x); - createdCanvas.setAttribute('data-y', y); + createdCanvas.setAttribute('data-bs-x', x); + createdCanvas.setAttribute('data-bs-y', y); createdCanvas.onclick = e => this.onInteraction(e.target); diff --git a/src/main/resources/static/js/fileInput.js b/src/main/resources/static/js/fileInput.js index 7825af8b..12d50b3f 100644 --- a/src/main/resources/static/js/fileInput.js +++ b/src/main/resources/static/js/fileInput.js @@ -3,9 +3,9 @@ document.addEventListener('DOMContentLoaded', function() { }); function setupFileInput(chooser) { - const elementId = chooser.getAttribute('data-element-id'); - const filesSelected = chooser.getAttribute('data-files-selected'); - const pdfPrompt = chooser.getAttribute('data-pdf-prompt'); + const elementId = chooser.getAttribute('data-bs-element-id'); + const filesSelected = chooser.getAttribute('data-bs-files-selected'); + const pdfPrompt = chooser.getAttribute('data-bs-pdf-prompt'); let allFiles = []; let overlay; diff --git a/src/main/resources/static/js/homecard.js b/src/main/resources/static/js/homecard.js index 72997a02..d0d56185 100644 --- a/src/main/resources/static/js/homecard.js +++ b/src/main/resources/static/js/homecard.js @@ -10,7 +10,7 @@ function filterCards() { // Get the navbar tags associated with the card var navbarItem = document.querySelector(`a.dropdown-item[href="${card.id}"]`); - var navbarTags = navbarItem ? navbarItem.getAttribute('data-tags') : ''; + var navbarTags = navbarItem ? navbarItem.getAttribute('data-bs-tags') : ''; var content = title + ' ' + text + ' ' + navbarTags; diff --git a/src/main/resources/static/js/languageSelection.js b/src/main/resources/static/js/languageSelection.js index e9d141f5..359a2be3 100644 --- a/src/main/resources/static/js/languageSelection.js +++ b/src/main/resources/static/js/languageSelection.js @@ -14,33 +14,40 @@ document.addEventListener('DOMContentLoaded', function() { }); function handleDropdownItemClick(event) { - event.preventDefault(); - const languageCode = this.dataset.languageCode; - localStorage.setItem('languageCode', languageCode); + event.preventDefault(); + const languageCode = event.currentTarget.dataset.bsLanguageCode; // change this to event.currentTarget + if (languageCode) { + localStorage.setItem('languageCode', languageCode); - const currentUrl = window.location.href; - if (currentUrl.indexOf('?lang=') === -1) { - window.location.href = currentUrl + '?lang=' + languageCode; - } else { - window.location.href = currentUrl.replace(/\?lang=\w{2,}/, '?lang=' + languageCode); - } + const currentUrl = window.location.href; + if (currentUrl.indexOf('?lang=') === -1) { + window.location.href = currentUrl + '?lang=' + languageCode; + } else { + window.location.href = currentUrl.replace(/\?lang=\w{2,}/, '?lang=' + languageCode); + } + } else { + console.error("Language code is not set for this item."); // for debugging + } } -$(document).ready(function() { - $(".nav-item.dropdown").each(function() { - var $dropdownMenu = $(this).find(".dropdown-menu"); - if ($dropdownMenu.children().length <= 2 && $dropdownMenu.children("hr.dropdown-divider").length === $dropdownMenu.children().length) { - $(this).prev('.nav-item.nav-item-separator').remove(); - $(this).remove(); - } - }); +document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.nav-item.dropdown').forEach((element) => { + const dropdownMenu = element.querySelector(".dropdown-menu"); + if (dropdownMenu.children.length <= 2 && dropdownMenu.querySelectorAll("hr.dropdown-divider").length === dropdownMenu.children.length) { + if (element.previousElementSibling && element.previousElementSibling.classList.contains('nav-item') && element.previousElementSibling.classList.contains('nav-item-separator')) { + element.previousElementSibling.remove(); + } + element.remove(); + } + }); + //Sort languages by alphabet - var list = $('.dropdown-menu[aria-labelledby="languageDropdown"]').children("a"); + const list = Array.from(document.querySelector('.dropdown-menu[aria-labelledby="languageDropdown"]').children).filter(child => child.matches('a')); list.sort(function(a, b) { - var A = $(a).text().toUpperCase(); - var B = $(b).text().toUpperCase(); - return (A < B) ? -1 : (A > B) ? 1 : 0; - }) - .appendTo('.dropdown-menu[aria-labelledby="languageDropdown"]'); + var A = a.textContent.toUpperCase(); + var B = b.textContent.toUpperCase(); + return (A < B) ? -1 : (A > B) ? 1 : 0; + }).forEach(node => document.querySelector('.dropdown-menu[aria-labelledby="languageDropdown"]').appendChild(node)); + }); \ No newline at end of file diff --git a/src/main/resources/static/js/pipeline.js b/src/main/resources/static/js/pipeline.js index 8b2c263d..06810743 100644 --- a/src/main/resources/static/js/pipeline.js +++ b/src/main/resources/static/js/pipeline.js @@ -241,7 +241,7 @@ document.getElementById('addOperationBtn').addEventListener('click', function() if (parameter.name === 'fileInput') return; let parameterDiv = document.createElement('div'); - parameterDiv.className = "form-group"; + parameterDiv.className = "mb-3"; let parameterLabel = document.createElement('label'); parameterLabel.textContent = `${parameter.name} (${parameter.schema.type}): `; diff --git a/src/main/resources/static/js/search.js b/src/main/resources/static/js/search.js index a4007206..5dd4acf5 100644 --- a/src/main/resources/static/js/search.js +++ b/src/main/resources/static/js/search.js @@ -43,7 +43,7 @@ document.querySelector('#navbarSearchInput').addEventListener('input', function( var titleElement = item.querySelector('.icon-text'); var iconElement = item.querySelector('.icon'); var itemHref = item.getAttribute('href'); - var tags = item.getAttribute('data-tags') || ""; // If no tags, default to empty string + var tags = item.getAttribute('data-bs-tags') || ""; // If no tags, default to empty string if (titleElement && iconElement && itemHref !== '#') { var title = titleElement.innerText; diff --git a/src/main/resources/templates/account.html b/src/main/resources/templates/account.html index bd01c24e..5a4882e5 100644 --- a/src/main/resources/templates/account.html +++ b/src/main/resources/templates/account.html @@ -1,4 +1,4 @@ - + @@ -24,15 +24,15 @@

-
+
-
+
-
+
@@ -42,19 +42,19 @@

Change Password?

-
+
-
+
-
+
-
+
@@ -286,7 +286,7 @@ -
+
diff --git a/src/main/resources/templates/addUsers.html b/src/main/resources/templates/addUsers.html index fe37e71c..c590988a 100644 --- a/src/main/resources/templates/addUsers.html +++ b/src/main/resources/templates/addUsers.html @@ -41,15 +41,15 @@

Add New User

-
+
-
+
-
+
- +

diff --git a/src/main/resources/templates/convert/img-to-pdf.html b/src/main/resources/templates/convert/img-to-pdf.html index 3182eb9d..78da1934 100644 --- a/src/main/resources/templates/convert/img-to-pdf.html +++ b/src/main/resources/templates/convert/img-to-pdf.html @@ -23,13 +23,13 @@
- +
- +
-
+
-
+
@@ -26,14 +26,14 @@
-
+
-
+
-
+
diff --git a/src/main/resources/templates/convert/pdf-to-presentation.html b/src/main/resources/templates/convert/pdf-to-presentation.html index f5f73397..4c784017 100644 --- a/src/main/resources/templates/convert/pdf-to-presentation.html +++ b/src/main/resources/templates/convert/pdf-to-presentation.html @@ -15,7 +15,7 @@
-
+
diff --git a/src/main/resources/templates/convert/pdf-to-word.html b/src/main/resources/templates/convert/pdf-to-word.html index c183d1bc..a10ca12f 100644 --- a/src/main/resources/templates/convert/pdf-to-word.html +++ b/src/main/resources/templates/convert/pdf-to-word.html @@ -15,7 +15,7 @@
-
+
-
+
diff --git a/src/main/resources/templates/fragments/card.html b/src/main/resources/templates/fragments/card.html index 48142b03..c3583da6 100644 --- a/src/main/resources/templates/fragments/card.html +++ b/src/main/resources/templates/fragments/card.html @@ -1,8 +1,8 @@ -
+
Icon -
+

diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html index 74536458..7c6b785d 100644 --- a/src/main/resources/templates/fragments/common.html +++ b/src/main/resources/templates/fragments/common.html @@ -32,10 +32,11 @@ - - - - + + + + + @@ -57,7 +58,7 @@ - + -
-
- - -
-
-
+
+
+ +
+
+
+ diff --git a/src/main/resources/templates/fragments/errorBanner.html b/src/main/resources/templates/fragments/errorBanner.html index 98fd9aeb..1d2153ab 100644 --- a/src/main/resources/templates/fragments/errorBanner.html +++ b/src/main/resources/templates/fragments/errorBanner.html @@ -24,7 +24,7 @@

- diff --git a/src/main/resources/templates/fragments/errorBannerPerPage.html b/src/main/resources/templates/fragments/errorBannerPerPage.html index e1365513..ccc2f7b4 100644 --- a/src/main/resources/templates/fragments/errorBannerPerPage.html +++ b/src/main/resources/templates/fragments/errorBannerPerPage.html @@ -7,7 +7,7 @@ - @@ -29,7 +29,7 @@ Go to Homepage - Close + Close
diff --git a/src/main/resources/templates/fragments/langAndDarkMode.html b/src/main/resources/templates/fragments/langAndDarkMode.html new file mode 100644 index 00000000..b587e88e --- /dev/null +++ b/src/main/resources/templates/fragments/langAndDarkMode.html @@ -0,0 +1,75 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index c6dcadd5..060ebaf0 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -18,13 +18,13 @@ - -
@@ -137,7 +137,7 @@ -
- - + - + + + + + + + +