pax_global_header00006660000000000000000000000064151602364310014513gustar00rootroot0000000000000052 comment=fd14ba648d3d78721f210d5fb7a39d6d8b63040e Salamek-cron-descriptor-b4a8c7c/000077500000000000000000000000001516023643100167005ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/.github/000077500000000000000000000000001516023643100202405ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/.github/dependabot.yml000066400000000000000000000011031516023643100230630ustar00rootroot00000000000000# Keep GitHub Actions up to date with GitHub's Dependabot... # https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot # https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#package-ecosystem version: 2 updates: - package-ecosystem: github-actions directory: / groups: github-actions: patterns: - "*" # Group all Actions updates into a single larger pull request schedule: interval: weekly Salamek-cron-descriptor-b4a8c7c/.github/workflows/000077500000000000000000000000001516023643100222755ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/.github/workflows/python-test.yml000066400000000000000000000011651516023643100253210ustar00rootroot00000000000000name: Python tests on: - push - pull_request jobs: build: runs-on: ubuntu-24.04 strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] steps: - uses: actions/checkout@v6 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} allow-prereleases: true - name: Install dependencies run: | python -m pip install --upgrade pip pip install mock ruff setuptools mypy pytest polib types-polib - name: Test run: ./code-check.sh Salamek-cron-descriptor-b4a8c7c/.gitignore000066400000000000000000000021661516023643100206750ustar00rootroot00000000000000### Python template # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations #*.mo *.pot # Django stuff: *.log local_settings.py # Flask instance folder instance/ # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # IPython Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # dotenv .env # virtualenv venv/ ENV/ .venv # Spyder project settings .spyderproject # Rope project settings .ropeproject .idea .DS_Store .vimrc *.swp # Created by .ignore support plugin (hsz.mobi) Salamek-cron-descriptor-b4a8c7c/.gitlab-ci.yml000066400000000000000000000060041516023643100213340ustar00rootroot00000000000000stages: - test - package - packagetest - deploy test:debian: stage: test script: - apt update --yes - apt install ca-certificates python3-venv --yes - python3 -m venv venv - ./venv/bin/pip install mock ruff setuptools mypy pytest polib types-polib - ./venv/bin/ruff check . - ./venv/bin/mypy . - ./venv/bin/pytest . tags: - debian test:archlinux: stage: test script: - pacman -Syu python-pip --noconfirm - python -m venv venv - ./venv/bin/pip install mock ruff setuptools mypy pytest polib types-polib - ./venv/bin/ruff check . - ./venv/bin/mypy . - ./venv/bin/pytest . tags: - archlinux package:debian: stage: package script: - apt update --yes - apt install python3-stdeb dh-python --yes - rm -rf "./deb_dist" - export DEB_BUILD_OPTIONS=nocheck - python3 setup.py --command-packages=stdeb.command bdist_deb tags: - debian artifacts: paths: - deb_dist/*.deb expire_in: 1d package:archlinux: stage: package script: - pacman -Syu sudo fakeroot systemd binutils python-setuptools base-devel python-build python-installer --noconfirm - useradd -m -G users -s /bin/bash package - chown -R package:users archlinux - cd archlinux - sudo -H -u package makepkg -f tags: - archlinux artifacts: paths: - archlinux/python-cron-descriptor* expire_in: 1d packagetest:debian: stage: packagetest script: - apt update --yes - cd deb_dist - apt install ./*.deb --yes tags: - debian dependencies: - package:debian packagetest:archlinux: stage: packagetest script: - pacman -Sy - cd archlinux - pacman -U python-cron-descriptor*.pkg.tar.zst --noconfirm tags: - archlinux dependencies: - package:archlinux repoupdate: stage: deploy before_script: # SSH - 'which ssh-agent || ( apt update --yes && apt install openssh-client --yes )' - apt update --yes - apt install twine python3-setuptools python3-wheel python3-build python3-venv --yes - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' script: - ssh www-data@192.168.1.27 'rm -rf /var/www/repository.salamek.cz/www/arch/pub/any/python-cron-descriptor*.pkg.tar.zst' - ssh www-data@192.168.1.27 'rm -rf /var/www/repository.salamek.cz/cache/deb/pub/all/python3-cron-descriptor*.deb' - scp archlinux/python-cron-descriptor*.pkg.tar.zst www-data@192.168.1.27:/var/www/repository.salamek.cz/www/arch/pub/any - scp deb_dist/*.deb www-data@192.168.1.27:/var/www/repository.salamek.cz/cache/deb/pub/all - ssh www-data@192.168.1.27 '/var/www/repository.salamek.cz/deb-pub-update.sh' - ssh www-data@192.168.1.27 '/var/www/repository.salamek.cz/arch-pub-update.sh' # PyPi update - python3 -m build - twine upload dist/* dependencies: - package:archlinux - package:debian tags: - debian only: - tags Salamek-cron-descriptor-b4a8c7c/.version.yml000066400000000000000000000006751516023643100211760ustar00rootroot00000000000000GIT: AUTO_COMMIT: true AUTO_TAG: true AUTO_PUSH: true # false=disabled, true=enabled, 'remote_name'=enabled and push to remote_name COMMIT_MESSAGE: 'New version {version}' CHANGELOG: REGEXPS: 'python': __version__\s*=\s*(\'|\")(?P\d+)\.(?P\d+)\.(?P\d+)(\'|\") 'PKGBUILD': pkgver\s*=\s*(?P.*) VERSION_FILES: 'cron_descriptor/__init__.py': 'python' 'archlinux/PKGBUILD': 'PKGBUILD'Salamek-cron-descriptor-b4a8c7c/LICENSE000066400000000000000000000020701516023643100177040ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2016 Adam Schubert Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Salamek-cron-descriptor-b4a8c7c/MANIFEST.in000066400000000000000000000000751516023643100204400ustar00rootroot00000000000000include LICENSE include README.md recursive-include locale * Salamek-cron-descriptor-b4a8c7c/README.md000066400000000000000000000151351516023643100201640ustar00rootroot00000000000000# Cron Descriptor [![Python tests](https://github.com/Salamek/cron-descriptor/actions/workflows/python-test.yml/badge.svg)](https://github.com/Salamek/cron-descriptor/actions/workflows/python-test.yml) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.me/salamek) A Python library that converts cron expressions into human readable strings. Ported to Python from https://github.com/bradyholt/cron-expression-descriptor. **Author**: Adam Schubert (https://www.salamek.cz) **Original Author & Credit**: Brady Holt (http://www.geekytidbits.com) **License**: [MIT](http://opensource.org/licenses/MIT) ## Features * Supports all cron expression special characters including * / , - ? L W, # * Supports 5, 6 (w/ seconds or year), or 7 (w/ seconds and year) part cron expressions * Provides casing options (Sentence, Title, Lower, etc.) * Localization with support for ~31 languages * Supports Python 3.9 - 3.13 ## Installation Using PIP ```bash pip install cron-descriptor ``` ## Usage example ### Simple ```python from cron_descriptor import get_description, ExpressionDescriptor print(get_description("* 2 3 * *")) #OR print(str(ExpressionDescriptor("* 2 3 * *"))) ``` ### Advanced ```python # Consult Options.py/CasingTypeEnum.py/DescriptionTypeEnum.py for more info from cron_descriptor import Options, CasingTypeEnum, DescriptionTypeEnum, ExpressionDescriptor descriptor = ExpressionDescriptor( expression = "*/10 * * * *", casing_type = CasingTypeEnum.Sentence, use_24hour_time_format = True ) # GetDescription uses DescriptionTypeEnum.FULL by default: print(descriptor.get_description()) print(f"{descriptor = }") # Or passing Options class as second argument: options = Options() options.casing_type = CasingTypeEnum.Sentence options.use_24hour_time_format = True descriptor = ExpressionDescriptor("*/10 * * * *", options) print(descriptor.get_description(DescriptionTypeEnum.FULL)) ``` ## Languages Available | Language | Locale Code | Contributor | |---------------------|-------------|---------------------------------------------------------| | English | en | [Brady Holt](https://github.com/bradyholt) | | Chinese Simplified | zh_CN | [Star Peng](https://github.com/starpeng) | | Chinese Traditional | zh_TW | [Ricky Chiang](https://github.com/metavige) | | Czech | cs_CZ | [Adam Schubert](https://github.com/salamek) | | Danish | da_DK | [Rasmus Melchior Jacobsen](https://github.com/rmja) | | Dutch | nl_NL | [TotalMace](https://github.com/TotalMace) | | Finnish | fi_FI | [Mikael Rosenberg](https://github.com/MR77FI) | | French | fr_FR | [Arnaud TAMAILLON](https://github.com/Greybird) | | German | de_DE | [Michael Schuler](https://github.com/mschuler) | | Hebrew | he_IL | [Ariel Deil](https://github.com/arieldeil) | | Hungarian | hu_HU | [Varga MiklΓ³s](https://github.com/Micky2149) | | Italian | it_IT | [rinaldihno](https://github.com/rinaldihno) | | Japanese | ja_JP | [Tho Nguyen](https://github.com/tho-asterist) | | Korean | ko_KR | [KyuJoo Han](https://github.com/hanqyu) | | Norwegian | nb_NO | [Siarhei Khalipski](https://github.com/KhalipskiSiarhei)| | Persian | fa_IR | [A. Bahrami](https://github.com/alirezakoo) | | Polish | pl_PL | [foka](https://github.com/foka) | | Portuguese | pt_PT | [Renato Lima](https://github.com/natenho) | | Portuguese (Brazil) | pt_BR | [Renato Lima](https://github.com/natenho) | | Romanian | ro_RO | [Illegitimis](https://github.com/illegitimis) | | Russian | ru_RU | [LbISS](https://github.com/LbISS) | | Slovenian | sl_SI | [Jani Bevk](https://github.com/jenzy) | | Spanish | es_ES | [Ivan Santos](https://github.com/ivansg) | | Spanish (Mexico) | es_MX | [Ion Mincu](https://github.com/ionmincu) | | Swedish | sv_SE | [Γ…ke Engelbrektson](https://github.com/eson57) | | Vietnamese | vi_VN | [Nguyen Duc Son](https://github.com/ali33) | | Turkish | tr_TR | [Mustafa SADEDΔ°L](https://github.com/sadedil) | | Tamil | ta_IN | [Sankar Hari](https://github.com/sankarhari) | | Ukrainian | uk_UA | [Taras](https://github.com/tbudurovych) | | Greek | el_GR | [hardra1n](https://github.com/Hardra1n) | | Kazakh | kk_KZ | [hardra1n](https://github.com/Hardra1n) | ## Original Source - .NET - [https://github.com/bradyholt/cron-expression-descriptor](https://github.com/bradyholt/cron-expression-descriptor) ## Ports - Java - [https://github.com/RedHogs/cron-parser](https://github.com/RedHogs/cron-parser) - Ruby - [https://github.com/alpinweis/cronex](https://github.com/alpinweis/cronex) - Golang - [https://github.com/jsuar/go-cron-descriptor](https://github.com/jsuar/go-cron-descriptor) ## Running Unit Tests ```bash python setup.py test ``` ## Translating cron-descriptor is using [Gettext](https://www.gnu.org/software/gettext/) for translations. > To create new translation or edit existing one, i suggest using [Poedit](https://poedit.net/). You can copy/rename and translate any file from `locale` directory: ```bash cp ./cron_descriptor/locale/de_DE.po ./cron_descriptor/locale/YOUR_LOCALE_CODE.po poedit ./cron_descriptor/locale/YOUR_LOCALE_CODE.po ``` or you can generate new untranslated *.po file from sources by running in `cron_descriptor` directory: ```bash cd cron_descriptor xgettext *.py -o locale/YOUR_LOCALE_CODE.po ``` Generating *.mo file from *.po file. In root directory run command: ```bash msgfmt -o cron_descriptor/locale/YOUR_LOCALE_CODE.mo cron_descriptor/locale/YOUR_LOCALE_CODE.po ``` ## Developing All suggestions and PR's are welcomed Just clone this repository and register pre-commit hook by running: ```bash ln -s ../../code-check.sh .git/hooks/pre-commit ``` Then install dev requirements: ```bash pip install .[dev,test] ``` Salamek-cron-descriptor-b4a8c7c/archlinux/000077500000000000000000000000001516023643100206755ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/archlinux/PKGBUILD000066400000000000000000000014271516023643100220250ustar00rootroot00000000000000pkgname=python-cron-descriptor pkgver=2.0.8 pkgdesc="A Python library that converts cron expressions into human readable strings." pkgrel=1 arch=('any') license=('MIT') url='https://github.com/Salamek/cron-descriptor' makedepends=(python-build python-installer python-wheel python-setuptools) depends=( 'python' ) prepare() { mkdir -p "${srcdir}/${pkgname}" cp -R "${srcdir}/../../cron_descriptor" "${srcdir}/${pkgname}" cp -R "${srcdir}/../../tests" "${srcdir}/${pkgname}" cp -R "${srcdir}/../../pyproject.toml" "${srcdir}/${pkgname}" cp -R "${srcdir}/../../README.md" "${srcdir}/${pkgname}" } build() { cd "${srcdir}/${pkgname}" python -m build --wheel --no-isolation } package() { cd "${srcdir}/${pkgname}" python -m installer --destdir="$pkgdir" dist/*.whl }Salamek-cron-descriptor-b4a8c7c/code-check.sh000077500000000000000000000000611516023643100212210ustar00rootroot00000000000000#!/bin/bash set -e ruff check . mypy . pytest . Salamek-cron-descriptor-b4a8c7c/cron_descriptor/000077500000000000000000000000001516023643100220775ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/cron_descriptor/CasingTypeEnum.py000066400000000000000000000024321516023643100253450ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. """Enum to define the casing types for the Cron Expression description """ import enum @enum.unique class CasingTypeEnum(enum.IntEnum): Title = 1 Sentence = 2 LowerCase = 3 Salamek-cron-descriptor-b4a8c7c/cron_descriptor/DescriptionTypeEnum.py000066400000000000000000000025241516023643100264260ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import enum @enum.unique class DescriptionTypeEnum(enum.IntEnum): """DescriptionTypeEnum """ FULL = 1 TIMEOFDAY = 2 SECONDS = 3 MINUTES = 4 HOURS = 5 DAYOFWEEK = 6 MONTH = 7 DAYOFMONTH = 8 YEAR = 9 Salamek-cron-descriptor-b4a8c7c/cron_descriptor/Exception.py000066400000000000000000000036131516023643100244120ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. class MissingFieldException(Exception): """Deprecated, use MissingFieldError """ def __init__(self, message: str) -> None: """Initialize MissingFieldException Args: message: Message of exception """ super().__init__(f"Field '{message}' not found.") class FormatException(Exception): """Deprecated use FormatError """ class WrongArgumentException(Exception): """Deprecated, use WrongArgumentError """ class MissingFieldError(MissingFieldException): """Exception for cases when something is missing """ class FormatError(FormatException): """Exception for cases when something has wrong format """ class WrongArgumentError(WrongArgumentException): """Exception for cases when wrong argument is passed """ Salamek-cron-descriptor-b4a8c7c/cron_descriptor/ExpressionDescriptor.py000066400000000000000000000664241516023643100266630ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from __future__ import annotations import calendar import datetime import re from typing import Callable, TypedDict from typing_extensions import Unpack from .CasingTypeEnum import CasingTypeEnum from .DescriptionTypeEnum import DescriptionTypeEnum from .Exception import FormatError, WrongArgumentError from .ExpressionParser import ExpressionParser from .GetText import GetText from .Options import Options from .StringBuilder import StringBuilder class OptionsKwargs(TypedDict, total=False): use_24hour_time_format: bool locale_code: str casing_type: CasingTypeEnum verbose: bool day_of_week_start_index_zero: bool locale_location: str | None class ExpressionDescriptor: """Converts a Cron Expression into a human readable string """ _special_characters = ("/", "-", ",", "*") _expression = "" _options: Options _expression_parts: list[str] def __init__(self, expression: str, options: Options | None=None, **kwargs: Unpack[OptionsKwargs]) -> None: """Initializes a new instance of the ExpressionDescriptor Args: expression: The cron expression string options: Options to control the output description Raises: WrongArgumentException: if kwarg is unknown """ if options is None: options = Options() self._expression = expression self._options = options self._expression_parts = [] # if kwargs in _options, overwrite it, if not raise exception for kwarg, value in kwargs.items(): if hasattr(self._options, kwarg): setattr(self._options, kwarg, value) else: msg = f"Unknown {kwarg} configuration argument" raise WrongArgumentError(msg) # Initializes localization self.get_text = GetText(options.locale_code, options.locale_location) # Parse expression parser = ExpressionParser(self._expression, self._options) self._expression_parts = parser.parse() def translate(self, message: str) -> str: return self.get_text.trans.gettext(message) def get_description(self, description_type: DescriptionTypeEnum = DescriptionTypeEnum.FULL) -> str: """Generates a humanreadable string for the Cron Expression Args: description_type: Which part(s) of the expression to describe Returns: The cron expression description Raises: Exception: """ choices = { DescriptionTypeEnum.FULL: self.get_full_description, DescriptionTypeEnum.TIMEOFDAY: self.get_time_of_day_description, DescriptionTypeEnum.HOURS: self.get_hours_description, DescriptionTypeEnum.MINUTES: self.get_minutes_description, DescriptionTypeEnum.SECONDS: self.get_seconds_description, DescriptionTypeEnum.DAYOFMONTH: self.get_day_of_month_description, DescriptionTypeEnum.MONTH: self.get_month_description, DescriptionTypeEnum.DAYOFWEEK: self.get_day_of_week_description, DescriptionTypeEnum.YEAR: self.get_year_description, } return choices.get(description_type, self.get_seconds_description)() def get_full_description(self) -> str: """Generates the FULL description Returns: The FULL description Raises: FormatException: if formatting fails """ try: time_segment = self.get_time_of_day_description() day_of_month_desc = self.get_day_of_month_description() month_desc = self.get_month_description() day_of_week_desc = self.get_day_of_week_description() year_desc = self.get_year_description() description = f"{time_segment}{day_of_month_desc}{day_of_week_desc}{month_desc}{year_desc}" description = self.transform_verbosity(description, use_verbose_format=self._options.verbose) description = ExpressionDescriptor.transform_case(description, self._options.casing_type) except Exception as e: description = self.translate( "An error occurred when generating the expression description. Check the cron expression syntax.", ) raise FormatError(description) from e return description def get_time_of_day_description(self) -> str: """Generates a description for only the TIMEOFDAY portion of the expression Returns: The TIMEOFDAY description """ seconds_expression = self._expression_parts[0] minute_expression = self._expression_parts[1] hour_expression = self._expression_parts[2] description = StringBuilder() # handle special cases first if any(exp in minute_expression for exp in self._special_characters) is False and \ any(exp in hour_expression for exp in self._special_characters) is False and \ any(exp in seconds_expression for exp in self._special_characters) is False: # specific time of day (i.e. 10 14) description.append(self.translate("At ")) description.append( self.format_time( hour_expression, minute_expression, seconds_expression)) elif seconds_expression == "" and "-" in minute_expression and \ "," not in minute_expression and \ any(exp in hour_expression for exp in self._special_characters) is False: # minute range in single hour (i.e. 0-10 11) minute_parts = minute_expression.split("-") description.append(self.translate("Every minute between {0} and {1}").format( self.format_time(hour_expression, minute_parts[0]), self.format_time(hour_expression, minute_parts[1]))) elif seconds_expression == "" and "," in hour_expression and "-" not in hour_expression and \ any(exp in minute_expression for exp in self._special_characters) is False: # hours list with single minute (o.e. 30 6,14,16) hour_parts = hour_expression.split(",") description.append(self.translate("At")) for i, hour_part in enumerate(hour_parts): description.append(" ") description.append(self.format_time(hour_part, minute_expression)) if i < (len(hour_parts) - 2): description.append(",") if i == len(hour_parts) - 2: description.append(self.translate(" and")) else: # default time description seconds_description = self.get_seconds_description() minutes_description = self.get_minutes_description() hours_description = self.get_hours_description() description.append(seconds_description) if description and minutes_description: description.append(", ") description.append(minutes_description) if description and hours_description: description.append(", ") description.append(hours_description) return str(description) def get_seconds_description(self) -> str: """Generates a description for only the SECONDS portion of the expression Returns: The SECONDS description """ def get_description_format(s: str) -> str: if s == "0": return "" try: if int(s) < 20: return self.translate("at {0} seconds past the minute") return self.translate("at {0} seconds past the minute [grThen20]") or self.translate("at {0} seconds past the minute") except ValueError: return self.translate("at {0} seconds past the minute") return self.get_segment_description( self._expression_parts[0], self.translate("every second"), lambda s: s, lambda s: self.translate("every {0} seconds").format(s), lambda _: self.translate("seconds {0} through {1} past the minute"), get_description_format, lambda _: self.translate(", second {0} through second {1}") or self.translate(", {0} through {1}"), ) def get_minutes_description(self) -> str: """Generates a description for only the MINUTE portion of the expression Returns: The MINUTE description """ seconds_expression = self._expression_parts[0] def get_description_format(s: str) -> str: if s == "0" and seconds_expression == "": return "" try: if int(s) < 20: return self.translate("at {0} minutes past the hour") return self.translate("at {0} minutes past the hour [grThen20]") or self.translate("at {0} minutes past the hour") except ValueError: return self.translate("at {0} minutes past the hour") return self.get_segment_description( self._expression_parts[1], self.translate("every minute"), lambda s: s, lambda s: self.translate("every {0} minutes").format(s), lambda _: self.translate("minutes {0} through {1} past the hour"), get_description_format, lambda _: self.translate(", minute {0} through minute {1}") or self.translate(", {0} through {1}"), ) def get_hours_description(self) -> str: """Generates a description for only the HOUR portion of the expression Returns: The HOUR description """ expression = self._expression_parts[2] return self.get_segment_description( expression, self.translate("every hour"), lambda s: self.format_time(s, "0"), lambda s: self.translate("every {0} hours").format(s), lambda _: self.translate("between {0} and {1}"), lambda _: self.translate("at {0}"), lambda _: self.translate(", hour {0} through hour {1}") or self.translate(", {0} through {1}"), ) def get_day_of_week_description(self) -> str: """Generates a description for only the DAYOFWEEK portion of the expression Returns: The DAYOFWEEK description """ if self._expression_parts[5] == "*": # DOW is specified as * so we will not generate a description and defer to DOM part. # Otherwise, we could get a contradiction like "on day 1 of the month, every day" # or a dupe description like "every day, every day". return "" def get_day_name(s: str) -> str: exp = s if "#" in s: exp, _ = s.split("#", 2) elif "L" in s: exp = exp.replace("L", "") return ExpressionDescriptor.number_to_day(int(exp)) def get_format(s: str) -> str: if "#" in s: day_of_week_of_month = s[s.find("#") + 1:] try: day_of_week_of_month_number = int(day_of_week_of_month) choices = { 1: self.translate("first"), 2: self.translate("second"), 3: self.translate("third"), 4: self.translate("fourth"), 5: self.translate("fifth"), } day_of_week_of_month_description = choices.get(day_of_week_of_month_number, "") except ValueError: day_of_week_of_month_description = "" formatted = "{}{}{}".format(self.translate(", on the "), day_of_week_of_month_description, self.translate(" {0} of the month")) elif "L" in s: formatted = self.translate(", on the last {0} of the month") else: formatted = self.translate(", only on {0}") return formatted return self.get_segment_description( self._expression_parts[5], self.translate(", every day"), get_day_name, lambda s: self.translate(", every {0} days of the week").format(s), lambda _: self.translate(", {0} through {1}"), get_format, lambda _: self.translate(", {0} through {1}"), ) def get_month_description(self) -> str: """Generates a description for only the MONTH portion of the expression Returns: The MONTH description """ return self.get_segment_description( self._expression_parts[4], "", lambda s: datetime.date(datetime.datetime.now(tz=datetime.timezone.utc).date().year, int(s), 1).strftime("%B"), lambda s: self.translate(", every {0} months").format(s), lambda _: self.translate(", month {0} through month {1}") or self.translate(", {0} through {1}"), lambda _: self.translate(", only in {0}"), lambda _: self.translate(", month {0} through month {1}") or self.translate(", {0} through {1}"), ) def get_day_of_month_description(self) -> str: """Generates a description for only the DAYOFMONTH portion of the expression Returns: The DAYOFMONTH description """ expression = self._expression_parts[3] if expression == "L": description = self.translate(", on the last day of the month") elif expression in ("LW", "WL"): description = self.translate(", on the last weekday of the month") else: regex = re.compile(r"(\d{1,2}W)|(W\d{1,2})") m = regex.match(expression) if m: # if matches day_number = int(m.group().replace("W", "")) day_string = self.translate("first weekday") if day_number == 1 else self.translate("weekday nearest day {0}").format(day_number) description = self.translate(", on the {0} of the month").format(day_string) elif expression == "*" and self._expression_parts[5] != "*": # DOW is specified, but DOM is *, so do not generate DOM description. # Otherwise, we could get a contradiction like "every day, on Tuesday" description = "" else: # Handle "last day offset"(i.e.L - 5: "5 days before the last day of the month") regex = re.compile(r"L-(\d{1,2})") m = regex.match(expression) if m: # if matches off_set_days = m.group(1) description = self.translate(", {0} days before the last day of the month").format(off_set_days) else: description = self.get_segment_description( expression, self.translate(", every day"), lambda s: s, lambda s: self.translate(", every day") if s == "1" else self.translate(", every {0} days"), lambda _: self.translate(", between day {0} and {1} of the month"), lambda _: self.translate(", on day {0} of the month"), lambda _: self.translate(", {0} through {1}"), ) return description def get_year_description(self) -> str: """Generates a description for only the YEAR portion of the expression Returns: The YEAR description """ def format_year(s: str) -> str: regex = re.compile(r"^\d+$") if regex.match(s): year_int = int(s) if year_int < 1900: return str(year_int) return datetime.date(year_int, 1, 1).strftime("%Y") return s return self.get_segment_description( self._expression_parts[6], "", format_year, lambda s: self.translate(", every {0} years").format(s), lambda _: self.translate(", year {0} through year {1}") or self.translate(", {0} through {1}"), lambda _: self.translate(", only in {0}"), lambda _: self.translate(", year {0} through year {1}") or self.translate(", {0} through {1}"), ) def get_segment_description( self, expression: str, all_description: str, get_single_item_description: Callable[[str], str], get_interval_description_format: Callable[[str], str], get_between_description_format: Callable[[str], str], get_description_format: Callable[[str], str], get_range_format: Callable[[str], str], ) -> str: """Returns segment description Args: expression: Segment to descript all_description: * get_single_item_description: 1 get_interval_description_format: 1/2 get_between_description_format: 1-2 get_description_format: format get_single_item_description get_range_format: function that formats range expressions depending on cron parts Returns: segment description """ if not expression: return "" if expression == "*": return all_description if not any(ext in expression for ext in ["/", "-", ","]): return get_description_format(expression).format(get_single_item_description(expression)) if "," in expression: segments = expression.split(",") description_content = "" for i, segment in enumerate(segments): if i > 0 and len(segments) > 2: description_content += "," if i < len(segments) - 1: description_content += " " if i > 0 and len(segments) > 1 and (i == len(segments) - 1 or len(segments) == 2): description_content += self.translate(" and ") if "/" in segment: description_content += self._describe_step_in_comma( segment, get_interval_description_format, get_range_format, get_single_item_description, ) elif "-" in segment: between_segment_description = self.generate_between_segment_description( segment, get_range_format, get_single_item_description, ) between_segment_description = between_segment_description.replace(", ", "") description_content += between_segment_description else: description_content += get_single_item_description(segment) return get_description_format(expression).format(description_content) if "/" in expression: segments = expression.split("/") description = get_interval_description_format(segments[1]).format(segments[1]) # interval contains 'between' piece (i.e. 2-59/3 ) if "-" in segments[0]: between_segment_description = self.generate_between_segment_description( segments[0], get_between_description_format, get_single_item_description, ) if not between_segment_description.startswith(", "): description += ", " description += between_segment_description elif not any(ext in segments[0] for ext in ["*", ","]): range_item_description = get_description_format(segments[0]).format( get_single_item_description(segments[0]), ) range_item_description = range_item_description.replace(", ", "") description += self.translate(", starting {0}").format(range_item_description) return description if "-" in expression: return self.generate_between_segment_description( expression, get_between_description_format, get_single_item_description, ) return "?" def generate_between_segment_description( self, between_expression: str, get_between_description_format: Callable[[str], str], get_single_item_description: Callable[[str], str], ) -> str: """Generates the between segment description :param between_expression: :param get_between_description_format: :param get_single_item_description: :return: The between segment description """ description = "" between_segments = between_expression.split("-") between_segment_1_description = get_single_item_description(between_segments[0]) between_segment_2_description = get_single_item_description(between_segments[1]) between_segment_2_description = between_segment_2_description.replace(":00", ":59") between_description_format = get_between_description_format(between_expression) description += between_description_format.format(between_segment_1_description, between_segment_2_description) return description def _describe_step_in_comma( self, segment: str, get_interval_description_format: Callable[[str], str], get_range_format: Callable[[str], str], get_single_item_description: Callable[[str], str], ) -> str: """Describes a step expression that appears inside a comma-separated list. For example, given "6-23/2" from the expression "0,6-23/2", this produces "every 2 hours, 06:00 AM through 11:59 PM". """ sub_segments = segment.split("/") step_description = get_interval_description_format(sub_segments[1]).format(sub_segments[1]) if "-" in sub_segments[0]: between_desc = self.generate_between_segment_description( sub_segments[0], get_range_format, get_single_item_description, ) between_desc = between_desc.replace(", ", "") step_description += ", " + between_desc elif sub_segments[0] != "*": range_item = get_single_item_description(sub_segments[0]) step_description += ", " + self.translate("starting {0}").format(range_item) return step_description def format_time( self, hour_expression: str, minute_expression: str, second_expression: str | None=None, ) -> str: """Given time parts, will construct a formatted time description Args: hour_expression: Hours part minute_expression: Minutes part second_expression: Seconds part Returns: Formatted time description """ hour = int(hour_expression) period = "" if self._options.use_24hour_time_format is False: period = self.translate("PM") if (hour >= 12) else self.translate("AM") if period: # add preceding space period = " " + period if hour > 12: hour -= 12 if hour == 0: hour = 12 minute = str(int(minute_expression)) # Removes leading zero if any second = "" if second_expression is not None and second_expression: second = "{}{}".format(":", str(int(second_expression)).zfill(2)) return f"{str(hour).zfill(2)}:{minute.zfill(2)}{second}{period}" def transform_verbosity(self, description: str, *, use_verbose_format: bool = False) -> str: """Transforms the verbosity of the expression description by stripping verbosity from original description Args: description: The description to transform use_verbose_format: If True, will leave description as it, if False, will strip verbose parts Returns: The transformed description with proper verbosity """ if not use_verbose_format: description = description.replace(self.translate(", every minute"), "") description = description.replace(self.translate(", every hour"), "") description = description.replace(self.translate(", every day"), "") description = re.sub(r", ?$", "", description) return description @staticmethod def transform_case(description: str, case_type: CasingTypeEnum) -> str: """Transforms the case of the expression description, based on options Args: description: The description to transform case_type: The casing type that controls the output casing Returns: The transformed description with proper casing """ if case_type == CasingTypeEnum.Sentence: description = f"{description[0].upper()}{description[1:]}" elif case_type == CasingTypeEnum.Title: description = description.title() else: description = description.lower() return description @staticmethod def number_to_day(day_number: int) -> str: """Returns localized day name by its CRON number Args: day_number: Number of a day Returns: Day corresponding to day_number Raises: IndexError: When day_number is not found """ try: return [ calendar.day_name[6], calendar.day_name[0], calendar.day_name[1], calendar.day_name[2], calendar.day_name[3], calendar.day_name[4], calendar.day_name[5], ][day_number] except IndexError as e: msg = f"Day {day_number} is out of range!" raise IndexError(msg) from e def __str__(self) -> str: return self.get_description() def __repr__(self) -> str: return self.get_description() def get_description(expression: str, options: Options | None=None) -> str: """Generates a human readable string for the Cron Expression Args: expression: The cron expression string options: Options to control the output description Returns: The cron expression description """ descriptor = ExpressionDescriptor(expression, options) return descriptor.get_description(DescriptionTypeEnum.FULL) Salamek-cron-descriptor-b4a8c7c/cron_descriptor/ExpressionParser.py000066400000000000000000000221611516023643100257670ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import re from typing import ClassVar from .Exception import FormatError, MissingFieldError from .Options import Options class ExpressionParser: _expression = "" _options: Options _cron_days: ClassVar[dict[int, str]] = { 0: "SUN", 1: "MON", 2: "TUE", 3: "WED", 4: "THU", 5: "FRI", 6: "SAT", } _cron_months: ClassVar[dict[int, str]] = { 1: "JAN", 2: "FEB", 3: "MAR", 4: "APR", 5: "MAY", 6: "JUN", 7: "JUL", 8: "AUG", 9: "SEP", 10: "OCT", 11: "NOV", 12: "DEC", } def __init__(self, expression: str, options: Options) -> None: """Initializes a new instance of the ExpressionParser class Args: expression: The cron expression string options: Parsing options """ self._expression = expression self._options = options def parse(self) -> list[str]: """Parses the cron expression string Returns: A 7 part string array, one part for each component of the cron expression (seconds, minutes, etc.) Raises: MissingFieldException: if _expression is empty or None FormatException: if _expression has wrong format """ # Initialize all elements of parsed array to empty strings parsed = ["", "", "", "", "", "", ""] if not self._expression: msg = "ExpressionDescriptor.expression" raise MissingFieldError(msg) expression_parts_temp = self._expression.split() expression_parts_temp_length = len(expression_parts_temp) if expression_parts_temp_length < 5: msg = f"Error: Expression only has {expression_parts_temp_length} parts. At least 5 part are required." raise FormatError(msg) if expression_parts_temp_length == 5: # 5 part cron so shift array past seconds element for i, expression_part_temp in enumerate(expression_parts_temp): parsed[i + 1] = expression_part_temp elif expression_parts_temp_length == 6: # We will detect if this 6 part expression has a year specified and if so we will shift the parts and treat the # first part as a minute part rather than a second part. # Ways we detect: # 1. Last part is a literal year (i.e. 2020) # 2. 3rd or 5th part is specified as "?" (DOM or DOW) year_regex = re.compile(r"\d{4}$") is_year_with_no_seconds_part = bool(year_regex.search(expression_parts_temp[5])) or "?" in [expression_parts_temp[4], expression_parts_temp[2]] for i, expression_part_temp in enumerate(expression_parts_temp): if is_year_with_no_seconds_part: # Shift parts over by one parsed[i + 1] = expression_part_temp else: parsed[i] = expression_part_temp elif expression_parts_temp_length == 7: parsed = expression_parts_temp else: msg = f"Error: Expression has too many parts ({expression_parts_temp_length}). Expression must not have more than 7 parts." raise FormatError(msg) self.normalize_expression(parsed) return parsed def normalize_expression(self, expression_parts: list[str]) -> None: """Converts cron expression components into consistent, predictable formats. Args: expression_parts: A 7 part string array, one part for each component of the cron expression Returns: None """ # convert ? to * only for DOM and DOW expression_parts[3] = expression_parts[3].replace("?", "*") expression_parts[5] = expression_parts[5].replace("?", "*") # convert 0/, 1/ to */ if expression_parts[0].startswith("0/"): expression_parts[0] = expression_parts[0].replace("0/", "*/") # seconds if expression_parts[1].startswith("0/"): expression_parts[1] = expression_parts[1].replace("0/", "*/") # minutes if expression_parts[2].startswith("0/"): expression_parts[2] = expression_parts[2].replace("0/", "*/") # hours if expression_parts[3].startswith("1/"): expression_parts[3] = expression_parts[3].replace("1/", "*/") # DOM if expression_parts[4].startswith("1/"): expression_parts[4] = expression_parts[4].replace("1/", "*/") # Month if expression_parts[5].startswith("1/"): expression_parts[5] = expression_parts[5].replace("1/", "*/") # DOW if expression_parts[6].startswith("1/"): expression_parts[6] = expression_parts[6].replace("1/", "*/") # Years # Adjust DOW based on dayOfWeekStartIndexZero option def digit_replace(match: re.Match[str]) -> str: match_value = match.group() dow_digits = re.sub(r"\D", "", match_value) dow_digits_adjusted = dow_digits if self._options.day_of_week_start_index_zero: if dow_digits == "7": dow_digits_adjusted = "0" else: dow_digits_adjusted = str(int(dow_digits) - 1) return match_value.replace(dow_digits, dow_digits_adjusted) expression_parts[5] = re.sub(r"(^\d)|([^#/\s]\d)", digit_replace, expression_parts[5]) # Convert DOM '?' to '*' if expression_parts[3] == "?": expression_parts[3] = "*" # convert SUN-SAT format to 0-6 format for day_number in self._cron_days: expression_parts[5] = expression_parts[5].upper().replace(self._cron_days[day_number], str(day_number)) # convert JAN-DEC format to 1-12 format for month_number in self._cron_months: expression_parts[4] = expression_parts[4].upper().replace( self._cron_months[month_number], str(month_number)) # convert 0 second to (empty) if expression_parts[0] == "0": expression_parts[0] = "" # If time interval is specified for seconds or minutes and next time part is single item, make it a "self-range" so # the expression can be interpreted as an interval 'between' range. # For example: # 0-20/3 9 * * * => 0-20/3 9-9 * * * (9 => 9-9) # */5 3 * * * => */5 3-3 * * * (3 => 3-3) star_and_slash = ["*", "/"] has_part_zero_star_and_slash = any(ext in expression_parts[0] for ext in star_and_slash) has_part_one_star_and_slash = any(ext in expression_parts[1] for ext in star_and_slash) has_part_two_special_chars = any(ext in expression_parts[2] for ext in ["*", "-", ",", "/"]) if not has_part_two_special_chars and (has_part_zero_star_and_slash or has_part_one_star_and_slash): expression_parts[2] += f"-{expression_parts[2]}" # Loop through all parts and apply global normalization length = len(expression_parts) for i in range(length): # convert all '*/1' to '*' if expression_parts[i] == "*/1": expression_parts[i] = "*" """ Convert Month,DOW,Year step values with a starting value (i.e. not '*') to between expressions. This allows us to reuse the between expression handling for step values. For Example: - month part '3/2' will be converted to '3-12/2' (every 2 months between March and December) - DOW part '3/2' will be converted to '3-6/2' (every 2 days between Tuesday and Saturday) """ if "/" in expression_parts[i] and not any(exp in expression_parts[i] for exp in ["*", "-", ","]): choices = { 4: "12", 5: "6", 6: "9999", } step_range_through = choices.get(i) if step_range_through is not None: parts = expression_parts[i].split("/") expression_parts[i] = f"{parts[0]}-{step_range_through}/{parts[1]}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/ExpressionValidator.py000066400000000000000000000674501516023643100264720ustar00rootroot00000000000000from __future__ import annotations import re from typing import ClassVar from cron_descriptor import FormatError class ExpressionValidator: _cron_days: ClassVar[dict[int, str]] = { 0: "SUN", 1: "MON", 2: "TUE", 3: "WED", 4: "THU", 5: "FRI", 6: "SAT", } _cron_months: ClassVar[dict[int, str]] = { 1: "JAN", 2: "FEB", 3: "MAR", 4: "APR", 5: "MAY", 6: "JUN", 7: "JUL", 8: "AUG", 9: "SEP", 10: "OCT", 11: "NOV", 12: "DEC", } def validate(self, expression: str) -> None: """Parses the cron expression string Returns: A 7 part string array, one part for each component of the cron expression (seconds, minutes, etc.) Raises: MissingFieldException: if _expression is empty or None FormatException: if _expression has wrong format """ # Initialize all elements of parsed array to empty strings parsed = ["", "", "", "", "", "", ""] expression_parts_temp = expression.split() expression_parts_temp_length = len(expression_parts_temp) if expression_parts_temp_length < 5: msg = f"Error: Expression only has {expression_parts_temp_length} parts. At least 5 part are required." raise FormatError(msg) if expression_parts_temp_length == 5: # 5 part cron so shift array past seconds element for i, expression_part_temp in enumerate(expression_parts_temp): parsed[i + 1] = expression_part_temp elif expression_parts_temp_length == 6: # We will detect if this 6 part expression has a year specified and if so we will shift the parts and treat the # first part as a minute part rather than a second part. # Ways we detect: # 1. Last part is a literal year (i.e. 2020) # 2. 3rd or 5th part is specified as "?" (DOM or DOW) year_regex = re.compile(r"\d{4}$") is_year_with_no_seconds_part = bool(year_regex.search(expression_parts_temp[5])) or "?" in [ expression_parts_temp[4], expression_parts_temp[2]] for i, expression_part_temp in enumerate(expression_parts_temp): if is_year_with_no_seconds_part: # Shift parts over by one parsed[i + 1] = expression_part_temp else: parsed[i] = expression_part_temp elif expression_parts_temp_length == 7: parsed = expression_parts_temp else: msg = f"Error: Expression has too many parts ({expression_parts_temp_length}). Expression must not have more than 7 parts." raise FormatError(msg) self._validate_expression(parsed, expression_parts_temp_length) def _validate_expression(self, expression_parts: list[str], expr_length: int) -> None: """Validation for each expression fields Args: expression_parts: expression list expr_length: length of the list """ """ Apply different index for varying length of the expression parts as it is mutated by parse(). Does not validate the case for having both DOW,DOM value because it is already causing exception. """ if expr_length == 5: self.second_minute(expression_parts[1], "Second and Minute") self.hour(expression_parts[2], "Hour") self.dayofmonth(expression_parts[3], "DayOfMonth") self.month(expression_parts[4], "Month") self.dayofweek(expression_parts[5], "DayOfWeek") elif expr_length == 6: year_regex = re.compile(r"\d{4}$") if year_regex.search(expression_parts[6]) is None: if expression_parts[0]: self.second_minute(expression_parts[0], "Second and Minute") self.second_minute(expression_parts[1], "Second and Minute") self.hour(expression_parts[2], "Hour") self.dayofmonth(expression_parts[3], "DayOfMonth") self.month(expression_parts[4], "Month") self.dayofweek(expression_parts[5], "DayOfWeek") else: self.second_minute(expression_parts[1], "Second and Minute") self.hour(expression_parts[2], "Hour") self.dayofmonth(expression_parts[3], "DayOfMonth") self.month(expression_parts[4], "Month") self.dayofweek(expression_parts[5], "DayOfWeek") self.year(expression_parts[6], "Year") else: if expression_parts[0]: self.second_minute(expression_parts[0], "Second and Minute") self.second_minute(expression_parts[1], "Second and Minute") self.hour(expression_parts[2], "Hour") self.dayofmonth(expression_parts[3], "DayOfMonth") self.month(expression_parts[4], "Month") self.dayofweek(expression_parts[5], "DayOfWeek") if expression_parts[6]: self.year(expression_parts[6], "Year") def second_minute(self, expr: str, prefix: str) -> None: """ sec/min expressions (n : Number, s: String) * nn (1~59) nn-nn nn/nn nn-nn/nn */nn nn,nn,nn (Maximum 24 elements) """ mi, mx = (0, 59) if re.match(r"\d{1,2}$", expr): self.check_range(expr=expr, mi=mi, mx=mx, prefix=prefix) elif re.search(r"[-*,/]", expr): if expr == "*": pass elif re.match(r"\d{1,2}-\d{1,2}$", expr): parts = expr.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}-\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") fst_parts = parts[0].split("-") self.check_range(expr=fst_parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=fst_parts[0], ed=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\*/\d{1,2}$", expr): parts = expr.split("/") self.check_range(type_="interval", expr=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"^(\d{1,2}|\d{1,2}-\d{1,2})(,\d{1,2}|,\d{1,2}-\d{1,2})+$", expr): limit = 60 expr_ls = expr.split(",") if len(expr_ls) > limit: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) for n in expr_ls: if "-" in n: parts = n.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) else: self.check_range(expr=n, mi=mi, mx=mx, prefix=prefix) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) def hour(self, expr: str, prefix: str) -> None: """ hour expressions (n : Number, s: String) * nn (1~23) nn-nn nn/nn nn-nn/nn */nn nn,nn,nn (Maximum 24 elements) """ mi, mx = (0, 23) if re.match(r"\d{1,2}$", expr): self.check_range(expr=expr, mi=mi, mx=mx, prefix=prefix) elif re.search(r"[-*,/]", expr): if expr == "*": pass elif re.match(r"\d{1,2}-\d{1,2}$", expr): parts = expr.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}-\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") fst_parts = parts[0].split("-") self.check_range(expr=fst_parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=fst_parts[0], ed=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\*/\d{1,2}$", expr): parts = expr.split("/") self.check_range(type_="interval", expr=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"^(\d{1,2}|\d{1,2}-\d{1,2})(,\d{1,2}|,\d{1,2}-\d{1,2})+$", expr): limit = 24 expr_ls = expr.split(",") if len(expr_ls) > limit: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) for n in expr_ls: if "-" in n: parts = n.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) else: self.check_range(expr=n, mi=mi, mx=mx, prefix=prefix) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) def dayofmonth(self, expr: str, prefix: str) -> None: """ DAYOfMonth expressions (n : Number, s: String) * ? nn (1~31) nn-nn nn/nn nn-nn/nn */nn nn,nn,nn (Maximum 31 elements) L-nn LW nW """ mi, mx = (1, 31) if re.match(r"\d{1,2}$", expr): self.check_range(expr=expr, mi=mi, mx=mx, prefix=prefix) elif re.search(r"[-*,/?]", expr): if expr in ("*", "?"): pass elif re.match(r"\d{1,2}-\d{1,2}$", expr): parts = expr.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}-\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") fst_parts = parts[0].split("-") self.check_range(expr=fst_parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=fst_parts[0], ed=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"\*/\d{1,2}$", expr): parts = expr.split("/") self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"^\d{1,2}(,\d{1,2})+$", expr): limit = 31 expr_ls = expr.split(",") if len(expr_ls) > 31: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) for dayofmonth in expr_ls: self.check_range(expr=dayofmonth, mi=mi, mx=mx, prefix=prefix) elif re.match(r"^([Ll])-(\d{1,2})$", expr): parts = expr.split("-") self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) else: msg = f"Illegal Expression Format '{expr}'" raise FormatError(msg) elif re.match(r"^([Ll])([Ww])?$", expr) or re.match(r"^([Ww])([Ll])?$", expr): pass elif re.match(r"^(\d{1,2})([wW])$", expr): self.check_range(expr=expr[:-1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"^([wW])(\d{1,2})$", expr): self.check_range(expr=expr[1:], mi=mi, mx=mx, prefix=prefix) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) def month(self, expr: str, prefix: str) -> None: """ month expressions (n : Number, s: String) * nn (1~12) sss (JAN~DEC) nn-nn sss-sss nn/nn nn-nn/nn */nn nn,nn,nn,nn-nn,sss-sss (Maximum 12 elements) """ mi, mx = (1, 12) if re.match(r"\d{1,2}$", expr): self.check_range(expr=expr, mi=mi, mx=mx, prefix=prefix) elif re.match(r"\D{3}$", expr): matched_month = [m for m in self._cron_months.values() if expr == m] if len(matched_month) == 0: msg = f"Invalid Month value '{expr}'" raise FormatError(msg) elif re.search(r"[-*,/]", expr): if expr == "*": pass elif re.match(r"\d{1,2}-\d{1,2}$", expr): parts = expr.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\D{3}-\D{3}$", expr): parts = expr.split("-") cron_months = {v: k for (k, v) in self._cron_months.items()} st_not_exist = parts[0] not in cron_months ed_not_exist = parts[1] not in cron_months if st_not_exist or ed_not_exist: msg = f"Invalid Month value '{expr}'" raise FormatError(msg) self.compare_range(st=cron_months[parts[0]], ed=cron_months[parts[1]], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"\d{1,2}-\d{1,2}/\d{1,2}$", expr): parts = expr.split("/") fst_parts = parts[0].split("-") self.check_range(expr=fst_parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=fst_parts[0], ed=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=12, prefix=prefix) elif re.match(r"\*/\d{1,2}$", expr): parts = expr.split("/") self.check_range(type_="interval", expr=parts[1], mi=0, mx=12, prefix=prefix) elif re.match(r"^\d{1,2}(,\d{1,2})+$", expr): limit = 12 expr_ls = expr.split(",") if len(expr_ls) > limit: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) for month in expr_ls: self.check_range(expr=month, mi=mi, mx=mx, prefix=prefix) elif re.match(r"^((\d{1,2}|\D{3})|(\D{3}-\D{3})|(\d{1,2}-\d{1,2}))((,\d{1,2})+" r"|(,\D{3})*|(,\d{1,2}-\d{1,2})*|(,\D{3}-\D{3})*)*$", expr): """ 1st Capture group : digit{1~2}|nondigit{3}|nondigit{3}-nondigit{3}|digit{3}-digit{3} 2nd Capture group : same with 1st capture group but repeated. """ limit = 12 expr_ls = expr.split(",") if len(expr_ls) > limit: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) cron_months = {v: k for (k, v) in self._cron_months.items()} for month in expr_ls: if "-" in month: parts = month.split("-") if len(parts[0]) == 3: self.check_range(expr=cron_months[parts[0].upper()], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=cron_months[parts[1].upper()], mi=mi, mx=mx, prefix=prefix) else: self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) else: cron_month = cron_months[month.upper()] if len(month) == 3 else month self.check_range(expr=cron_month, mi=mi, mx=mx, prefix=prefix) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) def dayofweek(self, expr: str, prefix: str) -> None: """ DAYOfWeek expressions (n : Number, s: String) * ? n (0~7) - 0 and 7 used interchangeable as Sunday sss (SUN~SAT) n/n n-n/n */n n-n sss-sss n|sss,n|sss,n|sss,n-n,sss-sss (maximum 7 elements) nL n#n """ mi, mx = (0, 7) if expr in ("*", "?"): pass elif re.match(r"\d{1}$", expr): self.check_range(expr=expr, mi=mi, mx=mx, prefix=prefix) elif re.match(r"\D{3}$", expr): cron_days = {v: k for (k, v) in self._cron_days.items()} if expr.upper() in cron_days: pass else: msg = f"Invalid value '{expr}'" raise FormatError(msg) elif re.match(r"\d{1}/\d{1}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"\d{1}-\d{1}/\d{1}$", expr): parts = expr.split("/") fst_parts = parts[0].split("-") self.check_range(expr=fst_parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=fst_parts[0], ed=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"[*]/\d{1}$", expr): parts = expr.split("/") self.check_range(type_="interval", expr=parts[1], mi=0, mx=mx, prefix=prefix) elif re.match(r"\d{1}-\d{1}$", expr): parts = expr.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\D{3}-\D{3}$", expr): parts = expr.split("-") cron_days = {v: k for (k, v) in self._cron_days.items()} try: st_day = cron_days[parts[0].upper()] ed_day = cron_days[parts[1].upper()] except KeyError as e: msg = f"({prefix}) Invalid value '{expr}'" raise FormatError(msg) from e self.compare_range(st=st_day, ed=ed_day, mi=mi, mx=mx, prefix=prefix, type_="dow") elif re.match(r"^((\d{1}|\D{3})|(\D{3}-\D{3})|(\d{1}-\d{1}))" r"((,\d{1})+|(,\D{3})*|(,\d{1}-\d{1})*|(,\D{3}-\D{3})*)*$", expr): limit = 7 expr_ls = expr.split(",") if len(expr_ls) > limit: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) cron_days = {v: k for (k, v) in self._cron_days.items()} for day in expr_ls: if "-" in day: parts = day.split("-") if len(parts[0]) == 3: self.check_range(expr=cron_days[parts[0].upper()], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=cron_days[parts[1].upper()], mi=mi, mx=mx, prefix=prefix) else: self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) else: # syncronize by add 1 to cron_days index cron_day = cron_days[day.upper()] + 1 if len(day) == 3 else day self.check_range(expr=cron_day, mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{1}([lL])$", expr): parts = expr.upper().split("L") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d#\d$", expr): parts = expr.split("#") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=5, prefix=prefix, type_="dow") elif re.match(r"\D{3}#\d$", expr): parts = expr.split("#") cron_days = {v: k for (k, v) in self._cron_days.items()} try: st_day = cron_days[parts[0].upper()] except KeyError as e: msg = f"({prefix}) Invalid value '{expr}'" raise FormatError(msg) from e self.check_range(expr=parts[1], mi=mi, mx=5, prefix=prefix, type_="dow") else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) def year(self, expr: str, prefix: str) -> None: """ Year - valid expression (n : Number) * nnnn(1970~2099) - 4 digits number nnnn-nnnn(1970~2099) nnnn/nnn(0~129) */nnn(0~129) nnnn,nnnn,nnnn(1970~2099) - maximum 86 elements """ mi, mx = (1970, 2099) if re.match(r"\d{4}$", expr): self.check_range(expr=expr, mi=mi, mx=mx, prefix=prefix) elif re.search(r"[-*,/]", expr): if expr == "*": pass elif re.match(r"\d{4}-\d{4}$", expr): parts = expr.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) elif re.match(r"\d{4}/\d{1,3}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=129, prefix=prefix) elif re.match(r"\d{4}-\d{4}/\d{1,3}$", expr): parts = expr.split("/") fst_parts = parts[0].split("-") self.check_range(expr=fst_parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=fst_parts[0], ed=fst_parts[1], mi=mi, mx=mx, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=129, prefix=prefix) elif re.match(r"\*/\d{1,3}$", expr): parts = expr.split("/") self.check_range(type_="interval", expr=parts[1], mi=0, mx=129, prefix=prefix) elif re.match(r"\d{1}/\d{1,3}$", expr): parts = expr.split("/") self.check_range(expr=parts[0], mi=0, mx=129, prefix=prefix) self.check_range(type_="interval", expr=parts[1], mi=0, mx=129, prefix=prefix) elif re.match(r"^(\d{4}|\d{4}-\d{4})(,\d{4}|,\d{4}-\d{4})+$", expr): limit = 84 expr_ls = expr.split(",") if len(expr_ls) > limit: msg = f"({prefix}) Exceeded maximum number({limit}) of specified value. '{len(expr_ls)}' is provided" raise FormatError(msg) for year in expr_ls: if "-" in year: parts = year.split("-") self.check_range(expr=parts[0], mi=mi, mx=mx, prefix=prefix) self.check_range(expr=parts[1], mi=mi, mx=mx, prefix=prefix) self.compare_range(st=parts[0], ed=parts[1], mi=mi, mx=mx, prefix=prefix) else: self.check_range(expr=year, mi=mi, mx=mx, prefix=prefix) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) else: msg = f"({prefix}) Illegal Expression Format '{expr}'" raise FormatError(msg) def check_range(self, prefix: str, mi: int, mx: int, expr: str | int, type_: str| None=None) -> None: """ check if expression value within range of specified limit """ if int(expr) < mi or mx < int(expr): if type_ is None: msg = f"{prefix} values must be between {mi} and {mx} but '{expr}' is provided" elif type_ == "interval": msg = f"({prefix}) Accepted increment value range is {mi}~{mx} but '{expr}' is provided" elif type_ == "dow": msg = f"({prefix}) Accepted week value is {mi}~{mx} but '{expr}' is provided" else: msg = "" raise FormatError(msg) def compare_range(self, prefix: str, st: str | int, ed: str | int, mi:int, mx: int, type_: str | None=None) -> None: """ check 2 expression values size does not allow {st} value to be greater than {ed} value """ st_int = int(st) ed_int = int(ed) if st_int > ed_int: if type_ is None: msg = f"({prefix}) Invalid range '{st}-{ed}'. Accepted range is {mi}-{mx}" elif type_ == "dow": msg = f"({prefix}) Invalid range '{self._cron_days[st_int]}-{self._cron_days[ed_int]}'. Accepted range is {mi}-{mx}" else: msg = "" raise FormatError(msg) Salamek-cron-descriptor-b4a8c7c/cron_descriptor/GetText.py000066400000000000000000000050271516023643100240410ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from __future__ import annotations import gettext import logging from pathlib import Path logger = logging.getLogger(__name__) class FallBackNull(gettext.NullTranslations): def gettext(self, _message: str) -> str: # If we get here, that means that original translator failed, we will return empty string return "" class GetText: """Handles language translations """ def __init__(self, locale_code: str, locale_location: str | None = None) -> None: """Initialize GetText :param locale_code selected locale """ try: self.trans = self.load_locale(locale_code, locale_location) except OSError: logger.debug("Failed to find locale %s", locale_code) logger.debug("Attempting to load en_US as fallback") self.trans = self.load_locale("en_US") # Add fallback that does not return original string, this is hack to add # support for _("") or _("") self.trans.add_fallback(FallBackNull()) def load_locale(self, locale_code: str, locale_location: str | None=None) -> gettext.GNUTranslations: dir_path = Path(locale_location) if locale_location else Path(__file__).resolve().parent.joinpath("locale") filename = dir_path.joinpath(f"{locale_code}.mo") with filename.open("rb") as f: trans = gettext.GNUTranslations(f) logger.debug("%s Loaded", filename) return trans Salamek-cron-descriptor-b4a8c7c/cron_descriptor/Options.py000066400000000000000000000065001516023643100241050ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from __future__ import annotations import locale import warnings from .CasingTypeEnum import CasingTypeEnum class Options: """ Options for parsing and describing a Cron Expression """ locale_code: str casing_type: CasingTypeEnum verbose: bool day_of_week_start_index_zero: bool use_24hour_time_format: bool locale_location: str | None _twelve_hour_locales = ( "en_US", # United States "en_CA", # Canada (English) "fr_CA", # Canada (French) "en_AU", # Australia "en_NZ", # New Zealand "en_IE", # Ireland "en_PH", # Philippines "es_MX", # Mexico "en_PK", # Pakistan "en_IN", # India "ar_SA", # Saudi Arabia "bn_BD", # Bangladesh "es_HN", # Honduras "es_SV", # El Salvador "es_NI", # Nicaragua "ar_JO", # Jordan "ar_EG", # Egypt "es_CO", # Colombia ) def __init__(self, casing_type: CasingTypeEnum = CasingTypeEnum.Sentence, *, verbose: bool = False, day_of_week_start_index_zero: bool = True, use_24hour_time_format: bool | None = None, locale_code: str | None = None, locale_location: str | None = None, ) -> None: self.casing_type = casing_type self.verbose = verbose self.day_of_week_start_index_zero = day_of_week_start_index_zero self.locale_location = locale_location if not locale_code: # Autodetect code, _encoding = locale.getlocale() if not code: warnings.warn( "No system locale set. Falling back to 'en_US'. " "Set LANG/LC_ALL or pass locale_code to override.", stacklevel=2, ) code = "en_US" self.locale_code = code else: self.locale_code = locale_code if use_24hour_time_format is None: # Autodetect self.use_24hour_time_format = self.locale_code not in self._twelve_hour_locales else: self.use_24hour_time_format = use_24hour_time_format Salamek-cron-descriptor-b4a8c7c/cron_descriptor/StringBuilder.py000066400000000000000000000032121516023643100252240ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. class StringBuilder: string: list[str] """ Builds string parts together acting like Java/.NET StringBuilder """ def __init__(self) -> None: self.string = [] def append(self, string: str) -> None: """Appends non empty string Args: string: String to append Returns: None """ if string: self.string.append(string) def __str__(self) -> str: return "".join(self.string) def __len__(self) -> int: return len(self.string) Salamek-cron-descriptor-b4a8c7c/cron_descriptor/__init__.py000066400000000000000000000033361516023643100242150ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from .CasingTypeEnum import CasingTypeEnum from .DescriptionTypeEnum import DescriptionTypeEnum from .Exception import FormatError, FormatException, MissingFieldError, MissingFieldException, WrongArgumentError, WrongArgumentException from .ExpressionDescriptor import ExpressionDescriptor, get_description from .Options import Options __version__ = "2.0.8" __all__ = [ "CasingTypeEnum", "DescriptionTypeEnum", "ExpressionDescriptor", "FormatError", "FormatException", "MissingFieldError", "MissingFieldException", "Options", "WrongArgumentError", "WrongArgumentException", "get_description", ] Salamek-cron-descriptor-b4a8c7c/cron_descriptor/__main__.py000066400000000000000000000016461516023643100242000ustar00rootroot00000000000000import argparse from cron_descriptor import CasingTypeEnum, ExpressionDescriptor, Options parser = argparse.ArgumentParser(prog="cron_descriptor") parser.add_argument("expression") parser.add_argument("-c", "--casing", choices=[v for v in vars(CasingTypeEnum) if not v.startswith("_")], default="Sentence") parser.add_argument("-v", "--verbose", action="store_true") parser.add_argument("-W", "--one-indexed-week", action="store_true") parser.add_argument("-H", "--use-24-hour-time-format", action="store_true") args = parser.parse_args() options = Options() options.casing_type = getattr(CasingTypeEnum, args.casing) options.verbose = args.verbose options.day_of_week_start_index_zero = not args.one_indexed_week options.use_24hour_time_format = args.use_24_hour_time_format descriptor = ExpressionDescriptor(args.expression, options) print(str(descriptor)) Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/000077500000000000000000000000001516023643100233365ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/cs_CZ.mo000066400000000000000000000055341516023643100247030ustar00rootroot00000000000000ή•,|;άΘΙΞΤ&ζ  &5Fcvˆ ’¬"Λξ  ' 5C_U΅Έ Όέδ  4 ? LYi{“ ™§%­Σ'Ϊ' HK O] |Š›¬Αίυ  $ %? e € ‘ Ÿ ­ MΊ    - 3 A _ n } Œ œ ° Δ Ω ΰ η ώ    4 < & ", *!%  (+#$' ) and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: PO-Revision-Date: 2022-06-29 23:06+0200 Last-Translator: Adam Schubert Language-Team: Language: cs_CZ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 3.0.1 a a {0} mΔ›sΓ­ce, mezi {0} a {1} dnem mΔ›sΓ­ce, kaΕΎdΓ½ den, kaΕΎdou hodinu, kaΕΎdou minutu, kaΕΎdΓ½ch {0} dnΕ―, kaΕΎdΓ½ch {0} dnΕ― v tΓ½dnu, kaΕΎdΓ½ {0} mΔ›sΓ­c, kaΕΎdΓ½ {0} rok, v {0} den v mΔ›sΓ­ci, na , v poslednΓ­ den mΔ›sΓ­ce, v poslednΓ­ vΕ‘ednΓ­ den v mΔ›sΓ­ci, v poslednΓ­ {0} mΔ›sΓ­ce, v {0} mΔ›sΓ­ce, pouze v {0}, pouze v {0}, {0} do {1}Nastala chyba pΕ™i generovΓ‘nΓ­ popisu vΓ½razu. Zkontrolujte syntaxi vΓ½razu.VeVe KaΕΎdou minutu mezi {0} a {1}v {0}v minutΔ› {0}v {0} sekund uplynulou minutumezi {0} a {1}kaΕΎdou hodinukaΕΎdou minutukaΕΎdou sekundukaΕΎdΓ½ch {0} hodinkaΕΎdΓ½ch {0} minutkaΕΎdΓ½ch {0} sekundpΓ‘tΓ½prvnΓ­prvnΓ­ vΓ­kendovΓ½ denčtvrtΓ½{0} aΕΎ {1} minutdruhΓ½{0} aΕΎ {1} sekundtΕ™etΓ­nejbliΕΎΕ‘Γ­ vΕ‘ednΓ­ den k {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/cs_CZ.po000066400000000000000000000116351516023643100247050ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2022-06-29 23:06+0200\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0.1\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "Nastala chyba pΕ™i generovΓ‘nΓ­ popisu vΓ½razu. Zkontrolujte syntaxi vΓ½razu." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Ve " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "KaΕΎdou minutu mezi {0} a {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Ve" #: ExpressionDescriptor.py:175 msgid " and" msgstr " a" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "kaΕΎdou sekundu" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "kaΕΎdΓ½ch {0} sekund" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "{0} aΕΎ {1} sekund" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "v {0} sekund uplynulou minutu" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "kaΕΎdou minutu" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "kaΕΎdΓ½ch {0} minut" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "{0} aΕΎ {1} minut" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "v minutΔ› {0}" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "kaΕΎdou hodinu" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "kaΕΎdΓ½ch {0} hodin" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "mezi {0} a {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "v {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "prvnΓ­" #: ExpressionDescriptor.py:243 msgid "second" msgstr "druhΓ½" #: ExpressionDescriptor.py:245 msgid "third" msgstr "tΕ™etΓ­" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "čtvrtΓ½" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "pΓ‘tΓ½" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", na " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} mΔ›sΓ­ce" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", v poslednΓ­ {0} mΔ›sΓ­ce" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", pouze v {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", kaΕΎdΓ½ den" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", kaΕΎdΓ½ch {0} dnΕ― v tΓ½dnu" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} do {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", kaΕΎdΓ½ {0} mΔ›sΓ­c" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", pouze v {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", v poslednΓ­ den mΔ›sΓ­ce" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", v poslednΓ­ vΕ‘ednΓ­ den v mΔ›sΓ­ci" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "prvnΓ­ vΓ­kendovΓ½ den" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "nejbliΕΎΕ‘Γ­ vΕ‘ednΓ­ den k {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", v {0} mΔ›sΓ­ce" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", kaΕΎdΓ½ch {0} dnΕ―" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", mezi {0} a {1} dnem mΔ›sΓ­ce" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", v {0} den v mΔ›sΓ­ci" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", kaΕΎdΓ½ {0} rok" #: ExpressionDescriptor.py:385 msgid " and " msgstr " a " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", kaΕΎdou minutu" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", kaΕΎdou hodinu" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/da_DK.mo000066400000000000000000000055701516023643100246440ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Π_βBE IjqŽ­ Α Μ Ωζφ  &4%;a'h–P" ; F R`pƒ–§ ΐΛ#λ / H T ` j )z € KΉ    * 1 N l ~ ˆ ” ‘ ° Α Σ Ω α ρ +ψ $ -* X _ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: da_DK MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit og og {0} i mΓ₯neden, mellem dag {0} og {1} i mΓ₯neden, hver dag, hver time, hvert minut, hver {0}. dag, hver {0}. ugedag, hver {0}. mΓ₯ned, hvert {0}. Γ₯r, pΓ₯ dag {0} i mΓ₯neden, pΓ₯ den , pΓ₯ den sidste dag i mΓ₯neden, pΓ₯ den sidste hverdag i mΓ₯neden, pΓ₯ den sidste {0} i mΓ₯neden, pΓ₯ den {0} i mΓ₯neden, kun i {0}, kun i {0}, kun {0}, startende {0}, {0} dage fΓΈr den sidste dag i mΓ₯neden, {0} til og med {1}Der skete en fejl ved genereringen af beskrivelsen. Kontroller cron reglen.klkl hvert minut mellem {0} og {1}kl {0}{0} minutter efter timeskift{0} sekunder efter minutskiftmellem {0} og {1}hver timehvert minuthvert sekundhver {0}. timehvert {0}. minuthvert {0}. sekundfemtefΓΈrstefΓΈrste hverdagfjerdeminutterne fra {0} til og med {1} hver timeandensekunderne fra {0} til og med {1} hvert minuttredjehverdag nΓ¦rmest dag {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/da_DK.po000066400000000000000000000076201516023643100246450ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: da_DK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "hvert minut" #. EveryHour msgid "every hour" msgstr "hver time" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Der skete en fejl ved genereringen af beskrivelsen. Kontroller cron reglen." #. AtSpace msgid "At " msgstr "kl " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "hvert minut mellem {0} og {1}" #. At msgid "At" msgstr "kl" #. SpaceAnd msgid " and" msgstr " og" #. EverySecond msgid "every second" msgstr "hvert sekund" #. EveryX0Seconds msgid "every {0} seconds" msgstr "hvert {0}. sekund" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "sekunderne fra {0} til og med {1} hvert minut" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "{0} sekunder efter minutskift" #. EveryX0Minutes msgid "every {0} minutes" msgstr "hvert {0}. minut" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "minutterne fra {0} til og med {1} hver time" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "{0} minutter efter timeskift" #. EveryX0Hours msgid "every {0} hours" msgstr "hver {0}. time" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "mellem {0} og {1}" #. AtX0 msgid "at {0}" msgstr "kl {0}" #. ComaEveryDay msgid ", every day" msgstr ", hver dag" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", hver {0}. ugedag" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0} til og med {1}" #. First msgid "first" msgstr "fΓΈrste" #. Second msgid "second" msgstr "anden" #. Third msgid "third" msgstr "tredje" #. Fourth msgid "fourth" msgstr "fjerde" #. Fifth msgid "fifth" msgstr "femte" #. ComaOnThe msgid ", on the " msgstr ", pΓ₯ den " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} i mΓ₯neden" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", pΓ₯ den sidste {0} i mΓ₯neden" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", kun {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", hver {0}. mΓ₯ned" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", kun i {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", pΓ₯ den sidste dag i mΓ₯neden" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", pΓ₯ den sidste hverdag i mΓ₯neden" #. FirstWeekday msgid "first weekday" msgstr "fΓΈrste hverdag" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "hverdag nΓ¦rmest dag {0}" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", pΓ₯ den {0} i mΓ₯neden" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", hver {0}. dag" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", mellem dag {0} og {1} i mΓ₯neden" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", pΓ₯ dag {0} i mΓ₯neden" #. SpaceAndSpace msgid " and " msgstr " og " #. ComaEveryMinute msgid ", every minute" msgstr ", hvert minut" #. ComaEveryHour msgid ", every hour" msgstr ", hver time" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", hvert {0}. Γ₯r" #. CommaStartingX0 msgid ", starting {0}" msgstr ", startende {0}" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} dage fΓΈr den sidste dag i mΓ₯neden" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", kun i {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/de_DE.mo000066400000000000000000000052151516023643100246360ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…А%  Ζ  ΰξώ->V\x˜΄ Θ Υ β_πP S W x  Ž ž ³ Ώ Λ Ψ ι ϊ    + 3 G O d l and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: de_DE und und {0} des Monats, zwischen Tag {0} und {1} des Monats, jeden Tag, jede Stunde, jede Minute, alle {0} Tage, every {0} days of the week, alle {0} Monate, alle {0} Jahre, am {0} Tag des Monats, am , am letzten Tag des Monats, am letzten Werktag des Monats, am letzten {0} des Monats, am {0} des Monats, nur im {0}, nur am {0}, {0} bis {1}An error occured when generating the expression description. Check the cron expression syntax.UmUm Jede Minute zwischen {0} und {1}um {0}bei Minute {0}bei Sekunde {0}zwischen {0} und {1}jede Stundejede MinuteJede Sekundealle {0} Stundenalle {0} Minutenalle {0} SekundenfΓΌnftenerstenersten WerktagviertenMinuten {0} bis {1}zweitenSekunden {0} bis {1}drittenWerktag am nΓ€chsten zum {0} TagSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/de_DE.po000066400000000000000000000116231516023643100246410ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de_DE\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "An error occured when generating the expression description. Check the cron" " expression syntax." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Um " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Jede Minute zwischen {0} und {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Um" #: ExpressionDescriptor.py:175 msgid " and" msgstr " und" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "Jede Sekunde" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "alle {0} Sekunden" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "Sekunden {0} bis {1}" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "bei Sekunde {0}" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "jede Minute" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "alle {0} Minuten" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "Minuten {0} bis {1}" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "bei Minute {0}" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "jede Stunde" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "alle {0} Stunden" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "zwischen {0} und {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "um {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "ersten" #: ExpressionDescriptor.py:243 msgid "second" msgstr "zweiten" #: ExpressionDescriptor.py:245 msgid "third" msgstr "dritten" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "vierten" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "fΓΌnften" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", am " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} des Monats" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", am letzten {0} des Monats" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", nur am {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", jeden Tag" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", every {0} days of the week" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} bis {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", alle {0} Monate" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", nur im {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", am letzten Tag des Monats" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", am letzten Werktag des Monats" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "ersten Werktag" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "Werktag am nΓ€chsten zum {0} Tag" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", am {0} des Monats" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", alle {0} Tage" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", zwischen Tag {0} und {1} des Monats" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", am {0} Tag des Monats" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", alle {0} Jahre" #: ExpressionDescriptor.py:385 msgid " and " msgstr " und " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", jede Minute" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", jede Stunde" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/el_GR.mo000066400000000000000000000071151516023643100246670ustar00rootroot00000000000000ή•1€,,-28&J q }Š™ͺΗΪμ "/Rq ‹ ™ §΅+Δπ_eh l—΄Σ η ς  .@F LZ%a‡'ŽΆΌPΤ%-6-KyŸ΅5Ρ ! '= e 6n G₯ /ν  : N b v W‘ ι ϊ ² ³ Ό /Ζ φ ϋ . >7 v ’ ’ !Ά Ψ ξ % , ; &F m 0~ ― @ΐ > and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}AMAn error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: el_GR MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit ΞΊΞ±ΞΉ ΞΊΞ±ΞΉ {0} του ΞΌΞΞ½Ξ±, μΡταξύ {0} ΞΊΞ±ΞΉ {1} του ΞΌΞΞ½Ξ±, κάθΡ μέρα, κάθΡ ώρα, κάθΡ Ξ»Ξ΅Ο€Ο„ΟŒ, κάθΡ {0} ημέρΡς, κάθΡ {0} ημέρΡς της Ρβδομάδας, κάθΡ {0} ΞΌΞνΡς, κάθΡ {0} Ο‡ΟΟŒΞ½ΞΉΞ±, την {0} ημέρα του ΞΌΞΞ½Ξ±, την, την τΡλΡυταία ημέρα του ΞΌΞΞ½Ξ±, την τΡλΡυταία Ρργάσιμη ημέρα του ΞΌΞΞ½Ξ±, την τΡλΡυταία {0} του ΞΌΞΞ½Ξ±, την {0} του ΞΌΞΞ½Ξ±, μόνο το {0}, μόνο το {0}, μόνο το {0}, ΞΎΞ΅ΞΊΞΉΞ½ΟŽΞ½Ο„Ξ±Ο‚ {0}, {0} ημέρΡς πριν Ξ±Ο€ΟŒ την τΡλΡυταία ημέρα του ΞΌΞΞ½Ξ±, {0} έως {1}Ο€.μΈνα σφάλμα συνέβη κατά τη δημιουργία της πΡριγραφΞΟ‚ έκφρασης. ΕλέγξτΡ τη σύνταξη της έκφρασης cron.ΣτιςΣτις ΚάθΡ Ξ»Ξ΅Ο€Ο„ΟŒ μΡταξύ {0} ΞΊΞ±ΞΉ {1}μμστις {0}στις {0} λΡπτά μΡτά την ΟŽΟΞ±ΟƒΟ„ΞΉΟ‚ {0} Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„Ξ± μΡτά το Ξ»Ξ΅Ο€Ο„ΟŒΞΌΞ΅Ο„Ξ±ΞΎΟ {0} ΞΊΞ±ΞΉ {1}κάθΡ ώρακάθΡ Ξ»Ξ΅Ο€Ο„ΟŒΞΊΞ¬ΞΈΞ΅ Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„ΞΏΞΊΞ¬ΞΈΞ΅ {0} ΟŽΟΞ΅Ο‚ΞΊΞ¬ΞΈΞ΅ {0} λΡπτάκάθΡ {0} Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„Ξ±Ο€Ξ­ΞΌΟ€Ο„ΞΏΟ‚Ο€ΟΟŽΟ„Ξ±Ο€ΟΟŽΟ„Ξ· Ρργάσιμη ημέρατέταρτοςλΡπτά {0} έως {1} μΡτά την ΟŽΟΞ±Ξ΄Ξ΅ΟΟ„Ξ΅ΟΞΏΟ‚Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„Ξ± {0} έως {1} μΡτά το Ξ»Ξ΅Ο€Ο„ΟŒΟ„ΟΞ―Ο„ΞΏΟ‚Ξ΅ΟΞ³Ξ¬ΟƒΞΉΞΌΞ· ημέρα κοντά στην ημέρα {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/el_GR.po000066400000000000000000000112041516023643100246640ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: el_GR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "κάθΡ Ξ»Ξ΅Ο€Ο„ΟŒ" #. EveryHour msgid "every hour" msgstr "κάθΡ ώρα" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Ένα σφάλμα συνέβη κατά τη δημιουργία της πΡριγραφΞΟ‚ έκφρασης. ΕλέγξτΡ τη " "σύνταξη της έκφρασης cron." #. AtSpace msgid "At " msgstr "Στις " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "ΚάθΡ Ξ»Ξ΅Ο€Ο„ΟŒ μΡταξύ {0} ΞΊΞ±ΞΉ {1}" #. At msgid "At" msgstr "Στις" #. SpaceAnd msgid " and" msgstr " ΞΊΞ±ΞΉ" #. EverySecond msgid "every second" msgstr "κάθΡ Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„ΞΏ" #. EveryX0Seconds msgid "every {0} seconds" msgstr "κάθΡ {0} Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„Ξ±" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„Ξ± {0} έως {1} μΡτά το Ξ»Ξ΅Ο€Ο„ΟŒ" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "στις {0} Ξ΄Ξ΅Ο…Ο„Ξ΅ΟΟŒΞ»Ξ΅Ο€Ο„Ξ± μΡτά το Ξ»Ξ΅Ο€Ο„ΟŒ" #. EveryX0Minutes msgid "every {0} minutes" msgstr "κάθΡ {0} λΡπτά" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "λΡπτά {0} έως {1} μΡτά την ώρα" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "στις {0} λΡπτά μΡτά την ώρα" #. EveryX0Hours msgid "every {0} hours" msgstr "κάθΡ {0} ΟŽΟΞ΅Ο‚" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "μΡταξύ {0} ΞΊΞ±ΞΉ {1}" #. AtX0 msgid "at {0}" msgstr "στις {0}" #. ComaEveryDay msgid ", every day" msgstr ", κάθΡ μέρα" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", κάθΡ {0} ημέρΡς της Ρβδομάδας" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0} έως {1}" #. First msgid "first" msgstr "Ο€ΟΟŽΟ„Ξ±" #. Second msgid "second" msgstr "δΡύτΡρος" #. Third msgid "third" msgstr "τρίτος" #. Fourth msgid "fourth" msgstr "τέταρτος" #. Fifth msgid "fifth" msgstr "πέμπτος" #. ComaOnThe msgid ", on the " msgstr ", την" #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} του ΞΌΞΞ½Ξ±" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", την τΡλΡυταία {0} του ΞΌΞΞ½Ξ±" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", μόνο το {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", κάθΡ {0} ΞΌΞνΡς" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", μόνο το {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", την τΡλΡυταία ημέρα του ΞΌΞΞ½Ξ±" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", την τΡλΡυταία Ρργάσιμη ημέρα του ΞΌΞΞ½Ξ±" #. FirstWeekday msgid "first weekday" msgstr "Ο€ΟΟŽΟ„Ξ· Ρργάσιμη ημέρα" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "Ρργάσιμη ημέρα κοντά στην ημέρα {0}" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", την {0} του ΞΌΞΞ½Ξ±" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", κάθΡ {0} ημέρΡς" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", μΡταξύ {0} ΞΊΞ±ΞΉ {1} του ΞΌΞΞ½Ξ±" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", την {0} ημέρα του ΞΌΞΞ½Ξ±" #. SpaceAndSpace msgid " and " msgstr " ΞΊΞ±ΞΉ " #. ComaEveryMinute msgid ", every minute" msgstr ", κάθΡ Ξ»Ξ΅Ο€Ο„ΟŒ" #. ComaEveryHour msgid ", every hour" msgstr ", κάθΡ ώρα" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", κάθΡ {0} Ο‡ΟΟŒΞ½ΞΉΞ±" #. CommaStartingX0 msgid ", starting {0}" msgstr ", ΞΎΞ΅ΞΊΞΉΞ½ΟŽΞ½Ο„Ξ±Ο‚ {0}" #. AMPeriod msgid "AM" msgstr "Ο€.ΞΌ" #. PMPeriod msgid "PM" msgstr "ΞΌΞΌ" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} ημέρΡς πριν Ξ±Ο€ΟŒ την τΡλΡυταία ημέρα του ΞΌΞΞ½Ξ±" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", μόνο το {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/en_US.mo000066400000000000000000000072071516023643100247120ustar00rootroot00000000000000ή•7ΤIŒ°±ΆΌ&Ξ υ .K^pŒ¬Κ δξ" 0O i w…₯΄+Πό_qt x™œ£'ΐθ)1 E P ]jzŒž€ ͺΈ%Ύδ'λ  '1 Y ^ d &v  © Ά Ε Φ σ   * < N h r "‘ ΄ Σ ν ϋ   * +< h z _} έ ΰ δ    , I h ‡ › ¦ ³ ΐ Π β τ ϊ %:'Aio+0#2/1 , ' 67*53"-(4$ ! ).&% and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, hour {0} through hour {1}, minute {0} through minute {1}, month {0} through month {1}, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, second {0} through second {1}, starting {0}, year {0} through year {1}, {0} days before the last day of the month, {0} through {1}AMAn error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} minutes past the hour [grThen20]at {0} seconds past the minuteat {0} seconds past the minute [grThen20]between {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: PO-Revision-Date: 2022-06-30 14:21+0200 Last-Translator: Adam Schubert Language-Team: Language: cs_CZ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 3.0.1 and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, {0} through {1}, {0} through {1}, {0} through {1}, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}, starting {0}, {0} through {1}, {0} days before the last day of the month, {0} through {1}AMAn error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} minutes past the hourat {0} seconds past the minuteat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/en_US.po000066400000000000000000000140721516023643100247130ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2022-06-30 14:21+0200\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: cs_CZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0.1\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "" "An error occured when generating the expression description. Check the cron " "expression syntax." #: ExpressionDescriptor.py:151 msgid "At " msgstr "At " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Every minute between {0} and {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "At" #: ExpressionDescriptor.py:175 msgid " and" msgstr " and" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "every second" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "every {0} seconds" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "seconds {0} through {1} past the minute" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "at {0} seconds past the minute" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "every minute" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "every {0} minutes" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "minutes {0} through {1} past the hour" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "at {0} minutes past the hour" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "every hour" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "every {0} hours" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "between {0} and {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "at {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "first" #: ExpressionDescriptor.py:243 msgid "second" msgstr "second" #: ExpressionDescriptor.py:245 msgid "third" msgstr "third" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "fourth" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "fifth" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", on the " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} of the month" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", on the last {0} of the month" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", only on {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", every day" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", every {0} days of the week" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} through {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", every {0} months" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", only in {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", on the last day of the month" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", on the last weekday of the month" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "first weekday" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "weekday nearest day {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", on the {0} of the month" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", every {0} days" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", between day {0} and {1} of the month" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", on day {0} of the month" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", every {0} years" #: ExpressionDescriptor.py:385 msgid " and " msgstr " and " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", every minute" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", every hour" #: ExpressionDescriptor.py:564 msgid "AM" msgstr "AM" #: ExpressionDescriptor.py:564 msgid "PM" msgstr "PM" #: ExpressionDescriptor.py:483 msgid ", starting {0}" msgstr ", starting {0}" #: ExpressionDescriptor.py:390 msgid ", {0} days before the last day of the month" msgstr ", {0} days before the last day of the month" #: ExpressionDescriptor.py:231 msgid "at {0} seconds past the minute [grThen20]" msgstr "at {0} seconds past the minute" #: ExpressionDescriptor.py:242 msgid ", second {0} through second {1}" msgstr ", {0} through {1}" #: ExpressionDescriptor.py:262 msgid "at {0} minutes past the hour [grThen20]" msgstr "at {0} minutes past the hour" #: ExpressionDescriptor.py:273 msgid ", minute {0} through minute {1}" msgstr ", {0} through {1}" #: ExpressionDescriptor.py:291 msgid ", hour {0} through hour {1}" msgstr ", {0} through {1}" #: ExpressionDescriptor.py:363 ExpressionDescriptor.py:365 msgid ", month {0} through month {1}" msgstr ", {0} through {1}" #: ExpressionDescriptor.py:432 ExpressionDescriptor.py:434 msgid ", year {0} through year {1}" msgstr ", {0} through {1}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/es_ES.mo000066400000000000000000000060071516023643100246740ustar00rootroot00000000000000ή•-„=μΰαζμ&ώ % 1>M^{Ž  ΊΔ"γ% ? M[j_|άί γ (G [ f s€’΄Ί ΐΞ%Τϊ')/0Gx{ #Œ ° Ό ΘΦη  ' = F )c  © ½ Μ Ϋ λ uϊ p v #} ‘ « Θ ζ ώ   ! 0 A S Z b { $‚ § )― Ω &ΰ "!, +- &% $'#(   )* and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, starting {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net PO-Revision-Date: 2023-01-25 10:00+0100 Last-Translator: Dario M. GarcΓ­a Carretero Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: es_ES y y {0} del mes, entre los dΓ­as {0} y {1} del mes, cada dΓ­a, cada hora, cada minuto, cada {0} dΓ­as, cada {0} dΓ­as de la semana, cada {0} meses, cada {0} aΓ±os, el dΓ­a {0} del mes, en el , en el ΓΊltimo dΓ­a del mes, en el ΓΊltimo dΓ­a de la semana del mes, en el ΓΊltimo {0} del mes, en el {0} del mes, sΓ³lo en {0}, sΓ³lo el {0}, empezando {0}, de {0} a {1}OcurriΓ³ un error mientras se generaba la descripciΓ³n de la expresiΓ³n. Revise la sintaxis de la expresiΓ³n de cron.A lasA las cada minuto entre las {0} y las {1}a las {0}a los {0} minutos de la horaa los {0} segundos del minutoentre las {0} y las {1}cada horacada minutocada segundocada {0} horascada {0} minutoscada {0} segundosquintoprimeroprimer dΓ­a de la semanacuartodel minuto {0} al {1} pasada la horasegundoEn los segundos {0} al {1} de cada minutotercerdΓ­a de la semana mΓ‘s prΓ³ximo al {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/es_ES.po000066400000000000000000000121711516023643100246760ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2023-01-25 10:00+0100\n" "Last-Translator: Dario M. GarcΓ­a Carretero \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es_ES\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "OcurriΓ³ un error mientras se generaba la descripciΓ³n de la expresiΓ³n. Revise" " la sintaxis de la expresiΓ³n de cron." #: ExpressionDescriptor.py:151 msgid "At " msgstr "A las " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "cada minuto entre las {0} y las {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "A las" #: ExpressionDescriptor.py:175 msgid " and" msgstr " y" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "cada segundo" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "cada {0} segundos" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "En los segundos {0} al {1} de cada minuto" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "a los {0} segundos del minuto" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "cada minuto" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "cada {0} minutos" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "del minuto {0} al {1} pasada la hora" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "a los {0} minutos de la hora" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "cada hora" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "cada {0} horas" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "entre las {0} y las {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "a las {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "primero" #: ExpressionDescriptor.py:243 msgid "second" msgstr "segundo" #: ExpressionDescriptor.py:245 msgid "third" msgstr "tercer" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "cuarto" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "quinto" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", en el " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} del mes" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", en el ΓΊltimo {0} del mes" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", sΓ³lo el {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", cada dΓ­a" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", cada {0} dΓ­as de la semana" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", de {0} a {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", cada {0} meses" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", sΓ³lo en {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", en el ΓΊltimo dΓ­a del mes" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", en el ΓΊltimo dΓ­a de la semana del mes" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "primer dΓ­a de la semana" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "dΓ­a de la semana mΓ‘s prΓ³ximo al {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", en el {0} del mes" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", cada {0} dΓ­as" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", entre los dΓ­as {0} y {1} del mes" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", el dΓ­a {0} del mes" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", cada {0} aΓ±os" #: ExpressionDescriptor.py:385 msgid " and " msgstr " y " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", cada minuto" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", cada hora" #: ExpressionDescriptor.py:489 #, python-brace-format msgid ", starting {0}" msgstr ", empezando {0}"Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/es_MX.mo000066400000000000000000000057711516023643100247200ustar00rootroot00000000000000ή•1€,,-28&J q }Š™ͺΗΪμ "/Rq ‹ ™ §΅+Δπ_eh l—΄Σ η ς  .@F LZ%a‡'ŽΆΌPΤ%( ,$9^p€‘’ΐΡβψώ  9 R c q   *Ÿ Κ Ϊ kα M S &Z  ˆ !Ž "° Σ γ ρ    0 B I Q d )k • * Θ (Π and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}AMAn error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: es_MX MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit y y {0} del mes, entre el {0} y el {1} dΓ­a del mes, todos los dΓ­as, cada una hora, cada un minuto, cada {0} dΓ­as, cada {0} dΓ­as de la semana, cada {0} meses, cada {0} aΓ±os, el dΓ­a {0} del mes, el , el ΓΊltimo dΓ­a del mes, el ΓΊltimo dΓ­a hΓ‘bil del mes, el ΓΊltimo {0} del mes, el {0} del mes, solo en {0}, solo en {0}, solo el {0}, a partir de {0}, {0} dΓ­as antes del ΓΊltimo dΓ­a del mes, {0} hasta {1}A.Β M.Error al momento de generar la descripciΓ³n de la expresiΓ³n. Verifique la sintaxis de la expresiΓ³n Cron.A lasA las Cada un minuto entre las {0} y las {1}P.Β M.a {0}a {0} minutos despuΓ©s de la horaa {0} segundos despuΓ©s del minutoentre {0} y {1}cada una horacada un minutocada un segundocada {0} horascada {0} minutoscada {0} segundosquintoprimeroprimer dΓ­a hΓ‘bilcuartominutos {0} hasta {1} despuΓ©s de la horasegundosegundos {0} hasta {1} despuΓ©s del minutoterceroel dΓ­a mΓ‘s prΓ³ximo al dΓ­a hΓ‘bil {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/es_MX.po000066400000000000000000000100601516023643100247060ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: es_MX\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "cada un minuto" #. EveryHour msgid "every hour" msgstr "cada una hora" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Error al momento de generar la descripciΓ³n de la expresiΓ³n. Verifique la " "sintaxis de la expresiΓ³n Cron." #. AtSpace msgid "At " msgstr "A las " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "Cada un minuto entre las {0} y las {1}" #. At msgid "At" msgstr "A las" #. SpaceAnd msgid " and" msgstr " y" #. EverySecond msgid "every second" msgstr "cada un segundo" #. EveryX0Seconds msgid "every {0} seconds" msgstr "cada {0} segundos" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "segundos {0} hasta {1} despuΓ©s del minuto" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "a {0} segundos despuΓ©s del minuto" #. EveryX0Minutes msgid "every {0} minutes" msgstr "cada {0} minutos" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "minutos {0} hasta {1} despuΓ©s de la hora" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "a {0} minutos despuΓ©s de la hora" #. EveryX0Hours msgid "every {0} hours" msgstr "cada {0} horas" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "entre {0} y {1}" #. AtX0 msgid "at {0}" msgstr "a {0}" #. ComaEveryDay msgid ", every day" msgstr ", todos los dΓ­as" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", cada {0} dΓ­as de la semana" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0} hasta {1}" #. First msgid "first" msgstr "primero" #. Second msgid "second" msgstr "segundo" #. Third msgid "third" msgstr "tercero" #. Fourth msgid "fourth" msgstr "cuarto" #. Fifth msgid "fifth" msgstr "quinto" #. ComaOnThe msgid ", on the " msgstr ", el " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} del mes" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", el ΓΊltimo {0} del mes" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", solo el {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", cada {0} meses" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", solo en {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", el ΓΊltimo dΓ­a del mes" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", el ΓΊltimo dΓ­a hΓ‘bil del mes" #. FirstWeekday msgid "first weekday" msgstr "primer dΓ­a hΓ‘bil" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "el dΓ­a mΓ‘s prΓ³ximo al dΓ­a hΓ‘bil {0}" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", el {0} del mes" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", cada {0} dΓ­as" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", entre el {0} y el {1} dΓ­a del mes" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", el dΓ­a {0} del mes" #. SpaceAndSpace msgid " and " msgstr " y " #. ComaEveryMinute msgid ", every minute" msgstr ", cada un minuto" #. ComaEveryHour msgid ", every hour" msgstr ", cada una hora" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", cada {0} aΓ±os" #. CommaStartingX0 msgid ", starting {0}" msgstr ", a partir de {0}" #. AMPeriod msgid "AM" msgstr "A.Β M." #. PMPeriod msgid "PM" msgstr "P.Β M." #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} dΓ­as antes del ΓΊltimo dΓ­a del mes" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", solo en {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/fa_IR.mo000066400000000000000000000062031516023643100246540ustar00rootroot00000000000000ή•-„=μΰαζμ&ώ % 1>M^{Ž  ΊΔ"γ% ? M[j_|άί γ (G [ f s€’΄Ί ΐΞ%Τϊ')/!Gim r'~¦΅ΖΩμ  . H Q )o ™ · Κ έ π  w! ™ ž !€ Ζ -Ο .ύ , > L \ l ~ ’ ¦ ³ Ύ Ω +θ  - M *X "!, +- &% $'#(   )* and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, starting {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: Report-Msgid-Bugs-To: PO-Revision-Date: 2021-01-10 02:54+0330 Last-Translator: M. Yas. Davoodeh Language-Team: Language: fa_IR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 3.0.1 و و {0} Ω…Ψ§Ω‡ΨŒ Ψ¨ΫŒΩ† روز {0} و {1} Ψ§Ψ² Ω…Ψ§Ω‡ΨŒ Ω‡Ψ± روز، Ω‡Ψ± Ψ³Ψ§ΨΉΨͺ، Ω‡Ψ± Ψ―Ω‚ΫŒΩ‚Ω‡ΨŒ Ω‡Ψ± {0} روز، Ω‡Ψ± {0} روز هفΨͺΩ‡ΨŒ Ω‡Ψ± {0} Ω…Ψ§Ω‡ΨŒ Ω‡Ψ± {0} Ψ³Ψ§Ω„ΨŒ Ψ―Ψ± روز {0} Ω…Ψ§Ω‡ΨŒ Ψ―Ψ± ، Ψ―Ψ± Ψ’ΨΨ±ΫŒΩ† {0} Ω…Ψ§Ω‡ΨŒ Ψ―Ψ± Ψ’ΨΨ±ΫŒΩ† روز هفΨͺΩ‡ Ω…Ψ§Ω‡ΨŒ Ψ―Ψ± Ψ’ΨΨ±ΫŒΩ† {0} Ω…Ψ§Ω‡ΨŒ Ψ―Ψ± {0} Ω…Ψ§Ω‡ΨŒ فقط Ψ―Ψ± {0}، فقط Ψ―Ψ± {0}، Ψ―Ψ± Ψ­Ψ§Ω„ شروع {0}، Ψ§Ψ² {0} ΨͺΨ§ {1}Ψطایی Ω‡Ω†Ϊ―Ψ§Ω… ΨͺΩˆΩ„ΫŒΨ― Ψ§Ψ΅Ψ·Ω„Ψ§Ψ­Ψ§Ψͺ بوجود Ψ’Ω…Ψ―Ω‡ Ψ§Ψ³Ψͺ. Ω†Ψ­Ωˆ Ϊ©Ψ±ΩˆΩ† Ψ±Ψ§ بررسی Ϊ©Ω†ΫŒΨ―.Ψ―Ψ±Ψ―Ψ± Ω‡Ψ± Ψ―Ω‚ΫŒΩ‚Ω‡ Ψ¨ΫŒΩ† {0} و {1}Ψ―Ψ± {0}Ψ―Ψ± {0} Ψ―Ω‚ΫŒΩ‚Ω‡ Ψ§Ψ² Ψ³Ψ§ΨΉΨͺ Ϊ―Ψ°Ψ΄ΨͺΩ‡Ψ―Ψ± {0} Ψ«Ψ§Ω†ΫŒΩ‡ Ψ§Ψ² Ψ―Ω‚ΫŒΩ‚Ω‡ Ϊ―Ψ°Ψ΄ΨͺΩ‡Ψ¨ΫŒΩ† {0} و {1}Ω‡Ψ± Ψ³Ψ§ΨΉΨͺΩ‡Ψ± Ψ―Ω‚ΫŒΩ‚Ω‡Ω‡Ψ± Ψ«Ψ§Ω†ΫŒΩ‡Ω‡Ψ± {0} Ψ³Ψ§ΨΉΨͺΩ‡Ψ± {0} Ψ―Ω‚ΫŒΩ‚Ω‡Ω‡Ψ± {0} Ψ«Ψ§Ω†ΫŒΩ‡ΩΎΩ†Ψ¬Ω…ΫŒΩ†Ψ§ΩˆΩ„ΫŒΩ†Ψ§ΩˆΩ„ΫŒΩ† روز هفΨͺΩ‡Ϊ†Ω‡Ψ§Ψ±Ω…ΫŒΩ†{0} Ψ―Ω‚ΫŒΩ‚Ω‡ Ψ§Ψ² {1} Ψ³Ψ§ΨΉΨͺ Ϊ―Ψ°Ψ΄ΨͺΩ‡Ψ―ΩˆΩ…ΫŒΩ†Ψ«Ψ§Ω†ΫŒΩ‡ {0} Ψ§Ψ² {1} Ψ―Ω‚ΫŒΩ‚Ω‡ Ϊ―Ψ°Ψ΄ΨͺΩ‡Ψ³ΩˆΩ…ΫŒΩ†Ψ±ΩˆΨ² هفΨͺΩ‡ Ω†Ψ²Ψ―ΫŒΪ© Ψ¨Ω‡ روز {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/fa_IR.po000066400000000000000000000124541516023643100246640ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-10 02:15+0330\n" "PO-Revision-Date: 2021-01-10 02:54+0330\n" "Language: fa_IR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Last-Translator: M. Yas. Davoodeh \n" "Language-Team: \n" "X-Generator: Poedit 2.4.1\n" #: ExpressionDescriptor.py:145 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "Ψطایی Ω‡Ω†Ϊ―Ψ§Ω… ΨͺΩˆΩ„ΫŒΨ― Ψ§Ψ΅Ψ·Ω„Ψ§Ψ­Ψ§Ψͺ بوجود Ψ’Ω…Ψ―Ω‡ Ψ§Ψ³Ψͺ. Ω†Ψ­Ωˆ Ϊ©Ψ±ΩˆΩ† Ψ±Ψ§ بررسی Ϊ©Ω†ΫŒΨ―." #: ExpressionDescriptor.py:169 msgid "At " msgstr "Ψ―Ψ± " #: ExpressionDescriptor.py:180 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Ω‡Ψ± Ψ―Ω‚ΫŒΩ‚Ω‡ Ψ¨ΫŒΩ† {0} و {1}" #: ExpressionDescriptor.py:186 msgid "At" msgstr "Ψ―Ψ±" #: ExpressionDescriptor.py:196 msgid " and" msgstr " و" #: ExpressionDescriptor.py:226 msgid "every second" msgstr "Ω‡Ψ± Ψ«Ψ§Ω†ΫŒΩ‡" #: ExpressionDescriptor.py:228 #, python-brace-format msgid "every {0} seconds" msgstr "Ω‡Ψ± {0} Ψ«Ψ§Ω†ΫŒΩ‡" #: ExpressionDescriptor.py:229 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "Ψ«Ψ§Ω†ΫŒΩ‡ {0} Ψ§Ψ² {1} Ψ―Ω‚ΫŒΩ‚Ω‡ Ϊ―Ψ°Ψ΄ΨͺΩ‡" #: ExpressionDescriptor.py:230 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "Ψ―Ψ± {0} Ψ«Ψ§Ω†ΫŒΩ‡ Ψ§Ψ² Ψ―Ω‚ΫŒΩ‚Ω‡ Ϊ―Ψ°Ψ΄ΨͺΩ‡" #: ExpressionDescriptor.py:243 msgid "every minute" msgstr "Ω‡Ψ± Ψ―Ω‚ΫŒΩ‚Ω‡" #: ExpressionDescriptor.py:245 #, python-brace-format msgid "every {0} minutes" msgstr "Ω‡Ψ± {0} Ψ―Ω‚ΫŒΩ‚Ω‡" #: ExpressionDescriptor.py:246 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "{0} Ψ―Ω‚ΫŒΩ‚Ω‡ Ψ§Ψ² {1} Ψ³Ψ§ΨΉΨͺ Ϊ―Ψ°Ψ΄ΨͺΩ‡" #: ExpressionDescriptor.py:247 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "Ψ―Ψ± {0} Ψ―Ω‚ΫŒΩ‚Ω‡ Ψ§Ψ² Ψ³Ψ§ΨΉΨͺ Ϊ―Ψ°Ψ΄ΨͺΩ‡" #: ExpressionDescriptor.py:260 msgid "every hour" msgstr "Ω‡Ψ± Ψ³Ψ§ΨΉΨͺ" #: ExpressionDescriptor.py:262 #, python-brace-format msgid "every {0} hours" msgstr "Ω‡Ψ± {0} Ψ³Ψ§ΨΉΨͺ" #: ExpressionDescriptor.py:263 #, python-brace-format msgid "between {0} and {1}" msgstr "Ψ¨ΫŒΩ† {0} و {1}" #: ExpressionDescriptor.py:264 #, python-brace-format msgid "at {0}" msgstr "Ψ―Ψ± {0}" #: ExpressionDescriptor.py:295 msgid "first" msgstr "Ψ§ΩˆΩ„ΫŒΩ†" #: ExpressionDescriptor.py:296 msgid "second" msgstr "Ψ―ΩˆΩ…ΫŒΩ†" #: ExpressionDescriptor.py:297 msgid "third" msgstr "Ψ³ΩˆΩ…ΫŒΩ†" #: ExpressionDescriptor.py:298 msgid "fourth" msgstr "Ϊ†Ω‡Ψ§Ψ±Ω…ΫŒΩ†" #: ExpressionDescriptor.py:299 msgid "fifth" msgstr "ΩΎΩ†Ψ¬Ω…ΫŒΩ†" #: ExpressionDescriptor.py:305 msgid ", on the " msgstr "، Ψ―Ψ± " #: ExpressionDescriptor.py:306 #, python-brace-format msgid " {0} of the month" msgstr " {0} Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:308 #, python-brace-format msgid ", on the last {0} of the month" msgstr "، Ψ―Ψ± Ψ’ΨΨ±ΫŒΩ† {0} Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:310 #, python-brace-format msgid ", only on {0}" msgstr "، فقط Ψ―Ψ± {0}" #: ExpressionDescriptor.py:316 ExpressionDescriptor.py:366 #: ExpressionDescriptor.py:368 ExpressionDescriptor.py:554 msgid ", every day" msgstr "، Ω‡Ψ± روز" #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", every {0} days of the week" msgstr "، Ω‡Ψ± {0} روز هفΨͺΩ‡" #: ExpressionDescriptor.py:319 ExpressionDescriptor.py:335 #: ExpressionDescriptor.py:398 ExpressionDescriptor.py:467 #, python-brace-format msgid ", {0} through {1}" msgstr "، Ψ§Ψ² {0} ΨͺΨ§ {1}" #: ExpressionDescriptor.py:334 #, python-brace-format msgid ", every {0} months" msgstr "، Ω‡Ψ± {0} Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:336 ExpressionDescriptor.py:399 #, python-brace-format msgid ", only in {0}" msgstr "، فقط Ψ―Ψ± {0}" #: ExpressionDescriptor.py:350 msgid ", on the last day of the month" msgstr "، Ψ―Ψ± Ψ’ΨΨ±ΫŒΩ† {0} Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:352 msgid ", on the last weekday of the month" msgstr "، Ψ―Ψ± Ψ’ΨΨ±ΫŒΩ† روز هفΨͺΩ‡ Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:359 msgid "first weekday" msgstr "Ψ§ΩˆΩ„ΫŒΩ† روز هفΨͺΩ‡" #: ExpressionDescriptor.py:359 #, python-brace-format msgid "weekday nearest day {0}" msgstr "روز هفΨͺΩ‡ Ω†Ψ²Ψ―ΫŒΪ© Ψ¨Ω‡ روز {0}" #: ExpressionDescriptor.py:361 #, python-brace-format msgid ", on the {0} of the month" msgstr "، Ψ―Ψ± {0} Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:368 #, python-brace-format msgid ", every {0} days" msgstr "، Ω‡Ψ± {0} روز" #: ExpressionDescriptor.py:369 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr "، Ψ¨ΫŒΩ† روز {0} و {1} Ψ§Ψ² Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:370 #, python-brace-format msgid ", on day {0} of the month" msgstr "، Ψ―Ψ± روز {0} Ω…Ψ§Ω‡" #: ExpressionDescriptor.py:397 #, python-brace-format msgid ", every {0} years" msgstr "، Ω‡Ψ± {0} Ψ³Ψ§Ω„" #: ExpressionDescriptor.py:449 #, python-brace-format msgid ", starting {0}" msgstr "، Ψ―Ψ± Ψ­Ψ§Ω„ شروع {0}" #: ExpressionDescriptor.py:462 msgid " and " msgstr " و " #: ExpressionDescriptor.py:552 msgid ", every minute" msgstr "، Ω‡Ψ± Ψ―Ω‚ΫŒΩ‚Ω‡" #: ExpressionDescriptor.py:553 msgid ", every hour" msgstr "، Ω‡Ψ± Ψ³Ψ§ΨΉΨͺ" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/fi_FI.mo000066400000000000000000000056101516023643100246510ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Π_βBE IjqŽ­ Α Μ Ωζφ  &4%;a'h–P)C R_oƒ²Δά"ί( + E U ` k v 4ƒ Έ 6Δ ϋ  ! & . @ W k v „ ‘ ‘ ΄ Ζ Ν Ϊ υ )ύ ' ,. [ %b and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: fi_FI MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit ja ja {0} kuukaudessa, kuukauden pΓ€ivien {0} ja {1} vΓ€lillΓ€, joka pΓ€ivΓ€, joka tunti, joka minuutti, joka {0}. pΓ€ivΓ€, joka {0}. viikonpΓ€ivΓ€, joka {0}. kuukausi, joka {0}. vuosi, kuukauden {0} pΓ€ivΓ€, , kuukauden viimeisenΓ€ pΓ€ivΓ€nΓ€, kuukauden viimeisenΓ€ viikonpΓ€ivΓ€nΓ€, kuukauden viimeinen {0}, kuukauden {0}, vain {0}, vain {0}, vain {0}, alkaen {0}, {0} pΓ€ivÀÀ ennen kuukauden viimeistΓ€ pΓ€ivÀÀ, {0} - {1}Virhe kuvauksen generoinnissa. Tarkista cron-syntaksi.KloKlo joka minuutti {0} - {1} vΓ€lillΓ€klo {0}{0} minuuttia yli{0} sekunnnin jΓ€lkeen{0} - {1} vΓ€lillΓ€joka tuntijoka minuuttijoka sekuntijoka {0}. tuntijoka {0}. minuuttijoka {0}. sekuntiviidesensimmΓ€inenensimmΓ€inen viikonpΓ€ivΓ€neljΓ€sjoka tunti minuuttien {0} - {1} vΓ€lillΓ€toinenjoka minuutti sekunttien {0} - {1} vΓ€lillΓ€kolmasviikonpΓ€ivΓ€ lΓ€hintΓ€ {0} pΓ€ivÀÀSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/fi_FI.po000066400000000000000000000076351516023643100246650ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: fi_FI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "joka minuutti" #. EveryHour msgid "every hour" msgstr "joka tunti" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "Virhe kuvauksen generoinnissa. Tarkista cron-syntaksi." #. AtSpace msgid "At " msgstr "Klo " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "joka minuutti {0} - {1} vΓ€lillΓ€" #. At msgid "At" msgstr "Klo" #. SpaceAnd msgid " and" msgstr " ja" #. EverySecond msgid "every second" msgstr "joka sekunti" #. EveryX0Seconds msgid "every {0} seconds" msgstr "joka {0}. sekunti" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "joka minuutti sekunttien {0} - {1} vΓ€lillΓ€" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "{0} sekunnnin jΓ€lkeen" #. EveryX0Minutes msgid "every {0} minutes" msgstr "joka {0}. minuutti" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "joka tunti minuuttien {0} - {1} vΓ€lillΓ€" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "{0} minuuttia yli" #. EveryX0Hours msgid "every {0} hours" msgstr "joka {0}. tunti" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "{0} - {1} vΓ€lillΓ€" #. AtX0 msgid "at {0}" msgstr "klo {0}" #. ComaEveryDay msgid ", every day" msgstr ", joka pΓ€ivΓ€" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", joka {0}. viikonpΓ€ivΓ€" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0} - {1}" #. First msgid "first" msgstr "ensimmΓ€inen" #. Second msgid "second" msgstr "toinen" #. Third msgid "third" msgstr "kolmas" #. Fourth msgid "fourth" msgstr "neljΓ€s" #. Fifth msgid "fifth" msgstr "viides" #. ComaOnThe msgid ", on the " msgstr ", " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} kuukaudessa" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", kuukauden viimeinen {0}" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", vain {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", joka {0}. kuukausi" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", vain {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", kuukauden viimeisenΓ€ pΓ€ivΓ€nΓ€" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", kuukauden viimeisenΓ€ viikonpΓ€ivΓ€nΓ€" #. FirstWeekday msgid "first weekday" msgstr "ensimmΓ€inen viikonpΓ€ivΓ€" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "viikonpΓ€ivΓ€ lΓ€hintΓ€ {0} pΓ€ivÀÀ" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", kuukauden {0}" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", joka {0}. pΓ€ivΓ€" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", kuukauden pΓ€ivien {0} ja {1} vΓ€lillΓ€" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", kuukauden {0} pΓ€ivΓ€" #. SpaceAndSpace msgid " and " msgstr " ja " #. ComaEveryMinute msgid ", every minute" msgstr ", joka minuutti" #. ComaEveryHour msgid ", every hour" msgstr ", joka tunti" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", joka {0}. vuosi" #. CommaStartingX0 msgid ", starting {0}" msgstr ", alkaen {0}" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} pΓ€ivÀÀ ennen kuukauden viimeistΓ€ pΓ€ivÀÀ" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", vain {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/fr_FR.mo000066400000000000000000000054311516023643100246740ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…‰ Ž›³ΔΨν3FW]"wš³ΔΨμ`ό] ` #d ˆ  ͺ Θ Φ θ ϋ  % < T _ g } +ˆ ΄ .» κ #υ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: fr_FR et et {0} du mois, du {0} au {1} du mois, tous les jours, toutes les heures, toutes les minutes, tous les {0} jours, every {0} days of the week, tous les {0} mois, tous les {0} ans, le {0} du mois, le , le dernier jour du mois, le dernier jour ouvrable du mois, le dernier {0} du mois, le {0} du mois, uniquement en {0}, uniquement le {0}, de {0} Γ  {1}Une erreur est survenue en gΓ©nΓ©rant la description de l'expression cron. VΓ©rifiez sa syntaxe.ÀÀ Toutes les minutes entre {0} et {1}Γ  {0}{0} minutes aprΓ¨s l'heure{0} secondes aprΓ¨s la minutede {0} Γ  {1}toutes les heurestoutes les minutestoutes les secondestoutes les {0} heurestoutes les {0} minutestoutes les {0} secondescinquiΓ¨mepremierpremier jour ouvrablequatriΓ¨meles minutes entre {0} et {1} aprΓ¨s l'heuresecondles secondes entre {0} et {1} aprΓ¨s la minutetroisiΓ¨mejour ouvrable le plus proche du {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/fr_FR.po000066400000000000000000000120371516023643100246770ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr_FR\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Une erreur est survenue en gΓ©nΓ©rant la description de l'expression cron. " "VΓ©rifiez sa syntaxe." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Γ€ " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Toutes les minutes entre {0} et {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Γ€" #: ExpressionDescriptor.py:175 msgid " and" msgstr " et" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "toutes les secondes" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "toutes les {0} secondes" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "les secondes entre {0} et {1} aprΓ¨s la minute" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "{0} secondes aprΓ¨s la minute" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "toutes les minutes" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "toutes les {0} minutes" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "les minutes entre {0} et {1} aprΓ¨s l'heure" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "{0} minutes aprΓ¨s l'heure" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "toutes les heures" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "toutes les {0} heures" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "de {0} Γ  {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "Γ  {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "premier" #: ExpressionDescriptor.py:243 msgid "second" msgstr "second" #: ExpressionDescriptor.py:245 msgid "third" msgstr "troisiΓ¨me" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "quatriΓ¨me" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "cinquiΓ¨me" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", le " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} du mois" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", le dernier {0} du mois" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", uniquement le {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", tous les jours" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", every {0} days of the week" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", de {0} Γ  {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", tous les {0} mois" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", uniquement en {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", le dernier jour du mois" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", le dernier jour ouvrable du mois" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "premier jour ouvrable" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "jour ouvrable le plus proche du {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", le {0} du mois" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", tous les {0} jours" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", du {0} au {1} du mois" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", le {0} du mois" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", tous les {0} ans" #: ExpressionDescriptor.py:385 msgid " and " msgstr " et " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", toutes les minutes" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", toutes les heures" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/he_IL.mo000066400000000000000000000061471516023643100246630ustar00rootroot00000000000000ή•1€,,-28&J q }Š™ͺΗΪμ "/Rq ‹ ™ §΅+Δπ_eh l—΄Σ η ς  .@F LZ%a‡'ŽΆΌPΤ%-6*K v „ ’ #΄Ψπ # ") /L +| ¨ Η Υ γ ρ 8 > M _P ° ³ · Σ Φ "έ $ % 7 C O ] o  •   « Κ +Υ  - 8 #C and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}AMAn error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: he_IL MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit וגם וגם {0} של Χ”Χ—Χ•Χ“Χ©, Χ‘Χ™ΧŸ יום {0} Χ•-{1} של Χ”Χ—Χ•Χ“Χ©, Χ›Χœ יום, Χ›Χœ Χ©Χ’Χ”, Χ›Χœ Χ“Χ§Χ”, Χ›Χœ {0} Χ™ΧžΧ™Χ, Χ›Χœ {0} Χ™ΧžΧ™Χ של Χ”Χ©Χ‘Χ•Χ’, Χ›Χœ {0} חודשים, Χ›Χœ {0} שנים, ביום {0} של Χ”Χ—Χ•Χ“Χ©, Χ‘-, ביום Χ”ΧΧ—Χ¨Χ•ΧŸ Χ‘Χ—Χ•Χ“Χ©, ביום Χ”Χ’Χ‘Χ•Χ“Χ” Χ”ΧΧ—Χ¨Χ•ΧŸ Χ‘Χ—Χ•Χ“Χ©, ביום {0} Χ”ΧΧ—Χ¨Χ•ΧŸ של Χ”Χ—Χ•Χ“Χ©, ביום {0} של Χ”Χ—Χ•Χ“Χ©, Χ¨Χ§ Χ‘-{0}, Χ¨Χ§ Χ‘-{0}, Χ¨Χ§ Χ‘-{0}, מΧͺΧ—Χ™Χœ Χ‘-{0}, {0} Χ™ΧžΧ™Χ ΧœΧ€Χ Χ™ היום Χ”ΧΧ—Χ¨Χ•ΧŸ Χ‘Χ—Χ•Χ“Χ©, {0} Χ’Χ“ {1}AMAn error occured when generating the expression description. Check the cron expression syntax.Χ‘Χ‘ Χ›Χœ Χ“Χ§Χ” Χ‘Χ™ {0} Χ•-{1}PMΧ‘ {0}{0} Χ“Χ§Χ•Χͺ מΧͺΧ—Χ™ΧœΧͺ Χ”Χ©Χ’Χ”{0} Χ©Χ Χ™Χ•Χͺ מΧͺΧ—Χ™ΧœΧͺ Χ”Χ“Χ§Χ”Χ‘Χ™ΧŸ {0} Χ•-{1}Χ›Χœ Χ©Χ’Χ”Χ›Χœ Χ“Χ§Χ”Χ›Χœ Χ©Χ Χ™Χ”Χ›Χœ {0} Χ©Χ’Χ•ΧͺΧ›Χœ {0} Χ“Χ§Χ•ΧͺΧ›Χœ {0} Χ©Χ Χ™Χ•ΧͺΧ—ΧžΧ™Χ©Χ™Χ¨ΧΧ©Χ•ΧŸΧ™Χ•Χ Χ”Χ¨ΧΧ©Χ•ΧŸ Χ‘Χ©Χ‘Χ•Χ’Χ¨Χ‘Χ™Χ’Χ™Χ“Χ§Χ•Χͺ {0} Χ’Χ“ {1} מΧͺΧ—Χ™ΧœΧͺ Χ”Χ©Χ’Χ”Χ©Χ Χ™Χ”Χ©Χ Χ™Χ•Χͺ {0} Χ’Χ“ {1} מΧͺΧ—Χ™ΧœΧͺ Χ”Χ“Χ§Χ”Χ©ΧœΧ™Χ©Χ™Χ™Χ•Χ Χ‘Χ©Χ‘Χ•Χ’ Χ”Χ§Χ¨Χ•Χ‘ ל-{0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/he_IL.po000066400000000000000000000102361516023643100246600ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: he_IL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "Χ›Χœ Χ“Χ§Χ”" #. EveryHour msgid "every hour" msgstr "Χ›Χœ Χ©Χ’Χ”" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "An error occured when generating the expression description. Check the cron" " expression syntax." #. AtSpace msgid "At " msgstr "Χ‘ " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "Χ›Χœ Χ“Χ§Χ” Χ‘Χ™ {0} Χ•-{1}" #. At msgid "At" msgstr "Χ‘" #. SpaceAnd msgid " and" msgstr " וגם" #. EverySecond msgid "every second" msgstr "Χ›Χœ Χ©Χ Χ™Χ”" #. EveryX0Seconds msgid "every {0} seconds" msgstr "Χ›Χœ {0} Χ©Χ Χ™Χ•Χͺ" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "Χ©Χ Χ™Χ•Χͺ {0} Χ’Χ“ {1} מΧͺΧ—Χ™ΧœΧͺ Χ”Χ“Χ§Χ”" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "{0} Χ©Χ Χ™Χ•Χͺ מΧͺΧ—Χ™ΧœΧͺ Χ”Χ“Χ§Χ”" #. EveryX0Minutes msgid "every {0} minutes" msgstr "Χ›Χœ {0} Χ“Χ§Χ•Χͺ" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "Χ“Χ§Χ•Χͺ {0} Χ’Χ“ {1} מΧͺΧ—Χ™ΧœΧͺ Χ”Χ©Χ’Χ”" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "{0} Χ“Χ§Χ•Χͺ מΧͺΧ—Χ™ΧœΧͺ Χ”Χ©Χ’Χ”" #. EveryX0Hours msgid "every {0} hours" msgstr "Χ›Χœ {0} Χ©Χ’Χ•Χͺ" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "Χ‘Χ™ΧŸ {0} Χ•-{1}" #. AtX0 msgid "at {0}" msgstr "Χ‘ {0}" #. ComaEveryDay msgid ", every day" msgstr ", Χ›Χœ יום" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", Χ›Χœ {0} Χ™ΧžΧ™Χ של Χ”Χ©Χ‘Χ•Χ’" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0} Χ’Χ“ {1}" #. First msgid "first" msgstr "Χ¨ΧΧ©Χ•ΧŸ" #. Second msgid "second" msgstr "Χ©Χ Χ™Χ”" #. Third msgid "third" msgstr "Χ©ΧœΧ™Χ©Χ™" #. Fourth msgid "fourth" msgstr "Χ¨Χ‘Χ™Χ’Χ™" #. Fifth msgid "fifth" msgstr "Χ—ΧžΧ™Χ©Χ™" #. ComaOnThe msgid ", on the " msgstr ", Χ‘-" #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} של Χ”Χ—Χ•Χ“Χ©" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", ביום {0} Χ”ΧΧ—Χ¨Χ•ΧŸ של Χ”Χ—Χ•Χ“Χ©" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", Χ¨Χ§ Χ‘-{0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", Χ›Χœ {0} חודשים" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", Χ¨Χ§ Χ‘-{0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", ביום Χ”ΧΧ—Χ¨Χ•ΧŸ Χ‘Χ—Χ•Χ“Χ©" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", ביום Χ”Χ’Χ‘Χ•Χ“Χ” Χ”ΧΧ—Χ¨Χ•ΧŸ Χ‘Χ—Χ•Χ“Χ©" #. FirstWeekday msgid "first weekday" msgstr "יום Χ”Χ¨ΧΧ©Χ•ΧŸ Χ‘Χ©Χ‘Χ•Χ’" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "יום Χ‘Χ©Χ‘Χ•Χ’ Χ”Χ§Χ¨Χ•Χ‘ ל-{0}" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", ביום {0} של Χ”Χ—Χ•Χ“Χ©" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", Χ›Χœ {0} Χ™ΧžΧ™Χ" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", Χ‘Χ™ΧŸ יום {0} Χ•-{1} של Χ”Χ—Χ•Χ“Χ©" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", ביום {0} של Χ”Χ—Χ•Χ“Χ©" #. SpaceAndSpace msgid " and " msgstr " וגם " #. ComaEveryMinute msgid ", every minute" msgstr ", Χ›Χœ Χ“Χ§Χ”" #. ComaEveryHour msgid ", every hour" msgstr ", Χ›Χœ Χ©Χ’Χ”" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", Χ›Χœ {0} שנים" #. CommaStartingX0 msgid ", starting {0}" msgstr ", מΧͺΧ—Χ™Χœ Χ‘-{0}" #. AMPeriod msgid "AM" msgstr "AM" #. PMPeriod msgid "PM" msgstr "PM" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} Χ™ΧžΧ™Χ ΧœΧ€Χ Χ™ היום Χ”ΧΧ—Χ¨Χ•ΧŸ Χ‘Χ—Χ•Χ“Χ©" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", Χ¨Χ§ Χ‘-{0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/hu_HU.mo000066400000000000000000000056551516023643100247160ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Πβ_ε Efip¬ ΐ Λ Ψευ %3%:`'g•P­ώ & B O ]k}“«ΐΨΰ ω 1 @ K V a *o š € i§ # 5 8 < #Z ~ “ Ÿ « ½  ζ    ! !* L 'U } &† and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}AMAn error occured when generating the expression description. Check the cron expression syntax.Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: hu_HU MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Γ©s Γ©s {0} a hΓ³napban, {0} Γ©s {1} nap kΓΆzΓΆtt a hΓ³napban, minden nap, minden Γ³ra, minden perc, minden {0}. nap, a hΓ©t {0}. napjΓ‘n, minden {0}. hΓ³napban, minden {0}. Γ©vben, a hΓ³nap {0}. napjΓ‘n, a/az , a hΓ³nap utolsΓ³ napja, a hΓ³nap utolsΓ³ hΓ©tkΓΆznapja, a hΓ³nap utolsΓ³ {0}, a hΓ³nap {0}, csak {0}, csak {0}, csak {0}, kezdΓ©s {0}, {0} nappal a hΓ³nap utolsΓ³ napja elΕ‘tt, {0}-{1}DEHiba tΓΆrtΓ©nt a kifejezΓ©s leΓ­rΓ‘sΓ‘nak lΓ©trehozΓ‘sakor. EllenΕ‘rizze a cron kifejezΓ©s szintaxisΓ‘t.minden percben {0} Γ©s {1} kΓΆzΓΆttDU{0}{0} perccel egΓ©sz Γ³ra utΓ‘n{0} mΓ‘sodperccel egΓ©sz perc utΓ‘n{0} Γ©s {1} kΓΆzΓΆttminden Γ³raminden percminden mΓ‘sodpercminden {0}. Γ³rΓ‘banminden {0}. percbenminden {0}. mΓ‘sodpercbenΓΆtΓΆdikelsΕ‘elsΕ‘ hΓ©tkΓΆznapnegyedik{0}-{1} perccel egΓ©sz Γ³ra utΓ‘nmΓ‘sodik{0}-{1} mΓ‘sodperccel egΓ©sz perc utΓ‘nharmadiklegkΓΆzelebbi hΓ©tkΓΆznap {0}. napjΓ‘nSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/hu_HU.po000066400000000000000000000077171516023643100247220ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: hu_HU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "minden perc" #. EveryHour msgid "every hour" msgstr "minden Γ³ra" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Hiba tΓΆrtΓ©nt a kifejezΓ©s leΓ­rΓ‘sΓ‘nak lΓ©trehozΓ‘sakor. EllenΕ‘rizze a cron " "kifejezΓ©s szintaxisΓ‘t." #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "minden percben {0} Γ©s {1} kΓΆzΓΆtt" #. SpaceAnd msgid " and" msgstr " Γ©s " #. EverySecond msgid "every second" msgstr "minden mΓ‘sodperc" #. EveryX0Seconds msgid "every {0} seconds" msgstr "minden {0}. mΓ‘sodpercben" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "{0}-{1} mΓ‘sodperccel egΓ©sz perc utΓ‘n" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "{0} mΓ‘sodperccel egΓ©sz perc utΓ‘n" #. EveryX0Minutes msgid "every {0} minutes" msgstr "minden {0}. percben" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "{0}-{1} perccel egΓ©sz Γ³ra utΓ‘n" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "{0} perccel egΓ©sz Γ³ra utΓ‘n" #. EveryX0Hours msgid "every {0} hours" msgstr "minden {0}. Γ³rΓ‘ban" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "{0} Γ©s {1} kΓΆzΓΆtt" #. AtX0 msgid "at {0}" msgstr "{0}" #. ComaEveryDay msgid ", every day" msgstr ", minden nap" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", a hΓ©t {0}. napjΓ‘n" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0}-{1}" #. First msgid "first" msgstr "elsΕ‘" #. Second msgid "second" msgstr "mΓ‘sodik" #. Third msgid "third" msgstr "harmadik" #. Fourth msgid "fourth" msgstr "negyedik" #. Fifth msgid "fifth" msgstr "ΓΆtΓΆdik" #. ComaOnThe msgid ", on the " msgstr ", a/az " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} a hΓ³napban" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", a hΓ³nap utolsΓ³ {0}" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", csak {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", minden {0}. hΓ³napban" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", csak {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", a hΓ³nap utolsΓ³ napja" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", a hΓ³nap utolsΓ³ hΓ©tkΓΆznapja" #. FirstWeekday msgid "first weekday" msgstr "elsΕ‘ hΓ©tkΓΆznap" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "legkΓΆzelebbi hΓ©tkΓΆznap {0}. napjΓ‘n" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", a hΓ³nap {0}" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", minden {0}. nap" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", {0} Γ©s {1} nap kΓΆzΓΆtt a hΓ³napban" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", a hΓ³nap {0}. napjΓ‘n" #. SpaceAndSpace msgid " and " msgstr " Γ©s " #. ComaEveryMinute msgid ", every minute" msgstr ", minden perc" #. ComaEveryHour msgid ", every hour" msgstr ", minden Γ³ra" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", minden {0}. Γ©vben" #. CommaStartingX0 msgid ", starting {0}" msgstr ", kezdΓ©s {0}" #. AMPeriod msgid "AM" msgstr "DE" #. PMPeriod msgid "PM" msgstr "DU" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} nappal a hΓ³nap utolsΓ³ napja elΕ‘tt" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", csak {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/it_IT.mo000066400000000000000000000053371516023643100247130ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…ˆ Œ"š ½ Λ Φδ!φ(8QW r“« ½ Λ Ωzζa f l Œ • ±  ζ ο ϋ   % 6 = C ` g „ "Œ ― )΅ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: it_IT e e {0} del mese, tra il giorno {0} e {1} del mese, ogni giorno, ogni ora, ogni minuto, ogni {0} giorni, ogni {0} giorni della settimana, ogni {0} mesi, ogni {0} anni, il giorno {0} del mese, il , l'ultimo giorno del mese, nell'ultima settimana del mese, l'ultimo {0} del mese, il {0} del mese, solo in {0}, solo il {0}, {0} al {1}È verificato un errore durante la generazione la descrizione espressione. Controllare la sintassi delle espressioni cron.AlleAlle Ogni minuto tra le {0} e le {1}alle {0}al {0} minuto passata l'oraal {0} secondo passato il minutotra le {0} e le {1}ogni oraogni minutoogni secondoogni {0} oreogni {0} minutiogni {0} secondiquintoprimoprimo giorno della settimanaquartominuti {0} al {1} dopo l'orasecondosecondi {0} al {1} oltre il minutoterzogiorno della settimana piΓΉ vicino al {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/it_IT.po000066400000000000000000000117451516023643100247160ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it_IT\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "È verificato un errore durante la generazione la descrizione espressione. " "Controllare la sintassi delle espressioni cron." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Alle " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Ogni minuto tra le {0} e le {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Alle" #: ExpressionDescriptor.py:175 msgid " and" msgstr " e" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "ogni secondo" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "ogni {0} secondi" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "secondi {0} al {1} oltre il minuto" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "al {0} secondo passato il minuto" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "ogni minuto" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "ogni {0} minuti" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "minuti {0} al {1} dopo l'ora" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "al {0} minuto passata l'ora" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "ogni ora" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "ogni {0} ore" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "tra le {0} e le {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "alle {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "primo" #: ExpressionDescriptor.py:243 msgid "second" msgstr "secondo" #: ExpressionDescriptor.py:245 msgid "third" msgstr "terzo" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "quarto" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "quinto" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", il " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} del mese" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", l'ultimo {0} del mese" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", solo il {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", ogni giorno" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", ogni {0} giorni della settimana" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} al {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", ogni {0} mesi" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", solo in {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", l'ultimo giorno del mese" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", nell'ultima settimana del mese" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "primo giorno della settimana" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "giorno della settimana piΓΉ vicino al {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", il {0} del mese" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", ogni {0} giorni" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", tra il giorno {0} e {1} del mese" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", il giorno {0} del mese" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", ogni {0} anni" #: ExpressionDescriptor.py:385 msgid " and " msgstr " e " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", ogni minuto" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", ogni ora" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ja_JP.mo000066400000000000000000000057371516023643100246720ustar00rootroot00000000000000ή•-„=μΰαζμ&ώ % 1>M^{Ž  ΊΔ"γ% ? M[j_|άί γ (G [ f s€’΄Ί ΐΞ%Τϊ')/'Gotz%‹ ± » ΕΟΰώ # 8 C Y u  ’ ³ Δ Υ qξ ` v  © Γ Ψ ν     & 4 B K T d "m  "™ Ό Ε "!, +- &% $'#(   )* and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, starting {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: ja_JP と と 月γγ†γ‘ {0}γ€ζœˆγ {0} ζ—₯から {1} ζ—₯γι–“γ€ζ―Žζ—₯γ€ζ―Žζ™‚γ€ζ―Žεˆ†γ€{0} ζ—₯ごと、週γγ†γ‘ {0} ζ—₯ごと、{0} γ‹ζœˆγ”γ¨γ€{0} εΉ΄γ”γ¨γ€ζœˆγ {0} ζ—₯η›γ€ζ¬‘に 、欑γζœ€η΅‚ζ—₯γ«γ€ζœˆγζœ€εΎŒγεΉ³ζ—₯γ«γ€ζœˆγζœ€εΎŒγ {0} γ«γ€ζœˆγ {0} に、{0} でγγΏγ€{0} にγγΏγ€{0} に開始、{0} から {1} まで式γθ¨˜θΏ°γ‚’η”Ÿζˆγ™γ‚‹ιš›γ«γ‚¨γƒ©γƒΌγŒη™Ίη”Ÿγ—γΎγ—γŸγ€‚Cron 式γζ§‹ζ–‡γ‚’η’Ίθͺγ—γ¦γγ γ•γ„γ€‚ζ¬‘γ«γŠγ„γ¦εŸζ–½ζ¬‘γ«γŠγ„γ¦εŸζ–½ {0} から {1} γΎγ§ζ―Žεˆ†ζ¬‘γ«γŠγ„γ¦εŸζ–½ {0}ζ―Žζ™‚ {0} εˆ†ιŽγŽζ―Žεˆ† {0} η§’ιŽγŽ{0} と {1} γι–“ζ―Žζ™‚ζ―Žεˆ†ζ―Žη§’{0} 時間ごと{0} εˆ†γ”γ¨{0} 秒ごと5 η•ͺη›1 η•ͺη›ζœ€εˆγεΉ³ζ—₯4 η•ͺη›ζ―Žζ™‚ {0} εˆ†γ‹γ‚‰ {1} εˆ†γΎγ§2 η•ͺη›ζ―Žεˆ† {0} 秒から {1} 秒まで3 η•ͺη›{0} ζ—₯γη›΄θΏ‘γεΉ³ζ—₯Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ja_JP.po000066400000000000000000000122041516023643100246600ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ja_JP\n" #: ExpressionDescriptor.py:145 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "式γθ¨˜θΏ°γ‚’η”Ÿζˆγ™γ‚‹ιš›γ«γ‚¨γƒ©γƒΌγŒη™Ίη”Ÿγ—γΎγ—γŸγ€‚Cron 式γζ§‹ζ–‡γ‚’η’Ίθͺγ—てください。" #: ExpressionDescriptor.py:169 msgid "At " msgstr "ζ¬‘γ«γŠγ„γ¦εŸζ–½ " #: ExpressionDescriptor.py:180 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "{0} から {1} γΎγ§ζ―Žεˆ†" #: ExpressionDescriptor.py:186 msgid "At" msgstr "ζ¬‘γ«γŠγ„γ¦εŸζ–½" #: ExpressionDescriptor.py:196 msgid " and" msgstr " と" #: ExpressionDescriptor.py:226 msgid "every second" msgstr "ζ―Žη§’" #: ExpressionDescriptor.py:228 #, python-brace-format msgid "every {0} seconds" msgstr "{0} 秒ごと" #: ExpressionDescriptor.py:229 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "ζ―Žεˆ† {0} 秒から {1} 秒まで" #: ExpressionDescriptor.py:230 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "ζ―Žεˆ† {0} η§’ιŽγŽ" #: ExpressionDescriptor.py:243 msgid "every minute" msgstr "ζ―Žεˆ†" #: ExpressionDescriptor.py:245 #, python-brace-format msgid "every {0} minutes" msgstr "{0} εˆ†γ”γ¨" #: ExpressionDescriptor.py:246 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "ζ―Žζ™‚ {0} εˆ†γ‹γ‚‰ {1} εˆ†γΎγ§" #: ExpressionDescriptor.py:247 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "ζ―Žζ™‚ {0} εˆ†ιŽγŽ" #: ExpressionDescriptor.py:260 msgid "every hour" msgstr "ζ―Žζ™‚" #: ExpressionDescriptor.py:262 #, python-brace-format msgid "every {0} hours" msgstr "{0} 時間ごと" #: ExpressionDescriptor.py:263 #, python-brace-format msgid "between {0} and {1}" msgstr "{0} と {1} γι–“" #: ExpressionDescriptor.py:264 #, python-brace-format msgid "at {0}" msgstr "ζ¬‘γ«γŠγ„γ¦εŸζ–½ {0}" #: ExpressionDescriptor.py:295 msgid "first" msgstr "1 η•ͺη›" #: ExpressionDescriptor.py:296 msgid "second" msgstr "2 η•ͺη›" #: ExpressionDescriptor.py:297 msgid "third" msgstr "3 η•ͺη›" #: ExpressionDescriptor.py:298 msgid "fourth" msgstr "4 η•ͺη›" #: ExpressionDescriptor.py:299 msgid "fifth" msgstr "5 η•ͺη›" #: ExpressionDescriptor.py:305 msgid ", on the " msgstr "、欑に " #: ExpressionDescriptor.py:306 #, python-brace-format msgid " {0} of the month" msgstr "月γγ†γ‘ {0}" #: ExpressionDescriptor.py:308 #, python-brace-format msgid ", on the last {0} of the month" msgstr "γ€ζœˆγζœ€εΎŒγ {0} に" #: ExpressionDescriptor.py:310 #, python-brace-format msgid ", only on {0}" msgstr "、{0} にγγΏ" #: ExpressionDescriptor.py:316 ExpressionDescriptor.py:366 #: ExpressionDescriptor.py:368 ExpressionDescriptor.py:554 msgid ", every day" msgstr "γ€ζ―Žζ—₯" #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", every {0} days of the week" msgstr "、週γγ†γ‘ {0} ζ—₯ごと" #: ExpressionDescriptor.py:319 ExpressionDescriptor.py:335 #: ExpressionDescriptor.py:398 ExpressionDescriptor.py:467 #, python-brace-format msgid ", {0} through {1}" msgstr "、{0} から {1} まで" #: ExpressionDescriptor.py:334 #, python-brace-format msgid ", every {0} months" msgstr "、{0} γ‹ζœˆγ”γ¨" #: ExpressionDescriptor.py:336 ExpressionDescriptor.py:399 #, python-brace-format msgid ", only in {0}" msgstr "、{0} でγγΏ" #: ExpressionDescriptor.py:350 msgid ", on the last day of the month" msgstr "、欑γζœ€η΅‚ζ—₯に" #: ExpressionDescriptor.py:352 msgid ", on the last weekday of the month" msgstr "γ€ζœˆγζœ€εΎŒγεΉ³ζ—₯に" #: ExpressionDescriptor.py:359 msgid "first weekday" msgstr "ζœ€εˆγεΉ³ζ—₯" #: ExpressionDescriptor.py:359 #, python-brace-format msgid "weekday nearest day {0}" msgstr "{0} ζ—₯γη›΄θΏ‘γεΉ³ζ—₯" #: ExpressionDescriptor.py:361 #, python-brace-format msgid ", on the {0} of the month" msgstr "γ€ζœˆγ {0} に" #: ExpressionDescriptor.py:368 #, python-brace-format msgid ", every {0} days" msgstr "、{0} ζ—₯ごと" #: ExpressionDescriptor.py:369 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr "γ€ζœˆγ {0} ζ—₯から {1} ζ—₯γι–“" #: ExpressionDescriptor.py:370 #, python-brace-format msgid ", on day {0} of the month" msgstr "γ€ζœˆγ {0} ζ—₯η›" #: ExpressionDescriptor.py:397 #, python-brace-format msgid ", every {0} years" msgstr "、{0} 年ごと" #: ExpressionDescriptor.py:449 #, python-brace-format msgid ", starting {0}" msgstr "、{0} に開始" #: ExpressionDescriptor.py:462 msgid " and " msgstr " と " #: ExpressionDescriptor.py:552 msgid ", every minute" msgstr "γ€ζ―Žεˆ†" #: ExpressionDescriptor.py:553 msgid ", every hour" msgstr "γ€ζ―Žζ™‚" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/kk_KZ.mo000066400000000000000000000065361516023643100247160ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Π_βBE IjqŽ­ Α Μ Ωζφ  &4%;a'h–P   5T"j"° Θ ι" - F I %j & · Θ Υ β ο + . ›8 Τ ί 7λ # *2 P] ! Π ρ " 5 O i … ” "£ Ζ Χ κ 8χ 0 = and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: kk_KZ MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit ΠΆΣ™Π½Π΅ ΠΆΣ™Π½Π΅ {0} Π°ΠΉ, арасында {0} ΠΆΣ™Π½Π΅ {1}-ΠΊ―Π½Π΄Ρ–Π· Π°ΠΉ, Σ™Ρ€Π±Ρ–Ρ€ ΠΊ―Π½Ρ–, Σ™Ρ€Π±Ρ–Ρ€ са“Π°Ρ‚ сайын, Σ™Ρ€Π±Ρ–Ρ€ ΠΌΠΈΠ½ΡƒΡ‚ сайын, Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΊ―Π½, Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΊ―Π½ Π°ΠΏΡ‚Π°, Σ™Ρ€Π±Ρ–Ρ€ {0} Π°ΠΉ сайын, Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΆΡ‹Π» сайын, {0}-ΡˆΡ– ΠΊ―Π½Ρ– Π°ΠΉ, , Π°ΠΉΠ΄Ρ‹£ со£“Ρ‹ ΠΊ―Π½Ρ–, со£“Ρ‹ ΠΆ±ΠΌΡ‹Ρ ΠΊ―Π½Ρ– Π°ΠΉ, Σ™Ρ€Π±Ρ–Ρ€ Π°ΠΉΠ΄Ρ‹£ со£“Ρ‹ {0}, {0}-Π°ΠΉΠ΄Ρ‹£, Ρ‚Π΅ΠΊ {0}, Ρ‚Π΅ΠΊ {0}, Ρ‚Π΅ΠΊ {0}, бастап {0}, {0} ΠΊ―Π½ Π°ΠΉΠ΄Ρ‹£ со£“Ρ‹ ΠΊ―Π½Ρ–, {0}-{1}Σ¨Ρ€Π½Π΅ΠΊ сипаттамасын Тасау ΠΊΠ΅Π·Ρ–Π½Π΄Π΅ ›Π°Ρ‚Π΅ ΠΏΠ°ΠΉΠ΄Π° Π±ΠΎΠ»Π΄Ρ‹. Cron Σ©Ρ€Π½Π΅ΠΊ синтаксисін тСксСрі£Ρ–Π·.Π‘Π°“Π°Ρ‚Π‘Π°“Π°Ρ‚ Σ˜Ρ€Π±Ρ–Ρ€ ΠΌΠΈΠ½ΡƒΡ‚ арасында {0} ΠΆΣ™Π½Π΅ {1}са“Π°Ρ‚ {0}{0} ΠΌΠΈΠ½ΡƒΡ‚Ρ‚Π°Π½ ΠΊΠ΅ΠΉΡ–Π½ са“Π°Ρ‚{0} сСкундтан ΠΊΠ΅ΠΉΡ–Π½ бастал“Π°Π½Π½Π°Π½ ΠΊΠ΅ΠΉΡ–Π½ минутарасында {0} ΠΆΣ™Π½Π΅ {1}Σ™Ρ€Π±Ρ–Ρ€ са“Π°Ρ‚ сайынәрбір ΠΌΠΈΠ½ΡƒΡ‚ сайынәрбір сСкунд сайынәрбір {0} са“Π°Ρ‚Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΌΠΈΠ½ΡƒΡ‚Σ™Ρ€Π±Ρ–Ρ€ {0} ΡΠ΅ΠΊΡƒΠ½Π΄Π±Π΅ΡΡ–Π½ΡˆΡ–Π±Ρ–Ρ€Ρ–Π½ΡˆΡ–Π±Ρ–Ρ€Ρ–Π½ΡˆΡ– ΠΆ±ΠΌΡ‹Ρ ΠΊ―Π½Ρ–Ρ‚Σ©Ρ€Ρ‚Ρ–Π½ΡˆΡ–ΠΌΠΈΠ½ΡƒΡ‚ {0}-{1}Π΅ΠΊΡ–Π½ΡˆΡ–ΡΠ΅ΠΊΡƒΠ½Π΄ {0} ΠΆΣ©Π½Ρ–Π½Π΄Π΅Π³Ρ– {1} ΠΌΠΈΠ½ΡƒΡ‚Ρ‹Π½Π°―ΡˆΡ–Π½ΡˆΡ–ΠΆΠ°›Ρ‹Π½Π΄Π° {0}-ΡˆΡ– ΠΊ―Π½Ρ–Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/kk_KZ.po000066400000000000000000000105711516023643100247130ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: kk_KZ\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "Σ™Ρ€Π±Ρ–Ρ€ ΠΌΠΈΠ½ΡƒΡ‚ сайын" #. EveryHour msgid "every hour" msgstr "Σ™Ρ€Π±Ρ–Ρ€ са“Π°Ρ‚ сайын" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Σ¨Ρ€Π½Π΅ΠΊ сипаттамасын Тасау ΠΊΠ΅Π·Ρ–Π½Π΄Π΅ ›Π°Ρ‚Π΅ ΠΏΠ°ΠΉΠ΄Π° Π±ΠΎΠ»Π΄Ρ‹. Cron Σ©Ρ€Π½Π΅ΠΊ синтаксисін " "тСксСрі£Ρ–Π·." #. AtSpace msgid "At " msgstr "Π‘Π°“Π°Ρ‚ " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "Σ˜Ρ€Π±Ρ–Ρ€ ΠΌΠΈΠ½ΡƒΡ‚ арасында {0} ΠΆΣ™Π½Π΅ {1}" #. At msgid "At" msgstr "Π‘Π°“Π°Ρ‚" #. SpaceAnd msgid " and" msgstr " ΠΆΣ™Π½Π΅" #. EverySecond msgid "every second" msgstr "Σ™Ρ€Π±Ρ–Ρ€ сСкунд сайын" #. EveryX0Seconds msgid "every {0} seconds" msgstr "Σ™Ρ€Π±Ρ–Ρ€ {0} сСкунд" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "сСкунд {0} ΠΆΣ©Π½Ρ–Π½Π΄Π΅Π³Ρ– {1} ΠΌΠΈΠ½ΡƒΡ‚Ρ‹Π½Π°" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "{0} сСкундтан ΠΊΠ΅ΠΉΡ–Π½ бастал“Π°Π½Π½Π°Π½ ΠΊΠ΅ΠΉΡ–Π½ ΠΌΠΈΠ½ΡƒΡ‚" #. EveryX0Minutes msgid "every {0} minutes" msgstr "Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΌΠΈΠ½ΡƒΡ‚" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "ΠΌΠΈΠ½ΡƒΡ‚ {0}-{1}" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "{0} ΠΌΠΈΠ½ΡƒΡ‚Ρ‚Π°Π½ ΠΊΠ΅ΠΉΡ–Π½ са“Π°Ρ‚" #. EveryX0Hours msgid "every {0} hours" msgstr "Σ™Ρ€Π±Ρ–Ρ€ {0} са“Π°Ρ‚" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "арасында {0} ΠΆΣ™Π½Π΅ {1}" #. AtX0 msgid "at {0}" msgstr "са“Π°Ρ‚ {0}" #. ComaEveryDay msgid ", every day" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ ΠΊ―Π½Ρ–" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΊ―Π½ Π°ΠΏΡ‚Π°" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0}-{1}" #. First msgid "first" msgstr "Π±Ρ–Ρ€Ρ–Π½ΡˆΡ–" #. Second msgid "second" msgstr "Π΅ΠΊΡ–Π½ΡˆΡ–" #. Third msgid "third" msgstr "―ΡˆΡ–Π½ΡˆΡ–" #. Fourth msgid "fourth" msgstr "Ρ‚Σ©Ρ€Ρ‚Ρ–Π½ΡˆΡ–" #. Fifth msgid "fifth" msgstr "Π±Π΅ΡΡ–Π½ΡˆΡ–" #. ComaOnThe msgid ", on the " msgstr ", " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} Π°ΠΉ" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ Π°ΠΉΠ΄Ρ‹£ со£“Ρ‹ {0}" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", Ρ‚Π΅ΠΊ {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ {0} Π°ΠΉ сайын" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", Ρ‚Π΅ΠΊ {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", Π°ΠΉΠ΄Ρ‹£ со£“Ρ‹ ΠΊ―Π½Ρ–" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", со£“Ρ‹ ΠΆ±ΠΌΡ‹Ρ ΠΊ―Π½Ρ– Π°ΠΉ" #. FirstWeekday msgid "first weekday" msgstr "Π±Ρ–Ρ€Ρ–Π½ΡˆΡ– ΠΆ±ΠΌΡ‹Ρ ΠΊ―Π½Ρ–" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "ΠΆΠ°›Ρ‹Π½Π΄Π° {0}-ΡˆΡ– ΠΊ―Π½Ρ–" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", {0}-Π°ΠΉΠ΄Ρ‹£" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΊ―Π½" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", арасында {0} ΠΆΣ™Π½Π΅ {1}-ΠΊ―Π½Π΄Ρ–Π· Π°ΠΉ" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", {0}-ΡˆΡ– ΠΊ―Π½Ρ– Π°ΠΉ" #. SpaceAndSpace msgid " and " msgstr " ΠΆΣ™Π½Π΅ " #. ComaEveryMinute msgid ", every minute" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ ΠΌΠΈΠ½ΡƒΡ‚ сайын" #. ComaEveryHour msgid ", every hour" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ са“Π°Ρ‚ сайын" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", Σ™Ρ€Π±Ρ–Ρ€ {0} ΠΆΡ‹Π» сайын" #. CommaStartingX0 msgid ", starting {0}" msgstr ", бастап {0}" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} ΠΊ―Π½ Π°ΠΉΠ΄Ρ‹£ со£“Ρ‹ ΠΊ―Π½Ρ–" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", Ρ‚Π΅ΠΊ {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ko_KR.mo000066400000000000000000000054531516023643100247070ustar00rootroot00000000000000ή•*l;Ό¨©΄&Ζ ν ω&CVh ‚Œ"«Ξν  #_5 •Ά½Ϊω   %2BTfl r€%†¬'³ΫαAω ; FRWpy‹š©ΏΡΰπσ # ; I O X ob σ χ  " 6 C P ] q ‚ “  € ΅ Ό Ψ ί ώ % $* ( #  &)!"% ' and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net PO-Revision-Date: 2020-11-13 02:37+0900 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: zh_CN X-Generator: Poedit 2.4.2 그리고 그리고 {0}, {0}λΆ€ν„° {1}μΌκΉŒμ§€, 맀일, λ§€μ‹œκ°„λ§ˆλ‹€, λ§€λΆ„λ§ˆλ‹€, {0}μΌλ§ˆλ‹€, λ§€μ£Ό {0}μΌλ§ˆλ‹€, {0}κ°œμ›”λ§ˆλ‹€, {0}λ…„λ§ˆλ‹€, λ§€μ›” {0}일, , λ§€μ›” λ§ˆμ§€λ§‰λ‚ , λ§€μ›” λ§ˆμ§€λ§‰ 평일, λ§€μ›” λ§ˆμ§€λ§‰ {0} , λ§€μ›” {0} , {0}, {0}에, {0}~{1}ν¬λ‘ ν‘œν˜„μ‹μ„ μƒμ„±ν•˜λŠ” 도쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. ν¬λ‘ ν‘œν˜„μ‹ 문법을 ν™•μΈν•˜μ„Έμš”.{0}λΆ€ν„° {1}κΉŒμ§€ λ§€λΆ„λ§ˆλ‹€{0}λ§€μ‹œκ°„ {0}λΆ„μ—λ§€λΆ„λ§ˆλ‹€ {0}μ΄ˆμ—{0}λΆ€ν„° {1}κΉŒμ§€λ§€μ‹œλ§ˆλ‹€λ§€λΆ„λ§ˆλ‹€λ§€μ΄ˆλ§ˆλ‹€λ§€ {0}μ‹œκ°„λ§ˆλ‹€λ§€ {0}λΆ„λ§ˆλ‹€λ§€ {0}μ΄ˆλ§ˆλ‹€λ‹€μ„―μ§Έμ²«μ§Έμ²«λ²ˆμ§Έ ν‰μΌλ„·μ§Έλ§€μ‹œκ°„ {0}~{1}λΆ„ λ™μ•ˆλ‘˜μ§Έλ§€λΆ„λ§ˆλ‹€ {0}~{1}초 λ™μ•ˆμ…‹μ§Έν‰μΌ κ°€μž₯ κ°€κΉŒμš΄ {0}번째 λ‚ Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ko_KR.po000066400000000000000000000116301516023643100247040ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2020-11-13 02:37+0900\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" "X-Generator: Poedit 2.4.2\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the " "cron expression syntax." msgstr "" "ν¬λ‘ ν‘œν˜„μ‹μ„ μƒμ„±ν•˜λŠ” 도쀑 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. ν¬λ‘ ν‘œν˜„μ‹ 문법을 ν™•μΈν•˜μ„Έμš”." #: ExpressionDescriptor.py:151 msgid "At " msgstr "" #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "{0}λΆ€ν„° {1}κΉŒμ§€ λ§€λΆ„λ§ˆλ‹€" #: ExpressionDescriptor.py:165 msgid "At" msgstr "" #: ExpressionDescriptor.py:175 msgid " and" msgstr " 그리고" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "λ§€μ΄ˆλ§ˆλ‹€" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "λ§€ {0}μ΄ˆλ§ˆλ‹€" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "λ§€λΆ„λ§ˆλ‹€ {0}~{1}초 λ™μ•ˆ" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "λ§€λΆ„λ§ˆλ‹€ {0}μ΄ˆμ—" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "λ§€λΆ„λ§ˆλ‹€" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "λ§€ {0}λΆ„λ§ˆλ‹€" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "λ§€μ‹œκ°„ {0}~{1}λΆ„ λ™μ•ˆ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "λ§€μ‹œκ°„ {0}뢄에" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "λ§€μ‹œλ§ˆλ‹€" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "λ§€ {0}μ‹œκ°„λ§ˆλ‹€" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "{0}λΆ€ν„° {1}κΉŒμ§€" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "{0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "첫째" #: ExpressionDescriptor.py:243 msgid "second" msgstr "λ‘˜μ§Έ" #: ExpressionDescriptor.py:245 msgid "third" msgstr "μ…‹μ§Έ" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "λ„·μ§Έ" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "λ‹€μ„―μ§Έ" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0}" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", λ§€μ›” λ§ˆμ§€λ§‰ {0} " #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", {0}에" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", 맀일" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", λ§€μ£Ό {0}μΌλ§ˆλ‹€" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0}~{1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", {0}κ°œμ›”λ§ˆλ‹€" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", λ§€μ›” λ§ˆμ§€λ§‰λ‚ " #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", λ§€μ›” λ§ˆμ§€λ§‰ 평일" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "첫번째 평일" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "평일 κ°€μž₯ κ°€κΉŒμš΄ {0}번째 λ‚ " #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", λ§€μ›” {0} " #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", {0}μΌλ§ˆλ‹€" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", {0}λΆ€ν„° {1}μΌκΉŒμ§€" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", λ§€μ›” {0}일" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", {0}λ…„λ§ˆλ‹€" #: ExpressionDescriptor.py:385 msgid " and " msgstr " 그리고 " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", λ§€λΆ„λ§ˆλ‹€" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", λ§€μ‹œκ°„λ§ˆλ‹€" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/nb_NO.mo000066400000000000000000000053061516023643100246720ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…‰Ž#Ÿ Γ ΞΪιψ - G R#s—· ΡήνJ M Q V u } š Ί Μ Φ γ π ώ   & . = ,C p /w §  and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: nb_NO og og {0} av mΓ₯neden, mellom dag {0} og {1} av mΓ₯neden, hver dag, hver time, hvert minutt, hver {0} dag, hver {0} ukedag, hver {0} mΓ₯ned], hvert {0} Γ₯r, pΓ₯ dag {0} av mΓ₯neden, pΓ₯ den , pΓ₯ den siste dagen i mΓ₯neden, pΓ₯ den siste ukedagen i mΓ₯neden, pΓ₯ den siste {0} av mΓ₯neden, pΓ₯ den {0} av mΓ₯neden, bare i {0}, bare pΓ₯ {0}, {0} til og med {1}En feil intraff ved generering av uttrykksbeskrivelse. Sjekk cron syntaks.PΓ₯PΓ₯ Hvert minutt mellom {0} og {1}pΓ₯ {0}pΓ₯ {0} minutter etter timenpΓ₯ {0} sekunder etter minuttetmellom {0} og {1}hver timehvert minutthvert sekundhver {0} timehvert {0} minutthvert {0} sekundfemtefΓΈrstefΓΈrste ukedagfjedeminuttene fra {0} til og med {1} etter timensekundsekundene fra {0} til og med {1} etter minuttettredjeukedag nΓ¦rmest dag {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/nb_NO.po000066400000000000000000000117111516023643100246720ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nb_NO\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "En feil intraff ved generering av uttrykksbeskrivelse. Sjekk cron syntaks." #: ExpressionDescriptor.py:151 msgid "At " msgstr "PΓ₯ " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Hvert minutt mellom {0} og {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "PΓ₯" #: ExpressionDescriptor.py:175 msgid " and" msgstr " og" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "hvert sekund" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "hvert {0} sekund" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "sekundene fra {0} til og med {1} etter minuttet" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "pΓ₯ {0} sekunder etter minuttet" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "hvert minutt" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "hvert {0} minutt" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "minuttene fra {0} til og med {1} etter timen" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "pΓ₯ {0} minutter etter timen" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "hver time" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "hver {0} time" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "mellom {0} og {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "pΓ₯ {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "fΓΈrste" #: ExpressionDescriptor.py:243 msgid "second" msgstr "sekund" #: ExpressionDescriptor.py:245 msgid "third" msgstr "tredje" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "fjede" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "femte" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", pΓ₯ den " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} av mΓ₯neden" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", pΓ₯ den siste {0} av mΓ₯neden" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", bare pΓ₯ {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", hver dag" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", hver {0} ukedag" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} til og med {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", hver {0} mΓ₯ned]" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", bare i {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", pΓ₯ den siste dagen i mΓ₯neden" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", pΓ₯ den siste ukedagen i mΓ₯neden" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "fΓΈrste ukedag" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "ukedag nΓ¦rmest dag {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", pΓ₯ den {0} av mΓ₯neden" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", hver {0} dag" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", mellom dag {0} og {1} av mΓ₯neden" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", pΓ₯ dag {0} av mΓ₯neden" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", hvert {0} Γ₯r" #: ExpressionDescriptor.py:385 msgid " and " msgstr " og " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", hvert minutt" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", hver time" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/nl_NL.mo000066400000000000000000000055651516023643100247100ustar00rootroot00000000000000ή•,|;άΘΙΞΤ&ζ  &5Fcvˆ ’¬"Λξ  ' 5C_U΅Έ Όέδ  4 ? LYi{“ ™§%­Σ'Ϊ' HLQ$c ˆ “ «ΌΩμύ $A f ‡   ° ΐ SΞ " % ) G N h … — Ÿ « Έ Ε Φ θ ο φ   * !1 S Y & ", *!%  (+#$' ) and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: nl_NL en en {0} van de maand, tussen dag {0} en {1} van de maand, elke dag, elk uur, elke minuut, elke {0} dagen, elke {0} dagen van de week, elke {0} maanden, elke {0} jaren, op dag {0} van de maand, op de , op de laatste dag van de maand, op de laatste werkdag van de maand, op de laatste {0} van de maand, op de {0} van de maand, alleen in {0}, alleen op {0}, {0} t/m {1}Er is een fout opgetreden bij het vertalen van de gegevens. Controleer de gegevens.OmOm Elke minuut tussen {0} en {1}op {0}op {0} minuten na het uurop {0} seconden na de minuuttussen {0} en {1}elk uurelke minuutelke secondeelke {0} uurelke {0} minutenelke {0} secondenvijfdeeersteeerste werkdagvierdeminuut {0} t/m {1} na het uurtweedeseconden {0} t/m {1} na de minuutderdewerkdag dichtst bij dag {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/nl_NL.po000066400000000000000000000116701516023643100247050ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl_NL\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Er is een fout opgetreden bij het vertalen van de gegevens. Controleer de " "gegevens." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Om " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Elke minuut tussen {0} en {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Om" #: ExpressionDescriptor.py:175 msgid " and" msgstr " en" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "elke seconde" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "elke {0} seconden" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "seconden {0} t/m {1} na de minuut" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "op {0} seconden na de minuut" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "elke minuut" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "elke {0} minuten" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "minuut {0} t/m {1} na het uur" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "op {0} minuten na het uur" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "elk uur" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "elke {0} uur" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "tussen {0} en {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "op {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "eerste" #: ExpressionDescriptor.py:243 msgid "second" msgstr "tweede" #: ExpressionDescriptor.py:245 msgid "third" msgstr "derde" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "vierde" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "vijfde" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", op de " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} van de maand" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", op de laatste {0} van de maand" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", alleen op {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", elke dag" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", elke {0} dagen van de week" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} t/m {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", elke {0} maanden" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", alleen in {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", op de laatste dag van de maand" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", op de laatste werkdag van de maand" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "eerste werkdag" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "werkdag dichtst bij dag {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", op de {0} van de maand" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", elke {0} dagen" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", tussen dag {0} en {1} van de maand" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", op dag {0} van de maand" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", elke {0} jaren" #: ExpressionDescriptor.py:385 msgid " and " msgstr " en " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", elke minuut" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", elk uur" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/pl_PL.mo000066400000000000000000000054421516023643100247060ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Π_βBE IjqŽ­ Α Μ Ωζφ  &4%;a'h–P& < H V cp† ™¦ΏΒ"έ  ( 4 @ L ([ „ a” φ ψ ϋ   ( 8 F R ] i w „ ’ ™ ’ Ί Β Χ έ σ 'ϊ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: pl_PL MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit i i {0} miesiΔ…ca, od {0}-ego do {1}-ego dnia miesiΔ…ca, co dzieΕ„, co godzinΔ™, co minutΔ™, co {0} dni, co {0} dni tygodnia, co {0} miesiΔ™cy, co {0} lat, {0}-ego dnia miesiΔ…ca, , ostatni dzieΕ„ miesiΔ…ca, ostatni dzieΕ„ roboczy miesiΔ…ca, ostatni {0} miesiΔ…ca, {0} miesiΔ…ca, tylko {0}, tylko {0}, tylko {0}, startowy {0}, {0} dni przed ostatnim dniem miesiΔ…ca, od {0} do {1}WystΔ…piΕ‚ bΕ‚Δ…d podczas generowania opisu wyraΕΌenia cron. SprawdΕΊ skΕ‚adniΔ™ wyraΕΌenia cron.OO Co minutΔ™ od {0} do {1}o {0}w {0} minuciew {0} sekundzieod {0} do {1}co godzinΔ™co minutΔ™co sekundΔ™co {0} godzinco {0} minutco {0} sekundpiΔ…typierwszypierwszy dzieΕ„ roboczyczwartyminuty od {0} do {1}drugisekundy od {0} do {1}trzecidzieΕ„ roboczy najbliΕΌszy {0}-ego dniaSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/pl_PL.po000066400000000000000000000074751516023643100247210ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "co minutΔ™" #. EveryHour msgid "every hour" msgstr "co godzinΔ™" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "WystΔ…piΕ‚ bΕ‚Δ…d podczas generowania opisu wyraΕΌenia cron. SprawdΕΊ skΕ‚adniΔ™ " "wyraΕΌenia cron." #. AtSpace msgid "At " msgstr "O " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "Co minutΔ™ od {0} do {1}" #. At msgid "At" msgstr "O" #. SpaceAnd msgid " and" msgstr " i" #. EverySecond msgid "every second" msgstr "co sekundΔ™" #. EveryX0Seconds msgid "every {0} seconds" msgstr "co {0} sekund" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "sekundy od {0} do {1}" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "w {0} sekundzie" #. EveryX0Minutes msgid "every {0} minutes" msgstr "co {0} minut" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "minuty od {0} do {1}" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "w {0} minucie" #. EveryX0Hours msgid "every {0} hours" msgstr "co {0} godzin" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "od {0} do {1}" #. AtX0 msgid "at {0}" msgstr "o {0}" #. ComaEveryDay msgid ", every day" msgstr ", co dzieΕ„" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", co {0} dni tygodnia" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", od {0} do {1}" #. First msgid "first" msgstr "pierwszy" #. Second msgid "second" msgstr "drugi" #. Third msgid "third" msgstr "trzeci" #. Fourth msgid "fourth" msgstr "czwarty" #. Fifth msgid "fifth" msgstr "piΔ…ty" #. ComaOnThe msgid ", on the " msgstr ", " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} miesiΔ…ca" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", ostatni {0} miesiΔ…ca" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", tylko {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", co {0} miesiΔ™cy" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", tylko {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", ostatni dzieΕ„ miesiΔ…ca" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", ostatni dzieΕ„ roboczy miesiΔ…ca" #. FirstWeekday msgid "first weekday" msgstr "pierwszy dzieΕ„ roboczy" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "dzieΕ„ roboczy najbliΕΌszy {0}-ego dnia" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", {0} miesiΔ…ca" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", co {0} dni" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", od {0}-ego do {1}-ego dnia miesiΔ…ca" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", {0}-ego dnia miesiΔ…ca" #. SpaceAndSpace msgid " and " msgstr " i " #. ComaEveryMinute msgid ", every minute" msgstr ", co minutΔ™" #. ComaEveryHour msgid ", every hour" msgstr ", co godzinΔ™" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", co {0} lat" #. CommaStartingX0 msgid ", starting {0}" msgstr ", startowy {0}" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} dni przed ostatnim dniem miesiΔ…ca" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", tylko {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/pt_PT.mo000066400000000000000000000052521516023643100247250ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…ˆ Œ!™ » ΘΦζψ'9NT"m©ΊΛά:λ& * / M U m ˆ ˜ € ² Α  ε ω    #' K &S z &ƒ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: pt_PT e e {0} do mΓͺs, entre os dias {0} e {1} do mΓͺs, a cada dia, a cada hora, a cada minuto, a cada {0} dias, a cada {0} dias de semana, a cada {0} meses, a cada {0} anos, no dia {0} do mΓͺs, na , no ΓΊltimo dia do mΓͺs, no ΓΊltimo dia da semana do mΓͺs, na ΓΊltima {0} do mΓͺs, no {0} do mΓͺs, somente em {0}, somente de {0}, de {0} a {1}Ocorreu um erro ao gerar a descriΓ§Γ£o da expressΓ£o Cron.Γ sΓ s a cada minuto entre {0} e {1}Γ€s {0}aos {0} minutos da horaaos {0} segundos do minutoentre {0} e {1}a cada horaa cada minutoa cada segundoa cada {0} horasa cada {0} minutosa cada {0} segundosquintaprimeiraprimeiro dia da semanaquartado minuto {0} atΓ© {1} de cada horasegundaNo segundo {0} atΓ© {1} de cada minutoterceiradia da semana mais prΓ³ximo do dia {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/pt_PT.po000066400000000000000000000116521516023643100247310ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_PT\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "Ocorreu um erro ao gerar a descriΓ§Γ£o da expressΓ£o Cron." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Γ s " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "a cada minuto entre {0} e {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Γ s" #: ExpressionDescriptor.py:175 msgid " and" msgstr " e" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "a cada segundo" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "a cada {0} segundos" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "No segundo {0} atΓ© {1} de cada minuto" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "aos {0} segundos do minuto" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "a cada minuto" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "a cada {0} minutos" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "do minuto {0} atΓ© {1} de cada hora" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "aos {0} minutos da hora" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "a cada hora" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "a cada {0} horas" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "entre {0} e {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "Γ€s {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "primeira" #: ExpressionDescriptor.py:243 msgid "second" msgstr "segunda" #: ExpressionDescriptor.py:245 msgid "third" msgstr "terceira" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "quarta" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "quinta" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", na " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} do mΓͺs" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", na ΓΊltima {0} do mΓͺs" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", somente de {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", a cada dia" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", a cada {0} dias de semana" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", de {0} a {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", a cada {0} meses" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", somente em {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", no ΓΊltimo dia do mΓͺs" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", no ΓΊltimo dia da semana do mΓͺs" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "primeiro dia da semana" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "dia da semana mais prΓ³ximo do dia {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", no {0} do mΓͺs" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", a cada {0} dias" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", entre os dias {0} e {1} do mΓͺs" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", no dia {0} do mΓͺs" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", a cada {0} anos" #: ExpressionDescriptor.py:385 msgid " and " msgstr " e " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", a cada minuto" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", a cada hora" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ro_RO.mo000066400000000000000000000057031516023643100247200ustar00rootroot00000000000000ή•0œ"(&: a mz‰š·Κά φ"Ba { ‰ —₯+΄ΰ_ςRU Yz}„‘ΐ Τ ί μω -3 9G%Nt'{£©PΑ %*Patˆ'žΖάρ  #' K d v … ” Ÿ (° Ω 4ν " % $) N \ c u ˆ › ¬ Ύ Σ ζ ό   " ; C _ "f ‰ 1‘ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}PMat {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: ro_RO MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Θ™i Θ™i {0} a lunii, Γntre zilele {0} Θ™i {1} ale lunii, Γn fiecare zi, Γn fiecare orΔƒ, Γn fiecare minut, la fiecare {0} zile, la fiecare a {0}-a zi a sΔƒptΔƒmΓ’nii, la fiecare {0} luni, o datΔƒ la {0} ani, Γn ziua {0} a lunii, Γn , Γn ultima zi a lunii, Γn ultima zi lucrΔƒtoare a lunii, Γn ultima {0} a lunii, Γn {0} a lunii, doar Γn {0}, doar Γn {0}, doar {0}, ΓncepΓ’nd {0}, {0} zile Γnainte de ultima zi a lunii, de {0} pΓ’nΔƒ {1}Eroare la generarea descrierii. VerificaΘ›i sintaxa.LaLa În fiecare minut Γntre {0} Θ™i {1}dupΔƒ amiazΔƒla {0}la Θ™i {0} minutela Θ™i {0} secundeΓntre {0} Θ™i {1}Γn fiecare orΔƒΓn fiecare minutΓn fiecare secundΔƒla fiecare {0} orela fiecare {0} minutela fiecare {0} secundea cinceaprimaprima zi a sΔƒptΔƒmΓ’niia patraΓntre minutele {0} Θ™i {1}a douaΓntre secunda {0} Θ™i secunda {1}a treiacea mai apropiatΔƒ zi a sΔƒptΔƒmΓ’nii de ziua {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ro_RO.po000066400000000000000000000077461516023643100247340ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: ro_RO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "Γn fiecare minut" #. EveryHour msgid "every hour" msgstr "Γn fiecare orΔƒ" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "Eroare la generarea descrierii. VerificaΘ›i sintaxa." #. AtSpace msgid "At " msgstr "La " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "În fiecare minut Γntre {0} Θ™i {1}" #. At msgid "At" msgstr "La" #. SpaceAnd msgid " and" msgstr " Θ™i" #. EverySecond msgid "every second" msgstr "Γn fiecare secundΔƒ" #. EveryX0Seconds msgid "every {0} seconds" msgstr "la fiecare {0} secunde" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "Γntre secunda {0} Θ™i secunda {1}" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "la Θ™i {0} secunde" #. EveryX0Minutes msgid "every {0} minutes" msgstr "la fiecare {0} minute" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "Γntre minutele {0} Θ™i {1}" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "la Θ™i {0} minute" #. EveryX0Hours msgid "every {0} hours" msgstr "la fiecare {0} ore" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "Γntre {0} Θ™i {1}" #. AtX0 msgid "at {0}" msgstr "la {0}" #. ComaEveryDay msgid ", every day" msgstr ", Γn fiecare zi" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", la fiecare a {0}-a zi a sΔƒptΔƒmΓ’nii" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", de {0} pΓ’nΔƒ {1}" #. First msgid "first" msgstr "prima" #. Second msgid "second" msgstr "a doua" #. Third msgid "third" msgstr "a treia" #. Fourth msgid "fourth" msgstr "a patra" #. Fifth msgid "fifth" msgstr "a cincea" #. ComaOnThe msgid ", on the " msgstr ", Γn " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} a lunii" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", Γn ultima {0} a lunii" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", doar {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", la fiecare {0} luni" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", doar Γn {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", Γn ultima zi a lunii" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", Γn ultima zi lucrΔƒtoare a lunii" #. FirstWeekday msgid "first weekday" msgstr "prima zi a sΔƒptΔƒmΓ’nii" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "cea mai apropiatΔƒ zi a sΔƒptΔƒmΓ’nii de ziua {0}" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", Γn {0} a lunii" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", la fiecare {0} zile" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", Γntre zilele {0} Θ™i {1} ale lunii" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", Γn ziua {0} a lunii" #. SpaceAndSpace msgid " and " msgstr " Θ™i " #. ComaEveryMinute msgid ", every minute" msgstr ", Γn fiecare minut" #. ComaEveryHour msgid ", every hour" msgstr ", Γn fiecare orΔƒ" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", o datΔƒ la {0} ani" #. CommaStartingX0 msgid ", starting {0}" msgstr ", ΓncepΓ’nd {0}" #. PMPeriod msgid "PM" msgstr "dupΔƒ amiazΔƒ" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} zile Γnainte de ultima zi a lunii" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", doar Γn {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ru_RU.mo000066400000000000000000000060541516023643100247340ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…‰Ž) Κβψ(0!Y{ •Ά-Ό:κ(% N d z  ͺŸ J M )Q { ‚ ” ¨ Έ Μ ζ   : X c "p “ ¦ Γ Π ο /ό and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: ru_RU ΠΈ ΠΈ {0} мСсяца, с {0} ΠΏΠΎ {1} число мСсяца, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час, ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ, ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} Π΄Π½Π΅ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} Π΄Π½Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ, ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} мСсяцСв, ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} Π»Π΅Ρ‚, Π² {0} число мСсяца, Π² , Π² послСдний дСнь мСсяца, Π² послСдний Π±ΡƒΠ΄Π½ΠΈΠΉ дСнь мСсяца, Π² послСдний {0} мСсяца, Π² {0} мСсяца, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² {0}, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² {0}, {0} ΠΏΠΎ {1}ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Π²ΠΎ врСмя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ описания выраТСния. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ синтаксис ΠΊΡ€ΠΎΠ½-выраТСния.Π’Π’ ΠšΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ с {0} ΠΏΠΎ {1}Π² {0}Π² {0} ΠΌΠΈΠ½ΡƒΡ‚Π² {0} сСкундс {0} ΠΏΠΎ {1}ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‡Π°ΡΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚ΡƒΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкундукаТдыС {0} часовкаТдыС {0} ΠΌΠΈΠ½ΡƒΡ‚ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} сСкундпятыйпСрвыйпСрвый Π±ΡƒΠ΄Π½ΠΈΠΉ Π΄Π΅Π½ΡŒΡ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉΠΌΠΈΠ½ΡƒΡ‚Ρ‹ с {0} ΠΏΠΎ {1}второйсСкунды с {0} ΠΏΠΎ {1}Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉΠ±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΠΉ Π±ΡƒΠ΄Π½ΠΈΠΉ дСнь ΠΊ {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ru_RU.po000066400000000000000000000124621516023643100247370ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru_RU\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Π²ΠΎ врСмя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ описания выраТСния. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ синтаксис " "ΠΊΡ€ΠΎΠ½-выраТСния." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Π’ " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "ΠšΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ с {0} ΠΏΠΎ {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Π’" #: ExpressionDescriptor.py:175 msgid " and" msgstr " ΠΈ" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "ΠΊΠ°ΠΆΠ΄ΡƒΡŽ сСкунду" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} сСкунд" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "сСкунды с {0} ΠΏΠΎ {1}" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "Π² {0} сСкунд" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} ΠΌΠΈΠ½ΡƒΡ‚" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ с {0} ΠΏΠΎ {1}" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "Π² {0} ΠΌΠΈΠ½ΡƒΡ‚" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} часов" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "с {0} ΠΏΠΎ {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "Π² {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ" #: ExpressionDescriptor.py:243 msgid "second" msgstr "Π²Ρ‚ΠΎΡ€ΠΎΠΉ" #: ExpressionDescriptor.py:245 msgid "third" msgstr "Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "пятый" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", Π² " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} мСсяца" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", Π² послСдний {0} мСсяца" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} Π΄Π½Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} ΠΏΠΎ {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} мСсяцСв" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", Π² послСдний дСнь мСсяца" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", Π² послСдний Π±ΡƒΠ΄Π½ΠΈΠΉ дСнь мСсяца" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π±ΡƒΠ΄Π½ΠΈΠΉ дСнь" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "блиТайший Π±ΡƒΠ΄Π½ΠΈΠΉ дСнь ΠΊ {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", Π² {0} мСсяца" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} Π΄Π½Π΅ΠΉ" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", с {0} ΠΏΠΎ {1} число мСсяца" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", Π² {0} число мСсяца" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ {0} Π»Π΅Ρ‚" #: ExpressionDescriptor.py:385 msgid " and " msgstr " ΠΈ " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΌΠΈΠ½ΡƒΡ‚Ρƒ" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ час" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/sk_SK.mo000066400000000000000000000055071516023643100247140ustar00rootroot00000000000000ή•,|;άΘΙΞΤ&ζ  &5Fcvˆ ’¬"Λξ  ' 5C_U΅Έ Όέδ  4 ? LYi{“ ™§%­Σ'Ϊ' HK O!\~ž°Εεϊ ! ' "@ c z ˆ ’ œ J© τ φ ω   . E U d t … ™  Δ Κ Π η π    !% & ", *!%  (+#$' ) and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: PO-Revision-Date: 2023-01-25 15:44+0100 Last-Translator: Erik TelepovskΓ½ Language-Team: Language: sk_SK MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 3.2.2 a a {0} mesiaca, medzi {0}. a {1}. dňom mesiaca, kaΕΎdΓ½ deň, kaΕΎdΓΊ hodinu, kaΕΎdΓΊ minΓΊtu, kaΕΎdΓ½ch {0} dnΓ­, kaΕΎdΓ½ch {0} dnΓ­ v tΓ½ΕΎdni, kaΕΎdΓ½ {0} mesiac, kaΕΎdΓ½ {0}. rok, {0}. deň mesiaca, na , poslednΓ½ deň mesiaca, poslednΓ½ pracovnΓ½ deň mesiaca, posledΓΊ {0} mesiaca, {0} mesiaca, iba {0}, iba {0}, {0} do {1}Nastala chyba pri generovanΓ­ popisu vΓ½razu. Skontrolujte syntax vΓ½razu.OO KaΕΎdΓΊ minΓΊtu medzi {0} a {1}o {0}o {0}. minΓΊte{0} sekΓΊnd po minΓΊtemedzi {0} a {1}kaΕΎdΓΊ hodinukaΕΎdΓΊ minΓΊtukaΕΎdΓΊ sekΓΊndukaΕΎdΓ½ch {0} hodinkaΕΎdΓ½ch {0} minΓΊtkaΕΎdΓ½ch {0} sekΓΊndpiatyprvΓ½prvΓ½ vΓ­kendovΓ½ deňőtvrtΓ½{0} aΕΎ {1} minΓΊtdruhΓ½{0} aΕΎ {1} sekΓΊndtretΓ­najbliΕΎΕ‘Γ­ pracovnΓ½ deň k {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/sk_SK.po000066400000000000000000000116101516023643100247070ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2023 # This file is distributed under the same license as the cron_descriptor package. # Erik TelepovskΓ½ , 2023. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-25 15:08+0200\n" "PO-Revision-Date: 2023-01-25 15:44+0100\n" "Last-Translator: Erik TelepovskΓ½ \n" "Language-Team: \n" "Language: sk_SK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.2.2\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "Nastala chyba pri generovanΓ­ popisu vΓ½razu. Skontrolujte syntax vΓ½razu." #: ExpressionDescriptor.py:151 msgid "At " msgstr "O " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "KaΕΎdΓΊ minΓΊtu medzi {0} a {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "O" #: ExpressionDescriptor.py:175 msgid " and" msgstr " a" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "kaΕΎdΓΊ sekΓΊndu" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "kaΕΎdΓ½ch {0} sekΓΊnd" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "{0} aΕΎ {1} sekΓΊnd" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "{0} sekΓΊnd po minΓΊte" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "kaΕΎdΓΊ minΓΊtu" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "kaΕΎdΓ½ch {0} minΓΊt" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "{0} aΕΎ {1} minΓΊt" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "o {0}. minΓΊte" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "kaΕΎdΓΊ hodinu" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "kaΕΎdΓ½ch {0} hodin" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "medzi {0} a {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "o {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "prvΓ½" #: ExpressionDescriptor.py:243 msgid "second" msgstr "druhΓ½" #: ExpressionDescriptor.py:245 msgid "third" msgstr "tretΓ­" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "Ε‘tvrtΓ½" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "piaty" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", na " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} mesiaca" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", posledΓΊ {0} mesiaca" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", iba {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", kaΕΎdΓ½ deň" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", kaΕΎdΓ½ch {0} dnΓ­ v tΓ½ΕΎdni" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} do {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", kaΕΎdΓ½ {0} mesiac" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", iba {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", poslednΓ½ deň mesiaca" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", poslednΓ½ pracovnΓ½ deň mesiaca" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "prvΓ½ vΓ­kendovΓ½ deň" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "najbliΕΎΕ‘Γ­ pracovnΓ½ deň k {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", {0} mesiaca" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", kaΕΎdΓ½ch {0} dnΓ­" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", medzi {0}. a {1}. dňom mesiaca" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", {0}. deň mesiaca" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", kaΕΎdΓ½ {0}. rok" #: ExpressionDescriptor.py:385 msgid " and " msgstr " a " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", kaΕΎdΓΊ minΓΊtu" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", kaΕΎdΓΊ hodinu" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/sl_SI.mo000066400000000000000000000053741516023643100247150ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Π_βBE IjqŽ­ Α Μ Ωζφ  &4%;a'h–P  5 @L[l…š«ΏΒΨφ  ( 5 B R o R  Υ Ω τ ϋ   ( 2 ? M [ l ~ ƒ ˆ ™ ‘ Ά Ό  "Ω and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: sl_SI MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit in in {0} v mesecu, od {0}. do {1}. dne v mesecu, vsak dan, vsako uro, vsako minuto, vsakih {0} dni, vsakih {0} dni v tednu, vsakih {0} mesecev, vsakih {0} let, {0}. dan v mesecu, , zadnji dan v mesecu, zadnji delovni dan v mesecu, zadnji {0} v mesecu, {0} v mesecu, samo v {0}, samo v {0}, samo v {0}, začenΕ‘i {0}, {0} dni pred koncem meseca, od {0} do {1}Pri generiranju opisa izraza je priΕ‘lo do napake. Preverite sintakso izraza cron.ObOb Vsako minuto od {0} do {1}ob {0}ob {0}. minutiob {0}. sekundiod {0} do {1}vsako urovsako minutovsako sekundovsakih {0} urvsakih {0} minutvsakih {0} sekundpetiprviprvi delovni dančetrtiminute od {0} do {1}drugisekunde od {0} do {1}tretjidelovni dan, najbliΕΎji {0}. dnevuSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/sl_SI.po000066400000000000000000000074271516023643100247210ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: sl_SI\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "vsako minuto" #. EveryHour msgid "every hour" msgstr "vsako uro" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Pri generiranju opisa izraza je priΕ‘lo do napake. Preverite sintakso izraza " "cron." #. AtSpace msgid "At " msgstr "Ob " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "Vsako minuto od {0} do {1}" #. At msgid "At" msgstr "Ob" #. SpaceAnd msgid " and" msgstr " in" #. EverySecond msgid "every second" msgstr "vsako sekundo" #. EveryX0Seconds msgid "every {0} seconds" msgstr "vsakih {0} sekund" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "sekunde od {0} do {1}" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "ob {0}. sekundi" #. EveryX0Minutes msgid "every {0} minutes" msgstr "vsakih {0} minut" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "minute od {0} do {1}" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "ob {0}. minuti" #. EveryX0Hours msgid "every {0} hours" msgstr "vsakih {0} ur" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "od {0} do {1}" #. AtX0 msgid "at {0}" msgstr "ob {0}" #. ComaEveryDay msgid ", every day" msgstr ", vsak dan" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", vsakih {0} dni v tednu" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", od {0} do {1}" #. First msgid "first" msgstr "prvi" #. Second msgid "second" msgstr "drugi" #. Third msgid "third" msgstr "tretji" #. Fourth msgid "fourth" msgstr "četrti" #. Fifth msgid "fifth" msgstr "peti" #. ComaOnThe msgid ", on the " msgstr ", " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr " {0} v mesecu" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", zadnji {0} v mesecu" #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", samo v {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", vsakih {0} mesecev" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", samo v {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", zadnji dan v mesecu" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", zadnji delovni dan v mesecu" #. FirstWeekday msgid "first weekday" msgstr "prvi delovni dan" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "delovni dan, najbliΕΎji {0}. dnevu" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", {0} v mesecu" #. ComaEveryX0Days msgid ", every {0} days" msgstr ", vsakih {0} dni" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", od {0}. do {1}. dne v mesecu" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", {0}. dan v mesecu" #. SpaceAndSpace msgid " and " msgstr " in " #. ComaEveryMinute msgid ", every minute" msgstr ", vsako minuto" #. ComaEveryHour msgid ", every hour" msgstr ", vsako uro" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", vsakih {0} let" #. CommaStartingX0 msgid ", starting {0}" msgstr ", začenΕ‘i {0}" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} dni pred koncem meseca" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", samo v {0}" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/sv_SE.mo000066400000000000000000000061511516023643100247150ustar00rootroot00000000000000ή•,|;άΘΙΞΤ&ζ  &5Fcvˆ ’¬"Λξ  ' 5C_U΅Έ Όέδ  4 ? LYi{“ ™§%­Σ'ΪΣ τω# 5 A O ] m ‚ – ¦ Ώ Κ %λ  0 K Z i _€ ΰ δ ι   - L _ k w „ ” € ΅ » Γ Τ 1ά  3 H O & ", *!%  (+#$' ) and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: cron-descriptor Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-02-14 18:02+0100 Last-Translator: Γ…ke Engelbrektson Language-Team: SvenskaSprΓ₯kfiler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: sv_SE X-Generator: Poedit 1.8.7 Plural-Forms: nplurals=2; plural=(n != 1); och och {0}:a i mΓ₯naden, mellan dag {0} och {1} i mΓ₯naden, varje dag, varje timma, varje minut, var {0}:e dag, var {0}:e veckodag, var {0}:e mΓ₯nad], var {0}:e Γ₯r, pΓ₯ dag {0} i mΓ₯naden, pΓ₯ den , pΓ₯ den sista dagen i mΓ₯naden, pΓ₯ den sista veckodagen i mΓ₯naden, pΓ₯ den sista {0} i mΓ₯naden, pΓ₯ den {0}:a i mΓ₯naden, endast i {0}, bara pΓ₯ {0}, {0} till och med {1}Ett fel intrΓ€ffade vid generering av uttryckets beskrivning. Kontrollera crons uttryckssyntax.VidVid Varje minut mellan {0} och {1}vid {0}vid {0} minuter ΓΆver timmanvid {0} sekunder ΓΆver minutenmellan {0} och {1}Varje timmavarje minutvarje sekundvar {0}:e timmavar {0}:e minutvar {0}:e sekundfemtefΓΆrstafΓΆrsta veckodagfjΓ€rdeminuterna frΓ₯n {0} till och med {1} ΓΆver timmanandrasekunderna frΓ₯n {0} till och med {1} ΓΆver minutentredjeveckodag nΓ€rmast dag {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/sv_SE.po000066400000000000000000000111721516023643100247170ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: cron-descriptor\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-02-12 07:33+0100\n" "Last-Translator: Γ…ke Engelbrektson \n" "Language-Team: SvenskaSprΓ₯kfiler \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sv_SE\n" "X-Generator: Poedit 1.5.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "" "Ett fel intrΓ€ffade vid generering av uttryckets beskrivning. Kontrollera " "crons uttryckssyntax." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Vid " #: ExpressionDescriptor.py:160 msgid "Every minute between {0} and {1}" msgstr "Varje minut mellan {0} och {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Vid" #: ExpressionDescriptor.py:175 msgid " and" msgstr " och" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "varje sekund" #: ExpressionDescriptor.py:201 msgid "every {0} seconds" msgstr "var {0}:e sekund" #: ExpressionDescriptor.py:201 msgid "seconds {0} through {1} past the minute" msgstr "sekunderna frΓ₯n {0} till och med {1} ΓΆver minuten" #: ExpressionDescriptor.py:201 msgid "at {0} seconds past the minute" msgstr "vid {0} sekunder ΓΆver minuten" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "varje minut" #: ExpressionDescriptor.py:209 msgid "every {0} minutes" msgstr "var {0}:e minut" #: ExpressionDescriptor.py:209 msgid "minutes {0} through {1} past the hour" msgstr "minuterna frΓ₯n {0} till och med {1} ΓΆver timman" #: ExpressionDescriptor.py:209 msgid "at {0} minutes past the hour" msgstr "vid {0} minuter ΓΆver timman" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "Varje timma" #: ExpressionDescriptor.py:218 msgid "every {0} hours" msgstr "var {0}:e timma" #: ExpressionDescriptor.py:218 msgid "between {0} and {1}" msgstr "mellan {0} och {1}" #: ExpressionDescriptor.py:218 msgid "at {0}" msgstr "vid {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "fΓΆrsta" #: ExpressionDescriptor.py:243 msgid "second" msgstr "andra" #: ExpressionDescriptor.py:245 msgid "third" msgstr "tredje" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "fjΓ€rde" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "femte" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", pΓ₯ den " #: ExpressionDescriptor.py:252 msgid " {0} of the month" msgstr " {0}:a i mΓ₯naden" #: ExpressionDescriptor.py:254 msgid ", on the last {0} of the month" msgstr ", pΓ₯ den sista {0} i mΓ₯naden" #: ExpressionDescriptor.py:256 msgid ", only on {0}" msgstr ", bara pΓ₯ {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", varje dag" #: ExpressionDescriptor.py:260 msgid ", every {0} days of the week" msgstr ", var {0}:e veckodag" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 msgid ", {0} through {1}" msgstr ", {0} till och med {1}" #: ExpressionDescriptor.py:272 msgid ", every {0} months" msgstr ", var {0}:e mΓ₯nad]" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 msgid ", only in {0}" msgstr ", endast i {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", pΓ₯ den sista dagen i mΓ₯naden" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", pΓ₯ den sista veckodagen i mΓ₯naden" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "fΓΆrsta veckodag" #: ExpressionDescriptor.py:297 msgid "weekday nearest day {0}" msgstr "veckodag nΓ€rmast dag {0}" #: ExpressionDescriptor.py:299 msgid ", on the {0} of the month" msgstr ", pΓ₯ den {0}:a i mΓ₯naden" #: ExpressionDescriptor.py:303 msgid ", every {0} days" msgstr ", var {0}:e dag" #: ExpressionDescriptor.py:304 msgid ", between day {0} and {1} of the month" msgstr ", mellan dag {0} och {1} i mΓ₯naden" #: ExpressionDescriptor.py:304 msgid ", on day {0} of the month" msgstr ", pΓ₯ dag {0} i mΓ₯naden" #: ExpressionDescriptor.py:316 msgid ", every {0} years" msgstr ", var {0}:e Γ₯r" #: ExpressionDescriptor.py:385 msgid " and " msgstr " och " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", varje minut" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", varje timma" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ta_IN.mo000066400000000000000000000111111516023643100246600ustar00rootroot00000000000000ή•,|;άΘΙΞΤ&ζ  &5Fcvˆ ’¬"Λξ  ' 5C_U΅Έ Όέδ  4 ? LYi{“ ™§%­Σ'Ϊ  AW os : 6W CŽ _ F2 Iy 4Γ ψ @ JU A  1β % +: #f 2Š ½ Σ _Χ 7WQQ©-ϋ8)4b.—8ΖJGJ’«&Αθej_†ζF& ", *!%  (+#$' ) and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: PO-Revision-Date: 2022-01-23 23:54+0530 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: ta_IN Last-Translator: Sankar Hari Language-Team: X-Generator: Poedit 3.0 ΰΰ±ΰ―ΰ±ΰ―ΰ் ΰΰ±ΰ―ΰ±ΰ―ΰ் ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0}, ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0} ΰΰ±ΰ―ΰ±ΰ―ΰ் {1} ΰ¨ΰΎΰŸΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ு ΰ‡ΰŸΰ―ˆΰ―ΰΏΰ²ΰ―, ΰ€ΰΏΰ©ΰுΰ், ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰΰ£ΰΏ ΰ¨ΰ―‡ΰ°ΰுΰ், ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰ¨ΰΏΰΰΏΰŸΰுΰ், ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ¨ΰΎΰŸΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ், ΰ΅ΰΎΰ°ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ¨ΰΎΰŸΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ், ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰΰΎΰ€ΰ™ΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ், ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ΅ΰ°ΰ―ΰŸΰ™ΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ், ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0} ΰ¨ΰΎΰ³ΰΏΰ²ΰ―, ΰ…ΰ€ΰ©ΰ― ΰΰ―‡ΰ²ΰ―, ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ•ΰŸΰ―ˆΰšΰΏ ΰ¨ΰΎΰ³ΰΏΰ²ΰ―, ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ•ΰŸΰ―ˆΰšΰΏ ΰ΅ΰΎΰ° ΰ¨ΰΎΰ³ΰΏΰ²ΰ―, ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ•ΰŸΰ―ˆΰšΰΏ {0} ΰ…ΰ©ΰ―ΰ±ΰ―, ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0} ΰ…ΰ©ΰ―ΰ±ΰ―, {0} ΰ‡ΰ²ΰ― ΰΰŸΰ―ΰŸΰ―ΰ், {0} ΰ…ΰ©ΰ―ΰ±ΰ― ΰΰŸΰ―ΰŸΰ―ΰ், {0} ΰுΰ€ΰ²ΰ― {1} ΰ΅ΰ°ΰ―ˆΰ΅ΰ―†ΰ³ΰΏΰͺ்ΰͺΰΎΰŸΰ― ΰ΅ΰΏΰ³ΰ•்ΰ•ΰ€ΰ―ΰ€ΰ―ˆ ΰ‰ΰ°ΰ―ΰ΅ΰΎΰ•்ΰ•ுΰ் ΰͺΰ―‹ΰ€ΰ― ΰͺΰΏΰ΄ΰ―ˆ ΰΰ±ΰ―ΰͺΰŸΰ―ΰŸΰ€ΰ―. ΰ•்ΰ°ΰΎΰ©ΰ― ΰ΅ΰ―†ΰ³ΰΏΰͺ்ΰͺΰΎΰŸΰ―ΰŸΰ―ˆ ΰšΰ°ΰΏΰͺΰΎΰ°ΰ―ΰ•்ΰ•ΰ΅ΰ―ΰ்.ΰ΅ΰ―†ΰ³ΰΏΰͺ்ΰͺΰΎΰŸΰ― ΰ€ΰ―ŠΰŸΰ°ΰΏΰ―ΰ²ΰ―.ΰΰ£ΰΏΰ•்ΰ•ுVe ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― ΰ¨ΰΏΰΰΏΰŸΰுΰ் {0} ΰΰ±ΰ―ΰ±ΰ―ΰ் {1} ΰ‡ΰŸΰ―ˆΰ―ΰ―‡{0} ΰΰ£ΰΏΰ•்ΰ•ுΰΰ£ΰΏΰ¨ΰ―‡ΰ°ΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰ¨ΰΏΰΰΏΰŸΰ™ΰ―ΰ•ΰ³ΰΏΰ²ΰ―ΰ¨ΰΏΰΰΏΰŸΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰ΅ΰΏΰ©ΰΎΰŸΰΏΰ•ΰ³ΰΏΰ²ΰ―{0} ΰΰ±ΰ―ΰ±ΰ―ΰ் {1} ΰ‡ΰŸΰ―ˆΰ―ΰ―‡ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰΰ£ΰΏ ΰ¨ΰ―‡ΰ°ΰுΰ்ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰ¨ΰΏΰΰΏΰŸΰுΰ்ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― ΰ¨ΰ―ŠΰŸΰΏΰ―ுΰ்ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰΰ£ΰΏΰ¨ΰ―‡ΰ°ΰுΰ்ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ¨ΰΏΰΰΏΰŸΰ™ΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ΅ΰΏΰ©ΰΎΰŸΰΏΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்ΰΰ¨ΰ―ΰ€ΰΎΰ΅ΰ€ΰ―ΰுΰ€ΰ²ΰΏΰ²ΰ―ΰுΰ€ΰ²ΰ― ΰ΅ΰΎΰ° ΰ¨ΰΎΰ³ΰ―ΰ¨ΰΎΰ©ΰ―ΰ•ΰΎΰ΅ΰ€ΰ―ΰΰ£ΰΏΰ¨ΰ―‡ΰ°ΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰுΰ€ΰ²ΰ― {1} ΰ¨ΰΏΰΰΏΰŸΰ™ΰ―ΰ•ΰ³ΰ―ΰ‡ΰ°ΰ£ΰ―ΰŸΰΎΰ΅ΰ€ΰ―ΰ¨ΰΏΰΰΏΰŸΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰுΰ€ΰ²ΰ― {1} ΰ΅ΰΏΰ©ΰΎΰŸΰΏΰ•ΰ³ΰ―ΰΰ―‚ΰ©ΰ―ΰ±ΰΎΰ΅ΰ€ΰ―ΰ΅ΰΎΰ° ΰ¨ΰΎΰ³ΰ― ΰ…ΰ°ΰ―ΰ•ΰΏΰ²ΰ―ΰ³ΰ―ΰ³ ΰ¨ΰΎΰ³ΰ― {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/ta_IN.po000066400000000000000000000151711516023643100246750ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Sankar Hari , 2022. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-01-23 02:00+0100\n" "PO-Revision-Date: 2022-01-23 23:54+0530\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ta_IN\n" "Last-Translator: Sankar Hari \n" "Language-Team: \n" "X-Generator: Poedit 3.0\n" #: ExpressionDescriptor.py:130 msgid "An error occured when generating the expression description. Check the cron expression syntax." msgstr "ΰ΅ΰ―†ΰ³ΰΏΰͺ்ΰͺΰΎΰŸΰ― ΰ΅ΰΏΰ³ΰ•்ΰ•ΰ€ΰ―ΰ€ΰ―ˆ ΰ‰ΰ°ΰ―ΰ΅ΰΎΰ•்ΰ•ுΰ் ΰͺΰ―‹ΰ€ΰ― ΰͺΰΏΰ΄ΰ―ˆ ΰΰ±ΰ―ΰͺΰŸΰ―ΰŸΰ€ΰ―. ΰ•்ΰ°ΰΎΰ©ΰ― ΰ΅ΰ―†ΰ³ΰΏΰͺ்ΰͺΰΎΰŸΰ―ΰŸΰ―ˆ ΰšΰ°ΰΏΰͺΰΎΰ°ΰ―ΰ•்ΰ•ΰ΅ΰ―ΰ்.ΰ΅ΰ―†ΰ³ΰΏΰͺ்ΰͺΰΎΰŸΰ― ΰ€ΰ―ŠΰŸΰ°ΰΏΰ―ΰ²ΰ―." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Ve " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― ΰ¨ΰΏΰΰΏΰŸΰுΰ் {0} ΰΰ±ΰ―ΰ±ΰ―ΰ் {1} ΰ‡ΰŸΰ―ˆΰ―ΰ―‡" #: ExpressionDescriptor.py:165 msgid "At" msgstr "ΰΰ£ΰΏΰ•்ΰ•ு" #: ExpressionDescriptor.py:175 msgid " and" msgstr "ΰΰ±ΰ―ΰ±ΰ―ΰ்" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― ΰ¨ΰ―ŠΰŸΰΏΰ―ுΰ்" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ΅ΰΏΰ©ΰΎΰŸΰΏΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "ΰ¨ΰΏΰΰΏΰŸΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰுΰ€ΰ²ΰ― {1} ΰ΅ΰΏΰ©ΰΎΰŸΰΏΰ•ΰ³ΰ―" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "ΰ¨ΰΏΰΰΏΰŸΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰ΅ΰΏΰ©ΰΎΰŸΰΏΰ•ΰ³ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰ¨ΰΏΰΰΏΰŸΰுΰ்" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ¨ΰΏΰΰΏΰŸΰ™ΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "ΰΰ£ΰΏΰ¨ΰ―‡ΰ°ΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰுΰ€ΰ²ΰ― {1} ΰ¨ΰΏΰΰΏΰŸΰ™ΰ―ΰ•ΰ³ΰ―" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "ΰΰ£ΰΏΰ¨ΰ―‡ΰ°ΰ€ΰ―ΰ€ΰ―ˆ ΰ•ΰŸΰ¨ΰ―ΰ€ {0} ΰ¨ΰΏΰΰΏΰŸΰ™ΰ―ΰ•ΰ³ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰΰ£ΰΏ ΰ¨ΰ―‡ΰ°ΰுΰ்" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰΰ£ΰΏΰ¨ΰ―‡ΰ°ΰுΰ்" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "{0} ΰΰ±ΰ―ΰ±ΰ―ΰ் {1} ΰ‡ΰŸΰ―ˆΰ―ΰ―‡" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "{0} ΰΰ£ΰΏΰ•்ΰ•ு" #: ExpressionDescriptor.py:241 msgid "first" msgstr "ΰுΰ€ΰ²ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:243 msgid "second" msgstr "ΰ‡ΰ°ΰ£ΰ―ΰŸΰΎΰ΅ΰ€ΰ―" #: ExpressionDescriptor.py:245 msgid "third" msgstr "ΰΰ―‚ΰ©ΰ―ΰ±ΰΎΰ΅ΰ€ΰ―" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "ΰ¨ΰΎΰ©ΰ―ΰ•ΰΎΰ΅ΰ€ΰ―" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "ΰΰ¨ΰ―ΰ€ΰΎΰ΅ΰ€ΰ―" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", ΰ…ΰ€ΰ©ΰ― ΰΰ―‡ΰ²ΰ―" #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0}" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ•ΰŸΰ―ˆΰšΰΏ {0} ΰ…ΰ©ΰ―ΰ±ΰ―" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", {0} ΰ…ΰ©ΰ―ΰ±ΰ― ΰΰŸΰ―ΰŸΰ―ΰ்" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 ExpressionDescriptor.py:435 msgid ", every day" msgstr ", ΰ€ΰΏΰ©ΰுΰ்" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", ΰ΅ΰΎΰ°ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ¨ΰΎΰŸΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} ΰுΰ€ΰ²ΰ― {1} ΰ΅ΰ°ΰ―ˆ" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰΰΎΰ€ΰ™ΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", {0} ΰ‡ΰ²ΰ― ΰΰŸΰ―ΰŸΰ―ΰ்" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ•ΰŸΰ―ˆΰšΰΏ ΰ¨ΰΎΰ³ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― ΰ•ΰŸΰ―ˆΰšΰΏ ΰ΅ΰΎΰ° ΰ¨ΰΎΰ³ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "ΰுΰ€ΰ²ΰ― ΰ΅ΰΎΰ° ΰ¨ΰΎΰ³ΰ―" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "ΰ΅ΰΎΰ° ΰ¨ΰΎΰ³ΰ― ΰ…ΰ°ΰ―ΰ•ΰΏΰ²ΰ―ΰ³ΰ―ΰ³ ΰ¨ΰΎΰ³ΰ― {0}" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0} ΰ…ΰ©ΰ―ΰ±ΰ―" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ¨ΰΎΰŸΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0} ΰΰ±ΰ―ΰ±ΰ―ΰ் {1} ΰ¨ΰΎΰŸΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ு ΰ‡ΰŸΰ―ˆΰ―ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", ΰΰΎΰ€ΰ€ΰ―ΰ€ΰΏΰ©ΰ― {0} ΰ¨ΰΎΰ³ΰΏΰ²ΰ―" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", ΰ’ΰ΅ΰ―ΰ΅ΰ―Šΰ°ΰ― {0} ΰ΅ΰ°ΰ―ΰŸΰ™ΰ―ΰ•ΰ³ΰ―ΰ•்ΰ•ுΰ்" #: ExpressionDescriptor.py:385 msgid " and " msgstr " ΰΰ±ΰ―ΰ±ΰ―ΰ் " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰ¨ΰΏΰΰΏΰŸΰுΰ்" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", ΰ’ΰ΅ΰ―ΰ΅ΰ―†ΰΎΰ°ΰ― ΰΰ£ΰΏ ΰ¨ΰ―‡ΰ°ΰுΰ்" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/tr_TR.mo000066400000000000000000000053101516023643100247240ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…‰ Ž$š Ώ Κ Υβσ *>GZq ˆ”§»XΣ, 1 &7 ^ g ƒ ‘ · ΐ Λ Φ ε ϊ    + )7 a +h ” (Ÿ and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: tr_TR ve ve {0} gΓΌnΓΌ, ayΔ±n {0}. ve {1}. gΓΌnleri arasΔ±, her gΓΌn, her saat, her dakika, {0} gΓΌnde bir, ayΔ±n her {0} gΓΌnΓΌ, {0} ayda bir, {0} yΔ±lda bir, ayΔ±n {0}. gΓΌnΓΌ, ayΔ±n , ayΔ±n son gΓΌnΓΌ, ayΔ±n son iş gΓΌnΓΌ, ayΔ±n son {0} gΓΌnΓΌ, ayΔ±n {0}, sadece {0} iΓ§in, sadece {0} gΓΌnΓΌ, {0} ile {1} arasΔ±ndaΔ°fade aΓ§Δ±klamasΔ±nΔ± oluştururken bir hata oluştu. Cron ifadesini gΓΆzden geΓ§irin.SaatSaat Saat {0} ve {1} arasΔ±ndaki her dakikasaat {0}saatlerin {0}. dakikasΔ±ndadakikalarΔ±n {0}. saniyesinde{0} ile {1} arasΔ±ndaher saather dakikaher saniyeher {0} saatteher {0} dakikada birher {0} saniyede birbeşinciilkilk iş gΓΌnΓΌdΓΆrdΓΌncΓΌsaatlerin {0}. ve {1}. dakikalarΔ± arasΔ±ikincidakikalarΔ±n {0}. ve {1}. saniyeleri arasΔ±ΓΌΓ§ΓΌncΓΌ{0}. gΓΌnΓΌ sonrasΔ±ndaki ilk iş gΓΌnΓΌSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/tr_TR.po000066400000000000000000000117161516023643100247360ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "Δ°fade aΓ§Δ±klamasΔ±nΔ± oluştururken bir hata oluştu. Cron ifadesini gΓΆzden " "geΓ§irin." #: ExpressionDescriptor.py:151 msgid "At " msgstr "Saat " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Saat {0} ve {1} arasΔ±ndaki her dakika" #: ExpressionDescriptor.py:165 msgid "At" msgstr "Saat" #: ExpressionDescriptor.py:175 msgid " and" msgstr " ve" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "her saniye" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "her {0} saniyede bir" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "dakikalarΔ±n {0}. ve {1}. saniyeleri arasΔ±" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "dakikalarΔ±n {0}. saniyesinde" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "her dakika" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "her {0} dakikada bir" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "saatlerin {0}. ve {1}. dakikalarΔ± arasΔ±" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "saatlerin {0}. dakikasΔ±nda" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "her saat" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "her {0} saatte" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "{0} ile {1} arasΔ±nda" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "saat {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "ilk" #: ExpressionDescriptor.py:243 msgid "second" msgstr "ikinci" #: ExpressionDescriptor.py:245 msgid "third" msgstr "ΓΌΓ§ΓΌncΓΌ" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "dΓΆrdΓΌncΓΌ" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "beşinci" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", ayΔ±n " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} gΓΌnΓΌ" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", ayΔ±n son {0} gΓΌnΓΌ" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", sadece {0} gΓΌnΓΌ" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", her gΓΌn" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", ayΔ±n her {0} gΓΌnΓΌ" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} ile {1} arasΔ±nda" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", {0} ayda bir" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", sadece {0} iΓ§in" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", ayΔ±n son gΓΌnΓΌ" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", ayΔ±n son iş gΓΌnΓΌ" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "ilk iş gΓΌnΓΌ" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "{0}. gΓΌnΓΌ sonrasΔ±ndaki ilk iş gΓΌnΓΌ" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", ayΔ±n {0}" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", {0} gΓΌnde bir" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", ayΔ±n {0}. ve {1}. gΓΌnleri arasΔ±" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", ayΔ±n {0}. gΓΌnΓΌ" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", {0} yΔ±lda bir" #: ExpressionDescriptor.py:385 msgid " and " msgstr " ve " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", her dakika" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", her saat" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/uk_UA.mo000066400000000000000000000057531516023643100247110ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…‹’-€γφ $%Jh ‚£+©/Υ& , B X n Ÿ}   &$ K R h ~ ’ £ Ά Ι γ   ' 4 N a €  ¬ 1Ή and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: uk_UA Ρ‚Π° Ρ‚Π° {0} місяця, ΠΌΡ–ΠΆ {0} Ρ‚Π° {1} днями місяця, Ρ‰ΠΎΠ΄Π΅Π½Π½ΠΎ, Ρ‰ΠΎΠ³ΠΎΠ΄ΠΈΠ½ΠΈ, Ρ‰ΠΎΡ…Π²ΠΈΠ»ΠΈΠ½ΠΈ, ΠΊΠΎΠΆΠ΅Π½ {0} дСнь, ΠΊΠΎΠΆΠ΅Π½ {0} дСнь тиТня, ΠΊΠΎΠΆΠ΅Π½ {0} ΠΌΡ–ΡΡΡ†ΡŒ, ΠΊΠΎΠΆΠ½Ρ– {0} Ρ€ΠΎΠΊΠΈ, Π½Π° {0} дСнь місяця, Π² , Π² останній дСнь місяця, Π² останній Π±ΡƒΠ΄Π΅Π½ΡŒ місяця, Π² останній {0} місяця, Π² {0} місяця, Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π² {0}, Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π² {0}, {0} ΠΏΠΎ {1}ВІдбулася ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° підчас Π³Π΅Π½Π΅Ρ€Π°Ρ†Ρ–Ρ— опису. ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ–ΡΡ‚ΡŒ написання cron Π²ΠΈΡ€Π°Π·Ρƒ.ОО Π©ΠΎΡ…Π²ΠΈΠ»ΠΈΠ½ΠΈ ΠΌΡ–ΠΆ {0} Ρ‚Π° {1}ΠΎ {0}ΠΎ {0} Ρ…Π²ΠΈΠ»ΠΈΠ½Ρ–ΠΎ {0} сСкундіміТ {0} Ρ‚Π° {1}щогодинищохвилиниЩосСкундикоТні {0} Π³ΠΎΠ΄ΠΈΠ½ΠΊΠΎΠΆΠ½Ρ– {0} Ρ…Π²ΠΈΠ»ΠΈΠ½ΠΊΠΎΠΆΠ½Ρ– {0} сСкундп'ΡΡ‚ΠΈΠΉΠΏΠ΅Ρ€ΡˆΠΈΠΉΠΏΠ΅Ρ€ΡˆΠΈΠΉ Π±ΡƒΠ΄Π΅Π½ΡŒΡ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΈΠΉΠ· {0} ΠΏΠΎ {1} Ρ…Π²ΠΈΠ»ΠΈΠ½ΡƒΠ΄Ρ€ΡƒΠ³ΠΈΠΉΠ· {0} ΠΏΠΎ {1} ΡΠ΅ΠΊΡƒΠ½Π΄ΡƒΡ‚Ρ€Π΅Ρ‚Ρ–ΠΉΠ±ΡƒΠ΄Π΅Π½ΡŒ Π½Π°ΠΉΠ±Π»ΠΈΠΆΡ‡ΠΈΠΉ Π΄ΠΎ {0} дняSalamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/uk_UA.po000066400000000000000000000123611516023643100247050ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk_UA\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "" "ВІдбулася ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° підчас Π³Π΅Π½Π΅Ρ€Π°Ρ†Ρ–Ρ— опису. ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€Ρ‚Π° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ–ΡΡ‚ΡŒ написання " "cron Π²ΠΈΡ€Π°Π·Ρƒ." #: ExpressionDescriptor.py:151 msgid "At " msgstr "О " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Π©ΠΎΡ…Π²ΠΈΠ»ΠΈΠ½ΠΈ ΠΌΡ–ΠΆ {0} Ρ‚Π° {1}" #: ExpressionDescriptor.py:165 msgid "At" msgstr "О" #: ExpressionDescriptor.py:175 msgid " and" msgstr " Ρ‚Π°" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "ЩосСкунди" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "ΠΊΠΎΠΆΠ½Ρ– {0} сСкунд" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "Π· {0} ΠΏΠΎ {1} сСкунду" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "ΠΎ {0} сСкунді" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "Ρ‰ΠΎΡ…Π²ΠΈΠ»ΠΈΠ½ΠΈ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "ΠΊΠΎΠΆΠ½Ρ– {0} Ρ…Π²ΠΈΠ»ΠΈΠ½" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "Π· {0} ΠΏΠΎ {1} Ρ…Π²ΠΈΠ»ΠΈΠ½Ρƒ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "ΠΎ {0} Ρ…Π²ΠΈΠ»ΠΈΠ½Ρ–" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "Ρ‰ΠΎΠ³ΠΎΠ΄ΠΈΠ½ΠΈ" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "ΠΊΠΎΠΆΠ½Ρ– {0} Π³ΠΎΠ΄ΠΈΠ½" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "ΠΌΡ–ΠΆ {0} Ρ‚Π° {1}" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "ΠΎ {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "ΠΏΠ΅Ρ€ΡˆΠΈΠΉ" #: ExpressionDescriptor.py:243 msgid "second" msgstr "Π΄Ρ€ΡƒΠ³ΠΈΠΉ" #: ExpressionDescriptor.py:245 msgid "third" msgstr "Ρ‚Ρ€Π΅Ρ‚Ρ–ΠΉ" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΈΠΉ" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "ΠΏ'ятий" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", Π² " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr " {0} місяця" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", Π² останній {0} місяця" #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π² {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", Ρ‰ΠΎΠ΄Π΅Π½Π½ΠΎ" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", ΠΊΠΎΠΆΠ΅Π½ {0} дСнь тиТня" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} ΠΏΠΎ {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", ΠΊΠΎΠΆΠ΅Π½ {0} ΠΌΡ–ΡΡΡ†ΡŒ" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π² {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", Π² останній дСнь місяця" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", Π² останній Π±ΡƒΠ΄Π΅Π½ΡŒ місяця" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "ΠΏΠ΅Ρ€ΡˆΠΈΠΉ Π±ΡƒΠ΄Π΅Π½ΡŒ" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "Π±ΡƒΠ΄Π΅Π½ΡŒ Π½Π°ΠΉΠ±Π»ΠΈΠΆΡ‡ΠΈΠΉ Π΄ΠΎ {0} дня" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", Π² {0} місяця" #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", ΠΊΠΎΠΆΠ΅Π½ {0} дСнь" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", ΠΌΡ–ΠΆ {0} Ρ‚Π° {1} днями місяця" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", Π½Π° {0} дСнь місяця" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", ΠΊΠΎΠΆΠ½Ρ– {0} Ρ€ΠΎΠΊΠΈ" #: ExpressionDescriptor.py:385 msgid " and " msgstr " Ρ‚Π° " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", Ρ‰ΠΎΡ…Π²ΠΈΠ»ΠΈΠ½ΠΈ" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", Ρ‰ΠΎΠ³ΠΎΠ΄ΠΈΠ½ΠΈ" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/vi_VN.mo000066400000000000000000000060631516023643100247210ustar00rootroot00000000000000ή•-„=μΰαζμ&ώ % 1>M^{Ž  ΊΔ"γ% ? M[j_|άί γ (G [ f s€’΄Ί ΐΞ%Τϊ')/"Gjov'ˆ ° Ύ ΜΪμ  #/ S [ !| $ž Γ Ϋ μ ώ  c,  –  Ό Ε ΰ ό   ' 3 C S c n { › +₯ Ρ +Ϋ  " "!, +- &% $'#(   )* and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, starting {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: hi@bxdoan.com PO-Revision-Date: 2023-05-19 01:40+0700 Last-Translator: Doan Bui Language-Team: Language: vi_VN MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 3.3.1 vΓ  vΓ  {0} cα»§a thΓ‘ng, giα»―a {0} vΓ  {1} cα»§a mα»—i thΓ‘ng, mα»—i ngΓ y, mα»—i giờ, mα»—i phΓΊt, mα»—i {0} ngΓ y, mα»—i ngΓ y {0} cα»§a tuαΊ§n, mα»—i {0} thΓ‘ng, mα»—i {0} nΔƒm, vΓ o ngΓ y {0} cα»§a mα»—i thΓ‘ng, vΓ o , vΓ o ngΓ y cuα»‘i cα»§a thΓ‘ng, vΓ o tuαΊ§n cuα»‘i cα»§a thΓ‘ng, vΓ o {0} cuα»‘i cΓΉng cα»§a thΓ‘ng, vΓ o {0} cα»§a thΓ‘ng, chỉ vΓ o {0}, chỉ trΓͺn {0}, bαΊ―t Δ‘αΊ§u lΓΊc {0}, tα»« {0} Δ‘αΊΏn {1}Đã xαΊ£y ra lα»—i khi tαΊ‘o mΓ΄ tαΊ£ biểu thα»©c. HΓ£y kiểm tra cΓΊ phΓ‘p biểu thα»©c cron.TαΊ‘iTαΊ‘i Mα»—i phΓΊt giα»―a {0} vΓ  {1}lΓΊc {0}tα»« phΓΊt {0} mα»—i giờtαΊ‘i giΓ’y {0} mα»—i phΓΊtgiα»―a {0} vΓ  {1}mα»—i giờmα»—i phΓΊtmα»—i giΓ’ymα»—i {0} giờmα»—i {0} phΓΊtmα»—i {0} giΓ’ythα»© nΔƒmΔ‘αΊ§u tiΓͺnngΓ y Δ‘αΊ§u tiΓͺn cα»§a tuαΊ§nthα»© tΖ°tα»« phΓΊt {0} Δ‘αΊΏn phΓΊt {1} mα»—i giờthα»© haitα»« giΓ’y {0} Δ‘αΊΏn giΓ’y {1} mα»—i phΓΊtthα»© bangΓ y trong tuαΊ§n gαΊ§n ngΓ y {0}Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/vi_VN.po000066400000000000000000000123121516023643100247160ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Doan Bui , 2023. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: hi@bxdoan.com\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2023-05-19 01:40+0700\n" "Last-Translator: Doan Bui \n" "Language-Team: \n" "Language: vi_VN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.3.1\n" #: ExpressionDescriptor.py:145 msgid "" "An error occured when generating the expression description. Check the cron " "expression syntax." msgstr "Đã xαΊ£y ra lα»—i khi tαΊ‘o mΓ΄ tαΊ£ biểu thα»©c. HΓ£y kiểm tra cΓΊ phΓ‘p biểu thα»©c cron." #: ExpressionDescriptor.py:169 msgid "At " msgstr "TαΊ‘i " #: ExpressionDescriptor.py:180 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "Mα»—i phΓΊt giα»―a {0} vΓ  {1}" #: ExpressionDescriptor.py:186 msgid "At" msgstr "TαΊ‘i" #: ExpressionDescriptor.py:196 msgid " and" msgstr " vΓ " #: ExpressionDescriptor.py:226 msgid "every second" msgstr "mα»—i giΓ’y" #: ExpressionDescriptor.py:228 #, python-brace-format msgid "every {0} seconds" msgstr "mα»—i {0} giΓ’y" #: ExpressionDescriptor.py:229 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "tα»« giΓ’y {0} Δ‘αΊΏn giΓ’y {1} mα»—i phΓΊt" #: ExpressionDescriptor.py:230 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "tαΊ‘i giΓ’y {0} mα»—i phΓΊt" #: ExpressionDescriptor.py:243 msgid "every minute" msgstr "mα»—i phΓΊt" #: ExpressionDescriptor.py:245 #, python-brace-format msgid "every {0} minutes" msgstr "mα»—i {0} phΓΊt" #: ExpressionDescriptor.py:246 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "tα»« phΓΊt {0} Δ‘αΊΏn phΓΊt {1} mα»—i giờ" #: ExpressionDescriptor.py:247 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "tα»« phΓΊt {0} mα»—i giờ" #: ExpressionDescriptor.py:260 msgid "every hour" msgstr "mα»—i giờ" #: ExpressionDescriptor.py:262 #, python-brace-format msgid "every {0} hours" msgstr "mα»—i {0} giờ" #: ExpressionDescriptor.py:263 #, python-brace-format msgid "between {0} and {1}" msgstr "giα»―a {0} vΓ  {1}" #: ExpressionDescriptor.py:264 #, python-brace-format msgid "at {0}" msgstr "lΓΊc {0}" #: ExpressionDescriptor.py:295 msgid "first" msgstr "Δ‘αΊ§u tiΓͺn" #: ExpressionDescriptor.py:296 msgid "second" msgstr "thα»© hai" #: ExpressionDescriptor.py:297 msgid "third" msgstr "thα»© ba" #: ExpressionDescriptor.py:298 msgid "fourth" msgstr "thα»© tΖ°" #: ExpressionDescriptor.py:299 msgid "fifth" msgstr "thα»© nΔƒm" #: ExpressionDescriptor.py:305 msgid ", on the " msgstr ", vΓ o " #: ExpressionDescriptor.py:306 #, python-brace-format msgid " {0} of the month" msgstr " {0} cα»§a thΓ‘ng" #: ExpressionDescriptor.py:308 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", vΓ o {0} cuα»‘i cΓΉng cα»§a thΓ‘ng" #: ExpressionDescriptor.py:310 #, python-brace-format msgid ", only on {0}" msgstr ", chỉ trΓͺn {0}" #: ExpressionDescriptor.py:316 ExpressionDescriptor.py:366 #: ExpressionDescriptor.py:368 ExpressionDescriptor.py:554 msgid ", every day" msgstr ", mα»—i ngΓ y" #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", every {0} days of the week" msgstr ", mα»—i ngΓ y {0} cα»§a tuαΊ§n" #: ExpressionDescriptor.py:319 ExpressionDescriptor.py:335 #: ExpressionDescriptor.py:398 ExpressionDescriptor.py:467 #, python-brace-format msgid ", {0} through {1}" msgstr ", tα»« {0} Δ‘αΊΏn {1}" #: ExpressionDescriptor.py:334 #, python-brace-format msgid ", every {0} months" msgstr ", mα»—i {0} thΓ‘ng" #: ExpressionDescriptor.py:336 ExpressionDescriptor.py:399 #, python-brace-format msgid ", only in {0}" msgstr ", chỉ vΓ o {0}" #: ExpressionDescriptor.py:350 msgid ", on the last day of the month" msgstr ", vΓ o ngΓ y cuα»‘i cα»§a thΓ‘ng" #: ExpressionDescriptor.py:352 msgid ", on the last weekday of the month" msgstr ", vΓ o tuαΊ§n cuα»‘i cα»§a thΓ‘ng" #: ExpressionDescriptor.py:359 msgid "first weekday" msgstr "ngΓ y Δ‘αΊ§u tiΓͺn cα»§a tuαΊ§n" #: ExpressionDescriptor.py:359 #, python-brace-format msgid "weekday nearest day {0}" msgstr "ngΓ y trong tuαΊ§n gαΊ§n ngΓ y {0}" #: ExpressionDescriptor.py:361 #, python-brace-format msgid ", on the {0} of the month" msgstr ", vΓ o {0} cα»§a thΓ‘ng" #: ExpressionDescriptor.py:368 #, python-brace-format msgid ", every {0} days" msgstr ", mα»—i {0} ngΓ y" #: ExpressionDescriptor.py:369 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", giα»―a {0} vΓ  {1} cα»§a mα»—i thΓ‘ng" #: ExpressionDescriptor.py:370 #, python-brace-format msgid ", on day {0} of the month" msgstr ", vΓ o ngΓ y {0} cα»§a mα»—i thΓ‘ng" #: ExpressionDescriptor.py:397 #, python-brace-format msgid ", every {0} years" msgstr ", mα»—i {0} nΔƒm" #: ExpressionDescriptor.py:449 #, python-brace-format msgid ", starting {0}" msgstr ", bαΊ―t Δ‘αΊ§u lΓΊc {0}" #: ExpressionDescriptor.py:462 msgid " and " msgstr " vΓ  " #: ExpressionDescriptor.py:552 msgid ", every minute" msgstr ", mα»—i phΓΊt" #: ExpressionDescriptor.py:553 msgid ", every hour" msgstr ", mα»—i giờ" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/zh_CN.mo000066400000000000000000000051631516023643100247010ustar00rootroot00000000000000ή•,|άάέβθ&ϊ ! -:IZwŠœ Άΐ"ί! ; IW_iΙΜ Πρψ4 H S `m}‘§ ­»%Αη'ξP4…Š $›ΐ Ι Υ αο  "6=Us ‘  »IΙ  " ? G _ w Ž ˜ ’ © Έ Η Σ έ η χ " $ . N X and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only on {0}, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayforthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2016-01-19 02:00+0100 PO-Revision-Date: 2016-01-19 02:00+0100 Last-Translator: Adam Schubert Language-Team: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Language: zh_CN ε’Œ ε’Œ {0} 每月, εœ¨ζ―ζœˆηš„ {0} ε’Œ {1} 号之间, 每倩, 每小既, ζ―εˆ†ι’Ÿ, 每 {0} 倩, ζ―ε‘¨ηš„ζ― {0} 倩, 每 {0} 月, 每 {0} εΉ΄, ζ―ζœˆηš„ {0} 号, 在 , ζ―ζœˆηš„ζœ€εŽδΈ€ε€©, ζ―ζœˆηš„ζœ€εŽδΈ€δΈͺεΉ³ζ—₯, ζ―ζœˆηš„ζœ€εŽδΈ€δΈͺ {0} , ζ―ζœˆηš„ {0} , δ»…εœ¨ {0}, δ»…εœ¨ {0}, {0} 到 {1}η”Ÿζˆθ‘¨θΎΎεΌζθΏ°ζ—Άε‘η”ŸδΊ†ι”™θ――οΌŒθ―·ζ£€ζŸ₯cronθ‘¨θΎΎεΌθ―­ζ³•γ€‚εœ¨εœ¨ 在 {0} ε’Œ {1} δΉ‹ι—΄ηš„ζ―εˆ†ι’Ÿεœ¨ {0}εœ¨ζ―ε°ζ—Άηš„ {0} εˆ†εœ¨ζ―εˆ†ι’Ÿηš„ {0} η§’εœ¨ {0} ε’Œ {1} δΉ‹ι—΄ζ―ε°ζ—Άζ―εˆ†ι’Ÿζ―η§’ζ― {0} 小既每 {0} εˆ†ι’Ÿζ― {0} 秒第五δΈͺ第一δΈͺ第一δΈͺεΉ³ζ—₯第四δΈͺεœ¨ζ―ε°ζ—Άηš„ {0} 到 {1} εˆ†ι’Ÿη¬¬δΊŒδΈͺεœ¨ζ―εˆ†ι’Ÿηš„ {0} 到 {1} 秒第三δΈͺζœ€ζŽ₯θΏ‘ {0} ε·ηš„εΉ³ζ—₯Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/zh_CN.po000066400000000000000000000115631516023643100247050ustar00rootroot00000000000000# Translation of cron_descriptor # Copyright (C) 2016 # This file is distributed under the same license as the cron_descriptor package. # Adam Schubert , 2016. # msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2016-01-19 02:00+0100\n" "PO-Revision-Date: 2016-01-19 02:00+0100\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_CN\n" #: ExpressionDescriptor.py:130 msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "η”Ÿζˆθ‘¨θΎΎεΌζθΏ°ζ—Άε‘η”ŸδΊ†ι”™θ――οΌŒθ―·ζ£€ζŸ₯cron葨达式语法。" #: ExpressionDescriptor.py:151 msgid "At " msgstr "在 " #: ExpressionDescriptor.py:160 #, python-brace-format msgid "Every minute between {0} and {1}" msgstr "在 {0} ε’Œ {1} δΉ‹ι—΄ηš„ζ―εˆ†ι’Ÿ" #: ExpressionDescriptor.py:165 msgid "At" msgstr "在" #: ExpressionDescriptor.py:175 msgid " and" msgstr " ε’Œ" #: ExpressionDescriptor.py:201 msgid "every second" msgstr "每秒" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "every {0} seconds" msgstr "每 {0} η§’" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "seconds {0} through {1} past the minute" msgstr "εœ¨ζ―εˆ†ι’Ÿηš„ {0} 到 {1} η§’" #: ExpressionDescriptor.py:201 #, python-brace-format msgid "at {0} seconds past the minute" msgstr "εœ¨ζ―εˆ†ι’Ÿηš„ {0} η§’" #: ExpressionDescriptor.py:209 msgid "every minute" msgstr "ζ―εˆ†ι’Ÿ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "every {0} minutes" msgstr "每 {0} εˆ†ι’Ÿ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "minutes {0} through {1} past the hour" msgstr "εœ¨ζ―ε°ζ—Άηš„ {0} 到 {1} εˆ†ι’Ÿ" #: ExpressionDescriptor.py:209 #, python-brace-format msgid "at {0} minutes past the hour" msgstr "εœ¨ζ―ε°ζ—Άηš„ {0} εˆ†" #: ExpressionDescriptor.py:218 msgid "every hour" msgstr "每小既" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "every {0} hours" msgstr "每 {0} 小既" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "between {0} and {1}" msgstr "在 {0} ε’Œ {1} δΉ‹ι—΄" #: ExpressionDescriptor.py:218 #, python-brace-format msgid "at {0}" msgstr "在 {0}" #: ExpressionDescriptor.py:241 msgid "first" msgstr "第一δΈͺ" #: ExpressionDescriptor.py:243 msgid "second" msgstr "第二δΈͺ" #: ExpressionDescriptor.py:245 msgid "third" msgstr "第三δΈͺ" #: ExpressionDescriptor.py:247 msgid "fourth" msgstr "第四δΈͺ" #: ExpressionDescriptor.py:249 msgid "fifth" msgstr "第五δΈͺ" #: ExpressionDescriptor.py:251 msgid ", on the " msgstr ", 在 " #: ExpressionDescriptor.py:252 #, python-brace-format msgid " {0} of the month" msgstr "{0} 每月" #: ExpressionDescriptor.py:254 #, python-brace-format msgid ", on the last {0} of the month" msgstr ", ζ―ζœˆηš„ζœ€εŽδΈ€δΈͺ {0} " #: ExpressionDescriptor.py:256 #, python-brace-format msgid ", only on {0}" msgstr ", δ»…εœ¨ {0}" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:303 #: ExpressionDescriptor.py:435 msgid ", every day" msgstr ", 每倩" #: ExpressionDescriptor.py:260 #, python-brace-format msgid ", every {0} days of the week" msgstr ", ζ―ε‘¨ηš„ζ― {0} 倩" #: ExpressionDescriptor.py:260 ExpressionDescriptor.py:274 #: ExpressionDescriptor.py:318 #, python-brace-format msgid ", {0} through {1}" msgstr ", {0} 到 {1}" #: ExpressionDescriptor.py:272 #, python-brace-format msgid ", every {0} months" msgstr ", 每 {0} 月" #: ExpressionDescriptor.py:275 ExpressionDescriptor.py:319 #, python-brace-format msgid ", only in {0}" msgstr ", δ»…εœ¨ {0}" #: ExpressionDescriptor.py:288 msgid ", on the last day of the month" msgstr ", ζ―ζœˆηš„ζœ€εŽδΈ€ε€©" #: ExpressionDescriptor.py:290 msgid ", on the last weekday of the month" msgstr ", ζ―ζœˆηš„ζœ€εŽδΈ€δΈͺεΉ³ζ—₯" #: ExpressionDescriptor.py:297 msgid "first weekday" msgstr "第一δΈͺεΉ³ζ—₯" #: ExpressionDescriptor.py:297 #, python-brace-format msgid "weekday nearest day {0}" msgstr "ζœ€ζŽ₯θΏ‘ {0} ε·ηš„εΉ³ζ—₯" #: ExpressionDescriptor.py:299 #, python-brace-format msgid ", on the {0} of the month" msgstr ", ζ―ζœˆηš„ {0} " #: ExpressionDescriptor.py:303 #, python-brace-format msgid ", every {0} days" msgstr ", 每 {0} 倩" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", between day {0} and {1} of the month" msgstr ", εœ¨ζ―ζœˆηš„ {0} ε’Œ {1} 号之间" #: ExpressionDescriptor.py:304 #, python-brace-format msgid ", on day {0} of the month" msgstr ", ζ―ζœˆηš„ {0} 号" #: ExpressionDescriptor.py:316 #, python-brace-format msgid ", every {0} years" msgstr ", 每 {0} εΉ΄" #: ExpressionDescriptor.py:385 msgid " and " msgstr " ε’Œ " #: ExpressionDescriptor.py:433 msgid ", every minute" msgstr ", ζ―εˆ†ι’Ÿ" #: ExpressionDescriptor.py:434 msgid ", every hour" msgstr ", 每小既" Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/zh_TW.mo000066400000000000000000000054721516023643100247360ustar00rootroot00000000000000ή•/”   &* Q ]jyЧΊΜ ζπ"2Q k y ‡•+€Π_βBE IjqŽ­ Α Μ Ωζφ  &4%;a'h–P $: C O [i € Žœ°·Ον  ( 5 B *O z Qˆ Ϊ ή "γ   & > U _ i p  Ž š €  Ύ "Θ λ υ   and and {0} of the month, between day {0} and {1} of the month, every day, every hour, every minute, every {0} days, every {0} days of the week, every {0} months, every {0} years, on day {0} of the month, on the , on the last day of the month, on the last weekday of the month, on the last {0} of the month, on the {0} of the month, only in {0}, only in {0}, only on {0}, starting {0}, {0} days before the last day of the month, {0} through {1}An error occured when generating the expression description. Check the cron expression syntax.AtAt Every minute between {0} and {1}at {0}at {0} minutes past the hourat {0} seconds past the minutebetween {0} and {1}every hourevery minuteevery secondevery {0} hoursevery {0} minutesevery {0} secondsfifthfirstfirst weekdayfourthminutes {0} through {1} past the hoursecondseconds {0} through {1} past the minutethirdweekday nearest day {0}Project-Id-Version: 1.0 Report-Msgid-Bugs-To: adam.schubert@sg1-game.net POT-Creation-Date: 2025-08-25 19:23+0000 PO-Revision-Date: 2025-08-25 19:23+0000 Last-Translator: Adam Schubert Language-Team: Language: zh_TW MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit ε’Œ ε’Œ {0} 每月, εœ¨ζ―ζœˆηš„ {0} ε’Œ {1} θ™ŸδΉ‹ι–“, 每倩, 每小時, ζ―εˆ†ι˜, 每 {0} 倩, ζ―ι€±ηš„ζ― {0} 倩, 每 {0} 月, 每 {0} εΉ΄, ζ―ζœˆηš„ {0} θ™Ÿ, 在 , ζ―ζœˆηš„ζœ€εΎŒδΈ€ε€©, ζ―ζœˆηš„ζœ€εΎŒδΈ€ε€‹εΉ³ζ—₯, ζ―ζœˆηš„ζœ€εΎŒδΈ€ε€‹ {0} , ζ―ζœˆηš„ {0} , εƒ…εœ¨ {0}, εƒ…εœ¨ {0}, εƒ…εœ¨ {0}, ι–‹ε§‹ {0}, {0} ι€™ε€‹ζœˆηš„ζœ€εΎŒδΈ€ε€©ηš„ε‰εΉΎε€©, {0} 到 {1}η”’η”Ÿζ­£θ¦θ‘¨ι”εΌζθΏ°ζ™‚η™Όη”ŸδΊ†ιŒ―θͺ€οΌŒθ«‹ζͺ’ζŸ₯ cron 葨達式θͺžζ³•γ€‚εœ¨εœ¨ 在 {0} ε’Œ {1} δΉ‹ι–“ηš„ζ―εˆ†ι˜εœ¨ {0}εœ¨ζ―ε°ζ™‚ηš„ {0} εˆ†εœ¨ζ―εˆ†ι˜ηš„ {0} η§’εœ¨ {0} ε’Œ {1} δΉ‹ι–“ζ―ε°ζ™‚ζ―εˆ†ι˜ζ―η§’ζ― {0} 小時每 {0} εˆ†ι˜ζ― {0} 秒第五個第一個第一個平ζ—₯η¬¬ε››ε€‹εœ¨ζ―ε°ζ™‚ηš„ {0} 到 {1} εˆ†ι˜η¬¬δΊŒε€‹εœ¨ζ―εˆ†ι˜ηš„ {0} 到 {1} η§’η¬¬δΈ‰ε€‹ζœ€ζŽ₯θΏ‘ {0} θ™Ÿηš„εΉ³ζ—₯Salamek-cron-descriptor-b4a8c7c/cron_descriptor/locale/zh_TW.po000066400000000000000000000075171516023643100247430ustar00rootroot00000000000000# msgid "" msgstr "" "Project-Id-Version: 1.0\n" "Report-Msgid-Bugs-To: adam.schubert@sg1-game.net\n" "POT-Creation-Date: 2025-08-25 19:23+0000\n" "PO-Revision-Date: 2025-08-25 19:23+0000\n" "Last-Translator: Adam Schubert \n" "Language-Team: \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #. EveryMinute msgid "every minute" msgstr "ζ―εˆ†ι˜" #. EveryHour msgid "every hour" msgstr "每小時" #. AnErrorOccurredWhenGeneratingTheExpressionD msgid "" "An error occured when generating the expression description. Check the cron" " expression syntax." msgstr "η”’η”Ÿζ­£θ¦θ‘¨ι”εΌζθΏ°ζ™‚η™Όη”ŸδΊ†ιŒ―θͺ€οΌŒθ«‹ζͺ’ζŸ₯ cron 葨達式θͺžζ³•。" #. AtSpace msgid "At " msgstr "在 " #. EveryMinuteBetweenX0AndX1 msgid "Every minute between {0} and {1}" msgstr "在 {0} ε’Œ {1} δΉ‹ι–“ηš„ζ―εˆ†ι˜" #. At msgid "At" msgstr "在" #. SpaceAnd msgid " and" msgstr " ε’Œ" #. EverySecond msgid "every second" msgstr "每秒" #. EveryX0Seconds msgid "every {0} seconds" msgstr "每 {0} η§’" #. SecondsX0ThroughX1PastTheMinute msgid "seconds {0} through {1} past the minute" msgstr "εœ¨ζ―εˆ†ι˜ηš„ {0} 到 {1} η§’" #. AtX0SecondsPastTheMinute msgid "at {0} seconds past the minute" msgstr "εœ¨ζ―εˆ†ι˜ηš„ {0} η§’" #. EveryX0Minutes msgid "every {0} minutes" msgstr "每 {0} εˆ†ι˜" #. MinutesX0ThroughX1PastTheHour msgid "minutes {0} through {1} past the hour" msgstr "εœ¨ζ―ε°ζ™‚ηš„ {0} 到 {1} εˆ†ι˜" #. AtX0MinutesPastTheHour msgid "at {0} minutes past the hour" msgstr "εœ¨ζ―ε°ζ™‚ηš„ {0} εˆ†" #. EveryX0Hours msgid "every {0} hours" msgstr "每 {0} 小時" #. BetweenX0AndX1 msgid "between {0} and {1}" msgstr "在 {0} ε’Œ {1} δΉ‹ι–“" #. AtX0 msgid "at {0}" msgstr "在 {0}" #. ComaEveryDay msgid ", every day" msgstr ", 每倩" #. ComaEveryX0DaysOfTheWeek msgid ", every {0} days of the week" msgstr ", ζ―ι€±ηš„ζ― {0} 倩" #. ComaX0ThroughX1 msgid ", {0} through {1}" msgstr ", {0} 到 {1}" #. First msgid "first" msgstr "第一個" #. Second msgid "second" msgstr "η¬¬δΊŒε€‹" #. Third msgid "third" msgstr "第三個" #. Fourth msgid "fourth" msgstr "第四個" #. Fifth msgid "fifth" msgstr "第五個" #. ComaOnThe msgid ", on the " msgstr ", 在 " #. SpaceX0OfTheMonth msgid " {0} of the month" msgstr "{0} 每月" #. ComaOnTheLastX0OfTheMonth msgid ", on the last {0} of the month" msgstr ", ζ―ζœˆηš„ζœ€εΎŒδΈ€ε€‹ {0} " #. ComaOnlyOnX0 msgid ", only on {0}" msgstr ", εƒ…εœ¨ {0}" #. ComaEveryX0Months msgid ", every {0} months" msgstr ", 每 {0} 月" #. ComaOnlyInX0 msgid ", only in {0}" msgstr ", εƒ…εœ¨ {0}" #. ComaOnTheLastDayOfTheMonth msgid ", on the last day of the month" msgstr ", ζ―ζœˆηš„ζœ€εΎŒδΈ€ε€©" #. ComaOnTheLastWeekdayOfTheMonth msgid ", on the last weekday of the month" msgstr ", ζ―ζœˆηš„ζœ€εΎŒδΈ€ε€‹εΉ³ζ—₯" #. FirstWeekday msgid "first weekday" msgstr "第一個平ζ—₯" #. WeekdayNearestDayX0 msgid "weekday nearest day {0}" msgstr "ζœ€ζŽ₯θΏ‘ {0} θ™Ÿηš„εΉ³ζ—₯" #. ComaOnTheX0OfTheMonth msgid ", on the {0} of the month" msgstr ", ζ―ζœˆηš„ {0} " #. ComaEveryX0Days msgid ", every {0} days" msgstr ", 每 {0} 倩" #. ComaBetweenDayX0AndX1OfTheMonth msgid ", between day {0} and {1} of the month" msgstr ", εœ¨ζ―ζœˆηš„ {0} ε’Œ {1} θ™ŸδΉ‹ι–“" #. ComaOnDayX0OfTheMonth msgid ", on day {0} of the month" msgstr ", ζ―ζœˆηš„ {0} θ™Ÿ" #. SpaceAndSpace msgid " and " msgstr " ε’Œ " #. ComaEveryMinute msgid ", every minute" msgstr ", ζ―εˆ†ι˜" #. ComaEveryHour msgid ", every hour" msgstr ", 每小時" #. ComaEveryX0Years msgid ", every {0} years" msgstr ", 每 {0} εΉ΄" #. CommaStartingX0 msgid ", starting {0}" msgstr ", ι–‹ε§‹ {0}" #. CommaDaysBeforeTheLastDayOfTheMonth msgid ", {0} days before the last day of the month" msgstr ", {0} ι€™ε€‹ζœˆηš„ζœ€εΎŒδΈ€ε€©ηš„ε‰εΉΎε€©" #. ComaOnlyInYearX0 msgid ", only in {0}" msgstr ", εƒ…εœ¨ {0}" Salamek-cron-descriptor-b4a8c7c/examples/000077500000000000000000000000001516023643100205165ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/examples/crontabReader.py000066400000000000000000000055601516023643100236510ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from __future__ import annotations # /// script # requires-python = ">=3.11" # dependencies = [ # "cron-descriptor", # ] # /// import re from pathlib import Path try: from cron_descriptor import ExpressionDescriptor, Options except ImportError: print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") print('\033[1mFailed to import cron_descriptor, maybe ? "pip install cron-descriptor ?"\033[0m') print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!") raise class CrontabReader: """Simple example reading /etc/contab""" rex = re.compile(r"^(\S{1,3}\s+\S{1,3}\s+\S{1,3}\s+\S{1,3}\s+\S{1,3}).+$") def __init__(self, cronfile: Path) -> None: """Initialize CrontabReader Args: cronfile: Path to cronfile Returns: None """ options = Options() options.day_of_week_start_index_zero = False options.use_24hour_time_format = True with cronfile.open("r", encoding="utf-8") as f: for line in f.readlines(): if parsed_line := self.parse_cron_line(line): print(f"{parsed_line} -> {ExpressionDescriptor(parsed_line, options)}") def parse_cron_line(self, line: str) -> str | None: """Parses crontab line and returns only starting time string Args: line: crontab line Returns: Time part of cron line or None """ if (stripped := line.strip()) and not stripped.startswith("#"): rexres = self.rex.search(stripped) if rexres: return " ".join(rexres.group(1).split()) return None if __name__ == "__main__": CrontabReader(Path("/etc/crontab")) Salamek-cron-descriptor-b4a8c7c/pyproject.toml000066400000000000000000000056731516023643100216270ustar00rootroot00000000000000[build-system] requires = ["setuptools"] build-backend = 'setuptools.build_meta' [project] name = "cron_descriptor" license = "MIT" dynamic = ["version"] requires-python = ">= 3.9" description = "A Python library that converts cron expressions into human readable strings." classifiers = [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Environment :: Console", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development", ] dependencies = [ "typing_extensions" ] [project.optional-dependencies] dev = [ "ruff", "mypy", "polib" ] test = ["pytest"] [project.readme] file = "README.md" content-type = "text/markdown" [[project.authors]] name = "Adam Schubert" email = "adam.schubert@sg1-game.net" [project.urls] Homepage = "https://github.com/Salamek/cron-descriptor" [tool.setuptools.dynamic] version = {attr = "cron_descriptor.__version__"} [tool.setuptools.packages.find] where = ["."] exclude = ["tests*", "examples*"] [tool.setuptools.package-data] "cron_descriptor" = ["locale/*.mo"] [tool.ruff] line-length = 200 target-version = "py39" [tool.ruff.lint] select = ["ALL"] ignore = ["N999", "D"] # Invalid module name GetText instead of get_text, comments [tool.ruff.lint.mccabe] max-complexity = 20 [tool.ruff.lint.pylint] allow-magic-value-types = ["int", "str"] max-args = 8 max-branches = 16 max-returns = 10 [tool.ruff.lint.per-file-ignores] "cron_descriptor/__main__.py" = ["T201"] # print in code "tests/*" = ["S101"] # Use of assert detected "tests/test_import.py" = ["PLC0415"] # Top level import "examples/crontabReader.py" = ["T201", "INP001"] # print in code, not a package "tools/resx2po.py" = ["S314", "INP001"] # xml parse untrusted and not a package "tools/compilepos.py" = ["INP001"] # xml parse untrusted and not a package "cron_descriptor/ExpressionValidator.py" = ["PLR0915", "PLR0912"] # too many statements/branches "cron_descriptor/Exception.py" = ["N818"] # Deprecated incorrect exception names [tool.mypy] files = ["cron_descriptor", "tests"] python_version = 3.9 ignore_missing_imports = true strict = true [[tool.mypy.overrides]] module = ["_pytest.*"] # With new Python versions, we may receive a pytest that won't typecheck # (done along with tests) with mypy python_version set to our lowest bound follow_imports = "skip" [tool.pytest.ini_options] # Tell pytest where to look for tests testpaths = [ "tests", ] # Pattern to match test files python_files = [ "test_*.py", ] Salamek-cron-descriptor-b4a8c7c/setup.py000066400000000000000000000022611516023643100204130ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from setuptools import setup # Metadata will be read from pyproject.toml setup() Salamek-cron-descriptor-b4a8c7c/stdeb.cfg000066400000000000000000000000521516023643100204570ustar00rootroot00000000000000[DEFAULT] Package: python-cron-descriptor Salamek-cron-descriptor-b4a8c7c/tests/000077500000000000000000000000001516023643100200425ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/tests/__init__.py000066400000000000000000000022721516023643100221560ustar00rootroot00000000000000# Copyright (C) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy of this software # and associated documentation files (the "Software"), to deal in the Software without # restriction, including without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the # Software is furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all copies or # substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING # BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, # DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. __author__ = "Adam Schubert " __date__ = "$2016-01-17 14:51:02$" Salamek-cron-descriptor-b4a8c7c/tests/conftest.py000066400000000000000000000002521516023643100222400ustar00rootroot00000000000000import pytest from cron_descriptor import Options @pytest.fixture # type: ignore[untyped-decorator] def options() -> Options: return Options(locale_code="en_US") Salamek-cron-descriptor-b4a8c7c/tests/test_api.py000066400000000000000000000037571516023643100222400ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from cron_descriptor import DescriptionTypeEnum, ExpressionDescriptor, Options """ Testing that API of ExpressionDescriptor is working as specified in DOCs """ def test_full(options: Options) -> None: options.use_24hour_time_format = True ceh = ExpressionDescriptor("* * * * *", options) assert ceh.get_description(DescriptionTypeEnum.FULL) == "Every minute" def test_default(options: Options) -> None: assert ExpressionDescriptor("* * * * *", options).get_description() == "Every minute" def test_to_str(options: Options) -> None: assert str(ExpressionDescriptor("* * * * *", options)) == "Every minute" def test_to_repr(options: Options) -> None: assert isinstance(ExpressionDescriptor("* * * * *", options), ExpressionDescriptor) def test_to_kargs(options: Options) -> None: assert str(ExpressionDescriptor("17 17 * * *", options, use_24hour_time_format=True)) == "At 17:17" Salamek-cron-descriptor-b4a8c7c/tests/test_casing.py000066400000000000000000000036201516023643100227200ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from cron_descriptor import CasingTypeEnum, DescriptionTypeEnum, ExpressionDescriptor, Options """ Tests casing transformation """ def test_sentence_casing(options: Options) -> None: options.casing_type = CasingTypeEnum.Sentence ceh = ExpressionDescriptor("* * * * *", options) assert ceh.get_description(DescriptionTypeEnum.FULL) == "Every minute" def test_title_casing(options: Options) -> None: options.casing_type = CasingTypeEnum.Title ceh = ExpressionDescriptor("* * * * *", options) assert ceh.get_description(DescriptionTypeEnum.FULL) == "Every Minute" def test_lower_casing(options: Options) -> None: options.casing_type = CasingTypeEnum.LowerCase ceh = ExpressionDescriptor("* * * * *", options) assert ceh.get_description(DescriptionTypeEnum.FULL) == "every minute" Salamek-cron-descriptor-b4a8c7c/tests/test_exceptions.py000066400000000000000000000034321516023643100236360ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import pytest from cron_descriptor import DescriptionTypeEnum, ExpressionDescriptor, FormatError, MissingFieldError, Options """ Tests that Exceptions are/not properly raised """ def test_empty_cron_expression_exception(options: Options) -> None: with pytest.raises(MissingFieldError): ExpressionDescriptor("", options) def test_invalid_cron_expression_exception(options: Options) -> None: with pytest.raises(FormatError): ExpressionDescriptor("INVALID", options) def test_invalid_syntax_exception(options: Options) -> None: ceh = ExpressionDescriptor("* $ * * *", options) with pytest.raises(FormatError): ceh.get_description(DescriptionTypeEnum.FULL) Salamek-cron-descriptor-b4a8c7c/tests/test_formats.py000066400000000000000000000423041516023643100231310ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from cron_descriptor import Options, get_description """ Tests formatted cron expressions """ def test_every_minute(options: Options) -> None: assert get_description("* * * * *", options) == "Every minute" def test_every1_minute(options: Options) -> None: assert get_description("*/1 * * * *", options) == "Every minute" assert get_description("0 0/1 * * * ?", options) == "Every minute" def test_every_hour(options: Options) -> None: assert get_description("0 0 * * * ?", options) == "Every hour" assert get_description("0 0 0/1 * * ?", options) == "Every hour" def test_time_of_day_certain_days_of_week(options: Options) -> None: assert get_description("0 23 ? * MON-FRI", options) == "At 11:00 PM, Monday through Friday" def test_every_second(options: Options) -> None: assert get_description("* * * * * *", options) == "Every second" def test_every45_seconds(options: Options) -> None: assert get_description("*/45 * * * * *", options) == "Every 45 seconds" def test_every5_minutes(options: Options) -> None: assert get_description("*/5 * * * *", options) == "Every 5 minutes" assert get_description("0 0/10 * * * ?", options) == "Every 10 minutes" def test_every5_minutes_on_the_second(options: Options) -> None: assert get_description("0 */5 * * * *", options) == "Every 5 minutes" def test_weekdays_at_time(options: Options) -> None: assert get_description("30 11 * * 1-5", options) == "At 11:30 AM, Monday through Friday" def test_daily_at_time(options: Options) -> None: assert get_description("30 11 * * *", options) == "At 11:30 AM" def test_minute_span(options: Options) -> None: assert get_description("0-10 11 * * *", options) == "Every minute between 11:00 AM and 11:10 AM" def test_one_month_only(options: Options) -> None: assert get_description("* * * 3 *", options) == "Every minute, only in March" def test_two_months_only(options: Options) -> None: assert get_description("* * * 3,6 *", options) == "Every minute, only in March and June" def test_two_times_each_afternoon(options: Options) -> None: assert get_description("30 14,16 * * *", options) == "At 02:30 PM and 04:30 PM" def test_three_times_daily(options: Options) -> None: assert get_description("30 6,14,16 * * *", options) == "At 06:30 AM, 02:30 PM and 04:30 PM" def test_once_a_week(options: Options) -> None: assert get_description("46 9 * * 1", options) == "At 09:46 AM, only on Monday" def test_day_of_month(options: Options) -> None: assert get_description("23 12 15 * *", options) == "At 12:23 PM, on day 15 of the month" def test_month_name(options: Options) -> None: assert get_description("23 12 * JAN *", options) == "At 12:23 PM, only in January" def test_lowercase_month_name(options: Options) -> None: assert get_description("23 12 * jan *", options) == "At 12:23 PM, only in January" def test_day_of_month_with_question_mark(options: Options) -> None: assert get_description("23 12 ? JAN *", options) == "At 12:23 PM, only in January" def test_month_name_range2(options: Options) -> None: assert get_description("23 12 * JAN-FEB *", options) == "At 12:23 PM, January through February" def test_month_name_range3(options: Options) -> None: assert get_description("23 12 * JAN-MAR *", options) == "At 12:23 PM, January through March" def test_day_of_week_name(options: Options) -> None: assert get_description("23 12 * * SUN", options) == "At 12:23 PM, only on Sunday" def test_day_of_week_name_lowercase(options: Options) -> None: assert get_description("23 12 * * sun", options) == "At 12:23 PM, only on Sunday" def test_day_of_week_range(options: Options) -> None: assert get_description("*/5 15 * * MON-FRI", options) == "Every 5 minutes, between 03:00 PM and 03:59 PM, Monday through Friday" def test_day_of_week_range_lowercase(options: Options) -> None: assert get_description("*/5 15 * * MoN-fri", options) == "Every 5 minutes, between 03:00 PM and 03:59 PM, Monday through Friday" def test_day_of_week_once_in_month(options: Options) -> None: assert get_description("* * * * MON#3", options) == "Every minute, on the third Monday of the month" def test_last_day_of_the_week_of_the_month(options: Options) -> None: assert get_description("* * * * 4L", options) == "Every minute, on the last Thursday of the month" def test_last_day_of_the_month(options: Options) -> None: assert get_description( "*/5 * L JAN *", options, ) == "Every 5 minutes, on the last day of the month, only in January" def test_last_day_offset(options: Options) -> None: assert get_description( "0 0 0 L-5 * ?", options, ) == "At 12:00 AM, 5 days before the last day of the month" def test_last_weekday_of_the_month(options: Options) -> None: assert get_description("* * LW * *", options) == "Every minute, on the last weekday of the month" def test_last_weekday_of_the_month2(options: Options) -> None: assert get_description("* * WL * *", options) == "Every minute, on the last weekday of the month" def test_first_weekday_of_the_month(options: Options) -> None: assert get_description("* * 1W * *", options) == "Every minute, on the first weekday of the month" def test_thirteenth_weekday_of_the_month(options: Options) -> None: assert get_description("* * 13W * *", options) == "Every minute, on the weekday nearest day 13 of the month" def test_first_weekday_of_the_month2(options: Options) -> None: assert get_description("* * W1 * *", options) == "Every minute, on the first weekday of the month" def test_particular_weekday_of_the_month(options: Options) -> None: assert get_description("* * 5W * *", options) == "Every minute, on the weekday nearest day 5 of the month" def test_particular_weekday_of_the_month2(options: Options) -> None: assert get_description("* * W5 * *", options) == "Every minute, on the weekday nearest day 5 of the month" def test_time_of_day_with_seconds(options: Options) -> None: assert get_description("30 02 14 * * *", options) == "At 02:02:30 PM" def test_second_intervals(options: Options) -> None: assert get_description("5-10 * * * * *", options) == "Seconds 5 through 10 past the minute" def test_multi_part_second(options: Options) -> None: assert get_description("15,45 * * * * *", options) == "At 15 and 45 seconds past the minute" def test_second_minutes_hours_intervals(options: Options) -> None: assert get_description("5-10 30-35 10-12 * * *", options) == ( "Seconds 5 through 10 past the minute, " "minutes 30 through 35 past the hour, " "between 10:00 AM and 12:59 PM") def test_every5_minutes_at30_seconds(options: Options) -> None: assert get_description("30 */5 * * * *", options) == "At 30 seconds past the minute, every 5 minutes" def test_minutes_past_the_hour_range(options: Options) -> None: assert get_description("0 30 10-13 ? * WED,FRI", options) == ( "At 30 minutes past the hour, " "between 10:00 AM and 01:59 PM, " "only on Wednesday and Friday") def test_seconds_past_the_minute_interval(options: Options) -> None: assert get_description("10 0/5 * * * ?", options) == "At 10 seconds past the minute, every 5 minutes" def test_between_with_interval(options: Options) -> None: assert get_description("2-59/3 1,9,22 11-26 1-6 ?", options) == ("Every 3 minutes, minutes 2 through 59 past the hour, " "at 01:00 AM, 09:00 AM, and 10:00 PM, between day 11 and 26 of the month, " "January through June") def test_recurring_first_of_month(options: Options) -> None: assert get_description("0 0 6 1/1 * ?", options) == "At 06:00 AM" def test_minutes_past_the_hour(options: Options) -> None: assert get_description("0 5 0/1 * * ?", options) == "At 5 minutes past the hour" def test_one_year_only_with_seconds(options: Options) -> None: assert get_description("* * * * * * 2013", options) == "Every second, only in 2013" def test_one_year_only_without_seconds(options: Options) -> None: assert get_description("* * * * * 2013", options) == "Every minute, only in 2013" def test_two_years_only(options: Options) -> None: assert get_description("* * * * * 2013,2014", options) == "Every minute, only in 2013 and 2014" def test_year_range2(options: Options) -> None: assert get_description( "23 12 * JAN-FEB * 2013-2014", options, ) == "At 12:23 PM, January through February, 2013 through 2014" def test_year_range3(options: Options) -> None: assert get_description( "23 12 * JAN-MAR * 2013-2015", options, ) == "At 12:23 PM, January through March, 2013 through 2015" def test_hour_range(options: Options) -> None: assert get_description("0 0/30 8-9 5,20 * ?", options) == ("Every 30 minutes, between 08:00 AM and 09:59 AM, " "on day 5 and 20 of the month") def test_day_of_week_modifier(options: Options) -> None: assert get_description("23 12 * * SUN#2", options) == "At 12:23 PM, on the second Sunday of the month" def test_day_of_week_modifier_with_sunday_start_one(options: Options) -> None: options.day_of_week_start_index_zero = False assert get_description("23 12 * * 1#2", options) == "At 12:23 PM, on the second Sunday of the month" def test_hour_range_with_every_portion(options: Options) -> None: assert get_description("0 25 7-19/8 ? * *", options) == ( "At 25 minutes past the hour, every 8 hours, " "between 07:00 AM and 07:59 PM") def test_hour_range_with_trailing_zero_with_every_portion(options: Options) -> None: assert get_description("0 25 7-20/13 ? * *", options) == ( "At 25 minutes past the hour, every 13 hours, " "between 07:00 AM and 08:59 PM") def test_every3_day(options: Options) -> None: assert get_description("0 0 8 1/3 * ? *", options) == "At 08:00 AM, every 3 days" def tests_every3_day_of_the_week(options: Options) -> None: assert get_description("0 15 10 ? * */3", options) == "At 10:15 AM, every 3 days of the week" def test_every_7_day_of_the_week(options: Options) -> None: assert get_description("0 * * * */7", options) == "Every hour, every 7 days of the week" def test_every_2_day_of_the_week_in_range(options: Options) -> None: assert get_description("* * * ? * 1-5/2", options) == "Every second, every 2 days of the week, Monday through Friday" def test_every_2_day_of_the_week_in_range_with_sunday_start_one(options: Options) -> None: options.day_of_week_start_index_zero = False assert get_description("* * * ? * 2-6/2", options) == "Every second, every 2 days of the week, Monday through Friday" def test_multi_with_day_of_week_start_index_zero_false(options: Options) -> None: options.day_of_week_start_index_zero = False assert get_description("* * * ? * 1,2,3", options) == "Every second, only on Sunday, Monday, and Tuesday" def test_every3_month(options: Options) -> None: assert get_description("0 5 7 2 1/3 ? *", options) == "At 07:05 AM, on day 2 of the month, every 3 months" def test_every2_years(options: Options) -> None: assert get_description( "0 15 6 1 1 ? 1/2", options, ) == "At 06:15 AM, on day 1 of the month, only in January, every 2 years" def test_multi_part_range_minutes(options: Options) -> None: assert get_description("2,4-5 1 * * *", options) == "At 2 and 4 through 5 minutes past the hour, at 01:00 AM" def test_multi_part_range_minutes_2(options: Options) -> None: assert get_description( "2,26-28 18 * * *", options, ) == "At 2 and 26 through 28 minutes past the hour, at 06:00 PM" def test_trailing_space_does_not_cause_a_wrong_description(options: Options) -> None: assert get_description("0 7 * * * ", options) == "At 07:00 AM" def test_multi_part_day_of_the_week(options: Options) -> None: assert get_description("0 00 10 ? * MON-THU,SUN *", options) == "At 10:00 AM, only on Monday through Thursday and Sunday" def test_day_of_week_with_day_of_month(options: Options) -> None: assert get_description("0 0 0 1,2,3 * WED,FRI", options) == "At 12:00 AM, on day 1, 2, and 3 of the month, only on Wednesday and Friday" def test_seconds_interval_with_step_value(options: Options) -> None: assert get_description("5/30 * * * * ?", options) == "Every 30 seconds, starting at 5 seconds past the minute" def test_minutes_interval_with_step_value(options: Options) -> None: assert get_description("0 5/30 * * * ?", options) == "Every 30 minutes, starting at 5 minutes past the hour" def test_hours_interval_with_step_value(options: Options) -> None: assert get_description("* * 5/8 * * ?", options) == "Every second, every 8 hours, starting at 05:00 AM" def test_day_of_month_interval_with_step_value(options: Options) -> None: assert get_description("0 5 7 2/3 * ? *", options) == "At 07:05 AM, every 3 days, starting on day 2 of the month" def test_month_interval_with_step_value(options: Options) -> None: assert get_description("0 5 7 ? 3/2 ? *", options) == "At 07:05 AM, every 2 months, March through December" def test_day_of_week_interval_with_step_value(options: Options) -> None: assert get_description("0 5 7 ? * 2/3 *", options) == "At 07:05 AM, every 3 days of the week, Tuesday through Saturday" def test_year_interval_with_step_value(options: Options) -> None: assert get_description("0 5 7 ? * ? 2016/4", options) == "At 07:05 AM, every 4 years, 2016 through 9999" def test_minutes_combined_with_multiple_hour_ranges(options: Options) -> None: assert get_description("1 1,3-4 * * *", options) == "At 1 minutes past the hour, at 01:00 AM and 03:00 AM through 04:59 AM" def test_minute_range_conbined_with_second_range(options: Options) -> None: assert get_description("12-50 0-10 6 * * * 2022", options) == "Seconds 12 through 50 past the minute, minutes 0 through 10 past the hour, at 06:00 AM, only in 2022" def test_seconds_expression_combined_with_hours_list_and_single_minute(options: Options) -> None: assert get_description("5 30 6,14,16 5 * *", options) == "At 5 seconds past the minute, at 30 minutes past the hour, at 06:00 AM, 02:00 PM, and 04:00 PM, on day 5 of the month" def test_minute_range_with_interval(options: Options) -> None: assert get_description("0-20/3 9 * * *", options) == "Every 3 minutes, minutes 0 through 20 past the hour, between 09:00 AM and 09:59 AM" def minutes_zero_1(options: Options) -> None: assert get_description("* 0 */4 * * *", options) == "Every second, at 0 minutes past the hour, every 4 hours" def minutes_zero_2(options: Options) -> None: assert get_description("*/10 0 * * * *", options) == "Every 10 seconds, at 0 minutes past the hour" def minutes_zero_3(options: Options) -> None: assert get_description("* 0 0 * * *", options) == "Every second, at 0 minutes past the hour, between 12:00 AM and 12:59 AM" def minutes_zero_4(options: Options) -> None: assert get_description("* 0 * * *", options) == "Every minute, between 12:00 AM and 12:59 AM" def minutes_zero_5(options: Options) -> None: assert get_description("* 0 * * * *",options) == "Every second, at 0 minutes past the hour" def sunday_7(options: Options) -> None: assert get_description("0 0 9 ? * 7", options) == "At 09:00 AM, only on Sunday" def every_year(options: Options) -> None: assert get_description("0/10 * ? * MON-FRI *", options) == "Every 10 minutes, Monday through Friday" def tuesday_9(options: Options) -> None: assert get_description("0 9 * * 2", options) == "At 09:00 AM, only on Tuesday" def test_comma_with_step_in_hours(options: Options) -> None: """Issue #21: comma combined with step expression in the same field""" assert get_description("0 0,6-23/2 * * *", options) == "At 12:00 AM and every 2 hours, 06:00 AM through 11:59 PM" def test_comma_with_step_in_minutes(options: Options) -> None: """Issue #21: comma combined with step expression in minutes""" assert get_description("5,10-30/5 9 * * *", options) == ( "At 5 and every 5 minutes, 10 through 30 minutes past the hour, between 09:00 AM and 09:59 AM" ) def test_multiple_commas_with_step(options: Options) -> None: """Issue #21: multiple values and a step expression""" assert get_description("0 0,12,18-23/2 * * *", options) == ( "At 12:00 AM, 12:00 PM, and every 2 hours, 06:00 PM through 11:59 PM" ) Salamek-cron-descriptor-b4a8c7c/tests/test_import.py000066400000000000000000000036751516023643100230000ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from cron_descriptor.Options import Options def test_inline_import(options: Options) -> None: from cron_descriptor import DescriptionTypeEnum, ExpressionDescriptor, Options new_options = Options( locale_code=options.locale_code, use_24hour_time_format=True, ) ceh = ExpressionDescriptor("* * * * *", new_options) assert ceh.get_description(DescriptionTypeEnum.FULL) == "Every minute" def test_full_import(options: Options) -> None: from cron_descriptor.DescriptionTypeEnum import DescriptionTypeEnum from cron_descriptor.ExpressionDescriptor import ExpressionDescriptor new_options = Options( locale_code=options.locale_code, use_24hour_time_format=True, ) ceh = ExpressionDescriptor("* * * * *", new_options) assert ceh.get_description(DescriptionTypeEnum.FULL) == "Every minute" Salamek-cron-descriptor-b4a8c7c/tests/test_locale.py000066400000000000000000000042451516023643100227170ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import logging import shutil import tempfile from pathlib import Path from unittest.mock import patch from cron_descriptor import ExpressionDescriptor, Options def test_locale_de() -> None: options = Options(locale_code="de_DE") assert ExpressionDescriptor("* * * * *", options).get_description() == "Jede Minute" def test_locale_de_custom_location() -> None: logger = logging.getLogger("cron_descriptor.GetText") with patch.object(logger, "debug") as mock_logger: # Copy existing .mo file to temp directory: temp_dir = Path(tempfile.gettempdir()) temp_path = temp_dir.joinpath( "de_DE.mo") source_path_file = Path(__file__).resolve().parent.joinpath("../cron_descriptor/locale/de_DE.mo") shutil.copyfile(source_path_file.absolute(), temp_path) options = Options( locale_code="de_DE", locale_location=str(temp_dir.absolute()), ) assert ExpressionDescriptor("* * * * *", options).get_description() == "Jede Minute" mock_logger.assert_called_once_with("%s Loaded", temp_path) Salamek-cron-descriptor-b4a8c7c/tests/test_validator.py000066400000000000000000000034201516023643100234370ustar00rootroot00000000000000 from cron_descriptor.ExpressionValidator import ExpressionValidator """ Tests validator """ valid = [ "57,59 * * 1 * 1", "1,2,3-15 * * 1 * 1", "1-2,2,3-15 * * 1 * 1", "* 1,59 * 1 * 1", "* 1,2,3-15 * 1 * 1", "* 1-2,2,3-15 * 1 * 1", "* * 1 ? * *", "* 1-12 ? * *", "* 1/12 ? * *", "* 1-5/12 ? * *", "* 1,23 ? * *", "* 1,2,7-23 ? * *", "* 1-2,2,7-23 ? * *", "* * ? * *", "* * 1 * *", "* * 31 * *", "* * 1-2/31 * *", "* * 1,20 * *", "* * LW * *", "* * 1W * *", "* * 31W * *", "* * ? 1 *", "* * ? 12 *", "* * ? JAN *", "* * ? 1-12 *", "* * ? JAN-DEC *", "* * ? 1/12 *", "* * ? 1-5/12 *", "* * ? 1,2,3 *", "* * ? 1,Feb,3 *", "* * ? 1,5,6-12 *", "* * ? 1-2,5,6-12 *", "* * ? JAN-FEB,5,6-12 *", "* * ? * 0", "* * ? * 6", "* * ? * SUN", "* * ? * 0/6", "* * ? * 0-1/6", "* * ? * 0-1", "* * ? * MON-wed", "* * ? * MON-wed,sun,4", "* * ? * MON,3", "* * ? * 2L", "* * ? * 6L", "* * ? * 0#3", "* * ? * * 1970", "* * ? * * 2099", "* * ? * * 1970-2099", "* * ? * * 1970/129", "* * * ? * * 1970-2001/129", "* * * ? * * 1970,1971,2099", "* * * ? * * 1970-1971,1972,2000-2002", "* * * * * 2013", ] invalid = [ "0-59 * * 1 * 1", # invalid DOW range "1-2/59 * * 1 * 1", # invalid step "* * /31 * *", # stray slash "* * l-31 * *", # lowercase 'l' "* * lw * *", # lowercase 'lw' "* * ? * /6", # stray slash "* * ? * * /129", # stray slash "* /12 ? * *", # stray slash "* * W21 * * 0/2", # W before number ] def test_validator_expression() -> None: for expression in valid: ExpressionValidator().validate(expression) Salamek-cron-descriptor-b4a8c7c/tests/test_verbosity.py000066400000000000000000000032751516023643100235100ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. from cron_descriptor import Options, get_description """ Tests verbosity """ def test_simple_expression(options: Options) -> None: options.verbose = True assert get_description("30 4 1 * *", options) == "At 04:30 AM, on day 1 of the month" def test_every_minute_simple_expression(options: Options) -> None: options.verbose = True assert get_description("* * * * *", options) == "Every minute, every hour, every day" def test_single_day_of_the_week(options: Options) -> None: options.verbose = True assert get_description("0 9 * * 2", options) == "At 09:00 AM, only on Tuesday" Salamek-cron-descriptor-b4a8c7c/tools/000077500000000000000000000000001516023643100200405ustar00rootroot00000000000000Salamek-cron-descriptor-b4a8c7c/tools/compilepos.py000066400000000000000000000005161516023643100225660ustar00rootroot00000000000000import logging import pathlib import polib log = logging.getLogger(__name__) base_dir = pathlib.Path("../cron_descriptor/locale") for po_file in base_dir.rglob("*.po"): mo_file = po_file.with_suffix(".mo") log.info("Compiling %s β†’ %s", po_file, mo_file) po = polib.pofile(po_file) po.save_as_mofile(str(mo_file)) Salamek-cron-descriptor-b4a8c7c/tools/resx2po.py000066400000000000000000000115251516023643100220200ustar00rootroot00000000000000# The MIT License (MIT) # # Copyright (c) 2016 Adam Schubert # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import datetime import xml.etree.ElementTree as ET from logging import getLogger from pathlib import Path import polib log = getLogger(__name__) class Resx2Po: def __init__(self, en_resx: Path, translation_resx: Path, code: str, output_po: Path) -> None: if not en_resx.is_file(): msg = f"EN Resx {en_resx.absolute()} not found" raise FileNotFoundError(msg) if not translation_resx.is_file(): msg = f"Translation {code} {translation_resx.absolute()} Resx bound not found" raise FileNotFoundError(msg) self.en_resx = self.resx2dict(en_resx) self.translation_resx = self.resx2dict(translation_resx) self.code = code self.output_po = output_po self.generate() def resx2dict(self, resx: Path) -> dict[str, str]: tree = ET.parse(resx) root = tree.getroot() translation_table = {} for first in root.findall("./data"): found_value = first.find("./value") if found_value is not None and found_value.text: translation_table[first.attrib["name"]] = found_value.text return translation_table def generate(self) -> None: po = polib.POFile() now = datetime.datetime.now(datetime.timezone.utc) po.metadata = { "Project-Id-Version": "1.0", "Report-Msgid-Bugs-To": "adam.schubert@sg1-game.net", "POT-Creation-Date": now.strftime("%Y-%m-%d %H:%M%z"), "PO-Revision-Date": now.strftime("%Y-%m-%d %H:%M%z"), "Last-Translator": "Adam Schubert ", "Language-Team": "", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=utf-8", "Content-Transfer-Encoding": "8bit", "Language": self.code, } for message_en_id, message_en in self.en_resx.items(): if message_en_id in self.translation_resx: entry = polib.POEntry( msgid=message_en, msgstr=self.translation_resx[message_en_id], comment=message_en_id, ) po.append(entry) else: log.warning("%s not found in %s resx", message_en_id, self.code) po.save(str(self.output_po.absolute())) code_list = { "cs": "cs_CZ", # Czech "da": "da_DK", # Danish "de": "de_DE", # German "el": "el_GR", # Greek "es": "es_ES", # Spanish (Spain) "es-MX": "es_MX", # Spanish (Mexico) "fa": "fa_IR", # Persian (Iran) "fi": "fi_FI", # Finnish "fr": "fr_FR", # French (France) "he-IL": "he_IL", # Hebrew (Israel) "hu": "hu_HU", # Hungarian "it": "it_IT", # Italian "ja": "ja_JP", # Japanese "kk": "kk_KZ", # Kazakh "ko": "ko_KR", # Korean "nb": "nb_NO", # Norwegian BokmΓ₯l "nl": "nl_NL", # Dutch (Netherlands) "pl": "pl_PL", # Polish "pt": "pt_PT", # Portuguese (Portugal) "ro": "ro_RO", # Romanian "ru": "ru_RU", # Russian "sl": "sl_SI", # Slovenian "sv": "sv_SE", # Swedish "tr": "tr_TR", # Turkish "uk": "uk_UA", # Ukrainian "vi": "vi_VN", # Vietnamese "zh-Hans": "zh_CN", # Simplified Chinese (China) "zh-Hant": "zh_TW", # Traditional Chinese (Taiwan) } output_dir = Path("./locale") input_dir = Path("./source") for from_code, to_code in code_list.items(): output_file = output_dir.joinpath(f"{to_code}.po") Resx2Po( input_dir.joinpath("Resources.resx"), input_dir.joinpath(f"Resources.{from_code}.resx"), to_code, output_file, )