From b9309a02c2e8f2f12b1f81b67cdb77552e05270b Mon Sep 17 00:00:00 2001 From: Filippo Casarin Date: Sun, 2 Nov 2025 01:09:18 +0100 Subject: [PATCH] Remove PrintingService --- Dockerfile | 1 - cms/conf.py | 11 - cms/db/__init__.py | 5 +- cms/db/printjob.py | 75 ----- cms/db/user.py | 8 +- cms/db/util.py | 7 - cms/locale/ar/LC_MESSAGES/cms.po | 126 ++------- cms/locale/bg/LC_MESSAGES/cms.po | 122 ++------- cms/locale/bs/LC_MESSAGES/cms.po | 121 ++------ cms/locale/cms.pot | 113 ++------ cms/locale/cs/LC_MESSAGES/cms.po | 127 ++------- cms/locale/de/LC_MESSAGES/cms.po | 122 ++------- cms/locale/es/LC_MESSAGES/cms.po | 120 ++------ cms/locale/es_CL/LC_MESSAGES/cms.po | 127 ++------- cms/locale/et/LC_MESSAGES/cms.po | 127 ++------- cms/locale/fr/LC_MESSAGES/cms.po | 127 ++------- cms/locale/he/LC_MESSAGES/cms.po | 115 ++------ cms/locale/hu/LC_MESSAGES/cms.po | 123 ++------- cms/locale/it/LC_MESSAGES/cms.po | 127 ++------- cms/locale/ja/LC_MESSAGES/cms.po | 116 ++------ cms/locale/ko/LC_MESSAGES/cms.po | 123 ++------- cms/locale/lt/LC_MESSAGES/cms.po | 122 ++------- cms/locale/lv/LC_MESSAGES/cms.po | 120 ++------ cms/locale/nl/LC_MESSAGES/cms.po | 120 ++------ cms/locale/ro/LC_MESSAGES/cms.po | 121 ++------ cms/locale/ru/LC_MESSAGES/cms.po | 116 ++------ cms/locale/sl/LC_MESSAGES/cms.po | 116 ++------ cms/locale/th/LC_MESSAGES/cms.po | 128 ++------- cms/locale/uk/LC_MESSAGES/cms.po | 127 ++------- cms/locale/vi/LC_MESSAGES/cms.po | 122 ++------- cms/locale/zh_CN/LC_MESSAGES/cms.po | 116 ++------ cms/locale/zh_TW/LC_MESSAGES/cms.po | 121 ++------ cms/server/contest/handlers/__init__.py | 2 - cms/server/contest/handlers/contest.py | 3 +- cms/server/contest/handlers/main.py | 53 +--- cms/server/contest/printing.py | 144 ---------- cms/server/contest/server.py | 5 - cms/server/contest/static/cws_style.css | 7 - cms/server/contest/templates/contest.html | 5 - cms/server/contest/templates/printing.html | 94 ------- cms/service/PrintingService.py | 259 ------------------ cms/service/Worker.py | 3 +- cms/service/templates/printing/title_page.tex | 14 - cmscommon/tex.py | 59 ---- cmscontrib/DumpExporter.py | 13 +- cmscontrib/DumpImporter.py | 13 +- cmscontrib/updaters/update_47.py | 44 +++ cmscontrib/updaters/update_from_1.5.sql | 3 + .../unit_tests/cmscontrib/DumpExporterTest.py | 3 +- .../unit_tests/cmscontrib/DumpImporterTest.py | 3 +- .../server/contest/printing_test.py | 108 -------- config/cms.sample.toml | 20 -- constraints.txt | 2 - docs/Installation.rst | 20 +- docs/Introduction.rst | 2 - pyproject.toml | 4 - scripts/cmsPrintingService | 51 ---- setup.py | 4 - 58 files changed, 682 insertions(+), 3528 deletions(-) delete mode 100644 cms/db/printjob.py delete mode 100644 cms/server/contest/printing.py delete mode 100644 cms/server/contest/templates/printing.html delete mode 100644 cms/service/PrintingService.py delete mode 100644 cms/service/templates/printing/title_page.tex delete mode 100644 cmscommon/tex.py create mode 100644 cmscontrib/updaters/update_47.py delete mode 100755 cmstestsuite/unit_tests/server/contest/printing_test.py delete mode 100755 scripts/cmsPrintingService diff --git a/Dockerfile b/Dockerfile index c9874470d7..753f750e17 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,6 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ ghc git libcap-dev - libcups2-dev libffi-dev libpq-dev libyaml-dev diff --git a/cms/conf.py b/cms/conf.py index 6e7495443f..71efd485f7 100644 --- a/cms/conf.py +++ b/cms/conf.py @@ -147,16 +147,6 @@ class ProxyServiceConfig: https_certfile: str | None = None -@dataclass() -class PrintingServiceConfig: - max_print_length: int = 10_000_000 # 10 MB - printer: str | None = None - paper_size: str = "A4" - max_pages_per_job: int = 10 - max_jobs_per_user: int = 10 - pdf_printing_allowed: bool = False - - @dataclass() class PrometheusConfig: listen_address: str = "127.0.0.1" @@ -186,7 +176,6 @@ class Config: contest_web_server: CWSConfig = field_helper(CWSConfig) admin_web_server: AWSConfig = field_helper(AWSConfig) proxy_service: ProxyServiceConfig = field_helper(ProxyServiceConfig) - printing: PrintingServiceConfig = field_helper(PrintingServiceConfig) prometheus: PrometheusConfig = field_helper(PrometheusConfig) telegram_bot: TelegramBotConfig | None = None # This is the one that will be provided in the config file. diff --git a/cms/db/__init__.py b/cms/db/__init__.py index 5533c72bb4..5af0da3945 100644 --- a/cms/db/__init__.py +++ b/cms/db/__init__.py @@ -66,8 +66,6 @@ # usertest "UserTest", "UserTestFile", "UserTestManager", "UserTestResult", "UserTestExecutable", - # printjob - "PrintJob", # init "init_db", # drop @@ -81,7 +79,7 @@ # Instantiate or import these objects. -version = 46 +version = 47 engine = create_engine(config.database.url, echo=config.database.debug, pool_timeout=60, pool_recycle=120) @@ -103,7 +101,6 @@ Executable, Evaluation from .usertest import UserTest, UserTestFile, UserTestManager, \ UserTestResult, UserTestExecutable -from .printjob import PrintJob from .init import init_db from .drop import drop_db diff --git a/cms/db/printjob.py b/cms/db/printjob.py deleted file mode 100644 index 5956d300ac..0000000000 --- a/cms/db/printjob.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/env python3 - -# Contest Management System - http://cms-dev.github.io/ -# Copyright © 2014 Fabian Gundlach <320pointsguy@gmail.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -"""Print-job-related database interface for SQLAlchemy. - -""" - -from datetime import datetime -from sqlalchemy.dialects.postgresql import ARRAY -from sqlalchemy.orm import relationship -from sqlalchemy.schema import Column, ForeignKey -from sqlalchemy.types import Integer, String, DateTime, Boolean - -from . import Filename, Digest, Base, Participation - - -class PrintJob(Base): - """Class to store a print job. - - """ - __tablename__ = 'printjobs' - - # Auto increment primary key. - id: int = Column( - Integer, - primary_key=True) - - # Participation (id and object) that did the submission. - participation_id: int = Column( - Integer, - ForeignKey(Participation.id, - onupdate="CASCADE", ondelete="CASCADE"), - nullable=False, - index=True) - participation: Participation = relationship( - Participation, - back_populates="printjobs") - - # Submission time of the print job. - timestamp: datetime = Column( - DateTime, - nullable=False) - - # Filename and digest of the submitted file. - filename: str = Column( - Filename, - nullable=False) - digest: str = Column( - Digest, - nullable=False) - - done: bool = Column( - Boolean, - nullable=False, - default=False) - - status: list[str] = Column( - ARRAY(String), - nullable=False, - default=[]) diff --git a/cms/db/user.py b/cms/db/user.py index d470ce1d4c..e60de859a8 100644 --- a/cms/db/user.py +++ b/cms/db/user.py @@ -39,7 +39,7 @@ from . import CastingArray, Codename, Base, Admin, Contest import typing if typing.TYPE_CHECKING: - from . import PrintJob, Submission, UserTest + from . import Submission, UserTest class User(Base): """Class to store a user. @@ -271,12 +271,6 @@ class Participation(Base): passive_deletes=True, back_populates="participation") - printjobs: list["PrintJob"] = relationship( - "PrintJob", - cascade="all, delete-orphan", - passive_deletes=True, - back_populates="participation") - class Message(Base): """Class to store a private message from the managers to the diff --git a/cms/db/util.py b/cms/db/util.py index 8284089919..af170bffbc 100644 --- a/cms/db/util.py +++ b/cms/db/util.py @@ -51,7 +51,6 @@ UserTestManager, UserTestResult, UserTestExecutable, - PrintJob, Session, ) @@ -309,7 +308,6 @@ def enumerate_files( skip_submissions=False, skip_user_tests=False, skip_users=False, - skip_print_jobs=False, skip_generated=False, ) -> set[str]: """Enumerate all the files (by digest) referenced by the @@ -363,11 +361,6 @@ def enumerate_files( .filter(UserTestResult.output != None) .with_entities(UserTestResult.output)) - if not skip_print_jobs and not skip_users: - queries.append(contest_q.join(Contest.participations) - .join(Participation.printjobs) - .with_entities(PrintJob.digest)) - # union(...).execute() would be executed outside of the session. digests = set(r[0] for r in session.execute(union(*queries))) digests.discard(Digest.TOMBSTONE) diff --git a/cms/locale/ar/LC_MESSAGES/cms.po b/cms/locale/ar/LC_MESSAGES/cms.po index f76d9fc5c6..38cc8a388e 100644 --- a/cms/locale/ar/LC_MESSAGES/cms.po +++ b/cms/locale/ar/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-10-07 18:02+0000\n" "Last-Translator: Muaath Alqarni \n" -"Language-Team: Arabic \n" "Language: ar\n" +"Language-Team: Arabic \n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Weblate 5.14-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -278,13 +278,6 @@ msgstr "استقبلت سؤالًا" msgid "Your question has been received, you will be notified when it is answered." msgstr "" -#, fuzzy -msgid "Print job received" -msgstr "استقبلت سؤالًا" - -msgid "Your print job has been received." -msgstr "" - msgid "Submission received" msgstr "التسليم استقبل" @@ -334,33 +327,6 @@ msgstr "الوقت المستغرق للتنفيذ" msgid "Executed" msgstr "نُفّذ" -msgid "Too many print jobs!" -msgstr "" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "" - -#, fuzzy -msgid "Invalid format!" -msgstr "ملف غير صالح" - -msgid "Please select the correct files." -msgstr "" - -msgid "File too big!" -msgstr "ملف ضخم جدًا!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "" - -msgid "Print job storage failed!" -msgstr "" - -msgid "Please try again." -msgstr "فضلًا جرب مرة أخرى." - msgid "Too many submissions!" msgstr "كثرت تسليمات!" @@ -404,10 +370,16 @@ msgstr "" msgid "Invalid submission format!" msgstr "التسليمات الرسمية" +msgid "Please select the correct files." +msgstr "" + #, fuzzy msgid "Submission storage failed!" msgstr "تسليم جدًا ضخم!" +msgid "Please try again." +msgstr "فضلًا جرب مرة أخرى." + #, fuzzy msgid "Too many tests!" msgstr "كثرت تسليمات!" @@ -562,9 +534,6 @@ msgstr "دليل الاستخدام" msgid "Testing" msgstr "الأسئلة" -msgid "Printing" -msgstr "طباعة" - msgid "Contest Management System" msgstr "نظام إدارة المسابقات" @@ -741,7 +710,7 @@ msgstr "لقد بدأت إطارك الزمني في %(start_time)s" msgid "There's nothing you can do now." msgstr "لا يمكنك فعل شيء." -#, fuzzy, python-format +#, fuzzy msgid "You never started your time frame. Now it's too late." msgstr "لقد بدأت إطارك الزمني في %(start_time)s" @@ -778,51 +747,6 @@ msgstr "نعم" msgid "No" msgstr "لا" -msgid "Print" -msgstr "اطبع" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "يمكنك طباعة %(remaining_jobs)s ملفات نصية أو PDF زيادة، وكل منها لا يتجاوز %(max_pages)s صفحات." - -#, fuzzy, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "يمكنك طباعة %(remaining_jobs)s ملفات نصية أو PDF زيادة، وكل منها لا يتجاوز %(max_pages)s صفحات." - -msgid "File (text or PDF)" -msgstr "ملف (نصي أو PDF)" - -msgid "File (text)" -msgstr "ملف (نصي)" - -msgid "Submit" -msgstr "تسليم" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "" - -msgid "Previous print jobs" -msgstr "" - -msgid "Date and time" -msgstr "التاريخ والوقت" - -msgid "Time" -msgstr "الوقت" - -msgid "File name" -msgstr "اسم الملف" - -msgid "Status" -msgstr "الحالة" - -msgid "Preparing..." -msgstr "يجهز..." - -#, fuzzy -msgid "no print jobs yet" -msgstr "لا إجابة بعد" - msgid "The passwords do not match!" msgstr "كلمتي المرور غير متطابقة!" @@ -963,6 +887,9 @@ msgstr "غير معروف" msgid "loading..." msgstr "يحمل..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, fuzzy, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) الوصف" @@ -990,6 +917,9 @@ msgstr "يمكنك أن تسلم أي جزء من المخرجات في التس msgid "You can submit %(submissions_left)s more solution(s)." msgstr "يمكنك تسليم %(submissions)s حلول بحد أقصى أثناء المسابقة" +msgid "Submit" +msgstr "تسليم" + msgid "submission.zip" msgstr "submission.zip" @@ -1057,6 +987,15 @@ msgstr "المدخلات" msgid "Previous tests" msgstr "التسليمات السابقة" +msgid "Date and time" +msgstr "التاريخ والوقت" + +msgid "Time" +msgstr "الوقت" + +msgid "Status" +msgstr "الحالة" + msgid "Input" msgstr "المدخلات" @@ -1090,14 +1029,3 @@ msgstr "" msgid "Your request has been discarded because you already used a token on that submission." msgstr "" -msgid "Invalid file" -msgstr "ملف غير صالح" - -msgid "Print job has too many pages" -msgstr "" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Standard Template Library" -#~ msgstr "المكتبة الأساسية" diff --git a/cms/locale/bg/LC_MESSAGES/cms.po b/cms/locale/bg/LC_MESSAGES/cms.po index d1a0d8f83e..4238280e59 100644 --- a/cms/locale/bg/LC_MESSAGES/cms.po +++ b/cms/locale/bg/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-11-09 16:47+0000\n" "Last-Translator: Любомир Василев \n" -"Language-Team: Bulgarian \n" "Language: bg\n" +"Language-Team: Bulgarian \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.15-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -252,13 +252,6 @@ msgstr "Въпросът е получен" msgid "Your question has been received, you will be notified when it is answered." msgstr "Вашият въпрос беше получен. Ще бъдете уведомени, когато имате отговор." -#, fuzzy -msgid "Print job received" -msgstr "Тестът е получен" - -msgid "Your print job has been received." -msgstr "" - msgid "Submission received" msgstr "Решението е получено" @@ -304,33 +297,6 @@ msgstr "Изпълняване…" msgid "Executed" msgstr "Изпълнено" -msgid "Too many print jobs!" -msgstr "Твърде много задачи за разпечатване!" - -#, fuzzy, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Достигнахте максималния лимит от най-много %d изпращания на решения на всички задачи." - -msgid "Invalid format!" -msgstr "Неправилен формат!" - -msgid "Please select the correct files." -msgstr "Моля, изберете правилните файлове." - -msgid "File too big!" -msgstr "Файлът е твърде голям!" - -#, fuzzy, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Всеки файл с код трябва да бъде най-много %d байта голям." - -#, fuzzy -msgid "Print job storage failed!" -msgstr "Съхраняватено на тестове се провали!" - -msgid "Please try again." -msgstr "Моля, опитайте отново." - msgid "Too many submissions!" msgstr "Твърде много изпратени решения!" @@ -373,9 +339,15 @@ msgstr "Изпратеният архив не може да бъде отвор msgid "Invalid submission format!" msgstr "Неправилен формат на решението!" +msgid "Please select the correct files." +msgstr "Моля, изберете правилните файлове." + msgid "Submission storage failed!" msgstr "Съхраняването на решението беше неуспешно!" +msgid "Please try again." +msgstr "Моля, опитайте отново." + msgid "Too many tests!" msgstr "Твърде много тестове!" @@ -528,9 +500,6 @@ msgstr "Документация" msgid "Testing" msgstr "Тестване" -msgid "Printing" -msgstr "Разпечатване" - msgid "Contest Management System" msgstr "" @@ -744,52 +713,6 @@ msgstr "Да" msgid "No" msgstr "Не" -msgid "Print" -msgstr "Разпечатване" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "" - -msgid "File (text or PDF)" -msgstr "Файл (текст или PDF)" - -msgid "File (text)" -msgstr "Файл (текст)" - -msgid "Submit" -msgstr "Изпращане" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "" - -#, fuzzy -msgid "Previous print jobs" -msgstr "Предишни тестове" - -msgid "Date and time" -msgstr "Дата и час" - -msgid "Time" -msgstr "Време" - -#, fuzzy -msgid "File name" -msgstr "Име" - -msgid "Status" -msgstr "Състояние" - -msgid "Preparing..." -msgstr "Потготвяне…" - -msgid "no print jobs yet" -msgstr "все още няма заявки за разпечатване" - msgid "The passwords do not match!" msgstr "" @@ -932,6 +855,9 @@ msgstr "" msgid "loading..." msgstr "зареждане…" +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) предадени решения" @@ -962,6 +888,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Можете да предадете още %(submissions_left)s решения." +msgid "Submit" +msgstr "Изпращане" + #, fuzzy msgid "submission.zip" msgstr "Предадени решения" @@ -1030,6 +959,15 @@ msgstr "вход" msgid "Previous tests" msgstr "Предишни тестове" +msgid "Date and time" +msgstr "Дата и час" + +msgid "Time" +msgstr "Време" + +msgid "Status" +msgstr "Състояние" + msgid "Input" msgstr "Вход" @@ -1061,11 +999,3 @@ msgstr "" msgid "Your request has been discarded because you already used a token on that submission." msgstr "" -msgid "Invalid file" -msgstr "Неправилен файл" - -msgid "Print job has too many pages" -msgstr "" - -msgid "Sent to printer" -msgstr "" diff --git a/cms/locale/bs/LC_MESSAGES/cms.po b/cms/locale/bs/LC_MESSAGES/cms.po index 7b16001b68..f624ac7376 100644 --- a/cms/locale/bs/LC_MESSAGES/cms.po +++ b/cms/locale/bs/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: bs_BA\n" @@ -254,13 +254,6 @@ msgstr "Primljeno pitanje" msgid "Your question has been received, you will be notified when it is answered." msgstr "Vaše pitanje je primljeno, bićete obaviješteni kada dobijete odgovor." -#, fuzzy -msgid "Print job received" -msgstr "Test primljen" - -msgid "Your print job has been received." -msgstr "" - msgid "Submission received" msgstr "Primljena prijava" @@ -304,36 +297,6 @@ msgstr "Izvršavam..." msgid "Executed" msgstr "Izvršeno" -#, fuzzy -msgid "Too many print jobs!" -msgstr "Previše testova!" - -#, fuzzy, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Dosegli ste gornju granicu od maksimalnih %d testova za sve zadatke." - -#, fuzzy -msgid "Invalid format!" -msgstr "Neispravan format testa!" - -msgid "Please select the correct files." -msgstr "Molimo izaberite korektne datoteke." - -#, fuzzy -msgid "File too big!" -msgstr "Test je prevelik!" - -#, fuzzy, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Svaka izvorna datoteka može biti velika najviše %d bajta." - -#, fuzzy -msgid "Print job storage failed!" -msgstr "Smještaj testa neuspješan!" - -msgid "Please try again." -msgstr "Molimo pokušajte ponovo." - msgid "Too many submissions!" msgstr "Previše prijava!" @@ -376,9 +339,15 @@ msgstr "Poslana arhiva se nije mogla otvoriti." msgid "Invalid submission format!" msgstr "Neispravan format prijave!" +msgid "Please select the correct files." +msgstr "Molimo izaberite korektne datoteke." + msgid "Submission storage failed!" msgstr "Smještaj prijave neuspješan!" +msgid "Please try again." +msgstr "Molimo pokušajte ponovo." + msgid "Too many tests!" msgstr "Previše testova!" @@ -542,9 +511,6 @@ msgstr "" msgid "Testing" msgstr "Test je prevelik!" -msgid "Printing" -msgstr "" - msgid "Contest Management System" msgstr "" @@ -764,55 +730,6 @@ msgstr "Da" msgid "No" msgstr "Ne" -#, fuzzy -msgid "Print" -msgstr "Ulaz" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "" - -msgid "File (text or PDF)" -msgstr "" - -msgid "File (text)" -msgstr "" - -msgid "Submit" -msgstr "Pošalji" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "" - -#, fuzzy -msgid "Previous print jobs" -msgstr "Prethodni testovi" - -msgid "Date and time" -msgstr "Datum i vrijeme" - -msgid "Time" -msgstr "Vrijeme" - -#, fuzzy -msgid "File name" -msgstr "Ime" - -msgid "Status" -msgstr "Status" - -#, fuzzy -msgid "Preparing..." -msgstr "Evaluiram..." - -#, fuzzy -msgid "no print jobs yet" -msgstr "još uvijek nema testova" - msgid "The passwords do not match!" msgstr "" @@ -955,6 +872,9 @@ msgstr "" msgid "loading..." msgstr "učitavam..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) prijave" @@ -985,6 +905,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "" +msgid "Submit" +msgstr "Pošalji" + msgid "submission.zip" msgstr "prijava.zip" @@ -1052,6 +975,15 @@ msgstr "ulaz" msgid "Previous tests" msgstr "Prethodni testovi" +msgid "Date and time" +msgstr "Datum i vrijeme" + +msgid "Time" +msgstr "Vrijeme" + +msgid "Status" +msgstr "Status" + msgid "Input" msgstr "Ulaz" @@ -1082,12 +1014,3 @@ msgstr "Vaš zahtjev je odbijen jer nemate više slobodnih tokena." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Vaš zahtjev je odbijen jer ste već iskoristili token na toj prijavi." -msgid "Invalid file" -msgstr "" - -msgid "Print job has too many pages" -msgstr "" - -msgid "Sent to printer" -msgstr "" - diff --git a/cms/locale/cms.pot b/cms/locale/cms.pot index 66ae28f781..7a62a097b8 100644 --- a/cms/locale/cms.pot +++ b/cms/locale/cms.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Contest Management System 1.5.1\n" +"Project-Id-Version: Contest Management System 1.6.dev0\n" "Report-Msgid-Bugs-To: contestms@googlegroups.com\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -244,12 +244,6 @@ msgstr "" msgid "Your question has been received, you will be notified when it is answered." msgstr "" -msgid "Print job received" -msgstr "" - -msgid "Your print job has been received." -msgstr "" - msgid "Submission received" msgstr "" @@ -292,32 +286,6 @@ msgstr "" msgid "Executed" msgstr "" -msgid "Too many print jobs!" -msgstr "" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "" - -msgid "Invalid format!" -msgstr "" - -msgid "Please select the correct files." -msgstr "" - -msgid "File too big!" -msgstr "" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "" - -msgid "Print job storage failed!" -msgstr "" - -msgid "Please try again." -msgstr "" - msgid "Too many submissions!" msgstr "" @@ -360,9 +328,15 @@ msgstr "" msgid "Invalid submission format!" msgstr "" +msgid "Please select the correct files." +msgstr "" + msgid "Submission storage failed!" msgstr "" +msgid "Please try again." +msgstr "" + msgid "Too many tests!" msgstr "" @@ -512,9 +486,6 @@ msgstr "" msgid "Testing" msgstr "" -msgid "Printing" -msgstr "" - msgid "Contest Management System" msgstr "" @@ -723,50 +694,6 @@ msgstr "" msgid "No" msgstr "" -msgid "Print" -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "" - -msgid "File (text or PDF)" -msgstr "" - -msgid "File (text)" -msgstr "" - -msgid "Submit" -msgstr "" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "" - -msgid "Previous print jobs" -msgstr "" - -msgid "Date and time" -msgstr "" - -msgid "Time" -msgstr "" - -msgid "File name" -msgstr "" - -msgid "Status" -msgstr "" - -msgid "Preparing..." -msgstr "" - -msgid "no print jobs yet" -msgstr "" - msgid "The passwords do not match!" msgstr "" @@ -902,6 +829,9 @@ msgstr "" msgid "loading..." msgstr "" +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "" @@ -928,6 +858,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "" +msgid "Submit" +msgstr "" + msgid "submission.zip" msgstr "" @@ -993,6 +926,15 @@ msgstr "" msgid "Previous tests" msgstr "" +msgid "Date and time" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Status" +msgstr "" + msgid "Input" msgstr "" @@ -1023,12 +965,3 @@ msgstr "" msgid "Your request has been discarded because you already used a token on that submission." msgstr "" -msgid "Invalid file" -msgstr "" - -msgid "Print job has too many pages" -msgstr "" - -msgid "Sent to printer" -msgstr "" - diff --git a/cms/locale/cs/LC_MESSAGES/cms.po b/cms/locale/cs/LC_MESSAGES/cms.po index 35baad2918..65d8aafb03 100644 --- a/cms/locale/cs/LC_MESSAGES/cms.po +++ b/cms/locale/cs/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-09-29 18:01+0000\n" "Last-Translator: Benjamin Swart \n" -"Language-Team: Czech \n" "Language: cs\n" +"Language-Team: Czech \n" +"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n" -"X-Generator: Weblate 5.14-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -250,12 +250,6 @@ msgstr "Otázka přijata" msgid "Your question has been received, you will be notified when it is answered." msgstr "Otázka byla přijata, budete upozorněni, až bude zodpovězena." -msgid "Print job received" -msgstr "Tisková úloha přijata" - -msgid "Your print job has been received." -msgstr "Vaše tisková úloha byla přijata." - msgid "Submission received" msgstr "Řešení přijato" @@ -298,32 +292,6 @@ msgstr "Provádění..." msgid "Executed" msgstr "Provedeno" -msgid "Too many print jobs!" -msgstr "Příliš mnoho tiskových úloh!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Byl dosažený limit maximálně %d tiskoových úloh." - -msgid "Invalid format!" -msgstr "Neplatný formát!" - -msgid "Please select the correct files." -msgstr "Prosím vyberte správné soubory." - -msgid "File too big!" -msgstr "Příliš velký soubor!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Každý soubor smí být velký maximálně %d bytů." - -msgid "Print job storage failed!" -msgstr "Nepodařilo se uložit tiskovou úlohu!" - -msgid "Please try again." -msgstr "Prosím zkuste to znovu." - msgid "Too many submissions!" msgstr "Příliš mnoho odevzdaných řešení!" @@ -366,9 +334,15 @@ msgstr "Odevzdaný archiv nemohl být otevřen." msgid "Invalid submission format!" msgstr "Neplatný formát odevzdaného řešení!" +msgid "Please select the correct files." +msgstr "Prosím vyberte správné soubory." + msgid "Submission storage failed!" msgstr "Nepodařilo se uložit odevzdané řešení!" +msgid "Please try again." +msgstr "Prosím zkuste to znovu." + msgid "Too many tests!" msgstr "Příliš mnoho testů!" @@ -518,9 +492,6 @@ msgstr "Dokumentace" msgid "Testing" msgstr "Testování" -msgid "Printing" -msgstr "Tisk" - msgid "Contest Management System" msgstr "Systém pro správu soutěží" @@ -729,50 +700,6 @@ msgstr "Ano" msgid "No" msgstr "Ne" -msgid "Print" -msgstr "Tisk" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Můžete vytisknout ještě %(remaining_jobs)s textů nebo souborů PDF, každý o maximálně %(max_pages)s stránkách." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Můžete vytisknout ještě %(remaining_jobs)s textových souborů, každý o maximálně %(max_pages)s stránkách." - -msgid "File (text or PDF)" -msgstr "Soubor (text nebo PDF)" - -msgid "File (text)" -msgstr "Soubor (text)" - -msgid "Submit" -msgstr "Odevzdat" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Už nemůžete nic vytisknout, jelikož váš limit na tisk byl vyčerpaný." - -msgid "Previous print jobs" -msgstr "Předchozí tiskové úlohy" - -msgid "Date and time" -msgstr "Datum a čas" - -msgid "Time" -msgstr "Čas" - -msgid "File name" -msgstr "Jméno souboru" - -msgid "Status" -msgstr "Stav" - -msgid "Preparing..." -msgstr "Příprava..." - -msgid "no print jobs yet" -msgstr "zatím žádné tiskové úlohy" - msgid "The passwords do not match!" msgstr "Hesla se neshodují!" @@ -909,6 +836,9 @@ msgstr "neznámé" msgid "loading..." msgstr "nahrávám..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) odevzdaná řešení" @@ -935,6 +865,9 @@ msgstr "Na jeden pokus můžete odevzdat jakoukoliv podmnožinu výstupů." msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Můžete odevzdat ještě %(submissions_left)s řešení." +msgid "Submit" +msgstr "Odevzdat" + msgid "submission.zip" msgstr "submission.zip" @@ -1000,6 +933,15 @@ msgstr "vstup" msgid "Previous tests" msgstr "Předchozí testy" +msgid "Date and time" +msgstr "Datum a čas" + +msgid "Time" +msgstr "Čas" + +msgid "Status" +msgstr "Stav" + msgid "Input" msgstr "Vstup" @@ -1030,20 +972,3 @@ msgstr "Požadavek nebyl splněn, protože nemáte k dispozici žádné tokeny." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Požadavek nebyl splněn, protože pro toto odevzdané řešení jste už token použili." -msgid "Invalid file" -msgstr "Neplatný soubor" - -msgid "Print job has too many pages" -msgstr "Tisková úloha má moc stránek" - -msgid "Sent to printer" -msgstr "Odeslat do tiskárny" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Program byl ukončen (to mohlo být způsobeno překročením paměťových limitů)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Vyhodnocování bylo ukončeno signálem. To může být způsobeno překročením paměťového limitu. Uvědomte si, že je-li to způsobeno tím, použitá paměť zobrazená v detailech odevzdaného řešení je použitá paměť před alokací, která způsobila poslání signálu." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library (STL)" diff --git a/cms/locale/de/LC_MESSAGES/cms.po b/cms/locale/de/LC_MESSAGES/cms.po index 7de4c93531..42aa089045 100644 --- a/cms/locale/de/LC_MESSAGES/cms.po +++ b/cms/locale/de/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: de_DE\n" @@ -244,12 +244,6 @@ msgstr "Frage erhalten" msgid "Your question has been received, you will be notified when it is answered." msgstr "Deine Frage wurde erhalten, du wirst bei Antworten benachrichtigt." -msgid "Print job received" -msgstr "Druckauftrag erhalten" - -msgid "Your print job has been received." -msgstr "Dein Druckauftrag ist erhalten worden." - msgid "Submission received" msgstr "Einsendung erhalten" @@ -292,32 +286,6 @@ msgstr "Ausführung..." msgid "Executed" msgstr "Ausgeführt" -msgid "Too many print jobs!" -msgstr "Zu viele Druckaufträge!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Du hast die Begrenzung für maximal %d Druckaufträge erreicht." - -msgid "Invalid format!" -msgstr "Ungültiges Format!" - -msgid "Please select the correct files." -msgstr "Bitte wähle die korrekten Dateien aus." - -msgid "File too big!" -msgstr "Datei zu groß!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Jede Datei darf maximal %d Bytes groß sein." - -msgid "Print job storage failed!" -msgstr "Speichern des Druckauftrags fehlgeschlagen!" - -msgid "Please try again." -msgstr "Bitte erneut versuchen." - msgid "Too many submissions!" msgstr "Zu viele Einsendungen!" @@ -360,9 +328,15 @@ msgstr "Das eingesendete Archiv konnte nicht geöffnet werden." msgid "Invalid submission format!" msgstr "Ungültiges Einsendungsformat!" +msgid "Please select the correct files." +msgstr "Bitte wähle die korrekten Dateien aus." + msgid "Submission storage failed!" msgstr "Speichern der Einsendung fehlgeschlagen!" +msgid "Please try again." +msgstr "Bitte erneut versuchen." + msgid "Too many tests!" msgstr "Zu viele Tests!" @@ -513,9 +487,6 @@ msgstr "Dokumentation" msgid "Testing" msgstr "Testen" -msgid "Printing" -msgstr "Drucken" - msgid "Contest Management System" msgstr "Contest Management System" @@ -725,50 +696,6 @@ msgstr "Ja" msgid "No" msgstr "Nein" -msgid "Print" -msgstr "Drucken" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Du kannst %(remaining_jobs)s weitere Text- oder PDF-Dateien mit jeweils bis zu %(max_pages)s Seiten drucken." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Du kannst %(remaining_jobs)s weitere Textdateien mit jeweils bis zu %(max_pages)s Seiten drucken." - -msgid "File (text or PDF)" -msgstr "Datei (Text oder PDF)" - -msgid "File (text)" -msgstr "Datei (Text)" - -msgid "Submit" -msgstr "Absenden" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Du kannst nichts mehr drucken, da du deinen Druckkontingent bereits aufgebraucht hast." - -msgid "Previous print jobs" -msgstr "Vorherige Druckaufträge" - -msgid "Date and time" -msgstr "Datum und Uhrzeit" - -msgid "Time" -msgstr "Uhrzeit" - -msgid "File name" -msgstr "Dateiname" - -msgid "Status" -msgstr "Status" - -msgid "Preparing..." -msgstr "Vorbereitung..." - -msgid "no print jobs yet" -msgstr "noch keine Druckaufträge" - msgid "The passwords do not match!" msgstr "" @@ -913,6 +840,9 @@ msgstr "unbekannt" msgid "loading..." msgstr "laden..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) Einsendungen" @@ -939,6 +869,9 @@ msgstr "Du kannst eine beliebige Teilmenge von Ausgaben in einer einzigen Einsen msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Du kannst noch %(submissions_left)s weitere Lösung(en) einsenden." +msgid "Submit" +msgstr "Absenden" + msgid "submission.zip" msgstr "submission.zip" @@ -1006,6 +939,15 @@ msgstr "Eingabe" msgid "Previous tests" msgstr "Vorherige Tests" +msgid "Date and time" +msgstr "Datum und Uhrzeit" + +msgid "Time" +msgstr "Uhrzeit" + +msgid "Status" +msgstr "Status" + msgid "Input" msgstr "Eingabe" @@ -1036,23 +978,3 @@ msgstr "Deine Anfrage wurde verworfen, weil du über keine Tokens verfügst." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Deine Anfrage wurde verworfen, weil du für diese Einsendung bereits einen Token verwendet hast." -#, fuzzy -msgid "Invalid file" -msgstr "Ungültiges Format!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "Speichern des Druckauftrags fehlgeschlagen!" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Ausführung terminiert (könnte durch Überschreiten der Speicherbegrenzung ausgelöst worden sein)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Die Ausführung deiner Einsendung wurde durch ein Signal terminiert. Dies kann unter anderem durch ein Überschreiten der Speicherbegrenzung ausgelöst worden sein. Beachte in diesem Fall, dass die in den Einsendungsdetails angezeigte Speichernutzung sich auf den Wert vor der Allokation von weiterem Speicher bezieht." - -#~ msgid "Standard Template Library" -#~ msgstr "Standardbibliothek (STL)" - diff --git a/cms/locale/es/LC_MESSAGES/cms.po b/cms/locale/es/LC_MESSAGES/cms.po index 4301761fa4..35d3a26314 100644 --- a/cms/locale/es/LC_MESSAGES/cms.po +++ b/cms/locale/es/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: es_ES\n" @@ -244,12 +244,6 @@ msgstr "Pregunta recibida" msgid "Your question has been received, you will be notified when it is answered." msgstr "Su pregunta ha sido recibida. Se le notificará cuando sea respondida." -msgid "Print job received" -msgstr "Trabajo de impresión recibido" - -msgid "Your print job has been received." -msgstr "Su trabajo de impresión ha sido recibido." - msgid "Submission received" msgstr "Envío recibido" @@ -292,32 +286,6 @@ msgstr "Ejecutando..." msgid "Executed" msgstr "Ejecutado" -msgid "Too many print jobs!" -msgstr "¡Demasiados trabajos de impresión!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Ha alcanzado el límite máximo de %d trabajos de impresión." - -msgid "Invalid format!" -msgstr "¡Formato inválido!" - -msgid "Please select the correct files." -msgstr "Por favor seleccione los archivos correctos." - -msgid "File too big!" -msgstr "¡El archivo es demasiado grande!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Cada archivo debe tener un tamaño de a lo sumo %d bytes." - -msgid "Print job storage failed!" -msgstr "¡No se pudo almacenar el trabajo de impresión!" - -msgid "Please try again." -msgstr "Por favor, intente nuevamente." - msgid "Too many submissions!" msgstr "¡Demasiados envíos!" @@ -360,9 +328,15 @@ msgstr "No se pudo abrir el archivo comprimido enviado." msgid "Invalid submission format!" msgstr "¡El formato del envío es inválido!" +msgid "Please select the correct files." +msgstr "Por favor seleccione los archivos correctos." + msgid "Submission storage failed!" msgstr "¡No se pudo almacenar el envío!" +msgid "Please try again." +msgstr "Por favor, intente nuevamente." + msgid "Too many tests!" msgstr "¡Demasiados tests!" @@ -512,9 +486,6 @@ msgstr "Documentación" msgid "Testing" msgstr "Testing" -msgid "Printing" -msgstr "Impresión" - msgid "Contest Management System" msgstr "Contest Management System" @@ -723,50 +694,6 @@ msgstr "Sí" msgid "No" msgstr "No" -msgid "Print" -msgstr "Imprimir" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Puede imprimir %(remaining_jobs)s archivos de texto o pdf adicionales, de hasta %(max_pages)s páginas cada uno." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Puede imprimir %(remaining_jobs)s archivos de texto adicionales, de hasta %(max_pages)s páginas cada uno." - -msgid "File (text or PDF)" -msgstr "Archivo (de texto o PDF)" - -msgid "File (text)" -msgstr "Archivo (de texto)" - -msgid "Submit" -msgstr "Enviar" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Ya no puede imprimir nada más, pues ya ha agotado su cuota de impresión." - -msgid "Previous print jobs" -msgstr "Trabajos de impresión previos" - -msgid "Date and time" -msgstr "Fecha y hora" - -msgid "Time" -msgstr "Hora" - -msgid "File name" -msgstr "Nombre de archivo" - -msgid "Status" -msgstr "Estado" - -msgid "Preparing..." -msgstr "Preparando..." - -msgid "no print jobs yet" -msgstr "sin trabajos de impresión aún" - msgid "The passwords do not match!" msgstr "Las contraseñas no coinciden" @@ -902,6 +829,9 @@ msgstr "desconocido" msgid "loading..." msgstr "cargando..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) envíos" @@ -928,6 +858,9 @@ msgstr "Puede enviar cualquier subconjunto de los archivos de salida en un mismo msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Puede enviar %(submissions_left)s soluciones más." +msgid "Submit" +msgstr "Enviar" + msgid "submission.zip" msgstr "envio.zip" @@ -993,6 +926,15 @@ msgstr "entrada" msgid "Previous tests" msgstr "Tests anteriores" +msgid "Date and time" +msgstr "Fecha y hora" + +msgid "Time" +msgstr "Hora" + +msgid "Status" +msgstr "Estado" + msgid "Input" msgstr "Entrada" @@ -1023,21 +965,3 @@ msgstr "Su pedido ha sido descartado porque no posee tokens disponibles." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Su pedido ha sido descartado porque ya ha utilizado un token sobre ese envío." -msgid "Invalid file" -msgstr "Archivo inválido" - -msgid "Print job has too many pages" -msgstr "El trabajo de impresión tiene demasiadas páginas" - -msgid "Sent to printer" -msgstr "Enviado a la impresora" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "La ejecución fue terminada abruptamente (podría deberse a un exceso en el uso de memoria)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "La evaluación fue terminada mediante una señal del sistema operativo. Entre otras cosas, esto podría deberse a un exceso en el uso de memoria. Notar que si esta fuera la razón, la memoria utilizada mostrada en los detalles de envío sería la memoria utilizada antes de la reserva de memoria que generó la señal." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" - diff --git a/cms/locale/es_CL/LC_MESSAGES/cms.po b/cms/locale/es_CL/LC_MESSAGES/cms.po index fe620c9920..eb1e3920de 100644 --- a/cms/locale/es_CL/LC_MESSAGES/cms.po +++ b/cms/locale/es_CL/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-10-29 03:03+0000\n" "Last-Translator: Alan Nathan Mendoza Grande \n" -"Language-Team: Spanish (Chile) \n" "Language: es_CL\n" +"Language-Team: Spanish (Chile) \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.14.1-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -241,12 +241,6 @@ msgstr "Pregunta recibida" msgid "Your question has been received, you will be notified when it is answered." msgstr "Su pregunta ha sido recibida. Se le notificará cuando sea respondida." -msgid "Print job received" -msgstr "Trabajo de impresión recibido" - -msgid "Your print job has been received." -msgstr "Su trabajo de impresión ha sido recibido." - msgid "Submission received" msgstr "Envío recibido" @@ -289,32 +283,6 @@ msgstr "Ejecutando..." msgid "Executed" msgstr "Ejecutado" -msgid "Too many print jobs!" -msgstr "¡Demasiados trabajos de impresión!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Ha alcanzado el límite máximo de %d trabajos de impresión." - -msgid "Invalid format!" -msgstr "¡Formato inválido!" - -msgid "Please select the correct files." -msgstr "Por favor seleccione los archivos correctos." - -msgid "File too big!" -msgstr "¡El archivo es demasiado grande!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Cada archivo debe tener un tamaño de a lo sumo %d bytes." - -msgid "Print job storage failed!" -msgstr "¡No se pudo almacenar el trabajo de impresión!" - -msgid "Please try again." -msgstr "Por favor, intente nuevamente." - msgid "Too many submissions!" msgstr "¡Demasiados envíos!" @@ -357,9 +325,15 @@ msgstr "No se pudo abrir el archivo comprimido enviado." msgid "Invalid submission format!" msgstr "¡El formato del envío es inválido!" +msgid "Please select the correct files." +msgstr "Por favor seleccione los archivos correctos." + msgid "Submission storage failed!" msgstr "¡No se pudo almacenar el envío!" +msgid "Please try again." +msgstr "Por favor, intente nuevamente." + msgid "Too many tests!" msgstr "¡Demasiados tests!" @@ -509,9 +483,6 @@ msgstr "Documentación" msgid "Testing" msgstr "Testing" -msgid "Printing" -msgstr "Impresión" - msgid "Contest Management System" msgstr "Contest Management System" @@ -720,50 +691,6 @@ msgstr "Sí" msgid "No" msgstr "No" -msgid "Print" -msgstr "Imprimir" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Puedes imprimir %(remaining_jobs)s archivos de texto o pdf adicionales, de hasta %(max_pages)s páginas cada uno." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Puedes imprimir %(remaining_jobs)s archivos de texto adicionales, de hasta %(max_pages)s páginas cada uno." - -msgid "File (text or PDF)" -msgstr "Archivo (de texto o PDF)" - -msgid "File (text)" -msgstr "Archivo (de texto)" - -msgid "Submit" -msgstr "Enviar" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Ya no puedes imprimir nada más, pues ya has agotado tu cuota de impresión." - -msgid "Previous print jobs" -msgstr "Trabajos de impresión previos" - -msgid "Date and time" -msgstr "Fecha y hora" - -msgid "Time" -msgstr "Hora" - -msgid "File name" -msgstr "Nombre de archivo" - -msgid "Status" -msgstr "Estado" - -msgid "Preparing..." -msgstr "Preparando..." - -msgid "no print jobs yet" -msgstr "sin trabajos de impresión aún" - msgid "The passwords do not match!" msgstr "Las contraseñas no coinciden" @@ -899,6 +826,9 @@ msgstr "desconocido" msgid "loading..." msgstr "cargando..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) envíos" @@ -925,6 +855,9 @@ msgstr "Puedes enviar cualquier subconjunto de los archivos de salida en un mism msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Puedes enviar %(submissions_left)s soluciones más." +msgid "Submit" +msgstr "Enviar" + msgid "submission.zip" msgstr "envio.zip" @@ -990,6 +923,15 @@ msgstr "entrada" msgid "Previous tests" msgstr "Tests anteriores" +msgid "Date and time" +msgstr "Fecha y hora" + +msgid "Time" +msgstr "Hora" + +msgid "Status" +msgstr "Estado" + msgid "Input" msgstr "Entrada" @@ -1020,20 +962,3 @@ msgstr "Su pedido ha sido descartado porque no posee tokens disponibles." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Su pedido ha sido descartado porque ya ha utilizado un token sobre ese envío." -msgid "Invalid file" -msgstr "Archivo inválido" - -msgid "Print job has too many pages" -msgstr "El trabajo de impresión tiene demasiadas páginas" - -msgid "Sent to printer" -msgstr "Enviado a la impresora" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "La ejecución fue terminada abruptamente (podría deberse a un exceso en el uso de memoria)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "La evaluación fue terminada mediante una señal del sistema operativo. Entre otras cosas, esto podría deberse a un exceso en el uso de memoria. Notar que si esta fuera la razón, la memoria utilizada mostrada en los detalles de envío sería la memoria utilizada antes de la reserva de memoria que generó la señal." - -#~ msgid "Standard Template Library" -#~ msgstr "Standrad Template Library" diff --git a/cms/locale/et/LC_MESSAGES/cms.po b/cms/locale/et/LC_MESSAGES/cms.po index ecbed58d83..761708882d 100644 --- a/cms/locale/et/LC_MESSAGES/cms.po +++ b/cms/locale/et/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-08-17 17:02+0000\n" "Last-Translator: \"p. randla\" \n" -"Language-Team: Estonian \n" "Language: et\n" +"Language-Team: Estonian \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.13\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -241,12 +241,6 @@ msgstr "Küsimus on vastu võetud" msgid "Your question has been received, you will be notified when it is answered." msgstr "Teie küsimus on vastu võetud. Teid teavitatakse, kui selle on vastatud." -msgid "Print job received" -msgstr "Printimistöö vastu võetud" - -msgid "Your print job has been received." -msgstr "Teie printimistöö on edukalt vastu võetud." - msgid "Submission received" msgstr "Lahendus on vastu võetud" @@ -289,32 +283,6 @@ msgstr "Testimine..." msgid "Executed" msgstr "Käivitatud" -msgid "Too many print jobs!" -msgstr "Liiga palju printmistöid!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Teil ei ole lubatud rohkem kui %d printimistööd esitada." - -msgid "Invalid format!" -msgstr "Vigane vorming!" - -msgid "Please select the correct files." -msgstr "Palun valige õiged failid." - -msgid "File too big!" -msgstr "Fail on liiga suur!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Iga fail võib olla ülimalt %d baiti pikk." - -msgid "Print job storage failed!" -msgstr "Printimistöö salvestamine ebaõnnestus!" - -msgid "Please try again." -msgstr "Palun proovige uuesti." - msgid "Too many submissions!" msgstr "Liiga palju esitatud lahendusi!" @@ -357,9 +325,15 @@ msgstr "Esitatud arhiivi ei õnnestunud avada." msgid "Invalid submission format!" msgstr "Esitatud lahenduse vorming on vale!" +msgid "Please select the correct files." +msgstr "Palun valige õiged failid." + msgid "Submission storage failed!" msgstr "Esitatud lahenduse salvestamine ebaõnnestus!" +msgid "Please try again." +msgstr "Palun proovige uuesti." + msgid "Too many tests!" msgstr "Liiga palju teste!" @@ -509,9 +483,6 @@ msgstr "Dokumentatsioon" msgid "Testing" msgstr "Testimine" -msgid "Printing" -msgstr "Printimine" - msgid "Contest Management System" msgstr "Contest Management System" @@ -720,50 +691,6 @@ msgstr "Jah" msgid "No" msgstr "Ei" -msgid "Print" -msgstr "Prindi" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Te võite printida veel %(remaining_jobs)s teksti või PDF faili, igaüks kuni %(max_pages)s lehekülge pikk." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Te võite printida veel %(remaining_jobs)s tekstifaili, igaüks kuni %(max_pages)s lehekülge pikk." - -msgid "File (text or PDF)" -msgstr "Fail (tekst või PDF)" - -msgid "File (text)" -msgstr "Fail (tekst)" - -msgid "Submit" -msgstr "Esita" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Te ei saa rohkem printida, kuna kasutasite ära teile lubatud printimiskvoodi." - -msgid "Previous print jobs" -msgstr "Eelmised printimistööd" - -msgid "Date and time" -msgstr "Kuupäev ja kellaaeg" - -msgid "Time" -msgstr "Aeg" - -msgid "File name" -msgstr "Faili nimi" - -msgid "Status" -msgstr "Olek" - -msgid "Preparing..." -msgstr "Valmistamine..." - -msgid "no print jobs yet" -msgstr "printimistöid ei ole" - msgid "The passwords do not match!" msgstr "Paroolid ei klapi!" @@ -899,6 +826,9 @@ msgstr "tundmatu" msgid "loading..." msgstr "laadimine..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) esitatud lahendused" @@ -925,6 +855,9 @@ msgstr "Võite esitada suvalise alamhulga väljundfailidest." msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Võite esitada veel %(submissions_left)s lahendust." +msgid "Submit" +msgstr "Esita" + msgid "submission.zip" msgstr "lahendus.zip" @@ -990,6 +923,15 @@ msgstr "sisend" msgid "Previous tests" msgstr "Eelmised testid" +msgid "Date and time" +msgstr "Kuupäev ja kellaaeg" + +msgid "Time" +msgstr "Aeg" + +msgid "Status" +msgstr "Olek" + msgid "Input" msgstr "Sisend" @@ -1020,20 +962,3 @@ msgstr "Päring on tühistatud, kuna Teil pole ühtegi piletit." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Päring on tühistatud, kuna selle jaoks on juba piletit kasutatud." -msgid "Invalid file" -msgstr "Vigane fail" - -msgid "Print job has too many pages" -msgstr "Prinditaval dokumendil on liiga mitu lehekülge" - -msgid "Sent to printer" -msgstr "Printerile saadetud" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Programmi täitmine katkes signaali tagajärjel (võib olla tingitud mälupiirangute ületamisest)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Lahenduse jooksmine katkes signaali tagajärjel. See võib olla tingitud muuhulgas mälupiirangu ületamisest. Pane tähele, et sellisel juhul näidatakse esituse mälukastutust vahetult enne piirangu ületamist." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" diff --git a/cms/locale/fr/LC_MESSAGES/cms.po b/cms/locale/fr/LC_MESSAGES/cms.po index bcb703c343..63094b0d9c 100644 --- a/cms/locale/fr/LC_MESSAGES/cms.po +++ b/cms/locale/fr/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-08-17 17:02+0000\n" "Last-Translator: Pasit Sangprachathanarak \n" -"Language-Team: French \n" "Language: fr\n" +"Language-Team: French \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.13\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -241,12 +241,6 @@ msgstr "Question envoyée" msgid "Your question has been received, you will be notified when it is answered." msgstr "Votre question a été envoyée, vous serez notifié lorsque quelqu'un y aura répondu." -msgid "Print job received" -msgstr "Impression reçue" - -msgid "Your print job has been received." -msgstr "Votre impression a été reçue." - msgid "Submission received" msgstr "Soumission reçue" @@ -289,32 +283,6 @@ msgstr "En cours d'exécution..." msgid "Executed" msgstr "Exécuté" -msgid "Too many print jobs!" -msgstr "Trop d'impressions !" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Vous avez atteint le nombre maximal de %d impressions." - -msgid "Invalid format!" -msgstr "Format invalide !" - -msgid "Please select the correct files." -msgstr "Sélectionnez les fichiers corrects." - -msgid "File too big!" -msgstr "Fichier trop gros !" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Chaque fichier source ne peut pas faire plus de %d octets." - -msgid "Print job storage failed!" -msgstr "Impossible de stocker l'impression !" - -msgid "Please try again." -msgstr "Veuillez réessayer." - msgid "Too many submissions!" msgstr "Trop de soumissions !" @@ -357,9 +325,15 @@ msgstr "Impossible d'ouvrir l'archive soumise." msgid "Invalid submission format!" msgstr "Format de soumission invalide !" +msgid "Please select the correct files." +msgstr "Sélectionnez les fichiers corrects." + msgid "Submission storage failed!" msgstr "Erreur d'enregistrement de votre soumission !" +msgid "Please try again." +msgstr "Veuillez réessayer." + msgid "Too many tests!" msgstr "Trop de tests !" @@ -509,9 +483,6 @@ msgstr "Documentation" msgid "Testing" msgstr "Tests" -msgid "Printing" -msgstr "Impression en cours" - msgid "Contest Management System" msgstr "Contest Management System" @@ -720,50 +691,6 @@ msgstr "Oui" msgid "No" msgstr "Non" -msgid "Print" -msgstr "Imprimer" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Vous pouvez encore imprimer %(remaining_jobs)s fichiers textes ou PDF de %(max_pages)s pages maximum chacuns." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Vous pouvez encore imprimer %(remaining_jobs)s fichiers textes de %(max_pages)s pages maximum chacuns." - -msgid "File (text or PDF)" -msgstr "Fichier (texte ou PDF)" - -msgid "File (text)" -msgstr "Fichier (texte)" - -msgid "Submit" -msgstr "Soumettre" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Vous ne pouvez plus imprimer car vous avez épuisé votre quota d'impression." - -msgid "Previous print jobs" -msgstr "Impressions précédentes" - -msgid "Date and time" -msgstr "Date et heure" - -msgid "Time" -msgstr "Heure" - -msgid "File name" -msgstr "Nom de fichier" - -msgid "Status" -msgstr "Status" - -msgid "Preparing..." -msgstr "Préparation ..." - -msgid "no print jobs yet" -msgstr "aucune impression" - msgid "The passwords do not match!" msgstr "Les mots de passe ne correspondent pas !" @@ -899,6 +826,9 @@ msgstr "inconnu" msgid "loading..." msgstr "chargement ..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) soumissions" @@ -925,6 +855,9 @@ msgstr "Vous pouvez soumettre un sous-ensemble des sorties dans une seule soumis msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Vous pouvez encore soumettre %(submissions_left)s solutions." +msgid "Submit" +msgstr "Soumettre" + msgid "submission.zip" msgstr "soumission.zip" @@ -990,6 +923,15 @@ msgstr "entrée" msgid "Previous tests" msgstr "Tests précédents" +msgid "Date and time" +msgstr "Date et heure" + +msgid "Time" +msgstr "Heure" + +msgid "Status" +msgstr "Status" + msgid "Input" msgstr "Entrée" @@ -1020,20 +962,3 @@ msgstr "Votre requête a été annulée car vous n'avez plus de jetons disponibl msgid "Your request has been discarded because you already used a token on that submission." msgstr "Votre requête a été annulée car vous avez déjà utilisé un jeton sur cette soumission." -msgid "Invalid file" -msgstr "Fichier invalide" - -msgid "Print job has too many pages" -msgstr "Le document à imprimer est trop long" - -msgid "Sent to printer" -msgstr "Envoyer à l'imprimante" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Exécution tuée (peut être causé par un dépassement des limites mémoire)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "L'évaluation a été tuée par un signal. Cela peut être causé, mais pas uniquement, par un dépassement des limites mémoire. Notez que si cela est le cas, l'utilisation de la mémoire visible dans les détails de la soumission est l'utilisation avant l'allocation mémoire qui a causé le signal." - -#~ msgid "Standard Template Library" -#~ msgstr "Librairie Standard C++ (STL)" diff --git a/cms/locale/he/LC_MESSAGES/cms.po b/cms/locale/he/LC_MESSAGES/cms.po index 571a155c26..e7196f1f2e 100644 --- a/cms/locale/he/LC_MESSAGES/cms.po +++ b/cms/locale/he/LC_MESSAGES/cms.po @@ -7,16 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: Contest Management System 1.5.1\n" "Report-Msgid-Bugs-To: contestms@googlegroups.com\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-11-08 19:51+0000\n" "Last-Translator: Ron Ryvchin \n" -"Language-Team: Hebrew \n" "Language: he\n" +"Language-Team: Hebrew \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Weblate 5.15-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -246,12 +245,6 @@ msgstr "השאלה התקבלה" msgid "Your question has been received, you will be notified when it is answered." msgstr "השאלה שלכם התקבלה, תקבלו התראה כשהיא תענה." -msgid "Print job received" -msgstr "עבודת ההדפסה התקבלה" - -msgid "Your print job has been received." -msgstr "עבודת ההדפסה שלכם התקבלה." - msgid "Submission received" msgstr "ההגשה התקבלה" @@ -294,32 +287,6 @@ msgstr "מורצת..." msgid "Executed" msgstr "הורצה" -msgid "Too many print jobs!" -msgstr "יותר מידי עבודות הדפסה!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "הגעתם למגבלה המירבית של לכל היותר %d עבודות הדפסה." - -msgid "Invalid format!" -msgstr "פורמט לא תקין!" - -msgid "Please select the correct files." -msgstr "אנא בחרו את הקבצים הנכונים." - -msgid "File too big!" -msgstr "הקובץ גדול מידי!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "על כל קובץ להיות באורך של לכל היותר %d בתים." - -msgid "Print job storage failed!" -msgstr "האכסון של עבודת ההדפסה נכשל!" - -msgid "Please try again." -msgstr "אנא נסו שוב." - msgid "Too many submissions!" msgstr "יותר מידי הגשות!" @@ -362,9 +329,15 @@ msgstr "הארכיון שהוגש לא יכל להפתח." msgid "Invalid submission format!" msgstr "פורמט הגשה לא תקין!" +msgid "Please select the correct files." +msgstr "אנא בחרו את הקבצים הנכונים." + msgid "Submission storage failed!" msgstr "אכסון ההגשה נכשל!" +msgid "Please try again." +msgstr "אנא נסו שוב." + msgid "Too many tests!" msgstr "יותר מידי טסטים!" @@ -514,9 +487,6 @@ msgstr "תיעוד" msgid "Testing" msgstr "בדיקה" -msgid "Printing" -msgstr "הדפסה" - msgid "Contest Management System" msgstr "מערכת ה-CMS" @@ -725,50 +695,6 @@ msgstr "" msgid "No" msgstr "" -msgid "Print" -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "" - -msgid "File (text or PDF)" -msgstr "" - -msgid "File (text)" -msgstr "" - -msgid "Submit" -msgstr "" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "" - -msgid "Previous print jobs" -msgstr "" - -msgid "Date and time" -msgstr "" - -msgid "Time" -msgstr "" - -msgid "File name" -msgstr "" - -msgid "Status" -msgstr "" - -msgid "Preparing..." -msgstr "" - -msgid "no print jobs yet" -msgstr "" - msgid "The passwords do not match!" msgstr "" @@ -904,6 +830,9 @@ msgstr "" msgid "loading..." msgstr "" +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "" @@ -930,6 +859,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "" +msgid "Submit" +msgstr "" + msgid "submission.zip" msgstr "" @@ -995,6 +927,15 @@ msgstr "קלט" msgid "Previous tests" msgstr "הטסטים הקודמים" +msgid "Date and time" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Status" +msgstr "" + msgid "Input" msgstr "קלט" @@ -1025,11 +966,3 @@ msgstr "" msgid "Your request has been discarded because you already used a token on that submission." msgstr "" -msgid "Invalid file" -msgstr "קובץ לא תקין" - -msgid "Print job has too many pages" -msgstr "" - -msgid "Sent to printer" -msgstr "נשלח למדפסת" diff --git a/cms/locale/hu/LC_MESSAGES/cms.po b/cms/locale/hu/LC_MESSAGES/cms.po index 68e587a7eb..752155f024 100644 --- a/cms/locale/hu/LC_MESSAGES/cms.po +++ b/cms/locale/hu/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: hu\n" @@ -244,13 +244,6 @@ msgstr "Kérdés elküldve" msgid "Your question has been received, you will be notified when it is answered." msgstr "A kérdésed el lett küldve, értesítve leszel amint megválaszolásra kerül." -#, fuzzy -msgid "Print job received" -msgstr "Teszt elküldve" - -msgid "Your print job has been received." -msgstr "" - msgid "Submission received" msgstr "Beküldés elküldve" @@ -295,34 +288,6 @@ msgstr "Végrehajtás..." msgid "Executed" msgstr "Végrehajtva" -#, fuzzy -msgid "Too many print jobs!" -msgstr "nincsenek nyomtatások" - -#, fuzzy, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Elérted az erre a feladatra engedélyezett beküldések maximális számát (%d)." - -msgid "Invalid format!" -msgstr "Érvénytelen formátum!" - -msgid "Please select the correct files." -msgstr "Kérlek válaszd ki a megfelelő fájlokat." - -msgid "File too big!" -msgstr "Túl nagy fájl!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Minden fájl maximum %d bájt méretű lehet." - -#, fuzzy -msgid "Print job storage failed!" -msgstr "A beküldés mentése nem sikerült!" - -msgid "Please try again." -msgstr "Kérlek próbáld újra." - msgid "Too many submissions!" msgstr "Túl sok beküldés!" @@ -367,9 +332,15 @@ msgstr "A beküldött tömörített állományt nem sikerült megnyitni." msgid "Invalid submission format!" msgstr "Érvénytelen teszt formátum!" +msgid "Please select the correct files." +msgstr "Kérlek válaszd ki a megfelelő fájlokat." + msgid "Submission storage failed!" msgstr "A beküldés mentése nem sikerült!" +msgid "Please try again." +msgstr "Kérlek próbáld újra." + #, fuzzy msgid "Too many tests!" msgstr "Túl sok beküldés!" @@ -521,9 +492,6 @@ msgstr "Dokumentáció" msgid "Testing" msgstr "Tesztelés" -msgid "Printing" -msgstr "Nyomtatás" - msgid "Contest Management System" msgstr "A Contest Management System" @@ -733,50 +701,6 @@ msgstr "Igen" msgid "No" msgstr "Nem" -msgid "Print" -msgstr "Nyomtatás" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "" - -msgid "File (text or PDF)" -msgstr "Fájl (szöveg vagy PDF)" - -msgid "File (text)" -msgstr "Fájl (szöveg)" - -msgid "Submit" -msgstr "Beküldés" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Nem tudsz többet nyomtatni, mert felhasználtad a nyomtatási keretedet." - -msgid "Previous print jobs" -msgstr "Korábbi nyomtatások" - -msgid "Date and time" -msgstr "Dátum és idő" - -msgid "Time" -msgstr "Idő" - -msgid "File name" -msgstr "Fájlnév" - -msgid "Status" -msgstr "Állapot" - -msgid "Preparing..." -msgstr "Előkészítés..." - -msgid "no print jobs yet" -msgstr "nincsenek nyomtatások" - msgid "The passwords do not match!" msgstr "A jelszavak nem egyeznek!" @@ -913,6 +837,9 @@ msgstr "ismeretlen" msgid "loading..." msgstr "betöltés..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) beküldések" @@ -939,6 +866,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Még %(submissions_left)s alkalommal küldhetsz be megoldást." +msgid "Submit" +msgstr "Beküldés" + msgid "submission.zip" msgstr "submission.zip" @@ -1004,6 +934,15 @@ msgstr "bemenet" msgid "Previous tests" msgstr "Korábbi tesztek" +msgid "Date and time" +msgstr "Dátum és idő" + +msgid "Time" +msgstr "Idő" + +msgid "Status" +msgstr "Állapot" + msgid "Input" msgstr "Bemenet" @@ -1034,21 +973,3 @@ msgstr "A kérelmed el lett utasítva, mert nincsenek zsetonjaid." msgid "Your request has been discarded because you already used a token on that submission." msgstr "A kérelmed el lett utasítva, mert már felhasználtál egy zseton erre a beküldésre." -msgid "Invalid file" -msgstr "Érvénytelen fájl" - -msgid "Print job has too many pages" -msgstr "A nyomtatandó dokumentum túl sok oldalt tartalmaz" - -msgid "Sent to printer" -msgstr "Elküldve a nyomtatónak" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Kilőve futás közben (memóriatúllépés is okozhatja)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "A kiértékelés hibakóddal fejeződött be. Többek között ezt a túlzott memóriahasználat okozhatja. Fontos, ha valóban ez okozta a hibát, akkor a beküldés részletes megtekintésekor mutatott memóriahasználat a hibát kiváltó memóriafoglalás előtti állapotot mutatja." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" - diff --git a/cms/locale/it/LC_MESSAGES/cms.po b/cms/locale/it/LC_MESSAGES/cms.po index f4146073fa..78fa3a7a06 100644 --- a/cms/locale/it/LC_MESSAGES/cms.po +++ b/cms/locale/it/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-08-22 12:34+0000\n" "Last-Translator: William Di Luigi \n" -"Language-Team: Italian \n" "Language: it\n" +"Language-Team: Italian \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.13\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -241,12 +241,6 @@ msgstr "Domanda ricevuta" msgid "Your question has been received, you will be notified when it is answered." msgstr "La tua domanda è stata ricevuta, riceverai una notifica quando verrà risposta." -msgid "Print job received" -msgstr "Comando di stampa ricevuto" - -msgid "Your print job has been received." -msgstr "Il comando di stampa è stato ricevuto." - msgid "Submission received" msgstr "Sottoposizione ricevuta" @@ -289,32 +283,6 @@ msgstr "Esecuzione in corso..." msgid "Executed" msgstr "Eseguito" -msgid "Too many print jobs!" -msgstr "Troppe stampe!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Hai raggiunto il limite massimo di %d stampe." - -msgid "Invalid format!" -msgstr "Formato invalido!" - -msgid "Please select the correct files." -msgstr "Seleziona i file corretti." - -msgid "File too big!" -msgstr "File troppo grande!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Ogni file deve essere grande al massimo %d byte." - -msgid "Print job storage failed!" -msgstr "Errore nel salvataggio della stampa!" - -msgid "Please try again." -msgstr "Riprova." - msgid "Too many submissions!" msgstr "Troppe sottoposizioni!" @@ -357,9 +325,15 @@ msgstr "Impossibile aprire l'archivio sottoposto." msgid "Invalid submission format!" msgstr "Formato sottoposizione invalido!" +msgid "Please select the correct files." +msgstr "Seleziona i file corretti." + msgid "Submission storage failed!" msgstr "Errore nel salvataggio della sottoposizione!" +msgid "Please try again." +msgstr "Riprova." + msgid "Too many tests!" msgstr "Troppi test!" @@ -509,9 +483,6 @@ msgstr "Documentazione" msgid "Testing" msgstr "Testing" -msgid "Printing" -msgstr "In stampa" - msgid "Contest Management System" msgstr "Contest Management System" @@ -720,50 +691,6 @@ msgstr "Sì" msgid "No" msgstr "No" -msgid "Print" -msgstr "Stampa" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Puoi stampare altri %(remaining_jobs)s file PDF, ognuno con al massimo %(max_pages)s pagine." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Puoi stampare altri %(remaining_jobs)s file di testo, ognuno con al massimo %(max_pages)s pagine." - -msgid "File (text or PDF)" -msgstr "File (testo o PDF)" - -msgid "File (text)" -msgstr "File (testo)" - -msgid "Submit" -msgstr "Sottoponi" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Non puoi stampare perché la tua quota è esaurita." - -msgid "Previous print jobs" -msgstr "Stampe precedenti" - -msgid "Date and time" -msgstr "Data e ora" - -msgid "Time" -msgstr "Ora" - -msgid "File name" -msgstr "Nome del file" - -msgid "Status" -msgstr "Stato" - -msgid "Preparing..." -msgstr "In preparazione..." - -msgid "no print jobs yet" -msgstr "nessuna stampa ancora" - msgid "The passwords do not match!" msgstr "Le password non combaciano!" @@ -899,6 +826,9 @@ msgstr "sconosciuto" msgid "loading..." msgstr "caricamento in corso..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) sottoposizioni" @@ -925,6 +855,9 @@ msgstr "Puoi inviare un qualsiasi sottinsieme dei file di output in ciascuna sot msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Puoi sottoporre altre %(submissions_left)s soluzioni." +msgid "Submit" +msgstr "Sottoponi" + msgid "submission.zip" msgstr "sottoposizione.zip" @@ -990,6 +923,15 @@ msgstr "input" msgid "Previous tests" msgstr "Test precedenti" +msgid "Date and time" +msgstr "Data e ora" + +msgid "Time" +msgstr "Ora" + +msgid "Status" +msgstr "Stato" + msgid "Input" msgstr "Input" @@ -1020,20 +962,3 @@ msgstr "La tua richiesta è stata rifiutata perché non hai token disponibili." msgid "Your request has been discarded because you already used a token on that submission." msgstr "La tua richiesta è stata rifiutata perché hai già usato un token su questa sottoposizione." -msgid "Invalid file" -msgstr "File non valido" - -msgid "Print job has too many pages" -msgstr "Il job di stampa ha troppe pagine" - -msgid "Sent to printer" -msgstr "Inviato alla stampante" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Esecuzione terminata forzatamente (potrebbe essere causato da una violazione dei limiti di memoria)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "La valutazione è stata interrotta da un segnale. Tra le altre cose, questo potrebbe essere causato dal superamento del limite di memoria. Nota che se questo è il motivo, l'utilizzo della memoria visibile nei dettagli di invio è l'utilizzo appena prima dell'allocazione che ha causato il segnale." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" diff --git a/cms/locale/ja/LC_MESSAGES/cms.po b/cms/locale/ja/LC_MESSAGES/cms.po index 5b380aaa7f..0b8871e22f 100644 --- a/cms/locale/ja/LC_MESSAGES/cms.po +++ b/cms/locale/ja/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: ja\n" @@ -236,12 +236,6 @@ msgstr "質問を受理しました" msgid "Your question has been received, you will be notified when it is answered." msgstr "あなたの質問を受理しました。回答があった場合は通知されます。" -msgid "Print job received" -msgstr "印刷ジョブを受理しました" - -msgid "Your print job has been received." -msgstr "あなたの印刷ジョブを受理しました。" - msgid "Submission received" msgstr "提出を受理しました" @@ -285,32 +279,6 @@ msgstr "実行中…" msgid "Executed" msgstr "実行完了" -msgid "Too many print jobs!" -msgstr "印刷が多すぎます!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "印刷はひとりあたり最大 %d 回までです。" - -msgid "Invalid format!" -msgstr "無効な形式です!" - -msgid "Please select the correct files." -msgstr "正しいファイルを選択してください。" - -msgid "File too big!" -msgstr "ファイルが大きすぎます!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "各ファイルは %d バイト以下である必要があります。" - -msgid "Print job storage failed!" -msgstr "印刷ジョブの保存に失敗しました!" - -msgid "Please try again." -msgstr "もう一度試してください。" - msgid "Too many submissions!" msgstr "提出が多すぎます!" @@ -353,9 +321,15 @@ msgstr "提出されたアーカイブを開くことができませんでした msgid "Invalid submission format!" msgstr "無効な提出形式です!" +msgid "Please select the correct files." +msgstr "正しいファイルを選択してください。" + msgid "Submission storage failed!" msgstr "提出ファイルの保存に失敗しました!" +msgid "Please try again." +msgstr "もう一度試してください。" + msgid "Too many tests!" msgstr "テスト要求が多すぎます!" @@ -508,9 +482,6 @@ msgstr "資料" msgid "Testing" msgstr "テスト" -msgid "Printing" -msgstr "印刷" - msgid "Contest Management System" msgstr "コンテスト管理システム (CMS)" @@ -723,50 +694,6 @@ msgstr "はい" msgid "No" msgstr "いいえ" -msgid "Print" -msgstr "印刷" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "あなたは %(max_pages)s ページ以下のテキストまたはPDFファイルをあと %(remaining_jobs)s 回印刷できます。" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "あなたは %(max_pages)s ページ以下のテキストファイルをあと %(remaining_jobs)s 回印刷できます。" - -msgid "File (text or PDF)" -msgstr "ファイル (テキストまたはPDF)" - -msgid "File (text)" -msgstr "ファイル (テキスト)" - -msgid "Submit" -msgstr "提出" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "あなたに割り当てられた印刷制限の上限に達したため、これ以上印刷することはできません。" - -msgid "Previous print jobs" -msgstr "以前の印刷ジョブ" - -msgid "Date and time" -msgstr "日付と時刻" - -msgid "Time" -msgstr "時刻" - -msgid "File name" -msgstr "ファイル名" - -msgid "Status" -msgstr "状態" - -msgid "Preparing..." -msgstr "準備中…" - -msgid "no print jobs yet" -msgstr "まだ印刷ジョブはありません" - msgid "The passwords do not match!" msgstr "" @@ -909,6 +836,9 @@ msgstr "不明" msgid "loading..." msgstr "読み込み中…" +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) 提出" @@ -939,6 +869,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "あなたはあと %(submissions_left)s 回提出できます。" +msgid "Submit" +msgstr "提出" + msgid "submission.zip" msgstr "submission.zip" @@ -1006,6 +939,15 @@ msgstr "入力" msgid "Previous tests" msgstr "以前のテスト" +msgid "Date and time" +msgstr "日付と時刻" + +msgid "Time" +msgstr "時刻" + +msgid "Status" +msgstr "状態" + msgid "Input" msgstr "入力" @@ -1036,17 +978,3 @@ msgstr "使用可能なトークンがないので、あなたの要求は却下 msgid "Your request has been discarded because you already used a token on that submission." msgstr "この提出には既にトークンが使用されているため、あなたの要求は却下されました。" -#, fuzzy -msgid "Invalid file" -msgstr "無効な形式です!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "印刷ジョブの保存に失敗しました!" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" - diff --git a/cms/locale/ko/LC_MESSAGES/cms.po b/cms/locale/ko/LC_MESSAGES/cms.po index 3003b3bbf1..e378a2290b 100644 --- a/cms/locale/ko/LC_MESSAGES/cms.po +++ b/cms/locale/ko/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: ko\n" @@ -254,12 +254,6 @@ msgstr "질문 전송 완료" msgid "Your question has been received, you will be notified when it is answered." msgstr "질문이 전송되었습니다. 질문에 대한 답변이 작성되면 알림이 수신될 것입니다." -msgid "Print job received" -msgstr "프린트 작업 전송 완료" - -msgid "Your print job has been received." -msgstr "프린트 작업이 성공적으로 전송되었습니다." - msgid "Submission received" msgstr "제출 완료" @@ -302,32 +296,6 @@ msgstr "실행 중..." msgid "Executed" msgstr "실행 완료" -msgid "Too many print jobs!" -msgstr "프린트 불가능!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "최대 프린트 횟수(%d)를 모두 사용했습니다." - -msgid "Invalid format!" -msgstr "파일 오류!" - -msgid "Please select the correct files." -msgstr "정확한 파일들을 선택하세요." - -msgid "File too big!" -msgstr "파일 크기 초과!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "각 파일의 최대 크기는 %d bytes 입니다." - -msgid "Print job storage failed!" -msgstr "프린트 작업 전송 실패!" - -msgid "Please try again." -msgstr "다시 시도해보세요." - msgid "Too many submissions!" msgstr "더 이상 제출할 수 없습니다!" @@ -370,9 +338,15 @@ msgstr "압축 파일을 열 수 없습니다." msgid "Invalid submission format!" msgstr "제출 파일 오류!" +msgid "Please select the correct files." +msgstr "정확한 파일들을 선택하세요." + msgid "Submission storage failed!" msgstr "제출 파일 저장 실패!" +msgid "Please try again." +msgstr "다시 시도해보세요." + msgid "Too many tests!" msgstr "채점 테스트 불가능!" @@ -522,9 +496,6 @@ msgstr "참고자료" msgid "Testing" msgstr "채점 테스트" -msgid "Printing" -msgstr "프린트" - msgid "Contest Management System" msgstr "콘테스트 관리 시스템" @@ -763,50 +734,6 @@ msgstr "예" msgid "No" msgstr "아니오" -msgid "Print" -msgstr "프린트" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "앞으로 (text 또는 PDF) 파일을 %(remaining_jobs)s 번 더 프린트 할 수 있으며, 한 번에 최대 %(max_pages)s 페이지까지 프린트할 수 있습니다." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "앞으로 text 파일을 %(remaining_jobs)s 번 더 프린트 할 수 있으며, 한 번에 최대 %(max_pages)s 페이지까지 프린트할 수 있습니다." - -msgid "File (text or PDF)" -msgstr "(text 또는 PDF) 파일" - -msgid "File (text)" -msgstr "(text) 파일" - -msgid "Submit" -msgstr "제출하기" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "더 이상 프린트 할 수 없습니다. 개인별 프린트 최대 횟수를 모두 사용하였습니다." - -msgid "Previous print jobs" -msgstr "이전 프린트 작업" - -msgid "Date and time" -msgstr "날짜 및 시간" - -msgid "Time" -msgstr "시간" - -msgid "File name" -msgstr "파일명" - -msgid "Status" -msgstr "상태" - -msgid "Preparing..." -msgstr "준비중..." - -msgid "no print jobs yet" -msgstr "프린트 요청 기록 없음" - msgid "The passwords do not match!" msgstr "비밀번호가 일치하지 않습니다!" @@ -941,6 +868,9 @@ msgstr "알 수 없음" msgid "loading..." msgstr "로딩중..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) 채점 제출" @@ -967,6 +897,9 @@ msgstr "한 번의 채점 제출로 모든 부분 채점을 수행할 수 있습 msgid "You can submit %(submissions_left)s more solution(s)." msgstr "앞으로 %(submissions_left)s 번 더 채점을 제출할 수 있습니다." +msgid "Submit" +msgstr "제출하기" + msgid "submission.zip" msgstr "submission.zip" @@ -1032,6 +965,15 @@ msgstr "입력" msgid "Previous tests" msgstr "채점 테스트 기록" +msgid "Date and time" +msgstr "날짜 및 시간" + +msgid "Time" +msgstr "시간" + +msgid "Status" +msgstr "상태" + msgid "Input" msgstr "입력" @@ -1062,24 +1004,3 @@ msgstr "토큰이 없기 때문에, 제출할 수 없습니다." msgid "Your request has been discarded because you already used a token on that submission." msgstr "해당 채점에 대해서 이미 토큰을 사용했기 때문에, 제출할 수 없습니다." -msgid "Invalid file" -msgstr "파일 오류" - -msgid "Print job has too many pages" -msgstr "프린트 할 페이지가 너무 많습니다." - -msgid "Sent to printer" -msgstr "프린터 전송 완료" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "프로그램 실행 중단 (메모리제한 초과 등)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "" -#~ "오류가 발생하여 채점이 중단되었습니다.\n" -#~ " 주로 메모리사용 제한 초과로 발생합니다.\n" -#~ " 메모리제한 초과로 오류가 발생한 경우, 채점 세부사항에 나타나는 메모리사용량은 메모리사용 제한 초과가 발생하기 전의 사용량입니다." - -#~ msgid "Standard Template Library" -#~ msgstr "STL(Standard Template Library)" - diff --git a/cms/locale/lt/LC_MESSAGES/cms.po b/cms/locale/lt/LC_MESSAGES/cms.po index 68293ce957..5114ef4c25 100644 --- a/cms/locale/lt/LC_MESSAGES/cms.po +++ b/cms/locale/lt/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: lt_LT\n" @@ -253,12 +253,6 @@ msgstr "Klausimas gautas" msgid "Your question has been received, you will be notified when it is answered." msgstr "Tavo klausimas gautas. Kai jis bus atsakytas, pasirodys pranešimas." -msgid "Print job received" -msgstr "Spausdinimo darbas gautas" - -msgid "Your print job has been received." -msgstr "Tavo spausdinimo darbas gautas." - msgid "Submission received" msgstr "Sprendimas gautas" @@ -302,32 +296,6 @@ msgstr "Vykdoma..." msgid "Executed" msgstr "Įvykdyta" -msgid "Too many print jobs!" -msgstr "Per daug spausdinimo darbų!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Pasiekei %d spausdinimo darbų limitą." - -msgid "Invalid format!" -msgstr "Netinkamas formatas!" - -msgid "Please select the correct files." -msgstr "Pasirink teisingus failus." - -msgid "File too big!" -msgstr "Failas per didelis!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Kiekvienas failas turi būti ne didesnis nei %d baitų." - -msgid "Print job storage failed!" -msgstr "Nepavyko išsaugoti spausdinimo darbo!" - -msgid "Please try again." -msgstr "Bandyk dar kartą." - msgid "Too many submissions!" msgstr "Per daug pateiktų sprendimų!" @@ -370,9 +338,15 @@ msgstr "Nepavyksta atverti pateikto archyvo." msgid "Invalid submission format!" msgstr "Netinkamas pateikimo formatas!" +msgid "Please select the correct files." +msgstr "Pasirink teisingus failus." + msgid "Submission storage failed!" msgstr "Nepavyko išsaugoti pateikto sprendimo!" +msgid "Please try again." +msgstr "Bandyk dar kartą." + msgid "Too many tests!" msgstr "Per daug testų!" @@ -523,9 +497,6 @@ msgstr "Dokumentacija" msgid "Testing" msgstr "Testavimas" -msgid "Printing" -msgstr "Spausdinimas" - msgid "Contest Management System" msgstr "Varžybų aptarnavimo sistema" @@ -735,50 +706,6 @@ msgstr "Taip" msgid "No" msgstr "Ne" -msgid "Print" -msgstr "Spausdinti" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Gali spausdinti dar %(remaining_jobs)s tekstinių arba PDF failų po ne daugiau nei %(max_pages)s puslapių." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Gali spausdinti dar %(remaining_jobs)s tekstinių failų po ne daugiau nei %(max_pages)s puslapių." - -msgid "File (text or PDF)" -msgstr "Failas (tekstinis arba PDF)" - -msgid "File (text)" -msgstr "Failas (tekstinis)" - -msgid "Submit" -msgstr "Pateikti" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Daugiau spausdinti negali nes jau sunaudojai savo spausdinimo limitą." - -msgid "Previous print jobs" -msgstr "Ankstesni spausdinimo darbai" - -msgid "Date and time" -msgstr "Data ir laikas" - -msgid "Time" -msgstr "Laikas" - -msgid "File name" -msgstr "Failo vardas" - -msgid "Status" -msgstr "Būsena" - -msgid "Preparing..." -msgstr "Paruošiama..." - -msgid "no print jobs yet" -msgstr "spausdinimo darbų dar nėra" - msgid "The passwords do not match!" msgstr "" @@ -924,6 +851,9 @@ msgstr "nežinomas" msgid "loading..." msgstr "kraunama..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) sprendimų pateikimas" @@ -950,6 +880,9 @@ msgstr "Viename sprendime gali pateikti ne visus išvesties failus." msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Gali pateikti dar %(submissions_left)s sprendimą(-ų)." +msgid "Submit" +msgstr "Pateikti" + msgid "submission.zip" msgstr "sprendimas.zip" @@ -1017,6 +950,15 @@ msgstr "įvestis" msgid "Previous tests" msgstr "Ankstesni testai" +msgid "Date and time" +msgstr "Data ir laikas" + +msgid "Time" +msgstr "Laikas" + +msgid "Status" +msgstr "Būsena" + msgid "Input" msgstr "Įvestis" @@ -1047,23 +989,3 @@ msgstr "Tavo užklausa atmesta, kadangi neturi žetonų." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Užklausa buvo atmesta, kadangi šiam sprendimui žetoną jau naudojai." -#, fuzzy -msgid "Invalid file" -msgstr "Netinkamas formatas!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "Nepavyko išsaugoti spausdinimo darbo!" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Vykdymas nutrauktas (tai galėjo įvykti viršijus atminties ribojimus)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Tavo sprendimo vykdymas buvo nutrauktas signalu. Viena iš galimų priežasčių yra atminties ribojimo viršijimas. Sprendimo informacijos lange rodomas panaudotos atminties kiekis yra toks, koks jis buvo prieš signalą sukėlusį veiksmą." - -#~ msgid "Standard Template Library" -#~ msgstr "Standartinė šablonų biblioteka" - diff --git a/cms/locale/lv/LC_MESSAGES/cms.po b/cms/locale/lv/LC_MESSAGES/cms.po index 7442be695f..5dc3912456 100644 --- a/cms/locale/lv/LC_MESSAGES/cms.po +++ b/cms/locale/lv/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: lv_LV\n" @@ -253,12 +253,6 @@ msgstr "Jautājums saņemts" msgid "Your question has been received, you will be notified when it is answered." msgstr "Jūsu jautājums saņemts. Tiklīdz uz to būs atbildēts, jums tiks paziņots." -msgid "Print job received" -msgstr "Drukas uzdevums saņemts" - -msgid "Your print job has been received." -msgstr "Jūsu drukas uzdevums ir saņemts." - msgid "Submission received" msgstr "Iesūtījums saņemts" @@ -301,32 +295,6 @@ msgstr "Izpilda…" msgid "Executed" msgstr "Izpildīts" -msgid "Too many print jobs!" -msgstr "Pārāk daudz drukas uzdevumu!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Jūs esat sasniedzis maksimāli pieļaujamo drukas uzdevumu ierobežojumu (%d)." - -msgid "Invalid format!" -msgstr "Nepareizs formāts!" - -msgid "Please select the correct files." -msgstr "Lūdzu, izvēlieties pareizās datnes." - -msgid "File too big!" -msgstr "Datne pārāk liela!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Katras datnes lielums nedrīkst pārsniegt %d baitus." - -msgid "Print job storage failed!" -msgstr "Drukas uzdevumu glabātuvē ir radusies kļūme!" - -msgid "Please try again." -msgstr "Lūdzu, mēģiniet vēlreiz." - msgid "Too many submissions!" msgstr "Pārāk daudz iesūtījumu!" @@ -369,9 +337,15 @@ msgstr "Iesūtīto arhīvu nav iespējams atvērt." msgid "Invalid submission format!" msgstr "Nepareizs iesūtījuma formāts!" +msgid "Please select the correct files." +msgstr "Lūdzu, izvēlieties pareizās datnes." + msgid "Submission storage failed!" msgstr "Iesūtījumu glabātuvē ir radusies kļūme!" +msgid "Please try again." +msgstr "Lūdzu, mēģiniet vēlreiz." + msgid "Too many tests!" msgstr "Par daudz testu!" @@ -521,9 +495,6 @@ msgstr "Dokumentācija" msgid "Testing" msgstr "Testēšana" -msgid "Printing" -msgstr "Drukāšana" - msgid "Contest Management System" msgstr "Sacensību vadīšanas sistēma" @@ -732,50 +703,6 @@ msgstr "Jā" msgid "No" msgstr "Nē" -msgid "Print" -msgstr "Drukāt" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Jūs drīkstat izdrukāt vēl %(remaining_jobs)s teksta vai PDF datnes (katru ne garāku par %(max_pages)s lappusēm)." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Jūs drīkstat izdrukāt vēl %(remaining_jobs)s teksta datnes (katru ne garāku par %(max_pages)s lappusēm)." - -msgid "File (text or PDF)" -msgstr "Datne (teksta vai PDF)" - -msgid "File (text)" -msgstr "Datne (teksta)" - -msgid "Submit" -msgstr "Iesūtīt" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Jūs vairs neko nevarat izdrukāt, jo jau esat izlietojuši atļauto lappušu skaitu." - -msgid "Previous print jobs" -msgstr "Iepriekšējie drukas uzdevumi" - -msgid "Date and time" -msgstr "Datums un laiks" - -msgid "Time" -msgstr "Laiks" - -msgid "File name" -msgstr "Datnes nosaukums" - -msgid "Status" -msgstr "Statuss" - -msgid "Preparing..." -msgstr "Sagatavojas…" - -msgid "no print jobs yet" -msgstr "pagaidām nav drukas uzdevumu" - msgid "The passwords do not match!" msgstr "Paroles nesakrīt!" @@ -912,6 +839,9 @@ msgstr "nezināms" msgid "loading..." msgstr "ielādē…" +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) iesūtījumi" @@ -938,6 +868,9 @@ msgstr "Jūs varat iesūtīt jebkuru izvadu apakškopu vienā iesūtījumā." msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Jūs varat iesūtīt vēl %(submissions_left)s iesūtījumu(s)." +msgid "Submit" +msgstr "Iesūtīt" + msgid "submission.zip" msgstr "iesūtījums.zip" @@ -1003,6 +936,15 @@ msgstr "ievaddati" msgid "Previous tests" msgstr "Iepriekšējie testi" +msgid "Date and time" +msgstr "Datums un laiks" + +msgid "Time" +msgstr "Laiks" + +msgid "Status" +msgstr "Statuss" + msgid "Input" msgstr "Ievaddati" @@ -1033,21 +975,3 @@ msgstr "Jūsu pieprasījums ir noraidīts, jo jums nav žetonu." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Jūsu pieprasījums ir noraidīts, jo jūs jau izmantojāt žetonu šim iesūtījumam." -msgid "Invalid file" -msgstr "Nepareiza datne" - -msgid "Print job has too many pages" -msgstr "Drukas uzdevumam ir pārāk daudz lappušu" - -msgid "Sent to printer" -msgstr "Nosūtīts drukāšanai" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Izpilde pārtraukta (to var būt izraisījusi atmiņas ierobežojumu neievērošana)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Izpilde tika pārtraukta ar signālu. Citu iemeslu starpā, to varētu būt izraisījusi atmiņas ierobežojuma pārsniegšana. Šajā gadījumā atmiņas patēriņš, kas ir redzams iesūtījuma detaļās, atbilst stāvoklim pirms signālu izraisījušās atmiņas iedalīšanas." - -#~ msgid "Standard Template Library" -#~ msgstr "Standarta šablonu bibliotēka (STL)" - diff --git a/cms/locale/nl/LC_MESSAGES/cms.po b/cms/locale/nl/LC_MESSAGES/cms.po index e9569fbd2b..2167f74246 100644 --- a/cms/locale/nl/LC_MESSAGES/cms.po +++ b/cms/locale/nl/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: nl_NL\n" @@ -244,12 +244,6 @@ msgstr "Vraag ontvangen" msgid "Your question has been received, you will be notified when it is answered." msgstr "Je vraag werd ontvangen, je zal worden verwittigd wanneer ze beantwoord is." -msgid "Print job received" -msgstr "Printopdracht ontvangen" - -msgid "Your print job has been received." -msgstr "Je printopdracht werd ontvangen." - msgid "Submission received" msgstr "Inzending ontvangen" @@ -292,32 +286,6 @@ msgstr "Bezig met uitvoeren..." msgid "Executed" msgstr "Uitgevoerd" -msgid "Too many print jobs!" -msgstr "Te veel printopdrachten!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Je hebt de maximumlimiet van %d printopdrachten bereikt." - -msgid "Invalid format!" -msgstr "Ongeldig formaat!" - -msgid "Please select the correct files." -msgstr "Selecteer de correcte bestanden aub." - -msgid "File too big!" -msgstr "Bestand te groot!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Elk bestand mag maximaal %d bytes groot zijn." - -msgid "Print job storage failed!" -msgstr "Kon de printopdracht niet registreren!" - -msgid "Please try again." -msgstr "Probeer opnieuw aub." - msgid "Too many submissions!" msgstr "Te veel inzendingen!" @@ -360,9 +328,15 @@ msgstr "Het ingediende archief kon niet worden geopend." msgid "Invalid submission format!" msgstr "Ongeldig formaat voor inzending!" +msgid "Please select the correct files." +msgstr "Selecteer de correcte bestanden aub." + msgid "Submission storage failed!" msgstr "Opslag van inzending mislukt!" +msgid "Please try again." +msgstr "Probeer opnieuw aub." + msgid "Too many tests!" msgstr "Te veel tests!" @@ -512,9 +486,6 @@ msgstr "Documentatie" msgid "Testing" msgstr "Testen" -msgid "Printing" -msgstr "Afdrukken" - msgid "Contest Management System" msgstr "Wedstrijdbeheersysteem" @@ -723,50 +694,6 @@ msgstr "Ja" msgid "No" msgstr "Nee" -msgid "Print" -msgstr "Afdrukken" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Je kunt nog maximaal %(remaining_jobs)s tekst- of PDF-bestanden afdrukken van elk maximaal %(max_pages)s pagina's." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Je kunt nog %(remaining_jobs)s tekstbestanden afdrukken van elk maximaal %(max_pages)s pagina's." - -msgid "File (text or PDF)" -msgstr "Bestand (tekst of PDF)" - -msgid "File (text)" -msgstr "Bestand (tekst)" - -msgid "Submit" -msgstr "Indienen" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Je kunt niets meer afdrukken omdat je je printquota al opgebruikt hebt." - -msgid "Previous print jobs" -msgstr "Vorige printopdrachten" - -msgid "Date and time" -msgstr "Datum en tijd" - -msgid "Time" -msgstr "Tijd" - -msgid "File name" -msgstr "Bestandsnaam" - -msgid "Status" -msgstr "Status" - -msgid "Preparing..." -msgstr "Voorbereiden..." - -msgid "no print jobs yet" -msgstr "nog geen printopdrachten" - msgid "The passwords do not match!" msgstr "De paswoorden zijn niet gelijk!" @@ -902,6 +829,9 @@ msgstr "onbekend" msgid "loading..." msgstr "laden..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) inzendingen" @@ -928,6 +858,9 @@ msgstr "Je mag eender welke subsets van outputs in een enkele inzending sturen." msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Je kunt nog %(submissions_left)s keer indienen." +msgid "Submit" +msgstr "Indienen" + msgid "submission.zip" msgstr "inzending.zip" @@ -993,6 +926,15 @@ msgstr "input" msgid "Previous tests" msgstr "Vorige tests" +msgid "Date and time" +msgstr "Datum en tijd" + +msgid "Time" +msgstr "Tijd" + +msgid "Status" +msgstr "Status" + msgid "Input" msgstr "Input" @@ -1023,21 +965,3 @@ msgstr "Je aanvraag werd afgewezen omdat je geen tokens beschikbaar hebt." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Je aanvraag werd afgewezen omdat je al een token gebruikte voor deze inzending." -msgid "Invalid file" -msgstr "Ongeldig bestand" - -msgid "Print job has too many pages" -msgstr "Printopdracht heeft de veel paginas" - -msgid "Sent to printer" -msgstr "Naar de printer verzonden" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Uitvoering beëindigt (kan veroorzaakt woorden voor geheugenlimieten te overschrijden)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "De uitvoering werd beëindigd door een signaal. Dit kan onder andere veroorzaakt worden door het overschrijden van de geheugenlimiet. Als dit de reden is, is het geheugengebruik, voor de allocatie die het signaal veroorzaakte, zichtbaar in de details van de inzending." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" - diff --git a/cms/locale/ro/LC_MESSAGES/cms.po b/cms/locale/ro/LC_MESSAGES/cms.po index fdba4d870f..f3c404d870 100644 --- a/cms/locale/ro/LC_MESSAGES/cms.po +++ b/cms/locale/ro/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-09-20 17:01+0000\n" "Last-Translator: Pintilie Sebastian Marian \n" -"Language-Team: Romanian \n" "Language: ro\n" +"Language-Team: Romanian \n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n" -"X-Generator: Weblate 5.14-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -250,12 +250,6 @@ msgstr "Intrebarea a fost primita" msgid "Your question has been received, you will be notified when it is answered." msgstr "Intrebarea ta a fost receptionata, veti fi notificat cand i se va raspunde." -msgid "Print job received" -msgstr "Sarcina de tiparire receptionata" - -msgid "Your print job has been received." -msgstr "Sarcina ta de tiparire a fost receptionata." - msgid "Submission received" msgstr "Expediere cu succes" @@ -298,32 +292,6 @@ msgstr "Se executa..." msgid "Executed" msgstr "Executat" -msgid "Too many print jobs!" -msgstr "Prea multe sarcini de tiparire!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Ati atins limita maxima de %d sarcini de tiparire." - -msgid "Invalid format!" -msgstr "Format invalid!" - -msgid "Please select the correct files." -msgstr "Va rugam alegeti fisierele corecte." - -msgid "File too big!" -msgstr "Fisierul este prea mare!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Niciun fisier nu poate depasi lungimea de %d octeti." - -msgid "Print job storage failed!" -msgstr "Stocarea sarcinii de tiparire a esuat!" - -msgid "Please try again." -msgstr "Va rugam sa mai incercati o data." - msgid "Too many submissions!" msgstr "Prea multe expedieri!" @@ -366,9 +334,15 @@ msgstr "Archiva expediata nu a putut fi deschisa." msgid "Invalid submission format!" msgstr "Formatul expedierii nu este valid!" +msgid "Please select the correct files." +msgstr "Va rugam alegeti fisierele corecte." + msgid "Submission storage failed!" msgstr "Gresala de stocare a fisierului!" +msgid "Please try again." +msgstr "Va rugam sa mai incercati o data." + msgid "Too many tests!" msgstr "Prea multe teste!" @@ -518,9 +492,6 @@ msgstr "Documente" msgid "Testing" msgstr "Testare" -msgid "Printing" -msgstr "Tiparire" - msgid "Contest Management System" msgstr "Contest Management System" @@ -729,50 +700,6 @@ msgstr "Da" msgid "No" msgstr "Nu" -msgid "Print" -msgstr "Tipar" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Mai puteti tipari maxim %(remaining_jobs)s de fisiere text sau PDF ce nu depasesc %(max_pages)s de pagini individual." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Mai puteti tipari %(remaining_jobs)s de fisiere text ce nu depasesc %(max_pages)s de pagini." - -msgid "File (text or PDF)" -msgstr "Fisier (text sau PDF)" - -msgid "File (text)" -msgstr "Fisier (text)" - -msgid "Submit" -msgstr "Expediaza" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Nu mai puteti tipari nimic deoarece ati intrecut cota maxima de tiparire." - -msgid "Previous print jobs" -msgstr "Sarcini de tiparire precedente" - -msgid "Date and time" -msgstr "Data si timpul" - -msgid "Time" -msgstr "Timp" - -msgid "File name" -msgstr "Denumire fisier" - -msgid "Status" -msgstr "Statut" - -msgid "Preparing..." -msgstr "Pregatire..." - -msgid "no print jobs yet" -msgstr "nicio sarcina de tiparire inca" - msgid "The passwords do not match!" msgstr "Parolele nu corespund!" @@ -909,6 +836,9 @@ msgstr "necunoscut" msgid "loading..." msgstr "se incarca..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) expedieri" @@ -935,6 +865,9 @@ msgstr "Puteti expedia orice subset al iesirilor intr-o singura expediere." msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Mai puteti trimite %(submissions_left)s solutii." +msgid "Submit" +msgstr "Expediaza" + msgid "submission.zip" msgstr "expediere.zip" @@ -1000,6 +933,15 @@ msgstr "date de intrare" msgid "Previous tests" msgstr "Teste precedente" +msgid "Date and time" +msgstr "Data si timpul" + +msgid "Time" +msgstr "Timp" + +msgid "Status" +msgstr "Statut" + msgid "Input" msgstr "Date de intrare" @@ -1030,14 +972,3 @@ msgstr "Cererea voastra a fost refuzata deoarece nu mai aveti jetoane ramase." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Cererea voastra a fost refuzata deoarece deja ati folosit un jeton pe acea expediere." -msgid "Invalid file" -msgstr "Fisierul nu este valid" - -msgid "Print job has too many pages" -msgstr "Sarcina de tiparire contine prea multe pagini" - -msgid "Sent to printer" -msgstr "Trimis imprimantei" - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" diff --git a/cms/locale/ru/LC_MESSAGES/cms.po b/cms/locale/ru/LC_MESSAGES/cms.po index 54fa04b797..86ca51da9c 100644 --- a/cms/locale/ru/LC_MESSAGES/cms.po +++ b/cms/locale/ru/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: ru_RU\n" @@ -254,12 +254,6 @@ msgstr "Вопрос получен" msgid "Your question has been received, you will be notified when it is answered." msgstr "Ваш вопрос принят, вы будете осведомлены, когда на него ответят." -msgid "Print job received" -msgstr "Запрос на печать принят" - -msgid "Your print job has been received." -msgstr "Ваш запрос был получен." - msgid "Submission received" msgstr "Посылка принята" @@ -303,32 +297,6 @@ msgstr "Выполнение..." msgid "Executed" msgstr "Выполнено" -msgid "Too many print jobs!" -msgstr "Слишком много запросов на печать!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Вы достигли лимита запросов на печать по этой задаче, равного %d запросов." - -msgid "Invalid format!" -msgstr "Неправильный формат!" - -msgid "Please select the correct files." -msgstr "Пожалуйста, выберите правильные файлы." - -msgid "File too big!" -msgstr "Файл слишком большой!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Размер каждого файла не должен превышать %d байт." - -msgid "Print job storage failed!" -msgstr "Не удалось сохранить запрос на печать!" - -msgid "Please try again." -msgstr "Пожалуйста, попробуйте еще раз." - msgid "Too many submissions!" msgstr "Слишком много посылок!" @@ -371,9 +339,15 @@ msgstr "Отправленный архив не открывается." msgid "Invalid submission format!" msgstr "Неправильный формат посылки!" +msgid "Please select the correct files." +msgstr "Пожалуйста, выберите правильные файлы." + msgid "Submission storage failed!" msgstr "Не удалось сохранить посылку!" +msgid "Please try again." +msgstr "Пожалуйста, попробуйте еще раз." + msgid "Too many tests!" msgstr "Слишком много тестов!" @@ -524,9 +498,6 @@ msgstr "Документация" msgid "Testing" msgstr "Тестирование" -msgid "Printing" -msgstr "Печать" - msgid "Contest Management System" msgstr "Contest Management System" @@ -736,50 +707,6 @@ msgstr "Да" msgid "No" msgstr "Нет" -msgid "Print" -msgstr "Печать" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "" - -msgid "File (text or PDF)" -msgstr "Файл (текстовый или PDF)" - -msgid "File (text)" -msgstr "Файл (текстовый)" - -msgid "Submit" -msgstr "Отправить" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Вы не можете ничего печатать, так как израсходовали свой запас запросов на печать." - -msgid "Previous print jobs" -msgstr "Предыдущие запросы на печать" - -msgid "Date and time" -msgstr "Дата и время" - -msgid "Time" -msgstr "Время" - -msgid "File name" -msgstr "Имя файла" - -msgid "Status" -msgstr "Статус" - -msgid "Preparing..." -msgstr "Подготовка..." - -msgid "no print jobs yet" -msgstr "нет запросов на печать" - msgid "The passwords do not match!" msgstr "" @@ -924,6 +851,9 @@ msgstr "неизвестный" msgid "loading..." msgstr "загрузка..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) посылки" @@ -954,6 +884,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Вы можете послать еще %(submissions_left)s решений." +msgid "Submit" +msgstr "Отправить" + msgid "submission.zip" msgstr "submission.zip" @@ -1021,6 +954,15 @@ msgstr "входные данные" msgid "Previous tests" msgstr "Предыдущие тесты" +msgid "Date and time" +msgstr "Дата и время" + +msgid "Time" +msgstr "Время" + +msgid "Status" +msgstr "Статус" + msgid "Input" msgstr "Входные данные" @@ -1051,17 +993,3 @@ msgstr "Ваш запрос отклонен, потому что у вас не msgid "Your request has been discarded because you already used a token on that submission." msgstr "Ваш запрос был отклонен, потому что вы уже использовали токен на этой посылке." -#, fuzzy -msgid "Invalid file" -msgstr "Неправильный формат!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "Не удалось сохранить запрос на печать!" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" - diff --git a/cms/locale/sl/LC_MESSAGES/cms.po b/cms/locale/sl/LC_MESSAGES/cms.po index 21d56031f6..6ae4d9297d 100644 --- a/cms/locale/sl/LC_MESSAGES/cms.po +++ b/cms/locale/sl/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: sl_SI\n" @@ -263,12 +263,6 @@ msgstr "Vprašanje je bilo prejeto" msgid "Your question has been received, you will be notified when it is answered." msgstr "Tvoje vprašanje je bilo prejeto. O odgovoru boš obveščen(a)" -msgid "Print job received" -msgstr "Tiskalniško opravilo je sprejeto" - -msgid "Your print job has been received." -msgstr "Tvoje tiskalniško opravilo je bilo sprejeto." - msgid "Submission received" msgstr "Oddaja je sprejeta" @@ -312,32 +306,6 @@ msgstr "Izvajam..." msgid "Executed" msgstr "Izvedeno" -msgid "Too many print jobs!" -msgstr "Preveč tiskalniških opravil!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Dosegel(la) si največje število %d tiskanj." - -msgid "Invalid format!" -msgstr "Napačen format!" - -msgid "Please select the correct files." -msgstr "Prosim izberi pravilne datoteke." - -msgid "File too big!" -msgstr "Datoteka je prevelika!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Vsaka datoteka je lahko velika največ %d bajtov." - -msgid "Print job storage failed!" -msgstr "Shranjevanje tiska ni uspelo!" - -msgid "Please try again." -msgstr "Prosim poizkusi znova." - msgid "Too many submissions!" msgstr "Preveč oddaj!" @@ -380,9 +348,15 @@ msgstr "Ne morem odpreti oddanega arhiva." msgid "Invalid submission format!" msgstr "Napačna oblika oddaje!" +msgid "Please select the correct files." +msgstr "Prosim izberi pravilne datoteke." + msgid "Submission storage failed!" msgstr "Shranjevanje oddaje neuspešno!" +msgid "Please try again." +msgstr "Prosim poizkusi znova." + msgid "Too many tests!" msgstr "Preveč preizkusov!" @@ -535,9 +509,6 @@ msgstr "Dokumentacija" msgid "Testing" msgstr "Preizkušanje" -msgid "Printing" -msgstr "Tiskanje" - msgid "Contest Management System" msgstr "Contest Management System" @@ -750,50 +721,6 @@ msgstr "Da" msgid "No" msgstr "Ne" -msgid "Print" -msgstr "Tiskaj" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Natisneš lahko še %(remaining_jobs)s besedilnih ali PDF datotek z največ %(max_pages)s stranmi." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Natisneš lahko še %(remaining_jobs)s besedilnih datotek z največ %(max_pages)s stranmi." - -msgid "File (text or PDF)" -msgstr "Datoteka (besedilna ali PDF)" - -msgid "File (text)" -msgstr "Datoteka (besedilna)" - -msgid "Submit" -msgstr "Oddaj" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Ne moreš več tiskati, ker si porabil(a) svojo kvoto tiskanja." - -msgid "Previous print jobs" -msgstr "Prejšnja tiskalniška opravila" - -msgid "Date and time" -msgstr "Datum in čas" - -msgid "Time" -msgstr "Čas" - -msgid "File name" -msgstr "Ime datoteke" - -msgid "Status" -msgstr "Stanje" - -msgid "Preparing..." -msgstr "Pripravljam..." - -msgid "no print jobs yet" -msgstr "ni tiskalniških opravil" - msgid "The passwords do not match!" msgstr "" @@ -939,6 +866,9 @@ msgstr "" msgid "loading..." msgstr "nalagam..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) oddaje" @@ -969,6 +899,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Oddaš lahko še %(submissions_left)s rešitev." +msgid "Submit" +msgstr "Oddaj" + msgid "submission.zip" msgstr "oddaja.zip" @@ -1036,6 +969,15 @@ msgstr "vhod" msgid "Previous tests" msgstr "Predhodni preizkusi" +msgid "Date and time" +msgstr "Datum in čas" + +msgid "Time" +msgstr "Čas" + +msgid "Status" +msgstr "Stanje" + msgid "Input" msgstr "Vhod" @@ -1066,17 +1008,3 @@ msgstr "Tvoja zahteva je bila zavžena, ker nimaš na voljo žetonov." msgid "Your request has been discarded because you already used a token on that submission." msgstr "Tvoja zahteva je bila zavržena, ker si pri tej oddaji že uporabil žeton." -#, fuzzy -msgid "Invalid file" -msgstr "Napačen format!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "Shranjevanje tiska ni uspelo!" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Standard Template Library" -#~ msgstr "Standardna predložna knjižnica" - diff --git a/cms/locale/th/LC_MESSAGES/cms.po b/cms/locale/th/LC_MESSAGES/cms.po index bb10748f71..f6349df1bf 100644 --- a/cms/locale/th/LC_MESSAGES/cms.po +++ b/cms/locale/th/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-08-16 15:59+0000\n" "Last-Translator: Pasit Sangprachathanarak \n" -"Language-Team: Thai \n" "Language: th\n" +"Language-Team: Thai \n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.13\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -223,7 +223,6 @@ msgid "You can use no more than one %(type_s)s in total." msgid_plural "You can use no more than %(max_number)d %(type_pl)s in total." msgstr[0] "คุณไม่สามารถใช้%(type_pl)sทั้งหมดได้เกิน%(max_number)d" -#, python-format msgid "You have no limitations on how you use them." msgstr "ไม่มีข้อจำกันในการใช้มัน" @@ -233,12 +232,6 @@ msgstr "ได้รับคำถามแล้ว" msgid "Your question has been received, you will be notified when it is answered." msgstr "ได้รับคำถามของคุณแล้ว, เราจะแจ้งเตือนคุณเมื่อได้รับคำตอบ" -msgid "Print job received" -msgstr "สั่งพิมพ์แล้ว" - -msgid "Your print job has been received." -msgstr "คุณได้สั่งพิมพ์แล้ว" - msgid "Submission received" msgstr "ได้รับการส่งแล้ว" @@ -281,32 +274,6 @@ msgstr "กำลังรัน..." msgid "Executed" msgstr "รันแล้ว" -msgid "Too many print jobs!" -msgstr "สั่งพิมพ์เยอะเกินไป!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "คุณได้ถึงขีดจำกัดการพิมพ์ครบ %d ครั้งแล้ว" - -msgid "Invalid format!" -msgstr "รูปแบบไม่ถูกต้อง!" - -msgid "Please select the correct files." -msgstr "กรุณาเลือกไฟล์ที่ถูกต้อง" - -msgid "File too big!" -msgstr "ไฟล์ใหญ่เกินไป!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "ไฟล์ใหญ่ได้สูงสุด %d ไบต์" - -msgid "Print job storage failed!" -msgstr "งานพิมพ์จัดเก็บล้มเหลว!" - -msgid "Please try again." -msgstr "กรุณาลองใหม่อีกครั้ง" - msgid "Too many submissions!" msgstr "การส่งมากเกินไป!" @@ -349,9 +316,15 @@ msgstr "ไฟล์ archive เปิดไม่ได้" msgid "Invalid submission format!" msgstr "การส่งไม่ตรงตามรูปแบบที่กำหนดไว้" +msgid "Please select the correct files." +msgstr "กรุณาเลือกไฟล์ที่ถูกต้อง" + msgid "Submission storage failed!" msgstr "การส่งจัดเก็บล้มเหลว!" +msgid "Please try again." +msgstr "กรุณาลองใหม่อีกครั้ง" + msgid "Too many tests!" msgstr "ชุดทดสอบเยอะเกินไป!" @@ -501,9 +474,6 @@ msgstr "เอกสาร" msgid "Testing" msgstr "การทดสอบ" -msgid "Printing" -msgstr "การพิมพ์" - msgid "Contest Management System" msgstr "Contest Management System" @@ -712,50 +682,6 @@ msgstr "ใช่" msgid "No" msgstr "ไม่" -msgid "Print" -msgstr "พิมพ์" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "คุณสามารถพิมพ์ไฟล์ข้อความหรือ PDF ได้อีก %(remaining_jobs)s รอบ หรือพิมพ์ PDF ได้ไม่เกิน %(max_pages)s หน้าต่อครั้ง" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "คุณสามารถพิมพ์ไฟล์ข้อความได้อีก %(remaining_jobs)s รอบ โดยพิมพ์ได้ไม่เกิน %(max_pages)s หน้าต่อครั้ง" - -msgid "File (text or PDF)" -msgstr "ไฟล์ (ข้อความ หรือ PDF)" - -msgid "File (text)" -msgstr "ไฟล์ (ข้อความ)" - -msgid "Submit" -msgstr "ส่ง" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "ไม่สามารถพิมพ์ได้ เพราะคุณพิมพ์เกินโควตาแล้ว" - -msgid "Previous print jobs" -msgstr "งานการพิมพ์ก่อนหน้า" - -msgid "Date and time" -msgstr "วันที่และเวลา" - -msgid "Time" -msgstr "เวลา" - -msgid "File name" -msgstr "ชื่อไฟล์" - -msgid "Status" -msgstr "สถานะ" - -msgid "Preparing..." -msgstr "กำลังเตรียม..." - -msgid "no print jobs yet" -msgstr "ไม่มีงานการพิมพ์" - msgid "The passwords do not match!" msgstr "รหัสผ่านไม่ตรงกัน!" @@ -890,6 +816,9 @@ msgstr "ไม่ทราบ" msgid "loading..." msgstr "กำลังโหลด..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "การส่งโปรแกรมของโจทย์ %(name)s (%(short_name)s)" @@ -916,6 +845,9 @@ msgstr "คุณอาจส่ง output เพียงบางส่วน msgid "You can submit %(submissions_left)s more solution(s)." msgstr "คุณสามารถส่งคำตอบได้อีกไม่เกิน %(submissions_left)s ครั้ง" +msgid "Submit" +msgstr "ส่ง" + msgid "submission.zip" msgstr "submission.zip" @@ -981,6 +913,15 @@ msgstr "ข้อมูลนำเข้า" msgid "Previous tests" msgstr "ชุดทดสอบก่อนหน้า" +msgid "Date and time" +msgstr "วันที่และเวลา" + +msgid "Time" +msgstr "เวลา" + +msgid "Status" +msgstr "สถานะ" + msgid "Input" msgstr "ข้อมูลนำเข้า" @@ -1011,20 +952,3 @@ msgstr "คำขอของคุณถูกยกเลิกเนื่อ msgid "Your request has been discarded because you already used a token on that submission." msgstr "คำขอของคุณถูกยกเลิกเนื่องจากคุณใช้โทเค็นในการส่งครั้งนั้นไปแล้ว" -msgid "Invalid file" -msgstr "ไฟล์ไม่ถูกต้อง" - -msgid "Print job has too many pages" -msgstr "งานพิมพ์มีจำนวนหน้ามากเกินไป" - -msgid "Sent to printer" -msgstr "ส่งไปยังเครื่องพิมพ์" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "การคอมไพล์ถูกหยุด (อาจเป็นเพราะใช้หน่วยความจำมากเกินไป)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "การส่งของคุณถูกหยุด ซึ่งอาจเป็นเพราะใช้หน่วยความจำมากเกินไป ซึ่งหากใช้หน่วยความจำมากเกินไปจริง โปรแกรมจะแสดงผลขนาดหน่วยความจำก่อนที่จะเกินหน่วยความจำสูงสุด" - -#~ msgid "Standard Template Library" -#~ msgstr "ไลบรารีเทมเพลตพื้นฐาน" diff --git a/cms/locale/uk/LC_MESSAGES/cms.po b/cms/locale/uk/LC_MESSAGES/cms.po index 0b097b3cee..9da9c901b8 100644 --- a/cms/locale/uk/LC_MESSAGES/cms.po +++ b/cms/locale/uk/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-08-24 21:04+0000\n" "Last-Translator: Максим Горпиніч \n" -"Language-Team: Ukrainian \n" "Language: uk\n" +"Language-Team: Ukrainian \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.13\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -250,12 +250,6 @@ msgstr "Питання отримано" msgid "Your question has been received, you will be notified when it is answered." msgstr "Ваше запитання отримано, Ви отримаєте сповіщення, коли на нього дадуть відповідь." -msgid "Print job received" -msgstr "Отримано завдання для друку" - -msgid "Your print job has been received." -msgstr "Ваше завдання для друку отримано." - msgid "Submission received" msgstr "Спробу отримано" @@ -298,32 +292,6 @@ msgstr "Виконання..." msgid "Executed" msgstr "Виконано" -msgid "Too many print jobs!" -msgstr "Забагато завдань для друку!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Ви досягли максимальної кількості завдань для друку (%d)." - -msgid "Invalid format!" -msgstr "Недійсний формат!" - -msgid "Please select the correct files." -msgstr "Виберіть правильні файли." - -msgid "File too big!" -msgstr "Файл завеликий!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Довжина кожного файлу не повинна перевищувати %d байтів." - -msgid "Print job storage failed!" -msgstr "Не вдалося зберегти завдання для друку!" - -msgid "Please try again." -msgstr "Будь ласка спробуйте ще раз." - msgid "Too many submissions!" msgstr "Забагато спроб!" @@ -366,9 +334,15 @@ msgstr "Не вдалося відкрити надісланий архів." msgid "Invalid submission format!" msgstr "Недійсний формат спроби!" +msgid "Please select the correct files." +msgstr "Виберіть правильні файли." + msgid "Submission storage failed!" msgstr "Помилка зберігання даних!" +msgid "Please try again." +msgstr "Будь ласка спробуйте ще раз." + msgid "Too many tests!" msgstr "Забагато тестів!" @@ -518,9 +492,6 @@ msgstr "Документація" msgid "Testing" msgstr "Тестування" -msgid "Printing" -msgstr "Друк" - msgid "Contest Management System" msgstr "Contest Management System" @@ -729,50 +700,6 @@ msgstr "Так" msgid "No" msgstr "Ні" -msgid "Print" -msgstr "Роздрукувати" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Ви можете надрукувати ще %(remaining_jobs)s текстових або PDF-файлів обсягом до %(max_pages)s сторінок кожен." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Ви можете надрукувати ще %(remaining_jobs)s текстових файлів обсягом до %(max_pages)s сторінок кожен." - -msgid "File (text or PDF)" -msgstr "Файл (текст або PDF)" - -msgid "File (text)" -msgstr "Файл (текст)" - -msgid "Submit" -msgstr "Надіслати" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Ви більше не можете нічого друкувати, оскільки ви використали свою квоту друку." - -msgid "Previous print jobs" -msgstr "Попередні завдання для друку" - -msgid "Date and time" -msgstr "Дата і час" - -msgid "Time" -msgstr "Час" - -msgid "File name" -msgstr "Ім'я файлу" - -msgid "Status" -msgstr "Статус" - -msgid "Preparing..." -msgstr "Підготовка..." - -msgid "no print jobs yet" -msgstr "ще немає завдань для друку" - msgid "The passwords do not match!" msgstr "Паролі не збігаються!" @@ -909,6 +836,9 @@ msgstr "невідомий" msgid "loading..." msgstr "завантаження..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) спроби" @@ -935,6 +865,9 @@ msgstr "Ви можете надіслати будь-яку підмножин msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Ви можете надіслати ще %(submissions_left)s рішення(ів)." +msgid "Submit" +msgstr "Надіслати" + msgid "submission.zip" msgstr "submission.zip" @@ -1000,6 +933,15 @@ msgstr "вхідні дані" msgid "Previous tests" msgstr "Попередні тести" +msgid "Date and time" +msgstr "Дата і час" + +msgid "Time" +msgstr "Час" + +msgid "Status" +msgstr "Статус" + msgid "Input" msgstr "Вхідні дані" @@ -1030,20 +972,3 @@ msgstr "Ваш запит відхилено, оскільки у вас нем msgid "Your request has been discarded because you already used a token on that submission." msgstr "Ваш запит відхилено, оскільки ви вже використали токен для цієї спроби." -msgid "Invalid file" -msgstr "Неправильний файл" - -msgid "Print job has too many pages" -msgstr "Завдання для друку містить забагато сторінок" - -msgid "Sent to printer" -msgstr "Відправлено на принтер" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Виконання припинено (може бути викликано порушенням обмежень пам’яті)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Оцінювання було знищено сигналом. Серед іншого це може бути спричинено перевищенням ліміту пам’яті. Зауважте, що якщо це причина, використання пам’яті, видиме в деталях спроби, є використанням до розподілу, який спричинив сигнал." - -#~ msgid "Standard Template Library" -#~ msgstr "Стандартна бібліотека шаблонів" diff --git a/cms/locale/vi/LC_MESSAGES/cms.po b/cms/locale/vi/LC_MESSAGES/cms.po index eb591687ba..db608e7a82 100644 --- a/cms/locale/vi/LC_MESSAGES/cms.po +++ b/cms/locale/vi/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: vi\n" @@ -235,12 +235,6 @@ msgstr "Đã nhận được câu hỏi" msgid "Your question has been received, you will be notified when it is answered." msgstr "Câu hỏi của bạn đã được tiếp nhận, bạn sẽ được thông báo khi có câu trả lời." -msgid "Print job received" -msgstr "Đã nhận được yêu cầu in" - -msgid "Your print job has been received." -msgstr "Yêu cầu in của bạn đã được tiếp nhận." - msgid "Submission received" msgstr "Đã nhận được bài nộp" @@ -284,32 +278,6 @@ msgstr "Đang chạy..." msgid "Executed" msgstr "Đã chạy xong" -msgid "Too many print jobs!" -msgstr "Quá nhiều yêu cầu in!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "Bạn đã sử dụng hết giới hạn %d yêu cầu in." - -msgid "Invalid format!" -msgstr "Định dạng không hợp lệ!" - -msgid "Please select the correct files." -msgstr "Hãy chọn đúng file." - -msgid "File too big!" -msgstr "File quá lớn!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "Mỗi file có kích thước tối đa là %d byte." - -msgid "Print job storage failed!" -msgstr "Không thể lưu trữ yêu cầu in!" - -msgid "Please try again." -msgstr "Hãy thử lại." - msgid "Too many submissions!" msgstr "Quá nhiều bài nộp!" @@ -352,9 +320,15 @@ msgstr "Không mở được file nén đã nộp." msgid "Invalid submission format!" msgstr "Định dạng bài nộp không hợp lệ!" +msgid "Please select the correct files." +msgstr "Hãy chọn đúng file." + msgid "Submission storage failed!" msgstr "Không thể lưu trữ lại bài nộp!" +msgid "Please try again." +msgstr "Hãy thử lại." + msgid "Too many tests!" msgstr "Quá nhiều lần chạy thử!" @@ -504,9 +478,6 @@ msgstr "Tài liệu" msgid "Testing" msgstr "Kiểm thử" -msgid "Printing" -msgstr "In" - msgid "Contest Management System" msgstr "Contest Management System" @@ -716,50 +687,6 @@ msgstr "Có" msgid "No" msgstr "Không" -msgid "Print" -msgstr "In" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "Bạn có thể in thêm tối đa %(remaining_jobs)s file văn bản hoặc PDF, mỗi file dài không quá %(max_pages)s trang." - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "Bạn có thể in thêm tối đa %(remaining_jobs)s file văn bản, mỗi file dài không quá %(max_pages)s trang." - -msgid "File (text or PDF)" -msgstr "File (văn bản hoặc PDF)" - -msgid "File (text)" -msgstr "File (văn bản)" - -msgid "Submit" -msgstr "Nộp" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "Bạn đã sử dụng hết số lần in cho phép." - -msgid "Previous print jobs" -msgstr "Các yêu cầu in trước" - -msgid "Date and time" -msgstr "Thời điểm" - -msgid "Time" -msgstr "Thời gian" - -msgid "File name" -msgstr "Tên file" - -msgid "Status" -msgstr "Tình trạng" - -msgid "Preparing..." -msgstr "Đang chuẩn bị..." - -msgid "no print jobs yet" -msgstr "chưa có yêu cầu in nào" - msgid "The passwords do not match!" msgstr "Mật khẩu không khớp!" @@ -905,6 +832,9 @@ msgstr "không xác định" msgid "loading..." msgstr "đang tải..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "Bài nộp %(name)s (%(short_name)s)" @@ -931,6 +861,9 @@ msgstr "Bạn có thể nộp file kết quả bất kể số lượng và th msgid "You can submit %(submissions_left)s more solution(s)." msgstr "Bạn còn %(submissions_left)s lần nộp bài." +msgid "Submit" +msgstr "Nộp" + msgid "submission.zip" msgstr "submission.zip" @@ -998,6 +931,15 @@ msgstr "dữ liệu vào" msgid "Previous tests" msgstr "Các yêu cầu chạy thử trước" +msgid "Date and time" +msgstr "Thời điểm" + +msgid "Time" +msgstr "Thời gian" + +msgid "Status" +msgstr "Tình trạng" + msgid "Input" msgstr "Dữ liệu vào" @@ -1028,23 +970,3 @@ msgstr "Yêu cầu sử dụng token không được chấp nhận do bạn khô msgid "Your request has been discarded because you already used a token on that submission." msgstr "Yêu cầu sử dụng token không được chấp nhận do bạn đã sử dụng token cho bài nộp đó." -#, fuzzy -msgid "Invalid file" -msgstr "Định dạng không hợp lệ!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "Không thể lưu trữ yêu cầu in!" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Execution killed (could be triggered by violating memory limits)" -#~ msgstr "Chương trình bị ngắt (có thể do vượt quá giới hạn bộ nhớ)" - -#~ msgid "The evaluation was killed by a signal. Among other things, this might be caused by exceeding the memory limit. Note that if this is the reason, the memory usage visible in the submission details is the usage before the allocation that caused the signal." -#~ msgstr "Quá trình chấm bài bị ngắt. Lỗi này xảy ra có thể do sử dụng quá giới hạn bộ nhớ. Trong trường hợp đó, lượng bộ nhớ sử dụng được hiển thị là lượng bộ nhớ ngay trước thao tác cấp phát gây ra tín hiệu ngắt." - -#~ msgid "Standard Template Library" -#~ msgstr "Standard Template Library" - diff --git a/cms/locale/zh_CN/LC_MESSAGES/cms.po b/cms/locale/zh_CN/LC_MESSAGES/cms.po index 4c131ee453..28ec1eee3d 100644 --- a/cms/locale/zh_CN/LC_MESSAGES/cms.po +++ b/cms/locale/zh_CN/LC_MESSAGES/cms.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-06-06 09:35+0000\n" "Last-Translator: FULL NAME \n" "Language: zh_CN\n" @@ -248,12 +248,6 @@ msgstr "已送出询问" msgid "Your question has been received, you will be notified when it is answered." msgstr "您的询问已成功送出, 待此询问得到回复后将会通知您。" -msgid "Print job received" -msgstr "已收到测试" - -msgid "Your print job has been received." -msgstr "已收到打印请求。" - msgid "Submission received" msgstr "已收到本次提交" @@ -297,32 +291,6 @@ msgstr "执行中..." msgid "Executed" msgstr "已评测" -msgid "Too many print jobs!" -msgstr "打印次数过多!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "在本题中, 您最多可以进行 %d 次测试。" - -msgid "Invalid format!" -msgstr "非法的测试文件格式!" - -msgid "Please select the correct files." -msgstr "请选择正确的文件。" - -msgid "File too big!" -msgstr "测试文件过大!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "每个文件长度不得超过 %d 字节。" - -msgid "Print job storage failed!" -msgstr "打印文件储存失败。" - -msgid "Please try again." -msgstr "请再试一次。" - msgid "Too many submissions!" msgstr "提交次数超出限制!" @@ -365,9 +333,15 @@ msgstr "封装文件无法正常开启。" msgid "Invalid submission format!" msgstr "文件格式错误!" +msgid "Please select the correct files." +msgstr "请选择正确的文件。" + msgid "Submission storage failed!" msgstr "提交文件存取错误!" +msgid "Please try again." +msgstr "请再试一次。" + msgid "Too many tests!" msgstr "测试次数过多!" @@ -517,9 +491,6 @@ msgstr "参考资料" msgid "Testing" msgstr "线上测试" -msgid "Printing" -msgstr "打印中" - msgid "Contest Management System" msgstr "本系统" @@ -732,50 +703,6 @@ msgstr "是" msgid "No" msgstr "否" -msgid "Print" -msgstr "打印" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "您可以再打印 %(remaining_jobs)s 个文本文件或者 PDF,每个文件最多 %(max_pages)s 页。" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "您可以打印 %(remaining_jobs)s 个文本文件,每个文件最多 %(max_pages)s 页。" - -msgid "File (text or PDF)" -msgstr "文件(文字或 PDF)" - -msgid "File (text)" -msgstr "文件(文字)" - -msgid "Submit" -msgstr "提交" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "由于您的打印次数已用完,您不能再打印了。" - -msgid "Previous print jobs" -msgstr "测试记录" - -msgid "Date and time" -msgstr "日期与时间" - -msgid "Time" -msgstr "时间" - -msgid "File name" -msgstr "文件名" - -msgid "Status" -msgstr "状态" - -msgid "Preparing..." -msgstr "评分中..." - -msgid "no print jobs yet" -msgstr "尚未测试" - msgid "The passwords do not match!" msgstr "" @@ -920,6 +847,9 @@ msgstr "" msgid "loading..." msgstr "评分中..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) 评测页面" @@ -950,6 +880,9 @@ msgstr "" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "您可以再上传 %(submissions_left)s 个解答。" +msgid "Submit" +msgstr "提交" + msgid "submission.zip" msgstr "submission.zip" @@ -1017,6 +950,15 @@ msgstr "输入" msgid "Previous tests" msgstr "测试记录" +msgid "Date and time" +msgstr "日期与时间" + +msgid "Time" +msgstr "时间" + +msgid "Status" +msgstr "状态" + msgid "Input" msgstr "输入" @@ -1047,17 +989,3 @@ msgstr "由于无可用 Token,使用已拒绝。" msgid "Your request has been discarded because you already used a token on that submission." msgstr "由于本次提交已使用过 Token,使用已拒绝。" -#, fuzzy -msgid "Invalid file" -msgstr "非法的测试文件格式!" - -#, fuzzy -msgid "Print job has too many pages" -msgstr "打印文件储存失败。" - -msgid "Sent to printer" -msgstr "" - -#~ msgid "Standard Template Library" -#~ msgstr "STL 标准样板函数库" - diff --git a/cms/locale/zh_TW/LC_MESSAGES/cms.po b/cms/locale/zh_TW/LC_MESSAGES/cms.po index 06c0ead35b..91470b0c73 100644 --- a/cms/locale/zh_TW/LC_MESSAGES/cms.po +++ b/cms/locale/zh_TW/LC_MESSAGES/cms.po @@ -1,17 +1,17 @@ + msgid "" msgstr "" -"Project-Id-Version: VERSION\n" +"Project-Id-Version: VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2025-08-16 14:52+0300\n" +"POT-Creation-Date: 2025-11-09 23:31+0100\n" "PO-Revision-Date: 2025-09-06 19:19+0000\n" "Last-Translator: Omelet <2qbingxuan@gmail.com>\n" -"Language-Team: Chinese (Traditional Han script) \n" "Language: zh_TW\n" +"Language-Team: Chinese (Traditional Han script) \n" +"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.14-dev\n" "Generated-By: Babel 2.12.1\n" msgid "N/A" @@ -232,12 +232,6 @@ msgstr "提問已送出" msgid "Your question has been received, you will be notified when it is answered." msgstr "您的提問已成功送出,得到回覆後將會通知您。" -msgid "Print job received" -msgstr "列印請求已送出" - -msgid "Your print job has been received." -msgstr "您的列印請求已成功送出。" - msgid "Submission received" msgstr "已收到本次傳送" @@ -280,32 +274,6 @@ msgstr "執行中…" msgid "Executed" msgstr "執行完畢" -msgid "Too many print jobs!" -msgstr "列印次數超出限制!" - -#, python-format -msgid "You have reached the maximum limit of at most %d print jobs." -msgstr "您的列印次數已達上限(%d 次)。" - -msgid "Invalid format!" -msgstr "格式錯誤!" - -msgid "Please select the correct files." -msgstr "請選擇正確的檔案。" - -msgid "File too big!" -msgstr "檔案過大!" - -#, python-format -msgid "Each file must be at most %d bytes long." -msgstr "個別檔案容量不得超過 %d bytes。" - -msgid "Print job storage failed!" -msgstr "無法儲存列印請求!" - -msgid "Please try again." -msgstr "請再試一次。" - msgid "Too many submissions!" msgstr "傳送次數超出限制!" @@ -348,9 +316,15 @@ msgstr "上傳的壓縮檔無法正常開啟。" msgid "Invalid submission format!" msgstr "檔案格式錯誤!" +msgid "Please select the correct files." +msgstr "請選擇正確的檔案。" + msgid "Submission storage failed!" msgstr "無法儲存傳送的檔案!" +msgid "Please try again." +msgstr "請再試一次。" + msgid "Too many tests!" msgstr "測試次數超出限制!" @@ -500,9 +474,6 @@ msgstr "參考資料" msgid "Testing" msgstr "線上測試" -msgid "Printing" -msgstr "檔案列印" - msgid "Contest Management System" msgstr "本系統" @@ -711,50 +682,6 @@ msgstr "是" msgid "No" msgstr "否" -msgid "Print" -msgstr "提出列印請求" - -#, python-format -msgid "You can print %(remaining_jobs)s more text or PDF files of up to %(max_pages)s pages each." -msgstr "您至多可以再列印 %(remaining_jobs)s 次 %(max_pages)s 頁以下的純文字或 PDF 檔案。" - -#, python-format -msgid "You can print %(remaining_jobs)s more text files of up to %(max_pages)s pages each." -msgstr "您至多可以再列印 %(remaining_jobs)s 次 %(max_pages)s 頁以下的純文字檔案。" - -msgid "File (text or PDF)" -msgstr "檔案(純文字或 PDF)" - -msgid "File (text)" -msgstr "檔案(純文字)" - -msgid "Submit" -msgstr "傳送" - -msgid "You cannot print anything any more as you have used up your printing quota." -msgstr "您已達到列印次數上限,無法再列印。" - -msgid "Previous print jobs" -msgstr "列印記錄" - -msgid "Date and time" -msgstr "日期與時間" - -msgid "Time" -msgstr "時間" - -msgid "File name" -msgstr "檔案名稱" - -msgid "Status" -msgstr "狀態" - -msgid "Preparing..." -msgstr "列印準備中..." - -msgid "no print jobs yet" -msgstr "尚無列印紀錄" - msgid "The passwords do not match!" msgstr "密碼與確認密碼不符!" @@ -889,6 +816,9 @@ msgstr "不明" msgid "loading..." msgstr "載入中..." +msgid "Error loading details, please refresh the page." +msgstr "" + #, python-format msgid "%(name)s (%(short_name)s) submissions" msgstr "%(name)s (%(short_name)s) 上傳頁面" @@ -915,6 +845,9 @@ msgstr "在一次作答中,您可以只上傳部份的輸出檔。" msgid "You can submit %(submissions_left)s more solution(s)." msgstr "您還可以上傳 %(submissions_left)s 次作答。" +msgid "Submit" +msgstr "傳送" + msgid "submission.zip" msgstr "submission.zip" @@ -980,6 +913,15 @@ msgstr "輸入" msgid "Previous tests" msgstr "測試記錄" +msgid "Date and time" +msgstr "日期與時間" + +msgid "Time" +msgstr "時間" + +msgid "Status" +msgstr "狀態" + msgid "Input" msgstr "輸入" @@ -1010,14 +952,3 @@ msgstr "未持有可用 Token。" msgid "Your request has been discarded because you already used a token on that submission." msgstr "該次傳送已使用過 Token。" -msgid "Invalid file" -msgstr "無效的檔案" - -msgid "Print job has too many pages" -msgstr "超出列印頁數上限" - -msgid "Sent to printer" -msgstr "傳送至印表機" - -#~ msgid "Standard Template Library" -#~ msgstr "STL 標準樣板函數庫" diff --git a/cms/server/contest/handlers/__init__.py b/cms/server/contest/handlers/__init__.py index 997831c037..fef7f6c1a6 100644 --- a/cms/server/contest/handlers/__init__.py +++ b/cms/server/contest/handlers/__init__.py @@ -47,7 +47,6 @@ RegistrationHandler, \ StartHandler, \ NotificationsHandler, \ - PrintingHandler, \ DocumentationHandler from .communication import \ CommunicationHandler, \ @@ -68,7 +67,6 @@ (r"/register", RegistrationHandler), (r"/start", StartHandler), (r"/notifications", NotificationsHandler), - (r"/printing", PrintingHandler), (r"/documentation", DocumentationHandler), # Tasks diff --git a/cms/server/contest/handlers/contest.py b/cms/server/contest/handlers/contest.py index be0b55b74e..7ea473d2c9 100644 --- a/cms/server/contest/handlers/contest.py +++ b/cms/server/contest/handlers/contest.py @@ -50,7 +50,7 @@ import tornado.web from cms import config, TOKEN_MODE_MIXED -from cms.db import Contest, Submission, Task, UserTest, contest +from cms.db import Contest, Submission, Task, UserTest from cms.locale import filter_language_codes from cms.server import FileHandlerMixin from cms.server.contest.authentication import authenticate_request @@ -203,7 +203,6 @@ def render_params(self): ret["phase"] = self.contest.phase(self.timestamp) - ret["printing_enabled"] = (config.printing.printer is not None) ret["questions_enabled"] = self.contest.allow_questions ret["testing_enabled"] = self.contest.allow_user_tests diff --git a/cms/server/contest/handlers/main.py b/cms/server/contest/handlers/main.py index d9af80f961..93402e2b0c 100644 --- a/cms/server/contest/handlers/main.py +++ b/cms/server/contest/handlers/main.py @@ -48,14 +48,12 @@ from sqlalchemy.orm.exc import NoResultFound from cms import config -from cms.db import PrintJob, User, Participation, Team +from cms.db import User, Participation, Team from cms.grading.languagemanager import get_language from cms.grading.steps import COMPILATION_MESSAGES, EVALUATION_MESSAGES from cms.server import multi_contest from cms.server.contest.authentication import validate_login from cms.server.contest.communication import get_communications -from cms.server.contest.printing import accept_print_job, PrintingDisabled, \ - UnacceptablePrintJob from cmscommon.crypto import hash_password, validate_password from cmscommon.datetime import make_datetime, make_timestamp from .contest import ContestHandler, api_login_required @@ -322,55 +320,6 @@ def get(self): self.write(json.dumps(res)) -class PrintingHandler(ContestHandler): - """Serve the interface to print and handle submitted print jobs. - - """ - @tornado.web.authenticated - @actual_phase_required(0) - @multi_contest - def get(self): - participation: Participation = self.current_user - - if not self.r_params["printing_enabled"]: - raise tornado.web.HTTPError(404) - - printjobs: list[PrintJob] = ( - self.sql_session.query(PrintJob) - .filter(PrintJob.participation == participation) - .all() - ) - - remaining_jobs = max(0, config.printing.max_jobs_per_user - len(printjobs)) - - self.render("printing.html", - printjobs=printjobs, - remaining_jobs=remaining_jobs, - max_pages=config.printing.max_pages_per_job, - pdf_printing_allowed=config.printing.pdf_printing_allowed, - **self.r_params) - - @tornado.web.authenticated - @actual_phase_required(0) - @multi_contest - def post(self): - try: - printjob = accept_print_job( - self.sql_session, self.service.file_cacher, self.current_user, - self.timestamp, self.request.files) - self.sql_session.commit() - except PrintingDisabled: - raise tornado.web.HTTPError(404) - except UnacceptablePrintJob as e: - self.notify_error(e.subject, e.text, e.text_params) - else: - self.service.printing_service.new_printjob(printjob_id=printjob.id) - self.notify_success(N_("Print job received"), - N_("Your print job has been received.")) - - self.redirect(self.contest_url("printing")) - - class DocumentationHandler(ContestHandler): """Displays the instruction (compilation lines, documentation, ...) of the contest. diff --git a/cms/server/contest/printing.py b/cms/server/contest/printing.py deleted file mode 100644 index 0334365831..0000000000 --- a/cms/server/contest/printing.py +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/env python3 - -# Contest Management System - http://cms-dev.github.io/ -# Copyright © 2010-2014 Giovanni Mascellani -# Copyright © 2010-2015 Stefano Maggiolo -# Copyright © 2010-2012 Matteo Boscariol -# Copyright © 2012-2018 Luca Wehrstedt -# Copyright © 2013 Bernard Blackham -# Copyright © 2014 Artem Iglikov -# Copyright © 2014 Fabian Gundlach <320pointsguy@gmail.com> -# Copyright © 2015-2016 William Di Luigi -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -from datetime import datetime -import logging - -from sqlalchemy import func -import typing - -if typing.TYPE_CHECKING: - from tornado.httputil import HTTPFile - -from cms import config -from cms.db import PrintJob -from cms.db.filecacher import FileCacher -from cms.db.session import Session -from cms.db.user import Participation - - -logger = logging.getLogger(__name__) - - -# Dummy function to mark translatable strings. -def N_(msgid): - return msgid - - -class PrintingDisabled(Exception): - """Raised when printing is disabled.""" - - pass - - -class UnacceptablePrintJob(Exception): - """Raised when a printout request can't be accepted.""" - - def __init__(self, subject: str, text: str, text_params: object | None = None): - super().__init__(subject, text, text_params) - self.subject = subject - self.text = text - self.text_params = text_params - - -def accept_print_job( - sql_session: Session, - file_cacher: FileCacher, - participation: Participation, - timestamp: datetime, - files: dict[str, list["HTTPFile"]], -) -> PrintJob: - """Add a print job to the database. - - This function receives the values that a contestant provides to CWS - when they request a printout, it validates them and, if there are - no issues, stores the files and creates a PrintJob in the database. - - sql_session: the SQLAlchemy database session to use. - file_cacher: the file cacher to store the files. - participation: the contestant who sent the request. - timestamp: the moment at which the request occurred. - files: the provided files, as a dictionary - whose keys are the field names and whose values are lists of - Tornado HTTPFile objects (each with a filename and a body - attribute). The expected format consists of one item, whose key - is "file" and whose value is a singleton list. - - return: the PrintJob that was added to the database. - - raise (PrintingDisabled): if printing is disabled because there are - no printers available). - raise (UnacceptablePrintJob): if some of the requirements that have - to be met in order for the request to be accepted don't hold. - - """ - - if config.printing.printer is None: - raise PrintingDisabled() - - old_count = sql_session.query(func.count(PrintJob.id)) \ - .filter(PrintJob.participation == participation).scalar() - if config.printing.max_jobs_per_user <= old_count: - raise UnacceptablePrintJob( - N_("Too many print jobs!"), - N_("You have reached the maximum limit of at most %d print jobs."), - config.printing.max_jobs_per_user) - - if len(files) != 1 or "file" not in files or len(files["file"]) != 1: - raise UnacceptablePrintJob( - N_("Invalid format!"), - N_("Please select the correct files.")) - - filename = files["file"][0].filename - data = files["file"][0].body - - if len(data) > config.printing.max_print_length: - raise UnacceptablePrintJob( - N_("File too big!"), - N_("Each file must be at most %d bytes long."), - config.printing.max_print_length) - - try: - digest = file_cacher.put_file_content( - data, "Print job sent by %s at %s." % (participation.user.username, - timestamp)) - - except Exception as error: - logger.error("Storage failed! %s", error) - raise UnacceptablePrintJob( - N_("Print job storage failed!"), - N_("Please try again.")) - - # The file is stored, ready to submit! - logger.info("File stored for print job sent by %s", - participation.user.username) - - printjob = PrintJob(timestamp=timestamp, - participation=participation, - filename=filename, - digest=digest) - sql_session.add(printjob) - - return printjob diff --git a/cms/server/contest/server.py b/cms/server/contest/server.py index 172cad4267..8ddbd8078d 100644 --- a/cms/server/contest/server.py +++ b/cms/server/contest/server.py @@ -128,11 +128,6 @@ def __init__(self, shard: int, contest_id: int | None = None): ServiceCoord("ProxyService", 0), must_be_present=ranking_enabled) - printing_enabled = config.printing.printer is not None - self.printing_service = self.connect_to( - ServiceCoord("PrintingService", 0), - must_be_present=printing_enabled) - def add_notification( self, username: str, timestamp: datetime, subject: str, text: str, level: str ): diff --git a/cms/server/contest/static/cws_style.css b/cms/server/contest/static/cws_style.css index b5786b443f..d896a00f7a 100644 --- a/cms/server/contest/static/cws_style.css +++ b/cms/server/contest/static/cws_style.css @@ -1016,13 +1016,6 @@ td.token_rules p:last-child { width: auto; } -/** Printing interface */ - -#printjob_list tbody tr td.no_printjobs { - font-style: italic; - text-align: center !important; -} - /* Contest selection page */ .contest-list { diff --git a/cms/server/contest/templates/contest.html b/cms/server/contest/templates/contest.html index 677b6affd1..ba514771ba 100644 --- a/cms/server/contest/templates/contest.html +++ b/cms/server/contest/templates/contest.html @@ -200,11 +200,6 @@

{% trans %}Testing{% endtrans %} {% endif %} - {% if printing_enabled %} - - {% trans %}Printing{% endtrans %} - - {% endif %} {% endif %} diff --git a/cms/server/contest/templates/printing.html b/cms/server/contest/templates/printing.html deleted file mode 100644 index 80f7498df2..0000000000 --- a/cms/server/contest/templates/printing.html +++ /dev/null @@ -1,94 +0,0 @@ -{% extends "contest.html" %} - -{% set page = "printing" %} - -{% block core %} - - -
- - - -

{% trans %}Print{% endtrans %}

- -{% if remaining_jobs > 0 %} - {% if pdf_printing_allowed %} - {% trans remaining_jobs=remaining_jobs, max_pages=max_pages %}You can print {{ remaining_jobs }} more text or PDF files of up to {{ max_pages }} pages each.{% endtrans %} - {% else %} - {% trans remaining_jobs=remaining_jobs, max_pages=max_pages %}You can print {{ remaining_jobs }} more text files of up to {{ max_pages }} pages each.{% endtrans %} - {% endif %} - -
-
- {{ xsrf_form_html|safe }} -
-
- -
- -
-
-
-
- - -
-
-
-
-
-{% else %} - {% trans %}You cannot print anything any more as you have used up your printing quota.{% endtrans %} -{% endif %} - - -

{% trans %}Previous print jobs{% endtrans %}

- -{% set show_date = not printjobs|map(attribute="timestamp")|all("today") %} - - - - -{% if show_date %} - -{% else %} - -{% endif %} - - - - - -{% if show_date %} - -{% else %} - -{% endif %} - - - - - -{% for p in printjobs|sort(attribute="timestamp")|reverse %} - - {% if show_date %} - - {% else %} - - {% endif %} - - - -{% else %} - - - -{% endfor %} - -
{% trans %}Date and time{% endtrans %}{% trans %}Time{% endtrans %}{% trans %}File name{% endtrans %}{% trans %}Status{% endtrans %}
{{ p.timestamp|format_datetime }}{{ p.timestamp|format_time }}{{ p.filename }}{% if p.done %}{{ p.status|format_status_text }}{% else %}{% trans %}Preparing...{% endtrans %}{% endif %}
{% trans %}no print jobs yet{% endtrans %}
- -
- -{% endblock core %} diff --git a/cms/service/PrintingService.py b/cms/service/PrintingService.py deleted file mode 100644 index 73ed924a7b..0000000000 --- a/cms/service/PrintingService.py +++ /dev/null @@ -1,259 +0,0 @@ -#!/usr/bin/env python3 - -# Contest Management System - http://cms-dev.github.io/ -# Copyright © 2014 Fabian Gundlach <320pointsguy@gmail.com> -# Copyright © 2014 Stefano Maggiolo -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -"""A service that prints files. - -""" - -import contextlib -import cups -import logging -import os -import subprocess -import tempfile - -from PyPDF2 import PdfFileReader, PdfFileMerger -from jinja2 import PackageLoader - -from cms import config, rmtree -from cms.db import SessionGen, PrintJob -from cms.db.filecacher import FileCacher -from cms.io import Executor, QueueItem, TriggeredService, rpc_method -from cms.io.priorityqueue import QueueEntry -from cms.server.jinja2_toolbox import GLOBAL_ENVIRONMENT -from cmscommon.commands import pretty_print_cmdline -from cmscommon.datetime import get_timezone, utc -from cmscommon.tex import escape_tex_normal, escape_tex_tt - - -logger = logging.getLogger(__name__) - - -# Dummy function to mark translatable string. -def N_(message): - return message - - -class PrintingOperation(QueueItem): - - def __init__(self, printjob_id: int): - self.printjob_id = printjob_id - - def __str__(self): - return "printing job %d" % self.printjob_id - - def to_dict(self): - return {"printjob_id": self.printjob_id} - - -class PrintingExecutor(Executor[PrintingOperation]): - def __init__(self, file_cacher): - super().__init__() - - self.file_cacher = file_cacher - self.jinja2_env = GLOBAL_ENVIRONMENT.overlay( - loader=PackageLoader("cms.service", "templates/printing"), - autoescape=False) - self.jinja2_env.filters["escape_tex_normal"] = escape_tex_normal - self.jinja2_env.filters["escape_tex_tt"] = escape_tex_tt - - def execute(self, entry: QueueEntry[PrintingOperation]): - """Print a print job. - - This is the core of PrintingService. - - entry: the entry containing the operation to perform. - - """ - # TODO: automatically re-enqueue in case of a recoverable - # error. - printjob_id = entry.item.printjob_id - with SessionGen() as session: - # Obtain print job. - printjob = PrintJob.get_from_id(printjob_id, session) - if printjob is None: - raise ValueError("Print job %d not found in the database." % - printjob_id) - user = printjob.participation.user - contest = printjob.participation.contest - timezone = get_timezone(user, contest) - timestr = str(printjob.timestamp.replace(tzinfo=utc) - .astimezone(timezone).replace(tzinfo=None)) - filename = printjob.filename - - # Check if it's ready to be printed. - if printjob.done: - logger.info("Print job %d was already sent to the printer.", - printjob_id) - - directory = tempfile.mkdtemp(dir=config.global_.temp_dir) - logger.info("Preparing print job in directory %s", directory) - - # Take the base name just to be sure. - relname = "source_" + os.path.basename(filename) - source = os.path.join(directory, relname) - with open(source, "wb") as file_: - self.file_cacher.get_file_to_fobj(printjob.digest, file_) - - if filename.endswith(".pdf") and config.printing.pdf_printing_allowed: - source_pdf = source - else: - # Convert text to ps. - source_ps = os.path.join(directory, "source.ps") - cmd = ["a2ps", - source, - "--delegate=no", - "--output=" + source_ps, - "--medium=%s" % config.printing.paper_size.capitalize(), - "--portrait", - "--columns=1", - "--rows=1", - "--pages=1-%d" % (config.printing.max_pages_per_job), - "--header=", - "--footer=", - "--left-footer=", - "--right-footer=", - "--center-title=" + filename, - "--left-title=" + timestr] - try: - subprocess.check_call(cmd, cwd=directory) - except subprocess.CalledProcessError as e: - raise Exception("Failed to convert text file to ps") from e - - if not os.path.exists(source_ps): - logger.warning("Unable to convert from text to ps.") - printjob.done = True - printjob.status = [N_("Invalid file")] - session.commit() - rmtree(directory) - return - - # Convert ps to pdf - source_pdf = os.path.join(directory, "source.pdf") - cmd = ["ps2pdf", - "-sPAPERSIZE=%s" % config.printing.paper_size.lower(), - source_ps] - try: - subprocess.check_call(cmd, cwd=directory) - except subprocess.CalledProcessError as e: - raise Exception("Failed to convert ps file to pdf") from e - - # Find out number of pages - with open(source_pdf, "rb") as file_: - pdfreader = PdfFileReader(file_) - page_count = pdfreader.getNumPages() - - logger.info("Preparing %d page(s) (plus the title page)", - page_count) - - if page_count > config.printing.max_pages_per_job: - logger.info("Too many pages.") - printjob.done = True - printjob.status = [N_("Print job has too many pages")] - session.commit() - rmtree(directory) - return - - # Add the title page - title_tex = os.path.join(directory, "title_page.tex") - title_pdf = os.path.join(directory, "title_page.pdf") - with open(title_tex, "w") as f: - f.write(self.jinja2_env.get_template("title_page.tex") - .render(user=user, filename=filename, - timestr=timestr, - page_count=page_count, - paper_size=config.printing.paper_size)) - cmd = ["pdflatex", - "-interaction", - "nonstopmode", - title_tex] - try: - subprocess.check_call(cmd, cwd=directory) - except subprocess.CalledProcessError as e: - raise Exception("Failed to create title page") from e - - with contextlib.closing(PdfFileMerger()) as pdfmerger: - pdfmerger.append(title_pdf) - pdfmerger.append(source_pdf) - result = os.path.join(directory, "document.pdf") - pdfmerger.write(result) - - try: - printer_connection = cups.Connection() - printer_connection.printFile( - config.printing.printer, result, - "Printout %d" % printjob_id, {}) - except cups.IPPError as error: - logger.error("Unable to print: `%s'.", error) - else: - printjob.done = True - printjob.status = [N_("Sent to printer")] - session.commit() - finally: - rmtree(directory) - - -class PrintingService(TriggeredService[PrintingOperation, PrintingExecutor]): - """A service that prepares print jobs and sends them to a printer. - - """ - - def __init__(self, shard: int): - """Initialize the PrintingService. - - """ - super().__init__(shard) - - self.file_cacher = FileCacher(self) - - self.add_executor(PrintingExecutor(self.file_cacher)) - self.start_sweeper(61.0) - - if config.printing.printer is None: - logger.info("Printing is disabled, so the PrintingService is " - "idle.") - return - - def _missing_operations(self): - """Enqueue unprinted print jobs. - - Obtain a list of all the print jobs in the database, check - each of them to see if it's still unprinted and if so enqueue - them. - - """ - counter = 0 - with SessionGen() as session: - for printjob in session.query(PrintJob) \ - .filter(PrintJob.done.is_(False)).all(): - self.enqueue(PrintingOperation(printjob.id), - timestamp=printjob.timestamp) - counter += 1 - return counter - - @rpc_method - def new_printjob(self, printjob_id: int): - """Schedule the given print job. - - Put it in the queue to have it printed, sooner or later. - - printjob_id: the id of the printjob. - - """ - self.enqueue(PrintingOperation(printjob_id)) diff --git a/cms/service/Worker.py b/cms/service/Worker.py index 1e18bf31ee..e2b1d4a29a 100644 --- a/cms/service/Worker.py +++ b/cms/service/Worker.py @@ -89,8 +89,7 @@ def precache_files(self, contest_id: int): files = enumerate_files(session, contest, skip_submissions=True, - skip_user_tests=True, - skip_print_jobs=True) + skip_user_tests=True) for digest in files: try: self.file_cacher.cache_file(digest) diff --git a/cms/service/templates/printing/title_page.tex b/cms/service/templates/printing/title_page.tex deleted file mode 100644 index 2150999582..0000000000 --- a/cms/service/templates/printing/title_page.tex +++ /dev/null @@ -1,14 +0,0 @@ -\documentclass[12pt,oneside,{{ paper_size|lower }}paper]{article} -\usepackage[utf8]{inputenc} -\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry} % page borders -\pagestyle{empty} -\begin{document} -\begin{center} -\vspace*{\fill} -{\Huge \bfseries {{ user.username|escape_tex_normal }}\\[3mm]({{ user.first_name|escape_tex_normal }} {{ user.last_name|escape_tex_normal }})}\\[1cm] -{\Large {{ timestr|escape_tex_normal }} }\\[1cm] -{\Large \tt {{ filename|escape_tex_tt }} }\\[2cm] -{\large {{ page_count }} pages} -\vspace*{\fill} -\end{center} -\end{document} diff --git a/cmscommon/tex.py b/cmscommon/tex.py deleted file mode 100644 index 5bba9a68fe..0000000000 --- a/cmscommon/tex.py +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env python3 - -# Contest Management System - http://cms-dev.github.io/ -# Copyright © 2014 Fabian Gundlach <320pointsguy@gmail.com> -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - - -REPLACEMENTS = {"&": r"\&{}", - "%": r"\%{}", - "$": r"\${}", - "#": r"\#{}", - "_": r"\_{}", - "{": r"\{{}", - "}": r"\}{}", - "~": r"\textasciitilde{}", - "^": r"\textasciicircum{}", - "\\": r"\textbackslash{}"} - - -def escape_tex_normal(string: str) -> str: - """Escape a string for use inside latex. - - string: string to escape - return: escaped string - - """ - def repc(c): - if c in REPLACEMENTS: - return REPLACEMENTS[c] - else: - return c - return "".join(repc(c) for c in string) - - -def escape_tex_tt(string: str) -> str: - """Escape a string for use inside latex with \texttt. - - string: string to escape - return: escaped string - - """ - def repc(c): - if c in REPLACEMENTS: - return "\\char\"%02X{}" % ord(c) - else: - return c - return "".join(repc(c) for c in string) diff --git a/cmscontrib/DumpExporter.py b/cmscontrib/DumpExporter.py index 0b81d4b5bf..d6a06790c7 100755 --- a/cmscontrib/DumpExporter.py +++ b/cmscontrib/DumpExporter.py @@ -68,7 +68,6 @@ UserTest, SubmissionResult, UserTestResult, - PrintJob, Announcement, Participation, Base, @@ -169,7 +168,6 @@ def __init__( skip_submissions: bool, skip_user_tests: bool, skip_users: bool, - skip_print_jobs: bool, ): if contest_ids is None: with SessionGen() as session: @@ -197,7 +195,6 @@ def __init__( self.skip_submissions = skip_submissions self.skip_user_tests = skip_user_tests self.skip_users = skip_users - self.skip_print_jobs = skip_print_jobs self.export_target = export_target # If target is not provided, we use the contest's name. @@ -248,7 +245,6 @@ def do_export(self): skip_submissions=self.skip_submissions, skip_user_tests=self.skip_user_tests, skip_users=self.skip_users, - skip_print_jobs=self.skip_print_jobs, skip_generated=self.skip_generated) for file_ in files: if not self.safe_get_file(file_, @@ -369,10 +365,6 @@ class of the given object), an item for each column property if skip: continue - # Skip print jobs if requested - if self.skip_print_jobs and other_cls is PrintJob: - continue - # Skip generated data if requested if self.skip_generated and other_cls in (SubmissionResult, UserTestResult): @@ -452,8 +444,6 @@ def main(): help="don't export user tests") parser.add_argument("-X", "--no-users", action="store_true", help="don't export users") - parser.add_argument("-P", "--no-print-jobs", action="store_true", - help="don't export print jobs") parser.add_argument("export_target", action="store", type=utf8_decoder, nargs='?', default="", help="target directory or archive for export") @@ -467,8 +457,7 @@ def main(): skip_generated=args.no_generated, skip_submissions=args.no_submissions, skip_user_tests=args.no_user_tests, - skip_users=args.no_users, - skip_print_jobs=args.no_print_jobs) + skip_users=args.no_users) success = exporter.do_export() return 0 if success is True else 1 diff --git a/cmscontrib/DumpImporter.py b/cmscontrib/DumpImporter.py index 428fc7b990..1096ef56b1 100755 --- a/cmscontrib/DumpImporter.py +++ b/cmscontrib/DumpImporter.py @@ -71,7 +71,6 @@ Participation, UserTest, UserTestResult, - PrintJob, Announcement, Base, init_db, @@ -162,7 +161,6 @@ def __init__( skip_submissions: bool, skip_user_tests: bool, skip_users: bool, - skip_print_jobs: bool, ): self.drop = drop self.load_files = load_files @@ -171,7 +169,6 @@ def __init__( self.skip_submissions = skip_submissions self.skip_user_tests = skip_user_tests self.skip_users = skip_users - self.skip_print_jobs = skip_print_jobs self.import_source = import_source self.import_dir = import_source @@ -286,10 +283,6 @@ def do_import(self): UserTest, Announcement)): del self.objs[k] - # Skip print jobs if requested - elif self.skip_print_jobs and isinstance(v, PrintJob): - del self.objs[k] - # Skip generated data if requested elif self.skip_generated and \ isinstance(v, (SubmissionResult, UserTestResult)): @@ -324,7 +317,6 @@ def do_import(self): session, obj, skip_submissions=self.skip_submissions, skip_user_tests=self.skip_user_tests, - skip_print_jobs=self.skip_print_jobs, skip_users=self.skip_users, skip_generated=self.skip_generated) @@ -522,8 +514,6 @@ def main(): help="don't import user tests") parser.add_argument("-X", "--no-users", action="store_true", help="don't import users") - parser.add_argument("-P", "--no-print-jobs", action="store_true", - help="don't import print jobs") parser.add_argument("import_source", action="store", type=utf8_decoder, help="source directory or compressed file") @@ -536,8 +526,7 @@ def main(): skip_generated=args.no_generated, skip_submissions=args.no_submissions, skip_user_tests=args.no_user_tests, - skip_users=args.no_users, - skip_print_jobs=args.no_print_jobs) + skip_users=args.no_users) success = importer.do_import() return 0 if success is True else 1 diff --git a/cmscontrib/updaters/update_47.py b/cmscontrib/updaters/update_47.py new file mode 100644 index 0000000000..1a155babec --- /dev/null +++ b/cmscontrib/updaters/update_47.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +# Contest Management System - http://cms-dev.github.io/ +# Copyright © 2025 p. randla +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +"""A class to update a dump created by CMS. + +Used by DumpImporter and DumpUpdater. + +Removes PrintJob objects and references to them. + +""" + +class Updater: + + def __init__(self, data): + assert data["_version"] == 46 + self.objs = data + + def run(self): + for k, v in list(self.objs.items()): + if k.startswith("_"): + continue + if v["_class"] == "PrintJob": + del self.objs[k] + if v["_class"] == "Participation": + if "printjobs" in v: + del v["printjobs"] + + return self.objs + diff --git a/cmscontrib/updaters/update_from_1.5.sql b/cmscontrib/updaters/update_from_1.5.sql index a1ff578498..f35188a064 100644 --- a/cmscontrib/updaters/update_from_1.5.sql +++ b/cmscontrib/updaters/update_from_1.5.sql @@ -45,4 +45,7 @@ ALTER TABLE user_test_results DROP COLUMN evaluation_sandbox; -- https://github.com/cms-dev/cms/pull/1486 ALTER TABLE public.tasks ADD COLUMN allowed_languages varchar[]; +-- https://github.com/cms-dev/cms/pull/1583 +DROP TABLE public.printjobs; + COMMIT; diff --git a/cmstestsuite/unit_tests/cmscontrib/DumpExporterTest.py b/cmstestsuite/unit_tests/cmscontrib/DumpExporterTest.py index 3fb268f75b..fa4c1e5926 100755 --- a/cmstestsuite/unit_tests/cmscontrib/DumpExporterTest.py +++ b/cmstestsuite/unit_tests/cmscontrib/DumpExporterTest.py @@ -94,8 +94,7 @@ def do_export(self, contest_ids, dump_files=True, skip_generated=False, skip_generated=skip_generated, skip_submissions=skip_submissions, skip_user_tests=False, - skip_users=skip_users, - skip_print_jobs=False).do_export() + skip_users=skip_users).do_export() dump_path = os.path.join(self.target, "contest.json") try: with open(dump_path, "rt", encoding="utf-8") as f: diff --git a/cmstestsuite/unit_tests/cmscontrib/DumpImporterTest.py b/cmstestsuite/unit_tests/cmscontrib/DumpImporterTest.py index 1c1c237cf8..7f6fecf6af 100755 --- a/cmstestsuite/unit_tests/cmscontrib/DumpImporterTest.py +++ b/cmstestsuite/unit_tests/cmscontrib/DumpImporterTest.py @@ -147,8 +147,7 @@ def do_import(self, drop=False, load_files=True, skip_generated=skip_generated, skip_submissions=skip_submissions, skip_user_tests=False, - skip_users=skip_users, - skip_print_jobs=False).do_import() + skip_users=skip_users).do_import() def write_dump(self, dump): destination = self.get_path("contest.json") diff --git a/cmstestsuite/unit_tests/server/contest/printing_test.py b/cmstestsuite/unit_tests/server/contest/printing_test.py deleted file mode 100755 index f8d6c0033a..0000000000 --- a/cmstestsuite/unit_tests/server/contest/printing_test.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python3 - -# Contest Management System - http://cms-dev.github.io/ -# Copyright © 2018 Luca Wehrstedt -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -"""Tests for printing functions. - -""" - -import unittest -from collections import namedtuple -from unittest.mock import Mock, patch - -from cmstestsuite.unit_tests.databasemixin import DatabaseMixin - -from cms import config -from cms.db import PrintJob -from cms.server.contest.printing import accept_print_job, \ - UnacceptablePrintJob, PrintingDisabled -from cmscommon.datetime import make_datetime -from cmscommon.digest import bytes_digest - - -MockHTTPFile = namedtuple("FakeHTTPFile", ["filename", "body"]) - - -FILE_CONTENT = b"this is a pdf file" -FILE_DIGEST = bytes_digest(FILE_CONTENT) - - -@patch.object(config.printing, "printer", "not none") -class TestAcceptPrintJob(DatabaseMixin, unittest.TestCase): - - def setUp(self): - super().setUp() - self.file_cacher = Mock() - self.file_cacher.put_file_content.return_value = FILE_DIGEST - self.timestamp = make_datetime() - self.contest = self.add_contest() - self.user = self.add_user() - self.participation = self.add_participation( - contest=self.contest, user=self.user) - - def call(self, files): - return accept_print_job(self.session, self.file_cacher, - self.participation, self.timestamp, files) - - def test_success(self): - pj = self.call({"file": [MockHTTPFile("myfile.pdf", FILE_CONTENT)]}) - self.assertIsNotNone(pj) - query = self.session.query(PrintJob) \ - .filter(PrintJob.filename == pj.filename) - self.assertIs(query.first(), pj) - self.file_cacher.put_file_content.assert_called_with( - FILE_CONTENT, "Print job sent by %s at %s." % (self.user.username, - self.timestamp)) - - def test_printing_not_allowed(self): - with patch.object(config.printing, "printer", None): - with self.assertRaises(PrintingDisabled): - self.call({"file": [MockHTTPFile("myfile.pdf", FILE_CONTENT)]}) - - def test_bad_files(self): - with self.assertRaises(UnacceptablePrintJob): - self.call(dict()) - with self.assertRaises(UnacceptablePrintJob): - self.call({"not file": [MockHTTPFile("foo.txt", "sth")]}) - with self.assertRaises(UnacceptablePrintJob): - self.call({"file": [MockHTTPFile("myfile.pdf", "good content")], - "not file": [MockHTTPFile("foo.txt", "other content")]}) - with self.assertRaises(UnacceptablePrintJob): - self.call({"file": []}) - with self.assertRaises(UnacceptablePrintJob): - self.call({"file": [MockHTTPFile("myfile.pdf", "good content"), - MockHTTPFile("foo.txt", "other content")]}) - - def test_storage_failure(self): - self.file_cacher.put_file_content.side_effect = OSError("sth wrong") - with self.assertRaises(UnacceptablePrintJob): - self.call({"file": [MockHTTPFile("myfile.pdf", FILE_CONTENT)]}) - - @patch.object(config.printing, "max_print_length", len(FILE_CONTENT) - 1) - def test_file_too_big(self): - with self.assertRaises(UnacceptablePrintJob): - self.call({"file": [MockHTTPFile("myfile.pdf", FILE_CONTENT)]}) - - @patch.object(config.printing, "max_jobs_per_user", 1) - def test_too_many_print_jobs(self): - self.call({"file": [MockHTTPFile("myfile.pdf", FILE_CONTENT)]}) - with self.assertRaises(UnacceptablePrintJob): - self.call({"file": [MockHTTPFile("myfile.pdf", FILE_CONTENT)]}) - - -if __name__ == "__main__": - unittest.main() diff --git a/config/cms.sample.toml b/config/cms.sample.toml index f609ffe089..7cb519b6cd 100644 --- a/config/cms.sample.toml +++ b/config/cms.sample.toml @@ -61,7 +61,6 @@ Worker = [ ContestWebServer = [["localhost", 21000]] AdminWebServer = [["localhost", 21100]] ProxyService = [["localhost", 28600]] -PrintingService = [["localhost", 25123]] PrometheusExporter = [] TelegramBot = [] @@ -188,25 +187,6 @@ rankings = ["http://usern4me:passw0rd@localhost:8890/"] #https_certfile = "..." -[printing] -# Maximum size of a print job in bytes. -max_print_length = 10_000_000 - -# Printer name (can be found out using 'lpstat -p'; if missing, printing -# is disabled) -#printer = "..." - -# Output paper size (probably A4 or Letter) -paper_size = "A4" - -# Maximum number of pages a user can print per print job (excluding the -# title page). Text files are cropped to this length. Too long pdf files -# are rejected. -max_pages_per_job = 10 -max_jobs_per_user = 10 -pdf_printing_allowed = false - - [prometheus] # Listening HTTP address and port for the exporter. If exposed this may # leak private information, make sure to secure this endpoint. diff --git a/constraints.txt b/constraints.txt index 3a9cfffd5e..7f547d7bea 100644 --- a/constraints.txt +++ b/constraints.txt @@ -27,9 +27,7 @@ prometheus_client==0.21.1 psutil==7.0.0 psycopg2==2.9.10 pycryptodomex==3.23.0 -pycups==2.0.4 Pygments==2.19.2 -PyPDF2==3.0.1 pytest==8.4.1 pytest-cov==6.2.1 python-telegram-bot==21.11.1 diff --git a/docs/Installation.rst b/docs/Installation.rst index f441462e2b..92bc1b1a62 100644 --- a/docs/Installation.rst +++ b/docs/Installation.rst @@ -31,10 +31,6 @@ These are our requirements (in particular we highlight those that are not usuall * `Isolate `_ >= 2.0; -* `TeX Live `_ (only for printing); - -* `a2ps `_ (only for printing). - You will also require a Linux kernel with support for `cgroupv2 `_. Most Linux distributions provide such kernels by default. @@ -67,10 +63,9 @@ On Ubuntu 24.04, one will need to run the following script as root to satisfy al # Feel free to change OpenJDK packages with your preferred JDK. apt install build-essential openjdk-11-jdk-headless fp-compiler \ - postgresql postgresql-client \ - python3.12 python3.12-dev python3-pip python3-venv \ - libpq-dev libcups2-dev libyaml-dev libffi-dev \ - shared-mime-info cppreference-doc-en-html zip curl + postgresql postgresql-client python3.12 python3.12-dev python3-pip \ + python3-venv libpq-dev libyaml-dev libffi-dev shared-mime-info \ + cppreference-doc-en-html zip curl # Isolate from upstream package repository echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/isolate.asc] http://www.ucw.cz/isolate/debian/ noble-isolate main' >/etc/apt/sources.list.d/isolate.list @@ -78,8 +73,7 @@ On Ubuntu 24.04, one will need to run the following script as root to satisfy al apt update && apt install isolate # Optional - apt install nginx-full php-cli texlive-latex-base \ - a2ps ghc rustc mono-mcs pypy3 + apt install nginx-full php-cli ghc rustc mono-mcs pypy3 The above commands provide a very essential Pascal environment. Consider installing the following packages for additional units: ``fp-units-base``, ``fp-units-fcl``, ``fp-units-misc``, ``fp-units-math`` and ``fp-units-rtl``. @@ -92,16 +86,14 @@ On Arch Linux, run the following commands as root to install almost all dependen .. sourcecode:: bash pacman -S base-devel jdk8-openjdk fpc postgresql postgresql-client \ - python python-pip postgresql-libs libcups libyaml \ - shared-mime-info + python python-pip postgresql-libs libyaml shared-mime-info # Install the following from AUR. # https://aur.archlinux.org/packages/cppreference/ # https://aur.archlinux.org/packages/isolate # Optional - pacman -S --needed nginx php php-fpm phppgadmin texlive-core \ - a2ps ghc rust mono pypy3 + pacman -S --needed nginx php php-fpm phppgadmin ghc rust mono pypy3 Preparation steps diff --git a/docs/Introduction.rst b/docs/Introduction.rst index 1d0b8e188d..14c92dde3f 100644 --- a/docs/Introduction.rst +++ b/docs/Introduction.rst @@ -34,8 +34,6 @@ CMS is composed of several services, that can be run on a single or on many serv - ProxyService: sends the computed scores to the rankings; -- PrintingService: processes files submitted for printing and sends them to a printer; - - ContestWebServer: the webserver that the contestants will be interacting with; - AdminWebServer: the webserver to control and modify the parameters of the contests. diff --git a/pyproject.toml b/pyproject.toml index a4f4c8a5c8..3d994b04aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,10 +42,6 @@ dependencies = [ # Only for some importers: "pyyaml>=5.3,<6.1", # http://pyyaml.org/wiki/PyYAML - # Only for printing: - "pycups==2.0.4", # https://pypi.python.org/pypi/pycups - "PyPDF2>=1.26,<3.1", # https://github.com/mstamy2/PyPDF2/blob/master/CHANGELOG - # Only for cmsPrometheusExporter "prometheus-client>=0.7,<0.22", # https://pypi.org/project/prometheus-client diff --git a/scripts/cmsPrintingService b/scripts/cmsPrintingService deleted file mode 100755 index b220e9a561..0000000000 --- a/scripts/cmsPrintingService +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 - -# Contest Management System - http://cms-dev.github.io/ -# Copyright © 2014 Fabian Gundlach <320pointsguy@gmail.com> -# Copyright © 2016 Stefano Maggiolo -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -# We enable monkey patching to make many libraries gevent-friendly -# (for instance, urllib3, used by requests) -import gevent.monkey -gevent.monkey.patch_all() # noqa - -import logging -import sys - -from cms import ConfigError, default_argument_parser -from cms.db import test_db_connection -from cms.service.PrintingService import PrintingService - - -logger = logging.getLogger(__name__) - - -def main(): - """Parse arguments and launch service. - - """ - test_db_connection() - success = default_argument_parser("Printing job handler for CMS.", - PrintingService).run() - return 0 if success is True else 1 - - -if __name__ == "__main__": - try: - sys.exit(main()) - except ConfigError as error: - logger.critical(error) - sys.exit(1) diff --git a/setup.py b/setup.py index 48cc0af7bf..fa5352d6c3 100755 --- a/setup.py +++ b/setup.py @@ -53,9 +53,6 @@ "contest/templates/*.*", "contest/templates/macro/*.*", ], - "cms.service": [ - "templates/printing/*.*", - ], "cms.locale": [ "*/LC_MESSAGES/*.*", ], @@ -130,7 +127,6 @@ class build_with_l10n(build): "scripts/cmsContestWebServer", "scripts/cmsAdminWebServer", "scripts/cmsProxyService", - "scripts/cmsPrintingService", "scripts/cmsRankingWebServer", "scripts/cmsInitDB", "scripts/cmsDropDB",