feat: impl docs (#4)

The entire public api is covered with documentation in two languages - Russian and English.

the library now supports the latest three versions of python - 3.12, 3.13 and 3.14

minor design changes: now, when a Boolean flag is entered, its value is an empty string, not None.

tests have been adapted to the supported versions of python, readmi has been redesigned in two languages, German is no longer available.
This commit is contained in:
kolo
2025-12-04 21:55:19 +03:00
committed by GitHub
parent a2ac6a608f
commit ce7e24b924
210 changed files with 13770 additions and 1183 deletions
+3
View File
@@ -0,0 +1,3 @@
_build/
_static/
*.mo
+35
View File
@@ -0,0 +1,35 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
LANGUAGES = en ru
build-all:
sphinx-build -b html -D language=ru $(SOURCEDIR) $(BUILDDIR)/html/ru
sphinx-build -b html -D language=en $(SOURCEDIR) $(BUILDDIR)/html/en
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
live-ru:
sphinx-autobuild -b html . _build/html/ru -D language=ru
live-en:
sphinx-autobuild -b html . _build/html/en -D language=en
update-langs:
sphinx-build -b gettext . _build/gettext
sphinx-intl update -p _build/gettext -l en
.PHONY: help Makefile serve-all
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+13
View File
@@ -0,0 +1,13 @@
from argenta import App, Orchestrator
from argenta.orchestrator.argparser import ArgParser, BooleanArgument, ValueArgument
arg_parser = ArgParser(processed_args=[BooleanArgument("dev"), ValueArgument('some', possible_values=['fuck', 'cruck'])])
orchestrator = Orchestrator(
arg_parser=arg_parser,
)
if __name__ == "__main__":
if arg_parser.parsed_argspace.get_by_name('dev'):
orchestrator.start_polling(App(initial_message='ArgentaDev'))
else:
orchestrator.start_polling(App())
+33
View File
@@ -0,0 +1,33 @@
from argenta import App, Orchestrator
from argenta.orchestrator.argparser import ArgParser, ValueArgument
arguments = [
ValueArgument("host", help="Server host", is_required=True),
ValueArgument("port", help="Server port", is_required=True),
]
argparser = ArgParser(
processed_args=arguments,
name="WebServer",
description="Simple web server"
)
app = App()
orchestrator = Orchestrator(argparser)
def main():
argspace = argparser.parsed_argspace
host = argspace.get_by_name("host")
port = argspace.get_by_name("port")
print("Server configuration:")
print(f" Host: {host.value}")
print(f" Port: {port.value}")
orchestrator.start_polling(app)
if __name__ == "__main__":
main()
+10
View File
@@ -0,0 +1,10 @@
from argenta import Response, Router
from argenta.di import FromDishka
from argenta.orchestrator.argparser import ArgSpace
router = Router()
@router.command("get_args")
async def get_args(response: Response, argspace: FromDishka[ArgSpace]):
print(argspace.all_arguments)
+21
View File
@@ -0,0 +1,21 @@
from argenta import Response, Router
from argenta.di import FromDishka
from argenta.orchestrator.argparser import ArgSpace, BooleanArgument, ValueArgument
router = Router()
@router.command("get_args")
def get_args(response: Response, argspace: FromDishka[ArgSpace]):
# Get all boolean flags
boolean_flags = argspace.get_by_type(BooleanArgument)
print(f"Active flags: {[arg.name for arg in boolean_flags if arg.value]}")
# Get all value arguments
value_args = argspace.get_by_type(ValueArgument)
for arg in value_args:
print(f"{arg.name} = {arg.value}")
# Count arguments of each type
print(f"Boolean arguments: {len(argspace.get_by_type(BooleanArgument))}")
print(f"Value arguments: {len(argspace.get_by_type(ValueArgument))}")
+11
View File
@@ -0,0 +1,11 @@
config_arg = argspace.get_by_name("config")
if config_arg:
print(f"Config path: {config_arg.value}")
verbose_arg = argspace.get_by_name("verbose")
if verbose_arg and verbose_arg.value:
print("Verbose mode enabled")
unknown_arg = argspace.get_by_name("nonexistent")
if unknown_arg is None:
print("Argument not found")
+28
View File
@@ -0,0 +1,28 @@
from argenta.orchestrator.argparser import ArgParser, ValueArgument
# Create arguments
config_arg = ValueArgument(
"config",
help="Path to configuration file",
default="config.yaml"
)
log_level_arg = ValueArgument(
"log-level",
help="Logging level",
possible_values=["DEBUG", "INFO", "WARNING", "ERROR"],
default="INFO"
)
host_arg = ValueArgument(
"host",
help="Server host address",
is_required=True
)
# Register in ArgParser
parser = ArgParser(
processed_args=[config_arg, log_level_arg, host_arg],
name="MyApp",
description="My application with CLI arguments"
)
+23
View File
@@ -0,0 +1,23 @@
from argenta.orchestrator.argparser import ArgParser, BooleanArgument
# Create boolean arguments
verbose_arg = BooleanArgument(
"verbose",
help="Enable verbose output"
)
debug_arg = BooleanArgument(
"debug",
help="Enable debug mode"
)
no_cache_arg = BooleanArgument(
"no-cache",
help="Disable caching"
)
# Register in ArgParser
parser = ArgParser(
processed_args=[verbose_arg, debug_arg, no_cache_arg],
name="MyApp"
)
@@ -0,0 +1,10 @@
from argenta import App
from argenta.app import AutoCompleter
# Setting up autocompletion with saving history to a file
my_autocompleter = AutoCompleter(history_filename="argenta_history.txt")
# Passing the configured autocompleter to the application
app = App(autocompleter=my_autocompleter)
# ... the rest of the application logic
+20
View File
@@ -0,0 +1,20 @@
from argenta.command import Flag, Flags, Command
# Simple command without flags
hello_cmd = Command("hello", description="Greet the user")
# Command with description and aliases
quit_cmd = Command("quit", description="Exit the application", aliases=["exit", "q"])
# Command with flags
deploy_cmd = Command(
"deploy",
description="Deploy application to server",
flags=Flags(
[
Flag("env", possible_values=["dev", "prod"]),
Flag("force"),
]
),
aliases=["dep"],
)
+19
View File
@@ -0,0 +1,19 @@
from argenta import Command, Response, Router
router = Router(title="User Management")
@router.command(Command("create-user", description="Create a new user account"))
def handle_create_user(response: Response):
print("Creating new user...")
@router.command(
Command(
"delete-user",
description="Delete existing user account",
aliases=["remove-user", "rm-user"],
)
)
def handle_delete_user(response: Response):
print("Deleting user...")
+33
View File
@@ -0,0 +1,33 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags
router = Router(title="Server Management")
@router.command(
Command(
"start",
description="Start the server",
flags=Flags(
[
Flag("port"),
Flag("host"),
Flag("debug"),
]
),
aliases=["run"],
)
)
def handle_start(response: Response):
input_flags = response.input_flags
port_flag = input_flags.get_flag_by_name("port")
host_flag = input_flags.get_flag_by_name("host")
debug_flag = input_flags.get_flag_by_name("debug")
host = host_flag.input_value if host_flag else "localhost"
port = port_flag.input_value if port_flag else "8080"
debug = debug_flag and debug_flag.input_value
print(f"Starting server on {host}:{port}")
if debug:
print("Debug mode: ON")
+11
View File
@@ -0,0 +1,11 @@
from argenta.command import InputCommand
# Parse command without flags
cmd1 = InputCommand.parse("hello")
print(cmd1.trigger) # "hello"
print(len(cmd1.input_flags)) # 0
# Parse command with flags
cmd2 = InputCommand.parse("deploy --env prod --force")
print(cmd2.trigger) # "deploy"
print(len(cmd2.input_flags)) # 2
+11
View File
@@ -0,0 +1,11 @@
from argenta import Router, Command, Response
router = Router(title="System")
@router.command(Command(
"shutdown",
description="Shutdown the system",
aliases=["poweroff", "halt", "stop"]
))
def handle_shutdown(response: Response):
print("Shutting down the system...")
@@ -0,0 +1,9 @@
from sqlite3 import Connection
from argenta import Response, Router
from argenta.di import FromDishka
router = Router()
@router.command("connect")
def connect_handler(response: Response, connection: FromDishka[Connection]):
connection.execute("...")
@@ -0,0 +1,13 @@
import sqlite3
from sqlite3 import Connection
from typing import Iterable
from dishka import Provider, Scope, provide
class ConnectionProvider(Provider):
@provide(scope=Scope.REQUEST)
def new_connection(self) -> Iterable[Connection]:
conn = sqlite3.connect(":memory:")
yield conn
conn.close()
@@ -0,0 +1,3 @@
from argenta import Orchestrator
orchestrator = Orchestrator(custom_providers=[ConnectionProvider()])
@@ -0,0 +1,9 @@
from argenta import Response, Router
from argenta.di import FromDishka
from argenta.orchestrator.argparser import ArgSpace
router = Router()
@router.command("info")
def connect_handler(response: Response, argspace: FromDishka[ArgSpace]):
print(argspace.get_by_name("type"))
@@ -0,0 +1,7 @@
from argenta import App
def empty_command_handler():
print("Empty command handler called")
app: App = App()
app.set_empty_command_handler(empty_command_handler)
@@ -0,0 +1,7 @@
from argenta import App
def incorrect_input_syntax_handler(raw_command: str):
print(f"Incorrect input syntax for command: {raw_command}")
app: App = App()
app.set_incorrect_input_syntax_handler(incorrect_input_syntax_handler)
@@ -0,0 +1,7 @@
from argenta import App
def repeated_input_flags_handler(raw_command: str):
print(f"Repeated input flags: {raw_command}")
app: App = App()
app.set_repeated_input_flags_handler(repeated_input_flags_handler)
@@ -0,0 +1,7 @@
from argenta import App
def empty_command_handler():
print("Empty input command")
app: App = App()
app.set_empty_command_handler(empty_command_handler)
@@ -0,0 +1,8 @@
from argenta import App
from argenta.command import InputCommand
def unknown_command_handler(command: InputCommand):
print(f"Unknown input command with trigger: {command.trigger}")
app: App = App()
app.set_unknown_command_handler(unknown_command_handler)
@@ -0,0 +1,7 @@
from argenta import App, Response
def exit_command_handler(response: Response):
print("Exit command handler")
app: App = App()
app.set_exit_command_handler(exit_command_handler)
@@ -0,0 +1,36 @@
from argenta.command import Flags, PredefinedFlags
# Using predefined flags when creating a command
command_flags = Flags(
[
PredefinedFlags.HELP,
PredefinedFlags.SHORT_HELP,
PredefinedFlags.INFO,
]
)
# Using Network Flags
network_flags = Flags(
[
PredefinedFlags.HOST,
PredefinedFlags.PORT,
]
)
# Validating the values of predefined flags
print(PredefinedFlags.HOST.validate_input_flag_value("192.168.1.1")) # True
print(PredefinedFlags.HOST.validate_input_flag_value("invalid")) # False
print(PredefinedFlags.PORT.validate_input_flag_value("8080")) # True
print(PredefinedFlags.PORT.validate_input_flag_value("99999")) # True
print(PredefinedFlags.PORT.validate_input_flag_value("abc")) # False
# Flags without values
print(PredefinedFlags.HELP.validate_input_flag_value(None)) # True
print(PredefinedFlags.HELP.validate_input_flag_value("something")) # False
# Checking string representations
print(PredefinedFlags.HELP.string_entity) # --help
print(PredefinedFlags.SHORT_HELP.string_entity) # -H
print(PredefinedFlags.HOST.string_entity) # --host
print(PredefinedFlags.SHORT_PORT.string_entity) # -P
+20
View File
@@ -0,0 +1,20 @@
import re
from argenta.command import Flag, PossibleValues
# Simple flag with any values
verbose_flag = Flag(name="verbose")
# Flag with short prefix
short_flag = Flag(name="v", prefix="-")
# Flag that does not take a value
help_flag = Flag(name="help", possible_values=PossibleValues.NEITHER)
# Flag with list of possible values
format_flag = Flag(name="format", possible_values=["json", "xml", "csv"])
# Flag with regexp for validation input value
email_flag = Flag(
name="email",
possible_values=re.compile(r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"),
)
+20
View File
@@ -0,0 +1,20 @@
import re
from argenta.command.flag.models import Flag, PossibleValues
# Flag with list of allowed values
format_flag = Flag(name="format", possible_values=["json", "xml", "csv"])
# Value validation
print(format_flag.validate_input_flag_value("json")) # True
print(format_flag.validate_input_flag_value("pdf")) # False
# Flag without value
help_flag = Flag(name="help", possible_values=PossibleValues.NEITHER)
print(help_flag.validate_input_flag_value(None)) # True
print(help_flag.validate_input_flag_value("value")) # False
# Flag with regular expression
port_flag = Flag(name="port", possible_values=re.compile(r"^\d{1,5}$"))
print(port_flag.validate_input_flag_value("8080")) # True
print(port_flag.validate_input_flag_value("abc")) # False
+9
View File
@@ -0,0 +1,9 @@
from argenta.command import Flag
help_flag = Flag(name="help")
version_flag = Flag(name="V", prefix="-")
print(help_flag) # --help
message = f"Use {help_flag} to see help"
print(message) # Use --help to see help
+12
View File
@@ -0,0 +1,12 @@
from argenta.command import Flag
verbose_flag = Flag(name="verbose", prefix="--")
short_flag = Flag(name="v", prefix="-")
# Debug view
print(repr(verbose_flag)) # Flag<prefix=--, name=verbose>
print(repr(short_flag)) # Flag<prefix=-, name=v>
# In an interactive console or debugger
# >>> verbose_flag
# Flag<prefix=--, name=verbose>
+21
View File
@@ -0,0 +1,21 @@
from argenta.command import Flag, PossibleValues
# Creating two flags with the same name and prefix
flag1 = Flag(name="verbose", prefix="--")
flag2 = Flag(name="verbose", prefix="--")
# Flag comparison
print(flag1 == flag2) # True
# Flags with different prefixes are not equal
flag3 = Flag(name="verbose", prefix="-")
print(flag1 == flag3) # False
# Flags with different names are not equal
flag4 = Flag(name="help", prefix="--")
print(flag1 == flag4) # False
# Different possible_values do not affect equality
flag5 = Flag(name="verbose", prefix="--", possible_values=PossibleValues.NEITHER)
flag6 = Flag(name="verbose", prefix="--", possible_values=["value1", "value2"])
print(flag5 == flag6)
@@ -0,0 +1,24 @@
from argenta import Router, Response
from argenta.command import Command, Flag, PossibleValues
from argenta.command.flag import ValidationStatus
router = Router()
@router.command(Command(
"deploy",
flags=Flag("verbose", possible_values=PossibleValues.NEITHER)
))
def deploy_handler(response: Response):
# Check for toggle flag presence
verbose_flag = response.input_flags.get_flag_by_name("verbose")
if verbose_flag and verbose_flag.status == ValidationStatus.VALID:
print("Deploying with verbose output...")
# Detailed logic
elif verbose_flag and verbose_flag.status == ValidationStatus.INVALID:
print("Incorrect flag value")
return
else:
print("Deploying...")
# Normal logic
+16
View File
@@ -0,0 +1,16 @@
from argenta import Router, Response
from argenta.command import Command, Flag
router = Router()
@router.command(Command("greet", flags=Flag("name")))
def greet_handler(response: Response):
# Get flag by name
name_flag = response.input_flags.get_flag_by_name("name")
# Check if flag was passed
if name_flag:
print(f"Hello, {name_flag.input_value}!")
else:
print("Hello, stranger!")
+11
View File
@@ -0,0 +1,11 @@
import re
from argenta.command import Command, Flag, Flags
flags = Flags(
[
Flag("host", possible_values=re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")),
Flag("port", possible_values=re.compile(r"^\d{1,5}$")),
]
)
cmd = Command("start", description="Start the server", flags=flags)
+9
View File
@@ -0,0 +1,9 @@
from argenta.command import Flag, Flags
flags: Flags = Flags()
flags.add_flag(Flag("config"))
flags.add_flag(Flag("debug"))
flags.add_flag(Flag("log-level", possible_values=["INFO", "DEBUG", "ERROR"]))
print(len(flags)) # 3
+15
View File
@@ -0,0 +1,15 @@
from argenta.command import Flag, Flags
from argenta.command.flag.defaults import PredefinedFlags
flags = Flags([PredefinedFlags.HOST])
additional_flags = [
PredefinedFlags.PORT,
Flag("database"),
Flag("ssl"),
Flag("verbose"),
]
flags.add_flags(additional_flags)
print(len(flags)) # 5
+13
View File
@@ -0,0 +1,13 @@
from argenta.command import Flag, Flags
from argenta.command.flag.defaults import PredefinedFlags
flags = Flags([PredefinedFlags.HOST, PredefinedFlags.PORT, Flag("verbose")])
host_flag = flags.get_flag_by_name("host")
if host_flag:
print(f"Found flag: {host_flag.name}")
unknown_flag = flags.get_flag_by_name("nonexistent")
if unknown_flag is None:
print("Flag not found")
+13
View File
@@ -0,0 +1,13 @@
from argenta.command.flag import InputFlag, ValidationStatus
flag_with_value = InputFlag(
name="output", prefix="--", input_value="result.txt", status=ValidationStatus.VALID
)
flag_without_value = InputFlag(
name="help", prefix="-", input_value='', status=ValidationStatus.VALID
)
# String representation includes value
print(str(flag_with_value)) # --output result.txt
print(str(flag_without_value)) # -help
+12
View File
@@ -0,0 +1,12 @@
from argenta.command.flag import InputFlag, ValidationStatus
flag = InputFlag(
name="config",
prefix="--",
input_value="settings.json",
status=ValidationStatus.VALID,
)
# Debug representation of the object
print(repr(flag))
# InputFlag<prefix='--', name='config', value='settings.json', status=ValidationStatus.VALID>
@@ -0,0 +1,23 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags
router = Router(title="Example")
@router.command(
Command(
"example",
description="Example command with flags",
flags=Flags([
Flag("name"),
Flag("age")
]),
)
)
def example_handler(response: Response):
input_flags = response.input_flags
if input_flags:
print(f"Received {len(input_flags)} flag(s)")
else:
print("No flags provided")
@@ -0,0 +1,49 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags, InputFlag
from argenta.command.flag import ValidationStatus
router = Router(title="Comprehensive Example")
@router.command(
Command(
"validate",
description="Validate all flags",
flags=Flags(
[
Flag("format", possible_values=["json", "xml"]),
Flag("output"),
Flag("force"),
]
),
)
)
def validate_handler(response: Response):
input_flags = response.input_flags
print("Flag validation results:")
valid_flags: list[InputFlag] = []
invalid_flags: list[InputFlag] = []
undefined_flags: list[InputFlag] = []
for flag in input_flags:
if flag.status == ValidationStatus.VALID:
valid_flags.append(flag)
print(f"{flag.string_entity}: {flag.input_value} (VALID)")
elif flag.status == ValidationStatus.INVALID:
invalid_flags.append(flag)
print(f"{flag.string_entity}: {flag.input_value} (INVALID)")
elif flag.status == ValidationStatus.UNDEFINED:
undefined_flags.append(flag)
print(f" ? {flag.string_entity}: {flag.input_value} (UNDEFINED)")
print("\nSummary:")
print(f" Valid flags: {len(valid_flags)}")
print(f" Invalid flags: {len(invalid_flags)}")
print(f" Undefined flags: {len(undefined_flags)}")
if valid_flags:
print("\nProcessing valid flags:")
for flag in valid_flags:
print(f" Processing {flag.name} = {flag.input_value}")
@@ -0,0 +1,36 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags
router = Router(title="Get Flag Example")
@router.command(
Command(
"config",
description="Configure settings",
flags=Flags([
Flag("host"),
Flag("port"),
Flag("debug")
]),
)
)
def config_handler(response: Response):
input_flags = response.input_flags
host_flag = input_flags.get_flag_by_name("host")
port_flag = input_flags.get_flag_by_name("port")
debug_flag = input_flags.get_flag_by_name("debug")
if host_flag:
print(f"Host: {host_flag.input_value}")
if port_flag:
print(f"Port: {port_flag.input_value}")
if debug_flag:
print("Debug mode enabled")
missing_flag = input_flags.get_flag_by_name("nonexistent")
if missing_flag is None:
print("Flag 'nonexistent' not found")
@@ -0,0 +1,19 @@
from argenta import Command, Response, Router
from argenta.command.flag import InputFlag, InputFlags, ValidationStatus
router = Router(title="Add Flag Example")
@router.command(Command("test", description="Test command"))
def test_handler(response: Response):
# Create new InputFlags collection
new_flags = InputFlags()
# Add one flag
test_flag = InputFlag(
name="test", prefix="--", input_value="value", status=ValidationStatus.VALID
)
new_flags.add_flag(test_flag)
print(f"Flags count: {len(new_flags.flags)}")
print(f"First flag: {new_flags.flags[0].name}")
@@ -0,0 +1,24 @@
from argenta.command.flag import InputFlag, InputFlags, ValidationStatus
# Create InputFlags collection
flags = InputFlags()
# Create several flags
flag1 = InputFlag(
name="option1", prefix="--", input_value="value1", status=ValidationStatus.VALID
)
flag2 = InputFlag(
name="option2", prefix="--", input_value="value2", status=ValidationStatus.VALID
)
flag3 = InputFlag(
name="option3", prefix="---", input_value="value3", status=ValidationStatus.VALID
)
# Add all flags in one call
flags.add_flags([flag1, flag2, flag3])
print(f"Total flags: {len(flags.flags)}")
for flag in flags:
print(f" - {flag.string_entity}: {flag.input_value}")
@@ -0,0 +1,27 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags
router = Router(title="Bool Check Example")
@router.command(
Command(
"action",
description="Action with optional flags",
flags=Flags([Flag("option1"), Flag("option2")]),
)
)
def action_handler(response: Response):
input_flags = response.input_flags
# Check for flags presence
if input_flags:
print("Flags were provided:")
for flag in input_flags:
print(f" - {flag.name}: {flag.input_value}")
else:
print("No flags provided, using defaults")
# Alternative way to check
has_flags = bool(input_flags)
print(f"\nHas flags: {has_flags}")
@@ -0,0 +1,37 @@
from argenta.command.flag import InputFlag, ValidationStatus
from argenta.command.flag.flags.models import InputFlags
# Create first collection
flags1 = InputFlags(
[
InputFlag(name="flag1", input_value="value1", status=ValidationStatus.VALID),
InputFlag(name="flag2", input_value="value2", status=ValidationStatus.VALID),
]
)
# Create second collection with same flags
flags2 = InputFlags(
[
InputFlag(name="flag1", input_value="value1", status=ValidationStatus.VALID),
InputFlag(name="flag2", input_value="value2", status=ValidationStatus.VALID),
]
)
# Create third collection with different values
flags3 = InputFlags(
[
InputFlag(name="flag1", input_value="different", status=ValidationStatus.VALID),
InputFlag(name="flag2", input_value="value2", status=ValidationStatus.VALID),
]
)
print(f"flags1 == flags2: {flags1 == flags2}") # True (same names)
print(
f"flags1 == flags3: {flags1 == flags3}"
) # True (same names, values are not considered)
# Different collections
flags4 = InputFlags(
[InputFlag(name="flag3", input_value="value3", status=ValidationStatus.VALID)]
)
print(f"flags1 == flags4: {flags1 == flags4}") # False (different flags)
@@ -0,0 +1,33 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags
from argenta.command.flag import InputFlag
router = Router(title="Contains Example")
@router.command(
Command(
"check",
description="Check flags",
flags=Flags([Flag("verbose"), Flag("debug"), Flag("quiet")]),
)
)
def check_handler(response: Response):
input_flags = response.input_flags
# Check for specific flag presence
verbose_flag = input_flags.get_flag_by_name("verbose")
debug_flag = input_flags.get_flag_by_name("debug")
# Use 'in' operator for checking
if verbose_flag and verbose_flag in input_flags:
print("Verbose flag is present")
if debug_flag and debug_flag in input_flags:
print("Debug flag is present")
# You can create a flag for checking (comparison is by name)
test_flag = InputFlag(name="verbose", prefix="--", input_value="any", status=None)
if test_flag in input_flags:
print("Verbose flag found using 'in' operator")
@@ -0,0 +1,27 @@
import sqlite3
from sqlite3 import Connection
from typing import Iterable
from dishka import Provider, Scope, provide
from argenta import App, Orchestrator
class ConnectionProvider(Provider):
@provide(scope=Scope.REQUEST)
def new_connection(self) -> Iterable[Connection]:
conn = sqlite3.connect(":memory:")
yield conn
conn.close()
# 2. Create and configure App
app = App()
# ... you can add routers here ...
# 3. Create Orchestrator, passing our provider
orchestrator = Orchestrator(custom_providers=[ConnectionProvider()])
# 4. Start the application
if __name__ == "__main__":
orchestrator.start_polling(app)
@@ -0,0 +1,5 @@
from argenta.command import Flag, PossibleValues
# Creating flags with any values
message_flag = Flag(name="message", possible_values=PossibleValues.ALL)
name_flag = Flag(name="name", possible_values=PossibleValues.ALL)
@@ -0,0 +1,14 @@
import re
from argenta.command import Flag, PossibleValues
# Flag without value
verbose_flag = Flag(name="verbose", possible_values=PossibleValues.NEITHER)
# Flag with any value
output_flag = Flag(name="output", possible_values=PossibleValues.ALL)
# Flag with a list of valid values
format_flag = Flag(name="format", possible_values=["json", "xml", "csv", "yaml"])
# Flag with regular expression
email_flag = Flag(name="email", possible_values=re.compile(r"^[\w\.-]+@[\w\.-]+\.\w+$"))
@@ -0,0 +1,6 @@
from argenta.command import Flag, PossibleValues
# Creating flags without values
help_flag = Flag(name="help", possible_values=PossibleValues.NEITHER)
verbose_flag = Flag(name="verbose", possible_values=PossibleValues.NEITHER)
force_flag = Flag(name="force", possible_values=PossibleValues.NEITHER)
@@ -0,0 +1,68 @@
import operator
import re
from argenta import App, Orchestrator, Response, Router
from argenta.app import DynamicDividingLine
from argenta.command import Command, Flag, Flags
from argenta.response.status import ResponseStatus
router = Router("Calculator")
operations = {
'mul': operator.mul,
'sub': operator.sub,
'add': operator.add
}
@router.command(
Command(
"calc",
description="Calculator with two numbers",
flags=Flags(
[
Flag("a", possible_values=re.compile(r"^\d{,5}$")), # First number
Flag("b", possible_values=re.compile(r"^\d{,5}$")), # Second number
Flag("operation", possible_values=["add", "sub", "mul"]), # Operation: add, sub, mul
]
),
)
)
def calc_handler(response: Response):
# Get flag values
a_flag = response.input_flags.get_flag_by_name("a")
b_flag = response.input_flags.get_flag_by_name("b")
op_flag = response.input_flags.get_flag_by_name("op")
# Check that all flags are provided
if response.status != ResponseStatus.ALL_FLAGS_VALID or not all([a_flag, b_flag, op_flag]):
print("Error: must specify --a, --b and --op")
return
a = float(a_flag.input_value)
b = float(b_flag.input_value)
operation = op_flag.input_value
try:
result = operations[operation](a, b)
except ZeroDivisionError:
print("Can't divide by zero")
else:
print(f"Result: {result}")
app = App(
initial_message="Calculator",
repeat_command_groups_printing=False,
prompt=">> ",
dividing_line=DynamicDividingLine("~"),
)
orchestrator = Orchestrator()
def main():
app.include_router(router)
orchestrator.start_polling(app)
if __name__ == "__main__":
main()
+16
View File
@@ -0,0 +1,16 @@
# main.py
from .routers import router
from argenta import App, Orchestrator
app: App = App()
orchestrator: Orchestrator = Orchestrator()
def main() -> None:
app.include_router(router)
orchestrator.start_polling(app)
if __name__ == "__main__":
main()
+9
View File
@@ -0,0 +1,9 @@
# routers.py
from argenta import Command, Response, Router
router = Router(title="Quickstart Example")
@router.command(Command("hello", description="Say hello"))
def handler(response: Response):
print("Hello, world!")
@@ -0,0 +1,37 @@
from argenta import App, Command, Orchestrator, Router, Response
from argenta.command import Flag
# 1. Create app and orchestrator instances
app = App(
prompt=">> ",
initial_message="Simple App",
farewell_message="Goodbye!",
repeat_command_groups_printing=False
)
orchestrator = Orchestrator()
# 2. Create router for grouping commands
main_router = Router(title="Main commands")
# 3. Define command and its handler
@main_router.command(Command(
"hello",
description="Prints greeting message",
flags=Flag("name")
))
def hello_handler(response: Response):
"""This handler will be called for 'hello' command."""
name = response.input_flags.get_flag_by_name("name")
if name:
print(f"Hello, {name.input_value}!")
else:
print("Hello, world!")
# 4. Include router to application
app.include_router(main_router)
# 5. Start application
if __name__ == "__main__":
orchestrator.start_polling(app)
@@ -0,0 +1,54 @@
from typing import cast
from argenta import Command, Response, Router
from argenta.command.flag import Flag, Flags, ValidationStatus
from argenta.di import FromDishka
from .repository import Priority, Task, TaskRepository
router = Router(title="Task Manager")
@router.command(Command(
"add-task",
description="Add a new task",
flags=Flags([
Flag("description"),
Flag("priority", possible_values=["low", "medium", "high"]),
]),
))
def add_task(response: Response, repo: FromDishka[TaskRepository]):
description_flag = response.input_flags.get_flag_by_name("description")
if not description_flag or not description_flag.status == ValidationStatus.VALID:
print("Error: --description flag is required.")
return
task_description = description_flag.input_value or ""
priority_flag = response.input_flags.get_flag_by_name("priority")
if priority_flag and priority_flag.status == ValidationStatus.VALID:
priority_value = priority_flag.input_value
else:
priority_value = "medium"
priority = cast(Priority, priority_value)
task = Task(description=task_description, priority=priority)
repo.add_task(task)
print(f"Added task: '{task.description}' with priority '{task.priority}'")
@router.command(Command("list-tasks", description="List all tasks"))
def list_tasks(response: Response, repo: FromDishka[TaskRepository]):
tasks = repo.get_all_tasks()
if not tasks:
print("No tasks found.")
return
print("Tasks:")
for i, task in enumerate(tasks, 1):
print(f" {i}. {task.description} (Priority: {task.priority})")
@@ -0,0 +1,18 @@
from argenta import App, Orchestrator
from .handlers import router
from .provider import TaskProvider
# 1. Create app and orchestrator instances
app = App(
initial_message="Task Manager",
prompt="Enter a command: ",
)
orchestrator = Orchestrator(custom_providers=[TaskProvider()])
# 2. Include router with our commands
app.include_router(router)
# 3. Start polling via orchestrator
if __name__ == "__main__":
orchestrator.start_polling(app)
@@ -0,0 +1,9 @@
from dishka import Provider, Scope, provide
from .repository import TaskRepository
class TaskProvider(Provider):
@provide(scope=Scope.APP)
def get_repository(self) -> TaskRepository:
return TaskRepository()
@@ -0,0 +1,21 @@
from dataclasses import dataclass
from typing import Literal
Priority = Literal["low", "medium", "high"]
@dataclass
class Task:
description: str
priority: Priority = "medium"
class TaskRepository:
def __init__(self):
self._tasks: list[Task] = []
def add_task(self, task: Task):
self._tasks.append(task)
def get_all_tasks(self) -> list[Task]:
return self._tasks
@@ -0,0 +1,10 @@
from argenta import Response, Router
# For this router stdout redirect will be disabled
interactive_router = Router(disable_redirect_stdout=True)
@interactive_router.command("ask")
def ask_name(response: Response):
name = input("What is your name? ")
print(f"Nice to meet you, {name}!")
@@ -0,0 +1,5 @@
from argenta import App
from argenta.app import StaticDividingLine
# All routers will use static line with length 50 by default
app = App(dividing_line=StaticDividingLine(length=50))
@@ -0,0 +1,42 @@
from argenta import Router, Response, Command, DataBridge
from argenta.command import Flag
from argenta.di import FromDishka
router = Router(title="Authentication")
def authenticate_user(username: str) -> str:
return f"token_for_{username}"
@router.command(Command("login", flags=Flag("username")))
def login_handler(response: Response, data_bridge: FromDishka[DataBridge]):
username_flag = response.input_flags.get_flag_by_name("username")
if not username_flag or not username_flag.input_value:
print("Error: username must be specified using the --username flag.")
return
username = username_flag.input_value
token = authenticate_user(username)
data_bridge.update({"auth_token": token})
print(f"Login successful! User '{username}' authenticated.")
@router.command("get-profile")
def get_profile_handler(response: Response, data_bridge: FromDishka[DataBridge]):
token = data_bridge.get_by_key("auth_token")
if not token:
print("Error: you are not authenticated. Please run the 'login' command first.")
return
print(f"Loading profile using token: [yellow]{token}[/yellow]")
@router.command("logout")
def logout_handler(response: Response, data_bridge: FromDishka[DataBridge]):
try:
data_bridge.delete_by_key("auth_token")
print("Logout successful. Session data cleared.")
except KeyError:
print("You were not authenticated anyway.")
+12
View File
@@ -0,0 +1,12 @@
from argenta import Command, Response, Router
from argenta.response import ResponseStatus
router = Router(title="Example")
@router.command(Command("greet", description="Greet the user"))
def greet_handler(response: Response):
if response.status == ResponseStatus.ALL_FLAGS_VALID:
print("Hello! All flags are valid.")
else:
print("Warning: Some flags have issues.")
+25
View File
@@ -0,0 +1,25 @@
from argenta import Command, Response, Router
router = Router(title="Data Example")
@router.command(Command("set", description="Set data"))
def set_handler(response: Response):
# Update global data storage
response.update_data(
{
"user_name": "John",
"timestamp": "2024-01-01",
"settings": {"theme": "dark", "language": "ru"},
}
)
print("Data updated successfully")
@router.command(Command("show", description="Show data"))
def show_handler(response: Response):
# Get data from global storage
data = response.get_data()
if "user_name" in data:
print(f"User: {data['user_name']}")
print(f"Settings: {data.get('settings', {})}")
+16
View File
@@ -0,0 +1,16 @@
from argenta import Command, Response, Router
router = Router(title="Get Data Example")
@router.command(Command("info", description="Show all stored data"))
def info_handler(response: Response):
# Get all data from global storage
all_data = response.get_data()
if all_data:
print("Stored data:")
for key, value in all_data.items():
print(f" {key}: {value}")
else:
print("No data stored")
+19
View File
@@ -0,0 +1,19 @@
from argenta import Command, Response, Router
router = Router(title="Clear Data Example")
@router.command(Command("clear", description="Clear all stored data"))
def clear_handler(response: Response):
# Clear all data storage
response.clear_data()
print("All data cleared")
@router.command(Command("check", description="Check if data exists"))
def check_handler(response: Response):
data = response.get_data()
if data:
print(f"Storage contains {len(data)} item(s)")
else:
print("Storage is empty")
+29
View File
@@ -0,0 +1,29 @@
from argenta import Command, Response, Router
router = Router(title="Delete Data Example")
@router.command(Command("store", description="Store data"))
def store_handler(response: Response):
response.update_data(
{
"temp_key": "temporary value",
"important_key": "important value",
"another_key": "another value",
}
)
print("Data stored")
@router.command(Command("remove", description="Remove specific key"))
def remove_handler(response: Response):
# Delete specific key from storage
try:
response.delete_from_data("temp_key")
print("Key 'temp_key' deleted")
# Check what remains
remaining = response.get_data()
print(f"Remaining keys: {list(remaining.keys())}")
except KeyError:
print("Key not found")
+38
View File
@@ -0,0 +1,38 @@
from argenta import Command, Response, Router
from argenta.command import Flag, Flags
from argenta.command.flag import ValidationStatus
from argenta.response import ResponseStatus
router = Router(title="Flags Example")
@router.command(
Command(
"process",
description="Process with flags",
flags=Flags([
Flag("format", possible_values=["json", "xml"]),
Flag("verbose")
]),
)
)
def process_handler(response: Response):
print(f"Status: {response.status}")
format_flag = response.input_flags.get_flag_by_name("format")
verbose_flag = response.input_flags.get_flag_by_name("verbose")
if format_flag:
format_value = format_flag.input_value
print(f"Format: {format_value}")
if verbose_flag:
print("Verbose mode enabled")
if response.status == ResponseStatus.ALL_FLAGS_VALID:
print("All flags are valid, proceeding...")
elif response.status == ResponseStatus.INVALID_VALUE_FLAGS:
print("Warning: Some flags have invalid values")
for flag in response.input_flags:
if flag.status == ValidationStatus.INVALID:
print(f" Invalid flag: {flag.string_entity} = {flag.input_value}")
+7
View File
@@ -0,0 +1,7 @@
from argenta import Command, Response, Router
user_router = Router(title="User Management")
@user_router.command(Command("add-user", description="Adds a new user"))
def add_user_handler(response: Response):
print("User added successfully!")
@@ -0,0 +1,32 @@
import sys
from unittest.mock import patch
import pytest
from pytest import CaptureFixture
from argenta import App, Orchestrator, Router, Command, Response
@pytest.fixture(autouse=True)
def patched_argv():
with patch.object(sys, 'argv', ['program.py']):
yield
def test_input_incorrect_command(capsys: CaptureFixture[str]):
router = Router()
orchestrator = Orchestrator()
@router.command(Command('test'))
def test(response: Response) -> None:
print('test command')
app = App(override_system_messages=True, print_func=print)
app.include_router(router)
app.set_unknown_command_handler(
lambda command: print(f'Unknown command: {command.trigger}')
)
with patch("builtins.input", side_effect=["help", "q"]):
orchestrator.start_polling(app)
output = capsys.readouterr().out
assert "\nUnknown command: help\n" in output
@@ -0,0 +1,21 @@
import io
from contextlib import redirect_stdout
from argenta import App, Router, Command, Response
from argenta.command import InputCommand
def test_simple_app() -> None:
app = App(override_system_messages=True, repeat_command_groups_printing=False)
router = Router(title="App")
@router.command(Command("HELP", description="Show help"))
def help_cmd(response: Response):
print("Available commands: HELP")
app.include_router(router)
with redirect_stdout(io.StringIO()) as stdout:
router.finds_appropriate_handler(InputCommand.parse("HELP"))
assert "Available commands:" in stdout.getvalue()
@@ -0,0 +1,42 @@
import io
from contextlib import redirect_stdout
from argenta.command import InputCommand
from dishka import Provider, make_container, Scope
from argenta import Router, Response
from argenta.di.integration import setup_dishka, FromDishka
class Service:
def hello(self) -> str:
return "world"
def get_service() -> Service:
return Service()
router = Router(title="DI")
@router.command("HELLO")
def hello(response: Response, service: FromDishka[Service]) -> None:
print(f"hello {service.hello()}")
class _FakeApp:
# Minimal stub for setup_dishka; app object is not used in unit tests
registered_routers = [router]
def test_hello_uses_service():
provider = Provider(scope=Scope.APP)
provider.provide(get_service)
container = make_container(provider)
setup_dishka(app=_FakeApp(), container=container, auto_inject=True)
# Call handler
with redirect_stdout(io.StringIO()) as stdout:
router.finds_appropriate_handler(InputCommand.parse('HELLO'))
assert "hello world" in stdout.getvalue()
@@ -0,0 +1,19 @@
import io
from contextlib import redirect_stdout
from argenta import Router, Command, Response
from argenta.command import InputCommand
router = Router(title="Demo")
@router.command(Command("PING", description="Ping command"))
def ping(response: Response):
print("PONG")
def test_ping_prints_pong():
# Call handler
with redirect_stdout(io.StringIO()) as stdout:
router.finds_appropriate_handler(InputCommand.parse("PING"))
assert "PONG" in stdout.getvalue()
+48
View File
@@ -0,0 +1,48 @@
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = "Argenta"
copyright = "2025, kolo"
author = "kolo"
root_doc = "index"
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
locale_dirs = ['locales/']
gettext_compact = False
templates_path = ["_templates"]
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme = "shibuya"
html_static_path = ["_static"]
html_context = {
"languages": [
("English", "/en/latest/%s/", "en"),
("Русский", "/ru/latest/%s/", "ru"),
]
}
html_theme_options = {
"accent_color": "cyan",
"nav_links": [
{
"title": "Sponsor me",
"url": "https://github.com/sponsors/koloideal"
},
],
"github_url": "https://github.com/koloideal/Argenta",
"linkedin_url": "https://www.linkedin.com/in/dmitry-shevelev-31b9a6324"
}
+73
View File
@@ -0,0 +1,73 @@
.. Argenta documentation master file, created by
sphinx-quickstart on Sat Oct 11 19:54:43 2025.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Argenta
=======
Что это и зачем?
----------------
**Библиотека для построения модульных CLI-приложений с простым и приятным API.**
Если у вас есть функциональность, которую вы хотите предоставить в виде CLI-приложения, Argenta поможет вам в этом.
Основная цель библиотеки — дать разработчикам возможность сосредоточиться на реализации своих идей, предоставляя для этого удобные абстракции.
.. image:: https://i.ibb.co/fzWcfgFq/2025-12-04-173045.png
:alt: App example
Argenta предназначена для создания приложений, работающих в собственном контексте (scope). Это означает, что приложение запускается один раз и создаёт интерактивную сессию, похожую на Python REPL или MySQL консоль. При запуске пользователь входит в эту сессию, где ему доступна вся реализованная вами функциональность.
Один из ключевых принципов библиотеки — цикличность. После выполнения команды пользователь остаётся в интерактивной сессии, в отличие от таких библиотек, как ``argparse``, ``click`` и ``typer``, где приложение завершается после каждой команды. Выход из сессии контролируется пользователем.
**Ключевые особенности:**
* **Интерактивные сессии**: В отличие от традиционных CLI-инструментов, ``Argenta`` создаёт циклические сессии, позволяя пользователю выполнять команды последовательно, не перезапуская приложение.
* **Декларативный синтаксис**: Команды и их обработчики объявляются с помощью простых декораторов, что делает код интуитивно понятным и позволяет сосредоточиться на том, "что" вы хотите сделать, а не "как".
* **Нативный DI**: Благодаря интеграции с [dishka](https://dishka.readthedocs.io/en/stable/), вы можете легко внедрять зависимости прямо в обработчики команд, что упрощает их тестирование, позволяет избежать мутабельных глобалов и многое другое.
* **Автоматическая валидация и парсинг**: Библиотека берёт на себя обработку флагов и аргументов командной строки, включая их парсинг, валидацию и преобразование типов.
* **Гибкая настройка**: Вы можете легко кастомизировать системные сообщения, форматирование вывода, создавать кастомные обработчики нестандартного поведения и т.д.
-----
Архитектура и жизненный цикл
-----------------------------
Следующая диаграмма иллюстрирует, как компоненты Argenta взаимодействуют друг с другом, обрабатывая ввод пользователя.
.. image:: https://i.ibb.co/hF3FdFr1/argenta-intro-drawio-2.png
:alt: Request Lifecycle Diagram
:align: center
.. toctree::
:hidden:
:caption: Контент:
root/quickstart
root/error_handling
root/flags
root/overriding_formatting
root/api/index
.. toctree::
:hidden:
:caption: Продвинутое использование:
root/redirect_stdout
root/dependency_injection
root/testing
.. toctree::
:hidden:
:caption: Для разработчиков:
root/contributing
root/code_of_conduct
.. toctree::
:hidden:
:caption: Ссылки проекта:
GitHub <https://github.com/koloideal/argenta>
PyPI <https://pypi.org/project/argenta>
+30
View File
@@ -0,0 +1,30 @@
set windows-shell := ["powershell.exe", "-NoLogo", "-Command"]
set shell := ["bash", "-c"]
# Variables
sphinxopts := ""
sphinxbuild := "sphinx-build"
sourcedir := "."
builddir := "_build"
# Default recipe (help)
default:
@{{sphinxbuild}} -M help "{{sourcedir}}" "{{builddir}}" {{sphinxopts}}
# Build all language versions
build:
{{sphinxbuild}} -b html -D language=ru {{sourcedir}} {{builddir}}/html/ru
{{sphinxbuild}} -b html -D language =en {{sourcedir}} {{builddir}}/html/en
# Live preview for Russian version
live-ru:
sphinx-autobuild -b html . _build/html/ru -D language=ru
# Live preview for English version
live-en:
sphinx-autobuild -b html . _build/html/en -D language=en
# Update translation files
update-langs:
{{sphinxbuild}} -b gettext . _build/gettext
sphinx-intl update -p _build/gettext -l en
+177
View File
@@ -0,0 +1,177 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:41+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../index.rst:43
msgid "Контент:"
msgstr "Content:"
#: ../../index.rst:53
msgid "Продвинутое использование:"
msgstr "Advanced usage:"
#: ../../index.rst:61
msgid "Для разработчиков:"
msgstr "For developers:"
#: ../../index.rst:68
msgid "GitHub"
msgstr ""
#: ../../index.rst:68
msgid "PyPI"
msgstr ""
#: ../../index.rst:68
msgid "Ссылки проекта:"
msgstr "Project links:"
#: ../../index.rst:7
msgid "Argenta"
msgstr ""
#: ../../index.rst:10
msgid "Что это и зачем?"
msgstr "What is it and why?"
#: ../../index.rst:12
msgid ""
"**Библиотека для построения модульных CLI-приложений с простым и приятным"
" API.**"
msgstr ""
"**A library for building modular CLI applications with a simple and "
"pleasant API.**"
#: ../../index.rst:14
msgid ""
"Если у вас есть функциональность, которую вы хотите предоставить в виде "
"CLI-приложения, Argenta поможет вам в этом. Основная цель библиотеки — "
"дать разработчикам возможность сосредоточиться на реализации своих идей, "
"предоставляя для этого удобные абстракции."
msgstr ""
"If you have functionality that you want to provide as a CLI application, "
"Argenta will help you with that. The main goal of the library is to "
"enable developers to focus on implementing their ideas by providing "
"convenient abstractions."
#: ../../index.rst:17
msgid "App example"
msgstr ""
#: ../../index.rst:20
msgid ""
"Argenta предназначена для создания приложений, работающих в собственном "
"контексте (scope). Это означает, что приложение запускается один раз и "
"создаёт интерактивную сессию, похожую на Python REPL или MySQL консоль. "
"При запуске пользователь входит в эту сессию, где ему доступна вся "
"реализованная вами функциональность."
msgstr ""
"Argenta is designed for creating applications that work in their own "
"context (scope). This means that the application starts once and creates "
"an interactive session, similar to Python REPL or MySQL console. When "
"launched, the user enters this session where all the functionality you've"
" implemented is available."
#: ../../index.rst:22
msgid ""
"Один из ключевых принципов библиотеки — цикличность. После выполнения "
"команды пользователь остаётся в интерактивной сессии, в отличие от таких "
"библиотек, как ``argparse``, ``click`` и ``typer``, где приложение "
"завершается после каждой команды. Выход из сессии контролируется "
"пользователем."
msgstr ""
"One of the key principles of the library is cyclicity. After executing a "
"command, the user remains in the interactive session, "
"unlike libraries such as ``argparse``, ``click``, "
"and ``typer``, where the application terminates after each command. "
"Exiting the session is controlled by the user."
#: ../../index.rst:24
msgid "**Ключевые особенности:**"
msgstr "**Key features:**"
#: ../../index.rst:26
msgid ""
"**Интерактивные сессии**: В отличие от традиционных CLI-инструментов, "
"``Argenta`` создаёт циклические сессии, позволяя пользователю выполнять "
"команды последовательно, не перезапуская приложение."
msgstr ""
"**Interactive sessions**: Unlike traditional CLI tools, ``Argenta`` "
"creates cyclical sessions, allowing users to execute commands "
"sequentially without restarting the application."
#: ../../index.rst:27
msgid ""
"**Декларативный синтаксис**: Команды и их обработчики объявляются с "
"помощью простых декораторов, что делает код интуитивно понятным и "
"позволяет сосредоточиться на том, \"что\" вы хотите сделать, а не "
"\"как\"."
msgstr ""
"**Declarative syntax**: Commands and their handlers are declared using "
"simple decorators, making the code intuitive and allowing you to focus on"
" \"what\" you want to do, not \"how\"."
#: ../../index.rst:28
msgid ""
"**Нативный DI**: Благодаря интеграции с "
"[dishka](https://dishka.readthedocs.io/en/stable/), вы можете легко "
"внедрять зависимости прямо в обработчики команд, что упрощает их "
"тестирование, позволяет избежать мутабельных глобалов и многое другое."
msgstr ""
"**Native DI**: Thanks to integration with `dishka "
"<https://dishka.readthedocs.io/en/stable/>`_, you can easily inject "
"dependencies directly into command handlers, simplifying their testing, "
"avoiding mutable globals, and much more."
#: ../../index.rst:29
msgid ""
"**Автоматическая валидация и парсинг**: Библиотека берёт на себя "
"обработку флагов и аргументов командной строки, включая их парсинг, "
"валидацию и преобразование типов."
msgstr ""
"**Automatic validation and parsing**: The library handles command-line "
"flags and arguments, including their parsing, validation, and type "
"conversion."
#: ../../index.rst:30
msgid ""
"**Гибкая настройка**: Вы можете легко кастомизировать системные "
"сообщения, форматирование вывода, создавать кастомные обработчики "
"нестандартного поведения и т.д."
msgstr ""
"**Flexible configuration**: You can easily customize system messages, "
"output formatting, create custom handlers for non-standard behavior, and "
"more."
#: ../../index.rst:35
msgid "Архитектура и жизненный цикл"
msgstr "Architecture and lifecycle"
#: ../../index.rst:37
msgid ""
"Следующая диаграмма иллюстрирует, как компоненты Argenta взаимодействуют "
"друг с другом, обрабатывая ввод пользователя."
msgstr ""
"The following diagram illustrates how Argenta components interact with "
"each other while processing user input."
#: ../../index.rst:39
msgid "Request Lifecycle Diagram"
msgstr ""
@@ -0,0 +1,120 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/app/autocompleter.rst:4
msgid "AutoCompleter"
msgstr ""
#: ../../root/api/app/autocompleter.rst:6
msgid ""
"``AutoCompleter`` — это компонент, отвечающий за интерактивное "
"автодополнение команд. Он улучшает пользовательский опыт, предлагая "
"подсказки и завершая ввод на основе истории команд, что ускоряет работу и"
" снижает вероятность опечаток."
msgstr ""
"``AutoCompleter`` is a component responsible for interactive command autocompletion. "
"It improves user experience by offering suggestions and completing input based on "
"command history, which speeds up work and reduces the likelihood of typos."
#: ../../root/api/app/autocompleter.rst:11
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/app/autocompleter.rst:18
msgid "Создаёт и настраивает экземпляр ``AutoCompleter``."
msgstr "Creates and configures an ``AutoCompleter`` instance."
#: ../../root/api/app/autocompleter.rst:20
msgid ""
"``history_filename``: Имя файла для сохранения истории команд. Если "
"указано, история будет сохраняться между сессиями. При значении ``None`` "
"история хранится только в контексте сессии."
msgstr ""
"``history_filename``: Filename for saving command history. If specified, history "
"will be saved between sessions. When set to ``None``, history is stored only within "
"the session context."
#: ../../root/api/app/autocompleter.rst:21
msgid ""
"``autocomplete_button``: Клавиша, активирующая автодополнение. По "
"умолчанию — **Tab**."
msgstr ""
"``autocomplete_button``: Key that activates autocompletion. Defaults to **Tab**."
#: ../../root/api/app/autocompleter.rst:26
msgid "Назначение и возможности"
msgstr "Purpose and Features"
#: ../../root/api/app/autocompleter.rst:28
msgid "Основные возможности ``AutoCompleter``:"
msgstr "Main features of ``AutoCompleter``:"
#: ../../root/api/app/autocompleter.rst:30
msgid ""
"**Автодополнение по истории**: При нажатии клавиши автодополнения (по "
"умолчанию **Tab**) система ищет в истории команды, начинающиеся с уже "
"введённого текста."
msgstr ""
"**History-based autocompletion**: When the autocompletion key is pressed (by default **Tab**), "
"the system searches history for commands starting with the already entered text."
#: ../../root/api/app/autocompleter.rst:32
msgid ""
"**Общий префикс**: Если найдено несколько команд с общим префиксом, будет"
" подставлена только общая часть. Например, для команд ``show_users`` и "
"``show_profile`` при вводе ``sho`` и нажатии **Tab** ввод дополнится до "
"``show_``."
msgstr ""
"**Common prefix**: If multiple commands with a common prefix are found, only the common "
"part will be inserted. For example, for commands ``show_users`` and ``show_profile``, "
"when entering ``sho`` and pressing **Tab**, the input will be completed to ``show_``."
#: ../../root/api/app/autocompleter.rst:34
msgid ""
"**Постоянная история**: Если указан ``history_filename``, история команд "
"сохраняется в файл при выходе и загружается при следующем запуске. Это "
"делает автодополнение со временем «умнее»."
msgstr ""
"**Persistent history**: If ``history_filename`` is specified, command history is saved "
"to a file on exit and loaded on the next startup. This makes autocompletion \"smarter\" over time."
#: ../../root/api/app/autocompleter.rst:36
msgid ""
"**Очистка истории**: При сохранении ``AutoCompleter`` удаляет дубликаты и"
" несуществующие команды, поддерживая историю в актуальном состоянии."
msgstr ""
"**History cleanup**: When saving, ``AutoCompleter`` removes duplicates and non-existent "
"commands, keeping the history up to date."
#: ../../root/api/app/autocompleter.rst:38
msgid ""
"**Настройка клавиши**: Клавишу автодополнения можно изменить с помощью "
"параметра ``autocomplete_button``."
msgstr ""
"**Key customization**: The autocompletion key can be changed using the ``autocomplete_button`` parameter."
#: ../../root/api/app/autocompleter.rst:43
msgid "Пример использования"
msgstr "Usage Example"
#: ../../root/api/app/autocompleter.rst:45
msgid "``AutoCompleter`` передаётся как аргумент при инициализации `App`."
msgstr "``AutoCompleter`` is passed as an argument when initializing `App`."
@@ -0,0 +1,150 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/app/dividing_lines.rst:4
msgid "Dividing Lines"
msgstr "Dividing Lines"
#: ../../root/api/app/dividing_lines.rst:6
msgid ""
"Разделительные линии в ``Argenta`` используются для визуального "
"структурирования вывода и отделения блоков информации друг от друга. "
"Библиотека предлагает два типа линий: статическую и динамическую."
msgstr ""
"Dividing lines in ``Argenta`` are used for visual structuring of output and separating "
"information blocks from each other. The library offers two types of lines: static and dynamic."
#: ../../root/api/app/dividing_lines.rst:11
msgid "``StaticDividingLine``"
msgstr "``StaticDividingLine``"
#: ../../root/api/app/dividing_lines.rst:13
msgid ""
"``StaticDividingLine`` создаёт разделительную линию **фиксированной** "
"длины. Этот тип линии полезен для создания предсказуемого и "
"унифицированного интерфейса."
msgstr ""
"``StaticDividingLine`` creates a dividing line of **fixed** length. This type of line "
"is useful for creating a predictable and unified interface."
#: ../../root/api/app/dividing_lines.rst:21
msgid "Создаёт экземпляр статической разделительной линии."
msgstr "Creates a static dividing line instance."
#: ../../root/api/app/dividing_lines.rst:23
msgid ""
"``unit_part``: Символ для построения линии (учитывается только первый "
"символ). По умолчанию: ``-``."
msgstr ""
"``unit_part``: Character for building the line (only the first character is considered). "
"Defaults to: ``-``."
#: ../../root/api/app/dividing_lines.rst:24
msgid "``length``: Фиксированная длина линии. По умолчанию: ``25``."
msgstr "``length``: Fixed line length. Defaults to: ``25``."
#: ../../root/api/app/dividing_lines.rst:29
msgid "``DynamicDividingLine``"
msgstr "``DynamicDividingLine``"
#: ../../root/api/app/dividing_lines.rst:31
msgid ""
"``DynamicDividingLine`` создаёт линию, длина которой **динамически** "
"подстраивается под самую длинную строку в выводе команды. Это требует "
"перехвата ``stdout``, в результате чего разделители идеально обрамляют "
"выводимый контент."
msgstr ""
"``DynamicDividingLine`` creates a line whose length **dynamically** adjusts to the longest "
"line in the command output. This requires capturing ``stdout``, resulting in dividers that "
"perfectly frame the output content."
#: ../../root/api/app/dividing_lines.rst:38
msgid "Создаёт экземпляр динамической разделительной линии."
msgstr "Creates a dynamic dividing line instance."
#: ../../root/api/app/dividing_lines.rst:40
msgid "``unit_part``: Символ для построения линии. По умолчанию: ``-``."
msgstr "``unit_part``: Character for building the line. Defaults to: ``-``."
#: ../../root/api/app/dividing_lines.rst:42
msgid "Длина вычисляется автоматически и не задаётся при инициализации."
msgstr "Length is calculated automatically and is not set during initialization."
#: ../../root/api/app/dividing_lines.rst:45
msgid ""
"Обязательно почитайте про нюансы использования динамических линий и "
"перехвата ``stdout`` в :ref:`этом разделе<root_redirect_stdout>`."
msgstr ""
"Be sure to read about the nuances of using dynamic lines and capturing ``stdout`` "
"in :ref:`this section<root_redirect_stdout>`."
#: ../../root/api/app/dividing_lines.rst:50
msgid "Назначение и использование"
msgstr "Purpose and Usage"
#: ../../root/api/app/dividing_lines.rst:52
msgid "Выбор между статической и динамической линией зависит от ваших задач."
msgstr "The choice between static and dynamic lines depends on your needs."
#: ../../root/api/app/dividing_lines.rst:54
msgid "**StaticDividingLine** идеально подходит, если:"
msgstr "**StaticDividingLine** is ideal if:"
#: ../../root/api/app/dividing_lines.rst:56
msgid "Вам нужен строгий и консистентный дизайн."
msgstr "You need a strict and consistent design."
#: ../../root/api/app/dividing_lines.rst:57
msgid ""
"Вы используете роутеры с отключённым перехватом ``stdout`` "
"(``disable_redirect_stdout=True``), где динамическое вычисление длины "
"невозможно."
msgstr ""
"You are using routers with disabled ``stdout`` capture (``disable_redirect_stdout=True``), "
"where dynamic length calculation is not possible."
#: ../../root/api/app/dividing_lines.rst:59
msgid ""
"**DynamicDividingLine** (поведение по умолчанию) — предпочтительный "
"выбор, если:"
msgstr "**DynamicDividingLine** (default behavior) is the preferred choice if:"
#: ../../root/api/app/dividing_lines.rst:61
msgid "Вы хотите, чтобы интерфейс был адаптивным."
msgstr "You want the interface to be adaptive."
#: ../../root/api/app/dividing_lines.rst:62
msgid "Вывод ваших команд имеет разную длину."
msgstr "Your command output has varying lengths."
#: ../../root/api/app/dividing_lines.rst:63
msgid ""
"В ваших обработчиках нет интерактивных операций ввода (например, "
"``input()``)."
msgstr "Your handlers do not have interactive input operations (e.g., ``input()``)."
#: ../../root/api/app/dividing_lines.rst:65
msgid ""
"Тип разделителя для всего приложения задаётся при инициализации ``App`` "
"через параметр ``dividing_line``."
msgstr ""
"The divider type for the entire application is set during ``App`` initialization "
"via the ``dividing_line`` parameter."
@@ -0,0 +1,280 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/app/index.rst:4
msgid "App"
msgstr "App"
#: ../../root/api/app/index.rst:6
msgid ""
"Объект ``App`` — это ядро вашего консольного приложения. Он отвечает за "
"конфигурацию, управление жизненным циклом, обработку команд и "
"взаимодействие с пользователем, координируя работу всех компонентов: "
"роутеров, обработчиков и системных сообщений."
msgstr ""
"The ``App`` object is the core of your console application. It handles "
"configuration, lifecycle management, command processing, and user "
"interaction, coordinating the work of all components: routers, handlers, "
"and system messages."
#: ../../root/api/app/index.rst:11
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/app/index.rst:38
msgid "Создаёт и настраивает экземпляр приложения."
msgstr "Creates and configures an application instance."
#: ../../root/api/app/index.rst:40
msgid "``prompt``: Приглашение к вводу, отображаемое перед каждой командой."
msgstr "``prompt``: Input prompt displayed before each command."
#: ../../root/api/app/index.rst:41
msgid "``initial_message``: Сообщение, выводимое при запуске приложения."
msgstr "``initial_message``: Message displayed when the application starts."
#: ../../root/api/app/index.rst:42
msgid "``farewell_message``: Сообщение, выводимое при выходе из приложения."
msgstr "``farewell_message``: Message displayed when exiting the application."
#: ../../root/api/app/index.rst:43
msgid ""
"``exit_command``: Команда, которая маркируется как триггер для выхода из "
"приложения."
msgstr ""
"``exit_command``: Command that is marked as a trigger for exiting the "
"application."
#: ../../root/api/app/index.rst:44
msgid ""
"``system_router_title``: Заголовок для системного роутера (содержит "
"команду выхода)."
msgstr ""
"``system_router_title``: Title for the system router (contains the exit "
"command)."
#: ../../root/api/app/index.rst:45
msgid ""
"``ignore_command_register``: Если ``True``, регистр вводимых команд "
"игнорируется при поиске обработчика."
msgstr ""
"``ignore_command_register``: If ``True``, command case is ignored when "
"searching for a handler."
#: ../../root/api/app/index.rst:46
msgid ""
"``dividing_line``: Тип разделительной линии (``StaticDividingLine`` или "
"``DynamicDividingLine``)."
msgstr ""
"``dividing_line``: Type of dividing line (``StaticDividingLine`` or "
"``DynamicDividingLine``)."
#: ../../root/api/app/index.rst:47
msgid ""
"``repeat_command_groups_printing``: Если ``True``, список доступных "
"команд выводится перед каждым вводом."
msgstr ""
"``repeat_command_groups_printing``: If ``True``, the list of available "
"commands is displayed before each input."
#: ../../root/api/app/index.rst:48
msgid ""
"``override_system_messages``: Если ``True``, стандартное форматирование "
"(цвета, ASCII-арт) отключается."
msgstr ""
"``override_system_messages``: If ``True``, standard formatting (colors, "
"ASCII art) is disabled."
#: ../../root/api/app/index.rst:49
msgid ""
"``autocompleter``: Экземпляр класса :ref:`AutoCompleter "
"<root_api_app_autocompleter>`, отвечающий за автодополнение команд."
msgstr ""
"``autocompleter``: Instance of the :ref:`AutoCompleter "
"<root_api_app_autocompleter>` class responsible for command "
"autocompletion."
#: ../../root/api/app/index.rst:50
msgid ""
"``print_func``: Функция для вывода всех системных сообщений (по умолчанию"
" ``rich.Console().print``)."
msgstr ""
"``print_func``: Function for outputting all system messages (defaults to "
"``rich.Console().print``)."
#: ../../root/api/app/index.rst:55
msgid "Основные методы"
msgstr "Main Methods"
#: ../../root/api/app/index.rst:59
msgid ""
"Регистрирует роутер в приложении. Все команды из этого роутера становятся"
" доступными для вызова."
msgstr ""
"Registers a router in the application. All commands from this router "
"become available for invocation."
#: ../../root/api/app/index.rst
msgid "Parameters"
msgstr "Parameters"
#: ../../root/api/app/index.rst:61
msgid "Экземпляр ``Router`` для регистрации."
msgstr "``Router`` instance to register."
#: ../../root/api/app/index.rst:65
msgid "Регистрирует несколько роутеров одновременно."
msgstr "Registers multiple routers simultaneously."
#: ../../root/api/app/index.rst:67
msgid "Последовательность экземпляров ``Router`` для регистрации."
msgstr "Sequence of ``Router`` instances to register."
#: ../../root/api/app/index.rst:71
msgid ""
"Добавляет текстовое сообщение, которое выводится при запуске приложения "
"после ``initial_message``."
msgstr ""
"Adds a text message that is displayed when the application starts after "
"``initial_message``."
#: ../../root/api/app/index.rst:73
msgid "Строка с сообщением."
msgstr "String with the message."
#: ../../root/api/app/index.rst:76
msgid ""
"Для вывода стандартных сообщений можно использовать готовые шаблоны из "
":ref:`PredefinedMessages <root_api_predefined_messages>`."
msgstr ""
"For outputting standard messages, you can use ready-made templates from "
":ref:`PredefinedMessages <root_api_predefined_messages>`."
#: ../../root/api/app/index.rst:81
msgid "Методы установки обработчиков"
msgstr "Handler Setup Methods"
#: ../../root/api/app/index.rst:83
msgid ""
"``App`` позволяет настраивать реакцию на различные события, такие как "
"ошибки ввода или неизвестные команды."
msgstr ""
"``App`` allows you to configure responses to various events, such as "
"input errors or unknown commands."
#: ../../root/api/app/index.rst:86
msgid ""
"Подробнее об исключениях и их обработке в соответствующем :ref:`разделе "
"документации <root_error_handling>`."
msgstr ""
"For more details on exceptions and their handling, see the corresponding "
":ref:`documentation section <root_error_handling>`."
#: ../../root/api/app/index.rst:92
msgid "Устанавливает шаблон для форматирования описания команды."
msgstr "Sets the template for formatting command descriptions."
#: ../../root/api/app/index.rst:94
msgid "Обработчик принимает триггер команды (``str``) и её описание (``str``)."
msgstr ""
"The handler accepts the command trigger (``str``) and its description "
"(``str``)."
#: ../../root/api/app/index.rst:100
msgid "Устанавливает обработчик при некорректном введённом синтаксисе флагов."
msgstr "Sets the handler for incorrect flag syntax input."
#: ../../root/api/app/index.rst:102 ../../root/api/app/index.rst:110
msgid "Обработчик принимает строку, введённую пользователем."
msgstr "The handler accepts the string entered by the user."
#: ../../root/api/app/index.rst:108
msgid "Устанавливает обработчик при повторяющихся флагах в введённой команде."
msgstr "Sets the handler for duplicate flags in the entered command."
#: ../../root/api/app/index.rst:116
msgid "Устанавливает обработчик при вводе неизвестной команды."
msgstr "Sets the handler for entering an unknown command."
#: ../../root/api/app/index.rst:118
msgid "Обработчик принимает объект ``InputCommand`` - объект введённой команды."
msgstr ""
"The handler accepts an ``InputCommand`` object - the entered command "
"object."
#: ../../root/api/app/index.rst:124
msgid "Устанавливает обработчик при вводе пустой строки."
msgstr "Sets the handler for entering an empty string."
#: ../../root/api/app/index.rst:126
msgid "Обработчик не принимает аргументов."
msgstr "The handler accepts no arguments."
#: ../../root/api/app/index.rst:132
msgid "Переопределяет стандартное поведение при вызове команды выхода."
msgstr "Overrides the default behavior when the exit command is invoked."
#: ../../root/api/app/index.rst:134
msgid "Обработчик принимает объект ``Response``."
msgstr "The handler accepts a ``Response`` object."
#: ../../root/api/app/index.rst:147
msgid "PredefinedMessages"
msgstr "PredefinedMessages"
#: ../../root/api/app/index.rst:149
msgid ""
"``PredefinedMessages`` — это контейнер, содержащий набор готовых к "
"использованию сообщений. Они отформатированы с использованием синтаксиса "
"``rich`` и предназначены для вывода стандартной информации, такой как "
"подсказки по использованию."
msgstr ""
"``PredefinedMessages`` is a container containing a set of ready-to-use "
"messages. They are formatted using ``rich`` syntax and are intended for "
"displaying standard information, such as usage hints."
#: ../../root/api/app/index.rst:151
msgid "Рекомендуется использовать их при старте приложения."
msgstr "It is recommended to use them when starting the application."
#: ../../root/api/app/index.rst:178
msgid "Строка: ``[b dim]Usage[/b dim]: [i]<command> <[green]flags[/green]>[/i]``"
msgstr "String: ``[b dim]Usage[/b dim]: [i]<command> <[green]flags[/green]>[/i]``"
#: ../../root/api/app/index.rst:180
msgid "Отображается как: ``Usage: <command> <flags>``"
msgstr "Displayed as: ``Usage: <command> <flags>``"
#: ../../root/api/app/index.rst:184
msgid "Строка: ``[b dim]Help[/b dim]: [i]<command>[/i] [b red]--help[/b red]``"
msgstr "String: ``[b dim]Help[/b dim]: [i]<command>[/i] [b red]--help[/b red]``"
#: ../../root/api/app/index.rst:186
msgid "Отображается как: ``Help: <command> --help``"
msgstr "Displayed as: ``Help: <command> --help``"
#: ../../root/api/app/index.rst:190
msgid "Строка: ``[b dim]Autocomplete[/b dim]: [i]<part>[/i] [bold]<tab>``"
msgstr "String: ``[b dim]Autocomplete[/b dim]: [i]<part>[/i] [bold]<tab>``"
#: ../../root/api/app/index.rst:192
msgid "Отображается как: ``Autocomplete: <part> <tab>``"
msgstr "Displayed as: ``Autocomplete: <part> <tab>``"
@@ -0,0 +1,105 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/bridge.rst:4
msgid "DataBridge"
msgstr "DataBridge"
#: ../../root/api/bridge.rst:6
msgid ""
"``DataBridge`` — это сущность, предоставляющая временное хранилище "
"данных, которое существует в рамках одной сессии приложения (от запуска "
"до выхода). Она предназначена для обмена данными между обработчиками."
msgstr ""
"``DataBridge`` is an entity that provides temporary data storage that "
"exists within a single application session (from startup to exit). It is "
"designed for data exchange between handlers."
#: ../../root/api/bridge.rst:8
msgid "Основной способ получения доступа к ``DataBridge`` — через DI."
msgstr "The main way to access ``DataBridge`` is through DI."
#: ../../root/api/bridge.rst:21
msgid "**Практический пример: Аутентификация**"
msgstr "**Practical Example: Authentication**"
#: ../../root/api/bridge.rst:23
msgid ""
"Рассмотрим пример, где команда `login` сохраняет токен аутентификации, а "
"команда `get-profile` использует его."
msgstr ""
"Let's consider an example where the `login` command saves an "
"authentication token, and the `get-profile` command uses it."
#: ../../root/api/bridge.rst:29
msgid "**Как это работает:**"
msgstr "**How it works:**"
#: ../../root/api/bridge.rst:31
msgid ""
"При вызове обработчика ``dishka`` автоматически внедряет экземпляр "
"``DataBridge``."
msgstr ""
"When calling a handler, ``dishka`` automatically injects a ``DataBridge``"
" instance."
#: ../../root/api/bridge.rst:32
msgid ""
"Команда ``login --username <имя>`` вызывает ``login_handler``, который "
"через внедрённый ``data_bridge`` сохраняет токен."
msgstr ""
"The ``login --username <name>`` command calls ``login_handler``, which "
"saves the token through the injected ``data_bridge``."
#: ../../root/api/bridge.rst:33
msgid ""
"Команда ``get-profile`` вызывает ``get_profile_handler``, который так же "
"получает ``data_bridge`` и извлекает из него токен."
msgstr ""
"The ``get-profile`` command calls ``get_profile_handler``, which also "
"receives ``data_bridge`` and extracts the token from it."
#: ../../root/api/bridge.rst:42
msgid ""
"Инициализирует хранилище. При использовании через DI вызывается "
"автоматически."
msgstr ""
"Initializes the storage. When used through DI, it is called automatically."
#: ../../root/api/bridge.rst:46
msgid "Обновляет хранилище данными из словаря."
msgstr "Updates the storage with data from a dictionary."
#: ../../root/api/bridge.rst:50
msgid "Возвращает все данные из хранилища."
msgstr "Returns all data from the storage."
#: ../../root/api/bridge.rst:54
msgid "Возвращает значение по ключу или ``None``, если ключ не найден."
msgstr "Returns the value by key or ``None`` if the key is not found."
#: ../../root/api/bridge.rst:58
msgid "Удаляет значение по ключу. Вызывает ``KeyError``, если ключ не найден."
msgstr "Deletes the value by key. Raises ``KeyError`` if the key is not found."
#: ../../root/api/bridge.rst:62
msgid "Полностью очищает хранилище."
msgstr "Completely clears the storage."
@@ -0,0 +1,335 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/flag.rst:4
msgid "Flag"
msgstr ""
#: ../../root/api/command/flag.rst:6
msgid ""
"``Flag`` — это сущность, описывающая флаг команды. Её основная задача — "
"определить параметры флага, включая его имя, префикс и правила валидации."
msgstr ""
"``Flag`` is an entity describing a command flag. Its main purpose is to define "
"flag parameters, including its name, prefix, and validation rules."
#: ../../root/api/command/flag.rst:10
msgid ""
"Документация по :ref:`PossibleValues <root_api_command_possible_values>` "
"— перечисление, определяющее типы допустимых значений."
msgstr ""
"Documentation for :ref:`PossibleValues <root_api_command_possible_values>` "
"— an enumeration defining types of allowed values."
#: ../../root/api/command/flag.rst:12
msgid ""
"Документация по :ref:`InputFlag <root_api_command_input_flag>` — объект "
"обработанного флага, введённого пользователем."
msgstr ""
"Documentation for :ref:`InputFlag <root_api_command_input_flag>` — an object "
"representing a processed flag entered by the user."
#: ../../root/api/command/flag.rst:14
msgid ""
":ref:`Общая информация <root_flags>` о флагах и их использовании в "
"``Argenta``"
msgstr ":ref:`General information <root_flags>` about flags and their usage in ``Argenta``"
#: ../../root/api/command/flag.rst:19
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/command/flag.rst:30
msgid "Создаёт новый флаг для регистрации в команде."
msgstr "Creates a new flag for registration in a command."
#: ../../root/api/command/flag.rst:32
msgid "``name``: Имя флага (обязательный параметр)."
msgstr "``name``: Flag name (required parameter)."
#: ../../root/api/command/flag.rst:33
msgid "``prefix``: Префикс флага (``-``, ``--``, ``---``). По умолчанию ``--``."
msgstr "``prefix``: Flag prefix (``-``, ``--``, ``---``). Defaults to ``--``."
#: ../../root/api/command/flag.rst:34
msgid ""
"``possible_values``: Правила валидации значения. Может быть списком "
"строк, регулярным выражением или значением из ``PossibleValues``. По "
"умолчанию ``PossibleValues.ALL``, то есть любое значение допустимо."
msgstr ""
"``possible_values``: Value validation rules. Can be a list of strings, a regular "
"expression, or a value from ``PossibleValues``. Defaults to ``PossibleValues.ALL``, "
"meaning any value is allowed."
#: ../../root/api/command/flag.rst:36
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/command/flag.rst:40
msgid "Имя флага в виде строки."
msgstr "Flag name as a string."
#: ../../root/api/command/flag.rst:44
msgid "Префикс флага. Один из: ``\"-\"``, ``\"--\"``, ``\"---\"``."
msgstr "Flag prefix. One of: ``\"-\"``, ``\"--\"``, ``\"---\"``."
#: ../../root/api/command/flag.rst:48
msgid "Допустимые значения для флага."
msgstr "Allowed values for the flag."
#: ../../root/api/command/flag.rst:50 ../../root/api/command/flag.rst:93
#: ../../root/api/command/flag.rst:113 ../../root/api/command/flag.rst:136
#: ../../root/api/command/flag.rst:253
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/command/flag.rst:59
msgid "Свойства"
msgstr "Properties"
#: ../../root/api/command/flag.rst:62
msgid "string_entity"
msgstr ""
#: ../../root/api/command/flag.rst:70
msgid "Возвращает строковое представление флага в формате ``prefix + name``."
msgstr "Returns the string representation of the flag in the format ``prefix + name``."
#: ../../root/api/command/flag.rst
msgid "return"
msgstr "return"
#: ../../root/api/command/flag.rst:72 ../../root/api/command/flag.rst:91
msgid "Строковое представление флага"
msgstr "String representation of the flag"
#: ../../root/api/command/flag.rst:74
msgid ""
"Это свойство объединяет префикс и имя в единую строку, которая "
"представляет флаг так, как он выглядел бы в командной строке."
msgstr ""
"This property combines the prefix and name into a single string that represents "
"the flag as it would appear on the command line."
#: ../../root/api/command/flag.rst:79
msgid "Магические методы"
msgstr "Magic Methods"
#: ../../root/api/command/flag.rst:82
msgid "__str__"
msgstr ""
#: ../../root/api/command/flag.rst:89
msgid "Возвращает строковое представление флага (аналогично ``string_entity``)."
msgstr "Returns the string representation of the flag (similar to ``string_entity``)."
#: ../../root/api/command/flag.rst:102
msgid "__repr__"
msgstr ""
#: ../../root/api/command/flag.rst:109
msgid "Возвращает отладочное представление объекта."
msgstr "Returns the debug representation of the object."
#: ../../root/api/command/flag.rst:111
msgid "Строка в формате ``Flag<prefix=..., name=...>``."
msgstr "String in the format ``Flag<prefix=..., name=...>``."
#: ../../root/api/command/flag.rst:122
msgid "__eq__"
msgstr ""
#: ../../root/api/command/flag.rst:129
msgid ""
"Сравнивает два флага на равенство по их строковому представлению "
"(``string_entity``)."
msgstr ""
"Compares two flags for equality based on their string representation (``string_entity``)."
#: ../../root/api/command/flag.rst
msgid "param other"
msgstr "param other"
#: ../../root/api/command/flag.rst:131
msgid "Объект для сравнения"
msgstr "Object to compare"
#: ../../root/api/command/flag.rst:132
msgid "**True**, если флаги равны, иначе **False**"
msgstr "**True** if flags are equal, otherwise **False**"
#: ../../root/api/command/flag.rst:134
msgid "Два флага считаются равными, если их ``string_entity`` идентичны."
msgstr "Two flags are considered equal if their ``string_entity`` are identical."
#: ../../root/api/command/flag.rst:147
msgid "PredefinedFlags"
msgstr "PredefinedFlags"
#: ../../root/api/command/flag.rst:149
msgid "``argenta.command.PredefinedFlags``"
msgstr "``argenta.command.PredefinedFlags``"
#: ../../root/api/command/flag.rst:151
msgid ""
"Класс ``PredefinedFlags`` предоставляет набор готовых флагов для "
"использования в приложениях без их ручного создания. Эти флаги покрывают "
"распространённые сценарии."
msgstr ""
"The ``PredefinedFlags`` class provides a set of ready-made flags for use in "
"applications without manual creation. These flags cover common scenarios."
#: ../../root/api/command/flag.rst:153
msgid ""
"Все предопределённые флаги являются атрибутами класса и представляют "
"собой готовые экземпляры ``Flag``."
msgstr ""
"All predefined flags are class attributes and represent ready-made ``Flag`` instances."
#: ../../root/api/command/flag.rst:158
msgid "Информационные флаги"
msgstr "Informational Flags"
#: ../../root/api/command/flag.rst:163
msgid "Флаг для отображения справки: ``--help``"
msgstr "Flag for displaying help: ``--help``"
#: ../../root/api/command/flag.rst:165
msgid "``name``: ``\"help\"``"
msgstr "``name``: ``\"help\"``"
#: ../../root/api/command/flag.rst:166 ../../root/api/command/flag.rst:182
#: ../../root/api/command/flag.rst:224 ../../root/api/command/flag.rst:240
msgid "``prefix``: ``\"--\"`` (по умолчанию)"
msgstr "``prefix``: ``\"--\"`` (default)"
#: ../../root/api/command/flag.rst:167 ../../root/api/command/flag.rst:175
#: ../../root/api/command/flag.rst:183 ../../root/api/command/flag.rst:191
#: ../../root/api/command/flag.rst:204 ../../root/api/command/flag.rst:212
msgid "``possible_values``: ``PossibleValues.NEITHER``"
msgstr "``possible_values``: ``PossibleValues.NEITHER``"
#: ../../root/api/command/flag.rst:171
msgid "Короткая версия флага справки: ``-H``"
msgstr "Short version of the help flag: ``-H``"
#: ../../root/api/command/flag.rst:173
#: ../../root/api/command/flag.rst:231
msgid "``name``: ``\"H\"``"
msgstr "``name``: ``\"H\"``"
#: ../../root/api/command/flag.rst:174
#: ../../root/api/command/flag.rst:190
#: ../../root/api/command/flag.rst:211
#: ../../root/api/command/flag.rst:232
#: ../../root/api/command/flag.rst:248
msgid "``prefix``: ``\"-\"``"
msgstr "``prefix``: ``\"-\"``"
#: ../../root/api/command/flag.rst:179
msgid "Флаг для отображения информации: ``--info``"
msgstr "Flag for displaying information: ``--info``"
#: ../../root/api/command/flag.rst:181
msgid "``name``: ``\"info\"``"
msgstr "``name``: ``\"info\"``"
#: ../../root/api/command/flag.rst:187
msgid "Короткая версия флага информации: ``-I``"
msgstr "Short version of the info flag: ``-I``"
#: ../../root/api/command/flag.rst:189
msgid "``name``: ``\"I\"``"
msgstr "``name``: ``\"I\"``"
#: ../../root/api/command/flag.rst:196
msgid "Флаги выбора"
msgstr "Selection Flags"
#: ../../root/api/command/flag.rst:200
msgid "Флаг для выбора всех элементов: ``--all``"
msgstr "Flag for selecting all items: ``--all``"
#: ../../root/api/command/flag.rst:202
msgid "``name``: ``\"all\"``"
msgstr "``name``: ``\"all\"``"
#: ../../root/api/command/flag.rst:203
msgid "``prefix``: ``\"--\"``"
msgstr "``prefix``: ``\"--\"``"
#: ../../root/api/command/flag.rst:208
msgid "Короткая версия флага выбора всех элементов: ``-A``"
msgstr "Short version of the select all flag: ``-A``"
#: ../../root/api/command/flag.rst:210
msgid "``name``: ``\"A\"``"
msgstr "``name``: ``\"A\"``"
#: ../../root/api/command/flag.rst:217
msgid "Сетевые флаги"
msgstr "Network Flags"
#: ../../root/api/command/flag.rst:221
msgid "Флаг для указания IP-адреса хоста: ``--host``"
msgstr "Flag for specifying host IP address: ``--host``"
#: ../../root/api/command/flag.rst:223
msgid "``name``: ``\"host\"``"
msgstr "``name``: ``\"host\"``"
#: ../../root/api/command/flag.rst:225 ../../root/api/command/flag.rst:233
#, python-brace-format
msgid ""
"``possible_values``: Регулярное выражение для валидации IPv4: "
"``r\"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$\"``"
msgstr ""
"``possible_values``: Regular expression for IPv4 validation: "
"``r\"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$\"``"
#: ../../root/api/command/flag.rst:229
msgid "Короткая версия флага хоста: ``-H``"
msgstr "Short version of the host flag: ``-H``"
#: ../../root/api/command/flag.rst:237
msgid "Флаг для указания порта: ``--port``"
msgstr "Flag for specifying port: ``--port``"
#: ../../root/api/command/flag.rst:239
msgid "``name``: ``\"port\"``"
msgstr "``name``: ``\"port\"``"
#: ../../root/api/command/flag.rst:241 ../../root/api/command/flag.rst:249
#, python-brace-format
msgid ""
"``possible_values``: Регулярное выражение для валидации порта: "
"``r\"^\\d{1,5}$\"``"
msgstr ""
"``possible_values``: Regular expression for port validation: "
"``r\"^\\d{1,5}$\"``"
#: ../../root/api/command/flag.rst:245
msgid "Короткая версия флага порта: ``-P``"
msgstr "Short version of the port flag: ``-P``"
#: ../../root/api/command/flag.rst:247
msgid "``name``: ``\"P\"``"
msgstr "``name``: ``\"P\"``"
@@ -0,0 +1,172 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/flags.rst:4
msgid "Flags"
msgstr "Flags"
#: ../../root/api/command/flags.rst:6
msgid ""
"``Flags`` — это коллекция флагов команды. Её основная задача — "
"группировать и управлять набором флагов, зарегистрированных для "
"конкретной команды. ``Flags`` служит контейнером, который позволяет "
"удобно добавлять, извлекать, итерировать флаги и проверять их наличие."
msgstr ""
"``Flags`` is a collection of command flags. Its main purpose is to group and manage "
"the set of flags registered for a specific command. ``Flags`` serves as a container "
"that allows convenient addition, retrieval, iteration of flags, and checking their presence."
#: ../../root/api/command/flags.rst:10
msgid ""
"Документация по отдельным флагам (:ref:`Flag <root_api_command_flag>`, "
":ref:`InputFlag <root_api_command_input_flag>`)"
msgstr ""
"Documentation for individual flags (:ref:`Flag <root_api_command_flag>`, "
":ref:`InputFlag <root_api_command_input_flag>`)"
#: ../../root/api/command/flags.rst:12
msgid ""
"Документация по :ref:`InputFlags <root_api_command_input_flags>` — "
"коллекция обработанных флагов, введённых пользователем."
msgstr ""
"Documentation for :ref:`InputFlags <root_api_command_input_flags>` — "
"a collection of processed flags entered by the user."
#: ../../root/api/command/flags.rst:14
msgid ""
":ref:`Общая информация <root_flags>` о флагах и их использовании в "
"приложении ``Argenta``"
msgstr ""
":ref:`General information <root_flags>` about flags and their usage in "
"the ``Argenta`` application"
#: ../../root/api/command/flags.rst:19
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/command/flags.rst:26
msgid "Создаёт новую коллекцию флагов."
msgstr "Creates a new flag collection."
#: ../../root/api/command/flags.rst:28
msgid ""
"``flags``: Необязательный список флагов типа ``Flag`` для инициализации "
"коллекции. Если не указан, создаётся пустая коллекция."
msgstr ""
"``flags``: Optional list of flags of type ``Flag`` for initializing the collection. "
"If not specified, an empty collection is created."
#: ../../root/api/command/flags.rst:30
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/command/flags.rst:35
msgid "Список всех зарегистрированных флагов типа ``Flag``."
msgstr "List of all registered flags of type ``Flag``."
#: ../../root/api/command/flags.rst:37 ../../root/api/command/flags.rst:63
#: ../../root/api/command/flags.rst:86 ../../root/api/command/flags.rst:109
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/command/flags.rst:46
msgid "Методы"
msgstr "Methods"
#: ../../root/api/command/flags.rst:49
msgid "add_flag"
msgstr ""
#: ../../root/api/command/flags.rst:56
msgid "Добавляет флаг в коллекцию."
msgstr "Adds a flag to the collection."
#: ../../root/api/command/flags.rst
msgid "param flag"
msgstr "param flag"
#: ../../root/api/command/flags.rst:58
msgid "Флаг типа ``Flag`` для добавления."
msgstr "Flag of type ``Flag`` to add."
#: ../../root/api/command/flags.rst
msgid "return"
msgstr "return"
#: ../../root/api/command/flags.rst:59 ../../root/api/command/flags.rst:82
msgid "None."
msgstr "None."
#: ../../root/api/command/flags.rst:61
msgid "Используется для динамического расширения набора флагов."
msgstr "Used for dynamically extending the set of flags."
#: ../../root/api/command/flags.rst:72
msgid "add_flags"
msgstr ""
#: ../../root/api/command/flags.rst:79
msgid "Добавляет в коллекцию список флагов."
msgstr "Adds a list of flags to the collection."
#: ../../root/api/command/flags.rst
msgid "param flags"
msgstr "param flags"
#: ../../root/api/command/flags.rst:81
msgid "Список флагов типа ``Flag`` для добавления."
msgstr "List of flags of type ``Flag`` to add."
#: ../../root/api/command/flags.rst:84
msgid ""
"Метод расширяет коллекцию, добавляя в неё все флаги из переданного "
"списка. Эффективен для пакетного добавления."
msgstr ""
"The method extends the collection by adding all flags from the provided list. "
"Efficient for batch addition."
#: ../../root/api/command/flags.rst:95
msgid "get_flag_by_name"
msgstr ""
#: ../../root/api/command/flags.rst:102
msgid "Возвращает флаг по имени."
msgstr "Returns a flag by name."
#: ../../root/api/command/flags.rst
msgid "param name"
msgstr "param name"
#: ../../root/api/command/flags.rst:104
msgid "Имя искомого флага."
msgstr "Name of the flag to search for."
#: ../../root/api/command/flags.rst:105
msgid "Объект ``Flag`` или ``None``, если флаг не найден."
msgstr "``Flag`` object or ``None`` if the flag is not found."
#: ../../root/api/command/flags.rst:107
msgid ""
"Метод возвращает флаг с соответствующим именем. Если флаг не найден, "
"возвращается ``None``."
msgstr ""
"The method returns a flag with the corresponding name. If the flag is not found, "
"``None`` is returned."
@@ -0,0 +1,196 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/index.rst:4
msgid "Command"
msgstr "Command"
#: ../../root/api/command/index.rst:6
msgid ""
"``Command`` — это основная единица функциональности в приложении. Каждая "
"команда связывает хэндлер с триггером, введя который он будет вызван для "
"обработки."
msgstr ""
"``Command`` is the basic unit of functionality in an application. Each "
"command links a handler to a trigger, which when entered will invoke it "
"for processing."
#: ../../root/api/command/index.rst:8
msgid ""
"``Command`` инкапсулирует всю информацию о команде: её триггер (ключевое "
"слово для вызова), описание, набор флагов и список псевдонимов."
msgstr ""
"``Command`` encapsulates all information about a command: its trigger "
"(keyword for invocation), description, set of flags, and list of aliases."
#: ../../root/api/command/index.rst:13
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/command/index.rst:23
msgid "Создаёт новую команду для регистрации в роутере."
msgstr "Creates a new command for registration in a router."
#: ../../root/api/command/index.rst:25
msgid ""
"``trigger``: Строковый триггер, который пользователь вводит для вызова "
"команды. Является основным идентификатором."
msgstr ""
"``trigger``: String trigger that the user enters to invoke the command. "
"Serves as the primary identifier."
#: ../../root/api/command/index.rst:26
msgid ""
"``description``: Необязательное описание, объясняющее назначение команды."
" Отображается в справке."
msgstr ""
"``description``: Optional description explaining the command's purpose. "
"Displayed in help."
#: ../../root/api/command/index.rst:27
msgid ""
"``flags``: Набор флагов для настройки поведения. Может быть одиночным "
"объектом ``Flag`` или коллекцией ``Flags``."
msgstr ""
"``flags``: Set of flags for configuring behavior. Can be a single "
"``Flag`` object or a ``Flags`` collection."
#: ../../root/api/command/index.rst:28
msgid "``aliases``: Список строковых псевдонимов для основного триггера."
msgstr "``aliases``: List of string aliases for the main trigger."
#: ../../root/api/command/index.rst:30 ../../root/api/command/index.rst:108
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/command/index.rst:34
msgid ""
"Основной триггер команды. Используется для её идентификации при обработке"
" пользовательского ввода."
msgstr ""
"The main command trigger. Used for its identification when processing "
"user input."
#: ../../root/api/command/index.rst:38
msgid ""
"Текстовое описание команды. Если не передано, используется значение по "
"умолчанию."
msgstr ""
"Text description of the command. If not provided, the default value is "
"used."
#: ../../root/api/command/index.rst:42
msgid ""
"Объект ``Flags``, содержащий все зарегистрированные флаги. Если был "
"передан ``Flag``, то автоматически конвертируется из одиночного в "
"коллекцию при инициализации."
msgstr ""
"A ``Flags`` object containing all registered flags. If a ``Flag`` was "
"passed, it is automatically converted from a single flag to a collection "
"during initialization."
#: ../../root/api/command/index.rst:46
msgid "Список строковых псевдонимов. Пуст, если псевдонимы не заданы."
msgstr "List of string aliases. Empty if no aliases are defined."
#: ../../root/api/command/index.rst:48
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/command/index.rst:54
msgid ""
"Подробнее про флаги: :ref:`Flags <root_api_command_flags>` и :ref:`Флаги "
"команд <root_flags>`."
msgstr ""
"More about flags: :ref:`Flags <root_api_command_flags>` and :ref:`Command "
"flags <root_flags>`."
#: ../../root/api/command/index.rst:59
msgid "Регистрация команд"
msgstr "Command Registration"
#: ../../root/api/command/index.rst:61
msgid "Команды передаются в качестве аргумента в декоратор ``@router.command()``."
msgstr "Commands are passed as an argument to the ``@router.command()`` decorator."
#: ../../root/api/command/index.rst:63
msgid "**Базовый пример:**"
msgstr "**Basic example:**"
#: ../../root/api/command/index.rst:68
msgid "**Команды с флагами:**"
msgstr "**Commands with flags:**"
#: ../../root/api/command/index.rst:76
msgid "Работа с псевдонимами"
msgstr "Working with Aliases"
#: ../../root/api/command/index.rst:78
msgid ""
"Псевдонимы позволяют вызывать один и тот же обработчик разными "
"триггерами, сохраняя флаги и описание команды."
msgstr ""
"Aliases allow invoking the same handler with different triggers while "
"preserving the command's flags and description."
#: ../../root/api/command/index.rst:80
msgid "**Пример с псевдонимами:**"
msgstr "**Example with aliases:**"
#: ../../root/api/command/index.rst:85
msgid "Теперь пользователь может вызвать команду любым из способов:"
msgstr "Now the user can invoke the command in any of the following ways:"
#: ../../root/api/command/index.rst:94
msgid "Все эти варианты вызовут один и тот же хэндлер ``handle_shutdown``."
msgstr "All these variants will invoke the same handler ``handle_shutdown``."
#: ../../root/api/command/index.rst:101
msgid "InputCommand"
msgstr "InputCommand"
#: ../../root/api/command/index.rst:103
msgid ""
"``InputCommand`` представляет собой обработанную команду, введённую "
"пользователем. Этот внутренний класс создаётся автоматически при "
"обработке пользовательского ввода. Прямая работа с ним возможна при "
"создании пользовательского обработчика для неизвестных команд."
msgstr ""
"``InputCommand`` represents a processed command entered by the user. This"
" internal class is created automatically when processing user input. "
"Direct work with it is possible when creating a custom handler for "
"unknown commands."
#: ../../root/api/command/index.rst:106
msgid ""
"Подробнее о пользовательских обработчиках исключений см. :ref:`здесь "
"<root_error_handling_unknown_command>`."
msgstr ""
"For more details on custom exception handlers, see :ref:`here "
"<root_error_handling_unknown_command>`."
#: ../../root/api/command/index.rst:113
msgid "Строковый триггер, введённый пользователем."
msgstr "String trigger entered by the user."
#: ../../root/api/command/index.rst:118
msgid "Объект ``InputFlags``, содержащий все введённые и распаршенные флаги."
msgstr "An ``InputFlags`` object containing all entered and parsed flags."
@@ -0,0 +1,171 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/input_flag.rst:4
msgid "InputFlag"
msgstr "InputFlag"
#: ../../root/api/command/input_flag.rst:6
msgid ""
"Объект ``InputFlag`` представляет собой флаг, введённый пользователем. Он"
" создаётся в результате обработки пользовательского ввода и содержит "
"информацию о распознанном флаге: его имя, префикс, значение и статус "
"валидации."
msgstr ""
"The ``InputFlag`` object represents a flag entered by the user. It is "
"created as a result of processing user input and contains information "
"about the recognized flag: its name, prefix, value, and validation "
"status."
#: ../../root/api/command/input_flag.rst:10
msgid ""
"Документация по :ref:`Flag <root_api_command_flag>` — класс для "
"регистрации флага."
msgstr ""
"Documentation for :ref:`Flag <root_api_command_flag>` — class for "
"registering a flag."
#: ../../root/api/command/input_flag.rst:12
msgid ""
"Документация по :ref:`ValidationStatus "
"<root_api_command_validation_status>` — статусы валидации флагов."
msgstr ""
"Documentation for :ref:`ValidationStatus "
"<root_api_command_validation_status>` — flag validation statuses."
#: ../../root/api/command/input_flag.rst:17
msgid ""
"Экземпляры этого класса не предназначены для прямого создания. Они "
"содержатся в объекте :ref:`Response <root_api_response>`."
msgstr ""
"Instances of this class are not intended for direct creation. They are "
"contained in the :ref:`Response <root_api_response>` object."
#: ../../root/api/command/input_flag.rst:19
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/command/input_flag.rst:24
msgid "Имя введённого флага."
msgstr "Name of the entered flag."
#: ../../root/api/command/input_flag.rst:29
msgid "Префикс флага: ``-``, ``--`` или ``---``."
msgstr "Flag prefix: ``-``, ``--``, or ``---``."
#: ../../root/api/command/input_flag.rst:33
msgid ""
"Значение, переданное с флагом. Может быть ``''`` (пустой строкой) для "
"флагов без значений."
msgstr ""
"Value passed with the flag. Can be ``''`` (empty string) for flags "
"without values."
#: ../../root/api/command/input_flag.rst:38
msgid ""
"Статус валидации флага: ``ValidationStatus.VALID``, "
"``ValidationStatus.INVALID`` или ``ValidationStatus.UNDEFINED``."
msgstr ""
"Flag validation status: ``ValidationStatus.VALID``, "
"``ValidationStatus.INVALID``, or ``ValidationStatus.UNDEFINED``."
#: ../../root/api/command/input_flag.rst:43
msgid "Свойства"
msgstr "Properties"
#: ../../root/api/command/input_flag.rst:46
msgid "string_entity"
msgstr "string_entity"
#: ../../root/api/command/input_flag.rst:54
msgid "Возвращает строковое представление флага в формате ``prefix + name``."
msgstr ""
"Returns the string representation of the flag in the format ``prefix + "
"name``."
#: ../../root/api/command/input_flag.rst
msgid "return"
msgstr "return"
#: ../../root/api/command/input_flag.rst:56
msgid "Строковое представление флага"
msgstr "String representation of the flag"
#: ../../root/api/command/input_flag.rst:61
msgid "Магические методы"
msgstr "Magic Methods"
#: ../../root/api/command/input_flag.rst:64
msgid "__str__"
msgstr "__str__"
#: ../../root/api/command/input_flag.rst:71
msgid "Возвращает строковое представление флага вместе с его значением."
msgstr "Returns the string representation of the flag along with its value."
#: ../../root/api/command/input_flag.rst:73
msgid "Строка в формате ``флаг значение``."
msgstr "String in the format ``flag value``."
#: ../../root/api/command/input_flag.rst:75
#: ../../root/api/command/input_flag.rst:95
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/command/input_flag.rst:84
msgid "__repr__"
msgstr "__repr__"
#: ../../root/api/command/input_flag.rst:91
msgid "Возвращает отладочное представление объекта."
msgstr "Returns the debug representation of the object."
#: ../../root/api/command/input_flag.rst:93
msgid ""
"Строка в формате ``InputFlag<prefix=..., name=..., value=..., "
"status=...>``."
msgstr ""
"String in the format ``InputFlag<prefix=..., name=..., value=..., "
"status=...>``."
#: ../../root/api/command/input_flag.rst:104
msgid "__eq__"
msgstr "__eq__"
#: ../../root/api/command/input_flag.rst:111
msgid "Сравнивает два введённых флага на равенство по имени."
msgstr "Compares two entered flags for equality by name."
#: ../../root/api/command/input_flag.rst
msgid "param other"
msgstr "param other"
#: ../../root/api/command/input_flag.rst:113
msgid "Объект для сравнения."
msgstr "Object to compare."
#: ../../root/api/command/input_flag.rst:114
msgid "**True**, если имена флагов совпадают, иначе **False**."
msgstr "**True** if flag names match, otherwise **False**."
#: ../../root/api/command/input_flag.rst:116
msgid "Два введённых флага считаются равными, если их имена совпадают."
msgstr "Two entered flags are considered equal if their names match."
@@ -0,0 +1,219 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/input_flags.rst:4
msgid "InputFlags"
msgstr "InputFlags"
#: ../../root/api/command/input_flags.rst:6
msgid ""
"``InputFlags`` — это коллекция флагов, введённых пользователем. Её "
"основная задача — группировать и управлять набором флагов, переданных "
"вместе с командой. ``InputFlags`` служит контейнером, который позволяет "
"удобно извлекать, итерировать и проверять наличие флагов, а также "
"работать с их значениями и статусами валидации."
msgstr ""
"``InputFlags`` is a collection of flags entered by the user. Its main purpose is to "
"group and manage the set of flags passed with a command. ``InputFlags`` serves as a "
"container that allows convenient retrieval, iteration, and checking of flag presence, "
"as well as working with their values and validation statuses."
#: ../../root/api/command/input_flags.rst:10
msgid ""
"Документация по отдельным флагам (:ref:`Flag <root_api_command_flag>`, "
":ref:`InputFlag <root_api_command_input_flag>`)"
msgstr ""
"Documentation for individual flags (:ref:`Flag <root_api_command_flag>`, "
":ref:`InputFlag <root_api_command_input_flag>`)"
#: ../../root/api/command/input_flags.rst:12
msgid ""
"Документация по :ref:`InputFlags <root_api_command_input_flags>` — "
"коллекция обработанных флагов, введённых пользователем."
msgstr ""
"Documentation for :ref:`InputFlags <root_api_command_input_flags>` — "
"a collection of processed flags entered by the user."
#: ../../root/api/command/input_flags.rst:14
msgid ""
"Документация по :ref:`Response <root_api_response>` — объект ответа, "
"содержащий ``InputFlags``"
msgstr ""
"Documentation for :ref:`Response <root_api_response>` — response object "
"containing ``InputFlags``"
#: ../../root/api/command/input_flags.rst:16
msgid ""
":ref:`Общая информация <root_flags>` о флагах и их использовании в "
"приложении ``Argenta``"
msgstr ""
":ref:`General information <root_flags>` about flags and their usage in "
"the ``Argenta`` application"
#: ../../root/api/command/input_flags.rst:21
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/command/input_flags.rst:28
msgid "Создаёт новую коллекцию введённых флагов."
msgstr "Creates a new collection of entered flags."
#: ../../root/api/command/input_flags.rst:30
msgid ""
"``flags``: Необязательный список флагов типа ``InputFlag`` для "
"инициализации коллекции. Если не указан, создаётся пустая коллекция."
msgstr ""
"``flags``: Optional list of flags of type ``InputFlag`` for initializing the collection. "
"If not specified, an empty collection is created."
#: ../../root/api/command/input_flags.rst:33
msgid ""
"Экземпляры этого класса обычно не создаются напрямую. Они автоматически "
"формируются системой при обработке пользовательского ввода и доступны "
"через атрибут ``input_flags`` объекта ``Response``."
msgstr ""
"Instances of this class are usually not created directly. They are automatically "
"formed by the system when processing user input and are accessible through the "
"``input_flags`` attribute of the ``Response`` object."
#: ../../root/api/command/input_flags.rst:35
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/command/input_flags.rst:40
msgid ""
"Список всех введённых флагов типа ``InputFlag``. Пуст, если флаги не были"
" переданы при инициализации или пользователь не ввёл их с командой."
msgstr ""
"List of all entered flags of type ``InputFlag``. Empty if flags were not passed "
"during initialization or the user did not enter them with the command."
#: ../../root/api/command/input_flags.rst:42
#: ../../root/api/command/input_flags.rst:68
#: ../../root/api/command/input_flags.rst:94
#: ../../root/api/command/input_flags.rst:117
#: ../../root/api/command/input_flags.rst:131
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/command/input_flags.rst:51
msgid "Методы"
msgstr "Methods"
#: ../../root/api/command/input_flags.rst:54
msgid "get_flag_by_name"
msgstr ""
#: ../../root/api/command/input_flags.rst:61
msgid "Возвращает флаг по имени."
msgstr "Returns a flag by name."
#: ../../root/api/command/input_flags.rst
msgid "param name"
msgstr "param name"
#: ../../root/api/command/input_flags.rst:63
msgid "Имя искомого флага (без префикса)."
msgstr "Name of the flag to search for (without prefix)."
#: ../../root/api/command/input_flags.rst
msgid "return"
msgstr "return"
#: ../../root/api/command/input_flags.rst:64
msgid "Объект ``InputFlag`` или ``None``, если флаг не найден."
msgstr "``InputFlag`` object or ``None`` if the flag is not found."
#: ../../root/api/command/input_flags.rst:66
msgid ""
"Метод возвращает первый флаг с соответствующим именем (без учёта "
"префикса)."
msgstr ""
"The method returns the first flag with the corresponding name (ignoring the prefix)."
#: ../../root/api/command/input_flags.rst:77
msgid "add_flag"
msgstr ""
#: ../../root/api/command/input_flags.rst:84
msgid "Добавляет введённый флаг в коллекцию."
msgstr "Adds an entered flag to the collection."
#: ../../root/api/command/input_flags.rst
msgid "param flag"
msgstr "param flag"
#: ../../root/api/command/input_flags.rst:86
msgid "Флаг типа ``InputFlag`` для добавления."
msgstr "Flag of type ``InputFlag`` to add."
#: ../../root/api/command/input_flags.rst:87
#: ../../root/api/command/input_flags.rst:113
msgid "None."
msgstr "None."
#: ../../root/api/command/input_flags.rst:89
msgid ""
"Метод добавляет флаг в конец списка ``flags``. Используется для "
"динамического расширения коллекции."
msgstr ""
"The method adds a flag to the end of the ``flags`` list. Used for dynamically extending the collection."
#: ../../root/api/command/input_flags.rst:92
msgid ""
"Этот метод используется редко, так как `InputFlags` обычно создаётся "
"автоматически. Однако он может быть полезен для тестирования или ручного "
"создания коллекций."
msgstr ""
"This method is rarely used, as `InputFlags` is usually created automatically. "
"However, it can be useful for testing or manual collection creation."
#: ../../root/api/command/input_flags.rst:103
msgid "add_flags"
msgstr ""
#: ../../root/api/command/input_flags.rst:110
msgid "Добавляет в коллекцию список введённых флагов."
msgstr "Adds a list of entered flags to the collection."
#: ../../root/api/command/input_flags.rst
msgid "param flags"
msgstr "param flags"
#: ../../root/api/command/input_flags.rst:112
msgid "Список флагов типа ``InputFlag`` для добавления."
msgstr "List of flags of type ``InputFlag`` to add."
#: ../../root/api/command/input_flags.rst:115
msgid ""
"Метод расширяет коллекцию, добавляя в неё все флаги из переданного "
"списка. Эффективен для пакетного добавления."
msgstr ""
"The method extends the collection by adding all flags from the provided list. "
"Efficient for batch addition."
#: ../../root/api/command/input_flags.rst:126
msgid "Практические примеры"
msgstr "Practical Examples"
#: ../../root/api/command/input_flags.rst:129
msgid "Обработка всех флагов с проверкой статусов"
msgstr "Processing All Flags with Status Checking"
@@ -0,0 +1,190 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/possible_values.rst:5
msgid "PossibleValues"
msgstr "PossibleValues"
#: ../../root/api/command/possible_values.rst:7
msgid ""
"``PossibleValues`` — это перечисление, которое определяет "
"специальные режимы валидации для значений флагов. ``PossibleValues`` "
"используется в параметре ``possible_values`` класса ``Flag``, чтобы "
"указать, может ли флаг принимать значения и какие ограничения на них "
"накладываются."
msgstr ""
"``PossibleValues`` is an enumeration that defines special validation "
"modes for flag values. ``PossibleValues`` is used in the ``possible_values`` parameter "
"of the ``Flag`` class to specify whether a flag can accept values and what restrictions "
"are imposed on them."
#: ../../root/api/command/possible_values.rst:9
msgid ""
"``PossibleValues`` содержит два основных значения: ``NEITHER`` (для "
"флагов, которые не могут принимать значения) и ``ALL`` (для флагов, "
"принимающих любые значения). Это перечисление используется вместе со "
"списками строк и регулярными выражениями для создания гибкой системы "
"валидации."
msgstr ""
"``PossibleValues`` contains two main values: ``NEITHER`` (for flags that cannot "
"accept values) and ``ALL`` (for flags accepting any values). This enumeration is "
"used together with string lists and regular expressions to create a flexible "
"validation system."
#: ../../root/api/command/possible_values.rst:12
msgid ""
"Результат валидации доступен через атрибут ``status`` у экземпляра "
"``InputFlag``. Подробнее см. :ref:`здесь <root_api_command_input_flag>`."
msgstr ""
"The validation result is available through the ``status`` attribute of the "
"``InputFlag`` instance. For more details, see :ref:`here <root_api_command_input_flag>`."
#: ../../root/api/command/possible_values.rst:16
msgid ""
"Документация по :ref:`Flag <root_api_command_flag>` — класс флага, "
"использующий ``PossibleValues``."
msgstr ""
"Documentation for :ref:`Flag <root_api_command_flag>` — flag class "
"using ``PossibleValues``."
#: ../../root/api/command/possible_values.rst:18
msgid ""
"Документация по :ref:`ValidationStatus "
"<root_api_command_validation_status>` — результат валидации ввёденного "
"флага."
msgstr ""
"Documentation for :ref:`ValidationStatus "
"<root_api_command_validation_status>` — validation result of the entered flag."
#: ../../root/api/command/possible_values.rst:20
msgid ""
":ref:`Общая информация <root_flags>` о флагах и их использовании в "
"приложении ``Argenta``"
msgstr ""
":ref:`General information <root_flags>` about flags and their usage in "
"the ``Argenta`` application"
#: ../../root/api/command/possible_values.rst:25
msgid "NEITHER"
msgstr "NEITHER"
#: ../../root/api/command/possible_values.rst:32
msgid "Указывает, что флаг **не должен** иметь значения."
msgstr "Indicates that the flag **should not** have a value."
#: ../../root/api/command/possible_values.rst:34
msgid ""
"Флаги с этим значением работают как булевы переключатели: их наличие в "
"командной строке само по себе является информацией. Попытка передать "
"такому флагу значение приведёт к ошибке валидации."
msgstr ""
"Flags with this value work as boolean switches: their presence on the command line "
"is information in itself. Attempting to pass a value to such a flag will result in "
"a validation error."
#: ../../root/api/command/possible_values.rst:36
msgid "**Примеры флагов с** ``NEITHER``:"
msgstr "**Examples of flags with** ``NEITHER``:"
#: ../../root/api/command/possible_values.rst:38
msgid "``--help`` — флаг справки"
msgstr "``--help`` — help flag"
#: ../../root/api/command/possible_values.rst:39
msgid "``--verbose`` — флаг подробного вывода"
msgstr "``--verbose`` — verbose output flag"
#: ../../root/api/command/possible_values.rst:40
msgid "``--force`` — флаг принудительного выполнения"
msgstr "``--force`` — forced execution flag"
#: ../../root/api/command/possible_values.rst:41
msgid "``-A`` / ``--all`` — флаг выбора всех элементов"
msgstr "``-A`` / ``--all`` — select all items flag"
#: ../../root/api/command/possible_values.rst:43
#: ../../root/api/command/possible_values.rst:68
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/command/possible_values.rst:52
msgid "ALL"
msgstr "ALL"
#: ../../root/api/command/possible_values.rst:59
msgid "Указывает, что флаг может принимать **любое** значение."
msgstr "Indicates that the flag can accept **any** value."
#: ../../root/api/command/possible_values.rst:61
msgid ""
"Флаги с этим значением универсальны и не накладывают ограничений на "
"передаваемые данные. Валидация всегда будет успешной."
msgstr ""
"Flags with this value are universal and do not impose restrictions on the data passed. "
"Validation will always be successful."
#: ../../root/api/command/possible_values.rst:63
msgid "**Примеры флагов с** ``ALL``:"
msgstr "**Examples of flags with** ``ALL``:"
#: ../../root/api/command/possible_values.rst:65
msgid "``--message`` — произвольное текстовое сообщение"
msgstr "``--message`` — arbitrary text message"
#: ../../root/api/command/possible_values.rst:66
msgid "``--name`` — произвольное имя"
msgstr "``--name`` — arbitrary name"
#: ../../root/api/command/possible_values.rst:77
msgid "Параметр possible_values"
msgstr "The possible_values Parameter"
#: ../../root/api/command/possible_values.rst:79
msgid ""
"``PossibleValues`` используется как один из возможных типов для параметра"
" ``possible_values`` при создании экземпляра ``Flag``."
msgstr ""
"``PossibleValues`` is used as one of the possible types for the ``possible_values`` "
"parameter when creating a ``Flag`` instance."
#: ../../root/api/command/possible_values.rst:81
msgid "**Доступные типы для** ``possible_values``:"
msgstr "**Available types for** ``possible_values``:"
#: ../../root/api/command/possible_values.rst:83
msgid "``PossibleValues.NEITHER``: флаг без значения."
msgstr "``PossibleValues.NEITHER``: flag without a value."
#: ../../root/api/command/possible_values.rst:84
msgid "``PossibleValues.ALL``: флаг с любым значением (по умолчанию)."
msgstr "``PossibleValues.ALL``: flag with any value (default)."
#: ../../root/api/command/possible_values.rst:85
msgid "``list[str]``: флаг с ограниченным набором значений."
msgstr "``list[str]``: flag with a limited set of values."
#: ../../root/api/command/possible_values.rst:86
msgid "``Pattern[str]``: флаг со значением, проверяемым по регулярному выражению."
msgstr "``Pattern[str]``: flag with a value validated by a regular expression."
#: ../../root/api/command/possible_values.rst:88
msgid "**Пример комбинированного использования:**"
msgstr "**Combined usage example:**"
@@ -0,0 +1,165 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/command/validation_status.rst:4
msgid "ValidationStatus"
msgstr "ValidationStatus"
#: ../../root/api/command/validation_status.rst:6
msgid ""
"``ValidationStatus`` — это перечисление, которое определяет состояние "
"валидации флага. Его задача — предоставить стандартные константы для "
"отображения результата проверки. ``ValidationStatus`` используется в "
"атрибуте ``status`` класса ``InputFlag``."
msgstr ""
"``ValidationStatus`` is an enumeration that defines the validation state of a flag. "
"Its purpose is to provide standard constants for displaying the validation result. "
"``ValidationStatus`` is used in the ``status`` attribute of the ``InputFlag`` class."
#: ../../root/api/command/validation_status.rst:8
msgid ""
"``ValidationStatus`` содержит три значения: **VALID** (корректный флаг), "
"**INVALID** (некорректный) и **UNDEFINED** (незарегистрированный)."
msgstr ""
"``ValidationStatus`` contains three values: **VALID** (valid flag), "
"**INVALID** (invalid), and **UNDEFINED** (unregistered)."
#: ../../root/api/command/validation_status.rst:12
msgid ""
"Статус валидации устанавливается автоматически при создании экземпляра "
"``InputFlag`` на основе правил, заданных в соответствующем ``Flag``."
msgstr ""
"The validation status is set automatically when creating an ``InputFlag`` instance "
"based on the rules defined in the corresponding ``Flag``."
#: ../../root/api/command/validation_status.rst:16
msgid ""
"Документация по :ref:`InputFlag <root_api_command_input_flag>` — класс "
"введённого флага, использующий ``ValidationStatus``."
msgstr ""
"Documentation for :ref:`InputFlag <root_api_command_input_flag>` — entered flag class "
"using ``ValidationStatus``."
#: ../../root/api/command/validation_status.rst:18
msgid ""
"Документация по :ref:`Flag <root_api_command_flag>` — класс флага с "
"правилами валидации."
msgstr ""
"Documentation for :ref:`Flag <root_api_command_flag>` — flag class with "
"validation rules."
#: ../../root/api/command/validation_status.rst:20
msgid ""
"Документация по :ref:`PossibleValues <root_api_command_possible_values>` "
"— типы допустимых значений."
msgstr ""
"Documentation for :ref:`PossibleValues <root_api_command_possible_values>` "
"— types of allowed values."
#: ../../root/api/command/validation_status.rst:25
msgid "VALID"
msgstr "VALID"
#: ../../root/api/command/validation_status.rst:32
msgid "Указывает, что флаг и его значение **прошли** валидацию."
msgstr "Indicates that the flag and its value **passed** validation."
#: ../../root/api/command/validation_status.rst:34
msgid ""
"Флаги с этим статусом соответствуют правилам, заданным в "
"``possible_values`` соответствующего ``Flag``. Их можно безопасно "
"использовать в логике приложения без дополнительных проверок."
msgstr ""
"Flags with this status comply with the rules defined in the ``possible_values`` "
"of the corresponding ``Flag``. They can be safely used in application logic without "
"additional checks."
#: ../../root/api/command/validation_status.rst:36
msgid "**Условия получения статуса** ``VALID``:"
msgstr "**Conditions for receiving** ``VALID`` **status:**"
#: ../../root/api/command/validation_status.rst:38
msgid "Флаг с ``PossibleValues.NEITHER`` передан без значения."
msgstr "Flag with ``PossibleValues.NEITHER`` passed without a value."
#: ../../root/api/command/validation_status.rst:39
msgid "Флаг с ``PossibleValues.ALL`` передан с любым значением или без него."
msgstr "Flag with ``PossibleValues.ALL`` passed with any value or without one."
#: ../../root/api/command/validation_status.rst:40
msgid "Значение флага входит в список разрешённых."
msgstr "Flag value is in the list of allowed values."
#: ../../root/api/command/validation_status.rst:41
msgid "Значение флага соответствует регулярному выражению."
msgstr "Flag value matches the regular expression."
#: ../../root/api/command/validation_status.rst:46
msgid "INVALID"
msgstr "INVALID"
#: ../../root/api/command/validation_status.rst:53
msgid "Указывает, что флаг или его значение **не прошли** валидацию."
msgstr "Indicates that the flag or its value **did not pass** validation."
#: ../../root/api/command/validation_status.rst:55
msgid ""
"Флаги с этим статусом нарушают правила, заданные в ``possible_values`` "
"соответствующего ``Flag``. Их следует обрабатывать как ошибочные."
msgstr ""
"Flags with this status violate the rules defined in the ``possible_values`` "
"of the corresponding ``Flag``. They should be treated as erroneous."
#: ../../root/api/command/validation_status.rst:57
msgid "**Условия получения статуса** ``INVALID``:"
msgstr "**Conditions for receiving** ``INVALID`` **status:**"
#: ../../root/api/command/validation_status.rst:59
msgid "Флаг с ``PossibleValues.NEITHER`` передан со значением."
msgstr "Flag with ``PossibleValues.NEITHER`` passed with a value."
#: ../../root/api/command/validation_status.rst:60
msgid "Значение флага не входит в список разрешённых."
msgstr "Flag value is not in the list of allowed values."
#: ../../root/api/command/validation_status.rst:61
msgid "Значение флага не соответствует регулярному выражению."
msgstr "Flag value does not match the regular expression."
#: ../../root/api/command/validation_status.rst:62
msgid "Флаг требует значение, но передан без него."
msgstr "Flag requires a value but was passed without one."
#: ../../root/api/command/validation_status.rst:67
msgid "UNDEFINED"
msgstr "UNDEFINED"
#: ../../root/api/command/validation_status.rst:74
msgid "Указывает, что введённый флаг не был зарегистрирован в команде."
msgstr "Indicates that the entered flag was not registered in the command."
#: ../../root/api/command/validation_status.rst:76
msgid "**Условия получения статуса** ``UNDEFINED``:"
msgstr "**Conditions for receiving** ``UNDEFINED`` **status:**"
#: ../../root/api/command/validation_status.rst:78
msgid "Введённый флаг не найден среди зарегистрированных для данной команды."
msgstr "The entered flag is not found among those registered for this command."
@@ -0,0 +1,217 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/index.rst:5
msgid "Публичное API"
msgstr "Public API"
#: ../../root/api/index.rst:8
msgid "Описание раздела"
msgstr "Section Description"
#: ../../root/api/index.rst:10
msgid "В этом разделе описан публичный API библиотеки. Он включает:"
msgstr "This section describes the library's public API. It includes:"
#: ../../root/api/index.rst:12
msgid "Классы и функции для интеграции в ваши приложения."
msgstr "Classes and functions for integration into your applications."
#: ../../root/api/index.rst:13
msgid "Рекомендации по использованию и поддерживаемые сценарии."
msgstr "Usage recommendations and supported scenarios."
#: ../../root/api/index.rst:14
msgid "Примеры кода, подробные сигнатуры и описание возвращаемых значений."
msgstr "Code examples, detailed signatures, and descriptions of return values."
#: ../../root/api/index.rst:15
msgid "Гарантии стабильности и обратной совместимости."
msgstr "Stability and backward compatibility guarantees."
#: ../../root/api/index.rst:17
msgid ""
"Интерфейсы, не описанные в этом разделе, считаются внутренними. Их "
"использование может привести к ошибкам при обновлении библиотеки. При "
"разработке собственных решений используйте только компоненты, описанные "
"здесь. Это обеспечит стабильность и совместимость ваших продуктов с "
"будущими версиями ``Argenta``."
msgstr ""
"Interfaces not described in this section are considered internal. Using them may "
"lead to errors when updating the library. When developing your own solutions, use "
"only the components described here. This will ensure the stability and compatibility "
"of your products with future versions of ``Argenta``."
#: ../../root/api/index.rst:22
msgid "Публичные импорты"
msgstr "Public Imports"
#: ../../root/api/index.rst:24
msgid ""
"Все основные компоненты библиотеки доступны для прямого импорта из "
"корневого пакета ``argenta`` или его подмодулей."
msgstr ""
"All main library components are available for direct import from the root package "
"``argenta`` or its submodules."
#: ../../root/api/index.rst:27
msgid "Основные компоненты"
msgstr "Main Components"
#: ../../root/api/index.rst:32
msgid ""
":ref:`App <root_api_app_index>` — Объект приложения, который отвечает за "
"логику роутинга, настройки, валидации и т.д."
msgstr ""
":ref:`App <root_api_app_index>` — Application object responsible for routing logic, "
"settings, validation, etc."
#: ../../root/api/index.rst:33
msgid ""
":ref:`Orchestrator <root_api_orchestrator_index>` — Класс для "
"конфигурирования и запуска всего приложения."
msgstr ""
":ref:`Orchestrator <root_api_orchestrator_index>` — Class for configuring and "
"launching the entire application."
#: ../../root/api/index.rst:34
msgid ""
":ref:`Router <root_api_router>` — Класс для группировки и регистрации "
"команд."
msgstr ":ref:`Router <root_api_router>` — Class for grouping and registering commands."
#: ../../root/api/index.rst:35
msgid ""
":ref:`Command <root_api_command_index>` — Класс для создания команд при "
"инициализации хэндлеров."
msgstr ""
":ref:`Command <root_api_command_index>` — Class for creating commands when "
"initializing handlers."
#: ../../root/api/index.rst:36
msgid ""
":ref:`Response <root_api_response>` — Объект ответа, передаваемый в "
"обработчики."
msgstr ":ref:`Response <root_api_response>` — Response object passed to handlers."
#: ../../root/api/index.rst:39
msgid "Команды и флаги"
msgstr "Commands and Flags"
#: ../../root/api/index.rst:52
msgid ":ref:`Flag <root_api_command_flag>` — Класс для описания флага."
msgstr ":ref:`Flag <root_api_command_flag>` — Class for describing a flag."
#: ../../root/api/index.rst:53
msgid ":ref:`Flags <root_api_command_flags>` — Коллекция для регистрации флагов."
msgstr ":ref:`Flags <root_api_command_flags>` — Collection for registering flags."
#: ../../root/api/index.rst:54
msgid ""
":ref:`InputFlag <root_api_command_input_flag>` — Класс для введённого "
"пользователем флага."
msgstr ""
":ref:`InputFlag <root_api_command_input_flag>` — Class for a user-entered flag."
#: ../../root/api/index.rst:55
msgid ""
":ref:`InputFlags <root_api_command_input_flags>` — Коллекция введённых "
"флагов."
msgstr ":ref:`InputFlags <root_api_command_input_flags>` — Collection of entered flags."
#: ../../root/api/index.rst:56
msgid ""
":ref:`PossibleValues <root_api_command_possible_values>` — Правила "
"валидации значений флага."
msgstr ""
":ref:`PossibleValues <root_api_command_possible_values>` — Validation rules for "
"flag values."
#: ../../root/api/index.rst:57
msgid ""
":ref:`ValidationStatus <root_api_command_validation_status>` — Статусы "
"валидации флагов."
msgstr ""
":ref:`ValidationStatus <root_api_command_validation_status>` — Flag validation statuses."
#: ../../root/api/index.rst:58
msgid ""
":ref:`PredefinedFlags <root_api_command_flag_predefined_flags>` — "
"Коллекция предопределённых флагов."
msgstr ""
":ref:`PredefinedFlags <root_api_command_flag_predefined_flags>` — Collection of "
"predefined flags."
#: ../../root/api/index.rst:61
msgid "Настройка приложения"
msgstr "Application Configuration"
#: ../../root/api/index.rst:71
msgid ""
":ref:`AutoCompleter <root_api_app_autocompleter>` - Класс для настройки "
"автодополнения."
msgstr ""
":ref:`AutoCompleter <root_api_app_autocompleter>` - Class for configuring "
"autocompletion."
#: ../../root/api/index.rst:72
msgid ""
":ref:`StaticDividingLine <root_api_app_dividing_lines>` — Статическая "
"разделительная линия для оформления вывода."
msgstr ""
":ref:`StaticDividingLine <root_api_app_dividing_lines>` — Static dividing line for "
"output formatting."
#: ../../root/api/index.rst:73
#: ../../root/api/index.rst:73
msgid ""
":ref:`DynamicDividingLine <root_api_app_dividing_lines>` — Динамическая "
"разделительная линия для оформления вывода."
msgstr ""
":ref:`DynamicDividingLine <root_api_app_dividing_lines>` — Dynamic dividing line "
"for output formatting."
#: ../../root/api/index.rst:74
msgid ""
":ref:`PredefinedMessages <root_api_predefined_messages>` — Готовые "
"сообщения для вывода при старте приложения."
msgstr ""
":ref:`PredefinedMessages <root_api_predefined_messages>` — Ready-made messages for "
"output at application startup."
#: ../../root/api/index.rst:77
msgid "Внедрение зависимостей"
msgstr "Dependency Injection"
#: ../../root/api/index.rst:85
msgid ""
":ref:`FromDishka <root_dependency_injection>` — Маркер аргумента функции "
"как зависимости, которая должна быть инжектирована."
msgstr ""
":ref:`FromDishka <root_dependency_injection>` — Marker for a function argument as a "
"dependency that should be injected."
#: ../../root/api/index.rst:86
msgid ""
":ref:`inject <root_dependency_injection>` — Декоратор для инжектирования "
"зависимостей, указанных в сигнатуре."
msgstr ""
":ref:`inject <root_dependency_injection>` — Decorator for injecting dependencies "
"specified in the signature."
@@ -0,0 +1,154 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:29+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/orchestrator/argparser.rst:4
msgid "ArgParser"
msgstr "ArgParser"
#: ../../root/api/orchestrator/argparser.rst:6
msgid ""
"``ArgParser`` предназначен для обработки **аргументов командной строки**,"
" передаваемых приложению при запуске. Важно не путать их с флагами, "
"которые пользователь вводит в интерактивном режиме. ``ArgParser`` "
"позволяет получать внешнюю конфигурацию в момент старта (например, путь к"
" файлу настроек, флаги отладки или режим запуска)."
msgstr ""
"``ArgParser`` is designed for processing **command-line arguments** passed to the "
"application at startup. It's important not to confuse them with flags that the user "
"enters in interactive mode. ``ArgParser`` allows receiving external configuration at "
"startup (e.g., path to settings file, debug flags, or launch mode)."
#: ../../root/api/orchestrator/argparser.rst:11
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/orchestrator/argparser.rst:21
msgid "Создаёт экземпляр парсера аргументов командной строки."
msgstr "Creates an instance of the command-line argument parser."
#: ../../root/api/orchestrator/argparser.rst:23
msgid ""
"``processed_args``: Список аргументов для обработки при запуске "
"приложения. Подробнее см. :ref:`здесь <root_api_orchestrator_arguments>`."
msgstr ""
"``processed_args``: List of arguments to process at application startup. "
"For more details, see :ref:`here <root_api_orchestrator_arguments>`."
#: ../../root/api/orchestrator/argparser.rst:24
msgid "``name``: Имя приложения для отображения в справке."
msgstr "``name``: Application name for display in help."
#: ../../root/api/orchestrator/argparser.rst:25
msgid "``description``: Описание приложения для отображения в справке."
msgstr "``description``: Application description for display in help."
#: ../../root/api/orchestrator/argparser.rst:26
msgid "``epilog``: Дополнительная информация для отображения в конце справки."
msgstr "``epilog``: Additional information for display at the end of help."
#: ../../root/api/orchestrator/argparser.rst:31
msgid "Атрибуты"
msgstr "Attributes"
#: ../../root/api/orchestrator/argparser.rst:35
msgid ""
"Экземпляр ``ArgSpace``, содержащий все обработанные аргументы командной "
"строки. Подробнее см. :ref:`здесь <root_api_orchestrator_argspace>`."
msgstr ""
"``ArgSpace`` instance containing all processed command-line arguments. "
"For more details, see :ref:`here <root_api_orchestrator_argspace>`."
#: ../../root/api/orchestrator/argparser.rst:38
msgid ""
"До инициализации ``Orchestrator``, в конструктор которого был передан "
"экземпляр ``ArgParser``, атрибут ``parsed_argspace`` будет содержать "
"пустой ``ArgSpace``."
msgstr ""
"Before initializing ``Orchestrator``, to whose constructor an ``ArgParser`` instance "
"was passed, the ``parsed_argspace`` attribute will contain an empty ``ArgSpace``."
#: ../../root/api/orchestrator/argparser.rst:40
msgid ""
"Парсинг и валидация аргументов происходят при инициализации "
"``Orchestrator``, поэтому использовать ``parsed_argspace`` "
"**целесообразно только после** этого."
msgstr ""
"Parsing and validation of arguments occur during ``Orchestrator`` initialization, "
"so using ``parsed_argspace`` is **advisable only after** that."
#: ../../root/api/orchestrator/argparser.rst:45
msgid "Лучшие практики"
msgstr "Best Practices"
#: ../../root/api/orchestrator/argparser.rst:47
msgid ""
"Использовать атрибут ``parsed_argspace`` рекомендуется только на этапе "
"настройки приложения. В обработчиках лучшей практикой является получение "
"``ArgSpace`` через DI. Подробнее см. :ref:`здесь "
"<root_dependency_injection>`."
msgstr ""
"Using the ``parsed_argspace`` attribute is recommended only during the application "
"setup phase. In handlers, the best practice is to obtain ``ArgSpace`` through DI. "
"For more details, see :ref:`here <root_dependency_injection>`."
#: ../../root/api/orchestrator/argparser.rst:49
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/orchestrator/argparser.rst:56
msgid "Обработка ошибок"
msgstr "Error Handling"
#: ../../root/api/orchestrator/argparser.rst:59
msgid ""
"Про типы аргументов подробнее в :ref:`Arguments "
"<root_api_orchestrator_arguments>`"
msgstr ""
"For more details on argument types, see :ref:`Arguments "
"<root_api_orchestrator_arguments>`"
#: ../../root/api/orchestrator/argparser.rst:61
msgid ""
"При работе с аргументами командной строки стандартный ``ArgumentParser`` "
"автоматически обрабатывает следующие ситуации:"
msgstr ""
"When working with command-line arguments, the standard ``ArgumentParser`` "
"automatically handles the following situations:"
#: ../../root/api/orchestrator/argparser.rst:63
msgid "**Отсутствие обязательного аргумента:**"
msgstr "**Missing required argument:**"
#: ../../root/api/orchestrator/argparser.rst:71
msgid "**Недопустимое значение из списка possible_values:**"
msgstr "**Invalid value from possible_values list:**"
#: ../../root/api/orchestrator/argparser.rst:79
msgid "**Использование устаревшего аргумента:**"
msgstr "**Using a deprecated argument:**"
#: ../../root/api/orchestrator/argparser.rst:81
msgid ""
"При использовании аргумента с ``is_deprecated=True`` выводится "
"предупреждение, но выполнение продолжается:"
msgstr ""
"When using an argument with ``is_deprecated=True``, a warning is displayed, "
"but execution continues:"
@@ -0,0 +1,166 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/orchestrator/argspace.rst:4
msgid "ArgSpace"
msgstr "ArgSpace"
#: ../../root/api/orchestrator/argspace.rst:6
msgid ""
"``ArgSpace`` — это контейнер для хранения и управления обработанными "
"аргументами командной строки. Его основная задача — предоставить удобный "
"интерфейс для доступа к значениям, переданным при запуске приложения."
msgstr ""
"``ArgSpace`` is a container for storing and managing processed command-"
"line arguments. Its main purpose is to provide a convenient interface for"
" accessing values passed at application startup."
#: ../../root/api/orchestrator/argspace.rst:8
msgid ""
"``ArgSpace`` создаётся автоматически после обработки аргументов с помощью"
" ``ArgParser`` и содержит коллекцию объектов ``InputArgument``."
msgstr ""
"``ArgSpace`` is created automatically after processing arguments using "
"``ArgParser`` and contains a collection of ``InputArgument`` objects."
#: ../../root/api/orchestrator/argspace.rst:13
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/orchestrator/argspace.rst:15
msgid ""
"Создание экземпляров класса ``ArgSpace`` происходит под `капотом`, вам не"
" нужно создавать их вручную."
msgstr ""
"Creation of ``ArgSpace`` class instances happens under the hood, you "
"don't need to create them manually."
#: ../../root/api/orchestrator/argspace.rst:17
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/orchestrator/argspace.rst:21
msgid "Список всех обработанных аргументов типа ``InputArgument``."
msgstr "List of all processed arguments of type ``InputArgument``."
#: ../../root/api/orchestrator/argspace.rst:26
msgid "Методы"
msgstr "Methods"
#: ../../root/api/orchestrator/argspace.rst:29
msgid "get_by_name"
msgstr "get_by_name"
#: ../../root/api/orchestrator/argspace.rst:36
msgid "Возвращает аргумент по имени."
msgstr "Returns an argument by name."
#: ../../root/api/orchestrator/argspace.rst
msgid "param name"
msgstr "param name"
#: ../../root/api/orchestrator/argspace.rst:38
msgid "Имя искомого аргумента."
msgstr "Name of the argument to search for."
#: ../../root/api/orchestrator/argspace.rst
msgid "return"
msgstr "return"
#: ../../root/api/orchestrator/argspace.rst:39
msgid "Объект ``InputArgument`` или ``None``, если аргумент не найден."
msgstr "``InputArgument`` object or ``None`` if the argument is not found."
#: ../../root/api/orchestrator/argspace.rst:41
#: ../../root/api/orchestrator/argspace.rst:63
#: ../../root/api/orchestrator/argspace.rst:90
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/orchestrator/argspace.rst:49
msgid "get_by_type"
msgstr "get_by_type"
#: ../../root/api/orchestrator/argspace.rst:56
msgid "Возвращает все аргументы определённого типа."
msgstr "Returns all arguments of a specific type."
#: ../../root/api/orchestrator/argspace.rst
msgid "param arg_type"
msgstr "param arg_type"
#: ../../root/api/orchestrator/argspace.rst:58
msgid "Тип аргумента (``BooleanArgument`` или ``ValueArgument``)."
msgstr "Argument type (``BooleanArgument`` or ``ValueArgument``)."
#: ../../root/api/orchestrator/argspace.rst:59
msgid "Список аргументов указанного типа или пустой список."
msgstr "List of arguments of the specified type or an empty list."
#: ../../root/api/orchestrator/argspace.rst:61
msgid ""
"Метод фильтрует ``all_arguments`` по атрибуту ``founder_class`` и "
"возвращает аргументы, созданные из указанного типа."
msgstr ""
"The method filters ``all_arguments`` by the ``founder_class`` attribute "
"and returns arguments created from the specified type."
#: ../../root/api/orchestrator/argspace.rst:71
msgid "InputArgument"
msgstr "InputArgument"
#: ../../root/api/orchestrator/argspace.rst:74
msgid ""
"Документация по ``InputArgument`` находится :ref:`здесь "
"<root_api_orchestrator_arguments_inputargument>`."
msgstr ""
"Documentation for ``InputArgument`` is located :ref:`here "
"<root_api_orchestrator_arguments_inputargument>`."
#: ../../root/api/orchestrator/argspace.rst:79
msgid "Примеры использования"
msgstr "Usage Examples"
#: ../../root/api/orchestrator/argspace.rst:81
msgid ""
"``ArgSpace`` используется для доступа к значениям аргументов после "
"запуска приложения. Типичный сценарий включает обработку аргументов через"
" ``ArgParser`` и последующее извлечение значений из ``ArgSpace``."
msgstr ""
"``ArgSpace`` is used to access argument values after the application "
"starts. A typical scenario includes processing arguments through "
"``ArgParser`` and subsequent extraction of values from ``ArgSpace``."
#: ../../root/api/orchestrator/argspace.rst:83
msgid "**Полный пример:**"
msgstr "**Complete example:**"
#: ../../root/api/orchestrator/argspace.rst:88
msgid ""
"Доступ к аргументам из обработчиков осуществляется с помощью DI. "
"Подробнее см. :ref:`здесь <root_dependency_injection>`."
msgstr ""
"Access to arguments from handlers is done using DI. For more details, see"
" :ref:`here <root_dependency_injection>`."
#: ../../root/api/orchestrator/argspace.rst:95
msgid "**Запуск приложения:**"
msgstr "**Running the application:**"
@@ -0,0 +1,227 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/orchestrator/arguments.rst:4
msgid "Arguments"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:6
msgid ""
"Модуль ``Arguments`` предоставляет классы для работы с аргументами "
"командной строки. Они позволяют настраивать поведение приложения в момент"
" его запуска, передавая различные параметры конфигурации."
msgstr ""
"The ``Arguments`` module provides classes for working with command-line arguments. "
"They allow configuring application behavior at startup by passing various configuration parameters."
#: ../../root/api/orchestrator/arguments.rst:8
msgid ""
"Аргументы регистрируются в ``ArgParser`` и после обработки становятся "
"доступными в объекте ``ArgSpace``."
msgstr ""
"Arguments are registered in ``ArgParser`` and after processing become available in the ``ArgSpace`` object."
#: ../../root/api/orchestrator/arguments.rst:13
msgid "ValueArgument"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:15
msgid "Класс для аргументов, требующих передачи значения."
msgstr "Class for arguments that require passing a value."
#: ../../root/api/orchestrator/arguments.rst:31
msgid "Создаёт аргумент командной строки, требующий значения."
msgstr "Creates a command-line argument that requires a value."
#: ../../root/api/orchestrator/arguments.rst
msgid "param name"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:33
#: ../../root/api/orchestrator/arguments.rst:74
#: ../../root/api/orchestrator/arguments.rst:117
msgid "Имя аргумента"
msgstr "Argument name"
#: ../../root/api/orchestrator/arguments.rst
msgid "param prefix"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:34
#: ../../root/api/orchestrator/arguments.rst:75
msgid "Префикс (по умолчанию ``--``)"
msgstr "Prefix (defaults to ``--``)"
#: ../../root/api/orchestrator/arguments.rst
msgid "param help"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:35
#: ../../root/api/orchestrator/arguments.rst:76
msgid "Сообщение для справки (``--help``)"
msgstr "Help message (``--help``)"
#: ../../root/api/orchestrator/arguments.rst
msgid "param possible_values"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:36
msgid "Список допустимых значений"
msgstr "List of allowed values"
#: ../../root/api/orchestrator/arguments.rst
msgid "param default"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:37
msgid "Значение по умолчанию, если аргумент не передан"
msgstr "Default value if the argument is not passed"
#: ../../root/api/orchestrator/arguments.rst
msgid "param is_required"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:38
msgid ""
"Если ``True``, аргумент становится обязательным. Если не передать при "
"запуске, приложение не запустится"
msgstr ""
"If ``True``, the argument becomes required. If not passed at startup, the application will not start"
#: ../../root/api/orchestrator/arguments.rst
msgid "param is_deprecated"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:39
msgid ""
"Если ``True``, помечает аргумент как устаревший. Если передать при "
"запуске, будет выведено предупреждение в консоль"
msgstr ""
"If ``True``, marks the argument as deprecated. If passed at startup, a warning will be displayed in the console"
#: ../../root/api/orchestrator/arguments.rst:41
#: ../../root/api/orchestrator/arguments.rst:79
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/orchestrator/arguments.rst:47
#: ../../root/api/orchestrator/arguments.rst:85
msgid "**Запуск приложения:**"
msgstr "**Running the application:**"
#: ../../root/api/orchestrator/arguments.rst:57
msgid "BooleanArgument"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:59
msgid ""
"Класс для булевых аргументов, не требующих значения. Их наличие при "
"запуске устанавливает значение в **True**, отсутствие — в **False**."
msgstr ""
"Class for boolean arguments that do not require a value. Their presence at startup "
"sets the value to **True**, absence to **False**."
#: ../../root/api/orchestrator/arguments.rst:72
msgid "Создаёт булев аргумент командной строки без значения."
msgstr "Creates a boolean command-line argument without a value."
#: ../../root/api/orchestrator/arguments.rst:77
msgid "Если ``True``, помечает аргумент как устаревший"
msgstr "If ``True``, marks the argument as deprecated"
#: ../../root/api/orchestrator/arguments.rst:98
msgid "InputArgument"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:101
msgid ""
"``InputArgument`` напрямую связан с контейнером ``ArgSpace`` и является "
"его наполнителем. Подробнее о нём см. :ref:`здесь "
"<root_api_orchestrator_argspace>`."
msgstr ""
"``InputArgument`` is directly related to the ``ArgSpace`` container and serves as its filler. "
"For more details, see :ref:`here <root_api_orchestrator_argspace>`."
#: ../../root/api/orchestrator/arguments.rst:103
msgid ""
"Представляет собой обработанный аргумент командной строки. Этот класс "
"используется внутри ``ArgSpace`` для хранения значений, полученных после "
"парсинга."
msgstr ""
"Represents a processed command-line argument. This class is used inside ``ArgSpace`` "
"to store values obtained after parsing."
#: ../../root/api/orchestrator/arguments.rst:115
msgid "Создаёт экземпляр обработанного входного аргумента."
msgstr "Creates an instance of a processed input argument."
#: ../../root/api/orchestrator/arguments.rst
msgid "param value"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:118
msgid ""
"Значение аргумента. Для ``BooleanArgument`` — **True**, если аргумент "
"передан, и **False**, если нет; для ``ValueArgument`` — введённая строка"
msgstr ""
"Argument value. For ``BooleanArgument`` — **True** if the argument is passed, and **False** if not; "
"for ``ValueArgument`` — the entered string"
#: ../../root/api/orchestrator/arguments.rst
msgid "param founder_class"
msgstr ""
#: ../../root/api/orchestrator/arguments.rst:119
msgid ""
"Класс-родитель, из которого был создан аргумент (``BooleanArgument`` или "
"``ValueArgument``)"
msgstr ""
"Parent class from which the argument was created (``BooleanArgument`` or ``ValueArgument``)"
#: ../../root/api/orchestrator/arguments.rst:121
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/orchestrator/arguments.rst:125
msgid ""
"Имя аргумента, указанное при создании ``ValueArgument`` или "
"``BooleanArgument``."
msgstr ""
"Argument name specified when creating ``ValueArgument`` or ``BooleanArgument``."
#: ../../root/api/orchestrator/arguments.rst:129
msgid "Значение аргумента. Тип зависит от исходного класса:"
msgstr "Argument value. Type depends on the source class:"
#: ../../root/api/orchestrator/arguments.rst:131
msgid "Для ``BooleanArgument``: **True**, если аргумент был передан"
msgstr "For ``BooleanArgument``: **True** if the argument was passed"
#: ../../root/api/orchestrator/arguments.rst:132
msgid ""
"Для ``ValueArgument``: строка с переданным значением или значением по "
"умолчанию"
msgstr ""
"For ``ValueArgument``: string with the passed value or default value"
#: ../../root/api/orchestrator/arguments.rst:136
msgid "Ссылка на класс-родитель. Используется для определения типа и фильтрации."
msgstr "Reference to the parent class. Used for type determination and filtering."
@@ -0,0 +1,128 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/orchestrator/index.rst:4
msgid "Orchestrator"
msgstr "Orchestrator"
#: ../../root/api/orchestrator/index.rst:6
msgid ""
"``Orchestrator`` — это высокоуровневый компонент, который конфигурирует и"
" оркестрирует приложение, парсер командной строки, DI и остальные "
"компоненты, находящиеся по иерархии на уровне с ``App``."
msgstr ""
"``Orchestrator`` is a high-level component that configures and "
"orchestrates the application, command-line parser, DI, and other "
"components at the same hierarchical level as ``App``."
#: ../../root/api/orchestrator/index.rst:8
msgid ""
"В то время как ``App`` отвечает за логику интерактивной сессии (ввод "
"команд, маршрутизация), ``Orchestrator`` подготавливает окружение для его"
" работы и служит точкой входа в приложение."
msgstr ""
"While ``App`` is responsible for interactive session logic (command "
"input, routing), ``Orchestrator`` prepares the environment for its "
"operation and serves as the entry point to the application."
#: ../../root/api/orchestrator/index.rst:13
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/orchestrator/index.rst:28
msgid "Создаёт и конфигурирует экземпляр ``Orchestrator``."
msgstr "Creates and configures an ``Orchestrator`` instance."
#: ../../root/api/orchestrator/index.rst:30
msgid ""
"``arg_parser``: Экземпляр ``ArgParser``, отвечающий за парсинг аргументов"
" командной строки при запуске скрипта (не путать с командами в "
"интерактивном режиме)."
msgstr ""
"``arg_parser``: ``ArgParser`` instance responsible for parsing command-"
"line arguments at script startup (not to be confused with commands in "
"interactive mode)."
#: ../../root/api/orchestrator/index.rst:31
msgid ""
"``custom_providers``: Список пользовательских провайдеров "
"``dishka.Provider`` для добавления ваших сервисов (например, подключений "
"к БД или API-клиентов) в di-контейнер."
msgstr ""
"``custom_providers``: List of custom ``dishka.Provider`` providers for "
"adding your services (e.g., database connections or API clients) to the "
"DI container."
#: ../../root/api/orchestrator/index.rst:32
msgid ""
"``auto_inject_handlers``: Если **True** (по умолчанию), ``dishka`` "
"автоматически внедрит зависимости в обработчики команд, инспектируя их "
"сигнатуры."
msgstr ""
"``auto_inject_handlers``: If **True** (default), ``dishka`` will "
"automatically inject dependencies into command handlers by inspecting "
"their signatures."
#: ../../root/api/orchestrator/index.rst:37
msgid "Основные методы"
msgstr "Main Methods"
#: ../../root/api/orchestrator/index.rst:41
msgid ""
"Это главный метод, который запускает приложение. Он запускает бесконечный"
" цикл ввода -> вывода."
msgstr ""
"This is the main method that starts the application. It launches an "
"infinite input -> output loop."
#: ../../root/api/orchestrator/index.rst
msgid "Parameters"
msgstr "Parameters"
#: ../../root/api/orchestrator/index.rst:43
msgid "Экземпляр ``App``, который будет запущен."
msgstr "``App`` instance to be launched."
#: ../../root/api/orchestrator/index.rst:48
msgid "Назначение и использование"
msgstr "Purpose and Usage"
#: ../../root/api/orchestrator/index.rst:50
msgid ""
"``Orchestrator`` абстрагирует сложность, связанную с настройкой DI и "
"парсингом стартовых аргументов."
msgstr ""
"``Orchestrator`` abstracts the complexity associated with setting up DI "
"and parsing startup arguments."
#: ../../root/api/orchestrator/index.rst:52
msgid ""
"Такой подход разделяет ответственности: ``App`` отвечает за логику "
"интерактивной сессии, а ``Orchestrator`` — за подготовку окружения и "
"запуск приложения."
msgstr ""
"This approach separates responsibilities: ``App`` is responsible for "
"interactive session logic, while ``Orchestrator`` handles environment "
"preparation and application launch."
#: ../../root/api/orchestrator/index.rst:54
msgid "**Пример использования:**"
msgstr "**Usage example:**"
@@ -0,0 +1,185 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/response.rst:4
msgid "Response"
msgstr "Response"
#: ../../root/api/response.rst:6
msgid ""
"``Response`` — это объект, который передаётся в обработчик команды. Он "
"создаётся автоматически при обработке пользовательского ввода и содержит "
"статус валидации, введённые флаги."
msgstr ""
"``Response`` is an object that is passed to the command handler. It is created "
"automatically when processing user input and contains validation status and entered flags."
#: ../../root/api/response.rst:11
msgid ""
"Документация по :ref:`InputFlags <root_api_command_input_flags>` — "
"коллекция введённых флагов команды."
msgstr ""
"Documentation for :ref:`InputFlags <root_api_command_input_flags>` — collection of "
"entered command flags."
#: ../../root/api/response.rst:13
msgid ""
"Документация по :ref:`ResponseStatus <root_api_response_status>` — "
"статусы валидации флагов команды."
msgstr ""
"Documentation for :ref:`ResponseStatus <root_api_response_status>` — command flag "
"validation statuses."
#: ../../root/api/response.rst:15
msgid ""
"Документация по :ref:`InputFlag <root_api_command_input_flag>` — "
"отдельный введённый флаг."
msgstr ""
"Documentation for :ref:`InputFlag <root_api_command_input_flag>` — individual "
"entered flag."
#: ../../root/api/response.rst:20
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/response.rst:30
msgid "Создаёт новый объект ответа."
msgstr "Creates a new response object."
#: ../../root/api/response.rst:32
msgid ""
"``status``: Общий статус валидации флагов из перечисления "
"``ResponseStatus``."
msgstr "``status``: Overall flag validation status from the ``ResponseStatus`` enumeration."
#: ../../root/api/response.rst:33
msgid ""
"``input_flags``: Коллекция введённых флагов (``InputFlags``). По "
"умолчанию — пустая."
msgstr "``input_flags``: Collection of entered flags (``InputFlags``). Empty by default."
#: ../../root/api/response.rst:36
msgid ""
"Экземпляры этого класса не предназначены для прямого создания. Они "
"автоматически формируются системой и передаются в обработчик команды в "
"качестве первого обязательного аргумента."
msgstr ""
"Instances of this class are not intended for direct creation. They are automatically "
"formed by the system and passed to the command handler as the first required argument."
#: ../../root/api/response.rst:38
msgid "**Атрибуты:**"
msgstr "**Attributes:**"
#: ../../root/api/response.rst:43
msgid ""
"Общий статус валидации всех флагов команды (``ResponseStatus``). "
"Указывает, были ли среди введённых флагов некорректные или "
"незарегистрированные."
msgstr ""
"Overall validation status of all command flags (``ResponseStatus``). Indicates "
"whether there were any incorrect or unregistered flags among the entered ones."
#: ../../root/api/response.rst:48
msgid ""
"Коллекция всех флагов, переданных с командой (``InputFlags``). Содержит "
"все обработанные флаги с их значениями и статусами валидации."
msgstr ""
"Collection of all flags passed with the command (``InputFlags``). Contains all "
"processed flags with their values and validation statuses."
#: ../../root/api/response.rst:50
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/response.rst:59
msgid "Работа с флагами"
msgstr "Working with Flags"
#: ../../root/api/response.rst:61
msgid ""
"``Response`` предоставляет доступ к введённым флагам через атрибут "
"``input_flags``. Вы можете проверять их наличие, получать значения и "
"статусы валидации."
msgstr ""
"``Response`` provides access to entered flags through the ``input_flags`` attribute. "
"You can check their presence, get values, and validation statuses."
#: ../../root/api/response.rst:63
msgid "**Пример работы с флагами:**"
msgstr "**Example of working with flags:**"
#: ../../root/api/response.rst:74
msgid "ResponseStatus"
msgstr "ResponseStatus"
#: ../../root/api/response.rst:76
msgid ""
"``ResponseStatus`` — это перечисление, которое определяет общий статус "
"валидации всех флагов команды. Используется в атрибуте ``status`` объекта"
" ``Response``."
msgstr ""
"``ResponseStatus`` is an enumeration that defines the overall validation status of "
"all command flags. Used in the ``status`` attribute of the ``Response`` object."
#: ../../root/api/response.rst:79
msgid "ALL_FLAGS_VALID"
msgstr ""
#: ../../root/api/response.rst:86
msgid ""
"Все введённые флаги прошли валидацию. Нет ни некорректных, ни "
"незарегистрированных флагов."
msgstr ""
"All entered flags passed validation. There are no incorrect or unregistered flags."
#: ../../root/api/response.rst:89
msgid "UNDEFINED_FLAGS"
msgstr ""
#: ../../root/api/response.rst:96
msgid ""
"Среди введённых флагов есть незарегистрированные, но нет флагов с "
"некорректными значениями."
msgstr ""
"Among the entered flags, there are unregistered ones, but no flags with incorrect values."
#: ../../root/api/response.rst:99
msgid "INVALID_VALUE_FLAGS"
msgstr ""
#: ../../root/api/response.rst:106
msgid ""
"Среди введённых флагов есть флаги с некорректными значениями, но нет "
"незарегистрированных."
msgstr ""
"Among the entered flags, there are flags with incorrect values, but no unregistered ones."
#: ../../root/api/response.rst:109
msgid "UNDEFINED_AND_INVALID_FLAGS"
msgstr ""
#: ../../root/api/response.rst:116
msgid ""
"Среди введённых флагов есть как незарегистрированные, так и флаги с "
"некорректными значениями."
msgstr ""
"Among the entered flags, there are both unregistered flags and flags with incorrect values."
@@ -0,0 +1,186 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/api/router.rst:4
msgid "Router"
msgstr ""
#: ../../root/api/router.rst:6
msgid ""
"``Router`` — это основной строительный блок для организации логики в "
"приложении. Его задача — группировать связанные команды и их обработчики."
" Каждый роутер представляет собой логический контейнер для определённого "
"набора функций."
msgstr ""
"``Router`` is the main building block for organizing logic in an "
"application. Its purpose is to group related commands and their handlers. "
"Each router represents a logical container for a specific set of functions."
#: ../../root/api/router.rst:8
msgid ""
"Например, в приложении для управления пользователями один роутер может "
"отвечать за аутентификацию (``login``, ``logout``), а другой — за "
"операции с профилем (``profile-show``, ``profile-edit``)."
msgstr ""
"For example, in a user management application, one router can handle "
"authentication (``login``, ``logout``), while another handles profile "
"operations (``profile-show``, ``profile-edit``)."
#: ../../root/api/router.rst:13
msgid "Инициализация"
msgstr "Initialization"
#: ../../root/api/router.rst:21
msgid "Создаёт новый экземпляр роутера."
msgstr "Creates a new router instance."
#: ../../root/api/router.rst:23
msgid ""
"``title``: Необязательный заголовок для группы команд. Отображается в "
"списке доступных команд, помогая пользователю ориентироваться."
msgstr ""
"``title``: Optional title for the command group. Displayed in the list of "
"available commands to help users navigate."
#: ../../root/api/router.rst:24
msgid ""
"``disable_redirect_stdout``: Если ``True``, отключает перехват ``stdout``"
" для всех команд этого роутера. Это необходимо для интерактивных команд "
"(например, с ``input()``). При отключении перехвата автоматически "
"используется статическая разделительная линия. Подробнее см. в разделе "
":ref:`Переопределение стандартного вывода <root_redirect_stdout>`."
msgstr ""
"``disable_redirect_stdout``: If ``True``, disables ``stdout`` capture for "
"all commands in this router. This is necessary for interactive commands "
"(e.g., with ``input()``). When capture is disabled, a static separator line "
"is automatically used. See :ref:`Overriding standard output <root_redirect_stdout>` "
"for more details."
#: ../../root/api/router.rst:29
msgid "Регистрация команд"
msgstr "Command Registration"
#: ../../root/api/router.rst:31
msgid ""
"Для регистрации команды и привязки к ней обработчика используется "
"декоратор ``@command``."
msgstr ""
"The ``@command`` decorator is used to register a command and bind a handler to it."
#: ../../root/api/router.rst:35
msgid "Декоратор для регистрации функции как обработчика команды."
msgstr "Decorator for registering a function as a command handler."
#: ../../root/api/router.rst
msgid "Parameters"
msgstr "Parameters"
#: ../../root/api/router.rst:37
msgid ""
"Экземпляр ``Command``, описывающий триггер, флаги и описание команды. "
"Может быть строкой, которая станет триггером (без возможности настройки "
"флагов и описания)."
msgstr ""
"A ``Command`` instance describing the trigger, flags, and command description. "
"Can be a string that will become the trigger (without the ability to configure "
"flags and description)."
#: ../../root/api/router.rst:39
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/api/router.rst:48
msgid "Системный роутер"
msgstr "System Router"
#: ../../root/api/router.rst:50
msgid ""
"``Argenta`` поставляется со встроенным системным роутером, который "
"автоматически подключается к каждому приложению."
msgstr ""
"``Argenta`` comes with a built-in system router that is automatically "
"connected to every application."
#: ../../root/api/router.rst:55
msgid ""
"Предопределённый экземпляр ``Router`` с базовыми системными командами (по"
" умолчанию — команда выхода). Имеет заголовок **«System points:»**, "
"который можно переопределить в ``App``."
msgstr ""
"A predefined ``Router`` instance with basic system commands (by default, "
"the exit command). Has the title **\"System points:\"**, which can be "
"overridden in ``App``."
#: ../../root/api/router.rst:57
msgid ""
"Вы можете добавлять свои команды в этот роутер. Для этого импортируйте "
"``argenta.router.defaults.system_router`` и используйте его декоратор "
"``@command``."
msgstr ""
"You can add your own commands to this router. To do this, import "
"``argenta.router.defaults.system_router`` and use its ``@command`` decorator."
#: ../../root/api/router.rst:62
msgid "Возможные исключения"
msgstr "Possible Exceptions"
#: ../../root/api/router.rst:64
msgid ""
"При регистрации команд и флагов в ``Router`` могут возникнуть следующие "
"исключения:"
msgstr ""
"The following exceptions may occur when registering commands and flags in ``Router``:"
#: ../../root/api/router.rst:68
msgid ""
"Выбрасывается, если триггер команды в ``Command`` содержит пробелы. "
"Триггеры должны быть одним словом."
msgstr ""
"Raised if the command trigger in ``Command`` contains spaces. "
"Triggers must be a single word."
#: ../../root/api/router.rst:70
msgid "**Неправильно:** ``Command(\"add user\")``"
msgstr "**Incorrect:** ``Command(\"add user\")``"
#: ../../root/api/router.rst:72
msgid "**Правильно:** ``Command(\"add-user\")``"
msgstr "**Correct:** ``Command(\"add-user\")``"
#: ../../root/api/router.rst:76
msgid ""
"Возникает, если при определении флагов для команды были использованы "
"дублирующиеся имена. Имена флагов в рамках одной команды должны быть "
"уникальны."
msgstr ""
"Raised if duplicate names were used when defining flags for a command. "
"Flag names within a single command must be unique."
#: ../../root/api/router.rst:78
msgid "**Пример, вызывающий исключение:**"
msgstr "**Example that raises an exception:**"
#: ../../root/api/router.rst:90
msgid ""
"Возникает, если обработчик команды не принимает обязательный аргумент "
"``Response``."
msgstr ""
"Raised if the command handler does not accept the required ``Response`` argument."
@@ -0,0 +1,189 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/code_of_conduct.rst:4
msgid "Правила сообщества"
msgstr "Community Guidelines"
#: ../../root/code_of_conduct.rst:7
msgid "Наше обязательство"
msgstr "Our Pledge"
#: ../../root/code_of_conduct.rst:9
msgid ""
"В целях создания открытой и гостеприимной атмосферы мы, как участники и "
"мейнтейнеры, обязуемся сделать участие в нашем проекте и сообществе "
"свободным от преследований для всех, независимо от возраста, "
"телосложения, инвалидности, этнической принадлежности, уровня опыта, "
"образования, социально-экономического статуса, национальности, внешности,"
" расы или религии."
msgstr ""
"In the interest of fostering an open and welcoming environment, we as "
"contributors and maintainers pledge to make participation in our project and "
"community a harassment-free experience for everyone, regardless of age, body "
"size, disability, ethnicity, level of experience, education, socio-economic "
"status, nationality, personal appearance, race, or religion."
#: ../../root/code_of_conduct.rst:14
msgid "Наши стандарты"
msgstr "Our Standards"
#: ../../root/code_of_conduct.rst:16
msgid "Примеры поведения, которые способствуют созданию позитивной среды:"
msgstr "Examples of behavior that contributes to creating a positive environment:"
#: ../../root/code_of_conduct.rst:18
msgid "Проявление эмпатии и доброты по отношению к другим."
msgstr "Demonstrating empathy and kindness toward other people."
#: ../../root/code_of_conduct.rst:19
msgid "Уважение к различным мнениям, точкам зрения и опыту."
msgstr "Being respectful of differing opinions, viewpoints, and experiences."
#: ../../root/code_of_conduct.rst:20
msgid "Предоставление и тактичное принятие конструктивной обратной связи."
msgstr "Giving and gracefully accepting constructive feedback."
#: ../../root/code_of_conduct.rst:21
msgid ""
"Принятие ответственности и извинения перед теми, кого затронули наши "
"ошибки, а также извлечение уроков из этого опыта."
msgstr ""
"Accepting responsibility and apologizing to those affected by our mistakes, "
"and learning from the experience."
#: ../../root/code_of_conduct.rst:22
msgid "Фокус на том, что лучше для всего сообщества."
msgstr "Focusing on what is best for the overall community."
#: ../../root/code_of_conduct.rst:24
msgid "Примеры недопустимого поведения включают:"
msgstr "Examples of unacceptable behavior include:"
#: ../../root/code_of_conduct.rst:26
msgid ""
"Троллинг, оскорбительные или уничижительные комментарии, а также личные "
"или политические нападки."
msgstr ""
"Trolling, insulting or derogatory comments, and personal or political attacks."
#: ../../root/code_of_conduct.rst:27
msgid "Публичное или частное преследование."
msgstr "Public or private harassment."
#: ../../root/code_of_conduct.rst:28
msgid ""
"Публикация личной информации других лиц (например, физического или "
"электронного адреса) без их явного разрешения."
msgstr ""
"Publishing others' private information, such as a physical or email address, "
"without their explicit permission."
#: ../../root/code_of_conduct.rst:29
msgid ""
"Любое другое поведение, которое можно обоснованно считать неуместным в "
"профессиональной среде."
msgstr ""
"Other conduct which could reasonably be considered inappropriate in a "
"professional setting."
#: ../../root/code_of_conduct.rst:34
msgid "Наши обязанности"
msgstr "Our Responsibilities"
#: ../../root/code_of_conduct.rst:36
msgid ""
"Мейнтейнеры проекта несут ответственность за разъяснение и обеспечение "
"соблюдения стандартов приемлемого поведения и предпримут справедливые "
"корректирующие действия в ответ на любые случаи неприемлемого поведения."
msgstr ""
"Project maintainers are responsible for clarifying and enforcing standards of "
"acceptable behavior and will take appropriate and fair corrective action in "
"response to any instances of unacceptable behavior."
#: ../../root/code_of_conduct.rst:38
msgid ""
"Мейнтейнеры проекта имеют право и обязанность удалять, редактировать или "
"отклонять комментарии, коммиты, код, правки в вики, задачи и другие "
"вклады, которые не соответствуют настоящему Кодексу поведения, а также "
"временно или навсегда блокировать любого участника за поведение, которое "
"они сочтут неуместным, угрожающим, оскорбительным или вредным."
msgstr ""
"Project maintainers have the right and responsibility to remove, edit, or reject "
"comments, commits, code, wiki edits, issues, and other contributions that are not "
"aligned with this Code of Conduct, and will ban temporarily or permanently any "
"contributor for behaviors that they deem inappropriate, threatening, offensive, or harmful."
#: ../../root/code_of_conduct.rst:43
msgid "Сфера применения"
msgstr "Scope"
#: ../../root/code_of_conduct.rst:45
msgid ""
"Настоящий Кодекс поведения применяется как в рамках проекта, так и в "
"публичных пространствах, когда человек официально представляет "
"сообщество. Примеры такого представительства включают использование "
"официального адреса электронной почты, публикации через официальный "
"аккаунт в социальных сетях или выступление в качестве назначенного "
"представителя на онлайн- или офлайн-мероприятии."
msgstr ""
"This Code of Conduct applies both within project spaces and in public spaces "
"when an individual is officially representing the community. Examples of "
"representing the community include using an official project email address, "
"posting via an official social media account, or acting as an appointed "
"representative at an online or offline event."
#: ../../root/code_of_conduct.rst:50
msgid "Обеспечение соблюдения"
msgstr "Enforcement"
#: ../../root/code_of_conduct.rst:52
msgid ""
"О случаях оскорбительного, преследовательского или иного неприемлемого "
"поведения можно сообщить команде проекта по адресу "
"kolo.is.main@gmail.com. Все жалобы будут рассмотрены и расследованы "
"оперативно и справедливо."
msgstr ""
"Instances of abusive, harassing, or otherwise unacceptable behavior may be "
"reported to the project team at kolo.is.main@gmail.com. All complaints will be "
"reviewed and investigated promptly and fairly."
#: ../../root/code_of_conduct.rst:54
msgid "Команда проекта обязуется уважать частную жизнь и безопасность заявителя."
msgstr "The project team is obligated to respect the privacy and security of the reporter."
#: ../../root/code_of_conduct.rst:59
msgid "Атрибуция"
msgstr "Attribution"
#: ../../root/code_of_conduct.rst:61
msgid ""
"Настоящий Кодекс поведения адаптирован из `Contributor Covenant "
"<https://www.contributor-covenant.org/>`__, версии `1.4 <https://www"
".contributor-covenant.org/version/1/4/code-of-"
"conduct/code_of_conduct.md>`__ и `2.0 <https://www.contributor-"
"covenant.org/version/2/0/code_of_conduct/code_of_conduct.md>`__."
msgstr ""
"This Code of Conduct is adapted from the `Contributor Covenant "
"<https://www.contributor-covenant.org/>`__, version `1.4 <https://www"
".contributor-covenant.org/version/1/4/code-of-"
"conduct/code_of_conduct.md>`__ and `2.0 <https://www.contributor-"
"covenant.org/version/2/0/code_of_conduct/code_of_conduct.md>`__."
@@ -0,0 +1,739 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-03 13:42+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/contributing.rst:4
msgid "Вклад в проект"
msgstr "Contributing to the Project"
#: ../../root/contributing.rst:8
msgid "Прежде всего, спасибо, что уделили время для внесения своего вклада! ❤️"
msgstr "First of all, thank you for taking the time to contribute! ❤️"
#: ../../root/contributing.rst:10
msgid ""
"Мы приветствуем и ценим любой вклад. Пожалуйста, прочтите соответствующий"
" раздел, прежде чем начать. Это облегчит работу мейнтейнеров и сделает "
"процесс более гладким для всех. Сообщество с нетерпением ждёт ваших идей!"
" 🎉"
msgstr ""
"We welcome and appreciate any contribution. Please read the relevant "
"section before getting started. This will make it easier for maintainers "
"and make the process smoother for everyone. The community is looking "
"forward to your ideas! 🎉"
#: ../../root/contributing.rst:14
msgid ""
"Если вам нравится проект, но у вас нет времени на активный вклад, вы "
"можете поддержать нас другими способами:"
msgstr ""
"If you like the project but don't have time to actively contribute, you "
"can support us in other ways:"
#: ../../root/contributing.rst:16
msgid "Поставить звезду на GitHub."
msgstr "Star the project on GitHub."
#: ../../root/contributing.rst:17
msgid "Написать о проекте в Twitter или других социальных сетях."
msgstr "Write about the project on Twitter or other social media."
#: ../../root/contributing.rst:18
msgid "Сослаться на проект в `README` вашего репозитория."
msgstr "Reference the project in your repository's `README`."
#: ../../root/contributing.rst:19
msgid "Упомянуть проект на митапах и рассказать о нём друзьям и коллегам."
msgstr ""
"Mention the project at meetups and tell your friends and colleagues about"
" it."
#: ../../root/contributing.rst:24
msgid "Содержание"
msgstr "Contents"
#: ../../root/contributing.rst:26
msgid ":ref:`Кодекс поведения <code-of-conduct>`"
msgstr ":ref:`Code of Conduct <code-of-conduct>`"
#: ../../root/contributing.rst:27
msgid ":ref:`У меня есть вопрос <i-have-a-question>`"
msgstr ":ref:`I Have a Question <i-have-a-question>`"
#: ../../root/contributing.rst:28
msgid ":ref:`Я хочу внести вклад <i-want-to-contribute>`"
msgstr ":ref:`I Want to Contribute <i-want-to-contribute>`"
#: ../../root/contributing.rst:29
msgid ":ref:`Сообщение об ошибках <reporting-bugs>`"
msgstr ":ref:`Reporting Bugs <reporting-bugs>`"
#: ../../root/contributing.rst:30
msgid ":ref:`Предложение улучшений <suggesting-enhancements>`"
msgstr ":ref:`Suggesting Enhancements <suggesting-enhancements>`"
#: ../../root/contributing.rst:31
msgid ":ref:`Ваш первый вклад в код <your-first-code-contribution>`"
msgstr ":ref:`Your First Code Contribution <your-first-code-contribution>`"
#: ../../root/contributing.rst:32
msgid ":ref:`Улучшение документации <improving-documentation>`"
msgstr ":ref:`Improving Documentation <improving-documentation>`"
#: ../../root/contributing.rst:33
msgid ":ref:`Руководства по стилю <styleguide>`"
msgstr ":ref:`Style Guides <styleguide>`"
#: ../../root/contributing.rst:34
msgid ":ref:`Присоединяйтесь к команде проекта <join-the-project-team>`"
msgstr ":ref:`Join the Project Team <join-the-project-team>`"
#: ../../root/contributing.rst:39
msgid "Кодекс поведения"
msgstr "Code of Conduct"
#: ../../root/contributing.rst:41
msgid ""
"Этот проект и все его участники руководствуются :ref:`Кодексом поведения "
"Argenta <root_code_of_conduct>`. Участвуя, вы обязуетесь соблюдать этот "
"кодекс. Пожалуйста, сообщайте о недопустимом поведении."
msgstr ""
"This project and all its participants are governed by the :ref:`Argenta "
"Code of Conduct <root_code_of_conduct>`. By participating, you are "
"expected to uphold this code. Please report unacceptable behavior."
#: ../../root/contributing.rst:49
msgid "У меня есть вопрос"
msgstr "I Have a Question"
#: ../../root/contributing.rst:53
msgid ""
"Прежде чем задать вопрос, пожалуйста, ознакомьтесь с `документацией "
"<https://argenta.readthedocs.io>`_."
msgstr ""
"Before asking a question, please check the `documentation "
"<https://argenta.readthedocs.io>`_."
#: ../../root/contributing.rst:55
msgid ""
"Поищите ответ в существующих `Issues "
"<https://github.com/koloideal/Argenta/issues>`_. Если вы нашли похожий "
"вопрос, но всё ещё нуждаетесь в разъяснениях, можете написать в нём. "
"Также рекомендуем поискать ответ в интернете."
msgstr ""
"Search for an answer in existing `Issues "
"<https://github.com/koloideal/Argenta/issues>`_. If you found a similar "
"question but still need clarification, you can comment on it. We also "
"recommend searching the internet for an answer."
#: ../../root/contributing.rst:57
msgid ""
"Если ответа не нашлось, создайте новый `Issue "
"<https://github.com/koloideal/Argenta/issues/new>`_ и предоставьте как "
"можно больше контекста, включая версии проекта и платформы."
msgstr ""
"If you can't find an answer, create a new `Issue "
"<https://github.com/koloideal/Argenta/issues/new>`_ and provide as much "
"context as possible, including project and platform versions."
#: ../../root/contributing.rst:59
msgid "Мы займемся вашей задачей как можно скорее."
msgstr "We will address your issue as soon as possible."
#: ../../root/contributing.rst:66
msgid "Я хочу внести вклад"
msgstr "I Want to Contribute"
#: ../../root/contributing.rst:69
msgid "Правовое уведомление"
msgstr "Legal Notice"
#: ../../root/contributing.rst:72
msgid ""
"Внося вклад в этот проект, вы подтверждаете, что являетесь автором 100% "
"контента, обладаете необходимыми правами на него и соглашаетесь, что он "
"может распространяться под лицензией проекта."
msgstr ""
"By contributing to this project, you confirm that you are the author of "
"100% of the content, have the necessary rights to it, and agree that it "
"may be distributed under the project's license."
#: ../../root/contributing.rst:77
msgid "Сообщение об ошибках"
msgstr "Reporting Bugs"
#: ../../root/contributing.rst:80
msgid "Перед отправкой отчета об ошибке"
msgstr "Before Submitting a Bug Report"
#: ../../root/contributing.rst:81
msgid ""
"Хороший отчёт об ошибке не должен заставлять других вытягивать из вас "
"дополнительную информацию. Пожалуйста, тщательно всё изучите, соберите "
"информацию и подробно опишите проблему. Это поможет нам исправить её как "
"можно быстрее."
msgstr ""
"A good bug report shouldn't require others to extract additional "
"information from you. Please investigate thoroughly, gather information, "
"and describe the problem in detail. This will help us fix it as quickly "
"as possible."
#: ../../root/contributing.rst:83 ../../root/contributing.rst:124
msgid "Убедитесь, что вы используете последнюю версию."
msgstr "Make sure you are using the latest version."
#: ../../root/contributing.rst:84
msgid ""
"Убедитесь, что проблема действительно является ошибкой, а не вызвана, "
"например, использованием несовместимых версий окружения. Прочтите "
"`документацию <https://argenta.readthedocs.io>`_ и, если нужна поддержка,"
" загляните в раздел :ref:`У меня есть вопрос <i-have-a-question>`."
msgstr ""
"Make sure the issue is actually a bug and not caused by, for example, "
"using incompatible environment versions. Read the `documentation "
"<https://argenta.readthedocs.io>`_ and, if you need support, check out "
"the :ref:`I Have a Question <i-have-a-question>` section."
#: ../../root/contributing.rst:85
msgid ""
"Проверьте, нет ли уже отчёта о вашей ошибке в `трекере "
"<https://github.com/koloideal/Argenta/issues?q=label%3Abug>`_."
msgstr ""
"Check if there is already a report about your bug in the `tracker "
"<https://github.com/koloideal/Argenta/issues?q=label%3Abug>`_."
#: ../../root/contributing.rst:86
msgid ""
"Также поищите в интернете (включая `Stack Overflow`), чтобы узнать, "
"обсуждалась ли проблема за пределами `GitHub`."
msgstr ""
"Also search the internet (including `Stack Overflow`) to see if the issue"
" has been discussed outside of `GitHub`."
#: ../../root/contributing.rst:87
msgid "Соберите информацию об ошибке:"
msgstr "Collect information about the bug:"
#: ../../root/contributing.rst:88
msgid "Трассировка стека."
msgstr "Stack trace."
#: ../../root/contributing.rst:89
msgid "ОС, платформа и версия (Windows, Linux, macOS, x86, ARM)."
msgstr "OS, platform, and version (Windows, Linux, macOS, x86, ARM)."
#: ../../root/contributing.rst:90
msgid ""
"Версия интерпретатора, компилятора, SDK, среды выполнения, менеджера "
"пакетов и т.д."
msgstr ""
"Version of interpreter, compiler, SDK, runtime environment, package "
"manager, etc."
#: ../../root/contributing.rst:91
msgid "Входные данные и полученный результат."
msgstr "Input data and output received."
#: ../../root/contributing.rst:92
msgid ""
"Можете ли вы надёжно воспроизвести проблему? Воспроизводится ли она на "
"старых версиях?"
msgstr "Can you reliably reproduce the issue? Does it reproduce on older versions?"
#: ../../root/contributing.rst:95
msgid "Как мне отправить хороший отчет об ошибке?"
msgstr "How Do I Submit a Good Bug Report?"
#: ../../root/contributing.rst:98
msgid ""
"Никогда не сообщайте о проблемах безопасности, уязвимостях или ошибках с "
"конфиденциальной информацией в публичном трекере. Для этого используйте "
"электронную почту."
msgstr ""
"Never report security issues, vulnerabilities, or bugs with sensitive "
"information in the public tracker. Use email for this purpose."
#: ../../root/contributing.rst:100
msgid ""
"Мы используем `GitHub Issues` для отслеживания ошибок. Если вы "
"столкнулись с проблемой:"
msgstr "We use `GitHub Issues` to track bugs. If you encounter a problem:"
#: ../../root/contributing.rst:102
msgid ""
"Откройте новый `Issue "
"<https://github.com/koloideal/Argenta/issues/new>`_. На этом этапе не "
"нужно присваивать ему метки."
msgstr ""
"Open a new `Issue <https://github.com/koloideal/Argenta/issues/new>`_. At"
" this stage, you don't need to assign labels to it."
#: ../../root/contributing.rst:103
msgid "Объясните ожидаемое и фактическое поведение."
msgstr "Explain the expected and actual behavior."
#: ../../root/contributing.rst:104
msgid ""
"Предоставьте как можно больше контекста и опишите **шаги для "
"воспроизведения**, чтобы проблему можно было воссоздать. Лучше всего "
"изолировать её и создать минимальный тестовый пример."
msgstr ""
"Provide as much context as possible and describe **reproduction steps** "
"so the issue can be recreated. It's best to isolate it and create a "
"minimal test case."
#: ../../root/contributing.rst:105
msgid "Предоставьте информацию, которую вы собрали в предыдущем разделе."
msgstr "Provide the information you collected in the previous section."
#: ../../root/contributing.rst:107
msgid "После того, как задача будет создана:"
msgstr "Once the issue is created:"
#: ../../root/contributing.rst:109
msgid "Команда проекта присвоит задаче соответствующую метку."
msgstr "The project team will assign an appropriate label to the issue."
#: ../../root/contributing.rst:110
msgid ""
"Член команды попытается воспроизвести проблему. Если шагов нет или они не"
" приводят к результату, команда попросит вас предоставить их и пометит "
"задачу как `needs-repro`. Такие задачи не будут рассматриваться до тех "
"пор, пока проблема не будет воспроизведена."
msgstr ""
"A team member will try to reproduce the issue. If there are no steps or "
"they don't lead to the result, the team will ask you to provide them and "
"mark the issue as `needs-repro`. Such issues will not be addressed until "
"the problem is reproduced."
#: ../../root/contributing.rst:111
msgid ""
"Если проблема будет воспроизведена, она будет помечена как `needs-fix` "
"(и, возможно, другими метками, например `critical`), после чего её сможет"
" взять в работу :ref:`любой желающий <your-first-code-contribution>`."
msgstr ""
"If the issue is reproduced, it will be marked as `needs-fix` (and "
"possibly with other labels, such as `critical`), after which :ref:`anyone"
" willing <your-first-code-contribution>` can take it on."
#: ../../root/contributing.rst:118
msgid "Предложение улучшений"
msgstr "Suggesting Enhancements"
#: ../../root/contributing.rst:120
msgid ""
"Этот раздел поможет вам отправить предложение по улучшению `Argenta`, "
"**включая как новые функции, так и незначительные улучшения**. Следование"
" этим рекомендациям поможет мейнтейнерам и сообществу лучше понять вашу "
"идею."
msgstr ""
"This section will help you submit an enhancement suggestion for "
"`Argenta`, **including both new features and minor improvements**. "
"Following these guidelines will help maintainers and the community better"
" understand your idea."
#: ../../root/contributing.rst:123
msgid "Перед отправкой предложения по улучшению"
msgstr "Before Submitting an Enhancement Suggestion"
#: ../../root/contributing.rst:125
msgid ""
"Внимательно прочтите `документацию <https://argenta.readthedocs.io>`_ и "
"убедитесь, что предлагаемая функциональность ещё не реализована "
"(возможно, через конфигурацию)."
msgstr ""
"Carefully read the `documentation <https://argenta.readthedocs.io>`_ and "
"make sure the proposed functionality is not already implemented (perhaps "
"through configuration)."
#: ../../root/contributing.rst:126
msgid ""
"Выполните `поиск <https://github.com/koloideal/Argenta/issues>`_, чтобы "
"проверить, не предлагалось ли это улучшение ранее. Если да, добавьте "
"комментарий к существующей задаче."
msgstr ""
"Perform a `search <https://github.com/koloideal/Argenta/issues>`_ to "
"check if this enhancement has been suggested before. If so, add a comment"
" to the existing issue."
#: ../../root/contributing.rst:127
msgid ""
"Определите, соответствует ли ваша идея масштабу и целям проекта. Вам "
"предстоит убедительно доказать её пользу. Мы хотим видеть функции, "
"которые будут полезны большинству пользователей. Если ваша идея "
"ориентирована на узкий круг, рассмотрите возможность создания плагина."
msgstr ""
"Determine if your idea fits the scope and goals of the project. You will "
"need to convincingly demonstrate its value. We want to see features that "
"will be useful to most users. If your idea targets a narrow audience, "
"consider creating a plugin."
#: ../../root/contributing.rst:130
msgid "Как мне отправить хорошее предложение по улучшению?"
msgstr "How Do I Submit a Good Enhancement Suggestion?"
#: ../../root/contributing.rst:131
msgid ""
"Предложения по улучшению отслеживаются в `GitHub Issues "
"<https://github.com/koloideal/Argenta/issues>`_."
msgstr ""
"Enhancement suggestions are tracked in `GitHub Issues "
"<https://github.com/koloideal/Argenta/issues>`_."
#: ../../root/contributing.rst:133
msgid ""
"Используйте **чёткий и описательный заголовок**, чтобы идентифицировать "
"предложение."
msgstr "Use a **clear and descriptive title** to identify the suggestion."
#: ../../root/contributing.rst:134
msgid "Предоставьте **пошаговое и подробное описание** предлагаемого улучшения."
msgstr ""
"Provide a **step-by-step and detailed description** of the proposed "
"enhancement."
#: ../../root/contributing.rst:135
msgid ""
"**Опишите текущее поведение** и **объясните, какое вы ожидали увидеть "
"вместо этого** и почему. Здесь же можно указать, какие альтернативы вам "
"не подходят."
msgstr ""
"**Describe the current behavior** and **explain what you expected to see "
"instead** and why. You can also mention which alternatives don't work for"
" you."
#: ../../root/contributing.rst:136
msgid ""
"**Приложите скриншоты или видео**, которые помогут продемонстрировать "
"шаги или указать на часть, к которой относится предложение."
msgstr ""
"**Attach screenshots or videos** that help demonstrate the steps or point"
" to the part the suggestion relates to."
#: ../../root/contributing.rst:137
msgid ""
"**Объясните, почему это улучшение будет полезно** большинству "
"пользователей `Argenta`. Вы также можете указать на другие проекты, "
"которые решили эту проблему и могут послужить источником вдохновения."
msgstr ""
"**Explain why this enhancement would be useful** to most `Argenta` users."
" You can also point to other projects that have solved this problem and "
"could serve as inspiration."
#: ../../root/contributing.rst:144
msgid "Ваш первый вклад в код"
msgstr "Your First Code Contribution"
#: ../../root/contributing.rst:146
msgid ""
"Не знаете, с чего начать? Посмотрите на задачи с метками `good first "
"issue` и `help wanted` в нашем репозитории на `GitHub`. Они хорошо "
"подходят для новичков."
msgstr ""
"Don't know where to start? Look at issues labeled `good first issue` and "
"`help wanted` in our `GitHub` repository. They are well-suited for "
"beginners."
#: ../../root/contributing.rst:148
msgid ""
"Чтобы начать, настройте локальное окружение для разработки, следуя этим "
"шагам."
msgstr ""
"To get started, set up a local development environment by following these"
" steps."
#: ../../root/contributing.rst:150
msgid "Сделайте форк репозитория ``Argenta`` на ``GitHub``."
msgstr "Fork the ``Argenta`` repository on ``GitHub``."
#: ../../root/contributing.rst:151
msgid "Клонируйте ваш форк на локальную машину:"
msgstr "Clone your fork to your local machine:"
#: ../../root/contributing.rst:158
msgid "Создайте и активируйте виртуальное окружение."
msgstr "Create and activate a virtual environment."
#: ../../root/contributing.rst:170
msgid "Установите зависимости проекта, включая инструменты для разработки."
msgstr "Install project dependencies, including development tools."
#: ../../root/contributing.rst:176
msgid ""
"Создайте новую ветку для вашей функции или исправления. Используйте "
"описательное имя, например `fix/login-bug` или `feat/new-widget`."
msgstr ""
"Create a new branch for your feature or fix. Use a descriptive name, such"
" as `fix/login-bug` or `feat/new-widget`."
#: ../../root/contributing.rst:182
msgid ""
"Внесите свои изменения. Напишите код и не забудьте добавить или обновить "
"тесты."
msgstr "Make your changes. Write code and don't forget to add or update tests."
#: ../../root/contributing.rst:183
msgid "Запустите тесты, чтобы убедиться, что все работает корректно."
msgstr "Run tests to make sure everything works correctly."
#: ../../root/contributing.rst:189
msgid ""
"Сделайте коммит, следуя :ref:`нашему руководству по стилю <styleguide>`, "
"и отправьте изменения в ваш форк."
msgstr ""
"Commit following :ref:`our style guide <styleguide>` and push the changes to your fork."
#: ../../root/contributing.rst:197
msgid ""
"Откройте `Pull Request` из вашей ветки в ветку `main` официального "
"репозитория. Предоставьте чёткое описание проблемы и вашего решения. "
"Укажите номер связанной задачи, если она есть."
msgstr ""
"Open a `Pull Request` from your branch to the `main` branch of the "
"official repository. Provide a clear description of the problem and your "
"solution. Include the related issue number if there is one."
#: ../../root/contributing.rst:204
msgid "Улучшение документации"
msgstr "Improving Documentation"
#: ../../root/contributing.rst:206
msgid ""
"Хорошая документация крайне важна. Мы используем `Sphinx` для её "
"генерации из исходных файлов в директории `docs/`. Мы приветствуем любые "
"улучшения: от исправления опечатки до написания нового раздела."
msgstr ""
"Good documentation is crucial. We use `Sphinx` to generate it from source"
" files in the `docs/` directory. We welcome any improvements: from fixing"
" a typo to writing a new section."
#: ../../root/contributing.rst:210
msgid "Мы поддерживаем документацию на двух языках: русском и английском."
msgstr "We maintain documentation in two languages: Russian and English."
#: ../../root/contributing.rst:214
msgid ""
"Для инкапсуляции различных команд, необходимых для настройки и запуска "
"проекта мы используем ``just``, он же фигурирует в различных примерах в "
"документации, поэтому рекомендуем вам `установить его "
"<https://github.com/casey/just#installation>`_"
msgstr ""
"To encapsulate various commands needed for setting up and running the "
"project, we use ``just``, which also appears in various examples in the "
"documentation, so we recommend you `install it "
"<https://github.com/casey/just#installation>`_"
#: ../../root/contributing.rst:216
msgid ""
"Для улучшения документации вы можете следовать процессу, похожему на "
"внесение вклада в код:"
msgstr ""
"To improve documentation, you can follow a process similar to "
"contributing code:"
#: ../../root/contributing.rst:218
msgid ""
"Убедитесь, что ваше окружение для разработки настроено, как описано в "
"разделе :ref:`Ваш первый вклад в код <your-first-code-contribution>`."
msgstr ""
"Make sure your development environment is set up as described in the "
":ref:`Your First Code Contribution <your-first-code-contribution>` section."
#: ../../root/contributing.rst:219
msgid "Перейдите в директорию с документацией."
msgstr "Navigate to the documentation directory."
#: ../../root/contributing.rst:225
msgid ""
"Внесите изменения в **русскую** версию документации (`docs/index.rst` "
"и/или `docs/root/*`)."
msgstr ""
"Make changes to the **Russian** version of the documentation "
"(`docs/index.rst` and/or `docs/root/*`)."
#: ../../root/contributing.rst:226
msgid ""
"Чтобы собрать документацию локально в режиме автоматического ребилда и "
"увидеть изменения, выполните:"
msgstr ""
"To build the documentation locally in auto-rebuild mode and see the "
"changes, run:"
#: ../../root/contributing.rst:232
msgid ""
"Откройте `127.0.0.1:8000` в браузере, чтобы просмотреть сгенерированную "
"документацию."
msgstr "Open `127.0.0.1:8000` in your browser to view the generated documentation."
#: ../../root/contributing.rst:233
msgid ""
"После завершения работы над русской версией необходимо создать английский"
" перевод:"
msgstr ""
"After completing work on the Russian version, you need to create an "
"English translation:"
#: ../../root/contributing.rst:239
msgid ""
"После обновления шаблона обновите файлы перевода, расположенные в "
"`docs/locales/en/LC_MESSAGES/`."
msgstr ""
"After updating the template, update the translation files located in "
"`docs/locales/en/LC_MESSAGES/`."
#: ../../root/contributing.rst:240
msgid ""
"Когда изменения будут готовы, сделайте коммит и откройте `Pull Request`. "
"Используйте префикс `docs:` в сообщении коммита."
msgstr ""
"When the changes are ready, commit and open a `Pull Request`. Use the "
"`docs:` prefix in the commit message."
#: ../../root/contributing.rst:247
msgid "Руководства по стилю"
msgstr "Style Guides"
#: ../../root/contributing.rst:251
msgid "**Сообщения коммитов**"
msgstr "**Commit Messages**"
#: ../../root/contributing.rst:253
msgid ""
"Мы следуем спецификации `Conventional Commits "
"<https://www.conventionalcommits.org/en/v1.0.0/>`_. Это делает историю "
"проекта более читаемой и позволяет автоматически генерировать журнал "
"изменений."
msgstr ""
"We follow the `Conventional Commits "
"<https://www.conventionalcommits.org/en/v1.0.0/>`_ specification. This "
"makes the project history more readable and allows automatic changelog "
"generation."
#: ../../root/contributing.rst:255
msgid ""
"Каждое сообщение коммита состоит из **заголовка**, **тела** и **нижнего "
"колонтитула**."
msgstr "Each commit message consists of a **header**, **body**, and **footer**."
#: ../../root/contributing.rst:265
msgid "``<тип>`` должен быть одним из следующих:"
msgstr "``<type>`` must be one of the following:"
#: ../../root/contributing.rst:267
msgid "**feat**: Новая функция для пользователя."
msgstr "**feat**: A new feature for the user."
#: ../../root/contributing.rst:268
msgid "**fix**: Исправление ошибки для пользователя."
msgstr "**fix**: A bug fix for the user."
#: ../../root/contributing.rst:269
msgid "**docs**: Только изменения в документации."
msgstr "**docs**: Documentation changes only."
#: ../../root/contributing.rst:270
msgid ""
"**style**: Изменения, не влияющие на смысл кода (пробелы, форматирование "
"и т.д.)."
msgstr ""
"**style**: Changes that don't affect the meaning of the code (whitespace,"
" formatting, etc.)."
#: ../../root/contributing.rst:271
msgid ""
"**refactor**: Изменение кода, которое не исправляет ошибку и не добавляет"
" новую функцию."
msgstr "**refactor**: A code change that neither fixes a bug nor adds a feature."
#: ../../root/contributing.rst:272
msgid "**perf**: Изменение кода, улучшающее производительность."
msgstr "**perf**: A code change that improves performance."
#: ../../root/contributing.rst:273
msgid "**test**: Добавление недостающих тестов или исправление существующих."
msgstr "**test**: Adding missing tests or correcting existing tests."
#: ../../root/contributing.rst:274
msgid ""
"**chore**: Изменения в процессе сборки или вспомогательных инструментах и"
" библиотеках."
msgstr "**chore**: Changes to the build process or auxiliary tools and libraries."
#: ../../root/contributing.rst:277
msgid "Примеры"
msgstr "Examples"
#: ../../root/contributing.rst:278
msgid "Простое исправление: ``fix: correct typo in user authentication flow``"
msgstr "Simple fix: ``fix: correct typo in user authentication flow``"
#: ../../root/contributing.rst:281
msgid ""
"Новая функция с областью видимости: ``feat(api): add new endpoint for "
"user profiles``"
msgstr "New feature with scope: ``feat(api): add new endpoint for user profiles``"
#: ../../root/contributing.rst:289
msgid "Присоединяйтесь к команде проекта"
msgstr "Join the Project Team"
#: ../../root/contributing.rst:291
msgid ""
"Мы всегда ищем энтузиастов для присоединения к команде. Если вы являетесь"
" постоянным участником и продемонстрировали глубокое понимание целей и "
"архитектуры проекта, вы можете стать хорошим кандидатом на роль "
"мейнтейнера."
msgstr ""
"We are always looking for enthusiasts to join the team. If you are a "
"regular contributor and have demonstrated a deep understanding of the "
"project's goals and architecture, you may be a good candidate for a "
"maintainer role."
#: ../../root/contributing.rst:293
msgid ""
"Активные члены сообщества могут стать членами команды. Обычно это "
"включает:"
msgstr "Active community members can become team members. This typically includes:"
#: ../../root/contributing.rst:295
msgid "Постоянный вклад в виде качественного кода и документации."
msgstr "Consistent contributions of quality code and documentation."
#: ../../root/contributing.rst:296
msgid "Помощь другим пользователям с их вопросами и проблемами."
msgstr "Helping other users with their questions and issues."
#: ../../root/contributing.rst:297
msgid ""
"Проверку `Pull Request`'ов от других участников с конструктивной обратной"
" связью."
msgstr ""
"Reviewing `Pull Requests` from other contributors with constructive "
"feedback."
#: ../../root/contributing.rst:299
msgid ""
"Если вы заинтересованы в том, чтобы стать постоянным членом команды, "
"лучший способ — быть активным и полезным участником сообщества. "
"Существующие мейнтейнеры заметят ваши усилия и могут связаться с вами."
msgstr ""
"If you are interested in becoming a permanent team member, the best way "
"is to be an active and helpful community contributor. Existing "
"maintainers will notice your efforts and may reach out to you."
@@ -0,0 +1,175 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/dependency_injection.rst:4
msgid "Внедрение зависимостей"
msgstr "Dependency Injection"
#: ../../root/dependency_injection.rst:6
msgid ""
"Внедрение зависимостей (Dependency Injection, DI) — это паттерн "
"проектирования, который помогает писать слабосвязанный, легко тестируемый"
" и расширяемый код. Вместо того чтобы обработчики сами создавали нужные "
"им объекты (зависимости), они получают их извне."
msgstr ""
"Dependency Injection (DI) is a design pattern that helps write loosely "
"coupled, easily testable, and extensible code. Instead of handlers "
"creating the objects (dependencies) they need themselves, they receive "
"them from outside."
#: ../../root/dependency_injection.rst:8
msgid ""
"``Argenta`` использует библиотеку ``dishka`` для реализации DI, что "
"позволяет декларативно объявлять зависимости прямо в сигнатурах ваших "
"обработчиков. Подробнее о DI, IoC и API для создания провайдеров можно "
"прочитать в `официальной документации dishka "
"<https://dishka.readthedocs.io/en/stable/di_intro.html>`_."
msgstr ""
"``Argenta`` uses the ``dishka`` library to implement DI, which allows you"
" to declaratively declare dependencies directly in your handler "
"signatures. You can read more about DI, IoC, and the API for "
"creating providers in the `official dishka documentation "
"<https://dishka.readthedocs.io/en/stable/di_intro.html>`_."
#: ../../root/dependency_injection.rst:14
msgid "Основная идея"
msgstr "Main Idea"
#: ../../root/dependency_injection.rst:16
msgid ""
"Представьте, что вашему обработчику для работы нужен доступ к базе "
"данных. Вместо импорта и инициализации соединения внутри функции, вы "
"просто объявляете его как аргумент с аннотацией типа:"
msgstr ""
"Imagine your handler needs access to a database to work. Instead of "
"importing and initializing the connection inside the function, you simply"
" declare it as an argument with a type annotation:"
#: ../../root/dependency_injection.rst:19
msgid ""
"``argenta.di.FromDishka`` является алиасом для ``dishka.FromDishka``, и "
"они полностью взаимозаменяемы."
msgstr ""
"``argenta.di.FromDishka`` is an alias for ``dishka.FromDishka``, and they"
" are fully interchangeable."
#: ../../root/dependency_injection.rst:21
#: ../../root/dependency_injection.rst:29
#: ../../root/dependency_injection.rst:40
#: ../../root/dependency_injection.rst:63
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/dependency_injection.rst:27
msgid ""
"``Argenta`` с помощью ``dishka`` разрешит зависимость по типу "
"``Connection`` и внедрит её. Но прежде чем использовать зависимость, её "
"необходимо объявить в провайдере:"
msgstr ""
"``Argenta`` with ``dishka`` will resolve the dependency by type "
"``Connection`` and inject it. But before using the dependency, it must be"
" declared in a provider:"
#: ../../root/dependency_injection.rst:35
msgid "После создания провайдера его необходимо зарегистрировать в оркестраторе."
msgstr "After creating the provider, it must be registered in the orchestrator."
#: ../../root/dependency_injection.rst:38
msgid ""
"Провайдеры регистрируются в ``Orchestrator``, а не в ``App``, так как "
"оркестратор отвечает за настройку DI-контейнера на уровне всего "
"приложения. Вы можете передать список из нескольких провайдеров через "
"параметр ``custom_providers``."
msgstr ""
"Providers are registered in ``Orchestrator``, not in ``App``, because "
"the orchestrator is responsible for configuring the DI container at the "
"application level. You can pass a list of multiple providers through the "
"``custom_providers`` parameter."
#: ../../root/dependency_injection.rst:49
msgid "Как это работает?"
msgstr "How Does It Work?"
#: ../../root/dependency_injection.rst:51
msgid "В основе DI в Argenta лежат **провайдеры** и **контейнер**."
msgstr "At the core of DI in Argenta are **providers** and a **container**."
#: ../../root/dependency_injection.rst:53
msgid ""
"**Провайдер (Provider)** — это \"рецепт\", который объясняет, как "
"создавать и настраивать ту или иную зависимость (например, подключение к "
"БД, API-клиент или любой другой сервис)."
msgstr ""
"**Provider (Provider)** is a \"recipe\" that explains how to create and "
"configure a particular dependency (for example, a database connection, "
"API client, or any other service)."
#: ../../root/dependency_injection.rst:54
msgid ""
"**Контейнер (IoC Container)** — это \"фабрика\", которая хранит все "
"рецепты (провайдеры) и по запросу создаёт и выдаёт готовые зависимости."
msgstr ""
"**Container (IoC Container)** is a \"factory\" that stores all recipes "
"(providers) and creates and provides ready dependencies on request."
#: ../../root/dependency_injection.rst:59
msgid "Встроенные провайдеры"
msgstr "Built-in Providers"
#: ../../root/dependency_injection.rst:61
msgid ""
"``Argenta`` поставляется со встроенным провайдером, который даёт доступ к"
" важным системным зависимостям без дополнительной настройки. Например, вы"
" можете получить объект :ref:`ArgSpace <root_api_orchestrator_argspace>`,"
" который содержит аргументы командной строки, переданные при запуске "
"приложения."
msgstr ""
"``Argenta`` comes with a built-in provider that gives access to important"
" system dependencies without additional configuration. For example, you "
"can get the :ref:`ArgSpace <root_api_orchestrator_argspace>` object, "
"which contains the command-line arguments passed when the application was "
"launched."
#: ../../root/dependency_injection.rst:72
msgid "Обмен данными между обработчиками"
msgstr "Data Exchange Between Handlers"
#: ../../root/dependency_injection.rst:74
msgid ""
"Помимо DI, обработчики могут обмениваться данными в рамках сессии через "
"**объект контекста**. В ``Argenta`` эту роль выполняет объект "
"``DataBridge``."
msgstr ""
"In addition to DI, handlers can exchange data within a session through a "
"**context object**. In ``Argenta``, this role is performed by the "
"``DataBridge`` object."
#: ../../root/dependency_injection.rst:76
msgid ""
"Каждый обработчик может записывать в него данные, а также читать, "
"обновлять и удалять их."
msgstr ""
"Each handler can write data to it, as well as read, update, and delete "
"data."
#: ../../root/dependency_injection.rst:79
msgid "Подробнее об этом можно прочитать в разделе :ref:`root_api_bridge`."
msgstr "You can read more about this in the :ref:`root_api_bridge` section."
@@ -0,0 +1,195 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-02 22:27+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/error_handling.rst:4
msgid "Обработка ошибок"
msgstr "Error Handling"
#: ../../root/error_handling.rst:6
msgid ""
"``Argenta`` выбрасывает исключения в пограничных случаях, связанных с "
"пользовательским вводом. По умолчанию они обрабатываются системными "
"обработчиками, но вы можете их переопределить. Это делается с помощью "
"сеттеров экземпляра ``App`` вида ``.set_*_handler()``. Подробнее о каждом"
" из них рассказано :ref:`ниже <possible_errors>`."
msgstr ""
"``Argenta`` throws exceptions in edge cases related to user input. By default, "
"they are handled by system handlers, but you can override them. This is done using "
"``App`` instance setters of the form ``.set_*_handler()``. More details about each "
"of them are described :ref:`below <possible_errors>`."
#: ../../root/error_handling.rst:10
msgid ""
"Ни одно исключение не остаётся необработанным, так как для каждого случая"
" предусмотрен стандартный обработчик. Поэтому переопределение является "
"опциональным."
msgstr ""
"No exception goes unhandled, as a default handler is provided for each case. "
"Therefore, overriding is optional."
#: ../../root/error_handling.rst:12 ../../root/error_handling.rst:37
#: ../../root/error_handling.rst:61 ../../root/error_handling.rst:82
#: ../../root/error_handling.rst:105 ../../root/error_handling.rst:126
msgid "**Пример использования:**"
msgstr "**Usage example:**"
#: ../../root/error_handling.rst:22
msgid "Возможные исключения и нестандартное поведение"
msgstr "Possible Exceptions and Non-Standard Behavior"
#: ../../root/error_handling.rst:25
msgid "``UnprocessedInputFlagException``: Некорректный синтаксис флагов"
msgstr "``UnprocessedInputFlagException``: Incorrect Flag Syntax"
#: ../../root/error_handling.rst:27
msgid ""
"Это исключение выбрасывается, когда парсер не может обработать команду "
"из-за некорректного синтаксиса. Чаще всего это связано с ошибкой в "
"синтаксисе флагов. Подробнее о них можно прочитать в разделе :ref:`Flags "
"<root_flags>`."
msgstr ""
"This exception is thrown when the parser cannot process a command due to incorrect "
"syntax. Most often this is related to an error in flag syntax. You can read more "
"about them in the :ref:`Flags <root_flags>` section."
#: ../../root/error_handling.rst:29 ../../root/error_handling.rst:53
#: ../../root/error_handling.rst:74 ../../root/error_handling.rst:97
msgid "Стандартный обработчик выводит в консоль:"
msgstr "The default handler outputs to the console:"
#: ../../root/error_handling.rst:35
msgid ""
"Для переопределения используется сеттер "
"``.set_incorrect_input_syntax_handler()``. Он принимает на вход "
"обработчик с сигнатурой ``Callable[[str], None]``, где единственный "
"аргумент — это строка с необработанной командой."
msgstr ""
"To override, use the ``.set_incorrect_input_syntax_handler()`` setter. It accepts "
"a handler with the signature ``Callable[[str], None]``, where the only argument is "
"a string with the unprocessed command."
#: ../../root/error_handling.rst:46
msgid "``RepeatedInputFlagsException``: Повторяющиеся флаги в команде"
msgstr "``RepeatedInputFlagsException``: Repeated Flags in Command"
#: ../../root/error_handling.rst:48
msgid ""
"Исключение выбрасывается, если пользователь ввёл команду с повторяющимися"
" флагами. Два флага (:ref:`InputFlag <root_api_command_input_flag>`) "
"считаются одинаковыми, если у них совпадают имена. Подробнее о флагах и "
"их синтаксисе — в разделе :ref:`Flags <root_flags>`."
msgstr ""
"The exception is thrown if the user entered a command with repeated flags. Two "
"flags (:ref:`InputFlag <root_api_command_input_flag>`) are considered the same if "
"their names match. More about flags and their syntax in the :ref:`Flags "
"<root_flags>` section."
#: ../../root/error_handling.rst:51
msgid ""
"Сравнение на равенство у регистрируемых флагов (``Flag``) происходит "
"иначе, подробнее в :ref:`Flag <root_flags>`."
msgstr ""
"Equality comparison for registered flags (``Flag``) works differently, see "
":ref:`Flag <root_flags>` for details."
#: ../../root/error_handling.rst:59
msgid ""
"Для переопределения используется сеттер "
"``.set_repeated_input_flags_handler()``. Он принимает на вход обработчик "
"с сигнатурой ``Callable[[str], None]``, где единственный аргумент — это "
"строка с необработанной командой."
msgstr ""
"To override, use the ``.set_repeated_input_flags_handler()`` setter. It accepts a "
"handler with the signature ``Callable[[str], None]``, where the only argument is a "
"string with the unprocessed command."
#: ../../root/error_handling.rst:70
msgid "``EmptyInputCommandException``: Введена пустая команда"
msgstr "``EmptyInputCommandException``: Empty Command Entered"
#: ../../root/error_handling.rst:72
msgid ""
"Исключение выбрасывается, если пользователь ввёл пустую строку или "
"строку, состоящую только из пробельных символов (``\\n``, ``\\t``, пробел"
" и т.д.)."
msgstr ""
"The exception is thrown if the user entered an empty string or a string consisting "
"only of whitespace characters (``\\n``, ``\\t``, space, etc.)."
#: ../../root/error_handling.rst:80
msgid ""
"Для переопределения используется сеттер ``.set_empty_command_handler()``."
" Он принимает на вход обработчик с сигнатурой ``Callable[[], None]`` (без"
" аргументов)."
msgstr ""
"To override, use the ``.set_empty_command_handler()`` setter. It accepts a handler "
"with the signature ``Callable[[], None]`` (no arguments)."
#: ../../root/error_handling.rst:93
msgid "Обработка неизвестной команды"
msgstr "Handling Unknown Commands"
#: ../../root/error_handling.rst:95
msgid ""
"Это поведение активируется, когда пользователь вводит команду, которая не"
" зарегистрирована ни в одном из роутеров и не является псевдонимом "
"(alias) для существующей команды."
msgstr ""
"This behavior is triggered when the user enters a command that is not registered "
"in any of the routers and is not an alias for an existing command."
#: ../../root/error_handling.rst:103
msgid ""
"Для переопределения используется сеттер "
"``.set_unknown_command_handler()``. Он принимает на вход обработчик с "
"сигнатурой ``Callable[[InputCommand], None]``, где аргумент — объект "
":ref:`InputCommand <root_api_command_input_command>`."
msgstr ""
"To override, use the ``.set_unknown_command_handler()`` setter. It accepts a "
"handler with the signature ``Callable[[InputCommand], None]``, where the argument "
"is an :ref:`InputCommand <root_api_command_input_command>` object."
#: ../../root/error_handling.rst:114
msgid "Выход из приложения"
msgstr "Exiting the Application"
#: ../../root/error_handling.rst:116
msgid ""
"Это поведение активируется, когда пользователь вводит команду, помеченную"
" как команда выхода."
msgstr ""
"This behavior is triggered when the user enters a command marked as an exit command."
#: ../../root/error_handling.rst:118
msgid ""
"Стандартный обработчик выводит в консоль текст и завершает работу "
"приложения:"
msgstr "The default handler outputs text to the console and terminates the application:"
#: ../../root/error_handling.rst:124
msgid ""
"Для переопределения используется сеттер ``.set_exit_command_handler()``. "
"Он принимает на вход обработчик с сигнатурой ``Callable[[Response], "
"None]``, где аргумент — объект :ref:`Response <root_api_response>`."
msgstr ""
"To override, use the ``.set_exit_command_handler()`` setter. It accepts a handler "
"with the signature ``Callable[[Response], None]``, where the argument is a "
":ref:`Response <root_api_response>` object."
+440
View File
@@ -0,0 +1,440 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2025, kolo
# This file is distributed under the same license as the Argenta package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
#
msgid ""
msgstr ""
"Project-Id-Version: Argenta \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-04 20:39+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
"Language-Team: en <LL@li.org>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.17.0\n"
#: ../../root/flags.rst:4
msgid "Флаги вводимых команд"
msgstr "Input Command Flags"
#: ../../root/flags.rst:6
msgid ""
"Флаги — это специальные параметры, которые пользователь может добавлять к"
" командам для управления их поведением."
msgstr ""
"Flags are special parameters that users can add to commands to control "
"their behavior."
#: ../../root/flags.rst:9
msgid "Зачем нужны флаги в командах"
msgstr "Why Flags Are Needed in Commands"
#: ../../root/flags.rst:12
msgid "Управление поведением команды"
msgstr "Controlling Command Behavior"
#: ../../root/flags.rst:14
msgid ""
"Основная цель флагов — предоставить способ изменить логику работы команды"
" без её переработки. Команда может работать в нескольких режимах: "
"стандартном, подробном, отладочном или упрощённом. Флаги переключают эти "
"режимы по требованию пользователя, оставляя основную функциональность "
"неизменной."
msgstr ""
"The main purpose of flags is to provide a way to change the command's "
"logic without reworking it. A command can operate in several modes: "
"standard, verbose, debug, or simplified. Flags switch these modes on user"
" demand, keeping the core functionality unchanged."
#: ../../root/flags.rst:17
msgid "Опциональность и удобство"
msgstr "Optionality and Convenience"
#: ../../root/flags.rst:19
msgid ""
"Флаги решают проблему обязательности параметров. Если все параметры "
"команды сделать обязательными, это затруднит использование команды. Флаги"
" же позволяют задать значения только необходимые в конкретной ситуации, "
"остальные используют значения по умолчанию."
msgstr ""
"Flags solve the problem of mandatory parameters. If all command "
"parameters are made required, it makes the command difficult to use. "
"Flags allow you to specify only the values needed in a specific "
"situation, while others use default values."
#: ../../root/flags.rst:22
msgid "Когда могут понадобиться флаги"
msgstr "When Flags Might Be Needed"
#: ../../root/flags.rst:24
msgid "**Переключение режимов работы**"
msgstr "**Switching Operation Modes**"
#: ../../root/flags.rst:25
msgid ""
"Команда выполняет развёртывание приложения обычно, но нужен режим без "
"фактического развёртывания (dry-run) для проверки. Флаг ``--dry-run`` "
"переключит режим работы."
msgstr ""
"A command deploys an application normally, but a mode without actual "
"deployment (dry-run) is needed for verification. The ``--dry-run`` flag "
"will switch the mode."
#: ../../root/flags.rst:27
msgid "**Настройка уровня детальности**"
msgstr "**Adjusting Verbosity Level**"
#: ../../root/flags.rst:28
msgid ""
"При отладке или анализе требуется больше информации о процессе выполнения"
" команды. Флаги ``--verbose`` или ``--debug`` предоставляют подробный "
"вывод."
msgstr ""
"When debugging or analyzing, more information about the command execution"
" process is required. The ``--verbose`` or ``--debug`` flags provide "
"detailed output."
#: ../../root/flags.rst:30
msgid "**Управление поведением при ошибках**"
msgstr "**Managing Error Behavior**"
#: ../../root/flags.rst:31
msgid ""
"По умолчанию команда может прерваться при первой ошибке. Флаг ``--force``"
" позволит продолжить работу, пропуская некритичные ошибки."
msgstr ""
"By default, a command may abort on the first error. The ``--force`` flag "
"allows continuing execution, skipping non-critical errors."
#: ../../root/flags.rst:33
msgid "**Форматирование вывода**"
msgstr "**Output Formatting**"
#: ../../root/flags.rst:34
msgid ""
"Команда выводит данные текстом, но в некоторых сценариях нужен JSON или "
"CSV. Флаг ``--format=json`` переключит формат вывода."
msgstr ""
"A command outputs data as text, but in some scenarios JSON or CSV is "
"needed. The ``--format=json`` flag will switch the output format."
#: ../../root/flags.rst:36
msgid "**Комбинирование опций**"
msgstr "**Combining Options**"
#: ../../root/flags.rst:37
msgid ""
"Часто нужна комбинация нескольких изменений: подробный вывод, dry-run "
"режим и JSON формат. Несколько флагов решают эту задачу одновременно."
msgstr ""
"Often a combination of several changes is needed: verbose output, dry-run"
" mode, and JSON format. Multiple flags solve this task simultaneously."
#: ../../root/flags.rst:40
msgid "Практическое значение"
msgstr "Practical Significance"
#: ../../root/flags.rst:42
msgid ""
"Флаги делают команды более предсказуемыми и контролируемыми. Пользователь"
" может начать с простого использования, а затем добавлять флаги по мере "
"необходимости. Это особенно важно при автоматизации задач в скриптах, где"
" гибкость интерфейса критична."
msgstr ""
"Flags make commands more predictable and controllable. Users can start "
"with simple usage and then add flags as needed. This is especially "
"important when automating tasks in scripts, where interface flexibility "
"is critical."
#: ../../root/flags.rst:44
msgid ""
"Флаги также облегчают интеграцию команд в различные системы, так как "
"дополнительное поведение достигается без изменения структуры команды, а "
"только через передачу опциональных параметров."
msgstr ""
"Flags also facilitate command integration into various systems, as "
"additional behavior is achieved without changing the command structure, "
"only through passing optional parameters."
#: ../../root/flags.rst:49
msgid "Синтаксис флагов"
msgstr "Flag Syntax"
#: ../../root/flags.rst:51
msgid "Общий синтаксис выглядит так:"
msgstr "The general syntax looks like this:"
#: ../../root/flags.rst:57
msgid ""
"Флаг состоит из префикса (``-``, ``--`` или ``---``), имени и, "
"опционально, значения, которое указывается через пробел."
msgstr ""
"A flag consists of a prefix (``-``, ``--``, or ``---``), a name, and "
"optionally a value, which is specified with a space."
#: ../../root/flags.rst:59
msgid "**Примеры:**"
msgstr "**Examples:**"
#: ../../root/flags.rst:70
msgid "Работа с флагами в обработчиках"
msgstr "Working with Flags in Handlers"
#: ../../root/flags.rst:72
msgid ""
"Чтобы получить значение флага в обработчике, используйте объект "
"``response.input_flags`` типа :ref:`InputFlags "
"<root_api_command_input_flags>`."
msgstr ""
"To get the flag value in a handler, use the ``response.input_flags`` "
"object of type :ref:`InputFlags <root_api_command_input_flags>`."
#: ../../root/flags.rst:74
msgid "**Пример с флагом, имеющим значение:**"
msgstr "**Example with a flag that has a value:**"
#: ../../root/flags.rst:80
msgid "**Пример с флагом-переключателем:**"
msgstr "**Example with a toggle flag:**"
#: ../../root/flags.rst:87
msgid ""
"Подробнее о работе с объектом ``InputFlags`` см. в разделе "
":ref:`InputFlags <root_api_command_input_flags>`."
msgstr ""
"For more details on working with the ``InputFlags`` object, see the "
":ref:`InputFlags <root_api_command_input_flags>` section."
#: ../../root/flags.rst:92
msgid "Два типа флагов"
msgstr "Two Types of Flags"
#: ../../root/flags.rst:94
msgid "Флаги бывают двух основных видов:"
msgstr "Flags come in two main types:"
#: ../../root/flags.rst:96
msgid ""
"**Флаги со значениями** — принимают параметр после имени флага (например,"
" ``--name John``, ``--port 8080``)"
msgstr ""
"**Flags with values** — accept a parameter after the flag name (for "
"example, ``--name John``, ``--port 8080``)"
#: ../../root/flags.rst:97
msgid ""
"**Флаги-переключатели** — не принимают значения, их наличие само по себе "
"является сигналом (например, ``--verbose``, ``--force``)"
msgstr ""
"**Toggle flags** — do not accept values, their presence itself is a "
"signal (for example, ``--verbose``, ``--force``)"
#: ../../root/flags.rst:99
msgid ""
"``Argenta`` позволяет регистрировать и вводить флаги обоих типов в любой "
"последовательности для одной команды."
msgstr ""
"``Argenta`` allows registering and entering flags of both types in any "
"sequence for a single command."
#: ../../root/flags.rst:102
msgid ""
"Ошибки валидации не выбрасывают исключений. Вместо этого у каждого "
"объекта :ref:`InputFlag <root_api_command_input_flag>` есть атрибут "
"``status``, по которому можно определить, прошла ли валидация успешно. "
"Подробное описание API для создания флагов находится в разделе :ref:`Flag"
" <root_api_command_flag>`."
msgstr ""
"Validation errors do not throw exceptions. Instead, each :ref:`InputFlag "
"<root_api_command_input_flag>` object has a ``status`` attribute that can"
" be used to determine if validation was successful. A detailed "
"description of the API for creating flags is in the :ref:`Flag "
"<root_api_command_flag>` section."
#: ../../root/flags.rst:104
msgid ""
"При регистрации флага можно задать правила валидации для его значения. По"
" умолчанию любое значение считается корректным. Валидацию можно настроить"
" несколькими способами:"
msgstr ""
"When registering a flag, you can set validation rules for its value. By "
"default, any value is considered valid. Validation can be configured in "
"several ways:"
#: ../../root/flags.rst:109
msgid "Флаги против аргументов"
msgstr "Flags vs Arguments"
#: ../../root/flags.rst:111
msgid ""
"В контексте Argenta флаги и аргументы относятся к разным уровням "
"взаимодействия с приложением."
msgstr ""
"In the context of Argenta, flags and arguments belong to different levels"
" of interaction with the application."
#: ../../root/flags.rst:113
msgid ""
"**Аргументы** — это параметры, передаваемые при запуске приложения. Они "
"определяют глобальную конфигурацию на протяжении всей его работы "
"(например, адрес базы данных, уровень логирования)."
msgstr ""
"**Arguments** are parameters passed when launching the application. They "
"define the global configuration throughout its operation (for example, "
"database address, logging level)."
#: ../../root/flags.rst:115
msgid ""
"API и более подробное описание в разделах :ref:`ArgParser "
"<root_api_orchestrator_argparser>` и :ref:`Arguments "
"<root_api_orchestrator_arguments>`."
msgstr ""
"API and more detailed description in the :ref:`ArgParser "
"<root_api_orchestrator_argparser>` and :ref:`Arguments "
"<root_api_orchestrator_arguments>` sections."
#: ../../root/flags.rst:117
msgid ""
"**Флаги** — это параметры командных операций, доступные в рамках "
"интерактивной сессии при вводе каждой новой команды. Они позволяют "
"модифицировать поведение конкретной команды без перезагрузки приложения."
msgstr ""
"**Flags** are command operation parameters available within an "
"interactive session when entering each new command. They allow modifying "
"the behavior of a specific command without restarting the application."
#: ../../root/flags.rst:119
msgid ""
"API и более подробное описание в разделе :ref:`Flag "
"<root_api_command_flag>`."
msgstr ""
"API and more detailed description in the :ref:`Flag "
"<root_api_command_flag>` section."
#: ../../root/flags.rst:124
msgid "Ключевые различия"
msgstr "Key Differences"
#: ../../root/flags.rst:126
msgid "**Время жизни**"
msgstr "**Lifetime**"
#: ../../root/flags.rst:127
msgid ""
"Аргументы передаются один раз при запуске и действуют на весь период "
"работы приложения. Флаги локальны и существуют только в рамках выполнения"
" команды."
msgstr ""
"Arguments are passed once at startup and remain in effect for the entire "
"application runtime. Flags are local and exist only within the execution "
"of a command."
#: ../../root/flags.rst:129
msgid "**Изменяемость**"
msgstr "**Mutability**"
#: ../../root/flags.rst:130
msgid ""
"Для изменения аргументов необходимо перезапустить приложение. Флаги можно"
" менять при каждом вводе команды."
msgstr ""
"To change arguments, the application must be restarted. Flags can be "
"changed with each command input."
#: ../../root/flags.rst:132
msgid "**Назначение**"
msgstr "**Purpose**"
#: ../../root/flags.rst:133
msgid ""
"Аргументы управляют глобальной конфигурацией приложения. Флаги управляют "
"поведением отдельных команд."
msgstr ""
"Arguments control the global configuration of the application. Flags "
"control the behavior of individual commands."
#: ../../root/flags.rst:138
msgid "Практические примеры"
msgstr "Practical Examples"
#: ../../root/flags.rst:140
msgid "Аргументы при запуске приложения:"
msgstr "Arguments at application startup:"
#: ../../root/flags.rst:142
msgid "Адрес подключения к базе данных"
msgstr "Database connection address"
#: ../../root/flags.rst:143
msgid "Режим работы (production, development, testing)"
msgstr "Operation mode (production, development, testing)"
#: ../../root/flags.rst:144
msgid "Уровень логирования"
msgstr "Logging level"
#: ../../root/flags.rst:146
msgid "Флаги в интерактивной сессии:"
msgstr "Flags in an interactive session:"
#: ../../root/flags.rst:148
msgid "``deploy --verbose --dry-run`` — для команды развёртывания"
msgstr "``deploy --verbose --dry-run`` — for the deployment command"
#: ../../root/flags.rst:149
msgid "``backup --compress --encrypted`` — для команды резервного копирования"
msgstr "``backup --compress --encrypted`` — for the backup command"
#: ../../root/flags.rst:150
msgid "``test --parallel --coverage`` — для команды тестирования"
msgstr "``test --parallel --coverage`` — for the testing command"
#~ msgid "Определение и назначение"
#~ msgstr "Definition and Purpose"
#~ msgid "**Частота изменения**"
#~ msgstr "**Change Frequency**"
#~ msgid "**Уровень конфигурации**"
#~ msgstr "**Configuration Level**"
#~ msgid "**Использование**"
#~ msgstr "**Usage**"
#~ msgid ""
#~ "Аргументы задают начальное состояние системы:"
#~ " что подключить, как работать. Флаги "
#~ "управляют тактикой выполнения команд: как "
#~ "её выполнить, с какими изменениями."
#~ msgstr ""
#~ "Arguments set the initial state of "
#~ "the system: what to connect, how "
#~ "to operate. Flags control the tactics"
#~ " of command execution: how to execute"
#~ " it, with what changes."
#~ msgid "При запуске приложения Argenta передаются аргументы:"
#~ msgstr "When launching an Argenta application, arguments are passed:"
#~ msgid "Путь к конфигурационным файлам"
#~ msgstr "Path to configuration files"
#~ msgid "В интерактивной сессии для каждой команды указываются флаги:"
#~ msgstr "In an interactive session, flags are specified for each command:"
#~ msgid ""
#~ "Один пользователь может выполнить разные "
#~ "команды с разными флагами в одной "
#~ "сессии приложения, без необходимости "
#~ "перезапуска с новыми аргументами."
#~ msgstr ""
#~ "A single user can execute different "
#~ "commands with different flags in one "
#~ "application session, without needing to "
#~ "restart with new arguments."

Some files were not shown because too many files have changed in this diff Show More