diff --git a/.github/labels.yml b/.github/labels.yml new file mode 100644 index 00000000000..c7f239730ab --- /dev/null +++ b/.github/labels.yml @@ -0,0 +1,91 @@ +# Labels names are important as they are used by Release Drafter to decide +# regarding where to record them in changelog or if to skip them. +# +# The repository labels will be automatically configured using this file and +# the GitHub Action https://github.com/marketplace/actions/github-labeler. +- name: "Back End" + color: "20CE6C" + description: "Issues related to back-end development" + from_name: "Back end" +- name: "Bug" + description: "Something isn't working" + color: "EB9CA6" + from_name: "bug" +- name: "dependencies" + description: "Pull requests that update a dependency file" + color: "5AA8FC" +- name: "Docker" + description: "Pull requests that update Docker code" + color: "1FCEFF" + from_name: "docker" +- name: "Documentation" + description: "Improvements or additions to documentation" + color: "35ABFF" + from_name: "documentation" +- name: "Done for next release" + color: "0CDBD1" +- name: "Done" + color: "60F13B" +- name: "duplicate" + description: "This issue or pull request already exists" + color: "CDD1D5" +- name: "enhancement" + description: "New feature or request" + color: "A0EEEE" +- name: "fix needs confirmation" + color: "60A1E7" + description: "Fix needs to be confirmed" +- name: "Front End" + color: "BBD2F1" + description: "Issues related to front-end development" +- name: "github-actions" + description: "Pull requests that update GitHub Actions code" + color: "999999" + from_name: "github_actions" +- name: "good first issue" + description: "Good for newcomers" + color: "C1B8FF" +- name: "help wanted" + description: "Extra attention is needed" + color: "00E6C4" +- name: "invalid" + description: "This doesn't seem right" + color: "E5E566" +- name: "Java" + description: "Pull requests that update Java code" + color: "FF9E1F" + from_name: "java" +- name: "Long-term Enhancement" + color: "BFDEC3" + description: "Enhancements planned for the long term" +- name: "more-info-needed" + color: "00E4F8" + description: "More information is needed" +- name: "needs investigation" + color: "B8C3A7" + description: "Issues that require further investigation" +- name: "Prioritised enhancement" + color: "4BA2EE" + description: "High-priority enhancements" +- name: "question" + description: "Further information is requested" + color: "D97EE5" +- name: "Translation" + color: "9FABF9" + from_name: "translation" +- name: "upstream" + color: "DEDEDE" +- name: "v2" + color: "FFFF00" +- name: "wontfix" + description: "This will not be worked on" + color: "FFFFFF" +- name: "Security" + color: "000000" + description: "Security-related issues or pull requests" +- name: "API" + color: "FFFF00" + description: "API-related issues or pull requests" +- name: "Test" + color: "FF9E1F" + description: "Testing-related issues or pull requests" \ No newline at end of file diff --git a/.github/workflows/manage-label.yml b/.github/workflows/manage-label.yml new file mode 100644 index 00000000000..b1a239cff7b --- /dev/null +++ b/.github/workflows/manage-label.yml @@ -0,0 +1,24 @@ +name: Manage labels + +on: + schedule: + - cron: "30 20 * * *" + +permissions: + contents: read + issues: write + +jobs: + labeler: + name: Labeler + runs-on: ubuntu-latest + steps: + - name: Check out the repository + uses: actions/checkout@v4 + + - name: Run Labeler + uses: crazy-max/ghaction-github-labeler@v5 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + yaml-file: .github/labels.yml + skip-delete: true \ No newline at end of file diff --git a/Dockerfile-fat b/Dockerfile-fat index 12585201453..53f1c1fc456 100644 --- a/Dockerfile-fat +++ b/Dockerfile-fat @@ -31,7 +31,7 @@ ENV DOCKER_ENABLE_SECURITY=false \ PGID=1000 \ UMASK=022 \ FAT_DOCKER=true \ - INSTALL_BOOK_AND_ADVANCED_HTML_OPS=true + INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false # JDK for app @@ -45,7 +45,6 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et tini \ bash \ curl \ - calibre@testing \ shadow \ su-exec \ openssl \ diff --git a/README.md b/README.md index 15c9a24f763..26bd1275864 100644 --- a/README.md +++ b/README.md @@ -165,14 +165,14 @@ Please view https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToUseOCR ## Supported Languages -Stirling PDF currently supports 32! +Stirling PDF currently supports 33! | Language | Progress | | ------------------------------------------- | -------------------------------------- | | English (English) (en_GB) | ![100%](https://geps.dev/progress/100) | | English (US) (en_US) | ![100%](https://geps.dev/progress/100) | | Arabic (العربية) (ar_AR) | ![45%](https://geps.dev/progress/45) | -| German (Deutsch) (de_DE) | ![100%](https://geps.dev/progress/100) | +| German (Deutsch) (de_DE) | ![100%](https://geps.dev/progress/100) | | French (Français) (fr_FR) | ![94%](https://geps.dev/progress/94) | | Spanish (Español) (es_ES) | ![92%](https://geps.dev/progress/92) | | Simplified Chinese (简体中文) (zh_CN) | ![98%](https://geps.dev/progress/98) | @@ -190,7 +190,7 @@ Stirling PDF currently supports 32! | Japanese (日本語) (ja_JP) | ![90%](https://geps.dev/progress/90) | | Dutch (Nederlands) (nl_NL) | ![96%](https://geps.dev/progress/96) | | Greek (Ελληνικά) (el_GR) | ![82%](https://geps.dev/progress/82) | -| Turkish (Türkçe) (tr_TR) | ![94%](https://geps.dev/progress/94) | +| Turkish (Türkçe) (tr_TR) | ![99%](https://geps.dev/progress/99) | | Indonesia (Bahasa Indonesia) (id_ID) | ![76%](https://geps.dev/progress/76) | | Hindi (हिंदी) (hi_IN) | ![77%](https://geps.dev/progress/77) | | Hungarian (Magyar) (hu_HU) | ![76%](https://geps.dev/progress/76) | @@ -201,6 +201,7 @@ Stirling PDF currently supports 32! | Czech (Česky) (cs_CZ) | ![90%](https://geps.dev/progress/90) | | Croatian (Hrvatski) (hr_HR) | ![95%](https://geps.dev/progress/95) | | Norwegian (Norsk) (no_NB) | ![96%](https://geps.dev/progress/96) | +| Thai (ไทย) (th_TH) | ![100%](https://geps.dev/progress/100) | ## Contributing (creating issues, translations, fixing bugs, etc.) diff --git a/build.gradle b/build.gradle index 90e130f6c4a..eb776343081 100644 --- a/build.gradle +++ b/build.gradle @@ -12,11 +12,11 @@ plugins { import com.github.jk1.license.render.* ext { - springBootVersion = "3.3.0" + springBootVersion = "3.3.2" } group = "stirling.software" -version = "0.26.1" +version = "0.26.2" // 17 is lowest but we support and recommend 21 sourceCompatibility = "17" diff --git a/chart/stirling-pdf/Chart.yaml b/chart/stirling-pdf/Chart.yaml index ebe8dd48baf..9b633ddb5bc 100644 --- a/chart/stirling-pdf/Chart.yaml +++ b/chart/stirling-pdf/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: 0.26.1 +appVersion: 0.26.2 description: locally hosted web application that allows you to perform various operations on PDF files home: https://github.com/Stirling-Tools/Stirling-PDF diff --git a/cucumber/exampleFiles/ghost1.pdf b/cucumber/exampleFiles/ghost1.pdf new file mode 100644 index 00000000000..4e497da02ab Binary files /dev/null and b/cucumber/exampleFiles/ghost1.pdf differ diff --git a/cucumber/exampleFiles/ghost2.pdf b/cucumber/exampleFiles/ghost2.pdf new file mode 100644 index 00000000000..6b2f529b8ad Binary files /dev/null and b/cucumber/exampleFiles/ghost2.pdf differ diff --git a/cucumber/exampleFiles/ghost3.pdf b/cucumber/exampleFiles/ghost3.pdf new file mode 100644 index 00000000000..ea0516614c7 Binary files /dev/null and b/cucumber/exampleFiles/ghost3.pdf differ diff --git a/cucumber/exampleFiles/images.pdf b/cucumber/exampleFiles/images.pdf new file mode 100644 index 00000000000..a87bca41448 Binary files /dev/null and b/cucumber/exampleFiles/images.pdf differ diff --git a/cucumber/exampleFiles/pdfa1.pdf b/cucumber/exampleFiles/pdfa1.pdf new file mode 100644 index 00000000000..2873c0d464b Binary files /dev/null and b/cucumber/exampleFiles/pdfa1.pdf differ diff --git a/cucumber/exampleFiles/pdfa2.pdf b/cucumber/exampleFiles/pdfa2.pdf new file mode 100644 index 00000000000..b0622aec9eb Binary files /dev/null and b/cucumber/exampleFiles/pdfa2.pdf differ diff --git a/cucumber/features/environment.py b/cucumber/features/environment.py index ec7f2c9ff3f..ca56b21f196 100644 --- a/cucumber/features/environment.py +++ b/cucumber/features/environment.py @@ -14,3 +14,8 @@ def after_scenario(context, scenario): os.remove('response_file') if hasattr(context, 'file_name') and os.path.exists(context.file_name): os.remove(context.file_name) + + # Remove any temporary files + for temp_file in os.listdir('.'): + if temp_file.startswith('genericNonCustomisableName') or temp_file.startswith('temp_image_'): + os.remove(temp_file) \ No newline at end of file diff --git a/cucumber/features/examples.feature b/cucumber/features/examples.feature index 04e4081fa65..c6477466fd7 100644 --- a/cucumber/features/examples.feature +++ b/cucumber/features/examples.feature @@ -1,4 +1,4 @@ -@example +@example @general Feature: API Validation @positive @password diff --git a/cucumber/features/external.feature b/cucumber/features/external.feature index 1d503135de5..c1330f523c3 100644 --- a/cucumber/features/external.feature +++ b/cucumber/features/external.feature @@ -32,7 +32,7 @@ Feature: API Validation @ocr @positive Scenario: Extract Image Scans Given I generate a PDF file as "fileInput" - And the pdf contains 3 images on 2 pages + And the pdf contains 3 images of size 300x300 on 2 pages And the request data includes | parameter | value | | angleThreshold | 5 | @@ -125,8 +125,7 @@ Feature: API Validation @ocr Scenario: PDFA - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/pdfa2.pdf" as parameter "fileInput" And the request data includes | parameter | value | | outputFormat | pdfa | @@ -137,8 +136,7 @@ Feature: API Validation @ocr Scenario: PDFA1 - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/pdfa1.pdf" as parameter "fileInput" And the request data includes | parameter | value | | outputFormat | pdfa-1 | @@ -149,8 +147,7 @@ Feature: API Validation @compress @ghostscript @positive Scenario: Compress - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/ghost3.pdf" as parameter "fileInput" And the request data includes | parameter | value | | optimizeLevel | 4 | @@ -161,8 +158,7 @@ Feature: API Validation @compress @ghostscript @positive Scenario: Compress - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/ghost2.pdf" as parameter "fileInput" And the request data includes | parameter | value | | optimizeLevel | 1 | @@ -175,8 +171,7 @@ Feature: API Validation @compress @ghostscript @positive Scenario: Compress - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text + Given I use an example file at "exampleFiles/ghost1.pdf" as parameter "fileInput" And the request data includes | parameter | value | | optimizeLevel | 1 | diff --git a/cucumber/features/general.feature b/cucumber/features/general.feature index 229d37b50c6..345f59cbc8d 100644 --- a/cucumber/features/general.feature +++ b/cucumber/features/general.feature @@ -94,3 +94,23 @@ Feature: API Validation | 1 | 10 | 2 | 10 | + @extract-images + Scenario Outline: Extract Image Scans + Given I use an example file at "exampleFiles/images.pdf" as parameter "fileInput" + And the request data includes + | parameter | value | + | format | | + When I send the API request to the endpoint "/api/v1/misc/extract-images" + Then the response content type should be "application/octet-stream" + And the response file should have extension ".zip" + And the response ZIP should contain 20 files + And the response file should have size greater than 0 + And the response status code should be 200 + + Examples: + | format | + | png | + | gif | + | jpeg | + + diff --git a/cucumber/features/steps/step_definitions.py b/cucumber/features/steps/step_definitions.py index 60479b6eac3..65a49fda0ad 100644 --- a/cucumber/features/steps/step_definitions.py +++ b/cucumber/features/steps/step_definitions.py @@ -6,11 +6,14 @@ import random import string from reportlab.lib.pagesizes import letter +from reportlab.lib.utils import ImageReader from reportlab.pdfgen import canvas import mimetypes import requests import zipfile import shutil +import re +from PIL import Image, ImageDraw ######### # GIVEN # @@ -43,8 +46,6 @@ def step_use_example_file(context, filePath, fileInput): except FileNotFoundError: raise FileNotFoundError(f"The example file '{filePath}' does not exist.") - - @given('the pdf contains {page_count:d} pages') def step_pdf_contains_pages(context, page_count): writer = PdfWriter() @@ -66,8 +67,6 @@ def step_pdf_contains_blank_pages(context, page_count): context.files[context.param_name].close() context.files[context.param_name] = open(context.file_name, 'rb') - - def create_black_box_image(file_name, size): can = canvas.Canvas(file_name, pagesize=size) width, height = size @@ -76,36 +75,75 @@ def create_black_box_image(file_name, size): can.showPage() can.save() -def create_pdf_with_black_boxes(file_name, image_count, page_count): - page_width, page_height = letter - box_size = 72 # 1 inch by 1 inch black box +@given(u'the pdf contains {image_count:d} images of size {width:d}x{height:d} on {page_count:d} pages') +def step_impl(context, image_count, width, height, page_count): + context.param_name = "fileInput" + context.file_name = "genericNonCustomisableName.pdf" + create_pdf_with_images_and_boxes(context.file_name, image_count, page_count, width, height) + if not hasattr(context, 'files'): + context.files = {} + context.files[context.param_name] = open(context.file_name, 'rb') + +def add_black_boxes_to_image(image): + if isinstance(image, str): + image = Image.open(image) + + draw = ImageDraw.Draw(image) + draw.rectangle([(0, 0), image.size], fill=(0, 0, 0)) # Fill image with black + return image + +def create_pdf_with_images_and_boxes(file_name, image_count, page_count, image_width, image_height): + page_width, page_height = max(letter[0], image_width), max(letter[1], image_height) boxes_per_page = image_count // page_count + (1 if image_count % page_count != 0 else 0) - + writer = PdfWriter() box_counter = 0 - + for page in range(page_count): packet = io.BytesIO() - can = canvas.Canvas(packet, pagesize=letter) - + can = canvas.Canvas(packet, pagesize=(page_width, page_height)) + for i in range(boxes_per_page): if box_counter >= image_count: break - x = (i % (page_width // box_size)) * box_size - y = page_height - ((i // (page_width // box_size) + 1) * box_size) - can.setFillColorRGB(0, 0, 0) - can.rect(x, y, box_size, box_size, fill=1) + + # Simulating a dynamic image creation (replace this with your actual image creation logic) + # For demonstration, we'll create a simple black image + dummy_image = Image.new('RGB', (image_width, image_height), color='white') # Create a white image + dummy_image = add_black_boxes_to_image(dummy_image) # Add black boxes + + # Convert the PIL Image to bytes to pass to drawImage + image_bytes = io.BytesIO() + dummy_image.save(image_bytes, format='PNG') + image_bytes.seek(0) + + # Check if the image fits in the current page dimensions + x = (i % (page_width // image_width)) * image_width + y = page_height - (((i % (page_height // image_height)) + 1) * image_height) + + if x + image_width > page_width or y < 0: + break + + # Add the image to the PDF + can.drawImage(ImageReader(image_bytes), x, y, width=image_width, height=image_height) box_counter += 1 - + can.showPage() can.save() packet.seek(0) new_pdf = PdfReader(packet) writer.add_page(new_pdf.pages[0]) - + + # Write the PDF to file with open(file_name, 'wb') as f: writer.write(f) + # Clean up temporary image files + for i in range(image_count): + temp_image_path = f"temp_image_{i}.png" + if os.path.exists(temp_image_path): + os.remove(temp_image_path) + @given('the pdf contains {image_count:d} images on {page_count:d} pages') def step_pdf_contains_images(context, image_count, page_count): if not hasattr(context, 'param_name'): @@ -118,7 +156,6 @@ def step_pdf_contains_images(context, image_count, page_count): context.files[context.param_name].close() context.files[context.param_name] = open(context.file_name, 'rb') - @given('the pdf contains {page_count:d} pages with random text') def step_pdf_contains_pages_with_random_text(context, page_count): buffer = io.BytesIO() @@ -186,6 +223,21 @@ def save_generated_pdf(context, filename): # WHEN # ######## +@when('I send a GET request to "{endpoint}"') +def step_send_get_request(context, endpoint): + base_url = "http://localhost:8080" + full_url = f"{base_url}{endpoint}" + response = requests.get(full_url) + context.response = response + +@when('I send a GET request to "{endpoint}" with parameters') +def step_send_get_request_with_params(context, endpoint): + base_url = "http://localhost:8080" + params = {row['parameter']: row['value'] for row in context.table} + full_url = f"{base_url}{endpoint}" + response = requests.get(full_url, params=params) + context.response = response + @when('I send the API request to the endpoint "{endpoint}"') def step_send_api_request(context, endpoint): url = f"http://localhost:8080{endpoint}" @@ -278,7 +330,6 @@ def step_save_response_file(context, filename): f.write(context.response.content) print(f"Saved response content to {filename}") - @then('the response PDF should contain {page_count:d} pages') def step_check_response_pdf_page_count(context, page_count): response_file = io.BytesIO(context.response.content) @@ -305,3 +356,26 @@ def step_check_response_zip_doc_page_count(context, doc_count, pages_per_doc): reader = PdfReader(pdf_file) actual_pages_per_doc = len(reader.pages) assert actual_pages_per_doc == pages_per_doc, f"Expected {pages_per_doc} pages per document but got {actual_pages_per_doc} pages in document {file_name}" + +@then('the JSON value of "{key}" should be "{expected_value}"') +def step_check_json_value(context, key, expected_value): + actual_value = context.response.json().get(key) + assert actual_value == expected_value, \ + f"Expected JSON value for '{key}' to be '{expected_value}' but got '{actual_value}'" + +@then('JSON list entry containing "{identifier_key}" as "{identifier_value}" should have "{target_key}" as "{target_value}"') +def step_check_json_list_entry(context, identifier_key, identifier_self, target_key, target_value): + json_response = context.response.json() + for entry in json_response: + if entry.get(identifier_key) == identifier_value: + assert entry.get(target_key) == target_value, \ + f"Expected {target_key} to be {target_value} in entry where {identifier_key} is {identifier_value}, but found {entry.get(target_key)}" + break + else: + raise AssertionError(f"No entry with {identifier_key} as {identifier_value} found") + +@then('the response should match the regex "{pattern}"') +def step_response_matches_regex(context, pattern): + response_text = context.response.text + assert re.match(pattern, response_text), \ + f"Response '{response_text}' does not match the expected pattern '{pattern}'" diff --git a/exampleYmlFiles/docker-compose-latest.yml b/exampleYmlFiles/docker-compose-latest.yml index 794eb1be4fe..6090e291e3d 100644 --- a/exampleYmlFiles/docker-compose-latest.yml +++ b/exampleYmlFiles/docker-compose-latest.yml @@ -22,7 +22,6 @@ services: DOCKER_ENABLE_SECURITY: "false" SECURITY_ENABLELOGIN: "false" LANGS: "en_GB,en_US,ar_AR,de_DE,fr_FR,es_ES,zh_CN,zh_TW,ca_CA,it_IT,sv_SE,pl_PL,ro_RO,ko_KR,pt_BR,ru_RU,el_GR,hi_IN,hu_HU,tr_TR,id_ID" - INSTALL_BOOK_AND_ADVANCED_HTML_OPS: "true" SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest diff --git a/scripts/ignore_translation.toml b/scripts/ignore_translation.toml index d55e820ac8d..d230b3f4746 100644 --- a/scripts/ignore_translation.toml +++ b/scripts/ignore_translation.toml @@ -212,6 +212,14 @@ ignore = [ 'language.direction', ] +[th_TH] +ignore = [ + 'language.direction', + 'pipeline.title', + 'pipelineOptions.pipelineHeader', + 'showJS.tags', +] + [tr_TR] ignore = [ 'language.direction', diff --git a/scripts/init-without-ocr.sh b/scripts/init-without-ocr.sh index 9905403156b..49218f76b69 100644 --- a/scripts/init-without-ocr.sh +++ b/scripts/init-without-ocr.sh @@ -12,7 +12,8 @@ fi umask "$UMASK" || true if [[ "$INSTALL_BOOK_AND_ADVANCED_HTML_OPS" == "true" && "$FAT_DOCKER" != "true" ]]; then - apk add --no-cache calibre@testing + echo "issue with calibre in current version, feature currently disabled on Stirling-PDF" + #apk add --no-cache calibre@testing fi if [[ "$FAT_DOCKER" != "true" ]]; then diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java index 12dd625c428..2240dbed229 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/CompressController.java @@ -99,7 +99,7 @@ public ResponseEntity optimizePdf(@ModelAttribute OptimizePdfRequest req List command = new ArrayList<>(); command.add("gs"); command.add("-sDEVICE=pdfwrite"); - command.add("-dCompatibilityLevel=1.4"); + command.add("-dCompatibilityLevel=1.5"); switch (optimizeLevel) { case 1: diff --git a/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java b/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java index 41c251e1310..01f23dd91af 100644 --- a/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java +++ b/src/main/java/stirling/software/SPDF/repository/AuthorityRepository.java @@ -3,9 +3,11 @@ import java.util.Set; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import stirling.software.SPDF.model.Authority; +@Repository public interface AuthorityRepository extends JpaRepository { // Set findByUsername(String username); Set findByUser_Username(String username); diff --git a/src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java b/src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java index 31841a5771e..92d7bb81d4b 100644 --- a/src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java +++ b/src/main/java/stirling/software/SPDF/repository/PersistentLoginRepository.java @@ -1,7 +1,9 @@ package stirling.software.SPDF.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import stirling.software.SPDF.model.PersistentLogin; +@Repository public interface PersistentLoginRepository extends JpaRepository {} diff --git a/src/main/java/stirling/software/SPDF/repository/UserRepository.java b/src/main/java/stirling/software/SPDF/repository/UserRepository.java index ad65f27dd56..cf0c80d176d 100644 --- a/src/main/java/stirling/software/SPDF/repository/UserRepository.java +++ b/src/main/java/stirling/software/SPDF/repository/UserRepository.java @@ -3,10 +3,12 @@ import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; import stirling.software.SPDF.model.User; -public interface UserRepository extends JpaRepository { +@Repository +public interface UserRepository extends JpaRepository { Optional findByUsernameIgnoreCase(String username); Optional findByUsername(String username); diff --git a/src/main/resources/messages_th_TH.properties b/src/main/resources/messages_th_TH.properties new file mode 100644 index 00000000000..a40ac9395b9 --- /dev/null +++ b/src/main/resources/messages_th_TH.properties @@ -0,0 +1,1127 @@ +########### +# Generic # +########### +# the direction that the language is written (ltr=left to right, rtl = right to left) +language.direction=ltr + +pdfPrompt=เลือก PDF +multiPdfPrompt=เลือก PDF หลายไฟล์ (2 ขึ้นไป) +multiPdfDropPrompt=เลือก (หรือลากและวาง) PDF ทั้งหมดที่คุณต้องการ +imgPrompt=เลือกภาพ +genericSubmit=ส่ง +processTimeWarning=คำเตือน: กระบวนการนี้อาจใช้เวลาสูงสุดหนึ่งนาทีขึ้นอยู่กับขนาดไฟล์ +pageOrderPrompt=เรียงลำดับหน้าตามความต้องการ (ป้อนหมายเลขหน้าแยกด้วยเครื่องหมายจุลภาคหรือฟังก์ชัน เช่น 2n+1) : +pageSelectionPrompt=เลือกหน้าตามความต้องการ (ป้อนหมายเลขหน้าแยกด้วยเครื่องหมายจุลภาค เช่น 1,5,6 หรือฟังก์ชัน เช่น 2n+1) : +goToPage=ไปที่หน้า +true=จริง +false=เท็จ +unknown=ไม่ทราบ +save=บันทึก +saveToBrowser=บันทึกในเบราว์เซอร์ +close=ปิด +filesSelected=ไฟล์ที่เลือก +noFavourites=ไม่มีรายการโปรดที่เพิ่ม +downloadComplete=การดาวน์โหลดเสร็จสมบูรณ์ +bored=เบื่อรอหรือยัง? +alphabet=ตัวอักษร +downloadPdf=ดาวน์โหลด PDF +text=ข้อความ +font=ฟอนต์ +selectFillter=-- เลือก -- +pageNum=หมายเลขหน้า +sizes.small=เล็ก +sizes.medium=กลาง +sizes.large=ใหญ่ +sizes.x-large=ใหญ่มาก +error.pdfPassword=เอกสาร PDF มีรหัสผ่าน และไม่ได้ระบุรหัสผ่านหรือรหัสผ่านไม่ถูกต้อง +delete=ลบ +username=ชื่อผู้ใช้ +password=รหัสผ่าน +welcome=ยินดีต้อนรับ +property=คุณสมบัติ +black=ดำ +white=ขาว +red=แดง +green=เขียว +blue=น้ำเงิน +custom=ปรับแต่ง... +WorkInProgess=กำลังดำเนินการ อาจไม่ทำงานหรือมีบั๊ก โปรดรายงานปัญหาใด ๆ! +poweredBy=ขับเคลื่อนโดย +yes=ใช่ +no=ไม่ +changedCredsMessage=ข้อมูลรับรองเปลี่ยนแปลงแล้ว! +notAuthenticatedMessage=ผู้ใช้ไม่ได้รับการยืนยัน +userNotFoundMessage=ไม่พบผู้ใช้ +incorrectPasswordMessage=รหัสผ่านปัจจุบันไม่ถูกต้อง +usernameExistsMessage=ชื่อผู้ใช้ใหม่มีอยู่แล้ว +invalidUsernameMessage=ชื่อผู้ใช้ไม่ถูกต้อง ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง +confirmPasswordErrorMessage=รหัสผ่านใหม่และยืนยันรหัสผ่านใหม่ต้องตรงกัน +deleteCurrentUserMessage=ไม่สามารถลบผู้ใช้ที่เข้าสู่ระบบในปัจจุบันได้ +deleteUsernameExistsMessage=ชื่อผู้ใช้ไม่ปรากฏและไม่สามารถลบได้ +downgradeCurrentUserMessage=ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้ +downgradeCurrentUserLongMessage=ไม่สามารถลดระดับบทบาทของผู้ใช้ปัจจุบันได้ ดังนั้นผู้ใช้ปัจจุบันจะไม่ปรากฏ +userAlreadyExistsOAuthMessage=ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้ OAuth2 +userAlreadyExistsWebMessage=ผู้ใช้มีอยู่แล้วในฐานะผู้ใช้เว็บ +error=ข้อผิดพลาด +oops=อุ๊ย! +help=ช่วยเหลือ +goHomepage=ไปที่หน้าหลัก +joinDiscord=เข้าร่วมเซิร์ฟเวอร์ Discord ของเรา +seeDockerHub=ดู Docker Hub +visitGithub=เยี่ยมชมที่เก็บ Github +donate=บริจาค +color=สี +sponsor=ผู้สนับสนุน +info=ข้อมูล + + + +############### +# Pipeline # +############### +pipeline.header=เมนู Pipeline (เบต้า) +pipeline.uploadButton=อัปโหลดแบบกำหนดเอง +pipeline.configureButton=กำหนดค่า +pipeline.defaultOption=กำหนดเอง +pipeline.submitButton=ส่ง +pipeline.help=ความช่วยเหลือ Pipeline +pipeline.scanHelp=ความช่วยเหลือการสแกนโฟลเดอร์ +pipeline.deletePrompt=คุณแน่ใจว่าต้องการลบ pipeline ใช่ไหม + +###################### +# Pipeline Options # +###################### +pipelineOptions.header=การกำหนดค่า Pipeline +pipelineOptions.pipelineNameLabel=ชื่อ Pipeline +pipelineOptions.saveSettings=บันทึกการตั้งค่าการดำเนินการ +pipelineOptions.pipelineNamePrompt=ใส่ชื่อ pipeline ที่นี่ +pipelineOptions.selectOperation=เลือกการดำเนินการ +pipelineOptions.addOperationButton=เพิ่มการดำเนินการ +pipelineOptions.pipelineHeader=Pipeline: +pipelineOptions.saveButton=ดาวน์โหลด +pipelineOptions.validateButton=ตรวจสอบความถูกต้อง + + + + +############# +# NAVBAR # +############# +navbar.favorite=รายการโปรด +navbar.darkmode=โหมดมืด +navbar.language=ภาษา +navbar.settings=การตั้งค่า +navbar.allTools=เครื่องมือทั้งหมด +navbar.multiTool=เครื่องมือหลายตัว +navbar.sections.organize=จัดระเบียบ +navbar.sections.convertTo=แปลงเป็น PDF +navbar.sections.convertFrom=แปลงจาก PDF +navbar.sections.security=ลงนามและความปลอดภัย +navbar.sections.advance=ขั้นสูง +navbar.sections.edit=ดูและแก้ไข + +############# +# SETTINGS # +############# +settings.title=การตั้งค่า +settings.update=มีการอัปเดต +settings.updateAvailable={0} คือเวอร์ชันที่ติดตั้งในปัจจุบัน มีเวอร์ชันใหม่ ({1}) พร้อมให้บริการ +settings.appVersion=เวอร์ชันแอป: +settings.downloadOption.title=เลือกตัวเลือกการดาวน์โหลด (สำหรับการดาวน์โหลดไฟล์เดียวที่ไม่ใช่ zip): +settings.downloadOption.1=เปิดในหน้าต่างเดียวกัน +settings.downloadOption.2=เปิดในหน้าต่างใหม่ +settings.downloadOption.3=ดาวน์โหลดไฟล์ +settings.zipThreshold=บีบอัดไฟล์เมื่อจำนวนไฟล์ที่ดาวน์โหลดเกิน +settings.signOut=ออกจากระบบ +settings.accountSettings=การตั้งค่าบัญชี +settings.bored.help=เปิดใช้งานเกม easter egg +settings.cacheInputs.name=บันทึกการป้อนฟอร์ม +settings.cacheInputs.help=เปิดใช้งานเพื่อบันทึกการป้อนข้อมูลที่ใช้ก่อนหน้านี้สำหรับการรันในอนาคต + +changeCreds.title=เปลี่ยนข้อมูลรับรอง +changeCreds.header=อัปเดตรายละเอียดบัญชีของคุณ +changeCreds.changePassword=คุณกำลังใช้ข้อมูลรับรองการเข้าสู่ระบบเริ่มต้น กรุณาใส่รหัสผ่านใหม่ +changeCreds.newUsername=ชื่อผู้ใช้ใหม่ +changeCreds.oldPassword=รหัสผ่านปัจจุบัน +changeCreds.newPassword=รหัสผ่านใหม่ +changeCreds.confirmNewPassword=ยืนยันรหัสผ่านใหม่ +changeCreds.submit=ส่งการเปลี่ยนแปลง + + + +account.title=การตั้งค่าบัญชี +account.accountSettings=การตั้งค่าบัญชี +account.adminSettings=การตั้งค่าผู้ดูแลระบบ - ดูและเพิ่มผู้ใช้ +account.userControlSettings=การควบคุมผู้ใช้ +account.changeUsername=เปลี่ยนชื่อผู้ใช้ +account.newUsername=ชื่อผู้ใช้ใหม่ +account.password=รหัสผ่านยืนยัน +account.oldPassword=รหัสผ่านเก่า +account.newPassword=รหัสผ่านใหม่ +account.changePassword=เปลี่ยนรหัสผ่าน +account.confirmNewPassword=ยืนยันรหัสผ่านใหม่ +account.signOut=ออกจากระบบ +account.yourApiKey=คีย์ API ของคุณ +account.syncTitle=ซิงค์การตั้งค่าเบราว์เซอร์กับบัญชี +account.settingsCompare=การเปรียบเทียบการตั้งค่า: +account.property=คุณสมบัติ +account.webBrowserSettings=การตั้งค่าเบราว์เซอร์เว็บ +account.syncToBrowser=ซิงค์บัญชี -> เบราว์เซอร์ +account.syncToAccount=ซิงค์บัญชี <- เบราว์เซอร์ + + +adminUserSettings.title=การควบคุมผู้ใช้ +adminUserSettings.header=การควบคุมผู้ใช้ +adminUserSettings.admin=ผู้ดูแลระบบ +adminUserSettings.user=ผู้ใช้ +adminUserSettings.addUser=เพิ่มผู้ใช้ใหม่ +adminUserSettings.deleteUser=ลบผู้ใช้ +adminUserSettings.confirmDeleteUser=ควรลบผู้ใช้นี้หรือไม่? +adminUserSettings.usernameInfo=ชื่อผู้ใช้สามารถประกอบด้วยตัวอักษร ตัวเลข และอักขระพิเศษต่อไปนี้ @._+- หรือจะต้องเป็นที่อยู่อีเมลที่ถูกต้อง +adminUserSettings.roles=บทบาท +adminUserSettings.role=บทบาท +adminUserSettings.actions=การดำเนินการ +adminUserSettings.apiUser=ผู้ใช้ API จำกัด +adminUserSettings.extraApiUser=ผู้ใช้ API เพิ่มเติม +adminUserSettings.webOnlyUser=ผู้ใช้เว็บเท่านั้น +adminUserSettings.demoUser=ผู้ใช้ทดลอง (ไม่มีการตั้งค่าปรับแต่ง) +adminUserSettings.internalApiUser=ผู้ใช้ API ภายใน +adminUserSettings.forceChange=บังคับให้ผู้ใช้เปลี่ยนรหัสผ่านในการเข้าสู่ระบบ +adminUserSettings.submit=บันทึกผู้ใช้ +adminUserSettings.changeUserRole=เปลี่ยนบทบาทของผู้ใช้ +adminUserSettings.authenticated=ได้รับการยืนยันแล้ว + + +database.title=การนำเข้า/ส่งออกฐานข้อมูล +database.header=การนำเข้า/ส่งออกฐานข้อมูล +database.fileName=ชื่อไฟล์ +database.creationDate=วันที่สร้าง +database.fileSize=ขนาดไฟล์ +database.deleteBackupFile=ลบไฟล์สำรอง +database.importBackupFile=นำเข้าไฟล์สำรอง +database.downloadBackupFile=ดาวน์โหลดไฟล์สำรอง +database.info_1=เมื่อนำเข้าข้อมูล จำเป็นต้องแน่ใจว่าโครงสร้างถูกต้อง หากไม่แน่ใจว่ากำลังทำอะไรอยู่ ควรขอคำแนะนำและความช่วยเหลือจากมืออาชีพ ความผิดพลาดในโครงสร้างอาจทำให้เกิดข้อบกพร่องในการทำงานของแอปพลิเคชันจนถึงขั้นไม่สามารถรันแอปพลิเคชันได้เลย +database.info_2=ชื่อไฟล์ไม่สำคัญเมื่ออัปโหลด จะถูกเปลี่ยนชื่อภายหลังให้เป็นรูปแบบ backup_user_yyyyMMddHHmm.sql เพื่อให้มีการตั้งชื่อที่สอดคล้องกัน +database.submit=นำเข้าสำรอง +database.importIntoDatabaseSuccessed=การนำเข้าในฐานข้อมูลสำเร็จ +database.fileNotFound=ไม่พบไฟล์ +database.fileNullOrEmpty=ไฟล์ต้องไม่ว่างเปล่าหรือไม่มีข้อมูล +database.failedImportFile=การนำเข้าไฟล์ล้มเหลว + +############# +# HOME-PAGE # +############# +home.desc=ศูนย์รวมทุกความต้องการของคุณเกี่ยวกับ PDF ที่โฮสต์ในท้องถิ่นของคุณ +home.searchBar=ค้นหาคุณสมบัติ... + + +home.viewPdf.title=ดู PDF +home.viewPdf.desc=ดู เพิ่มคำอธิบาย เพิ่มข้อความหรือรูปภาพ +viewPdf.tags=ดู, อ่าน, เพิ่มคำอธิบาย, ข้อความ, รูปภาพ + +home.multiTool.title=เครื่องมือ PDF หลายตัว +home.multiTool.desc=รวม หมุน จัดเรียง และลบหน้าต่างๆ +multiTool.tags=เครื่องมือหลายตัว, หลายการดำเนินการ, UI, คลิกและลาก, ส่วนหน้า, ฝั่งไคลเอนต์, อินเตอร์แอคทีฟ, เคลื่อนย้าย + +home.merge.title=รวมไฟล์ PDF +home.merge.desc=รวม PDF หลายไฟล์เป็นหนึ่งเดียวได้อย่างง่ายดาย +merge.tags=รวม, การดำเนินการหน้า, ฝั่งเซิร์ฟเวอร์ + +home.split.title=แยกไฟล์ PDF +home.split.desc=แยก PDF เป็นหลายเอกสาร +split.tags=การดำเนินการหน้า, แบ่ง, หลายหน้า, ตัด, ฝั่งเซิร์ฟเวอร์ + +home.rotate.title=หมุน +home.rotate.desc=หมุน PDF ของคุณได้อย่างง่ายดาย +rotate.tags=ฝั่งเซิร์ฟเวอร์ + + +home.imageToPdf.title=รูปภาพเป็น PDF +home.imageToPdf.desc=แปลงรูปภาพ (PNG, JPEG, GIF) เป็น PDF +imageToPdf.tags=การแปลง, รูปภาพ, JPG, ภาพ, รูปถ่าย + +home.pdfToImage.title=PDF เป็นรูปภาพ +home.pdfToImage.desc=แปลง PDF เป็นรูปภาพ (PNG, JPEG, GIF) +pdfToImage.tags=การแปลง, รูปภาพ, JPG, ภาพ, รูปถ่าย + +home.pdfOrganiser.title=จัดระเบียบ +home.pdfOrganiser.desc=ลบ/จัดเรียงหน้าต่างๆ ในลำดับที่ต้องการ +pdfOrganiser.tags=สองหน้า, คู่ขนาน, เรียงลำดับ, เคลื่อนย้าย + + +home.addImage.title=เพิ่มรูปภาพ +home.addImage.desc=เพิ่มรูปภาพไปยังตำแหน่งที่กำหนดใน PDF +addImage.tags=รูปภาพ, JPG, ภาพ, รูปถ่าย + +home.watermark.title=เพิ่มลายน้ำ +home.watermark.desc=เพิ่มลายน้ำที่กำหนดเองลงในเอกสาร PDF ของคุณ +watermark.tags=ข้อความ, ซ้ำ, ป้าย, ของคุณเอง, ลิขสิทธิ์, เครื่องหมายการค้า, รูปภาพ, JPG, ภาพ, รูปถ่าย + +home.permissions.title=เปลี่ยนสิทธิ์ +home.permissions.desc=เปลี่ยนสิทธิ์ของเอกสาร PDF ของคุณ +permissions.tags=อ่าน, เขียน, แก้ไข, พิมพ์ + + +home.removePages.title=ลบ +home.removePages.desc=ลบหน้าที่ไม่ต้องการจากเอกสาร PDF ของคุณ +removePages.tags=ลบหน้า, ลบหน้า + +home.addPassword.title=เพิ่มรหัสผ่าน +home.addPassword.desc=เข้ารหัสเอกสาร PDF ของคุณด้วยรหัสผ่าน +addPassword.tags=ปลอดภัย, ความปลอดภัย + +home.removePassword.title=ลบรหัสผ่าน +home.removePassword.desc=ลบรหัสผ่านจากการป้องกันเอกสาร PDF ของคุณ +removePassword.tags=ปลอดภัย, ถอดรหัส, ความปลอดภัย, ลบรหัสผ่าน + +home.compressPdfs.title=บีบอัด +home.compressPdfs.desc=บีบอัด PDF เพื่อลดขนาดไฟล์ +compressPdfs.tags=ย่อ, เล็ก, จิ๋ว + + +home.changeMetadata.title=เปลี่ยนข้อมูลเมตา +home.changeMetadata.desc=เปลี่ยน/ลบ/เพิ่มข้อมูลเมตาจากเอกสาร PDF +changeMetadata.tags=ชื่อ, ผู้แต่ง, วันที่, สร้าง, เวลา, ผู้เผยแพร่, ผู้ผลิต, สถิติ + +home.fileToPDF.title=แปลงไฟล์เป็น PDF +home.fileToPDF.desc=แปลงไฟล์เกือบทุกประเภทเป็น PDF (DOCX, PNG, XLS, PPT, TXT และอื่น ๆ) +fileToPDF.tags=การแปลง, รูปแบบ, เอกสาร, รูปภาพ, สไลด์, ข้อความ, การแปลง, สำนักงาน, เอกสาร, Word, Excel, PowerPoint + +home.ocr.title=OCR / ทำความสะอาดการสแกน +home.ocr.desc=ทำความสะอาดการสแกนและตรวจจับข้อความจากภาพภายใน PDF และเพิ่มเป็นข้อความอีกครั้ง +ocr.tags=การรู้จำ, ข้อความ, รูปภาพ, การสแกน, อ่าน, ระบุ, ตรวจจับ, แก้ไขได้ + + +home.extractImages.title=แยกรูปภาพ +home.extractImages.desc=แยกรูปภาพทั้งหมดจาก PDF และบันทึกในรูปแบบ zip +extractImages.tags=รูปภาพ, ภาพ, บันทึก, เก็บถาวร, zip, จับ, รับ + +home.pdfToPDFA.title=PDF เป็น PDF/A +home.pdfToPDFA.desc=แปลง PDF เป็น PDF/A สำหรับการจัดเก็บระยะยาว +pdfToPDFA.tags=การจัดเก็บ, ระยะยาว, มาตรฐาน, การแปลง, การเก็บรักษา + +home.PDFToWord.title=PDF เป็น Word +home.PDFToWord.desc=แปลง PDF เป็นรูปแบบ Word (DOC, DOCX และ ODT) +PDFToWord.tags=doc, docx, odt, word, การแปลง, รูปแบบ, การแปลง, สำนักงาน, microsoft, docfile + +home.PDFToPresentation.title=PDF เป็น Presentation +home.PDFToPresentation.desc=แปลง PDF เป็นรูปแบบ Presentation (PPT, PPTX และ ODP) +PDFToPresentation.tags=สไลด์, โชว์, สำนักงาน, microsoft + +home.PDFToText.title=PDF เป็น RTF (Text) +home.PDFToText.desc=แปลง PDF เป็นรูปแบบข้อความหรือ RTF +PDFToText.tags=รูปแบบข้อความที่มีคุณภาพ, rich text format + +home.PDFToHTML.title=PDF เป็น HTML +home.PDFToHTML.desc=แปลง PDF เป็นรูปแบบ HTML +PDFToHTML.tags=เนื้อหาเว็บ, เป็นมิตรกับเบราว์เซอร์ + + +home.PDFToXML.title=PDF เป็น XML +home.PDFToXML.desc=แปลง PDF เป็นรูปแบบ XML +PDFToXML.tags=การแยกข้อมูล, เนื้อหาโครงสร้าง, การทำงานร่วมกัน, การแปลง + +home.ScannerImageSplit.title=ตรวจจับ/แยกรูปภาพสแกน +home.ScannerImageSplit.desc=แยกรูปภาพหลายรูปจากภาพ/ PDF +ScannerImageSplit.tags=แยก, ตรวจจับอัตโนมัติ, การสแกน, รูปภาพหลายรูป, จัดระเบียบ + +home.sign.title=เซ็นชื่อ +home.sign.desc=เพิ่มลายเซ็นลงใน PDF ด้วยการวาด ข้อความ หรือรูปภาพ +sign.tags=อนุญาต, อักษรย่อ, ลายเซ็นที่วาด, ลายเซ็นข้อความ, ลายเซ็นรูปภาพ + +home.flatten.title=แบน +home.flatten.desc=ลบองค์ประกอบแบบอินเตอร์แอคทีฟและฟอร์มทั้งหมดจาก PDF +flatten.tags=สถิต, ปิดการใช้งาน, ไม่โต้ตอบ, ลดจำนวน + +home.repair.title=ซ่อมแซม +home.repair.desc=พยายามซ่อมแซม PDF ที่เสียหาย/แตก +repair.tags=ซ่อมแซม, กู้คืน, กู้ + +home.removeBlanks.title=ลบหน้าว่าง +home.removeBlanks.desc=ตรวจจับและลบหน้าว่างจากเอกสาร +removeBlanks.tags=ทำความสะอาด, ลดจำนวน, ไม่มีเนื้อหา, จัดระเบียบ + +home.removeAnnotations.title=ลบคำอธิบายประกอบ +home.removeAnnotations.desc=ลบความคิดเห็น/คำอธิบายประกอบทั้งหมดจาก PDF +removeAnnotations.tags=ความคิดเห็น, เน้นข้อความ, โน้ต, มาร์คอัพ, ลบ + +home.compare.title=เปรียบเทียบ +home.compare.desc=เปรียบเทียบและแสดงความแตกต่างระหว่างเอกสาร PDF สองฉบับ +compare.tags=แยกแยะ, เปรียบเทียบ, การเปลี่ยนแปลง, การวิเคราะห์ + +home.certSign.title=เซ็นชื่อด้วยใบรับรอง +home.certSign.desc=เซ็นชื่อ PDF ด้วยใบรับรอง/คีย์ (PEM/P12) +certSign.tags=ยืนยัน, PEM, P12, เป็นทางการ, เข้ารหัส + +home.removeCertSign.title=ลบลายเซ็นใบรับรอง +home.removeCertSign.desc=ลบลายเซ็นใบรับรองจาก PDF +removeCertSign.tags=ยืนยัน, PEM, P12, เป็นทางการ, ถอดรหัส + +home.pageLayout.title=เลย์เอาต์หลายหน้า +home.pageLayout.desc=รวมหน้าหลายหน้าของเอกสาร PDF เข้าด้วยกันในหน้าเดียว +pageLayout.tags=รวม, ประกอบ, มุมมองเดียว, จัดระเบียบ + +home.scalePages.title=ปรับขนาด/สเกลหน้า +home.scalePages.desc=เปลี่ยนขนาด/สเกลของหน้าและ/หรือเนื้อหาของมัน +scalePages.tags=ปรับขนาด, แก้ไข, มิติ, ปรับ + +home.pipeline.title=Pipeline +home.pipeline.desc=เรียกใช้งานหลายการกระทำใน PDF โดยกำหนดสคริปต์ pipeline +pipeline.tags=อัตโนมัติ, ลำดับ, สคริปต์, ประมวลผลแบทช์ + +home.add-page-numbers.title=เพิ่มหมายเลขหน้า +home.add-page-numbers.desc=เพิ่มหมายเลขหน้าตลอดทั้งเอกสารในตำแหน่งที่กำหนด +add-page-numbers.tags=หน้า, เลขหน้า, จัดระเบียบ, ดัชนี + +home.auto-rename.title=เปลี่ยนชื่อ PDF อัตโนมัติ +home.auto-rename.desc=เปลี่ยนชื่อไฟล์ PDF โดยอัตโนมัติตามหัวข้อที่ตรวจจับได้ +auto-rename.tags=ตรวจจับอัตโนมัติ, ตั้งชื่อใหม่, จัดระเบียบ, ป้าย + +home.adjust-contrast.title=ปรับสี/คอนทราสต์ +home.adjust-contrast.desc=ปรับคอนทราสต์ ความอิ่มตัว และความสว่างของ PDF +adjust-contrast.tags=ปรับสี, จูน, แก้ไข, ปรับปรุง + +home.crop.title=ครอบตัด PDF +home.crop.desc=ครอบตัด PDF เพื่อลดขนาด (รักษาข้อความ!) +crop.tags=ครอบตัด, ลดขนาด, แก้ไข, รูปทรง + +home.autoSplitPDF.title=แยกหน้าอัตโนมัติ +home.autoSplitPDF.desc=แยก PDF ที่สแกนโดยใช้ QR Code แยกหน้า +autoSplitPDF.tags=แยกโดย QR, แยก, ส่วนสแกน, จัดระเบียบ + +home.sanitizePdf.title=ทำความสะอาด +home.sanitizePdf.desc=ลบสคริปต์และองค์ประกอบอื่นๆ จากไฟล์ PDF +sanitizePdf.tags=ทำความสะอาด, ปลอดภัย, ปลอดภัย, ลบภัยคุกคาม + +home.URLToPDF.title=URL/เว็บไซต์เป็น PDF +home.URLToPDF.desc=แปลง URL http(s) เป็น PDF +URLToPDF.tags=จับเว็บ, บันทึกหน้า, เว็บเป็นเอกสาร, จัดเก็บ + +home.HTMLToPDF.title=HTML เป็น PDF +home.HTMLToPDF.desc=แปลงไฟล์ HTML หรือ zip เป็น PDF +HTMLToPDF.tags=มาร์กอัป, เนื้อหาเว็บ, การแปลง, การแปลง + + +home.MarkdownToPDF.title=Markdown เป็น PDF +home.MarkdownToPDF.desc=แปลงไฟล์ Markdown เป็น PDF +MarkdownToPDF.tags=มาร์กอัป, เนื้อหาเว็บ, การแปลง, การแปลง + + +home.getPdfInfo.title=รับข้อมูลทั้งหมดเกี่ยวกับ PDF +home.getPdfInfo.desc=รับข้อมูลที่เป็นไปได้ทั้งหมดเกี่ยวกับ PDF +getPdfInfo.tags=ข้อมูล, สถิติ, สถิติ + + +home.extractPage.title=แยกหน้า +home.extractPage.desc=แยกหน้าที่เลือกจาก PDF +extractPage.tags=แยก + + +home.PdfToSinglePage.title=หน้าขนาดใหญ่เพียงหน้าเดียว +home.PdfToSinglePage.desc=รวมหน้าทั้งหมดของ PDF เป็นหน้าเดียวขนาดใหญ่ +PdfToSinglePage.tags=หน้าเดียว + + +home.showJS.title=แสดง Javascript +home.showJS.desc=ค้นหาและแสดง Javascript ที่ฝังใน PDF +showJS.tags=JS + +home.autoRedact.title=ซ่อนข้อมูลอัตโนมัติ +home.autoRedact.desc=ซ่อนข้อความใน PDF โดยอัตโนมัติตามข้อความที่ป้อน +autoRedact.tags=ซ่อน, ซ่อนข้อความ, ซ่อนด้วยสีดำ + +home.tableExtraxt.title=PDF เป็น CSV +home.tableExtraxt.desc=แยกตารางจาก PDF แปลงเป็น CSV +tableExtraxt.tags=CSV, การแยกตาราง, แยก, การแปลง + + +home.autoSizeSplitPDF.title=แยกตามขนาด/จำนวน +home.autoSizeSplitPDF.desc=แยก PDF เป็นเอกสารหลายฉบับตามขนาด จำนวนหน้า หรือจำนวนเอกสาร +autoSizeSplitPDF.tags=pdf, แยก, เอกสาร, การจัดระเบียบ + + +home.overlay-pdfs.title=ซ้อนทับ PDF +home.overlay-pdfs.desc=ซ้อนทับ PDF บน PDF อีกไฟล์หนึ่ง +overlay-pdfs.tags=ซ้อนทับ + +home.split-by-sections.title=แยก PDF เป็นส่วน +home.split-by-sections.desc=แบ่งแต่ละหน้าของ PDF เป็นส่วนย่อยแนวนอนและแนวตั้ง +split-by-sections.tags=แยกส่วน, แบ่ง, ปรับแต่ง + +home.AddStampRequest.title=เพิ่มตราประทับลงใน PDF +home.AddStampRequest.desc=เพิ่มข้อความหรือตราประทับรูปภาพในตำแหน่งที่กำหนด +AddStampRequest.tags=ตราประทับ, เพิ่มรูปภาพ, รูปภาพกึ่งกลาง, ลายน้ำ, PDF, ฝัง, ปรับแต่ง + + +home.PDFToBook.title=PDF เป็นหนังสือ +home.PDFToBook.desc=แปลง PDF เป็นรูปแบบหนังสือ/การ์ตูนโดยใช้ Calibre +PDFToBook.tags=หนังสือ, การ์ตูน, Calibre, แปลง, มังงะ, amazon, kindle + +home.BookToPDF.title=หนังสือเป็น PDF +home.BookToPDF.desc=แปลงรูปแบบหนังสือ/การ์ตูนเป็น PDF โดยใช้ Calibre +BookToPDF.tags=หนังสือ, การ์ตูน, Calibre, แปลง, มังงะ, amazon, kindle + + +########################### +# # +# WEB PAGES # +# # +########################### +#login +login.title=ลงชื่อเข้าใช้ +login.header=ลงชื่อเข้าใช้ +login.signin=ลงชื่อเข้าใช้ +login.rememberme=จำฉันไว้ +login.invalid=ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง +login.locked=บัญชีของคุณถูกล็อค +login.signinTitle=กรุณาลงชื่อเข้าใช้ +login.ssoSignIn=เข้าสู่ระบบด้วย Single Sign-on +login.oauth2AutoCreateDisabled=การสร้างผู้ใช้ OAuth2 อัตโนมัติถูกปิดใช้งาน +login.oauth2RequestNotFound=ไม่พบคำขอการอนุญาต +login.oauth2InvalidUserInfoResponse=การตอบกลับข้อมูลผู้ใช้ไม่ถูกต้อง +login.oauth2invalidRequest=คำขอไม่ถูกต้อง +login.oauth2AccessDenied=การเข้าถึงถูกปฏิเสธ +login.oauth2InvalidTokenResponse=การตอบกลับโทเค็นไม่ถูกต้อง +login.oauth2InvalidIdToken=โทเค็น Id ไม่ถูกต้อง + + +#auto-redact +autoRedact.title=ซ่อนข้อมูลอัตโนมัติ +autoRedact.header=ซ่อนข้อมูลอัตโนมัติ +autoRedact.colorLabel=สี +autoRedact.textsToRedactLabel=ข้อความที่จะซ่อน (แยกด้วยบรรทัด) +autoRedact.textsToRedactPlaceholder=เช่น \nConfidential \nTop-Secret +autoRedact.useRegexLabel=ใช้ Regex +autoRedact.wholeWordSearchLabel=ค้นหาทั้งคำ +autoRedact.customPaddingLabel=การเติมที่กำหนดเอง +autoRedact.convertPDFToImageLabel=แปลง PDF เป็นภาพ PDF (ใช้เพื่อลบข้อความที่อยู่ด้านหลังกล่อง) +autoRedact.submitButton=ส่ง + + +#showJS +showJS.title=แสดง Javascript +showJS.header=แสดง Javascript +showJS.downloadJS=ดาวน์โหลด Javascript +showJS.submit=แสดง + + +#pdfToSinglePage +pdfToSinglePage.title=PDF เป็นหน้าขนาดใหญ่เพียงหน้าเดียว +pdfToSinglePage.header=PDF เป็นหน้าขนาดใหญ่เพียงหน้าเดียว +pdfToSinglePage.submit=แปลงเป็นหน้าขนาดใหญ่เพียงหน้าเดียว + + +#pageExtracter +pageExtracter.title=แยกหน้า +pageExtracter.header=แยกหน้า +pageExtracter.submit=แยก +pageExtracter.placeholder=(เช่น 1,2,8 หรือ 4,7,12-16 หรือ 2n-1) + + +#getPdfInfo +getPdfInfo.title=รับข้อมูลเกี่ยวกับ PDF +getPdfInfo.header=รับข้อมูลเกี่ยวกับ PDF +getPdfInfo.submit=รับข้อมูล +getPdfInfo.downloadJson=ดาวน์โหลด JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown เป็น PDF +MarkdownToPDF.header=Markdown เป็น PDF +MarkdownToPDF.submit=แปลง +MarkdownToPDF.help=กำลังดำเนินการ +MarkdownToPDF.credit=ใช้ WeasyPrint + + + +#url-to-pdf +URLToPDF.title=URL เป็น PDF +URLToPDF.header=URL เป็น PDF +URLToPDF.submit=แปลง +URLToPDF.credit=ใช้ WeasyPrint + + +#html-to-pdf +HTMLToPDF.title=HTML เป็น PDF +HTMLToPDF.header=HTML เป็น PDF +HTMLToPDF.help=ยอมรับไฟล์ HTML และ ZIP ที่มี html/css/รูปภาพ ฯลฯ ที่จำเป็น +HTMLToPDF.submit=แปลง +HTMLToPDF.credit=ใช้ WeasyPrint +HTMLToPDF.zoom=ระดับการซูมสำหรับการแสดงเว็บไซต์ +HTMLToPDF.pageWidth=ความกว้างของหน้าเป็นเซนติเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น) +HTMLToPDF.pageHeight=ความสูงของหน้าเป็นเซนติเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น) +HTMLToPDF.marginTop=ขอบบนของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น) +HTMLToPDF.marginBottom=ขอบล่างของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น) +HTMLToPDF.marginLeft=ขอบซ้ายของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น) +HTMLToPDF.marginRight=ขอบขวาของหน้าเป็นมิลลิเมตร (เว้นว่างเพื่อใช้ค่าเริ่มต้น) +HTMLToPDF.printBackground=แสดงพื้นหลังของเว็บไซต์ +HTMLToPDF.defaultHeader=เปิดใช้งานหัวเรื่องเริ่มต้น (ชื่อและหมายเลขหน้า) +HTMLToPDF.cssMediaType=เปลี่ยนประเภทสื่อ CSS ของหน้า +HTMLToPDF.none=ไม่มี +HTMLToPDF.print=พิมพ์ +HTMLToPDF.screen=หน้าจอ + + +#AddStampRequest +AddStampRequest.header=ตราประทับ PDF +AddStampRequest.title=ตราประทับ PDF +AddStampRequest.stampType=ประเภทตราประทับ +AddStampRequest.stampText=ข้อความตราประทับ +AddStampRequest.stampImage=รูปภาพตราประทับ +AddStampRequest.alphabet=ตัวอักษร +AddStampRequest.fontSize=ขนาดฟอนต์/รูปภาพ +AddStampRequest.rotation=การหมุน +AddStampRequest.opacity=ความทึบ +AddStampRequest.position=ตำแหน่ง +AddStampRequest.overrideX=แทนที่พิกัด X +AddStampRequest.overrideY=แทนที่พิกัด Y +AddStampRequest.customMargin=ขอบที่กำหนดเอง +AddStampRequest.customColor=สีข้อความที่กำหนดเอง +AddStampRequest.submit=ส่ง + + +#sanitizePDF +sanitizePDF.title=ทำความสะอาด PDF +sanitizePDF.header=ทำความสะอาดไฟล์ PDF +sanitizePDF.selectText.1=ลบการกระทำ JavaScript +sanitizePDF.selectText.2=ลบไฟล์ฝังตัว +sanitizePDF.selectText.3=ลบข้อมูลเมตา +sanitizePDF.selectText.4=ลบลิงก์ +sanitizePDF.selectText.5=ลบฟอนต์ +sanitizePDF.submit=ทำความสะอาด PDF + + +#addPageNumbers +addPageNumbers.title=เพิ่มหมายเลขหน้า +addPageNumbers.header=เพิ่มหมายเลขหน้า +addPageNumbers.selectText.1=เลือกไฟล์ PDF: +addPageNumbers.selectText.2=ขนาดขอบ +addPageNumbers.selectText.3=ตำแหน่ง +addPageNumbers.selectText.4=หมายเลขเริ่มต้น +addPageNumbers.selectText.5=หน้าเพื่อกำหนดหมายเลข +addPageNumbers.selectText.6=ข้อความที่กำหนดเอง +addPageNumbers.customTextDesc=ข้อความที่กำหนดเอง +addPageNumbers.numberPagesDesc=หมายเลขหน้าที่จะกำหนด หมายเลขเริ่มต้น 'ทั้งหมด', ยังยอมรับ 1-5 หรือ 2,5,9 เป็นต้น +addPageNumbers.customNumberDesc=ค่าเริ่มต้น {n}, ยังยอมรับ 'หน้า {n} ของ {total}', 'ข้อความ-{n}', '{filename}-{n}' +addPageNumbers.submit=เพิ่มหมายเลขหน้า + + +#auto-rename +auto-rename.title=เปลี่ยนชื่ออัตโนมัติ +auto-rename.header=เปลี่ยนชื่อ PDF อัตโนมัติ +auto-rename.submit=เปลี่ยนชื่ออัตโนมัติ + + +#adjustContrast +adjustContrast.title=ปรับคอนทราสต์ +adjustContrast.header=ปรับคอนทราสต์ +adjustContrast.contrast=คอนทราสต์: +adjustContrast.brightness=ความสว่าง: +adjustContrast.saturation=ความอิ่มตัว: +adjustContrast.download=ดาวน์โหลด + + +#crop +crop.title=ครอบตัด +crop.header=ครอบตัด PDF +crop.submit=ส่ง + + +#autoSplitPDF +autoSplitPDF.title=แยกหน้าอัตโนมัติ +autoSplitPDF.header=แยก PDF อัตโนมัติ +autoSplitPDF.description=พิมพ์ แทรก สแกน อัปโหลด และให้เราจัดการแยกเอกสารของคุณโดยอัตโนมัติ ไม่ต้องทำงานแยกแยะด้วยตนเอง +autoSplitPDF.selectText.1=พิมพ์แผ่นแยกด้านล่าง (ขาวดำก็ได้) +autoSplitPDF.selectText.2=สแกนเอกสารทั้งหมดพร้อมแทรกแผ่นแยกระหว่างเอกสาร +autoSplitPDF.selectText.3=อัปโหลดไฟล์ PDF ที่สแกนขนาดใหญ่เดียวและปล่อยให้ Stirling PDF จัดการส่วนที่เหลือ +autoSplitPDF.selectText.4=หน้ากั้นจะถูกตรวจจับและลบโดยอัตโนมัติ รับประกันเอกสารสุดท้ายที่เรียบร้อย +autoSplitPDF.formPrompt=ส่ง PDF ที่มีแผ่นแยก Stirling-PDF: +autoSplitPDF.duplexMode=โหมด Duplex (การสแกนหน้าและหลัง) +autoSplitPDF.dividerDownload1=ดาวน์โหลด 'Auto Splitter Divider (minimal).pdf' +autoSplitPDF.dividerDownload2=ดาวน์โหลด 'Auto Splitter Divider (with instructions).pdf' +autoSplitPDF.submit=ส่ง + + +#pipeline +pipeline.title=Pipeline + + +#pageLayout +pageLayout.title=เลย์เอาต์หลายหน้า +pageLayout.header=เลย์เอาต์หลายหน้า +pageLayout.pagesPerSheet=จำนวนหน้าต่อแผ่น: +pageLayout.addBorder=เพิ่มขอบ +pageLayout.submit=ส่ง + + +#scalePages +scalePages.title=ปรับสเกลหน้า +scalePages.header=ปรับสเกลหน้า +scalePages.pageSize=ขนาดหน้าของเอกสาร +scalePages.scaleFactor=ระดับการซูม (ครอบตัด) ของหน้า +scalePages.submit=ส่ง + + +#certSign +certSign.title=การเซ็นชื่อด้วยใบรับรอง +certSign.header=เซ็นชื่อ PDF ด้วยใบรับรองของคุณ (กำลังดำเนินการ) +certSign.selectPDF=เลือกไฟล์ PDF สำหรับการเซ็น: +certSign.jksNote=หมายเหตุ: หากประเภทใบรับรองของคุณไม่อยู่ในรายการด้านล่าง กรุณาแปลงเป็นไฟล์ Java Keystore (.jks) โดยใช้เครื่องมือ keytool จากบรรทัดคำสั่ง จากนั้นเลือกตัวเลือกไฟล์ .jks ด้านล่าง +certSign.selectKey=เลือกไฟล์คีย์ส่วนตัวของคุณ (รูปแบบ PKCS#8, อาจเป็น .pem หรือ .der): +certSign.selectCert=เลือกไฟล์ใบรับรองของคุณ (รูปแบบ X.509, อาจเป็น .pem หรือ .der): +certSign.selectP12=เลือกไฟล์ PKCS#12 Keystore ของคุณ (.p12 หรือ .pfx) (ไม่บังคับ หากมี ควรมีคีย์ส่วนตัวและใบรับรองของคุณ): +certSign.selectJKS=เลือกไฟล์ Java Keystore ของคุณ (.jks หรือ .keystore): +certSign.certType=ประเภทใบรับรอง +certSign.password=ใส่รหัสผ่าน Keystore หรือคีย์ส่วนตัวของคุณ (ถ้ามี): +certSign.showSig=แสดงลายเซ็น +certSign.reason=เหตุผล +certSign.location=ตำแหน่ง +certSign.name=ชื่อ +certSign.submit=เซ็นชื่อ PDF + + +#removeCertSign +removeCertSign.title=ลบลายเซ็นใบรับรอง +removeCertSign.header=ลบลายเซ็นดิจิทัลจาก PDF +removeCertSign.selectPDF=เลือกไฟล์ PDF: +removeCertSign.submit=ลบลายเซ็น + + +#removeBlanks +removeBlanks.title=ลบหน้าว่าง +removeBlanks.header=ลบหน้าว่าง +removeBlanks.threshold=เกณฑ์ความขาวของพิกเซล: +removeBlanks.thresholdDesc=เกณฑ์ในการกำหนดว่าพิกเซลขาวเพียงพอจะถูกจัดเป็น 'ขาว' เท่าใด 0 = ดำ, 255 = ขาวบริสุทธิ์ +removeBlanks.whitePercent=เปอร์เซ็นต์ความขาว (%): +removeBlanks.whitePercentDesc=เปอร์เซ็นต์ของหน้าที่ต้องเป็นพิกเซล 'ขาว' เพื่อจะถูกลบ +removeBlanks.submit=ลบหน้าว่าง + + +#removeAnnotations +removeAnnotations.title=ลบคำอธิบายประกอบ +removeAnnotations.header=ลบคำอธิบายประกอบ +removeAnnotations.submit=ลบ + + +#compare +compare.title=เปรียบเทียบ +compare.header=เปรียบเทียบ PDF +compare.highlightColor.1=สีเน้น 1: +compare.highlightColor.2=สีเน้น 2: +compare.document.1=เอกสาร 1 +compare.document.2=เอกสาร 2 +compare.submit=เปรียบเทียบ + +#BookToPDF +BookToPDF.title=หนังสือและการ์ตูนเป็น PDF +BookToPDF.header=หนังสือเป็น PDF +BookToPDF.credit=ใช้ Calibre +BookToPDF.submit=แปลง + +#PDFToBook +PDFToBook.title=PDF เป็นหนังสือ +PDFToBook.header=PDF เป็นหนังสือ +PDFToBook.selectText.1=รูปแบบ +PDFToBook.credit=ใช้ Calibre +PDFToBook.submit=แปลง + +#sign +sign.title=เซ็นชื่อ +sign.header=เซ็นชื่อ PDF +sign.upload=อัปโหลดรูปภาพ +sign.draw=วาดลายเซ็น +sign.text=ป้อนข้อความ +sign.clear=ล้าง +sign.add=เพิ่ม + + +#repair +repair.title=ซ่อมแซม +repair.header=ซ่อมแซม PDF +repair.submit=ซ่อมแซม + + +#flatten +flatten.title=แบน +flatten.header=แบน PDF +flatten.flattenOnlyForms=แบนเฉพาะฟอร์ม +flatten.submit=แบน + + +#ScannerImageSplit +ScannerImageSplit.selectText.1=เกณฑ์มุม: +ScannerImageSplit.selectText.2=ตั้งค่ามุมขั้นต่ำที่จำเป็นสำหรับการหมุนภาพ (ค่าเริ่มต้น: 10) +ScannerImageSplit.selectText.3=ความอดทน: +ScannerImageSplit.selectText.4=กำหนดช่วงความแตกต่างของสีรอบสีพื้นหลังที่คาดคะเน (ค่าเริ่มต้น: 30) +ScannerImageSplit.selectText.5=พื้นที่ขั้นต่ำ: +ScannerImageSplit.selectText.6=ตั้งค่าเกณฑ์พื้นที่ขั้นต่ำสำหรับรูปภาพ (ค่าเริ่มต้น: 10000) +ScannerImageSplit.selectText.7=พื้นที่เค้าโครงขั้นต่ำ: +ScannerImageSplit.selectText.8=ตั้งค่าเกณฑ์พื้นที่เค้าโครงขั้นต่ำสำหรับรูปภาพ +ScannerImageSplit.selectText.9=ขนาดขอบ: +ScannerImageSplit.selectText.10=ตั้งค่าขนาดขอบที่เพิ่มและลบเพื่อป้องกันขอบขาวในผลลัพธ์ (ค่าเริ่มต้น: 1) + + +#OCR +ocr.title=OCR / ทำความสะอาดการสแกน +ocr.header=ทำความสะอาดการสแกน / OCR (การรู้จำอักขระด้วยแสง) +ocr.selectText.1=เลือกภาษาที่จะตรวจจับใน PDF (รายการที่แสดงคือภาษาที่ตรวจจับได้ในขณะนี้): +ocr.selectText.2=สร้างไฟล์ข้อความที่มีข้อความ OCR ควบคู่ไปกับ PDF ที่ OCR แล้ว +ocr.selectText.3=แก้ไขหน้าที่สแกนเอียงโดยการหมุนกลับไปยังตำแหน่งที่ถูกต้อง +ocr.selectText.4=ทำความสะอาดหน้าเพื่อลดโอกาสที่ OCR จะพบข้อความในเสียงพื้นหลัง (ไม่มีการเปลี่ยนแปลงในผลลัพธ์) +ocr.selectText.5=ทำความสะอาดหน้าเพื่อลดโอกาสที่ OCR จะพบข้อความในเสียงพื้นหลัง รักษาการทำความสะอาดในผลลัพธ์ +ocr.selectText.6=ไม่สนใจหน้าที่มีข้อความแบบโต้ตอบ OCR เฉพาะหน้าที่เป็นภาพ +ocr.selectText.7=บังคับ OCR จะ OCR ทุกหน้าลบองค์ประกอบข้อความต้นฉบับทั้งหมด +ocr.selectText.8=ปกติ (จะแสดงข้อผิดพลาดหาก PDF มีข้อความ) +ocr.selectText.9=การตั้งค่าเพิ่มเติม +ocr.selectText.10=โหมด OCR +ocr.selectText.11=ลบภาพหลังจาก OCR (ลบภาพทั้งหมด, มีประโยชน์เฉพาะหากเป็นส่วนหนึ่งของขั้นตอนการแปลง) +ocr.selectText.12=ประเภทการเรนเดอร์ (ขั้นสูง) +ocr.help=โปรดอ่านเอกสารนี้เพื่อใช้งานภาษาอื่นๆ และ/หรือใช้งานนอก docker +ocr.credit=บริการนี้ใช้ OCRmyPDF และ Tesseract สำหรับ OCR +ocr.submit=ประมวลผล PDF ด้วย OCR + + +#extractImages +extractImages.title=แยกรูปภาพ +extractImages.header=แยกรูปภาพ +extractImages.selectText=เลือกรูปแบบภาพที่จะใช้ในการแปลงรูปภาพที่แยกได้ +extractImages.submit=แยก + + +#File to PDF +fileToPDF.title=ไฟล์เป็น PDF +fileToPDF.header=แปลงไฟล์ใดๆ เป็น PDF +fileToPDF.credit=บริการนี้ใช้ LibreOffice และ Unoconv สำหรับการแปลงไฟล์ +fileToPDF.supportedFileTypesInfo=ประเภทไฟล์ที่รองรับ +fileToPDF.supportedFileTypes=ประเภทไฟล์ที่รองรับควรมีรายการด้านล่าง อย่างไรก็ตามสำหรับรายการรูปแบบที่รองรับทั้งหมด กรุณาดูเอกสาร LibreOffice +fileToPDF.submit=แปลงเป็น PDF + + +#compress +compress.title=บีบอัด +compress.header=บีบอัด PDF +compress.credit=บริการนี้ใช้ Ghostscript สำหรับการบีบอัด/การเพิ่มประสิทธิภาพ PDF +compress.selectText.1=โหมดแมนนวล - จาก 1 ถึง 4 +compress.selectText.2=ระดับการเพิ่มประสิทธิภาพ: +compress.selectText.3=4 (ไม่ดีสำหรับภาพข้อความ) +compress.selectText.4=โหมดอัตโนมัติ - ปรับคุณภาพอัตโนมัติเพื่อให้ PDF ตรงกับขนาดที่ต้องการ +compress.selectText.5=ขนาด PDF ที่คาดหวัง (เช่น 25MB, 10.8MB, 25KB) +compress.submit=บีบอัด + + +#Add image +addImage.title=เพิ่มรูปภาพ +addImage.header=เพิ่มรูปภาพใน PDF +addImage.everyPage=ทุกหน้า? +addImage.upload=เพิ่มรูปภาพ +addImage.submit=เพิ่มรูปภาพ + + +#merge +merge.title=รวม +merge.header=รวม PDF หลายไฟล์ (2 ขึ้นไป) +merge.sortByName=จัดเรียงตามชื่อ +merge.sortByDate=จัดเรียงตามวันที่ +merge.removeCertSign=ลบลายเซ็นดิจิทัลในไฟล์ที่รวม? +merge.submit=รวม + + +#pdfOrganiser +pdfOrganiser.title=ตัวจัดระเบียบหน้า +pdfOrganiser.header=ตัวจัดระเบียบหน้า PDF +pdfOrganiser.submit=จัดเรียงหน้าใหม่ +pdfOrganiser.mode=โหมด +pdfOrganiser.mode.1=เรียงลำดับหน้าตามความต้องการ +pdfOrganiser.mode.2=เรียงลำดับย้อนกลับ +pdfOrganiser.mode.3=เรียงลำดับแบบสองหน้า +pdfOrganiser.mode.4=เรียงลำดับแบบสมุด +pdfOrganiser.mode.5=เรียงลำดับแบบเย็บข้าง +pdfOrganiser.mode.6=แยกหน้าแบบคี่-คู่ +pdfOrganiser.mode.7=ลบหน้าหมายเลขแรก +pdfOrganiser.mode.8=ลบหน้าหมายเลขสุดท้าย +pdfOrganiser.mode.9=ลบหน้าหมายเลขแรกและสุดท้าย +pdfOrganiser.mode.10=รวมหน้าแบบคี่-คู่ +pdfOrganiser.placeholder=(เช่น 1,3,2 หรือ 4-8,2,10-12 หรือ 2n-1) + + +#multiTool +multiTool.title=เครื่องมือ PDF หลายตัว +multiTool.header=เครื่องมือ PDF หลายตัว +multiTool.uploadPrompts=ชื่อไฟล์ + +#view pdf +viewPdf.title=ดู PDF +viewPdf.header=ดู PDF + +#pageRemover +pageRemover.title=ตัวลบหน้า +pageRemover.header=ตัวลบหน้า PDF +pageRemover.pagesToDelete=หน้าที่จะลบ (ป้อนหมายเลขหน้าแยกด้วยเครื่องหมายจุลภาค): +pageRemover.submit=ลบหน้า +pageRemover.placeholder=(เช่น 1,2,6 หรือ 1-10,15-30) + + +#rotate +rotate.title=หมุน PDF +rotate.header=หมุน PDF +rotate.selectAngle=เลือกมุมการหมุน (เป็นหลายเท่าของ 90 องศา): +rotate.submit=หมุน + + +#split-pdfs +split.title=แยก PDF +split.header=แยก PDF +split.desc.1=หมายเลขที่คุณเลือกคือหมายเลขหน้าที่คุณต้องการแยก +split.desc.2=ดังนั้นการเลือก 1,3,7-9 จะทำให้เอกสาร 10 หน้าแยกออกเป็น PDF แยก 6 ชุด: +split.desc.3=เอกสาร #1: หน้า 1 +split.desc.4=เอกสาร #2: หน้า 2 และ 3 +split.desc.5=เอกสาร #3: หน้า 4, 5, 6, 7 +split.desc.6=เอกสาร #4: หน้า 8 +split.desc.7=เอกสาร #5: หน้า 9 +split.desc.8=เอกสาร #6: หน้า 10 +split.splitPages=ป้อนหน้าที่ต้องการแยก: +split.submit=แยก + + +#merge +imageToPDF.title=รูปภาพเป็น PDF +imageToPDF.header=รูปภาพเป็น PDF +imageToPDF.submit=แปลง +imageToPDF.selectLabel=ตัวเลือกการใส่ภาพ +imageToPDF.fillPage=เติมหน้า +imageToPDF.fitDocumentToImage=ปรับหน้าให้พอดีกับภาพ +imageToPDF.maintainAspectRatio=รักษาอัตราส่วนกว้างยาว +imageToPDF.selectText.2=หมุน PDF อัตโนมัติ +imageToPDF.selectText.3=ตรรกะหลายไฟล์ (เปิดใช้งานเฉพาะเมื่อทำงานกับหลายภาพ) +imageToPDF.selectText.4=รวมเป็น PDF เดียว +imageToPDF.selectText.5=แปลงเป็น PDF แยก + + +#pdfToImage +pdfToImage.title=PDF เป็นรูปภาพ +pdfToImage.header=PDF เป็นรูปภาพ +pdfToImage.selectText=รูปแบบภาพ +pdfToImage.singleOrMultiple=ประเภทผลลัพธ์รูปภาพ +pdfToImage.single=รูปภาพใหญ่เพียงภาพเดียว +pdfToImage.multi=หลายภาพ +pdfToImage.colorType=ประเภทสี +pdfToImage.color=สี +pdfToImage.grey=ระดับสีเทา +pdfToImage.blackwhite=ขาวดำ (อาจสูญเสียข้อมูล!) +pdfToImage.submit=แปลง + + +#addPassword +addPassword.title=เพิ่มรหัสผ่าน +addPassword.header=เพิ่มรหัสผ่าน (เข้ารหัส) +addPassword.selectText.1=เลือก PDF เพื่อเข้ารหัส +addPassword.selectText.2=รหัสผ่านผู้ใช้ +addPassword.selectText.3=ความยาวคีย์การเข้ารหัส +addPassword.selectText.4=ค่าสูงกว่ามีความแข็งแกร่งกว่า แต่ค่าต่ำกว่าเข้ากันได้ดีกว่า +addPassword.selectText.5=สิทธิ์ที่ตั้งค่า (แนะนำให้ใช้พร้อมรหัสผ่านผู้ดูแล) +addPassword.selectText.6=ป้องกันการประกอบเอกสาร +addPassword.selectText.7=ป้องกันการสกัดเนื้อหา +addPassword.selectText.8=ป้องกันการสกัดเพื่อการเข้าถึง +addPassword.selectText.9=ป้องกันการกรอกแบบฟอร์ม +addPassword.selectText.10=ป้องกันการแก้ไข +addPassword.selectText.11=ป้องกันการแก้ไขคำอธิบายประกอบ +addPassword.selectText.12=ป้องกันการพิมพ์ +addPassword.selectText.13=ป้องกันการพิมพ์รูปแบบต่างๆ +addPassword.selectText.14=รหัสผ่านผู้ดูแล +addPassword.selectText.15=จำกัดสิ่งที่สามารถทำได้กับเอกสารเมื่อเปิด (ไม่รองรับโดยผู้อ่านทั้งหมด) +addPassword.selectText.16=จำกัดการเปิดเอกสาร +addPassword.submit=เข้ารหัส + + +#watermark +watermark.title=เพิ่มลายน้ำ +watermark.header=เพิ่มลายน้ำ +watermark.selectText.1=เลือก PDF เพื่อเพิ่มลายน้ำ: +watermark.selectText.2=ข้อความลายน้ำ: +watermark.selectText.3=ขนาดฟอนต์: +watermark.selectText.4=การหมุน (0-360): +watermark.selectText.5=ตัวเว้นระยะความกว้าง (ช่องว่างระหว่างลายน้ำในแนวนอน): +watermark.selectText.6=ตัวเว้นระยะความสูง (ช่องว่างระหว่างลายน้ำในแนวตั้ง): +watermark.selectText.7=ความทึบ (0% - 100%): +watermark.selectText.8=ประเภทลายน้ำ: +watermark.selectText.9=ภาพลายน้ำ: +watermark.submit=เพิ่มลายน้ำ +watermark.type.1=ข้อความ +watermark.type.2=ภาพ + + +#Change permissions +permissions.title=เปลี่ยนสิทธิ์ +permissions.header=เปลี่ยนสิทธิ์ +permissions.warning=คำเตือน: การตั้งค่าสิทธิ์เหล่านี้เป็นการเปลี่ยนแปลงที่ไม่สามารถย้อนกลับได้ แนะนำให้ตั้งค่าพร้อมรหัสผ่านผ่านหน้าการเพิ่มรหัสผ่าน +permissions.selectText.1=เลือก PDF เพื่อเปลี่ยนสิทธิ์ +permissions.selectText.2=สิทธิ์ที่ตั้งค่า +permissions.selectText.3=ป้องกันการประกอบเอกสาร +permissions.selectText.4=ป้องกันการสกัดเนื้อหา +permissions.selectText.5=ป้องกันการสกัดเพื่อการเข้าถึง +permissions.selectText.6=ป้องกันการกรอกแบบฟอร์ม +permissions.selectText.7=ป้องกันการแก้ไข +permissions.selectText.8=ป้องกันการแก้ไขคำอธิบายประกอบ +permissions.selectText.9=ป้องกันการพิมพ์ +permissions.selectText.10=ป้องกันการพิมพ์รูปแบบต่างๆ +permissions.submit=เปลี่ยน + + +#remove password +removePassword.title=ลบรหัสผ่าน +removePassword.header=ลบรหัสผ่าน (ถอดรหัส) +removePassword.selectText.1=เลือก PDF ที่ต้องการถอดรหัส +removePassword.selectText.2=รหัสผ่าน +removePassword.submit=ลบ + + +#changeMetadata +changeMetadata.title=เปลี่ยนข้อมูลเมตา +changeMetadata.header=เปลี่ยนข้อมูลเมตา +changeMetadata.selectText.1=โปรดแก้ไขตัวแปรที่คุณต้องการเปลี่ยน +changeMetadata.selectText.2=ลบข้อมูลเมตาทั้งหมด +changeMetadata.selectText.3=แสดงข้อมูลเมตาที่กำหนดเอง: +changeMetadata.author=ผู้แต่ง: +changeMetadata.creationDate=วันที่สร้าง (yyyy/MM/dd HH:mm:ss): +changeMetadata.creator=ผู้สร้าง: +changeMetadata.keywords=คำสำคัญ: +changeMetadata.modDate=วันที่แก้ไข (yyyy/MM/dd HH:mm:ss): +changeMetadata.producer=ผู้ผลิต: +changeMetadata.subject=หัวข้อ: +changeMetadata.trapped=ติดกับ: +changeMetadata.selectText.4=ข้อมูลเมตาอื่น ๆ: +changeMetadata.selectText.5=เพิ่มรายการข้อมูลเมตาที่กำหนดเอง +changeMetadata.submit=เปลี่ยน + + +#pdfToPDFA +pdfToPDFA.title=PDF เป็น PDF/A +pdfToPDFA.header=PDF เป็น PDF/A +pdfToPDFA.credit=บริการนี้ใช้ OCRmyPDF สำหรับการแปลง PDF/A +pdfToPDFA.submit=แปลง +pdfToPDFA.tip=ปัจจุบันไม่ทำงานสำหรับการป้อนข้อมูลหลายรายการพร้อมกัน +pdfToPDFA.outputFormat=รูปแบบผลลัพธ์ +pdfToPDFA.pdfWithDigitalSignature=PDF มีลายเซ็นดิจิทัล ซึ่งจะถูกลบในขั้นตอนถัดไป + + +#PDFToWord +PDFToWord.title=PDF เป็น Word +PDFToWord.header=PDF เป็น Word +PDFToWord.selectText.1=รูปแบบไฟล์ผลลัพธ์ +PDFToWord.credit=บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์ +PDFToWord.submit=แปลง + + +#PDFToPresentation +PDFToPresentation.title=PDF เป็น Presentation +PDFToPresentation.header=PDF เป็น Presentation +PDFToPresentation.selectText.1=รูปแบบไฟล์ผลลัพธ์ +PDFToPresentation.credit=บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์ +PDFToPresentation.submit=แปลง + + +#PDFToText +PDFToText.title=PDF เป็น RTF (Text) +PDFToText.header=PDF เป็น RTF (Text) +PDFToText.selectText.1=รูปแบบไฟล์ผลลัพธ์ +PDFToText.credit=บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์ +PDFToText.submit=แปลง + + +#PDFToHTML +PDFToHTML.title=PDF เป็น HTML +PDFToHTML.header=PDF เป็น HTML +PDFToHTML.credit=บริการนี้ใช้ pdftohtml สำหรับการแปลงไฟล์ +PDFToHTML.submit=แปลง + + +#PDFToXML +PDFToXML.title=PDF เป็น XML +PDFToXML.header=PDF เป็น XML +PDFToXML.credit=บริการนี้ใช้ LibreOffice สำหรับการแปลงไฟล์ +PDFToXML.submit=แปลง + +#PDFToCSV +PDFToCSV.title=PDF เป็น CSV +PDFToCSV.header=PDF เป็น CSV +PDFToCSV.prompt=เลือกหน้าที่ต้องการแยกตาราง +PDFToCSV.submit=แยก + +#split-by-size-or-count +split-by-size-or-count.title=แยก PDF ตามขนาดหรือจำนวน +split-by-size-or-count.header=แยก PDF ตามขนาดหรือจำนวน +split-by-size-or-count.type.label=เลือกประเภทการแยก +split-by-size-or-count.type.size=ตามขนาด +split-by-size-or-count.type.pageCount=ตามจำนวนหน้า +split-by-size-or-count.type.docCount=ตามจำนวนเอกสาร +split-by-size-or-count.value.label=ป้อนค่า +split-by-size-or-count.value.placeholder=ป้อนขนาด (เช่น 2MB หรือ 3KB) หรือจำนวน (เช่น 5) +split-by-size-or-count.submit=ส่ง + + +#overlay-pdfs +overlay-pdfs.header=ซ้อนทับไฟล์ PDF +overlay-pdfs.baseFile.label=เลือกไฟล์ PDF พื้นฐาน +overlay-pdfs.overlayFiles.label=เลือกไฟล์ PDF ซ้อนทับ +overlay-pdfs.mode.label=เลือกโหมดซ้อนทับ +overlay-pdfs.mode.sequential=ซ้อนทับตามลำดับ +overlay-pdfs.mode.interleaved=ซ้อนทับแบบสลับ +overlay-pdfs.mode.fixedRepeat=ซ้อนทับแบบวนซ้ำ +overlay-pdfs.counts.label=จำนวนการซ้อนทับ (สำหรับโหมดวนซ้ำ) +overlay-pdfs.counts.placeholder=ป้อนจำนวนแยกด้วยเครื่องหมายจุลภาค (เช่น 2,3,1) +overlay-pdfs.position.label=เลือกตำแหน่งซ้อนทับ +overlay-pdfs.position.foreground=พื้นหน้า +overlay-pdfs.position.background=พื้นหลัง +overlay-pdfs.submit=ส่ง + + +#split-by-sections +split-by-sections.title=แยก PDF ตามส่วน +split-by-sections.header=แยก PDF เป็นส่วน +split-by-sections.horizontal.label=การแบ่งแนวนอน +split-by-sections.vertical.label=การแบ่งแนวตั้ง +split-by-sections.horizontal.placeholder=ป้อนจำนวนการแบ่งแนวนอน +split-by-sections.vertical.placeholder=ป้อนจำนวนการแบ่งแนวตั้ง +split-by-sections.submit=แยก PDF +split-by-sections.merge=รวมเป็น PDF เดียว + + +#printFile +printFile.title=พิมพ์ไฟล์ +printFile.header=พิมพ์ไฟล์ไปยังเครื่องพิมพ์ +printFile.selectText.1=เลือกไฟล์ที่จะพิมพ์ +printFile.selectText.2=ป้อนชื่อเครื่องพิมพ์ +printFile.submit=พิมพ์ + + +#licenses +licenses.nav=ใบอนุญาต +licenses.title=ใบอนุญาตบุคคลที่สาม +licenses.header=ใบอนุญาตบุคคลที่สาม +licenses.module=โมดูล +licenses.version=เวอร์ชัน +licenses.license=ใบอนุญาต + +#survey +survey.nav=สำรวจ +survey.title=สำรวจ Stirling-PDF +survey.description=Stirling-PDF ไม่มีการติดตาม ดังนั้นเราต้องการฟังความคิดเห็นจากผู้ใช้เพื่อปรับปรุง Stirling-PDF! +survey.please=กรุณาพิจารณาการสำรวจของเรา! +survey.disabled=(ป๊อปอัปการสำรวจจะถูกปิดใช้งานในการอัปเดตต่อไปนี้ แต่สามารถใช้ได้ที่ส่วนท้ายของหน้า) +survey.button=เริ่มสำรวจ +survey.dontShowAgain=ไม่ต้องแสดงอีก + + +#error +error.sorry=ขออภัยในปัญหา! +error.needHelp=ต้องการความช่วยเหลือ / พบปัญหา? +error.contactTip=หากคุณยังมีปัญหา อย่าลังเลที่จะติดต่อเราเพื่อขอความช่วยเหลือ คุณสามารถส่งตั๋วบนหน้าของเราใน GitHub หรือ ติดต่อเราผ่าน Discord: +error.404.head=404 - ไม่พบหน้า | อุ๊ย! เราพลาดในโค้ด! +error.404.1=เราไม่สามารถหาหน้าที่คุณกำลังมองหา +error.404.2=บางสิ่งบางอย่างผิดพลาด +error.github=ส่งตั๋วใน GitHub +error.showStack=แสดง Stack Trace +error.copyStack=คัดลอก Stack Trace +error.githubSubmit=GitHub - ส่งตั๋ว +error.discordSubmit=Discord - ส่งโพสต์การสนับสนุน + diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index 321d048f8e0..13c87f3ffda 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -55,7 +55,7 @@ userNotFoundMessage=Kullanıcı bulunamadı. incorrectPasswordMessage=Mevcut şifre yanlış. usernameExistsMessage=Yeni Kullanıcı Adı zaten var. invalidUsernameMessage=Geçersiz kullanıcı adı, kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır. -confirmPasswordErrorMessage=New Password and Confirm New Password must match. +confirmPasswordErrorMessage=Yeni Şifre ve Yeni Şifreyi Onayla eşleşmelidir. deleteCurrentUserMessage=Şu anda oturum açmış olan kullanıcı silinemiyor. deleteUsernameExistsMessage=Kullanıcı adı mevcut değil ve silinemez. downgradeCurrentUserMessage=Mevcut kullanıcının rolü düşürülemiyor @@ -86,7 +86,7 @@ pipeline.defaultOption=Özel pipeline.submitButton=Gönder pipeline.help=Çoklu İşlemler Yardım pipeline.scanHelp=Klasör Tarama Yardımı -pipeline.deletePrompt=Are you sure you want to delete pipeline +pipeline.deletePrompt=Çoklu işlemleri silmek istediğinizden emin misiniz ###################### # Pipeline Options # @@ -116,7 +116,7 @@ navbar.multiTool=Çoklu Araçlar navbar.sections.organize=Düzenle navbar.sections.convertTo=PDF'ye dönüştür navbar.sections.convertFrom=PDF'den dönüştür -navbar.sections.security=Oturum & Güvenlik +navbar.sections.security=Oturum ve Güvenlik navbar.sections.advance=Gelişmiş navbar.sections.edit=Görüntüle ve Düzenle @@ -175,8 +175,8 @@ adminUserSettings.header=Yönetici Kullanıcı Kontrol Ayarları adminUserSettings.admin=Yönetici adminUserSettings.user=Kullanıcı adminUserSettings.addUser=Yeni Kullanıcı Ekle -adminUserSettings.deleteUser=Delete User -adminUserSettings.confirmDeleteUser=Should the user be deleted? +adminUserSettings.deleteUser=Kullanıcı Sil +adminUserSettings.confirmDeleteUser=Kullanıcı silinsin mi? adminUserSettings.usernameInfo=Kullanıcı adı yalnızca harf, rakam ve aşağıdaki özel karakterleri @._+- içerebilir veya geçerli bir e-posta adresi olmalıdır. adminUserSettings.roles=Roller adminUserSettings.role=Rol @@ -192,21 +192,21 @@ adminUserSettings.changeUserRole=Kullanıcı rolünü değiştir adminUserSettings.authenticated=Onaylandı -database.title=Database Import/Export -database.header=Database Import/Export -database.fileName=File Name -database.creationDate=Creation Date -database.fileSize=File Size -database.deleteBackupFile=Delete Backup File -database.importBackupFile=Import Backup File -database.downloadBackupFile=Download Backup File -database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application. -database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention. -database.submit=Import Backup -database.importIntoDatabaseSuccessed=Import into database successed -database.fileNotFound=File not Found -database.fileNullOrEmpty=File must not be null or empty -database.failedImportFile=Failed Import File +database.title=Veri Tabanını İçe/Dışa Aktar +database.header=Veri Tabanını İçe/Dışa Aktar +database.fileName=Dosya Adı +database.creationDate=Oluşturulma Tarihi +database.fileSize=Dosya Boyutu +database.deleteBackupFile=Yedekleme Dosyasını Sil +database.importBackupFile=Yedekleme Dosyasını İçe Aktar +database.downloadBackupFile=Yedekleme Dosyasını İndir +database.info_1=Verileri içe aktarırken, yapının doğru olduğundan emin olmak çok önemlidir. Ne yaptığınızdan emin değilseniz, bir uzmandan tavsiye ve destek alın. Yapıdaki bir hata, uygulamanın tamamen çalıştırılamaması da dahil olmak üzere uygulama sorunlarına neden olabilir. +database.info_2=Karşıya yüklerken dosya adı önemli değildir. Daha sonra yedekleme_kullanıcısı_yyyyAAggSdd.sql biçiminde yeniden adlandırılacak ve tutarlı bir adlandırma kuralı sağlanacaktır. +database.submit=Yedeklemeyi İçe Aktar +database.importIntoDatabaseSuccessed=Veri tabanına başarıyla aktarıldı +database.fileNotFound=Dosya bulunamadı +database.fileNullOrEmpty=Dosya yok veya boş olmamalıdır +database.failedImportFile=Dosya İçe Aktarılamadı ############# # HOME-PAGE # @@ -353,9 +353,9 @@ home.certSign.title=Sertifika ile İmzala home.certSign.desc=Bir PDF'i Sertifika/Anahtar (PEM/P12) ile imzalar certSign.tags=doğrula,PEM,P12,resmi,şifrele -home.removeCertSign.title=Remove Certificate Sign -home.removeCertSign.desc=Remove certificate signature from PDF -removeCertSign.tags=authenticate,PEM,P12,official,decrypt +home.removeCertSign.title=Sertifika İmzasını Kaldır +home.removeCertSign.desc=PDF'ten sertifika imzasını kaldırır +removeCertSign.tags=doğrula,PEM,P12,resmi,şifre çöz home.pageLayout.title=Çoklu-Sayfa Düzeni home.pageLayout.desc=Bir PDF belgesinin çoklu sayfalarını tek bir sayfada birleştirir @@ -477,12 +477,12 @@ login.locked=Hesabınız kilitlendi. login.signinTitle=Lütfen giriş yapınız. login.ssoSignIn=Tek Oturum Açma ile Giriş Yap login.oauth2AutoCreateDisabled=OAUTH2 Otomatik Oluşturma Kullanıcı Devre Dışı Bırakıldı -login.oauth2RequestNotFound=Authorization request not found -login.oauth2InvalidUserInfoResponse=Invalid User Info Response -login.oauth2invalidRequest=Invalid Request -login.oauth2AccessDenied=Access Denied -login.oauth2InvalidTokenResponse=Invalid Token Response -login.oauth2InvalidIdToken=Invalid Id Token +login.oauth2RequestNotFound=Yetkilendirme isteği bulunamadı +login.oauth2InvalidUserInfoResponse=Geçersiz Kullanıcı Bilgisi Yanıtı +login.oauth2invalidRequest=Geçersiz İstek +login.oauth2AccessDenied=Erişim Reddedildi +login.oauth2InvalidTokenResponse=Geçersiz Belirteç Yanıtı +login.oauth2InvalidIdToken=Geçersiz Kimlik Belirteci #auto-redact @@ -681,10 +681,10 @@ certSign.submit=PDF'i İmzala #removeCertSign -removeCertSign.title=Remove Certificate Signature -removeCertSign.header=Remove the digital certificate from the PDF -removeCertSign.selectPDF=Select a PDF file: -removeCertSign.submit=Remove Signature +removeCertSign.title=Sertifika İmzasını Kaldır +removeCertSign.header=PDF'ten dijital sertifikayı kaldırın +removeCertSign.selectPDF=PDF dosyası seçin: +removeCertSign.submit=İmzayı Kaldır #removeBlanks @@ -706,8 +706,8 @@ removeAnnotations.submit=Kaldır #compare compare.title=Karşılaştır compare.header=PDF'leri Karşılaştır -compare.highlightColor.1=Highlight Color 1: -compare.highlightColor.2=Highlight Color 2: +compare.highlightColor.1=Vurgu Rengi 1: +compare.highlightColor.2=Vurgu Rengi 2: compare.document.1=Belge 1 compare.document.2=Belge 2 compare.submit=Karşılaştır @@ -744,7 +744,7 @@ repair.submit=Onar #flatten flatten.title=Düzleştir flatten.header=PDF'leri Düzleştir -flatten.flattenOnlyForms=Flatten only forms +flatten.flattenOnlyForms=Yalnızca formları düzleştir flatten.submit=Düzleştir @@ -822,7 +822,7 @@ merge.title=Birleştir merge.header=Çoklu PDF'leri Birleştir (2+) merge.sortByName=İsme göre sırala merge.sortByDate=Tarihe göre sırala -merge.removeCertSign=Remove digital signature in the merged file? +merge.removeCertSign=Birleştirilen dosyadaki dijital imza kaldırılsın mı? merge.submit=Birleştir @@ -840,7 +840,7 @@ pdfOrganiser.mode.6=Tek-Çift Ayrımı pdfOrganiser.mode.7=İlk Önce Kaldır pdfOrganiser.mode.8=Sonuncuyu Kaldır pdfOrganiser.mode.9=İlk ve Sonu Kaldır -pdfOrganiser.mode.10=Odd-Even Merge +pdfOrganiser.mode.10=Tek-Çift Birleştirme pdfOrganiser.placeholder=(örn. 1,3,2 veya 4-8,2,10-12 veya 2n-1) @@ -1099,17 +1099,17 @@ licenses.nav=Lisanslar licenses.title=3. Taraf Lisansları licenses.header=3. Taraf Lisansları licenses.module=Modül -licenses.version=Versiyon +licenses.version=Sürüm licenses.license=Lisans #survey -survey.nav=Survey -survey.title=Stirling-PDF Survey -survey.description=Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF! -survey.please=Please consider taking our survey! -survey.disabled=(Survey popup will be disabled in following updates but available at foot of page) -survey.button=Take Survey -survey.dontShowAgain=Don't show again +survey.nav=Anket +survey.title=Stirling-PDF Anketi +survey.description=Stirling-PDF'te izleme yok, bu yüzden Stirling-PDF'i iyileştirmek için kullanıcılarımızdan geri bildirim almak istiyoruz! +survey.please=Lütfen anketimize katılmayı düşünün! +survey.disabled=(Anket açılır penceresi sonraki güncellemelerde devre dışı bırakılacak ancak sayfanın alt kısmında yer alacaktır) +survey.button=Ankete Katıl +survey.dontShowAgain=Tekrar gösterme #error diff --git a/src/main/resources/static/images/flags/th.svg b/src/main/resources/static/images/flags/th.svg new file mode 100644 index 00000000000..7e67ea6b08b --- /dev/null +++ b/src/main/resources/static/images/flags/th.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/templates/convert/pdf-to-presentation.html b/src/main/resources/templates/convert/pdf-to-presentation.html index 794317609c2..ce1f455dd5d 100644 --- a/src/main/resources/templates/convert/pdf-to-presentation.html +++ b/src/main/resources/templates/convert/pdf-to-presentation.html @@ -22,8 +22,8 @@
diff --git a/src/main/resources/templates/convert/pdf-to-word.html b/src/main/resources/templates/convert/pdf-to-word.html index 7e5f96c03a9..0fd004f2e5f 100644 --- a/src/main/resources/templates/convert/pdf-to-word.html +++ b/src/main/resources/templates/convert/pdf-to-word.html @@ -22,8 +22,8 @@
diff --git a/src/main/resources/templates/fragments/languages.html b/src/main/resources/templates/fragments/languages.html index 5028d656032..def990dfd3c 100644 --- a/src/main/resources/templates/fragments/languages.html +++ b/src/main/resources/templates/fragments/languages.html @@ -31,4 +31,5 @@ icon Česky icon Hrvatski icon Norsk + icon ไทย diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index ffb25a3705a..d2846a2418e 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -264,6 +264,7 @@