### 50$/Month Sponsors
%s %s', $request['method'], $uri = $request['uri'], $uri);
- $dedupIdentifier = $request['identifier'];
- } elseif (isset($context['cli'])) {
- $title = '$ '.$context['cli']['command_line'];
- $dedupIdentifier = $context['cli']['identifier'];
- } else {
- $dedupIdentifier = uniqid('', true);
- }
-
- $sourceDescription = '';
- if (isset($context['source'])) {
- $source = $context['source'];
- $projectDir = $source['project_dir'] ?? null;
- $sourceDescription = sprintf('%s on line %d', $source['name'], $source['line']);
- if (isset($source['file_link'])) {
- $sourceDescription = sprintf('%s', $source['file_link'], $sourceDescription);
- }
- }
-
- $isoDate = $this->extractDate($context, 'c');
- $tags = array_filter([
- 'controller' => $controller ?? null,
- 'project dir' => $projectDir ?? null,
- ]);
-
- $output->writeln(<<
- - $sourceDescription -
- {$this->dumper->dump($data, true)} -- */ -abstract class AbstractDumper implements DataDumperInterface, DumperInterface -{ - public const DUMP_LIGHT_ARRAY = 1; - public const DUMP_STRING_LENGTH = 2; - public const DUMP_COMMA_SEPARATOR = 4; - public const DUMP_TRAILING_COMMA = 8; - - /** @var callable|resource|string|null */ - public static $defaultOutput = 'php://output'; - - protected $line = ''; - /** @var callable|null */ - protected $lineDumper; - /** @var resource|null */ - protected $outputStream; - protected $decimalPoint = '.'; - protected $indentPad = ' '; - protected $flags; - - private string $charset = ''; - - /** - * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path, defaults to static::$defaultOutput - * @param string|null $charset The default character encoding to use for non-UTF8 strings - * @param int $flags A bit field of static::DUMP_* constants to fine tune dumps representation - */ - public function __construct($output = null, ?string $charset = null, int $flags = 0) - { - $this->flags = $flags; - $this->setCharset($charset ?: \ini_get('php.output_encoding') ?: \ini_get('default_charset') ?: 'UTF-8'); - $this->setOutput($output ?: static::$defaultOutput); - if (!$output && \is_string(static::$defaultOutput)) { - static::$defaultOutput = $this->outputStream; - } - } - - /** - * Sets the output destination of the dumps. - * - * @param callable|resource|string|null $output A line dumper callable, an opened stream or an output path - * - * @return callable|resource|string|null The previous output destination - */ - public function setOutput($output) - { - $prev = $this->outputStream ?? $this->lineDumper; - - if (\is_callable($output)) { - $this->outputStream = null; - $this->lineDumper = $output; - } else { - if (\is_string($output)) { - $output = fopen($output, 'w'); - } - $this->outputStream = $output; - $this->lineDumper = $this->echoLine(...); - } - - return $prev; - } - - /** - * Sets the default character encoding to use for non-UTF8 strings. - * - * @return string The previous charset - */ - public function setCharset(string $charset): string - { - $prev = $this->charset; - - $charset = strtoupper($charset); - $charset = null === $charset || 'UTF-8' === $charset || 'UTF8' === $charset ? 'CP1252' : $charset; - - $this->charset = $charset; - - return $prev; - } - - /** - * Sets the indentation pad string. - * - * @param string $pad A string that will be prepended to dumped lines, repeated by nesting level - * - * @return string The previous indent pad - */ - public function setIndentPad(string $pad): string - { - $prev = $this->indentPad; - $this->indentPad = $pad; - - return $prev; - } - - /** - * Dumps a Data object. - * - * @param callable|resource|string|true|null $output A line dumper callable, an opened stream, an output path or true to return the dump - * - * @return string|null The dump as string when $output is true - */ - public function dump(Data $data, $output = null): ?string - { - if ($locale = $this->flags & (self::DUMP_COMMA_SEPARATOR | self::DUMP_TRAILING_COMMA) ? setlocale(\LC_NUMERIC, 0) : null) { - setlocale(\LC_NUMERIC, 'C'); - } - - if ($returnDump = true === $output) { - $output = fopen('php://memory', 'r+'); - } - if ($output) { - $prevOutput = $this->setOutput($output); - } - try { - $data->dump($this); - $this->dumpLine(-1); - - if ($returnDump) { - $result = stream_get_contents($output, -1, 0); - fclose($output); - - return $result; - } - } finally { - if ($output) { - $this->setOutput($prevOutput); - } - if ($locale) { - setlocale(\LC_NUMERIC, $locale); - } - } - - return null; - } - - /** - * Dumps the current line. - * - * @param int $depth The recursive depth in the dumped structure for the line being dumped, - * or -1 to signal the end-of-dump to the line dumper callable - * - * @return void - */ - protected function dumpLine(int $depth) - { - ($this->lineDumper)($this->line, $depth, $this->indentPad); - $this->line = ''; - } - - /** - * Generic line dumper callback. - * - * @return void - */ - protected function echoLine(string $line, int $depth, string $indentPad) - { - if (-1 !== $depth) { - fwrite($this->outputStream, str_repeat($indentPad, $depth).$line."\n"); - } - } - - /** - * Converts a non-UTF-8 string to UTF-8. - */ - protected function utf8Encode(?string $s): ?string - { - if (null === $s || preg_match('//u', $s)) { - return $s; - } - - if (!\function_exists('iconv')) { - throw new \RuntimeException('Unable to convert a non-UTF-8 string to UTF-8: required function iconv() does not exist. You should install ext-iconv or symfony/polyfill-iconv.'); - } - - if (false !== $c = @iconv($this->charset, 'UTF-8', $s)) { - return $c; - } - if ('CP1252' !== $this->charset && false !== $c = @iconv('CP1252', 'UTF-8', $s)) { - return $c; - } - - return iconv('CP850', 'UTF-8', $s); - } -} diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php deleted file mode 100644 index af9637072..000000000 --- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/CliDumper.php +++ /dev/null @@ -1,677 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\VarDumper\Dumper; - -use Symfony\Component\VarDumper\Cloner\Cursor; -use Symfony\Component\VarDumper\Cloner\Stub; - -/** - * CliDumper dumps variables for command line output. - * - * @author Nicolas Grekas
- */
-class CliDumper extends AbstractDumper
-{
- public static $defaultColors;
- /** @var callable|resource|string|null */
- public static $defaultOutput = 'php://stdout';
-
- protected $colors;
- protected $maxStringWidth = 0;
- protected $styles = [
- // See http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
- 'default' => '0;38;5;208',
- 'num' => '1;38;5;38',
- 'const' => '1;38;5;208',
- 'str' => '1;38;5;113',
- 'note' => '38;5;38',
- 'ref' => '38;5;247',
- 'public' => '',
- 'protected' => '',
- 'private' => '',
- 'meta' => '38;5;170',
- 'key' => '38;5;113',
- 'index' => '38;5;38',
- ];
-
- protected static $controlCharsRx = '/[\x00-\x1F\x7F]+/';
- protected static $controlCharsMap = [
- "\t" => '\t',
- "\n" => '\n',
- "\v" => '\v',
- "\f" => '\f',
- "\r" => '\r',
- "\033" => '\e',
- ];
- protected static $unicodeCharsRx = "/[\u{00A0}\u{00AD}\u{034F}\u{061C}\u{115F}\u{1160}\u{17B4}\u{17B5}\u{180E}\u{2000}-\u{200F}\u{202F}\u{205F}\u{2060}-\u{2064}\u{206A}-\u{206F}\u{3000}\u{2800}\u{3164}\u{FEFF}\u{FFA0}\u{1D159}\u{1D173}-\u{1D17A}]/u";
-
- protected $collapseNextHash = false;
- protected $expandNextHash = false;
-
- private array $displayOptions = [
- 'fileLinkFormat' => null,
- ];
-
- private bool $handlesHrefGracefully;
-
- public function __construct($output = null, ?string $charset = null, int $flags = 0)
- {
- parent::__construct($output, $charset, $flags);
-
- if ('\\' === \DIRECTORY_SEPARATOR && !$this->isWindowsTrueColor()) {
- // Use only the base 16 xterm colors when using ANSICON or standard Windows 10 CLI
- $this->setStyles([
- 'default' => '31',
- 'num' => '1;34',
- 'const' => '1;31',
- 'str' => '1;32',
- 'note' => '34',
- 'ref' => '1;30',
- 'meta' => '35',
- 'key' => '32',
- 'index' => '34',
- ]);
- }
-
- $this->displayOptions['fileLinkFormat'] = \ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format') ?: 'file://%f#L%l';
- }
-
- /**
- * Enables/disables colored output.
- *
- * @return void
- */
- public function setColors(bool $colors)
- {
- $this->colors = $colors;
- }
-
- /**
- * Sets the maximum number of characters per line for dumped strings.
- *
- * @return void
- */
- public function setMaxStringWidth(int $maxStringWidth)
- {
- $this->maxStringWidth = $maxStringWidth;
- }
-
- /**
- * Configures styles.
- *
- * @param array $styles A map of style names to style definitions
- *
- * @return void
- */
- public function setStyles(array $styles)
- {
- $this->styles = $styles + $this->styles;
- }
-
- /**
- * Configures display options.
- *
- * @param array $displayOptions A map of display options to customize the behavior
- *
- * @return void
- */
- public function setDisplayOptions(array $displayOptions)
- {
- $this->displayOptions = $displayOptions + $this->displayOptions;
- }
-
- /**
- * @return void
- */
- public function dumpScalar(Cursor $cursor, string $type, string|int|float|bool|null $value)
- {
- $this->dumpKey($cursor);
- $this->collapseNextHash = $this->expandNextHash = false;
-
- $style = 'const';
- $attr = $cursor->attr;
-
- switch ($type) {
- case 'default':
- $style = 'default';
- break;
-
- case 'label':
- $this->styles += ['label' => $this->styles['default']];
- $style = 'label';
- break;
-
- case 'integer':
- $style = 'num';
-
- if (isset($this->styles['integer'])) {
- $style = 'integer';
- }
-
- break;
-
- case 'double':
- $style = 'num';
-
- if (isset($this->styles['float'])) {
- $style = 'float';
- }
-
- $value = match (true) {
- \INF === $value => 'INF',
- -\INF === $value => '-INF',
- is_nan($value) => 'NAN',
- default => !str_contains($value = (string) $value, $this->decimalPoint) ? $value .= $this->decimalPoint.'0' : $value,
- };
- break;
-
- case 'NULL':
- $value = 'null';
- break;
-
- case 'boolean':
- $value = $value ? 'true' : 'false';
- break;
-
- default:
- $attr += ['value' => $this->utf8Encode($value)];
- $value = $this->utf8Encode($type);
- break;
- }
-
- $this->line .= $this->style($style, $value, $attr);
-
- $this->endValue($cursor);
- }
-
- /**
- * @return void
- */
- public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut)
- {
- $this->dumpKey($cursor);
- $this->collapseNextHash = $this->expandNextHash = false;
- $attr = $cursor->attr;
-
- if ($bin) {
- $str = $this->utf8Encode($str);
- }
- if ('' === $str) {
- $this->line .= '""';
- if ($cut) {
- $this->line .= '…'.$cut;
- }
- $this->endValue($cursor);
- } else {
- $attr += [
- 'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0,
- 'binary' => $bin,
- ];
- $str = $bin && str_contains($str, "\0") ? [$str] : explode("\n", $str);
- if (isset($str[1]) && !isset($str[2]) && !isset($str[1][0])) {
- unset($str[1]);
- $str[0] .= "\n";
- }
- $m = \count($str) - 1;
- $i = $lineCut = 0;
-
- if (self::DUMP_STRING_LENGTH & $this->flags) {
- $this->line .= '('.$attr['length'].') ';
- }
- if ($bin) {
- $this->line .= 'b';
- }
-
- if ($m) {
- $this->line .= '"""';
- $this->dumpLine($cursor->depth);
- } else {
- $this->line .= '"';
- }
-
- foreach ($str as $str) {
- if ($i < $m) {
- $str .= "\n";
- }
- if (0 < $this->maxStringWidth && $this->maxStringWidth < $len = mb_strlen($str, 'UTF-8')) {
- $str = mb_substr($str, 0, $this->maxStringWidth, 'UTF-8');
- $lineCut = $len - $this->maxStringWidth;
- }
- if ($m && 0 < $cursor->depth) {
- $this->line .= $this->indentPad;
- }
- if ('' !== $str) {
- $this->line .= $this->style('str', $str, $attr);
- }
- if ($i++ == $m) {
- if ($m) {
- if ('' !== $str) {
- $this->dumpLine($cursor->depth);
- if (0 < $cursor->depth) {
- $this->line .= $this->indentPad;
- }
- }
- $this->line .= '"""';
- } else {
- $this->line .= '"';
- }
- if ($cut < 0) {
- $this->line .= '…';
- $lineCut = 0;
- } elseif ($cut) {
- $lineCut += $cut;
- }
- }
- if ($lineCut) {
- $this->line .= '…'.$lineCut;
- $lineCut = 0;
- }
-
- if ($i > $m) {
- $this->endValue($cursor);
- } else {
- $this->dumpLine($cursor->depth);
- }
- }
- }
- }
-
- /**
- * @return void
- */
- public function enterHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild)
- {
- $this->colors ??= $this->supportsColors();
-
- $this->dumpKey($cursor);
- $this->expandNextHash = false;
- $attr = $cursor->attr;
-
- if ($this->collapseNextHash) {
- $cursor->skipChildren = true;
- $this->collapseNextHash = $hasChild = false;
- }
-
- $class = $this->utf8Encode($class);
- if (Cursor::HASH_OBJECT === $type) {
- $prefix = $class && 'stdClass' !== $class ? $this->style('note', $class, $attr).(empty($attr['cut_hash']) ? ' {' : '') : '{';
- } elseif (Cursor::HASH_RESOURCE === $type) {
- $prefix = $this->style('note', $class.' resource', $attr).($hasChild ? ' {' : ' ');
- } else {
- $prefix = $class && !(self::DUMP_LIGHT_ARRAY & $this->flags) ? $this->style('note', 'array:'.$class).' [' : '[';
- }
-
- if (($cursor->softRefCount || 0 < $cursor->softRefHandle) && empty($attr['cut_hash'])) {
- $prefix .= $this->style('ref', (Cursor::HASH_RESOURCE === $type ? '@' : '#').(0 < $cursor->softRefHandle ? $cursor->softRefHandle : $cursor->softRefTo), ['count' => $cursor->softRefCount]);
- } elseif ($cursor->hardRefTo && !$cursor->refIndex && $class) {
- $prefix .= $this->style('ref', '&'.$cursor->hardRefTo, ['count' => $cursor->hardRefCount]);
- } elseif (!$hasChild && Cursor::HASH_RESOURCE === $type) {
- $prefix = substr($prefix, 0, -1);
- }
-
- $this->line .= $prefix;
-
- if ($hasChild) {
- $this->dumpLine($cursor->depth);
- }
- }
-
- /**
- * @return void
- */
- public function leaveHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild, int $cut)
- {
- if (empty($cursor->attr['cut_hash'])) {
- $this->dumpEllipsis($cursor, $hasChild, $cut);
- $this->line .= Cursor::HASH_OBJECT === $type ? '}' : (Cursor::HASH_RESOURCE !== $type ? ']' : ($hasChild ? '}' : ''));
- }
-
- $this->endValue($cursor);
- }
-
- /**
- * Dumps an ellipsis for cut children.
- *
- * @param bool $hasChild When the dump of the hash has child item
- * @param int $cut The number of items the hash has been cut by
- *
- * @return void
- */
- protected function dumpEllipsis(Cursor $cursor, bool $hasChild, int $cut)
- {
- if ($cut) {
- $this->line .= ' …';
- if (0 < $cut) {
- $this->line .= $cut;
- }
- if ($hasChild) {
- $this->dumpLine($cursor->depth + 1);
- }
- }
- }
-
- /**
- * Dumps a key in a hash structure.
- *
- * @return void
- */
- protected function dumpKey(Cursor $cursor)
- {
- if (null !== $key = $cursor->hashKey) {
- if ($cursor->hashKeyIsBinary) {
- $key = $this->utf8Encode($key);
- }
- $attr = ['binary' => $cursor->hashKeyIsBinary];
- $bin = $cursor->hashKeyIsBinary ? 'b' : '';
- $style = 'key';
- switch ($cursor->hashType) {
- default:
- case Cursor::HASH_INDEXED:
- if (self::DUMP_LIGHT_ARRAY & $this->flags) {
- break;
- }
- $style = 'index';
- // no break
- case Cursor::HASH_ASSOC:
- if (\is_int($key)) {
- $this->line .= $this->style($style, $key).' => ';
- } else {
- $this->line .= $bin.'"'.$this->style($style, $key).'" => ';
- }
- break;
-
- case Cursor::HASH_RESOURCE:
- $key = "\0~\0".$key;
- // no break
- case Cursor::HASH_OBJECT:
- if (!isset($key[0]) || "\0" !== $key[0]) {
- $this->line .= '+'.$bin.$this->style('public', $key).': ';
- } elseif (0 < strpos($key, "\0", 1)) {
- $key = explode("\0", substr($key, 1), 2);
-
- switch ($key[0][0]) {
- case '+': // User inserted keys
- $attr['dynamic'] = true;
- $this->line .= '+'.$bin.'"'.$this->style('public', $key[1], $attr).'": ';
- break 2;
- case '~':
- $style = 'meta';
- if (isset($key[0][1])) {
- parse_str(substr($key[0], 1), $attr);
- $attr += ['binary' => $cursor->hashKeyIsBinary];
- }
- break;
- case '*':
- $style = 'protected';
- $bin = '#'.$bin;
- break;
- default:
- $attr['class'] = $key[0];
- $style = 'private';
- $bin = '-'.$bin;
- break;
- }
-
- if (isset($attr['collapse'])) {
- if ($attr['collapse']) {
- $this->collapseNextHash = true;
- } else {
- $this->expandNextHash = true;
- }
- }
-
- $this->line .= $bin.$this->style($style, $key[1], $attr).($attr['separator'] ?? ': ');
- } else {
- // This case should not happen
- $this->line .= '-'.$bin.'"'.$this->style('private', $key, ['class' => '']).'": ';
- }
- break;
- }
-
- if ($cursor->hardRefTo) {
- $this->line .= $this->style('ref', '&'.($cursor->hardRefCount ? $cursor->hardRefTo : ''), ['count' => $cursor->hardRefCount]).' ';
- }
- }
- }
-
- /**
- * Decorates a value with some style.
- *
- * @param string $style The type of style being applied
- * @param string $value The value being styled
- * @param array $attr Optional context information
- */
- protected function style(string $style, string $value, array $attr = []): string
- {
- $this->colors ??= $this->supportsColors();
-
- $this->handlesHrefGracefully ??= 'JetBrains-JediTerm' !== getenv('TERMINAL_EMULATOR')
- && (!getenv('KONSOLE_VERSION') || (int) getenv('KONSOLE_VERSION') > 201100)
- && !isset($_SERVER['IDEA_INITIAL_DIRECTORY']);
-
- if (isset($attr['ellipsis'], $attr['ellipsis-type'])) {
- $prefix = substr($value, 0, -$attr['ellipsis']);
- if ('cli' === \PHP_SAPI && 'path' === $attr['ellipsis-type'] && isset($_SERVER[$pwd = '\\' === \DIRECTORY_SEPARATOR ? 'CD' : 'PWD']) && str_starts_with($prefix, $_SERVER[$pwd])) {
- $prefix = '.'.substr($prefix, \strlen($_SERVER[$pwd]));
- }
- if (!empty($attr['ellipsis-tail'])) {
- $prefix .= substr($value, -$attr['ellipsis'], $attr['ellipsis-tail']);
- $value = substr($value, -$attr['ellipsis'] + $attr['ellipsis-tail']);
- } else {
- $value = substr($value, -$attr['ellipsis']);
- }
-
- $value = $this->style('default', $prefix).$this->style($style, $value);
-
- goto href;
- }
-
- $map = static::$controlCharsMap;
- $startCchr = $this->colors ? "\033[m\033[{$this->styles['default']}m" : '';
- $endCchr = $this->colors ? "\033[m\033[{$this->styles[$style]}m" : '';
- $value = preg_replace_callback(static::$controlCharsRx, function ($c) use ($map, $startCchr, $endCchr) {
- $s = $startCchr;
- $c = $c[$i = 0];
- do {
- $s .= $map[$c[$i]] ?? sprintf('\x%02X', \ord($c[$i]));
- } while (isset($c[++$i]));
-
- return $s.$endCchr;
- }, $value, -1, $cchrCount);
-
- if (!($attr['binary'] ?? false)) {
- $value = preg_replace_callback(static::$unicodeCharsRx, function ($c) use (&$cchrCount, $startCchr, $endCchr) {
- ++$cchrCount;
-
- return $startCchr.'\u{'.strtoupper(dechex(mb_ord($c[0]))).'}'.$endCchr;
- }, $value);
- }
-
- if ($this->colors && '' !== $value) {
- if ($cchrCount && "\033" === $value[0]) {
- $value = substr($value, \strlen($startCchr));
- } else {
- $value = "\033[{$this->styles[$style]}m".$value;
- }
- if ($cchrCount && str_ends_with($value, $endCchr)) {
- $value = substr($value, 0, -\strlen($endCchr));
- } else {
- $value .= "\033[{$this->styles['default']}m";
- }
- }
-
- href:
- if ($this->colors && $this->handlesHrefGracefully) {
- if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], $attr['line'] ?? 0)) {
- if ('note' === $style) {
- $value .= "\033]8;;{$href}\033\\^\033]8;;\033\\";
- } else {
- $attr['href'] = $href;
- }
- }
- if (isset($attr['href'])) {
- if ('label' === $style) {
- $value .= '^';
- }
- $value = "\033]8;;{$attr['href']}\033\\{$value}\033]8;;\033\\";
- }
- }
-
- if ('label' === $style && '' !== $value) {
- $value .= ' ';
- }
-
- return $value;
- }
-
- protected function supportsColors(): bool
- {
- if ($this->outputStream !== static::$defaultOutput) {
- return $this->hasColorSupport($this->outputStream);
- }
- if (isset(static::$defaultColors)) {
- return static::$defaultColors;
- }
- if (isset($_SERVER['argv'][1])) {
- $colors = $_SERVER['argv'];
- $i = \count($colors);
- while (--$i > 0) {
- if (isset($colors[$i][5])) {
- switch ($colors[$i]) {
- case '--ansi':
- case '--color':
- case '--color=yes':
- case '--color=force':
- case '--color=always':
- case '--colors=always':
- return static::$defaultColors = true;
-
- case '--no-ansi':
- case '--color=no':
- case '--color=none':
- case '--color=never':
- case '--colors=never':
- return static::$defaultColors = false;
- }
- }
- }
- }
-
- $h = stream_get_meta_data($this->outputStream) + ['wrapper_type' => null];
- $h = 'Output' === $h['stream_type'] && 'PHP' === $h['wrapper_type'] ? fopen('php://stdout', 'w') : $this->outputStream;
-
- return static::$defaultColors = $this->hasColorSupport($h);
- }
-
- /**
- * @return void
- */
- protected function dumpLine(int $depth, bool $endOfValue = false)
- {
- if (null === $this->colors) {
- $this->colors = $this->supportsColors();
- }
-
- if ($this->colors) {
- $this->line = sprintf("\033[%sm%s\033[m", $this->styles['default'], $this->line);
- }
- parent::dumpLine($depth);
- }
-
- /**
- * @return void
- */
- protected function endValue(Cursor $cursor)
- {
- if (-1 === $cursor->hashType) {
- return;
- }
-
- if (Stub::ARRAY_INDEXED === $cursor->hashType || Stub::ARRAY_ASSOC === $cursor->hashType) {
- if (self::DUMP_TRAILING_COMMA & $this->flags && 0 < $cursor->depth) {
- $this->line .= ',';
- } elseif (self::DUMP_COMMA_SEPARATOR & $this->flags && 1 < $cursor->hashLength - $cursor->hashIndex) {
- $this->line .= ',';
- }
- }
-
- $this->dumpLine($cursor->depth, true);
- }
-
- /**
- * Returns true if the stream supports colorization.
- *
- * Reference: Composer\XdebugHandler\Process::supportsColor
- * https://github.com/composer/xdebug-handler
- */
- private function hasColorSupport(mixed $stream): bool
- {
- if (!\is_resource($stream) || 'stream' !== get_resource_type($stream)) {
- return false;
- }
-
- // Follow https://no-color.org/
- if (isset($_SERVER['NO_COLOR']) || false !== getenv('NO_COLOR')) {
- return false;
- }
-
- if ('Hyper' === getenv('TERM_PROGRAM')) {
- return true;
- }
-
- if (\DIRECTORY_SEPARATOR === '\\') {
- return (\function_exists('sapi_windows_vt100_support')
- && @sapi_windows_vt100_support($stream))
- || false !== getenv('ANSICON')
- || 'ON' === getenv('ConEmuANSI')
- || 'xterm' === getenv('TERM');
- }
-
- return stream_isatty($stream);
- }
-
- /**
- * Returns true if the Windows terminal supports true color.
- *
- * Note that this does not check an output stream, but relies on environment
- * variables from known implementations, or a PHP and Windows version that
- * supports true color.
- */
- private function isWindowsTrueColor(): bool
- {
- $result = 183 <= getenv('ANSICON_VER')
- || 'ON' === getenv('ConEmuANSI')
- || 'xterm' === getenv('TERM')
- || 'Hyper' === getenv('TERM_PROGRAM');
-
- if (!$result) {
- $version = sprintf(
- '%s.%s.%s',
- PHP_WINDOWS_VERSION_MAJOR,
- PHP_WINDOWS_VERSION_MINOR,
- PHP_WINDOWS_VERSION_BUILD
- );
- $result = $version >= '10.0.15063';
- }
-
- return $result;
- }
-
- private function getSourceLink(string $file, int $line): string|false
- {
- if ($fmt = $this->displayOptions['fileLinkFormat']) {
- return \is_string($fmt) ? strtr($fmt, ['%f' => $file, '%l' => $line]) : ($fmt->format($file, $line) ?: 'file://'.$file.'#L'.$line);
- }
-
- return false;
- }
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php
deleted file mode 100644
index 38f878971..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php
+++ /dev/null
@@ -1,32 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\VarDumper\Dumper\ContextProvider;
-
-/**
- * Tries to provide context on CLI.
- *
- * @author Maxime Steinhausser
- * @author Maxime Steinhausser
- */
-interface DataDumperInterface
-{
- /**
- * @return string|null
- */
- public function dump(Data $data);
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
deleted file mode 100644
index ea09e6819..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/HtmlDumper.php
+++ /dev/null
@@ -1,998 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\VarDumper\Dumper;
-
-use Symfony\Component\VarDumper\Cloner\Cursor;
-use Symfony\Component\VarDumper\Cloner\Data;
-
-/**
- * HtmlDumper dumps variables as HTML.
- *
- * @author Nicolas Grekas
- */
-class HtmlDumper extends CliDumper
-{
- /** @var callable|resource|string|null */
- public static $defaultOutput = 'php://output';
-
- protected static $themes = [
- 'dark' => [
- 'default' => 'background-color:#18171B; color:#FF8400; line-height:1.2em; font:12px Menlo, Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: break-all',
- 'num' => 'font-weight:bold; color:#1299DA',
- 'const' => 'font-weight:bold',
- 'str' => 'font-weight:bold; color:#56DB3A',
- 'note' => 'color:#1299DA',
- 'ref' => 'color:#A0A0A0',
- 'public' => 'color:#FFFFFF',
- 'protected' => 'color:#FFFFFF',
- 'private' => 'color:#FFFFFF',
- 'meta' => 'color:#B729D9',
- 'key' => 'color:#56DB3A',
- 'index' => 'color:#1299DA',
- 'ellipsis' => 'color:#FF8400',
- 'ns' => 'user-select:none;',
- ],
- 'light' => [
- 'default' => 'background:none; color:#CC7832; line-height:1.2em; font:12px Menlo, Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:99999; word-break: break-all',
- 'num' => 'font-weight:bold; color:#1299DA',
- 'const' => 'font-weight:bold',
- 'str' => 'font-weight:bold; color:#629755;',
- 'note' => 'color:#6897BB',
- 'ref' => 'color:#6E6E6E',
- 'public' => 'color:#262626',
- 'protected' => 'color:#262626',
- 'private' => 'color:#262626',
- 'meta' => 'color:#B729D9',
- 'key' => 'color:#789339',
- 'index' => 'color:#1299DA',
- 'ellipsis' => 'color:#CC7832',
- 'ns' => 'user-select:none;',
- ],
- ];
-
- protected $dumpHeader;
- protected $dumpPrefix = '
- */
-class ThrowingCasterException extends \Exception
-{
- /**
- * @param \Throwable $prev The exception thrown from the caster
- */
- public function __construct(\Throwable $prev)
- {
- parent::__construct('Unexpected '.$prev::class.' thrown from a caster: '.$prev->getMessage(), 0, $prev);
- }
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/README.md b/data/web/inc/lib/vendor/symfony/var-dumper/README.md
deleted file mode 100644
index a0da8c9ab..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-VarDumper Component
-===================
-
-The VarDumper component provides mechanisms for walking through any arbitrary
-PHP variable. It provides a better `dump()` function that you can use instead
-of `var_dump()`.
-
-Resources
----------
-
- * [Documentation](https://symfony.com/doc/current/components/var_dumper/introduction.html)
- * [Contributing](https://symfony.com/doc/current/contributing/index.html)
- * [Report issues](https://github.com/symfony/symfony/issues) and
- [send Pull Requests](https://github.com/symfony/symfony/pulls)
- in the [main Symfony repository](https://github.com/symfony/symfony)
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Resources/bin/var-dump-server b/data/web/inc/lib/vendor/symfony/var-dumper/Resources/bin/var-dump-server
deleted file mode 100755
index f398fcef7..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/Resources/bin/var-dump-server
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env php
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-if ('cli' !== PHP_SAPI) {
- throw new Exception('This script must be run from the command line.');
-}
-
-/**
- * Starts a dump server to collect and output dumps on a single place with multiple formats support.
- *
- * @author Maxime Steinhausser
- * @author Alexandre Daubois
- */
-trait VarDumperTestTrait
-{
- /**
- * @internal
- */
- private array $varDumperConfig = [
- 'casters' => [],
- 'flags' => null,
- ];
-
- protected function setUpVarDumper(array $casters, ?int $flags = null): void
- {
- $this->varDumperConfig['casters'] = $casters;
- $this->varDumperConfig['flags'] = $flags;
- }
-
- /**
- * @after
- */
- protected function tearDownVarDumper(): void
- {
- $this->varDumperConfig['casters'] = [];
- $this->varDumperConfig['flags'] = null;
- }
-
- public function assertDumpEquals(mixed $expected, mixed $data, int $filter = 0, string $message = '')
- {
- $this->assertSame($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message);
- }
-
- public function assertDumpMatchesFormat(mixed $expected, mixed $data, int $filter = 0, string $message = '')
- {
- $this->assertStringMatchesFormat($this->prepareExpectation($expected, $filter), $this->getDump($data, null, $filter), $message);
- }
-
- protected function getDump(mixed $data, string|int|null $key = null, int $filter = 0): ?string
- {
- if (null === $flags = $this->varDumperConfig['flags']) {
- $flags = getenv('DUMP_LIGHT_ARRAY') ? CliDumper::DUMP_LIGHT_ARRAY : 0;
- $flags |= getenv('DUMP_STRING_LENGTH') ? CliDumper::DUMP_STRING_LENGTH : 0;
- $flags |= getenv('DUMP_COMMA_SEPARATOR') ? CliDumper::DUMP_COMMA_SEPARATOR : 0;
- }
-
- $cloner = new VarCloner();
- $cloner->addCasters($this->varDumperConfig['casters']);
- $cloner->setMaxItems(-1);
- $dumper = new CliDumper(null, null, $flags);
- $dumper->setColors(false);
- $data = $cloner->cloneVar($data, $filter)->withRefHandles(false);
- if (null !== $key && null === $data = $data->seek($key)) {
- return null;
- }
-
- return rtrim($dumper->dump($data, true));
- }
-
- private function prepareExpectation(mixed $expected, int $filter): string
- {
- if (!\is_string($expected)) {
- $expected = $this->getDump($expected, null, $filter);
- }
-
- return rtrim($expected);
- }
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/VarDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/VarDumper.php
deleted file mode 100644
index e1400f150..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/VarDumper.php
+++ /dev/null
@@ -1,127 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\VarDumper;
-
-use Symfony\Component\ErrorHandler\ErrorRenderer\FileLinkFormatter;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\RequestStack;
-use Symfony\Component\VarDumper\Caster\ReflectionCaster;
-use Symfony\Component\VarDumper\Cloner\VarCloner;
-use Symfony\Component\VarDumper\Dumper\CliDumper;
-use Symfony\Component\VarDumper\Dumper\ContextProvider\CliContextProvider;
-use Symfony\Component\VarDumper\Dumper\ContextProvider\RequestContextProvider;
-use Symfony\Component\VarDumper\Dumper\ContextProvider\SourceContextProvider;
-use Symfony\Component\VarDumper\Dumper\ContextualizedDumper;
-use Symfony\Component\VarDumper\Dumper\HtmlDumper;
-use Symfony\Component\VarDumper\Dumper\ServerDumper;
-
-// Load the global dump() function
-require_once __DIR__.'/Resources/functions/dump.php';
-
-/**
- * @author Nicolas Grekas
- */
-class VarDumper
-{
- /**
- * @var callable|null
- */
- private static $handler;
-
- /**
- * @param string|null $label
- *
- * @return mixed
- */
- public static function dump(mixed $var/* , string $label = null */)
- {
- $label = 2 <= \func_num_args() ? func_get_arg(1) : null;
- if (null === self::$handler) {
- self::register();
- }
-
- return (self::$handler)($var, $label);
- }
-
- public static function setHandler(?callable $callable = null): ?callable
- {
- if (1 > \func_num_args()) {
- trigger_deprecation('symfony/var-dumper', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__);
- }
- $prevHandler = self::$handler;
-
- // Prevent replacing the handler with expected format as soon as the env var was set:
- if (isset($_SERVER['VAR_DUMPER_FORMAT'])) {
- return $prevHandler;
- }
-
- self::$handler = $callable;
-
- return $prevHandler;
- }
-
- private static function register(): void
- {
- $cloner = new VarCloner();
- $cloner->addCasters(ReflectionCaster::UNSET_CLOSURE_FILE_INFO);
-
- $format = $_SERVER['VAR_DUMPER_FORMAT'] ?? null;
- switch (true) {
- case 'html' === $format:
- $dumper = new HtmlDumper();
- break;
- case 'cli' === $format:
- $dumper = new CliDumper();
- break;
- case 'server' === $format:
- case $format && 'tcp' === parse_url($format, \PHP_URL_SCHEME):
- $host = 'server' === $format ? $_SERVER['VAR_DUMPER_SERVER'] ?? '127.0.0.1:9912' : $format;
- $dumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg', 'embed'], true) ? new CliDumper() : new HtmlDumper();
- $dumper = new ServerDumper($host, $dumper, self::getDefaultContextProviders());
- break;
- default:
- $dumper = \in_array(\PHP_SAPI, ['cli', 'phpdbg', 'embed'], true) ? new CliDumper() : new HtmlDumper();
- }
-
- if (!$dumper instanceof ServerDumper) {
- $dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]);
- }
-
- self::$handler = function ($var, ?string $label = null) use ($cloner, $dumper) {
- $var = $cloner->cloneVar($var);
-
- if (null !== $label) {
- $var = $var->withContext(['label' => $label]);
- }
-
- $dumper->dump($var);
- };
- }
-
- private static function getDefaultContextProviders(): array
- {
- $contextProviders = [];
-
- if (!\in_array(\PHP_SAPI, ['cli', 'phpdbg', 'embed'], true) && class_exists(Request::class)) {
- $requestStack = new RequestStack();
- $requestStack->push(Request::createFromGlobals());
- $contextProviders['request'] = new RequestContextProvider($requestStack);
- }
-
- $fileLinkFormatter = class_exists(FileLinkFormatter::class) ? new FileLinkFormatter(null, $requestStack ?? null) : null;
-
- return $contextProviders + [
- 'cli' => new CliContextProvider(),
- 'source' => new SourceContextProvider(null, null, $fileLinkFormatter),
- ];
- }
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/composer.json b/data/web/inc/lib/vendor/symfony/var-dumper/composer.json
deleted file mode 100644
index e6166f86d..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/composer.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "symfony/var-dumper",
- "type": "library",
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "keywords": ["dump", "debug"],
- "homepage": "https://symfony.com",
- "license": "MIT",
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "require": {
- "php": ">=8.1",
- "symfony/deprecation-contracts": "^2.5|^3",
- "symfony/polyfill-mbstring": "~1.0"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^5.4|^6.0|^7.0",
- "symfony/error-handler": "^6.3|^7.0",
- "symfony/http-kernel": "^5.4|^6.0|^7.0",
- "symfony/process": "^5.4|^6.0|^7.0",
- "symfony/uid": "^5.4|^6.0|^7.0",
- "twig/twig": "^2.13|^3.0.4"
- },
- "conflict": {
- "symfony/console": "<5.4"
- },
- "autoload": {
- "files": [ "Resources/functions/dump.php" ],
- "psr-4": { "Symfony\\Component\\VarDumper\\": "" },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "minimum-stability": "dev"
-}
diff --git a/data/web/inc/lib/vendor/tightenco/collect/.github/workflows/run-tests.yml b/data/web/inc/lib/vendor/tightenco/collect/.github/workflows/run-tests.yml
deleted file mode 100644
index 406c40049..000000000
--- a/data/web/inc/lib/vendor/tightenco/collect/.github/workflows/run-tests.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-name: Run tests
-
-on:
- push:
- branches: [laravel-9-ongoing, laravel-8-ongoing]
- pull_request:
-
-jobs:
- tests:
- strategy:
- matrix:
- os: [Ubuntu, macOS]
- php: [8.0, 8.1, 8.2]
-
- include:
- - os: Ubuntu
- os-version: ubuntu-latest
-
- - os: macOS
- os-version: macos-latest
-
- name: ${{ matrix.os }} - PHP ${{ matrix.php }}
-
- runs-on: ${{ matrix.os-version }}
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v1
-
- - name: Setup PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: ${{ matrix.php }}
- extensions: posix, dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite, bcmath, soap, intl, gd, exif, iconv, imagick
- coverage: none
-
- - name: Install dependencies
- run: composer update --prefer-stable --prefer-dist --no-interaction
-
- - name: Run tests
- run: bash upgrade.sh
diff --git a/data/web/inc/lib/vendor/tightenco/collect/branch-commit-push.sh b/data/web/inc/lib/vendor/tightenco/collect/branch-commit-push.sh
deleted file mode 100755
index 124e58331..000000000
--- a/data/web/inc/lib/vendor/tightenco/collect/branch-commit-push.sh
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/bash
-
-
-GREEN='\033[0;32m'
-RED='\033[0;31m'
-WHITE='\033[0;37m'
-RESET='\033[0m'
-
-function validateVersion()
-{
- echo ""
- passedVersion=$1
- echo -e "${WHITE}-- Validating tag '$passedVersion'...${RESET}"
-
- # Todo: validate the version here using a regex; if fail, just exit
- # ... expect 8.75.0, with no v in front of it
-
- if [[ $passedVersion == '' ]]; then
- echo -e "\n-- Invalid tag. Tags should be structured without v; e.g. 8.57.0"
- exit
- fi
-
- echo -e "${WHITE}-- Tag valid.${RESET}"
- echo ""
-}
-
-# Exit script if any command fails (e.g. phpunit)
-set -e
-
-
-# Require confirmation it's set up corrctly
-echo
-echo -e "${WHITE}-- This script is meant to be run after running upgrade.sh, BEFORE committing to Git.${RESET}"
-
-while true; do
- echo -e "${GREEN}-- Is that the current state of your local project?${RESET}"
- read -p "-- (y/n) " yn
- case $yn in
- [Yy]* ) break;;
- [Nn]* ) exit;;
- * ) echo "Please answer y or n.";;
- esac
-done
-
-# Get the version and exit if not valid
-validateVersion $1
-
-# Create official v prefaced version
-version="v$1"
-
-# Run tests (and bail if they fail)
-phpunit
-echo -e "\n${WHITE}-- Tests succeeded.${RESET}"
-
-# Branch
-echo -e "\n${WHITE}-- Creating a Git branch '$version-changes'...${RESET}\n"
-git checkout -b $version-changes
-
-# Add and commit, with "v8.57.0 changes" as the commit name
-git add -A
-git commit -m "$version changes"
-
-echo
-echo -e "${WHITE}-- Git committed.${RESET}"
-
-# Push
-git push -u origin $version-changes
diff --git a/data/web/inc/lib/vendor/tightenco/collect/composer.json b/data/web/inc/lib/vendor/tightenco/collect/composer.json
deleted file mode 100644
index 949635dcd..000000000
--- a/data/web/inc/lib/vendor/tightenco/collect/composer.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
- "name": "tightenco/collect",
- "description": "Collect - Illuminate Collections as a separate package.",
- "keywords": ["laravel", "collection"],
- "license": "MIT",
- "authors": [
- {
- "name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
- }
- ],
- "require": {
- "php": "^8.0",
- "symfony/var-dumper": "^3.4 || ^4.0 || ^5.0 || ^6.0"
- },
- "require-dev": {
- "mockery/mockery": "^1.0",
- "phpunit/phpunit": "^8.3",
- "nesbot/carbon": "^2.23.0"
- },
- "autoload": {
- "files": [
- "src/Collect/Support/helpers.php",
- "src/Collect/Support/alias.php"
- ],
- "psr-4": {
- "Tightenco\\Collect\\": "src/Collect"
- }
- },
- "autoload-dev": {
- "files": [
- "tests/files/Support/Carbon.php",
- "tests/files/Support/HtmlString.php",
- "tests/files/Support/HigherOrderTapProxy.php",
- "tests/files/Support/Str.php",
- "tests/files/Support/Stringable.php",
- "tests/files/Support/ItemNotFoundException.php",
- "tests/files/Support/MultipleItemsFoundException.php",
- "tests/Support/Concerns/CountsEnumerations.php"
- ]
- },
- "scripts": {
- "test": [
- "@composer install",
- "phpunit"
- ]
- },
- "minimum-stability": "dev",
- "prefer-stable": true
-}
diff --git a/data/web/inc/lib/vendor/tightenco/collect/framework-.zip b/data/web/inc/lib/vendor/tightenco/collect/framework-.zip
deleted file mode 100644
index e69de29bb..000000000
diff --git a/data/web/inc/lib/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php b/data/web/inc/lib/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php
deleted file mode 100755
index 190bb9bc3..000000000
--- a/data/web/inc/lib/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.php
+++ /dev/null
@@ -1,17 +0,0 @@
-
- */
- public function toArray();
-}
diff --git a/data/web/inc/lib/vendor/tightenco/collect/src/Collect/Contracts/Support/CanBeEscapedWhenCastToString.php b/data/web/inc/lib/vendor/tightenco/collect/src/Collect/Contracts/Support/CanBeEscapedWhenCastToString.php
deleted file mode 100644
index 6f3ba0025..000000000
--- a/data/web/inc/lib/vendor/tightenco/collect/src/Collect/Contracts/Support/CanBeEscapedWhenCastToString.php
+++ /dev/null
@@ -1,14 +0,0 @@
- $needles
- * @param bool $ignoreCase
- * @return bool
- */
- public static function contains($haystack, $needles, $ignoreCase = false)
- {
- if ($ignoreCase) {
- $haystack = mb_strtolower($haystack);
- }
-
- if (! is_iterable($needles)) {
- $needles = (array) $needles;
- }
-
- foreach ($needles as $needle) {
- if ($ignoreCase) {
- $needle = mb_strtolower($needle);
- }
-
- if ($needle !== '' && str_contains($haystack, $needle)) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Determine if a given string contains all array values.
- *
- * @param string $haystack
- * @param iterable ' + value + ' ' + escapeHtml(value) + ' ' + value[0] + ' (' + value[1] + ')' +
- ' - ' + lang.check_hash + ' ' + escapeHtml(value[0]) + ' (' + escapeHtml(value[1]) + ')' +
+ ' - ' + lang.check_hash + ' Los logs en memoria son recopilados en listas de Redis y recortados a LOG_LINES (%d) cada minuto para prevenir sobrecarga en el sistema.\r\n Los logs externos se recopilan a través de la API de la aplicación dada. Los logs estáticos son principalmente registros de actividad, que no están registrados en Dockerd pero que aún deben ser persistentes (excepto los registros de API). mailcow xotiradagi jurnallar Redis roʻyxatlarida toʻplanadi va har daqiqada hammomilik kamaytirish uchun LOG_LINES (%d) ga qisqartiriladi.\r\n Tashqi jurnallar berilgan ilovaning API si orqali toʻplanadi. Statik jurnallar asosan faollik jurnallaridir, ular Dockerd ga yozilmaydi, lekin baribir doimiy boʻlishi kerak (API jurnallaridan tashqari). {{ lang.admin.logo_info }}'.$this->htmlEncode($src[$i - 1]).''.implode("\n", $fileExcerpt).'
';
- }
- }
- break;
- }
- }
- break;
- }
- }
-
- if (false === $name) {
- $name = str_replace('\\', '/', $file);
- $name = substr($name, strrpos($name, '/') + 1);
- }
-
- $context = ['name' => $name, 'file' => $file, 'line' => $line];
- $context['file_excerpt'] = $fileExcerpt;
-
- if (null !== $this->projectDir) {
- $context['project_dir'] = $this->projectDir;
- if (str_starts_with($file, $this->projectDir)) {
- $context['file_relative'] = ltrim(substr($file, \strlen($this->projectDir)), \DIRECTORY_SEPARATOR);
- }
- }
-
- if ($this->fileLinkFormatter && $fileLink = $this->fileLinkFormatter->format($context['file'], $context['line'])) {
- $context['file_link'] = $fileLink;
- }
-
- return $context;
- }
-
- private function htmlEncode(string $s): string
- {
- $html = '';
-
- $dumper = new HtmlDumper(function ($line) use (&$html) { $html .= $line; }, $this->charset);
- $dumper->setDumpHeader('');
- $dumper->setDumpBoundaries('', '');
-
- $cloner = new VarCloner();
- $dumper->dump($cloner->cloneVar($s));
-
- return substr(strip_tags($html), 1, -1);
- }
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php
deleted file mode 100644
index 84cfb4259..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php
+++ /dev/null
@@ -1,46 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\VarDumper\Dumper;
-
-use Symfony\Component\VarDumper\Cloner\Data;
-use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface;
-
-/**
- * @author Kévin Thérage ';
- protected $dumpSuffix = '
';
- protected $dumpId = 'sf-dump';
- protected $colors = true;
- protected $headerIsDumped = false;
- protected $lastDepth = -1;
- protected $styles;
-
- private array $displayOptions = [
- 'maxDepth' => 1,
- 'maxStringLength' => 160,
- 'fileLinkFormat' => null,
- ];
- private array $extraDisplayOptions = [];
-
- public function __construct($output = null, ?string $charset = null, int $flags = 0)
- {
- AbstractDumper::__construct($output, $charset, $flags);
- $this->dumpId = 'sf-dump-'.mt_rand();
- $this->displayOptions['fileLinkFormat'] = \ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
- $this->styles = static::$themes['dark'] ?? self::$themes['dark'];
- }
-
- /**
- * @return void
- */
- public function setStyles(array $styles)
- {
- $this->headerIsDumped = false;
- $this->styles = $styles + $this->styles;
- }
-
- /**
- * @return void
- */
- public function setTheme(string $themeName)
- {
- if (!isset(static::$themes[$themeName])) {
- throw new \InvalidArgumentException(sprintf('Theme "%s" does not exist in class "%s".', $themeName, static::class));
- }
-
- $this->setStyles(static::$themes[$themeName]);
- }
-
- /**
- * Configures display options.
- *
- * @param array $displayOptions A map of display options to customize the behavior
- *
- * @return void
- */
- public function setDisplayOptions(array $displayOptions)
- {
- $this->headerIsDumped = false;
- $this->displayOptions = $displayOptions + $this->displayOptions;
- }
-
- /**
- * Sets an HTML header that will be dumped once in the output stream.
- *
- * @return void
- */
- public function setDumpHeader(?string $header)
- {
- $this->dumpHeader = $header;
- }
-
- /**
- * Sets an HTML prefix and suffix that will encapse every single dump.
- *
- * @return void
- */
- public function setDumpBoundaries(string $prefix, string $suffix)
- {
- $this->dumpPrefix = $prefix;
- $this->dumpSuffix = $suffix;
- }
-
- public function dump(Data $data, $output = null, array $extraDisplayOptions = []): ?string
- {
- $this->extraDisplayOptions = $extraDisplayOptions;
- $result = parent::dump($data, $output);
- $this->dumpId = 'sf-dump-'.mt_rand();
-
- return $result;
- }
-
- /**
- * Dumps the HTML header.
- *
- * @return string
- */
- protected function getDumpHeader()
- {
- $this->headerIsDumped = $this->outputStream ?? $this->lineDumper;
-
- if (null !== $this->dumpHeader) {
- return $this->dumpHeader;
- }
-
- $line = str_replace('{$options}', json_encode($this->displayOptions, \JSON_FORCE_OBJECT), <<<'EOHTML'
-'.$this->dumpHeader;
- }
-
- /**
- * @return void
- */
- public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut)
- {
- if ('' === $str && isset($cursor->attr['img-data'], $cursor->attr['content-type'])) {
- $this->dumpKey($cursor);
- $this->line .= $this->style('default', $cursor->attr['img-size'] ?? '', []);
- $this->line .= $cursor->depth >= $this->displayOptions['maxDepth'] ? ' ' : ' ';
- $this->endValue($cursor);
- $this->line .= $this->indentPad;
- $this->line .= sprintf('', $cursor->attr['content-type'], base64_encode($cursor->attr['img-data']));
- $this->endValue($cursor);
- } else {
- parent::dumpString($cursor, $str, $bin, $cut);
- }
- }
-
- /**
- * @return void
- */
- public function enterHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild)
- {
- if (Cursor::HASH_OBJECT === $type) {
- $cursor->attr['depth'] = $cursor->depth;
- }
- parent::enterHash($cursor, $type, $class, false);
-
- if ($cursor->skipChildren || $cursor->depth >= $this->displayOptions['maxDepth']) {
- $cursor->skipChildren = false;
- $eol = ' class=sf-dump-compact>';
- } else {
- $this->expandNextHash = false;
- $eol = ' class=sf-dump-expanded>';
- }
-
- if ($hasChild) {
- $this->line .= 'dumpId, $r);
- }
- $this->line .= $eol;
- $this->dumpLine($cursor->depth);
- }
- }
-
- /**
- * @return void
- */
- public function leaveHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild, int $cut)
- {
- $this->dumpEllipsis($cursor, $hasChild, $cut);
- if ($hasChild) {
- $this->line .= '';
- }
- parent::leaveHash($cursor, $type, $class, $hasChild, 0);
- }
-
- protected function style(string $style, string $value, array $attr = []): string
- {
- if ('' === $value && ('label' !== $style || !isset($attr['file']) && !isset($attr['href']))) {
- return '';
- }
-
- $v = esc($value);
-
- if ('ref' === $style) {
- if (empty($attr['count'])) {
- return sprintf('%s', $v);
- }
- $r = ('#' !== $v[0] ? 1 - ('@' !== $v[0]) : 2).substr($value, 1);
-
- return sprintf('%s', $this->dumpId, $r, 1 + $attr['count'], $v);
- }
-
- if ('const' === $style && isset($attr['value'])) {
- $style .= sprintf(' title="%s"', esc(\is_scalar($attr['value']) ? $attr['value'] : json_encode($attr['value'])));
- } elseif ('public' === $style) {
- $style .= sprintf(' title="%s"', empty($attr['dynamic']) ? 'Public property' : 'Runtime added dynamic property');
- } elseif ('str' === $style && 1 < $attr['length']) {
- $style .= sprintf(' title="%d%s characters"', $attr['length'], $attr['binary'] ? ' binary or non-UTF-8' : '');
- } elseif ('note' === $style && 0 < ($attr['depth'] ?? 0) && false !== $c = strrpos($value, '\\')) {
- $style .= ' title=""';
- $attr += [
- 'ellipsis' => \strlen($value) - $c,
- 'ellipsis-type' => 'note',
- 'ellipsis-tail' => 1,
- ];
- } elseif ('protected' === $style) {
- $style .= ' title="Protected property"';
- } elseif ('meta' === $style && isset($attr['title'])) {
- $style .= sprintf(' title="%s"', esc($this->utf8Encode($attr['title'])));
- } elseif ('private' === $style) {
- $style .= sprintf(' title="Private property defined in class:
`%s`"', esc($this->utf8Encode($attr['class'])));
- }
-
- if (isset($attr['ellipsis'])) {
- $class = 'sf-dump-ellipsis';
- if (isset($attr['ellipsis-type'])) {
- $class = sprintf('"%s sf-dump-ellipsis-%s"', $class, $attr['ellipsis-type']);
- }
- $label = esc(substr($value, -$attr['ellipsis']));
- $style = str_replace(' title="', " title=\"$v\n", $style);
- $v = sprintf('%s', $class, substr($v, 0, -\strlen($label)));
-
- if (!empty($attr['ellipsis-tail'])) {
- $tail = \strlen(esc(substr($value, -$attr['ellipsis'], $attr['ellipsis-tail'])));
- $v .= sprintf('%s%s', $class, substr($label, 0, $tail), substr($label, $tail));
- } else {
- $v .= $label;
- }
- }
-
- $map = static::$controlCharsMap;
- $v = "".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) {
- $s = $b = '';
- }, $v).'';
-
- if (!($attr['binary'] ?? false)) {
- $v = preg_replace_callback(static::$unicodeCharsRx, function ($c) {
- return '\u{'.strtoupper(dechex(mb_ord($c[0]))).'}';
- }, $v);
- }
-
- if (isset($attr['file']) && $href = $this->getSourceLink($attr['file'], $attr['line'] ?? 0)) {
- $attr['href'] = $href;
- }
- if (isset($attr['href'])) {
- if ('label' === $style) {
- $v .= '^';
- }
- $target = isset($attr['file']) ? '' : ' target="_blank"';
- $v = sprintf('%s', esc($this->utf8Encode($attr['href'])), $target, $v);
- }
- if (isset($attr['lang'])) {
- $v = sprintf('
%s', esc($attr['lang']), $v);
- }
- if ('label' === $style) {
- $v .= ' ';
- }
-
- return $v;
- }
-
- /**
- * @return void
- */
- protected function dumpLine(int $depth, bool $endOfValue = false)
- {
- if (-1 === $this->lastDepth) {
- $this->line = sprintf($this->dumpPrefix, $this->dumpId, $this->indentPad).$this->line;
- }
- if ($this->headerIsDumped !== ($this->outputStream ?? $this->lineDumper)) {
- $this->line = $this->getDumpHeader().$this->line;
- }
-
- if (-1 === $depth) {
- $args = ['"'.$this->dumpId.'"'];
- if ($this->extraDisplayOptions) {
- $args[] = json_encode($this->extraDisplayOptions, \JSON_FORCE_OBJECT);
- }
- // Replace is for BC
- $this->line .= sprintf(str_replace('"%s"', '%s', $this->dumpSuffix), implode(', ', $args));
- }
- $this->lastDepth = $depth;
-
- $this->line = mb_encode_numericentity($this->line, [0x80, 0x10FFFF, 0, 0x1FFFFF], 'UTF-8');
-
- if (-1 === $depth) {
- AbstractDumper::dumpLine(0);
- }
- AbstractDumper::dumpLine($depth);
- }
-
- private function getSourceLink(string $file, int $line): string|false
- {
- $options = $this->extraDisplayOptions + $this->displayOptions;
-
- if ($fmt = $options['fileLinkFormat']) {
- return \is_string($fmt) ? strtr($fmt, ['%f' => $file, '%l' => $line]) : $fmt->format($file, $line);
- }
-
- return false;
- }
-}
-
-function esc(string $str): string
-{
- return htmlspecialchars($str, \ENT_QUOTES, 'UTF-8');
-}
diff --git a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ServerDumper.php b/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ServerDumper.php
deleted file mode 100644
index 60fdd7ac3..000000000
--- a/data/web/inc/lib/vendor/symfony/var-dumper/Dumper/ServerDumper.php
+++ /dev/null
@@ -1,55 +0,0 @@
-
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\VarDumper\Dumper;
-
-use Symfony\Component\VarDumper\Cloner\Data;
-use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface;
-use Symfony\Component\VarDumper\Server\Connection;
-
-/**
- * ServerDumper forwards serialized Data clones to a server.
- *
- * @author Maxime Steinhausser
The following error was reported:
=$errno;?> - =$errstr;?>
The following error was reported:
=$errno;?> - =$errstr;?>
\n');
item.subject = escapeHtml(item.subject);
+ if (item.sender_mime != null) item.sender_mime = escapeHtml(item.sender_mime);
+ if (item['message-id'] != null) item['message-id'] = escapeHtml(item['message-id']);
var scan_time = item.time_real.toFixed(3);
if (item.time_virtual) {
scan_time += ' / ' + item.time_virtual.toFixed(3);
@@ -1128,6 +1130,11 @@ jQuery(function($){
item.ua = escapeHtml(item.ua);
}
item.ua = '' + item.ua + '';
+ if (item.user == null) {
+ item.user = 'unknown';
+ } else {
+ item.user = escapeHtml(item.user);
+ }
if (item.service == "activesync") {
item.service = 'ActiveSync';
}
@@ -1162,6 +1169,7 @@ jQuery(function($){
if (item === null) { return true; }
item.user = escapeHtml(item.user);
item.call = escapeHtml(item.call);
+ if (item.msg) item.msg = escapeHtml(item.msg);
item.task = '' + item.task + '';
item.type = '' + item.type + '';
});
@@ -1169,6 +1177,7 @@ jQuery(function($){
$.each(data, function (i, item) {
if (item === null) { return true; }
item.username = escapeHtml(item.username);
+ item.real_rip = escapeHtml(item.real_rip);
item.service = '
');
item.action = '/.+@domena\\.tld/i).
\n Každý výraz bude podroben základní kontrole, přesto je možné Rspamd 'rozbít', nebude-li syntax zcela korektní.
\n Rspamd se pokusí po každé změně načíst mapu znovu. V případě potíží restartujte Rspamd, aby se konfigurace načetla explicitně.",
"rspamd_settings_map": "Nastavení Rspamd",
"sal_level": "Úroveň 'Moo'",
@@ -780,7 +781,9 @@
"mta_sts_max_age_info": "Doba v sekundách, po niž poštovní servery mohou toho pravidlo držet v mezipaměti bez nutnosti obnovení.",
"mta_sts_mx": "Server MX",
"mta_sts_mx_info": "Dovoluje odesílání jen výslovně vypsaným poštovním serverům; odesílající server kontroluje, že server MX určený v DNS odpovídá pravidlu, a povolí doručení jen s platným certifikátem TLS (chrání přes útokem typu MITM).",
- "mta_sts_mx_notice": "Lze zadat více serverů MX (oddělte čárkou)."
+ "mta_sts_mx_notice": "Lze zadat více serverů MX (oddělte čárkou).",
+ "sender_allowed": "Povolit jako alias pro odesílání",
+ "sender_allowed_info": "Není-li povoleno, lze alias použít jen pro příjem pošty. Lze také obejít v Sender ACL a nastavit konkrétní schránky, jež tento alias mohou používat"
},
"fido2": {
"confirm": "Potvrdit",
diff --git a/data/web/lang/lang.de-de.json b/data/web/lang/lang.de-de.json
index b86879ded..67f78e049 100644
--- a/data/web/lang/lang.de-de.json
+++ b/data/web/lang/lang.de-de.json
@@ -1,6 +1,7 @@
{
"acl": {
"alias_domains": "Alias-Domains hinzufügen",
+ "alias_external_goto": "Aliase mit externen Ziel-Domains erlauben",
"app_passwds": "App-Passwörter verwalten",
"bcc_maps": "BCC-Maps",
"delimiter_action": "Delimiter-Aktionen (tags)",
@@ -13,7 +14,7 @@
"mailbox_relayhost": "Relayhost für eine Mailbox setzen",
"prohibited": "Untersagt durch Richtlinie",
"protocol_access": "Ändern der erlaubten Protokolle",
- "pushover": "Pushover",
+ "pushover": "Pushover-Berechtigung",
"pw_reset": "Verwalten der E-Mail zur Passwortwiederherstellung erlauben",
"quarantine": "Quarantäne-Aktionen",
"quarantine_attachments": "Anhänge aus Quarantäne",
@@ -96,7 +97,7 @@
"relay_transport_info": "
\r\nDer Transport wird stattdessen STARTTLS anfordern, um TLS zu verwenden. TLS kann unter \"TLS Policy Maps\" erzwungen werden.",
- "select": "Bitte auswählen",
+ "select": "Bitte auswählen...",
"select_domain": "Bitte zuerst eine Domain auswählen",
"sieve_desc": "Kurze Beschreibung",
"sieve_type": "Filtertyp",
@@ -150,7 +151,7 @@
"arrival_time": "Ankunftszeit (Serverzeit)",
"authed_user": "Auth. Benutzer",
"ays": "Soll der Vorgang wirklich ausgeführt werden?",
- "ban_list_info": "Übersicht ausgesperrter Netzwerke: Netzwerk (verbleibende Bannzeit) - [Aktionen].
IPs, die zum Entsperren eingereiht werden, verlassen die Liste aktiver Banns nach wenigen Sekunden.
Rote Labels sind Indikatoren für aktive Allowlist-Einträge.",
+ "ban_list_info": "Übersicht ausgesperrter Netzwerke: Netzwerk (verbleibende Bannzeit) - [Aktionen].
IPs, die zum Entsperren eingereiht werden, verlassen die Liste aktiver Banns nach wenigen Sekunden.
Rote Labels kennzeichnen aktive permanente Sperren durch Denylisting.",
"change_logo": "Logo ändern",
"configuration": "Konfiguration",
"convert_html_to_text": "Konvertiere HTML zu reinem Text",
@@ -394,6 +395,11 @@
"ui_header_announcement_type_info": "Info",
"ui_header_announcement_type_warning": "Wichtig",
"ui_texts": "UI-Label und Texte",
+ "ui_theme": "Theme",
+ "ui_theme_dark": "Enthält eine Darkmode-Variante",
+ "ui_theme_default": "Standard",
+ "ui_theme_info": "Themes sind Ordner in data/web/css/themes/<name>/ mit folgenden Dateien:
",
+ "ui_theme_none": "Keine Themes gefunden.",
"unban_pending": "ausstehend",
"unchanged_if_empty": "Unverändert, wenn leer",
"upload": "Hochladen",
@@ -431,7 +437,7 @@
"comment_too_long": "Kommentarfeld darf maximal 160 Zeichen enthalten",
"cors_invalid_method": "Allow-Methods enthält eine ungültige Methode",
"cors_invalid_origin": "Allow-Origins enthält eine ungültige Origin",
- "defquota_empty": "Standard-Quota darf nicht 0 sein",
+ "defquota_empty": "Standard-Quota darf nicht 0 sein.",
"demo_mode_enabled": "Demo Mode ist aktiviert",
"description_invalid": "Ressourcenbeschreibung für %s ist ungültig",
"dkim_domain_or_sel_exists": "Ein DKIM-Key für die Domain \"%s\" existiert und wird nicht überschrieben",
@@ -443,6 +449,7 @@
"domain_not_found": "Domain %s nicht gefunden",
"domain_quota_m_in_use": "Domain-Speicherplatzlimit muss größer oder gleich %d MiB sein",
"extended_sender_acl_denied": "Keine Rechte zum Setzen von externen Absenderadressen",
+ "external_goto_denied": "Externe Ziel-Adresse %s ist nicht erlaubt",
"extra_acl_invalid": "Externe Absenderadresse \"%s\" ist ungültig",
"extra_acl_invalid_domain": "Externe Absenderadresse \"%s\" verwendet eine ungültige Domain",
"fido2_verification_failed": "FIDO2-Verifizierung fehlgeschlagen: %s",
@@ -455,13 +462,13 @@
"global_map_write_error": "Kann globale Map ID %s nicht schreiben: %s",
"goto_empty": "Eine Alias-Adresse muss auf mindestens eine gültige Ziel-Adresse zeigen",
"goto_invalid": "Ziel-Adresse %s ist ungültig",
- "ham_learn_error": "Ham Lernfehler: %s",
+ "ham_learn_error": "Ham-Lernfehler: %s",
"iam_test_connection": "Verbindung fehlgeschlagen",
"imagick_exception": "Fataler Bildverarbeitungsfehler",
"img_dimensions_exceeded": "Grafik überschreitet die maximale Bildgröße",
"img_invalid": "Grafik konnte nicht validiert werden",
"img_size_exceeded": "Grafik überschreitet die maximale Dateigröße",
- "img_tmp_missing": "Grafik konnte nicht validiert werden: Erstellung temporärer Datei fehlgeschlagen.",
+ "img_tmp_missing": "Grafik konnte nicht validiert werden: Temporärer Datei nicht gefunden.",
"invalid_bcc_map_type": "Ungültiger BCC-Map-Typ",
"invalid_destination": "Ziel-Format \"%s\" ist ungültig",
"invalid_filter_type": "Ungültiger Filtertyp",
@@ -474,7 +481,7 @@
"invalid_reset_token": "Ungültiger Rücksetz-Token",
"ip_list_empty": "Liste erlaubter IPs darf nicht leer sein",
"is_alias": "%s lautet bereits eine Alias-Adresse",
- "is_alias_or_mailbox": "Eine Mailbox, ein Alias oder eine sich aus einer Alias-Domain ergebende Adresse mit dem Namen %s ist bereits vorhanden",
+ "is_alias_or_mailbox": "Eine Mailbox, ein Alias oder eine sich aus einer Alias-Domain ergebende Adresse mit dem Namen %s ist bereits vorhanden.",
"is_spam_alias": "%s lautet bereits eine temporäre Alias-Adresse (Spam-Alias-Adresse)",
"last_key": "Letzter Key kann nicht gelöscht werden, bitte stattdessen die 2FA deaktivieren.",
"login_failed": "Anmeldung fehlgeschlagen",
@@ -512,6 +519,7 @@
"pushover_credentials_missing": "Pushover Token und/oder Key fehlen",
"pushover_key": "Pushover Key hat das falsche Format",
"pushover_token": "Pushover Token hat das falsche Format",
+ "quarantine_category_invalid": "Quarantäne-Kategorie muss eine der folgenden sein: add_header, reject, all",
"quota_not_0_not_numeric": "Speicherplatz muss numerisch und >= 0 sein",
"recipient_map_entry_exists": "Eine Empfängerumschreibung für Objekt \"%s\" existiert bereits",
"recovery_email_failed": "E-Mail zur Wiederherstellung konnte nicht gesendet werden. Bitte wenden Sie sich an Ihren Administrator.",
@@ -536,6 +544,7 @@
"temp_error": "Temporärer Fehler",
"text_empty": "Text darf nicht leer sein",
"tfa_token_invalid": "TFA-Token ungültig",
+ "tfa_removal_blocked": "Zwei-Faktor-Authentifizierung kann nicht entfernt werden, da sie für Ihr Konto erforderlich ist.",
"tls_policy_map_dest_invalid": "Ziel ist ungültig",
"tls_policy_map_entry_exists": "Eine TLS-Richtlinie \"%s\" existiert bereits",
"tls_policy_map_parameter_invalid": "Parameter ist ungültig",
@@ -546,6 +555,7 @@
"webauthn_authenticator_failed": "Der ausgewählte Authenticator wurde nicht gefunden",
"webauthn_publickey_failed": "Zu dem ausgewählten Authenticator wurde kein Publickey hinterlegt",
"webauthn_username_failed": "Der ausgewählte Authenticator gehört zu einem anderen Konto",
+ "ui_theme_invalid": "Theme nicht gefunden",
"unknown": "Ein unbekannter Fehler trat auf",
"unknown_tfa_method": "Unbekannte TFA-Methode",
"unlimited_quota_acl": "Unendliche Quota untersagt durch ACL",
@@ -657,7 +667,7 @@
"delete1": "Lösche Nachricht nach Übertragung vom Quell-Server",
"delete2": "Lösche Nachrichten von Ziel-Server, die nicht auf Quell-Server vorhanden sind",
"delete2duplicates": "Lösche Duplikate im Ziel",
- "delete_ays": "Soll der Löschvorgang wirklich ausgeführt werden?",
+ "delete_ays": "Bitte den Löschvorgang bestätigen.",
"description": "Beschreibung",
"disable_login": "Login verbieten (Mails werden weiterhin angenommen)",
"domain": "Domain bearbeiten",
@@ -726,6 +736,7 @@
"mta_sts_mx": "MX-Server",
"mta_sts_mx_info": "Erlaubt das Senden nur an explizit aufgeführte Mailserver-Hostnamen; der sendende MTA überprüft, ob der DNS-MX-Hostname mit der Richtlinienliste übereinstimmt, und erlaubt die Zustellung nur mit einem gültigen TLS-Zertifikat (schützt vor MITM).",
"mta_sts_mx_notice": "Es können mehrere MX-Server angegeben werden (durch Kommas getrennt).",
+ "mta_sts_active_info": "Wenn nicht angehakt, wird die MTA-STS-Richtlinie nicht veröffentlicht und für die mta-sts-Subdomain kein Zertifikat über ACME angefordert.",
"multiple_bookings": "Mehrfaches Buchen",
"nexthop": "Next Hop",
"none_inherit": "Keine Auswahl / Erben",
@@ -776,7 +787,7 @@
"spam_score": "Einen benutzerdefiniterten Spam-Score festlegen",
"subfolder2": "Ziel-Ordnertheme.css (erforderlich)dark.css (optional, Darkmode)bootstrap.css (optional, ersetzt das Bootstrap-Basistheme)theme.json (optional, name und description)
(leer = kein Unterordner)",
"syncjob": "Sync-Job bearbeiten",
- "target_address": "Ziel-Adresse(n)",
+ "target_address": "Ziel-Adresse(n)(kommasepariert)",
"target_domain": "Ziel-Domain",
"timeout1": "Timeout für Verbindung zum Remote-Host",
"timeout2": "Timeout für Verbindung zum lokalen Host",
@@ -958,7 +969,7 @@
"private_comment": "Privater Kommentar",
"public_comment": "Öffentlicher Kommentar",
"q_add_header": "bei Mail in Junk-Ordner",
- "q_all": "bei Reject und Mail in Junk-Ordner",
+ "q_all": " bei Reject und Mail in Junk-Ordner",
"q_reject": "bei Reject",
"quarantine_category": "Quarantäne-Benachrichtigungskategorie",
"quarantine_notification": "Quarantäne-Benachrichtigung",
@@ -1032,7 +1043,8 @@
"syncjob_EXIT_AUTHENTICATION_FAILURE": "Authentifizierungsproblem",
"syncjob_EXIT_OVERQUOTA": "Ziel Mailbox ist über dem Limit",
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Kann keine Verbindung zum Zielserver herstellen",
- "iam": "Identitätsanbieter"
+ "iam": "Identitätsanbieter",
+ "force_tfa": "2-Faktor-Authentifizierung"
},
"oauth2": {
"access_denied": "Bitte als Mailbox-Nutzer einloggen, um den Zugriff via OAuth2 zu erlauben.",
@@ -1084,7 +1096,7 @@
"rspamd_result": "Rspamd-Ergebnis",
"sender": "Sender (SMTP)",
"sender_header": "Sender (\"From\"-Header)",
- "settings_info": "Maximale Anzahl der zurückgehaltenen E-Mails: %s
Maximale Größe einer zu speichernden E-Mail: %s MiB",
+ "settings_info": "Maximale Anzahl der zurückgehaltenen E-Mails (pro Mailbox): %s
Maximale Größe einer zu speichernden E-Mail: %s MiB",
"show_item": "Details",
"spam": "Spam",
"spam_score": "Bewertung",
@@ -1201,6 +1213,7 @@
"tls_policy_map_entry_deleted": "TLS-Richtlinie mit der ID %s wurde gelöscht",
"tls_policy_map_entry_saved": "TLS-Richtlinieneintrag \"%s\" wurde gespeichert",
"ui_texts": "Änderungen an UI-Texten",
+ "ui_theme_modified": "Theme wurde erfolgreich gespeichert",
"upload_success": "Datei wurde erfolgreich hochgeladen",
"verified_fido2_login": "FIDO2-Anmeldung verifiziert",
"verified_totp_login": "TOTP-Anmeldung verifiziert",
@@ -1226,14 +1239,19 @@
"set_tfa": "Konfiguriere Zwei-Faktor-Authentifizierungsmethode",
"start_webauthn_validation": "Starte Validierung",
"tfa": "Zwei-Faktor-Authentifizierung",
- "tfa_token_invalid": "TFA-Token ungültig!",
+ "tfa_token_invalid": "2FA-Token ungültig",
"totp": "Time-based-OTP (Google Authenticator etc.)",
"u2f_deprecated": "Es sieht so aus als wurde der Schlüssel mit der alten U2F Methode registriert. Wir werden die Zwei-Faktor-Authentifizierung deaktivieren und deinen Schlüssel löschen.",
"u2f_deprecated_important": "Bitte registriere den Schlüssel im Adminbereich mit der neuen WebAuthn Methode.",
"webauthn": "WebAuthn-Authentifizierung",
"waiting_usb_auth": "Warte auf USB-Gerät...
Bitte jetzt den vorgesehenen Taster des USB-Gerätes berühren.",
"waiting_usb_register": "Warte auf USB-Gerät...
Bitte zuerst das obere Passwortfeld ausfüllen und erst dann den vorgesehenen Taster des USB-Gerätes berühren.",
- "yubi_otp": "Yubico OTP-Authentifizierung"
+ "yubi_otp": "Yubico OTP-Authentifizierung",
+ "force_tfa": "Zwei-Faktor-Authentifizierung beim Login erzwingen",
+ "force_tfa_info": "Der Benutzer muss Zwei-Faktor-Authentifizierung einrichten, bevor er auf den Bereich zugreifen kann.",
+ "setup_title": "Zwei-Faktor-Authentifizierung erforderlich",
+ "setup_required": "Ihr Konto erfordert Zwei-Faktor-Authentifizierung. Bitte richten Sie eine 2FA-Methode ein, um fortzufahren.",
+ "cancel_setup": "Abbrechen und abmelden"
},
"user": {
"action": "Aktion",
@@ -1312,6 +1330,7 @@
"never": "Niemals",
"new_password": "Neues Passwort",
"new_password_repeat": "Neues Passwort (Wiederholung)",
+ "pw_update_required": "Ihr Konto erfordert eine Passwortänderung. Bitte setzen Sie ein neues Passwort, um fortzufahren.",
"no_active_filter": "Kein aktiver Filter vorhanden",
"no_last_login": "Keine letzte UI-Anmeldung gespeichert",
"no_record": "Kein Eintrag",
@@ -1349,7 +1368,7 @@
"shared_aliases_desc": "Geteilte Alias-Adressen werden nicht bei benutzerdefinierten Einstellungen, wie die des Spam-Filters oder der Verschlüsselungsrichtlinie, berücksichtigt. Entsprechende Spam-Filter können lediglich von einem Administrator vorgenommen werden.",
"show_sieve_filters": "Zeige aktiven Filter des Benutzers",
"sogo_profile_reset": "SOGo-Profil zurücksetzen",
- "sogo_profile_reset_help": "Das Profil wird inklusive aller Kalender- und Kontaktdaten unwiederbringlich gelöscht.",
+ "sogo_profile_reset_help": "Das Profil wird inklusive aller Kalender- und Kontaktdaten unwiederbringlich gelöscht.",
"sogo_profile_reset_now": "Profil jetzt zurücksetzen",
"spam_aliases": "Spam E-Mail-Aliasse",
"spam_aliases_info": "Ein Spam-Alias ist eine temporäre E-Mailadresse, die benutzt werden kann, um eine echte E-Mail Adressen zu schützen.
Optional kann eine Ablaufzeit gesetzt werden, sodass der Alias nach dem definierten Zeitraum automatisch deaktiviert wird, was missbrauchte oder geleakte Adressen effektiv entsorgt.",
diff --git a/data/web/lang/lang.en-gb.json b/data/web/lang/lang.en-gb.json
index 79175e578..1f1c1f273 100644
--- a/data/web/lang/lang.en-gb.json
+++ b/data/web/lang/lang.en-gb.json
@@ -1,6 +1,7 @@
{
"acl": {
"alias_domains": "Add alias domains",
+ "alias_external_goto": "Allow aliases with external goto domains",
"app_passwds": "Manage app passwords",
"bcc_maps": "BCC maps",
"delimiter_action": "Delimiter action",
@@ -404,6 +405,11 @@
"ui_header_announcement_type_info": "Info",
"ui_header_announcement_type_warning": "Important",
"ui_texts": "UI labels and texts",
+ "ui_theme": "Theme",
+ "ui_theme_dark": "Includes a dark mode variant",
+ "ui_theme_default": "Default",
+ "ui_theme_info": "Themes are folders in data/web/css/themes/<name>/ with the following files:
",
+ "ui_theme_none": "No themes found.",
"unban_pending": "unban pending",
"unchanged_if_empty": "If unchanged leave blank",
"upload": "Upload",
@@ -416,6 +422,7 @@
},
"danger": {
"access_denied": "Access denied or invalid form data",
+ "tfa_removal_blocked": "Two-factor authentication cannot be removed because it is required for your account.",
"alias_domain_invalid": "Alias domain %s is invalid",
"alias_empty": "Alias address must not be empty",
"alias_goto_identical": "Alias and goto address must not be identical",
@@ -443,6 +450,7 @@
"domain_not_found": "Domain %s not found",
"domain_quota_m_in_use": "Domain quota must be greater or equal to %s MiB",
"extended_sender_acl_denied": "missing ACL to set external sender addresses",
+ "external_goto_denied": "External goto address %s is not allowed",
"extra_acl_invalid": "External sender address \"%s\" is invalid",
"extra_acl_invalid_domain": "External sender \"%s\" uses an invalid domain",
"fido2_verification_failed": "FIDO2 verification failed: %s",
@@ -512,6 +520,7 @@
"pushover_credentials_missing": "Pushover token and or key missing",
"pushover_key": "Pushover key has a wrong format",
"pushover_token": "Pushover token has a wrong format",
+ "quarantine_category_invalid": "Quarantine category must be one of: add_header, reject, all",
"quota_not_0_not_numeric": "Quota must be numeric and >= 0",
"recipient_map_entry_exists": "A Recipient map entry \"%s\" exists",
"recovery_email_failed": "Could not send a recovery email. Please contact your administrator.",
@@ -550,6 +559,7 @@
"webauthn_authenticator_failed": "The selected authenticator was not found",
"webauthn_publickey_failed": "No public key was stored for the selected authenticator",
"webauthn_username_failed": "The selected authenticator belongs to another account",
+ "ui_theme_invalid": "Theme not found",
"unknown": "An unknown error occurred",
"unknown_tfa_method": "Unknown TFA method",
"unlimited_quota_acl": "Unlimited quota prohibited by ACL",
@@ -726,6 +736,7 @@
"mta_sts_mx": "MX server",
"mta_sts_mx_info": "Allows sending only to explicitly listed mail server hostnames; the sending MTA checks if the DNS MX hostname matches the policy list, and only allows delivery with a valid TLS certificate (guards against MITM).",
"mta_sts_mx_notice": "Multiple MX servers can be specified (separated by commas).",
+ "mta_sts_active_info": "If unchecked, the MTA-STS policy will not be published and no certificate will be requested for the mta-sts subdomain via ACME.",
"multiple_bookings": "Multiple bookings",
"none_inherit": "None / Inherit",
"nexthop": "Next hop",
@@ -927,6 +938,7 @@
"filters": "Filters",
"fname": "Full name",
"force_pw_update": "Force password update at next login",
+ "force_tfa": "TFA",
"gal": "Global Address List",
"goto_ham": "Learn as ham",
"goto_spam": "Learn as spam",
@@ -1084,7 +1096,7 @@
"rspamd_result": "Rspamd result",
"sender": "Sender (SMTP)",
"sender_header": "Sender (\"From\" header)",
- "settings_info": "Maximum amount of elements to be quarantined: %stheme.css (required)dark.css (optional, dark mode)bootstrap.css (optional, replaces the Bootstrap base theme)theme.json (optional, name and description)
Maximum email size: %s MiB",
+ "settings_info": "Maximum amount of elements to be quarantined (per mailbox): %s
Maximum email size: %s MiB",
"show_item": "Show item",
"spam": "Spam",
"spam_score": "Score",
@@ -1208,6 +1220,7 @@
"tls_policy_map_entry_deleted": "TLS policy map ID %s has been deleted",
"tls_policy_map_entry_saved": "TLS policy map entry \"%s\" has been saved",
"ui_texts": "Saved changes to UI texts",
+ "ui_theme_modified": "Theme was saved successfully",
"upload_success": "File uploaded successfully",
"verified_fido2_login": "Verified FIDO2 login",
"verified_totp_login": "Verified TOTP login",
@@ -1221,6 +1234,11 @@
"confirm_totp_token": "Please confirm your changes by entering the generated token",
"delete_tfa": "Disable TFA",
"disable_tfa": "Disable TFA until next successful login",
+ "force_tfa": "Force 2FA enrollment at login",
+ "force_tfa_info": "The user will be required to set up two-factor authentication before accessing the panel.",
+ "setup_title": "Two-Factor Authentication Required",
+ "setup_required": "Your account requires two-factor authentication. Please set up a 2FA method to continue.",
+ "cancel_setup": "Cancel and log out",
"enter_qr_code": "Your TOTP code if your device cannot scan QR codes",
"error_code": "Error code",
"init_webauthn": "Initializing, please wait...",
@@ -1327,6 +1345,7 @@
"overview": "Overview",
"password": "Password",
"password_now": "Current password (confirm changes)",
+ "pw_update_required": "Your account requires a password change. Please set a new password to continue.",
"password_repeat": "Password (repeat)",
"password_reset_info": "If no email for password recovery is provided, this function cannot be used.",
"protocols": "Protocols",
diff --git a/data/web/lang/lang.es-es.json b/data/web/lang/lang.es-es.json
index 7d86973ac..1fb7becfd 100644
--- a/data/web/lang/lang.es-es.json
+++ b/data/web/lang/lang.es-es.json
@@ -17,7 +17,7 @@
"spam_policy": "Lista de bloqueo/desbloqueo",
"spam_score": "Puntuación de spam",
"syncjobs": "Trabajos de sincronización",
- "tls_policy": "Póliza de TLS",
+ "tls_policy": "Política de TLS",
"unlimited_quota": "Cuota ilimitada para buzones",
"app_passwds": "Gestionar las contraseñas de aplicaciones",
"domain_desc": "Cambiar descripción del dominio",
@@ -28,7 +28,8 @@
"pw_reset": "Permitir el restablecimiento de la contraseña del usuario mailcow",
"sogo_access": "Permitir la gestión del acceso a SOGo",
"mailbox_relayhost": "Cambiar el host de reenvío para un buzón",
- "smtp_ip_access": "Cambiar hosts permitidos para SMTP"
+ "smtp_ip_access": "Cambiar hosts permitidos para SMTP",
+ "alias_external_goto": "Permitir alias con dominios de destino externos"
},
"add": {
"activate_filter_warn": "Todos los demás filtros se desactivarán cuando este filtro se active.",
@@ -78,8 +79,8 @@
"relay_all": "Retransmitir todos los destinatarios",
"relay_all_info": "↪ Si se elige no retransmitir todos los destinatarios, será necesario agregar un buzón \"ciego\" por cada destinatario que deba ser retransmitido.",
"relay_domain": "Retransmitir este dominio",
- "select": "Por favor selecciona...",
- "select_domain": "Por favor elige un dominio primero",
+ "select": "Seleccione...",
+ "select_domain": "Elija primero un dominio",
"sieve_desc": "Descripción",
"sieve_type": "Tipo de filtro",
"skipcrossduplicates": "Omitir mensajes duplicados en carpetas (orden de llegada)",
@@ -108,7 +109,9 @@
"domain_matches_hostname": "El dominio %s coincide con el nombre de host",
"relay_unknown_only": "Reenviar sólo los buzones no existentes. Los buzones existentes se entregarán localmente.",
"relayhost_wrapped_tls_info": "Por favor, no utilice puertos con TLS (habitualmente, el puerto 465).
Utilice cualquier puerto no cifrado y emita STARTTLS. Se puede crear una política para imponer TLS en \"TLS policy maps\".",
- "tags": "Etiquetas"
+ "tags": "Etiquetas",
+ "internal_info": "Los alias internos solo son accesibles desde el propio dominio o sus dominios alias.",
+ "sender_allowed": "Permitir enviar como este alias"
},
"admin": {
"access": "Acceso",
@@ -171,7 +174,7 @@
"f2b_max_ban_time": "Max tiempo de restricción (s)",
"f2b_netban_ipv4": "Tamaño de subred IPv4 para aplicar la restricción (8-32)",
"f2b_netban_ipv6": "Tamaño de subred IPv6 para aplicar la restricción (8-128)",
- "f2b_parameters": "Parametros Fail2ban",
+ "f2b_parameters": "Parámetros de Fail2ban",
"f2b_retry_window": "Ventana de tiempo entre reintentos",
"f2b_whitelist": "Redes y hosts en lista de desbloqueo",
"filter_table": "Filtrar tabla",
@@ -190,7 +193,7 @@
"include_exclude_info": "Por defecto - sin selección - todos los buzones son notificados.",
"includes": "Incluye a estos destinatarios",
"link": "Enlace",
- "loading": "Espera por favor...",
+ "loading": "Espere, por favor...",
"logo_info": "La imagen se escalará a una altura de 40 px para la barra de navegación superior y un máx. de ancho de 250 px para la página de inicio. Un gráfico escalable es muy recomendable.",
"main_name": "Nombre \"mailcow UI\"",
"merged_vars_hint": "Las filas grises fueron incorporadas de vars.(local.)inc.php y no son modificables.",
@@ -281,7 +284,7 @@
"password_length": "Longitud de la contraseña",
"quicklink_text": "Mostrar u ocultar enlaces rápidos a otras páginas de inicio bajo el formulario de inicio de sesión",
"password_policy_lowerupper": "Debe contener caracteres en minúsculas y mayúsculas",
- "rspamd_global_filters_regex": "Sus nombres indican su propósito. Todo el contenido debe constar de expresiones regulares válidas con el formato \"/patrón/opciones\" (por ejemplo, /.+@domain\\.tld/i).
\n Si bien se llevan a cabo comprobaciones básicas de cada expresión regular, la funcionalidad de Rspamd puede verse inutilizada, si no consigue interpretar correctamente la sintaxis utilizada.
\n Rspamd intentará leer el contenido del mapa cuando éste se modifique. En caso de de problemas, reinicie Rspamd para forzar una recarga del mapa.
Los elementos incluidos en listas de bloqueo se excluyen de la cuarentena.",
+ "rspamd_global_filters_regex": "Sus nombres indican su propósito. Todo el contenido debe constar de expresiones regulares válidas con el formato \"/patrón/opciones\" (por ejemplo, /.+@domain\\.tld/i).
\n Si bien se llevan a cabo comprobaciones básicas de cada expresión regular, la funcionalidad de Rspamd puede verse inutilizada, si no consigue interpretar correctamente la sintaxis utilizada.
\n Rspamd intentará leer el contenido del mapa cuando este se modifique. En caso de problemas, reinicie Rspamd para forzar una recarga del mapa.
Los elementos incluidos en listas de bloqueo se excluyen de la cuarentena.",
"iam_use_ssl_info": "Si se habilita SSL y el puerto se establece en el 389, se cambiará automáticamente al 636.",
"iam_login_provisioning": "Crear usuarios automáticamente al iniciar sesión",
"iam_periodic_full_sync": "Sincronización completa periódica",
@@ -400,7 +403,20 @@
"user_quicklink": "Ocultar enlace rápido a página de inicio de sesión de usuario",
"validate_license_now": "Validar el GUID contra el servidor de licencias",
"verify": "Verificar",
- "yes": "✓"
+ "yes": "✓",
+ "iam_auth_flow_info": "Además del Authorization Code Flow (Standard Flow en Keycloak), que se usa para el inicio de sesión único (SSO), mailcow también admite autenticación con credenciales directas. El Mailpassword Flow intenta validar las credenciales del usuario mediante la API REST de administración de Keycloak. mailcow obtiene la contraseña cifrada del atributo mailcow_password, que está mapeado en Keycloak.",
+ "iam_extra_permission": "Para que los siguientes ajustes funcionen, el cliente de mailcow en Keycloak necesita una Service account y el permiso view-users.",
+ "iam_bindpass": "Contraseña de enlace (bind)",
+ "iam_rest_flow": "Mailpassword Flow",
+ "iam_binddn": "Bind DN",
+ "oauth2_info": "La implementación de OAuth2 admite el tipo de concesión \"Authorization Code\" y emite tokens de actualización.
\r\nEl servidor también emite automáticamente nuevos tokens de actualización después de usar uno.
\r\n• El alcance predeterminado es profile. Solo los usuarios de buzones pueden autenticarse mediante OAuth2. Si se omite el parámetro scope, se usa profile.
\r\n• El cliente debe enviar el parámetro state como parte de la solicitud de autorización.
\r\nRutas para las solicitudes a la API de OAuth2:
\r\n\r\n
\r\nRegenerar el secreto del cliente no invalida los códigos de autorización existentes, pero estos no podrán renovar su token./oauth/authorize/oauth/token/oauth/profile
\r\nRevocar los tokens de los clientes termina de inmediato todas las sesiones activas. Todos los clientes deberán volver a autenticarse.",
+ "rate_name": "Nombre del límite",
+ "ui_header_announcement_active": "Activar anuncio",
+ "ui_theme": "Tema",
+ "ui_theme_dark": "Incluye una variante en modo oscuro",
+ "ui_theme_default": "Predeterminado",
+ "ui_theme_info": "Los temas son carpetas en data/web/css/themes/<name>/ con los siguientes archivos:
",
+ "ui_theme_none": "No se encontraron temas."
},
"danger": {
"access_denied": "Acceso denegado o datos del formulario inválidos",
@@ -447,7 +463,7 @@
"map_content_empty": "Contenido no puede estar vacío",
"max_mailbox_exceeded": "Máx. de buzones superado (%d de %d)",
"max_quota_in_use": "Cuota del buzón debe ser mayor o igual a %d MiB",
- "mysql_error": "MySQL error: %s",
+ "mysql_error": "Error de MySQL: %s",
"network_host_invalid": "Red o host inválido: %s",
"next_hop_interferes": "%s interfiere con el siguiente destino %s",
"next_hop_interferes_any": "Siguiente destino existente interfiere con %s",
@@ -462,7 +478,7 @@
"private_key_error": "Error en la llave privada: %s",
"quota_not_0_not_numeric": "Cuota debe ser numérica y >= 0",
"recipient_map_entry_exists": "Una regla de destinatario \"%s\" existe",
- "redis_error": "Redis error: %s",
+ "redis_error": "Error de Redis: %s",
"relayhost_invalid": "relayhost %s es invalido",
"release_send_failed": "El mensaje no pudo ser liberado: %s",
"rl_timeframe": "Marco de tiempo del límite de velocidad esta incorrecto",
@@ -471,14 +487,14 @@
"sender_acl_invalid": "Valor %s del ACL del remitente es inválido",
"set_acl_failed": "Error al establecer el ACL",
"settings_map_invalid": "Ajustes de ID %s invalidos",
- "sieve_error": "Sieve parser error: %s",
+ "sieve_error": "Error del analizador de Sieve: %s",
"spam_learn_error": "Error aprendiendo muestra: %s",
"subject_empty": "Asunto no puede estar vacío",
"target_domain_invalid": "El dominio \"goto\" es inválido",
"targetd_not_found": "Dominio destino no encontrado",
"text_empty": "Texto no puede estar vacío",
- "tls_policy_map_entry_exists": "Regla de póliza de TLS \"%s\" existe",
- "tls_policy_map_parameter_invalid": "El parámetro de póliza no es válido.",
+ "tls_policy_map_entry_exists": "La regla de política de TLS \"%s\" ya existe",
+ "tls_policy_map_parameter_invalid": "El parámetro de la política no es válido.",
"totp_verification_failed": "Verificación TOTP fallida",
"transport_dest_exists": "Destino de la regla de transporte ya existe",
"webauthn_verification_failed": "Verificación WebAuthn fallida: %s",
@@ -541,7 +557,12 @@
"tfa_token_invalid": "Token de autenticación de doble factor no válido",
"to_invalid": "El destinatario no puede quedar en blanco",
"webauthn_authenticator_failed": "No se ha localizado el autenticador seleccionado",
- "webauthn_username_failed": "El autenticador seleccionado pertenece a otra cuenta"
+ "webauthn_username_failed": "El autenticador seleccionado pertenece a otra cuenta",
+ "tfa_removal_blocked": "No se puede quitar la autenticación de dos factores porque es obligatoria para su cuenta.",
+ "external_goto_denied": "La dirección de destino externa %s no está permitida",
+ "max_age_invalid": "La antigüedad máxima %s no es válida",
+ "quarantine_category_invalid": "La categoría de cuarentena debe ser una de: add_header, reject, all",
+ "ui_theme_invalid": "Tema no encontrado"
},
"debug": {
"containers_info": "Información de los contenedores",
@@ -551,11 +572,11 @@
"log_info": "theme.css (obligatorio)dark.css (opcional, modo oscuro)bootstrap.css (opcional, reemplaza el tema base de Bootstrap)theme.json (opcional, name y description)
Los logs en memoria no están destinados a ser persistentes. Todas las aplicaciones que logean a la memoria, también logean en el daemon de Docker y, por lo tanto, en el controlador de registro predeterminado.\r\n El log en memoria se debe utilizar para analizar problemas menores con los contenedores.
Se usa cuando DANE no es posible por falta de DNSSEC o porque no es compatible.
Nota: si el dominio receptor admite DANE con DNSSEC, DANE siempre tiene preferencia; MTA-STS solo actúa como alternativa.",
+ "mta_sts_version_info": "Define la versión del estándar MTA-STS; actualmente solo es válida STSv1.",
+ "mta_sts_mode_info": "Hay tres modos para elegir:
",
+ "mta_sts_max_age": "Antigüedad máxima",
+ "mta_sts_max_age_info": "Tiempo en segundos durante el cual los servidores receptores pueden guardar esta política en caché antes de volver a obtenerla.",
+ "mta_sts_mx_info": "Permite enviar solo a los nombres de servidor de correo indicados explícitamente; el MTA emisor comprueba que el nombre del registro MX coincida con la lista de la política y solo entrega con un certificado TLS válido (protege contra ataques MITM).",
+ "mta_sts_mx_notice": "Se pueden indicar varios servidores MX (separados por comas).",
+ "mta_sts_active_info": "Si se desmarca, la política MTA-STS no se publicará y no se solicitará ningún certificado para el subdominio mta-sts mediante ACME.",
+ "pushover_only_x_prio": "Considerar solo el correo de alta prioridad [X-Priority: 1]",
+ "pushover_sender_regex": "Considerar la siguiente expresión regular de remitente",
+ "pushover_vars": "Si no se define ningún filtro de remitente, se considerarán todos los correos.
Los filtros por expresión regular y las comprobaciones exactas de remitente pueden definirse por separado y se evalúan en orden. No dependen entre sí.
Variables utilizables para el texto y el título (tenga en cuenta las normas de protección de datos)"
},
"footer": {
- "hibp_nok": "¡Se encontró coincidencia - esta es una contraseña no segura, selecciona otra!",
+ "hibp_nok": "¡Se encontró una coincidencia: esta es una contraseña no segura, elija otra!",
"hibp_ok": "No se encontraron coincidencias",
- "loading": "Espera por favor...",
+ "loading": "Espere, por favor...",
"restart_now": "Reiniciar ahora",
"restart_container": "Reiniciar contenedor",
"restart_container_info": "Importante: Un reinicio limpio puede llevar un tiempo. Por favor, espere a que finalice.",
@@ -735,7 +780,7 @@
"header": {
"administration": "Administración",
"debug": "Información",
- "email": "E-Mail",
+ "email": "Correo electrónico",
"mailcow_config": "Configuración",
"quarantine": "Cuarentena",
"restart_sogo": "Reiniciar SOGo",
@@ -781,12 +826,12 @@
"add_bcc_entry": "Añadir regla de BCC",
"add_domain": "Agregar dominio",
"add_domain_alias": "Agregar alias de dominio",
- "add_domain_record_first": "Agrega un dominio primero",
+ "add_domain_record_first": "Agregue primero un dominio",
"add_filter": "Añadir filtro",
"add_mailbox": "Agregar buzón",
"add_recipient_map_entry": "Añadir regla de destinatario",
"add_resource": "Añadir recurso",
- "add_tls_policy_map": "Añadir regla de póliza de TLS",
+ "add_tls_policy_map": "Agregar regla de política de TLS",
"address_rewriting": "Reescritura de direcciones",
"alias": "Alias",
"aliases": "Alias",
@@ -864,8 +909,8 @@
"running": "En marcha",
"set_postfilter": "Marcar como posfiltro",
"set_prefilter": "Marcar como prefiltro",
- "sieve_info": "Puedes almacenar múltiples filtros por usuario, pero solo un prefiltro y un postfiltro pueden estar activos al mismo tiempo.
\r\nCada filtro será procesado en el orden descrito. Ni un script fallido ni un \"keep;\" emitido detendrá el procesamiento de otros scripts.
\r\nPrefiltro sieve global → Prefiltro → Scripts del usuario → Posfiltro → Posfiltro sieve global",
- "status": "Status",
+ "sieve_info": "Puede almacenar varios filtros por usuario, pero solo un prefiltro y un postfiltro pueden estar activos al mismo tiempo.
\r\nCada filtro será procesado en el orden descrito. Ni un script fallido ni un \"keep;\" emitido detendrá el procesamiento de otros scripts.
\r\nPrefiltro sieve global → Prefiltro → Scripts del usuario → Posfiltro → Posfiltro sieve global",
+ "status": "Estado",
"sync_jobs": "Trabajos de sincronización",
"target_address": "Dirección destino",
"target_domain": "Dominio destino",
@@ -873,12 +918,12 @@
"tls_enforce_out": "Forzar TLS saliente",
"tls_map_dest": "Destino",
"tls_map_dest_info": "Ejemplos: example.org, .example.org, [mail.example.org]:25",
- "tls_map_parameters": "Parametros",
- "tls_map_parameters_info": "Vacío o parametros, por ejemplo: protocols=!SSLv2 ciphers=medium exclude=3DES",
- "tls_map_policy": "Póliza",
+ "tls_map_parameters": "Parámetros",
+ "tls_map_parameters_info": "Vacío o parámetros, por ejemplo: protocols=!SSLv2 ciphers=medium exclude=3DES",
+ "tls_map_policy": "Política",
"tls_policy_maps": "Políticas de TLS",
- "tls_policy_maps_info": "Esta póliza anula las reglas de transporte TLS salientes independientemente de la configuración de la política TLS de los usuarios.
\r\n Revisa the \"smtp_tls_policy_maps\" docs para mas información.",
- "tls_policy_maps_long": "Forzar póliza de TLS saliente",
+ "tls_policy_maps_info": "Este mapa de políticas anula las reglas de transporte TLS salientes, independientemente de la configuración de la política TLS de los usuarios.
\r\n Consulte la documentación de \"smtp_tls_policy_maps\" para más información.",
+ "tls_policy_maps_long": "Forzar política de TLS saliente",
"toggle_all": "Selecionar todo",
"username": "Nombre de usuario",
"waiting": "Esperando",
@@ -942,7 +987,12 @@
"table_size_show_n": "Mostrar %s elementos",
"templates": "Plantillas",
"template": "Plantilla",
- "yes": "✓"
+ "yes": "✓",
+ "add_alias_expand": "Extender el alias a los dominios alias",
+ "alias_domain_backupmx": "Dominio alias inactivo para el dominio de retransmisión",
+ "catch_all": "Recoge-todo (catch-all)",
+ "force_tfa": "2FA",
+ "last_run_reset": "Programar la siguiente"
},
"oauth2": {
"access_denied": "Inicie sesión como propietario del buzón para otorgar acceso a través de OAuth2.",
@@ -967,8 +1017,8 @@
"medium_danger": "Peligro medio",
"neutral_danger": "Neutral",
"qhandler_success": "Solicitud enviada con éxito al sistema, puede cerrar la ventana",
- "qid": "Rspamd QID",
- "qitem": "Quarantine item",
+ "qid": "QID de Rspamd",
+ "qitem": "Elemento en cuarentena",
"quarantine": "Cuarentena",
"quick_actions": "Acciones",
"rcpt": "Destinatario",
@@ -990,14 +1040,29 @@
"download_eml": "Descargar (.eml)",
"info": "Información",
"junk_folder": "Carpeta de correo no deseado",
- "notified": "Notificado"
+ "notified": "Notificado",
+ "qinfo": "El sistema de cuarentena guarda en la base de datos el correo rechazado (al remitente no se le dará la impresión de que el correo fue entregado) y también el correo que se entrega como copia en la carpeta de correo no deseado de un buzón.\r\n
\"Aprender como spam y eliminar\" aprende un mensaje como spam mediante el teorema de Bayes y calcula hashes difusos para rechazar mensajes similares en el futuro.\r\n
Tenga en cuenta que aprender varios mensajes puede llevar tiempo, según su sistema.
Los elementos de la lista de bloqueo se excluyen de la cuarentena.",
+ "quick_delete_link": "Abrir enlace de eliminación rápida",
+ "quick_release_link": "Abrir enlace de liberación rápida",
+ "rewrite_subject": "Reescribir asunto",
+ "sender_header": "Remitente (encabezado \"From\")",
+ "settings_info": "Cantidad máxima de elementos en cuarentena (por buzón): %s
Tamaño máximo de correo: %s MiB"
},
"queue": {
- "queue_manager": "Administrador de cola"
+ "queue_manager": "Administrador de cola",
+ "flush": "Vaciar la cola",
+ "info": "La cola de correo contiene todos los correos que esperan ser entregados. Si un correo permanece mucho tiempo en la cola, el sistema lo elimina automáticamente.
El mensaje de error de cada correo indica por qué no se pudo entregar.",
+ "legend": "Acciones de la cola de correo:",
+ "deliver_mail_legend": "Intenta volver a entregar los correos seleccionados.",
+ "hold_mail_legend": "Retiene los correos seleccionados. (Impide nuevos intentos de entrega)",
+ "show_message": "Mostrar mensaje",
+ "unban": "desbloquear cola",
+ "unhold_mail": "Liberar",
+ "unhold_mail_legend": "Libera los correos seleccionados para su entrega. (Requiere que hayan sido retenidos antes)"
},
"start": {
"help": "Mostrar/Ocultar panel de ayuda",
- "imap_smtp_server_auth_info": "Por favor utiliza tu dirección de correo completa y el mecanismo de autenticación PLAIN.
\r\nTus datos para iniciar sesión serán cifrados por el cifrado obligatorio del servidor"
+ "imap_smtp_server_auth_info": "Utilice su dirección de correo completa y el mecanismo de autenticación PLAIN.
\r\nSus datos de inicio de sesión se cifran gracias al cifrado obligatorio del servidor"
},
"success": {
"acl_saved": "ACL para el objeto %s guardado",
@@ -1024,8 +1089,8 @@
"domain_admin_removed": "Administrador del dominio %s removido",
"domain_modified": "Cambios al dominio %s guardados",
"domain_removed": "Dominio %s removido",
- "forwarding_host_added": "Forwarding host %s has been added",
- "forwarding_host_removed": "Forwarding host %s has been removed",
+ "forwarding_host_added": "Se agregó el host de reenvío %s",
+ "forwarding_host_removed": "Se eliminó el host de reenvío %s",
"logged_in_as": "Conectado como %s",
"mailbox_added": "Buzón %s agregado",
"mailbox_modified": "Cambios al buzón %s guardados",
@@ -1043,31 +1108,86 @@
"saved_settings": "Ajustes guardados",
"settings_map_added": "Ajustes agregados",
"settings_map_removed": "Ajustes del ID %s removidos",
- "tls_policy_map_entry_deleted": "Regla de póliza de TLS con ID %s ha sido elimindada",
- "tls_policy_map_entry_saved": "Regla de póliza de TLS \"%s\" ha sido guardada",
+ "tls_policy_map_entry_deleted": "Se eliminó la regla de política de TLS con ID %s",
+ "tls_policy_map_entry_saved": "Se guardó la regla de política de TLS \"%s\"",
"verified_totp_login": "Inicio de sesión TOTP verificado",
"verified_webauthn_login": "Inicio de sesión WebAuthn verificado",
- "verified_yotp_login": "Inicio de sesión Yubico OTP verificado"
+ "verified_yotp_login": "Inicio de sesión Yubico OTP verificado",
+ "admin_added": "Se agregó el administrador %s",
+ "admin_api_modified": "Se guardaron los cambios en la API",
+ "admin_removed": "Se eliminó el administrador %s",
+ "app_links": "Se guardaron los cambios en los enlaces de aplicaciones",
+ "app_passwd_added": "Se agregó una nueva contraseña de aplicación",
+ "app_passwd_removed": "Se eliminó la contraseña de aplicación con ID %s",
+ "cors_headers_edited": "Se guardó la configuración de CORS",
+ "custom_login_modified": "La personalización del inicio de sesión se guardó correctamente",
+ "domain_add_dkim_available": "Ya existía una clave DKIM",
+ "dkim_duplicated": "La clave DKIM del dominio %s se copió a %s",
+ "domain_footer_modified": "Se guardaron los cambios en el pie de página del dominio %s",
+ "dovecot_restart_success": "Dovecot se reinició correctamente",
+ "eas_reset": "Se restablecieron los dispositivos ActiveSync del usuario %s",
+ "f2b_banlist_refreshed": "El ID de la lista de bloqueo se actualizó correctamente.",
+ "f2b_modified": "Se guardaron los cambios en los parámetros de Fail2ban",
+ "global_filter_written": "El filtro se escribió correctamente en el archivo",
+ "hash_deleted": "Hash eliminado",
+ "iam_test_connection": "Conexión correcta",
+ "ip_check_opt_in_modified": "La comprobación de IP se guardó correctamente",
+ "item_deleted": "Elemento %s eliminado correctamente",
+ "item_released": "Elemento %s liberado",
+ "items_deleted": "Elemento %s eliminado correctamente",
+ "items_released": "Se liberaron los elementos seleccionados",
+ "learned_ham": "El ID %s se aprendió correctamente como correo legítimo (ham)",
+ "license_modified": "Se guardaron los cambios en la licencia",
+ "mailbox_renamed": "El buzón se renombró de %s a %s",
+ "nginx_reloaded": "Nginx se recargó",
+ "object_modified": "Se guardaron los cambios en el objeto %s",
+ "password_policy_saved": "La política de contraseñas se guardó correctamente",
+ "password_changed_success": "La contraseña se cambió correctamente",
+ "pushover_settings_edited": "La configuración de Pushover se guardó; verifique las credenciales.",
+ "recovery_email_sent": "Se envió el correo de recuperación a %s",
+ "reset_main_logo": "Se restableció el logo predeterminado",
+ "resource_removed": "Se eliminó el recurso %s",
+ "sogo_profile_reset": "Se restableció el perfil de SOGo del usuario %s",
+ "template_added": "Se agregó la plantilla %s",
+ "template_modified": "Se guardaron los cambios en la plantilla %s",
+ "template_removed": "Se eliminó la plantilla con ID %s",
+ "ui_texts": "Se guardaron los cambios en los textos de la interfaz",
+ "ui_theme_modified": "El tema se guardó correctamente",
+ "upload_success": "Archivo subido correctamente",
+ "verified_fido2_login": "Inicio de sesión FIDO2 verificado"
},
"tfa": {
- "api_register": "%s utiliza la API de la nube de Yubico. Por favor, obtén una clave API para tu llave aquí.",
+ "api_register": "%s utiliza la API en la nube de Yubico. Obtenga una clave de API para su llave aquí.",
"confirm": "Confirmar",
- "confirm_totp_token": "Por favor confirma los cambios ingresando el token generado",
+ "confirm_totp_token": "Confirme los cambios ingresando el token generado",
"delete_tfa": "Desactivar TFA",
"disable_tfa": "Desactivar TFA hasta el próximo inicio de sesión exitoso",
"enter_qr_code": "Su código TOTP si su dispositivo no puede escanear códigos QR",
- "key_id": "Un identificador para tu YubiKey",
- "key_id_totp": "Un identificador para tu llave",
+ "key_id": "Un identificador para su YubiKey",
+ "key_id_totp": "Un identificador para su llave",
"none": "Desactivar",
"scan_qr_code": "Escanee el siguiente código con su aplicación de autenticador o ingrese el código manualmente.",
- "select": "Selecciona",
+ "select": "Seleccione",
"set_tfa": "Establecer el método de autenticación de dos factores",
"tfa": "Autenticación de dos factores",
"totp": "OTP basado en tiempo (Google Authenticator, Authy, etc.)",
"webauthn": "Autenticación WebAuthn",
"waiting_usb_auth": "Esperando al dispositivo USB...
Toque el botón en su dispositivo USB WebAuthn ahora.",
"waiting_usb_register": "Esperando al dispositivo USB....
Ingrese su contraseña arriba y confirme su registro WebAuthn tocando el botón en su dispositivo USB WebAuthn.",
- "yubi_otp": "Yubico OTP"
+ "yubi_otp": "Yubico OTP",
+ "authenticators": "Autenticadores",
+ "force_tfa": "Exigir configurar 2FA al iniciar sesión",
+ "force_tfa_info": "El usuario deberá configurar la autenticación de dos factores antes de acceder al panel.",
+ "setup_title": "Autenticación de dos factores obligatoria",
+ "setup_required": "Su cuenta requiere autenticación de dos factores. Configure un método de 2FA para continuar.",
+ "cancel_setup": "Cancelar y cerrar sesión",
+ "error_code": "Código de error",
+ "init_webauthn": "Inicializando, espere...",
+ "reload_retry": "- (recargue el navegador si el error persiste)",
+ "start_webauthn_validation": "Iniciar validación",
+ "tfa_token_invalid": "Token de 2FA no válido",
+ "u2f_deprecated": "Parece que su llave se registró con el método obsoleto U2F. Desactivaremos la autenticación de dos factores y eliminaremos su llave.",
+ "u2f_deprecated_important": "Registre su llave en el panel de administración con el nuevo método WebAuthn."
},
"user": {
"action": "Acción",
@@ -1075,7 +1195,7 @@
"alias": "Alias",
"alias_create_random": "Generar alias aleatorio",
"alias_extend_all": "Extender alias por 1 hora",
- "alias_full_date": "d.m.Y, H:i:s T",
+ "alias_full_date": "d/m/Y, H:i:s T",
"alias_remove_all": "Eliminar todos los alias",
"alias_select_validity": "Periodo de validez",
"alias_time_left": "Tiempo restante",
@@ -1126,7 +1246,7 @@
"spamfilter_bl": "Lista negra",
"spamfilter_bl_desc": "Direcciones en la lista negra siempre clasificarán como spam. Se puede usar comodines. Filtro solo aplica a los alias directos (alias con un solo buzón de destino) excluyendo los alias catch-all.",
"spamfilter_default_score": "Valores predeterminados:",
- "spamfilter_green": "Verde: éste mensaje no es spam",
+ "spamfilter_green": "Verde: este mensaje no es spam",
"spamfilter_hint": "El primer valor representa la \"calificación baja de spam\", el segundo representa la \"calificación alta de spam\".",
"spamfilter_red": "Rojo: Este mensaje es spam, será rechazado por el servidor y enviado a la quarantena (si esta configurada)",
"spamfilter_table_action": "Acción",
@@ -1136,8 +1256,8 @@
"spamfilter_table_rule": "Regla",
"spamfilter_wl": "Lista blanca",
"spamfilter_wl_desc": "Direcciones en la lista blanca nunca clasificarán como spam. Se puede usar comodines. Filtro solo aplica a los alias directos (alias con un solo buzón de destino) excluyendo los alias catch-all.",
- "spamfilter_yellow": "Amarillo: éste mensaje puede ser spam, será etiquetado como spam y trasladado a tu carpeta de correo no deseado",
- "status": "Status",
+ "spamfilter_yellow": "Amarillo: este mensaje puede ser spam, será etiquetado como spam y movido a su carpeta de correo no deseado",
+ "status": "Estado",
"sync_jobs": "Trabajos de sincronización",
"tag_handling": "Establecer manejo para el correo etiquetado",
"tag_help_example": "Ejemplo de una dirección email etiquetada: mi+Facebook@ejemplo.org",
@@ -1157,13 +1277,89 @@
"weeks": "Semanas",
"with_app_password": "con contraseña de aplicación",
"year": "año",
- "years": "años"
+ "years": "años",
+ "active_sieve": "Filtro activo",
+ "advanced_settings": "Configuración avanzada",
+ "app_hint": "Las contraseñas de aplicación son contraseñas alternativas para iniciar sesión en IMAP, SMTP, CalDAV, CardDAV y EAS. El nombre de usuario no cambia. El webmail SOGo no está disponible con contraseñas de aplicación.",
+ "allowed_protocols": "Protocolos permitidos",
+ "app_name": "Nombre de la aplicación",
+ "app_passwds": "Contraseñas de aplicación",
+ "apple_connection_profile": "Perfil de conexión de Apple",
+ "apple_connection_profile_complete": "Este perfil de conexión incluye los parámetros de IMAP y SMTP, y las rutas de CalDAV (calendarios) y CardDAV (contactos) para un dispositivo Apple.",
+ "apple_connection_profile_mailonly": "Este perfil de conexión incluye los parámetros de configuración de IMAP y SMTP para un dispositivo Apple.",
+ "apple_connection_profile_with_app_password": "Se genera una nueva contraseña de aplicación y se agrega al perfil, para que no haga falta escribir ninguna contraseña al configurar el dispositivo. No comparta el archivo: da acceso completo a su buzón.",
+ "attribute": "Atributo",
+ "authentication": "Autenticación",
+ "change_password_hint_app_passwords": "Su cuenta tiene %d contraseñas de aplicación que no se cambiarán. Para administrarlas, vaya a la pestaña Contraseñas de aplicación.",
+ "clear_recent_successful_connections": "Borrar las conexiones correctas registradas",
+ "client_configuration": "Mostrar guías de configuración para clientes de correo y teléfonos",
+ "create_app_passwd": "Crear contraseña de aplicación",
+ "delete_ays": "Confirme la eliminación.",
+ "direct_protocol_access": "Este usuario de buzón tiene acceso directo y externo a los siguientes protocolos y aplicaciones. Su administrador controla este ajuste. Puede crear contraseñas de aplicación para dar acceso a protocolos y aplicaciones concretos.
El botón \"Webmail\" ofrece inicio de sesión único en SOGo y siempre está disponible.",
+ "email": "Correo electrónico",
+ "email_and_dav": "Correo, calendarios y contactos",
+ "empty": "Sin resultados",
+ "fido2_webauthn": "FIDO2/WebAuthn",
+ "force_pw_update": "Debe establecer una nueva contraseña para acceder a los servicios de groupware.",
+ "from": "de",
+ "generate": "generar",
+ "in_use": "En uso",
+ "last_mail_login": "Último inicio de sesión de correo",
+ "last_pw_change": "Último cambio de contraseña",
+ "last_ui_login": "Último inicio de sesión en la interfaz",
+ "loading": "Cargando...",
+ "login_history": "Historial de inicios de sesión",
+ "mailbox": "Buzón",
+ "mailbox_general": "General",
+ "mailbox_settings": "Configuración",
+ "messages": "mensajes",
+ "month": "mes",
+ "months": "meses",
+ "no_active_filter": "No hay ningún filtro activo",
+ "no_last_login": "No hay información del último inicio de sesión en la interfaz",
+ "open_logs": "Abrir registros",
+ "open_webmail_sso": "Webmail",
+ "overview": "Resumen",
+ "password": "Contraseña",
+ "pw_update_required": "Su cuenta requiere un cambio de contraseña. Establezca una nueva contraseña para continuar.",
+ "password_repeat": "Contraseña (repetir)",
+ "password_reset_info": "Si no se indica un correo de recuperación de contraseña, esta función no se puede usar.",
+ "protocols": "Protocolos",
+ "pushover_evaluate_x_prio": "Escalar el correo de alta prioridad [X-Priority: 1]",
+ "pushover_info": "La configuración de notificaciones push se aplicará a todo el correo limpio (no spam) entregado a %s, incluidos los alias (compartidos, no compartidos, etiquetados).",
+ "pushover_only_x_prio": "Considerar solo el correo de alta prioridad [X-Priority: 1]",
+ "pushover_sender_array": "Considerar las siguientes direcciones de remitente (separadas por comas)",
+ "pushover_sender_regex": "Filtrar remitentes con la siguiente expresión regular",
+ "pushover_text": "Texto de la notificación",
+ "pushover_title": "Título de la notificación",
+ "pushover_sound": "Sonido",
+ "pushover_vars": "Si no se define ningún filtro de remitente, se considerarán todos los correos.
Los filtros por expresión regular y las comprobaciones exactas de remitente pueden definirse por separado y se evalúan en orden. No dependen entre sí.
Variables utilizables para el texto y el título (tenga en cuenta las normas de protección de datos)",
+ "pushover_verify": "Verificar credenciales",
+ "pw_recovery_email": "Correo de recuperación de contraseña",
+ "q_add_header": "Carpeta de correo no deseado",
+ "quarantine_category_info": "La categoría de notificación \"Rechazado\" incluye el correo que fue rechazado, mientras que \"Carpeta de correo no deseado\" avisa al usuario de los correos que se movieron a esa carpeta.",
+ "recent_successful_connections": "Conexiones correctas registradas",
+ "sender_acl_disabled": "La comprobación de remitente está desactivada",
+ "show_sieve_filters": "Mostrar el filtro Sieve activo del usuario",
+ "sogo_profile_reset_help": "Esto destruirá el perfil de SOGo del usuario y eliminará de forma irrecuperable todos sus contactos y datos de calendario.",
+ "spam_score_reset": "Restablecer al valor predeterminado del servidor",
+ "spamfilter_table_domain_policy": "n/d (política del dominio)",
+ "syncjob_check_log": "Revisar registro",
+ "syncjob_EX_OK": "Correcto",
+ "syncjob_EXIT_OVERQUOTA": "El buzón de destino superó su cuota",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Usuario o contraseña incorrectos",
+ "tfa_info": "La autenticación de dos factores ayuda a proteger su cuenta. Si la activa, necesitará contraseñas de aplicación para iniciar sesión en aplicaciones o servicios que no admiten la autenticación de dos factores (p. ej., clientes de correo)."
},
"warning": {
- "domain_added_sogo_failed": "Se agregó el dominio pero no se pudo reiniciar SOGo, revisa los logs del servidor.",
+ "domain_added_sogo_failed": "Se agregó el dominio, pero no se pudo reiniciar SOGo; revise los registros del servidor.",
"fuzzy_learn_error": "Error aprendiendo hash: %s",
"ip_invalid": "IP inválida omitida: %s",
- "cannot_delete_self": "No se puede eliminar el usuario conectado"
+ "cannot_delete_self": "No se puede eliminar el usuario conectado",
+ "dovecot_restart_failed": "No se pudo reiniciar Dovecot, revise los registros",
+ "is_not_primary_alias": "Se omitió el alias no principal %s",
+ "quota_exceeded_scope": "Se superó la cuota del dominio: en este dominio solo se pueden crear buzones ilimitados.",
+ "session_token": "Token de formulario no válido: los tokens no coinciden",
+ "session_ua": "Token de formulario no válido: error de validación del User-Agent"
},
"datatables": {
"collapse_all": "Contraer todo",
@@ -1204,5 +1400,12 @@
"register_status": "Estado de registro",
"rename": "Renombrar",
"start_fido2_validation": "Iniciar validación FIDO2"
+ },
+ "ratelimit": {
+ "disabled": "Desactivado",
+ "second": "mensajes / segundo",
+ "minute": "mensajes / minuto",
+ "hour": "mensajes / hora",
+ "day": "mensajes / día"
}
}
diff --git a/data/web/lang/lang.fr-fr.json b/data/web/lang/lang.fr-fr.json
index 43c9c065a..9ee916713 100644
--- a/data/web/lang/lang.fr-fr.json
+++ b/data/web/lang/lang.fr-fr.json
@@ -111,7 +111,8 @@
"app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application",
"dry": "Simuler la synchronisation",
"internal": "Interne",
- "internal_info": "Les alias internes sont accessibles uniquement depuis le domaine ou les alias du domaine."
+ "internal_info": "Les alias internes sont accessibles uniquement depuis le domaine ou les alias du domaine.",
+ "sender_allowed": "Autoriser l'envoi sous cet alias"
},
"admin": {
"access": "Accès",
@@ -556,7 +557,9 @@
"max_age_invalid": "L'âge maximum %s est invalide",
"mode_invalid": "Le mode %s est invalide",
"mx_invalid": "L'enregistrement MX %s est invalide",
- "version_invalid": "La version %s est invalide"
+ "version_invalid": "La version %s est invalide",
+ "tfa_removal_blocked": "L’authentification à deux facteurs ne peut pas être supprimée, car elle est requise pour votre compte.",
+ "quarantine_category_invalid": "La catégorie de quarantaine doit être l’une des suivantes : add_header, reject, all\""
},
"debug": {
"chart_this_server": "Graphique (ce serveur)",
@@ -755,7 +758,9 @@
"mta_sts_info": "MTA-STS est un standard qui oblige la délivrance des courriels entre les serveurs de courriels à utiliser TLS avec des certificats valides.
Il est utilisé quand DANE n'est pas possible à cause d'un manque ou d'un non support de DNSSEC.
Note : Si le domaine du destinataire supporte DANE avec DNSSEC, DANE est toujours préféré – MTA-STS sert seulement en secours.",
"mta_sts_mode_info": "Il y a trois modes parmi lesquels choisir :
",
"mta_sts_max_age_info": "Durée en secondes pendant laquelle les serveurs de courriel peuvent mettre en cache cette politique avant de revérifier.",
- "mta_sts_mx_info": "Autoriser l'envoi uniquement aux noms d'hôtes des serveurs de courriels indiqués explicitement ; le MTA émetteur vérifie si le nom d'hôte DNS du MX correspond à la liste de la politique, et autorise la délivrance seulement avec un certificat TLS valide (protège contre le MITM)."
+ "mta_sts_mx_info": "Autoriser l'envoi uniquement aux noms d'hôtes des serveurs de courriels indiqués explicitement ; le MTA émetteur vérifie si le nom d'hôte DNS du MX correspond à la liste de la politique, et autorise la délivrance seulement avec un certificat TLS valide (protège contre le MITM).",
+ "sender_allowed": "Autoriser l'envoi sous cet alias",
+ "sender_allowed_info": "Si cette option est désactivée, cet alias peut uniquement recevoir des courriels. Utilisez les ACL d’expéditeur pour autoriser certaines boîtes aux lettres à envoyer des messages via cet alias."
},
"footer": {
"cancel": "Annuler",
@@ -988,7 +993,8 @@
"recipient": "Destinataire",
"open_logs": "Afficher les journaux",
"iam": "Fournisseur d'identité",
- "internal": "Interne"
+ "internal": "Interne",
+ "force_tfa": "TFA"
},
"oauth2": {
"access_denied": "Veuillez vous connecter en tant que propriétaire de la boîte de réception pour accorder l’accès via Oauth2.",
@@ -1189,7 +1195,11 @@
"yubi_otp": "Authentification OTP Yubico",
"authenticators": "Authentificateurs",
"u2f_deprecated_important": "Veuillez enregistrer votre clé dans le panneau d'administration avec la nouvelle méthode WebAuthn.",
- "u2f_deprecated": "Il semble que votre clé ait été enregistrée à l'aide de la méthode U2F obsolète. Nous allons désactiver l'authentification à deux facteurs pour vous et supprimer votre clé."
+ "u2f_deprecated": "Il semble que votre clé ait été enregistrée à l'aide de la méthode U2F obsolète. Nous allons désactiver l'authentification à deux facteurs pour vous et supprimer votre clé.",
+ "force_tfa": "Imposer l'authentification à deux facteurs lors de la connexion",
+ "force_tfa_info": "L’utilisateur doit configurer l’authentification à deux facteurs avant de pouvoir accéder à l’interface.",
+ "setup_title": "Authentification à deux facteurs requise",
+ "setup_required": "Votre compte nécessite l’authentification à deux facteurs. Veuillez configurer une méthode 2FA pour continuer."
},
"fido2": {
"set_fn": "Définir un nom",
@@ -1378,7 +1388,8 @@
"forever": "Pour toujours",
"spam_aliases_info": "Un alias de spam est une adresse de courriel temporaire qui peut être utilisée pour protéger les véritables adresses de courriel.
De manière optionnelle, une durée d'expiration peut être définie afin que l'alias soit automatiquement désactivé après la période définie, éliminant ainsi les adresses étant abusées ou ayant fuité.",
"authentication": "Authentification",
- "protocols": "Protocoles"
+ "protocols": "Protocoles",
+ "pw_update_required": "Votre compte nécessite un changement de mot de passe. Veuillez définir un nouveau mot de passe pour continuer."
},
"warning": {
"cannot_delete_self": "Impossible de supprimer l’utilisateur connecté",
diff --git a/data/web/lang/lang.hu-hu.json b/data/web/lang/lang.hu-hu.json
index e51748c48..ff49bc5ee 100644
--- a/data/web/lang/lang.hu-hu.json
+++ b/data/web/lang/lang.hu-hu.json
@@ -1144,7 +1144,8 @@
"subscribeall": "Feliratkozás minden mappára",
"syncjob": "Szinkronizálási feladat hozzáadása",
"internal": "Belső",
- "internal_info": "Belső álnevek csak a saját domain vagy domain álnév számára elérhető."
+ "internal_info": "Belső álnevek csak a saját domain vagy domain álnév számára elérhető.",
+ "sender_allowed": "Küldés engedélyezése ezzel az aliasszal"
},
"danger": {
"access_denied": "Hozzáférés megtagatva vagy nem megfelelő űrlap adat",
@@ -1245,6 +1246,21 @@
"pushover_key": "A pushover kulcs rossz formátumú",
"pushover_token": "A Pushover token rossz formátumú",
"quota_not_0_not_numeric": "A kvótának numerikusnak és >= 0-nak kell lennie.",
- "recipient_map_entry_exists": "Létezik egy \"%s\" címzett-térkép bejegyzés"
+ "recipient_map_entry_exists": "Létezik egy \"%s\" címzett-térkép bejegyzés",
+ "redis_error": "Redis hiba lépett fel: %s",
+ "relayhost_invalid": "A(z) %s elem érvénytelen a leképezésben.",
+ "release_send_failed": "Az üzenet felszabadítása sikertelen: %s",
+ "reset_f2b_regex": "A regex-szűrő időtúllépés miatt nem állt le. Próbálja újra, vagy várjon egy kicsit, és töltse újra az oldalt.",
+ "resource_invalid": "A(z) %s erőforrásnév érvénytelen",
+ "rl_timeframe": "Érvénytelen időkeret a lekérdezési korláthoz",
+ "rspamd_ui_pw_length": "A Rspamd UI jelszónak legalább 6 karakter hosszúnak kell lennie.",
+ "script_empty": "A szkript nem lehet üres",
+ "sender_acl_invalid": "A küldőhöz tartozó ACL-érték (%s) érvénytelen",
+ "set_acl_failed": "Az ACL beállítása meghiúsult",
+ "settings_map_invalid": "Érvénytelen beállítás-leképezési azonosító: %s",
+ "recovery_email_failed": "A helyreállítási email kiküldése sikertelen. Kérlek, lépj kapcsolatba az adminisztrátorral!",
+ "reset_token_limit_exceeded": "Túl sok visszaállítási kísérlet. Kérjük, várjon, mielőtt újra próbálkozna.",
+ "required_data_missing": "Hiányzik a(z) szükséges %s adat",
+ "tfa_removal_blocked": "A kétfaktoros hitelesítés nem távolítható el, mert elengedhetetlen a fiókod használatához."
}
}
diff --git a/data/web/lang/lang.it-it.json b/data/web/lang/lang.it-it.json
index a2f0a87e3..de228b2d7 100644
--- a/data/web/lang/lang.it-it.json
+++ b/data/web/lang/lang.it-it.json
@@ -109,7 +109,10 @@
"bcc_dest_format": "Il destinatario in copia nascosta deve essere un singolo indirizzo email.
Se si vuole spedire una copia del messaggio a più destinatari, bisogna creare un alias ed utilizzarlo per questa opzione.",
"app_passwd_protocols": "Protocolli consentiti per la password dell'app",
"tags": "Tag",
- "dry": "Simula sincronizzazione"
+ "dry": "Simula sincronizzazione",
+ "internal": "Interno",
+ "internal_info": "Gli alias interni sono accessibili solo dal proprio dominio o dai domini alias.",
+ "sender_allowed": "Consenti l'invio con questo alias"
},
"admin": {
"access": "Accedi",
@@ -131,7 +134,7 @@
"additional_rows": " righe aggiuntive inserite",
"admin": "Amministratore",
"admin_details": "Modifica impostazioni amministratore",
- "admin_domains": "Assengazioni di dominio",
+ "admin_domains": "Assegnazioni di dominio",
"admins": "Amministratori",
"admins_ldap": "Amministratori LDAP",
"advanced_settings": "Impostazioni avanzate",
diff --git a/data/web/lang/lang.lv-lv.json b/data/web/lang/lang.lv-lv.json
index 86eb91a66..df1697282 100644
--- a/data/web/lang/lang.lv-lv.json
+++ b/data/web/lang/lang.lv-lv.json
@@ -13,7 +13,7 @@
"domain_relayhost": "Mainīt domēna relayhost",
"eas_reset": "EAS ierīču atiestatīšana",
"extend_sender_acl": "Ļauj paplašināt sūtītāja ACL ar ārējām adresēm",
- "login_as": "Pieteikšanās kā pastkastes lietotājam",
+ "login_as": "Pieteikties kā pastkastes lietotājam",
"mailbox_relayhost": "Pasta kastītes relayhost maiņa",
"prohibited": "Aizliegts ar ACL",
"protocol_access": "Protokola piekļuves maiņa",
@@ -38,7 +38,7 @@
"alias_domain": "Aizstājdomēni",
"alias_domain_info": "Tikai derīgi domēna vārdi (komatu atdalīti).",
"automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" etc.)",
- "backup_mx_options": "Dublējuma MX iespējas",
+ "backup_mx_options": "Releja iespējas",
"delete1": "Izdzēst no avota pēc pabeigšanas",
"delete2": "Dzēsiet ziņojumus galamērķī, kas nav avotā",
"delete2duplicates": "Izdzēst atkārtojošos vienumus galamērķī",
@@ -65,8 +65,8 @@
"relay_all": "Pārsūtīt visus saņēmējus",
"relay_all_info": "↪ Ja izvēlies nepārsūtīt visus saņēmējus, tad Tev būs nepieciešams pievienot (\"aklo\") pastkasti katram saņēmējam, kas būtu jāpārsūta.",
"relay_domain": "Pārsūtīt šo domēnu",
- "select": "Lūdzu izvēlaties...",
- "select_domain": "Lūdzu sākumā izvēlaties domēnu",
+ "select": "Lūgums atlasīt…",
+ "select_domain": "Lūgums vispirms atlasīt domēnu",
"sieve_desc": "Īss apraksts",
"sieve_type": "Filtra tips",
"skipcrossduplicates": "Izlaist dublētus ziņojumus pa mapēm (pirmais nāk, pirmais kalpo)",
@@ -91,12 +91,12 @@
"activate_api": "Aktivizēt API",
"active": "Aktīvs",
"add": "Pievienot",
- "add_domain_admin": "Pievienot domēna administratoru",
+ "add_domain_admin": "Pievienot domēna pārvaldītāju",
"add_forwarding_host": "Pievienot pāradresācijas hostu",
"add_relayhost": "Pievienot Relayhost",
"add_row": "Pievienot rindu",
- "admin": "Administrators",
- "admin_details": "Labot administratora detaļas",
+ "admin": "Pārvaldītājs",
+ "admin_details": "Labot informāciju par pārvaldītāju",
"admin_domains": "Domēna uzdevumi",
"api_allow_from": "Atļaut API piekļuvi no šīm IP",
"api_key": "API atslēga",
@@ -114,7 +114,7 @@
"dkim_keys": "ARC/DKIM atslēgas",
"dkim_private_key": "Privāta atslēga",
"domain": "Domēns",
- "domain_admins": "Domēna administratori",
+ "domain_admins": "Domēna pārvaldītāji",
"edit": "Labot",
"empty": "Nav iznākuma",
"f2b_ban_time": "Aizlieguma laiks (s)",
@@ -153,7 +153,7 @@
"r_info": "Pelēkie/atspējotie vienumi spēkā esošo ierobežojumu sarakstā mailcow nav zināmi kā derīgi ierobežojumi, un tos nevar pārvietot. Nezināmi ierobežojumi jebkurā gadījumā parādīšanas secībā.
Jaunus vienumus var pievienot inc/vars.local.inc.php, lai varētu tos pārslēgt.",
"recipients": "Adresāts",
"refresh": "Atsvaidzināt",
- "regen_api_key": "Reģenerēt API atslēgu",
+ "regen_api_key": "Atkārtoti izveidot API atslēgu",
"relay_from": "\"No:\" adrese",
"relay_run": "Palaist testu",
"relayhosts_hint": "Norādīt no sūtītāja atkarīgas piegādes, lai varētu tos atlasīt domēnu konfigurācijas uzvednē.
\n Piegādes pakalpojums vienmēr ir \"smtp\", tādējādi tiks mēģināts TLS, kad piedāvāts. Iekļautais TLS (SMTPS) netiek atbalstīts. Tiek ņemts vērā lietotāja atsevišķais izejošā TLS nosacījuma iestatījums.
\n Ietekmē atlasītos domēnus, tajā skaitā aizstājdomēnus.",
@@ -185,7 +185,17 @@
"login_time": "Pieteikšanās laiks",
"iam_version": "Versija",
"quarantine_max_age": "Lielākais pieļaujamais vecums dienās
Vērtībai jābūt vienādai ar vai lielākai par 1 dienu.",
- "quarantine_max_score": "Atmest paziņojumu, ja e-pasta ziņojuma mēstuļu novērtējums ir augstāks par šo vērtību:
Noklusējums ir 9999.0"
+ "quarantine_max_score": "Atmest paziņojumu, ja e-pasta ziņojuma mēstuļu novērtējums ir augstāks par šo vērtību:
Noklusējums ir 9999.0",
+ "options": "Iespējas",
+ "password_reset_settings": "Paroļu atkopes iestatījumi",
+ "password_settings": "Paroļu iestatījumi",
+ "add_admin": "Pievienot pārvaldītāju",
+ "admins": "Pārvaldītāji",
+ "admins_ldap": "LDAP pārvaldītāji",
+ "admin_quicklink": "Paslēpt ātro saiti uz pārvaldītāju pieteikšanās lapu",
+ "domain_admin": "Domēna pārvaldītājs",
+ "domainadmin_quicklink": "Paslēpt ātro saiti uz domēna pārvaldītāju pieteikšanās lapu",
+ "user_quicklink": "Paslēpt ātro saiti uz lietotāju pieteikšanās lapu"
},
"danger": {
"access_denied": "Piekļuve liegta, vai nepareizi dati",
@@ -241,7 +251,10 @@
"app_passwd_id_invalid": "Lietotnes paroles Id %s ir nederīgs",
"img_dimensions_exceeded": "Attēls pārsniedz lielāko pieļaujamo attēla lielumu",
"img_size_exceeded": "Attēls pārsniedz lielāko pieļaujamo datnes lielumu",
- "version_invalid": "Versija %s ir nederīga"
+ "version_invalid": "Versija %s ir nederīga",
+ "generic_server_error": "Atgadījās neparedzēta servera kļūda. Lūgums sazināties ar pārvaldītāju.",
+ "password_reset_na": "Paroļu atkope šobrīd nav pieejama. Lūgums sazināties ar pārvaldītāju.",
+ "recovery_email_failed": "Nevarēja nosūtīt atkopes e-pasta ziņojumu. Lūgums sazināties ar pārvaldītāju."
},
"diagnostics": {
"cname_from_a": "Vērtība, kas iegūta no A/AAAA ieraksta. Tas tiek atbalstīts tik ilgi, kamēr ieraksts norāda uz pareizo resursu.",
@@ -257,13 +270,13 @@
"active": "Aktīvs",
"alias": "Labot aizstājvārdu",
"automap": "Mēģiniet automatizēt mapes (\"Nosūtītie vienumi\", \"Nosūtītie\" => \"Nosūtītie\" utt.)",
- "backup_mx_options": "Dublēt MX iespējas",
+ "backup_mx_options": "Retranslācijas iespējams",
"delete1": "Izdzēst no avota pēc pabeigšanas",
"delete2": "Dzēsiet ziņojumus galamērķī, kas nav avotā",
"delete2duplicates": "Izdzēst atkārtojošos vienumus galamērķī",
"description": "Apraksts",
"domain": "Labot domēnu",
- "domain_admin": "Labot domēna administratoru",
+ "domain_admin": "Labot domēna pārvaldītāju",
"domain_quota": "Domēna kvota",
"domains": "Domēni",
"dont_check_sender_acl": "Atspējot sūtītāju pārbaudi domēnam %s (+ aizstājdomēni)",
@@ -326,7 +339,8 @@
"app_passwd": "Lietotnes parole",
"mta_sts_version": "Versija",
"mta_sts_version_info": "Norāda MTA-STS standarta versiju – pašreiz ir derīga tikai STSv1.",
- "sender_acl_disabled": "Sūtītāja pārbaude ir atspējota"
+ "sender_acl_disabled": "Sūtītāja pārbaude ir atspējota",
+ "admin": "Labot pārvaldītāju"
},
"footer": {
"cancel": "Atcelt",
@@ -359,7 +373,14 @@
"username": "Lietotājvārds",
"fido2_webauthn": "FIDO/WebAuthn pieteikšanās",
"mobileconfig_info": "Lūgums pieteikties kā pastkastes lietotājam, lai lejupielādētu pieprasīto Apple savienojuma profilu.",
- "other_logins": "vai pieslēgties ar"
+ "other_logins": "vai pieteikties ar",
+ "forgot_password": "> Aizmirsta parole?",
+ "login_linkstext": "Nepareiza pieteikšanās?",
+ "login_domainadmintext": "Pieteikties kā domēna pārvaldītājam",
+ "login_admintext": "Pieteikties kā pārvaldītājam",
+ "login_user": "Lietotu pieteikšanās",
+ "login_dadmin": "Domēna pārvaldītāju pieteikšanās",
+ "login_admin": "Pārvaldītāju pieteikšanās"
},
"mailbox": {
"action": "Rīcība",
@@ -394,7 +415,7 @@
"description": "Apraksts",
"dkim_key_length": "DKIM atslēgas garums (bits)",
"domain": "Domēns",
- "domain_admins": "Domēna administratori",
+ "domain_admins": "Domēna pārvaldītāji",
"domain_aliases": "Domēna aizstājvārdi",
"domain_quota": "Kvota",
"domain_quota_total": "Kopējais domēna ierobežojums",
@@ -504,7 +525,7 @@
"imap_smtp_server_auth_info": "Lūgums izmantot pilnu e-pasta adresi un PLAIN autentificēšanās mehānismu.
\nPieteikšanās dati tiks šifrēti ar servera puses obligātu šifrēšanu."
},
"success": {
- "admin_modified": "Izmaiņas administrātoram ir saglabātas",
+ "admin_modified": "Pārvaldītāja izmaiņas tika saglabātas",
"alias_added": "Aizstājadrese %s (%d) tika pievienota",
"alias_domain_removed": "Aizstājdomēns %s tika noņemts",
"alias_modified": "Aizstājadreses izmaiņas %s tika saglabātas",
@@ -515,9 +536,9 @@
"dkim_added": "DKIM atslēga saglabāta",
"dkim_removed": "DKIM atslēga %s ir noņemta",
"domain_added": "Pievienots domēns %s",
- "domain_admin_added": "Domēna administrātors %s pievienots",
- "domain_admin_modified": "Izmaiņas domēna administrātoram %s ir saglabātas",
- "domain_admin_removed": "Domēna administrators %s tika noņemts",
+ "domain_admin_added": "Tika pievienots domēna pārvaldītājs %s",
+ "domain_admin_modified": "Domēna pārvaldītāja %s izmaiņas tika saglabātas",
+ "domain_admin_removed": "Tika noņemts domēna pārvaldītājs %s",
"domain_modified": "Izmaiņas domēnam %s ir saglabātas",
"domain_removed": "Domēns %s ir noņemts",
"eas_reset": "ActiveSync ierīces priekš lietotāja %s tika atiestatītas",
@@ -545,7 +566,9 @@
"verified_yotp_login": "Apliecināta Yubico OTP pieteikšanās",
"app_passwd_removed": "Noņemta lietotnes parole ar Id %s",
"app_passwd_added": "Pievienota jauna lietotnes parole",
- "f2b_banlist_refreshed": "Liegumu saraksta Id tika sekmīgi atsvaidzināts."
+ "f2b_banlist_refreshed": "Liegumu saraksta Id tika sekmīgi atsvaidzināts.",
+ "admin_added": "Tika pievienots pārvaldītājs %s",
+ "admin_removed": "Tika noņemts pārvaldītājs %s"
},
"tfa": {
"api_register": "%s izmanto Yubico Cloud API. Lūdzu iegūstiet API atslēgu priekš Jūsu atslēgashere",
@@ -558,7 +581,7 @@
"key_id_totp": "Identifikators Jūsu atslēgai",
"none": "Deaktivizēt",
"scan_qr_code": "Lūdzu, skenējiet šo kodu ar savu autentifikācijas lietojumprogrammu vai ievadiet kodu manuāli.",
- "select": "Lūdzu izvēlaties",
+ "select": "Lūgums atlasīt",
"set_tfa": "Uzstādīt difi faktoru autentifik;acijas metodi",
"tfa": "Divpakāpju pieteikšanās",
"totp": "Uz laiku bāzēta vienreizēja parole (Google Autentifikātors utt.)",
@@ -566,7 +589,8 @@
"waiting_usb_auth": "Gaida USB ierīci...
Lūdzu, tagad nospiežiet pogu uz Jūsu WebAuthn USB ierīces.",
"waiting_usb_register": "Gaida USB ierīci...
Lūgums augstāk ievadīt savu paroli un apstiprināt reģistrēšanos ar USB ierīces pogas nospiešanu.",
"yubi_otp": "Yubico OTP autentifikators",
- "authenticators": "Autentificētāji"
+ "authenticators": "Autentificētāji",
+ "u2f_deprecated_important": "Lūgums reģistrēt savu atslēgu pārvaldības lapā ar jauno WebAuthn veidu."
},
"user": {
"action": "Rīcība",
@@ -698,7 +722,8 @@
"warning": {
"domain_added_sogo_failed": "Domēns pievienots, bet neizdevās pārsāknēt SOGO. Lūgums pārbaudīt servera žurnālus.",
"dovecot_restart_failed": "Dovecot neizdevās pārsāknēties. Lūgums pārbaudīt žurnālus",
- "is_not_primary_alias": "Izlaists aizstājvārds %s, kas nav galvenais"
+ "is_not_primary_alias": "Izlaists aizstājvārds %s, kas nav galvenais",
+ "no_active_admin": "Nevar deaktivēt pēdējo aktīvo pārvaldītāju"
},
"oauth2": {
"access_denied": "Lūgums pieteikties kā pastkastes īpašniekam, lai nodrošinātu piekļuvi ar OAuth2."
diff --git a/data/web/lang/lang.nl-nl.json b/data/web/lang/lang.nl-nl.json
index 71ec97209..6ed9e322a 100644
--- a/data/web/lang/lang.nl-nl.json
+++ b/data/web/lang/lang.nl-nl.json
@@ -26,7 +26,9 @@
"syncjobs": "Sync jobs",
"tls_policy": "Versleutelingsbeleid",
"unlimited_quota": "Onbeperkte quota voor mailboxen",
- "domain_desc": "Wijzig domeinbeschrijving"
+ "domain_desc": "Wijzig domeinbeschrijving",
+ "pw_reset": "Toegang om mailcow gebruikers wachtwoord te resetten",
+ "domain_relayhost": "Verander relayhost voor een domein"
},
"add": {
"activate_filter_warn": "Alle andere filters worden gedeactiveerd zolang deze geactiveerd is.",
@@ -104,7 +106,11 @@
"validate": "Verifieer",
"validation_success": "Succesvol geverifieerd",
"tags": "Tags",
- "bcc_dest_format": "BCC-bestemming moet één geldig e-mailadres zijn.
Als u een kopie naar meerdere adressen wilt sturen, maak dan een alias aan en gebruik die hier."
+ "bcc_dest_format": "BCC-bestemming moet één geldig e-mailadres zijn.
Als u een kopie naar meerdere adressen wilt sturen, maak dan een alias aan en gebruik die hier.",
+ "dry": "Synchronisatie simuleren",
+ "internal": "Intern",
+ "internal_info": "Interne aliassen zijn alleen toegankelijk vanuit het eigen (alias)domein.",
+ "sender_allowed": "Toestaan om te verzenden als deze alias"
},
"admin": {
"access": "Toegang",
@@ -138,7 +144,7 @@
"arrival_time": "Aankomsttijd",
"authed_user": "Geauthenticeerde gebruiker",
"ays": "Weet je zeker dat je deze actie wilt uitvoeren?",
- "ban_list_info": "Bekijk de lijst met verbannen IP-adressen hieronder: netwerk (resterende tijd) - [acties].
Rode labels geven een permanente verbanning aan.
Het kan enkele seconden duren voordat wijzigingen hieronder zichtbaar zijn.",
+ "ban_list_info": "Bekijk de lijst met verbannen IP-adressen hieronder: netwerk (resterende tijd) - [acties].
IP-adressen die in de wachtrij staan om te worden gedeblokkeerd, worden binnen enkele seconden uit de actieve banlijst verwijderd.
\n
Rode labels geven actieve permanente blokkades door denylisting aan.",
"change_logo": "Logo",
"configuration": "Instellingen",
"convert_html_to_text": "Converteer HTML naar plaintext",
@@ -171,7 +177,7 @@
"excludes": "Exclusief",
"f2b_ban_time": "Verbanningstijd (s)",
"f2b_ban_time_increment": "Verbanningstijd wordt verhoogd met elk verbanning",
- "f2b_blacklist": "Netwerken/hosts op de blacklist",
+ "f2b_blacklist": "Netwerken/hosts op de denylist",
"f2b_filter": "Regex-filters",
"f2b_list_info": "Een host of netwerk op de blacklist staat altijd boven eenzelfde op de whitelist. Het doorvoeren van wijzigingen kan enkele seconden in beslag nemen.",
"f2b_max_attempts": "Maximaal aantal pogingen",
@@ -206,7 +212,7 @@
"link": "Link",
"loading": "Even geduld aub...",
"logo_info": "De afbeelding zal worden geschaald naar een hoogte van 40px voor de navigatiebar, en naar een breedte van 250px voor de startpagina.",
- "lookup_mx": "Match bestemming aan MX (gebruik .outlook.com om alle mail gericht aan MX *.outlook.com over deze hop te laten gaan)",
+ "lookup_mx": "Bestemming is een reguliere expressie die wordt gematcht met de MX-naam (.*\\.google\\.com om alle e-mail die gericht is aan een MX die eindigt op google.com via deze hop te routeren)",
"main_name": "\"Mailcow\"",
"merged_vars_hint": "Grijze rijen zijn samengevoegd van vars.(local.)inc.php en kunnen niet worden gewijzigd.",
"message": "Bericht",
@@ -275,7 +281,7 @@
"rspamd_com_settings": "Een beschrijving voor deze instelling zal automatisch worden gegenereerd, gebruik de onderstaande presets als voorbeeld. Raadpleeg de Rspamd-documentatie voor meer informatie.",
"rspamd_global_filters": "Globale filters",
"rspamd_global_filters_agree": "Ik ben me ervan bewust dat aanpassingen desastreuze gevolgen kunnen hebben",
- "rspamd_global_filters_info": "Ieder globaal filter heeft zijn eigen functie, zie de namen.",
+ "rspamd_global_filters_info": "Globale filtermaps bevatten verschillende soorten globale deny- en allowlists.",
"rspamd_global_filters_regex": "De velden kunnen uitsluitend regular expressions bevatten met het formaat \"/pattern/options\", bijvoorbeeld /.+@domain\\.tld/i.
Ondanks dat alle invoer wordt gecontroleerd op fouten, is het toch mogelijk dat Rspamd onbruikbaar wordt als deze de invoer niet kan lezen.
Als je problemen ervaart, herstart Rspamd dan om de filters opnieuw te laten lezen.
Elementen op de blacklist zijn uitgesloten van de quarantaine.",
"rspamd_settings_map": "Rspamd",
"sal_level": "Moo-level",
@@ -337,7 +343,71 @@
"admins_ldap": "LDAP administrators",
"api_read_only": "Alleen-lezen toegang",
"api_read_write": "Lees en schrijf toegang",
- "login_time": "Login tijd"
+ "login_time": "Login tijd",
+ "admin_quicklink": "Snelle link naar de admin-loginpagina verbergen",
+ "allowed_methods": "Toegestane toegangsmethoden",
+ "app_hide": "Verberg voor login",
+ "copy_to_clipboard": "Tekst gekopieerd naar het klembord!",
+ "login_page": "Loginpagina",
+ "domainadmin_quicklink": "Snelle link naar de domeinbeheerder-loginpagina verbergen",
+ "f2b_manage_external": "Fail2Ban extern beheren",
+ "f2b_manage_external_info": "Fail2Ban zal nog steeds de banlijst bijhouden, maar zal niet actief regels instellen om verkeer te blokkeren. Gebruik de onderstaande gegenereerde banlijst om het verkeer extern te blokkeren.",
+ "filter": "Filter",
+ "force_sso_text": "Als een externe OIDC-provider is geconfigureerd, verbergt deze optie de standaard Mailcow-loginformulieren en wordt alleen de Single SignOn-knop weergegeven.",
+ "force_sso": "Mailcow-login uitschakelen en alleen Single SignOn tonen",
+ "iam": "Identiteitsprovider",
+ "iam_attribute_field": "Attribuutveld",
+ "iam_authorize_url": "Autorisatie endpoint",
+ "iam_auth_flow": "Autorisatie flow",
+ "iam_auth_flow_info": "Naast de Authorization Code Flow (Standard Flow in Keycloak), die wordt gebruikt voor Single SignOn-login, ondersteunt Mailcow ook een authenticatiestroom met directe inloggegevens. De Mailpassword Flow probeert de gebruikersgegevens te valideren door gebruik te maken van de Keycloak Admin REST API. Mailcow haalt het gehashte wachtwoord op uit het attribuut mailcow_password, dat in Keycloak is gekoppeld.",
+ "iam_client_id": "Client ID",
+ "iam_client_secret": "Client Secret",
+ "iam_client_scopes": "Clientscopes",
+ "iam_default_template": "Standaardsjabloon",
+ "iam_default_template_description": "Als er geen sjabloon aan een gebruiker is toegewezen, wordt het standaardsjabloon gebruikt voor het aanmaken van de mailbox, maar niet voor het bijwerken van de mailbox.",
+ "iam_description": "Configureer een externe provider voor authenticatie. De mailboxen van gebruikers worden automatisch aangemaakt bij hun eerste login, mits er een attribuutkoppeling is ingesteld.",
+ "iam_extra_permission": "Om de volgende instellingen te laten werken, heeft de mailcow-client in Keycloak een service account nodig en de toestemming view-users.",
+ "iam_host": "Hostname",
+ "iam_host_info": "Voer één of meerdere LDAP-hosts in, gescheiden door komma’s.",
+ "iam_import_users": "Importeer gebruikers",
+ "iam_login_provisioning": "Gebruikers automatisch aanmaken bij het inloggen",
+ "iam_mapping": "Attribuutkoppeling",
+ "iam_bindpass": "Bind-wachtwoord",
+ "iam_periodic_full_sync": "Periodieke volledige synchronisatie",
+ "iam_port": "Poort",
+ "iam_realm": "Realm",
+ "iam_redirect_url": "Redirect-URL",
+ "iam_rest_flow": "Mailwachtwoord-flow",
+ "iam_server_url": "Server Url",
+ "iam_sso": "Single SignOn",
+ "iam_sync_interval": "Synchronisatie-/importinterval (min)",
+ "iam_test_connection": "Verbinding testen",
+ "iam_token_url": "Token endpoint",
+ "iam_userinfo_url": "Gebruikersinfo endpoint",
+ "iam_username_field": "Gebruikersnaam veld",
+ "iam_use_ssl": "Gebruik SSL",
+ "iam_use_ssl_info": "Als SSL wordt ingeschakeld en de poort is ingesteld op 389, wordt deze automatisch aangepast naar 636.",
+ "iam_use_tls": "Gebruik StartTLS",
+ "iam_use_tls_info": "Als TLS wordt ingeschakeld, moet je de standaardpoort voor je LDAP-server (389) gebruiken. SSL-poorten kunnen niet worden gebruikt.",
+ "iam_version": "Versie",
+ "ignore_ssl_error": "Negeer SSL foutmeldingen",
+ "ip_check_opt_in": "Kies ervoor om de externe diensten ipv4.mailcow.email en ipv6.mailcow.email te gebruiken om externe IP-adressen te bepalen.",
+ "needs_restart": "vereist een herstart",
+ "no": "✕",
+ "password_reset_info": "Als er geen herstel-e-mailadres is opgegeven, kan deze functie niet worden gebruikt.",
+ "password_reset_settings": "Instellingen voor wachtwoordherstel",
+ "password_reset_tmpl_html": "HTML sjabloon",
+ "password_reset_tmpl_text": "Tekst sjabloon",
+ "password_settings": "Wachtwoordinstellingen",
+ "quicklink_text": "Toon of verberg snelle links naar andere inlogpagina’s onder het inlogformulier",
+ "queue_unban": "deblokkeren",
+ "reset_password_vars": "{{link}} De gegenereerde link om het wachtwoord te resetten{{username}} De mailboxnaam van de gebruiker die het wachtwoordherstel heeft aangevraagd{{username2}} De naam van de herstelmailbox{{date}} De datum waarop het verzoek tot wachtwoordherstel is gedaan{{token_lifetime}} De geldigheidsduur van de token in minuten{{hostname}} De mailcow-hostnaam",
+ "restore_template": "Leeg laten om het standaardsjabloon te herstellen.",
+ "task": "Taak",
+ "transport_test_rcpt_info": "• Gebruik null@hosted.mailcow.de om relaying naar een externe bestemming te testen.",
+ "user_link": "Gebruikerslink",
+ "user_quicklink": "Snelle link naar de gebruikers-loginpagina verbergen",
+ "yes": "✓"
},
"danger": {
"access_denied": "Toegang geweigerd of ongeldige gegevens",
@@ -463,7 +533,27 @@
"demo_mode_enabled": "Demo modus is ingeschakeld",
"template_exists": "Sjabloon %s bestaat al",
"template_id_invalid": "Sjabloon ID %s ongeldig",
- "template_name_invalid": "Sjabloon naam ongeldig"
+ "template_name_invalid": "Sjabloon naam ongeldig",
+ "tfa_removal_blocked": "Twee-factor-authenticatie kan niet worden verwijderd omdat dit vereist is voor uw account.",
+ "authsource_in_use": "De identiteitsprovider kan niet worden gewijzigd of verwijderd omdat deze momenteel door één of meerdere gebruikers wordt gebruikt.",
+ "cors_invalid_origin": "Ongeldige Allow-Origin opgegeven",
+ "extended_sender_acl_denied": "Ontbrekende ACL om externe afzenderadressen in te stellen",
+ "generic_server_error": "Er is een onverwachte serverfout opgetreden. Neem contact op met uw beheerder.",
+ "iam_test_connection": "Verbinding mislukt",
+ "img_dimensions_exceeded": "De afbeelding overschrijdt de maximale afbeeldingsgrootte",
+ "img_size_exceeded": "De afbeelding overschrijdt de maximale afbeeldingsgrootte",
+ "invalid_reset_token": "Ongeldige reset-token",
+ "max_age_invalid": "Maximale leeftijd %s is ongeldig",
+ "mode_invalid": "Mode %s is ongeldig",
+ "mx_invalid": "MX-record %s is ongeldig",
+ "password_reset_invalid_user": "Mailbox niet gevonden of er is geen herstel-e-mailadres ingesteld",
+ "password_reset_na": "Wachtwoordherstel is momenteel niet beschikbaar. Neem contact op met uw beheerder.",
+ "recovery_email_failed": "Kon geen herstel-e-mail verzenden. Neem contact op met uw beheerder.",
+ "required_data_missing": "Vereiste gegevens %s ontbreken",
+ "reset_token_limit_exceeded": "De limiet voor reset-tokens is overschreden. Probeer het later opnieuw.",
+ "to_invalid": "Ontvanger mag niet leeg zijn",
+ "webauthn_username_failed": "De geselecteerde authenticator behoort tot een ander account",
+ "version_invalid": "Versie %s is ongeldig"
},
"debug": {
"chart_this_server": "Grafiek (deze server)",
@@ -520,7 +610,7 @@
"alias": "Wijzig alias",
"allow_from_smtp": "Sta enkel de volgende IP-adressen toe voor SMTP",
"allow_from_smtp_info": "Laat leeg om alle afzenders toe te staan.
IPv4/IPv6-adressen en netwerken.",
- "allowed_protocols": "Toegestane protocollen",
+ "allowed_protocols": "Toegestane protocollen voor directe gebruikerstoegang (heeft geen invloed op protocollen voor app-wachtwoorden).",
"app_name": "Naam van app",
"app_passwd": "Appwachtwoord",
"automap": "Probeer mappen automatisch te koppelen (\"Verzonden items\", \"Verzonden\" => \"Verzonden\" etc.)",
@@ -605,7 +695,7 @@
"sogo_visible_info": "Wanneer verborgen zal een alias niet worden weergegeven als een selecteerbaar verzendadres. Deze optie beïnvloedt uitsluitend objecten die kunnen worden weergegeven in SOGo (gedeelde of niet-gedeelde aliasadressen die naar minstens één mailbox verwijzen).",
"spam_alias": "Maak een nieuw tijdelijk alias aan, of pas deze aan",
"spam_filter": "Spamfilter",
- "spam_policy": "Voeg items toe of verwijder items van de white- of blacklist",
+ "spam_policy": "Voeg items toe of verwijder items van de deny- en allowlists",
"spam_score": "Stel een aangepaste spamscore in",
"subfolder2": "Synchroniseer in submap op bestemming
(leeg = gebruik geen submappen)",
"syncjob": "Wijzig sync job",
@@ -624,7 +714,47 @@
"acl": "ACL (Toestemming)",
"domain_footer": "Domeinbreede footer",
"domain_footer_html": "HTML footer",
- "mailbox_relayhost_info": "Wordt alleen toegepast op de mailbox en directe aliassen, maar heft een domein relayhost op."
+ "mailbox_relayhost_info": "Wordt alleen toegepast op de mailbox en directe aliassen, maar heft een domein relayhost op.",
+ "custom_attributes": "Aangepaste attributen",
+ "domain_footer_info_vars": {
+ "auth_user": "{= auth_user =} - Geauthenticeerde gebruikersnaam opgegeven door een MTA",
+ "from_user": "{= from_user =} - Afzendergedeelte van het e-mailadres, bijvoorbeeld bij \"moo@mailcow.tld\" wordt \"moo\" teruggegeven",
+ "from_name": "{= from_name =} - Naam van de afzender, bijvoorbeeld bij \"Mailcow .*.google.com om alle e-mail die gericht is aan een MX die eindigt op google.com via deze hop te routeren)",
+ "mailbox_rename": "Hernoem mailbox",
+ "mailbox_rename_agree": "Ik heb een backup gemaakt.",
+ "mailbox_rename_warning": "BELANGRIJK! Maak een back-up voordat u de mailbox hernoemt.",
+ "mailbox_rename_alias": "Alias automatisch aanmaken.",
+ "mailbox_rename_title": "Nieuwe naam van de lokale mailbox",
+ "mta_sts": "MTA-STS",
+ "mta_sts_info": "MTA-STS is een standaard die afdwingt dat e-mailbezorging tussen mailservers TLS met geldige certificaten gebruikt.
\nDeze wordt gebruikt wanneer DANE niet mogelijk is vanwege ontbrekende of niet-ondersteunde DNSSEC.
\nOpmerking: Als het ontvangende domein DANE met DNSSEC ondersteunt, heeft DANE altijd de voorkeur – MTA-STS fungeert alleen als een fallback.",
+ "mta_sts_version": "Versie",
+ "mta_sts_version_info": "Definieert de versie van de MTA-STS-standaard – momenteel is alleen STSv1 geldig.",
+ "mta_sts_mode": "Modus",
+ "mta_sts_mode_info": "Er zijn drie modus om uit te kiezen:
",
+ "mta_sts_max_age": "Maximale leeftijd",
+ "mta_sts_max_age_info": "Tijd in seconden dat ontvangende mailservers dit beleid mogen cachen voordat het opnieuw wordt opgehaald.",
+ "mta_sts_mx": "MX server",
+ "mta_sts_mx_info": "Staat verzending alleen toe naar expliciet vermelde mailserver-hostnamen; de verzendende MTA controleert of de DNS MX-hostnaam overeenkomt met de beleidslijst en staat levering alleen toe met een geldig TLS-certificaat (beschermt tegen MITM).",
+ "mta_sts_mx_notice": "Meerdere MX-servers kunnen worden opgegeven (gescheiden door komma’s).",
+ "none_inherit": "Geen / Erven",
+ "password_recovery_email": "E-mail voor wachtwoordherstel",
+ "pushover": "Pushover",
+ "quota_warning_bcc": "Quotum waarschuwing BCC",
+ "quota_warning_bcc_info": "Waarschuwingen zullen in afzonderlijke exemplaren naar de volgende ontvangers worden gestuurd. Het onderwerp zal worden gevolgd door de bijbehorende gebruikersnaam tussen haakjes, bijvoorbeeld: Contingentwaarschuwing (user@example.com).",
+ "sogo_access": "Verleen directe logintoegang tot SOGo",
+ "sogo_access_info": "Na het inloggen wordt de gebruiker automatisch doorgestuurd naar SOGo"
},
"footer": {
"cancel": "Annuleren",
@@ -637,18 +767,21 @@
"restart_container": "Herstart container",
"restart_container_info": "Belangrijk: Een herstart kan enige tijd in beslag nemen, wacht aub totdat dit proces voltooid is.
Deze pagina zal zichzelf verversen zodra het proces voltooid is.",
"restart_now": "Nu herstarten",
- "restarting_container": "Container wordt herstart, even geduld aub..."
+ "restarting_container": "Container wordt herstart, even geduld aub...",
+ "hibp_check": "Controleer tegen haveibeenpwned.com",
+ "nothing_selected": "Niets geselecteerd"
},
"header": {
"administration": "Configuratie & details",
"apps": "Apps",
- "debug": "Systeeminformatie",
+ "debug": "Informatie",
"email": "E-Mail",
"mailcow_config": "Beheer",
"quarantine": "Quarantaine",
"restart_netfilter": "Herstart netfilter",
"restart_sogo": "Herstart SOGo",
- "user_settings": "Gebruikersinstellingen"
+ "user_settings": "Gebruikersinstellingen",
+ "mailcow_system": "Systeem"
},
"info": {
"awaiting_tfa_confirmation": "In afwachting van tweefactorauthenticatie...",
@@ -662,7 +795,22 @@
"mobileconfig_info": "Log in als mailboxgebruiker om het Apple-verbindingsprofiel te downloaden.",
"other_logins": "of aanmelden met",
"password": "Wachtwoord",
- "username": "Gebruikersnaam"
+ "username": "Gebruikersnaam",
+ "back_to_mailcow": "Terug naar mailcow",
+ "forgot_password": "> Wachtwoord vergeten?",
+ "invalid_pass_reset_token": "De reset-wachtwoordtoken is ongeldig of verlopen.
Vraag een nieuwe link voor het resetten van het wachtwoord aan.",
+ "login_linkstext": "Niet de juiste login?",
+ "login_usertext": "Log in als gebruiker",
+ "login_domainadmintext": "Login in als domeinbeheerder",
+ "login_admintext": "Log in als administrator",
+ "login_user": "Gebruikerslogin",
+ "login_dadmin": "Domeinbeheerder login",
+ "login_admin": "Administrator login",
+ "new_password": "Nieuw wachtwoord",
+ "new_password_confirm": "Bevestig nieuw wachtwoord",
+ "reset_password": "Herstel wachtwoord",
+ "request_reset_password": "Verzoek wachtwoord wijziging",
+ "email": "E-mailadres"
},
"mailbox": {
"action": "Handeling",
@@ -782,7 +930,7 @@
"sieve_preset_5": "Autoreply (vakantie)",
"sieve_preset_6": "Weiger mail met antwoord",
"sieve_preset_7": "Forward en behoud/verwijder",
- "sieve_preset_8": "Verwijder mail verstuurd naar een aliasadres van de afzender",
+ "sieve_preset_8": "E-mail van een specifieke afzender doorsturen, als gelezen markeren en in een submap plaatsen",
"sieve_preset_header": "Zie de onderstaande voorbeelden. Raadpleeg Wikipedia voor meer informatie.",
"sogo_visible": "Alias tonen in SOGo",
"sogo_visible_n": "Verberg alias in SOGo",
@@ -809,7 +957,37 @@
"toggle_all": "Selecteer alles",
"username": "Gebruikersnaam",
"waiting": "Wachten",
- "weekly": "Wekelijks"
+ "weekly": "Wekelijks",
+ "add_alias_expand": "Alias uitbreiden over alias-domeinen",
+ "add_template": "Sjabloon toevoegen",
+ "all_domains": "Alle domeinen",
+ "catch_all": "Catch-All",
+ "created_on": "Aangemaakt op",
+ "domain_templates": "Domein sjablonen",
+ "domain_quota_total": "Totale domein-opslagruimte",
+ "goto_ham": "Leren als Ham",
+ "goto_spam": "Leren als spam",
+ "iam": "Identiteitsprovider",
+ "internal": "Intern",
+ "last_pw_change": "Laatste wachtwoordwijziging",
+ "mailbox_templates": "Mailbox sjablonen",
+ "no": "✕",
+ "open_logs": "Open logs",
+ "recipient": "Ontvanger",
+ "relay_unknown": "Onbekende mailboxen relayen",
+ "sender": "Afzender",
+ "syncjob_check_log": "Controleer log",
+ "syncjob_last_run_result": "Laatste uitvoeringsresultaat",
+ "syncjob_EX_OK": "Succes",
+ "syncjob_EXIT_CONNECTION_FAILURE": "Verbindingsprobleem",
+ "syncjob_EXIT_TLS_FAILURE": "Probleem met versleutelde verbinding",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE": "Authenticatieprobleem",
+ "syncjob_EXIT_OVERQUOTA": "Doel mailbox is over quota",
+ "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Kan geen verbinding maken met de externe server",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Verkeerde gebruikersnaam of wachtwoord",
+ "templates": "Sjablonen",
+ "template": "Sjabloon",
+ "yes": "✓"
},
"oauth2": {
"access_denied": "Log in als een mailboxgebruiker om toegang via OAuth te verlenen",
@@ -842,7 +1020,7 @@
"notified": "Verwittigd",
"qhandler_success": "Aanvraag succesvol verzonden naar het systeem. Je kunt nu het venster sluiten.",
"qid": "Rspamd QID",
- "qinfo": "Het quarantainesysteem slaat een kopie van zowel geweigerde mail (voor de afzender zal het lijken alsof de mail niet afgeleverd is), als mail die afgeleverd is de spamfolder, op in de database.\r\n
\"Markeer als spam en verwijder\" traint het systeem om soortgelijke mails in de toekomst opnieuw als spam te markeren.\r\n
Wanneer er meerdere berichten tegelijkertijd worden behandeld kan het mogelijk enige tijd duren.
Elementen op de blacklist zijn uitgesloten van de quarantaine.",
+ "qinfo": "Het quarantainesysteem slaat een kopie van zowel geweigerde mail (voor de afzender zal het lijken alsof de mail niet afgeleverd is), als mail die afgeleverd is de spamfolder, op in de database.\n
\"Markeer als spam en verwijder\" traint het systeem om soortgelijke mails in de toekomst opnieuw als spam te markeren.\n
Wanneer er meerdere berichten tegelijkertijd worden behandeld kan het mogelijk enige tijd duren.
Elementen op de denylist zijn uitgesloten van de quarantaine.",
"qitem": "Quarantaine-item",
"quarantine": "Quarantaine",
"quick_actions": "Handelingen",
@@ -874,7 +1052,19 @@
"toggle_all": "Selecteer alles"
},
"queue": {
- "queue_manager": "Queue manager"
+ "queue_manager": "Queue manager",
+ "delete": "Verwijder alles",
+ "flush": "Wachtrij leegmaken",
+ "info": "De mailwachtrij bevat alle e-mails die wachten op aflevering. Als een e-mail lange tijd in de mailwachtrij blijft staan, wordt deze automatisch door het systeem verwijderd.
De foutmelding van de betreffende e-mail geeft informatie over waarom de e-mail niet kon worden afgeleverd.",
+ "legend": "Functies voor acties in de mailwachtrij:",
+ "ays": "Bevestig dat u alle items uit de huidige wachtrij wilt verwijderen.",
+ "deliver_mail": "Afleveren",
+ "deliver_mail_legend": "Probeert de geselecteerde e-mails opnieuw te bezorgen.",
+ "hold_mail": "Vasthouden",
+ "hold_mail_legend": "Houdt de geselecteerde e-mails vast. (Voorkomt verdere afleverpogingen)",
+ "show_message": "Bericht weergeven",
+ "unban": "Wachtrij deblokkeren",
+ "unhold_mail": "Vrijgeven"
},
"start": {
"help": "Toon/verberg hulppaneel",
@@ -994,7 +1184,8 @@
"start_fido2_validation": "Start FIDO2-validatie",
"fido2_auth": "Aanmelden met FIDO2",
"fido2_success": "Apparaat succesvol geregistreerd",
- "fido2_validation_failed": "Validatie mislukt"
+ "fido2_validation_failed": "Validatie mislukt",
+ "set_fido2_touchid": "Registreer Touch ID op Apple M1"
},
"user": {
"action": "Handeling",
@@ -1161,6 +1352,7 @@
"loadingRecords": "Laden...",
"processing": "Wachten alstublieft..",
"search": "Zoeken:",
- "zeroRecords": "Geen overeenkomsten gevonden"
+ "zeroRecords": "Geen overeenkomsten gevonden",
+ "infoFiltered": "(gefilterd uit _MAX_ totale vermeldingen)"
}
}
diff --git a/data/web/lang/lang.pl-pl.json b/data/web/lang/lang.pl-pl.json
index 758d0cb40..de3557c03 100644
--- a/data/web/lang/lang.pl-pl.json
+++ b/data/web/lang/lang.pl-pl.json
@@ -189,7 +189,7 @@
"api_info": "API jest w trakcie prac. Dokumentację można znaleźć pod adresem /api",
"api_key": "klucz API",
"api_read_only": "Dostęp tylko do odczytu",
- "api_read_write": "Dostęp tylko do odczytu",
+ "api_read_write": "Dostęp do odczytu i zapisu",
"api_skip_ip_check": "Pomiń sprawdzenie IP dla API",
"app_hide": "Ukryj dla logowania",
"app_links": "Linki aplikacji",
@@ -1226,7 +1226,7 @@
"decimal": ".",
"emptyTable": "Brak danych w tabeli",
"expand_all": "Rozszerz wszystko",
- "info": "Wyświetlanie od START do END z TOTAL wpisów",
+ "info": "Wyświetlanie od _START_ do _END_ z _TOTAL_ wpisów",
"infoEmpty": "Wyświetlanie od 0 do 0 z 0 wpisów",
"infoFiltered": "(filtrowane z _MAX_ suma wpisów)",
"thousands": ",",
diff --git a/data/web/lang/lang.pt-br.json b/data/web/lang/lang.pt-br.json
index b01d97656..5645537c6 100644
--- a/data/web/lang/lang.pt-br.json
+++ b/data/web/lang/lang.pt-br.json
@@ -38,7 +38,7 @@
"add_domain_only": "Adicionar somente domínio",
"add_domain_restart": "Adicionar domínio e reiniciar o SoGo",
"alias_address": "Endereço (s) de alias",
- "alias_address_info": "Endereço/s de e-mail completo ou @example .com, para capturar todas as mensagens de um domínio (separadas por vírgula). somente domínios mailcow.",
+ "alias_address_info": "Endereço(s) de e-mail completo(s) ou @example.com, para capturar todas as mensagens de um domínio (separadas por vírgula). Apenas domínios do Mailcow.",
"alias_domain": "Domínio de alias",
"alias_domain_info": "Somente nomes de domínio válidos (separados por vírgula).",
"app_name": "Nome do aplicativo",
@@ -111,7 +111,8 @@
"validation_success": "Validado com sucesso",
"dry": "Simular sincronização",
"internal": "Interno",
- "internal_info": "Aliases internos são acessíveis apenas a partir do próprio domínio ou alias de domínio."
+ "internal_info": "Aliases internos são acessíveis apenas a partir do próprio domínio ou alias de domínio.",
+ "sender_allowed": "Permitir enviar como este alias"
},
"admin": {
"access": "Acesso",
@@ -151,13 +152,13 @@
"arrival_time": "Hora de chegada (hora do servidor)",
"authed_user": "Usuário autoritário",
"ays": "Tem certeza de que deseja continuar?",
- "ban_list_info": "Veja uma lista de IPs banidos abaixo: rede (tempo restante de banimento) - [ações].
Os IPs na fila para serem desbanidos serão removidos da lista de banimentos ativos em alguns segundos.
Rótulos vermelhos indicam proibições permanentes ativas na lista negra.",
+ "ban_list_info": "Veja abaixo a lista de IPs banidos: rede (tempo restante do banimento) - [ações].
IPs na fila para serem desbanidos serão removidos da lista de banimentos ativos em alguns segundos.
Rótulos vermelhos indicam banimentos permanentes ativos na lista de bloqueio.",
"change_logo": "Alterar logotipo",
"logo_normal_label": "Normal",
"logo_dark_label": "Invertido para o modo escuro",
"configuration": "Configuração",
"convert_html_to_text": "Converter HTML em texto sem formatação",
- "copy_to_clipboard": "Text copied to clipboard!",
+ "copy_to_clipboard": "Copiado para a área de transferência!",
"cors_settings": "Configurações do CORS",
"credentials_transport_warning": "Aviso: Adicionar uma nova entrada no mapa de transporte atualizará as credenciais de todas as entradas com uma coluna correspondente do próximo salto.",
"customer_id": "ID do cliente",
@@ -188,9 +189,9 @@
"excludes": "Exclui esses destinatários",
"f2b_ban_time": "Tempo (s) de proibição",
"f2b_ban_time_increment": "O tempo de banimento é incrementado com cada banimento",
- "f2b_blacklist": "Redes/hosts na lista negra",
+ "f2b_blacklist": "Redes/hosts na lista de bloqueio",
"f2b_filter": "Filtros Regex",
- "f2b_list_info": "Um host ou rede na lista negra sempre superará uma entidade na lista branca. As atualizações da lista levarão alguns segundos para serem aplicadas.",
+ "f2b_list_info": "Um host ou rede na lista de bloqueio sempre terá prioridade sobre uma entidade na lista de permissões. As atualizações das listas levarão alguns segundos para serem aplicadas.",
"f2b_manage_external": "Gerenciar Fail2Ban externamente",
"f2b_manage_external_info": "O Fail2ban ainda manterá a lista de banimentos, mas não definirá ativamente regras para bloquear o tráfego. Use a lista de banimento gerada abaixo para bloquear externamente o tráfego.",
"f2b_max_attempts": "Máximo de tentativas",
@@ -200,7 +201,7 @@
"f2b_parameters": "Parâmetros do Fail2ban",
"f2b_regex_info": "Registros considerados: SoGo, Postfix, Dovecot, PHP-FPM.",
"f2b_retry_window": "Repita a (s) janela (s) para o máximo de tentativas",
- "f2b_whitelist": "Redes/hosts incluídos na lista branca",
+ "f2b_whitelist": "Redes/hosts na lista de permissões",
"filter_table": "Tabela de filtros",
"forwarding_hosts": "Anfitriões de encaminhamento",
"forwarding_hosts_add_hint": "Você pode especificar endereços IPv4/IPv6, redes em notação CIDR, nomes de host (que serão resolvidos para endereços IP) ou nomes de domínio (que serão resolvidos para endereços IP consultando registros SPF ou, na ausência deles, registros MX).",
@@ -222,7 +223,7 @@
"includes": "Inclua esses destinatários",
"ip_check": "Verificação de IP",
"ip_check_disabled": "A verificação de IP está desativada. Você pode ativá-lo em
Sistema > Configuração > Opções > Personalizar",
- "ip_check_opt_in": "Opte por usar o serviço de terceiros ipv4.mailcow.email. e ipv6.mailcow.email para resolver endereços IP externos.",
+ "ip_check_opt_in": "Opte por usar o serviço de terceiros ipv4.mailcow.email e ipv6.mailcow.email para resolver endereços IP externos.",
"is_mx_based": "Baseado em MX",
"last_applied": "Aplicado pela última vez",
"license_info": "Uma licença não é necessária, mas ajuda no desenvolvimento.
Registre seu GUID aqui ou comprar suporte para sua instalação de mailcow.",
@@ -244,7 +245,7 @@
"oauth2_add_client": "Adicionar cliente OAuth2",
"oauth2_client_id": "ID do cliente",
"oauth2_client_secret": "Segredo do cliente",
- "oauth2_info": "A implementação OAuth2 suporta o tipo de concessão \"Código de Autorização\" e emite tokens de atualização.
\nO servidor também emite automaticamente novos tokens de atualização, depois que um token de atualização foi usado.
\n• O escopo padrão é perfil. Somente usuários com caixa de e-mail podem ser autenticados contra o OAuth2. Se o parâmetro de escopo for omitido, ele voltará para perfil.
\nCaminhos para solicitações OAuth2 API:
\n\n
\nRegenerar o segredo do cliente não expirará os códigos de autorização existentes, mas eles não renovarão seu token./oauth/authorize/oauth/token/oauth/profile
\nA revogação dos tokens do cliente causará o término imediato de todas as sessões ativas. Todos os clientes precisam se autenticar novamente.",
+ "oauth2_info": "A implementação do OAuth2 suporta o tipo de concessão \"Código de Autorização\" e emite tokens de atualização.
\nO servidor também emite automaticamente novos tokens de atualização após um token de atualização ter sido usado.
\nO escopo padrão é profile. Somente usuários de caixa de correio podem ser autenticados com o OAuth2. Se o parâmetro de escopo for omitido, o padrão será profile.
\nO parâmetro state deve ser enviado pelo cliente como parte da solicitação de autorização.
\nCaminhos para solicitações à API OAuth2:
\n\n\n
\n\nRegenerar o segredo do cliente não expirará os códigos de autorização existentes, mas impedirá a renovação do token./oauth/authorize/oauth/token/oauth/profile
\nA revogação dos tokens de cliente causará o encerramento imediato de todas as sessões ativas. Todos os clientes precisarão se autenticar novamente.",
"oauth2_redirect_uri": "URI de redirecionamento",
"oauth2_renew_secret": "Gere um novo segredo de cliente",
"oauth2_revoke_tokens": "Revogar todos os tokens do cliente",
@@ -320,8 +321,8 @@
"rspamd_com_settings": "Um nome de configuração será gerado automaticamente, veja os exemplos de predefinições abaixo. Para obter mais detalhes, consulte a documentação do Rspamd",
"rspamd_global_filters": "Mapas de filtro globais",
"rspamd_global_filters_agree": "Eu vou ter cuidado!",
- "rspamd_global_filters_info": "Os mapas de filtros globais contêm diferentes tipos de listas negras e brancas globais.",
- "rspamd_global_filters_regex": "Seus nomes explicam seu propósito. Todo o conteúdo deve conter uma expressão regular válida no formato “/padrão/opções” (por exemplo, /. + @domain\\ .tld/i).
\r\n Embora verificações rudimentares estejam sendo executadas em cada linha de regex, a funcionalidade do Rspamd pode ser interrompida se não conseguir ler a sintaxe corretamente.
\r\n O Rspamd tentará ler o conteúdo do mapa quando alterado. Se você tiver problemas, reinicie o Rspamd para forçar o recarregamento do mapa.
Os elementos da lista negra são excluídos da quarentena.",
+ "rspamd_global_filters_info": "Os mapas de filtros globais contêm diferentes tipos de listas globais de bloqueio e de permissões.",
+ "rspamd_global_filters_regex": "Os nomes explicam sua finalidade. Todo o conteúdo deve conter uma expressão regular válida no formato \"/padrão/opções\" (por exemplo, /.[+@domain.tld](mailto:+@domain.tld)/i).
\nEmbora verificações básicas sejam executadas em cada linha de regex, a funcionalidade do Rspamd pode ser comprometida se ele não conseguir ler a sintaxe corretamente.
\nO Rspamd tentará ler o conteúdo do mapa quando ele for alterado. Se você tiver problemas, reinicie o Rspamd para forçar o recarregamento do mapa.
Elementos na lista de bloqueio são excluídos da quarentena.",
"rspamd_settings_map": "Mapa de configurações do Rspamd",
"sal_level": "Nível de humor",
"save": "Salvar alterações",
@@ -556,7 +557,9 @@
"mode_invalid": "Modo %s é inválido",
"mx_invalid": "Registro MX %s é inválido",
"required_data_missing": "Dados obrigatórios %s estão ausentes",
- "version_invalid": "Versão %s é inválida"
+ "version_invalid": "Versão %s é inválida",
+ "tfa_removal_blocked": "A autenticação de dois fatores não pode ser removida, pois é obrigatória para a sua conta.",
+ "quarantine_category_invalid": "A categoria da quarentena deve ser uma das seguintes: add_header, reject, all"
},
"datatables": {
"collapse_all": "Recolher tudo",
@@ -727,7 +730,7 @@
"pushover_verify": "Verifique as credenciais",
"quota_mb": "Cota (MiB)",
"quota_warning_bcc": "Aviso de cota BCC",
- "quota_warning_bcc_info": "Os avisos serão enviados em cópias separadas para os seguintes destinatários. O assunto será sufixado pelo nome de usuário correspondente entre colchetes, por exemplo: Aviso de cota (user@example.com).",
+ "quota_warning_bcc_info": "Os avisos serão enviados em cópias separadas para os seguintes destinatários. O assunto será precedido pelo nome de usuário correspondente entre colchetes, por exemplo: Aviso de cota (user@example.com).",
"ratelimit": "Limite de taxa",
"redirect_uri": "URL de redirecionamento/retorno de chamada",
"relay_all": "Retransmita todos os destinatários",
@@ -746,17 +749,17 @@
"sieve_desc": "Breve descrição",
"sieve_type": "Tipo de filtro",
"skipcrossduplicates": "Ignore mensagens duplicadas entre pastas (primeiro a chegar, primeiro a ser servido)",
- "sogo_access": "Encaminhamento direto para o SOGoo",
- "sogo_access_info": "Depois de fazer login, o usuário é automaticamente redirecionado para o SOGo.",
+ "sogo_access": "Encaminhamento direto para o SOGo",
+ "sogo_access_info": "Após o login, o usuário é automaticamente redirecionado para o SOGo.",
"sogo_visible": "O alias é visível no SoGo",
"sogo_visible_info": "Essa opção afeta somente objetos, que podem ser exibidos no SoGo (endereços de alias compartilhados ou não compartilhados apontando para pelo menos uma mailbox local). Se estiver oculto, um alias não aparecerá como remetente selecionável no SoGo.",
"spam_alias": "Crie ou altere endereços de alias com limite de tempo",
"spam_filter": "Filtro de spam",
- "spam_policy": "Adicionar ou remover itens da lista branca/negra",
+ "spam_policy": "Adicionar ou remover itens da lista de permissões/bloqueio",
"spam_score": "Defina uma pontuação de spam personalizada",
"subfolder2": "Sincronizar na subpasta no destino
(vazio = não usar subpasta)",
"syncjob": "Editar tarefa de sincronização",
- "target_address": "Ir para endereço/es (separados por vírgula)",
+ "target_address": "Ir para o(s) endereço(s) (separados por vírgula)",
"target_domain": "Domínio de destino",
"timeout1": "Tempo limite para conexão com o host remoto",
"timeout2": "Tempo limite para conexão com o host local",
@@ -781,7 +784,10 @@
"mta_sts_max_age_info": "Tempo em segundos que servidores de email de recepção podem armazenar esta política em cache até buscar novamente.",
"mta_sts_mx": "Servidor MX",
"mta_sts_mx_info": "Permite envio apenas para nomes de host de servidor de email explicitamente listados; o MTA de envio verifica se o nome do host DNS MX corresponde à lista de políticas e permite entrega apenas com certificado TLS válido (protege contra MITM).",
- "mta_sts_mx_notice": "Múltiplos servidores MX podem ser especificados (separados por vírgulas)."
+ "mta_sts_mx_notice": "Múltiplos servidores MX podem ser especificados (separados por vírgulas).",
+ "sender_allowed": "Permitir enviar como este alias",
+ "sender_allowed_info": "Se desativado, este alias poderá apenas receber e-mails. Use a ACL de remetente para substituir essa configuração e conceder a caixas de correio específicas permissão para enviar.",
+ "mta_sts_active_info": "Se esta opção estiver desmarcada, a política MTA-STS não será publicada e nenhum certificado será solicitado via ACME para o subdomínio mta-sts."
},
"fido2": {
"confirm": "Confirme",
@@ -802,7 +808,7 @@
"cancel": "Cancelar",
"confirm_delete": "Confirme a exclusão",
"delete_now": "Excluir agora",
- "delete_these_items": "Confirme suas alterações no seguinte ID de objeto",
+ "delete_these_items": "Por favor, confirme as alterações feitas no seguinte ID de objeto.",
"hibp_check": "Verifique em haveibeenpwned.com",
"hibp_nok": "Combinado! Essa é uma senha potencialmente perigosa!",
"hibp_ok": "Nenhuma combinação encontrada.",
@@ -970,7 +976,7 @@
"recipient_map_new": "Novo destinatário",
"recipient_map_new_info": "O destino do mapa do destinatário deve ser um endereço de e-mail válido ou um nome de domínio.",
"recipient_map_old": "Destinatário original",
- "recipient_map_old_info": "O destino original do mapa de um destinatário deve ser um endereço de e-mail válido ou um nome de domínio.",
+ "recipient_map_old_info": "O destino original do mapa de destinatário deve ser um endereço de e-mail válido ou um nome de domínio.",
"recipient_maps": "Mapas de destinatários",
"relay_all": "Retransmita todos os destinatários",
"relay_unknown": "Retransmitir mailboxes desconhecidas",
@@ -1029,7 +1035,8 @@
"weekly": "Semanalmente",
"yes": "✓",
"iam": "Provedor de Identidade",
- "internal": "Interno"
+ "internal": "Interno",
+ "force_tfa": "A2F"
},
"oauth2": {
"access_denied": "Faça login como proprietário da mailbox para conceder acesso via OAuth2.",
@@ -1061,7 +1068,7 @@
"notified": "Notificado",
"qhandler_success": "Solicitação enviada com sucesso para o sistema. Agora você pode fechar a janela.",
"qid": "Respand AID",
- "qinfo": "O sistema de quarentena salvará as mensagens rejeitadas no banco de dados (o remetente não terá a impressão de uma mensagem entregue), bem como as mensagens, que são entregues como cópia na pasta Lixo eletrônico de uma mailbox.\n
“Aprenda como spam e exclua” aprenderá uma mensagem como spam por meio do Teorema de Bayes e também calculará hashes difusos para negar mensagens semelhantes no futuro.\n
Esteja ciente de que aprender várias mensagens pode ser demorado, dependendo do seu sistema.
Os elementos da lista negra são excluídos da quarentena.",
+ "qinfo": "O sistema de quarentena irá salvar no banco de dados os e-mails rejeitados (o remetente não terá a impressão de que o e-mail foi entregue), bem como os e-mails que são entregues como cópia na pasta de spam de uma mailbox.\n
“Aprender como spam e excluir” irá classificar a mensagem como spam por meio do Teorema de Bayes e também calcular hashes fuzzy para bloquear mensagens semelhantes no futuro.\n
Esteja ciente de que o aprendizado de múltiplas mensagens pode, dependendo do seu sistema, levar tempo.
Elementos na lista de bloqueio são excluídos da quarentena.",
"qitem": "Item de quarentena",
"quarantine": "Quarentena",
"quick_actions": "Ações",
@@ -1081,7 +1088,7 @@
"rspamd_result": "Resultado do Rspamd",
"sender": "Remetente (SMTP)",
"sender_header": "Remetente (cabeçalho “De”)",
- "settings_info": "Quantidade máxima de elementos a serem colocados em quarentena: %s
Tamanho máximo do e-mail: %s MiB",
+ "settings_info": "Número máximo de elementos em quarentena (por caixa de correio): %s
Tamanho máximo do e-mail: %s MiB",
"show_item": "Mostrar item",
"spam": "Spam",
"spam_score": "Ponto",
@@ -1237,7 +1244,12 @@
"webauthn": "Autenticação WebAuthn",
"waiting_usb_auth": "Aguardando o dispositivo USB...
Toque no botão no seu dispositivo USB agora.",
"waiting_usb_register": "Aguardando o dispositivo USB...
Digite sua senha acima e confirme seu registro tocando no botão no seu dispositivo USB.",
- "yubi_otp": "Autenticação Yubico OTP"
+ "yubi_otp": "Autenticação Yubico OTP",
+ "force_tfa": "Forçar o cadastro de 2FA no login",
+ "force_tfa_info": "O usuário será obrigado a configurar a autenticação de dois fatores antes de acessar o painel.",
+ "setup_title": "Autenticação de Dois Fatores Obrigatória",
+ "setup_required": "Sua conta exige autenticação de dois fatores. Configure um método de 2FA para continuar.",
+ "cancel_setup": "Cancelar e sair"
},
"user": {
"action": "Ação",
@@ -1276,7 +1288,7 @@
"delete_ays": "Confirme o processo de exclusão.",
"direct_aliases": "Endereços de alias diretos",
"direct_aliases_desc": "Os endereços de alias diretos são afetados pelo filtro de spam e pelas configurações da política TLS.",
- "direct_protocol_access": "Esse usuário da mailbox tem acesso externo direto aos seguintes protocolos e aplicativos. Essa configuração é controlada pelo administrador. As senhas de aplicativos podem ser criadas para conceder acesso a protocolos e aplicativos individuais.
O botão “Login no webmail” fornece login único no SoGo e está sempre disponível.",
+ "direct_protocol_access": "Este usuário da mailbox possui acesso direto e externo aos seguintes protocolos e aplicações. Esta configuração é controlada pelo seu administrador. Senhas de aplicativo podem ser criadas para conceder acesso a protocolos e aplicações específicos.
O botão “Webmail” fornece login único (SSO) para o SOGo e está sempre disponível.",
"eas_reset": "Redefinir o cache do dispositivo ActiveSync",
"eas_reset_help": "Em muitos casos, uma redefinição do cache do dispositivo ajudará a recuperar um perfil quebrado do ActiveSync.
Atenção: Todos os elementos serão baixados novamente!",
"eas_reset_now": "Reinicie agora",
@@ -1352,12 +1364,12 @@
"sogo_profile_reset": "Redefinir perfil SoGo",
"sogo_profile_reset_help": "Isso destruirá o perfil SoGo de um usuário e excluirá todos os dados de contato e calendário irrecuperáveis.",
"sogo_profile_reset_now": "Redefina o perfil agora",
- "spam_aliases": "Aliases de e-mail temporários",
+ "spam_aliases": "Aliases de e-mail de spam",
"spam_score_reset": "Redefinir para o padrão do servidor",
"spamfilter": "Filtro de spam",
"spamfilter_behavior": "Avaliação",
- "spamfilter_bl": "Lista negra",
- "spamfilter_bl_desc": "Endereços de e-mail na lista negra para sempre serem classificados como spam e rejeitados. E-mails rejeitados não serão copiados para a quarentena. Podem ser usados curingas. Um filtro só é aplicado a aliases diretos (aliases com uma única caixa de correio de destino), excluindo aliases abrangentes e a própria mailbox.",
+ "spamfilter_bl": "Lista de bloqueio",
+ "spamfilter_bl_desc": "Endereços de e-mail na lista de bloqueio para sempre classificar como spam e rejeitados. E-mails rejeitados não serão copiados para a quarentena. Coringas podem ser utilizados. O filtro é aplicado apenas a aliases diretos (aliases com uma única mailbox de destino), excluindo aliases catch-all e a própria mailbox.",
"spamfilter_default_score": "Valores padrão",
"spamfilter_green": "Verde: esta mensagem não é spam",
"spamfilter_hint": "O primeiro valor descreve a “pontuação baixa de spam”, o segundo representa a “alta pontuação de spam”.",
@@ -1368,8 +1380,8 @@
"spamfilter_table_empty": "Não há dados para exibir",
"spamfilter_table_remove": "remover",
"spamfilter_table_rule": "Regra",
- "spamfilter_wl": "Lista branca",
- "spamfilter_wl_desc": "Os endereços de e-mail incluídos na lista branca são programados para nunca serem classificados como spam. Podem ser usados curingas. Um filtro só é aplicado a aliases diretos (aliases com uma única mailbox de destino), excluindo aliases abrangentes e a própria mailbox.",
+ "spamfilter_wl": "Lista de permissões",
+ "spamfilter_wl_desc": "Endereços de e-mail na lista de permissões são configurados para nunca serem classificados como spam. Coringas podem ser utilizados. O filtro é aplicado apenas a aliases diretos (aliases com uma única mailbox de destino), excluindo aliases catch-all e a própria mailbox.",
"spamfilter_yellow": "Amarelo: esta mensagem pode ser spam, será marcada como spam e movida para sua pasta de lixo eletrônico",
"status": "Status",
"sync_jobs": "Trabalhos de sincronização",
@@ -1383,7 +1395,7 @@
"syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Não é possível se conectar ao servidor remoto",
"syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Nome de usuário ou senha incorretos",
"tag_handling": "Definir o tratamento para e-mails marcados",
- "tag_help_example": "Exemplo de um endereço de e-mail marcado: me +Facebook @example .org",
+ "tag_help_example": "Exemplo de endereço de e-mail com tag: eu+Facebook@exemplo.org",
"tag_help_explain": "Na subpasta: uma nova subpasta com o nome da tag será criada abaixo da CAIXA DE ENTRADA (“Caixa de entrada/Facebook”).
\r\nNo assunto: o nome das tags será anexado ao assunto do e-mail, por exemplo: “[Facebook] Minhas notícias”.",
"tag_in_none": "Não faça nada",
"tag_in_subfolder": "Na subpasta",
@@ -1408,7 +1420,11 @@
"authentication": "Autenticação",
"overview": "Visão geral",
"protocols": "Protocolos",
- "tfa_info": "A autenticação de dois fatores ajuda a proteger sua conta. Se você habilitá-la, precisará de senhas de aplicativo para fazer login em aplicativos ou serviços que não suportam autenticação de dois fatores (por exemplo, clientes de email)."
+ "tfa_info": "A autenticação de dois fatores ajuda a proteger sua conta. Se você habilitá-la, precisará de senhas de aplicativo para fazer login em aplicativos ou serviços que não suportam autenticação de dois fatores (por exemplo, clientes de email).",
+ "expire_never": "Nunca expirar",
+ "forever": "Para sempre",
+ "pw_update_required": "Sua conta exige a alteração de senha. Defina uma nova senha para continuar.",
+ "spam_aliases_info": "Um alias de spam é um endereço de e-mail temporário que pode ser usado para proteger endereços de e-mail reais.
Opcionalmente, pode-se definir um tempo de expiração para que o alias seja automaticamente desativado após o período definido, descartando efetivamente endereços que tenham sido abusados ou vazados."
},
"warning": {
"cannot_delete_self": "Não é possível excluir o usuário conectado",
diff --git a/data/web/lang/lang.ru-ru.json b/data/web/lang/lang.ru-ru.json
index e7d825639..58353fb5c 100644
--- a/data/web/lang/lang.ru-ru.json
+++ b/data/web/lang/lang.ru-ru.json
@@ -111,7 +111,8 @@
"validate": "Проверить",
"validation_success": "Проверка прошла успешно",
"internal": "Внутренний",
- "internal_info": "Внутренние псевдонимы доступны только из самого домена или доменов-псевдонимов."
+ "internal_info": "Внутренние псевдонимы доступны только из самого домена или доменов-псевдонимов.",
+ "sender_allowed": "Разрешить отправку с этим псевдонимом"
},
"admin": {
"access": "Настройки доступа",
@@ -781,7 +782,9 @@
"mta_sts_max_age_info": "Время в секундах, в течение которого принимающие почтовые серверы могут кэшировать эту политику перед повторной загрузкой.",
"mta_sts_mx": "Сервер MX",
"mta_sts_mx_info": "Разрешает отправку только на явно указанные имена хостов почтовых серверов; отправляющий MTA проверяет, соответствует ли DNS-имя MX-хоста списку политик, и разрешает доставку только с подлинным TLS-сертификатом (защита от MITM).",
- "mta_sts_mx_notice": "Можно указать несколько MX-серверов (через запятую)."
+ "mta_sts_mx_notice": "Можно указать несколько MX-серверов (через запятую).",
+ "sender_allowed": "Разрешить отправку с этим псевдонимом",
+ "sender_allowed_info": "Если отключено, этот псевдоним может только принимать почту. Используйте ACL отправителя, чтобы переопределить и предоставить определенным почтовым ящикам разрешение на отправку."
},
"fido2": {
"confirm": "Подтвердить",
diff --git a/data/web/lang/lang.si-si.json b/data/web/lang/lang.si-si.json
index 918fb8b1a..c13a08907 100644
--- a/data/web/lang/lang.si-si.json
+++ b/data/web/lang/lang.si-si.json
@@ -29,7 +29,8 @@
"extend_sender_acl": "Dovoli razširitev pošiljateljevega ACL z zunanjimi e-poštnimi naslovi",
"quarantine_category": "Spremeni kategorijo obvestil o karanteni",
"syncjobs": "Sinhronizacijska opravila",
- "pw_reset": "Dovoli ponastavitev uporabniškega gesla mailcow"
+ "pw_reset": "Dovoli ponastavitev uporabniškega gesla mailcow",
+ "alias_external_goto": "Dovoli vzdevke z zunanjimi domenami goto"
},
"add": {
"active": "Aktivno",
@@ -111,7 +112,8 @@
"timeout2": "Časovna omejitev za povezavo do lokalnega gostitelja",
"dry": "Simuliraj sinhronizacijo",
"internal": "Notranje",
- "internal_info": "Notranji vzdevki so dostopni samo iz lastne domene ali vzdevkov domen."
+ "internal_info": "Notranji vzdevki so dostopni samo iz lastne domene ali vzdevkov domen.",
+ "sender_allowed": "Dovoli pošiljanje kot ta vzdevek"
},
"admin": {
"access": "Dostop",
@@ -411,7 +413,12 @@
"task": "Naloga",
"user_link": "Uporabniška povezava",
"iam_realm": "Realm",
- "needs_restart": "potreben je ponovni zagon"
+ "needs_restart": "potreben je ponovni zagon",
+ "ui_theme": "Tema",
+ "ui_theme_dark": "Vključuje različico s temnim načinom",
+ "ui_theme_default": "Privzeto",
+ "ui_theme_info": "Teme so mape v data/web/css/themes/<name>/, ki vsebujejo naslednje datoteke:
",
+ "ui_theme_none": "Tem ni bilo mogoče najti."
},
"danger": {
"alias_goto_identical": "Vzdevek in ciljni naslov se ne smeta ujemati",
@@ -556,7 +563,11 @@
"max_age_invalid": "Najvišja starost %s je neveljavna",
"mode_invalid": "Način %s ni veljaven",
"mx_invalid": "Zapis MX %s je neveljaven",
- "version_invalid": "Različica %s je neveljavna"
+ "version_invalid": "Različica %s je neveljavna",
+ "tfa_removal_blocked": "Dvofaktorske avtentikacije ni mogoče odstraniti, ker je obvezna za vaš račun.",
+ "quarantine_category_invalid": "Kategorija karantene mora biti ena od: add_header, reject, all",
+ "external_goto_denied": "Zunanji naslov goto %s ni dovoljen",
+ "ui_theme_invalid": "Tema ni najdena"
},
"debug": {
"containers_info": "Informacije o zabojniku",
@@ -780,7 +791,10 @@
"mta_sts_mx_info": "Omogoča pošiljanje samo na izrecno navedena imena gostiteljskih strežnikov poštnih strežnikov; pošiljajoči MTA preveri, ali se ime gostitelja DNS MX ujema s seznamom pravilnikov, in dovoljuje dostavo le z veljavnim potrdilom TLS (zaščita pred MITM).",
"mta_sts_mx_notice": "Določiti je mogoče več strežnikov MX (ločenih z vejicami).",
"internal": "Notranje",
- "internal_info": "Notranji vzdevki so dostopni samo iz lastne domene ali vzdevkov domen."
+ "internal_info": "Notranji vzdevki so dostopni samo iz lastne domene ali vzdevkov domen.",
+ "sender_allowed": "Dovoli pošiljanje kot ta vzdevek",
+ "sender_allowed_info": "Če je onemogočeno, lahko ta vzdevek samo prejema pošto. Za preglasitev in dodelitev dovoljenja za pošiljanje določenim poštnim predalom uporabite seznam za nadzor dostopa pošiljatelja.",
+ "mta_sts_active_info": "Če ni označeno, pravilnik MTA-STS ne bo objavljen in za poddomeno mta-sts ne bo zahtevano nobeno potrdilo prek ACME."
},
"footer": {
"restart_container_info": "Pomembno: Eleganten ponovni zagon lahko traja nekaj časa, zato počakajte, da se konča.",
@@ -996,7 +1010,8 @@
"weekly": "Tedensko",
"sieve_info": "Na uporabnika lahko shranite več filtrov, vendar je lahko hkrati aktiven le en predfilter in en postfilter.theme.css (obvezna)dark.css (neobvezna, temni način)bootstrap.css (neobvezna, nadomesti osnovno temo Bootstrap)theme.json (neobvezna, name in description)
\nVsak filter bo obdelan v opisanem vrstnem redu. Niti neuspešen skript niti izdan ukaz »keep;« ne bosta ustavila obdelave nadaljnjih skript. Spremembe globalnih skriptov sita bodo sprožile ponovni zagon Dovecota.
Globalni predfilter sita • Predfilter • Uporabniški skripti • Postfilter • Globalni postfilter sita",
"tls_policy_maps_info": "Ta preslikava pravilnikov preglasi pravila odhodnega prenosa TLS neodvisno od uporabnikovih nastavitev pravilnikov TLS.
\n Za več informacij preverite dokumentacijo »smtp_tls_policy_maps«.",
- "internal": "Notranje"
+ "internal": "Notranje",
+ "force_tfa": "TFA"
},
"fido2": {
"known_ids": "Znani ID-ji",
@@ -1072,7 +1087,7 @@
"rspamd_result": "Rezultat Rspamd",
"sender": "Pošiljatelj (SMTP)",
"sender_header": "Pošiljatelj (glava »Od«)",
- "settings_info": "Največje število elementov za karanteno: %s
Največja velikost e-pošte: %s MiB",
+ "settings_info": "Največje število elementov za karanteno (na poštni predal): %s
Največja velikost e-pošte: %s MiB",
"show_item": "Prikaži element",
"spam": "Neželena pošta",
"subj": "Zadeva",
@@ -1197,7 +1212,8 @@
"cors_headers_edited": "Nastavitve CORS so bile shranjene",
"item_released": "Izdan je bil element %s",
"saved_settings": "Shranjene nastavitve",
- "learned_ham": "Uspešno naučen ID %s kot zaželjen"
+ "learned_ham": "Uspešno naučen ID %s kot zaželjen",
+ "ui_theme_modified": "Tema je bila uspešno shranjena"
},
"start": {
"imap_smtp_server_auth_info": "Prosimo, uporabite svoj celoten e-poštni naslov in mehanizem za preverjanje pristnosti PLAIN.
\nVaši podatki za prijavo bodo šifrirani z obveznim šifriranjem na strani strežnika.",
@@ -1229,7 +1245,12 @@
"u2f_deprecated_important": "Prosimo, registrirajte svoj ključ v skrbniški plošči z novo metodo WebAuthn.",
"waiting_usb_auth": "Čakanje na napravo USB ...
Zdaj se dotaknite gumba na napravi USB.",
"waiting_usb_register": "Čakanje na napravo USB ...
Vnesite svoje geslo zgoraj in potrdite registracijo tako, da tapnete gumb na napravi USB.",
- "yubi_otp": "Avtentikacija z enkratnim geslom Yubico"
+ "yubi_otp": "Avtentikacija z enkratnim geslom Yubico",
+ "force_tfa": "Vsiljena registracija 2FA ob prijavi",
+ "force_tfa_info": "Uporabnik bo moral pred dostopom do nadzorne plošče nastaviti dvofaktorsko overjanje.",
+ "setup_title": "Zahtevana je dvofaktorska avtentikacija",
+ "setup_required": "Vaš račun zahteva dvofaktorsko overjanje. Za nadaljevanje nastavite metodo dvofaktorske overitve.",
+ "cancel_setup": "Prekliči in se odjavi"
},
"ratelimit": {
"disabled": "Onemogočeno",
@@ -1410,7 +1431,8 @@
"syncjob_EX_OK": "Uspeh",
"expire_never": "Nikoli ne poteče",
"forever": "Za vedno",
- "spam_aliases_info": "Vzdevek za neželeno pošto je začasni e-poštni naslov, ki ga je mogoče uporabiti za zaščito pravih e-poštnih naslovov.
Po želji je mogoče nastaviti čas poteka veljavnosti, tako da se vzdevek po določenem obdobju samodejno deaktivira, s čimer se učinkovito znebite zlorabljenih ali razkritih naslovov."
+ "spam_aliases_info": "Vzdevek za neželeno pošto je začasni e-poštni naslov, ki ga je mogoče uporabiti za zaščito pravih e-poštnih naslovov.
Po želji je mogoče nastaviti čas poteka veljavnosti, tako da se vzdevek po določenem obdobju samodejno deaktivira, s čimer se učinkovito znebite zlorabljenih ali razkritih naslovov.",
+ "pw_update_required": "Za vaš račun je potrebna sprememba gesla. Za nadaljevanje nastavite novo geslo."
},
"warning": {
"cannot_delete_self": "Prijavljenega uporabnika ni mogoče izbrisati",
diff --git a/data/web/lang/lang.uz-uz.json b/data/web/lang/lang.uz-uz.json
new file mode 100644
index 000000000..a8d2ecf82
--- /dev/null
+++ b/data/web/lang/lang.uz-uz.json
@@ -0,0 +1,1440 @@
+{
+ "acl": {
+ "alias_domains": "Taxallus domenlarini qoʻshish",
+ "app_passwds": "Ilova parollarini boshqarish",
+ "bcc_maps": "BCC xaritalari",
+ "delimiter_action": "Ajratuvchi amali",
+ "domain_desc": "Domen tavsifini oʻzgartirish",
+ "domain_relayhost": "Domen uchun relay xostni oʻzgartirish",
+ "eas_reset": "EAS qurilmalarini tiklash",
+ "extend_sender_acl": "Tashqi manzillar yordamida joʻnatuvchi ACL ni kengaytirishga ruxsat berish",
+ "filters": "Filtrlar",
+ "login_as": "Pochta qutisi foydalanuvchisi sifatida kirish",
+ "mailbox_relayhost": "Pochta qutisi uchun relay xostni oʻzgartirish",
+ "prohibited": "ACL tomonidan taqiqlangan",
+ "protocol_access": "Protokolga kirishni oʻzgartirish",
+ "pushover": "Pushover",
+ "pw_reset": "mailcow foydalanuvchi parolini tiklashga ruxsat berish",
+ "quarantine": "Karantin amallari",
+ "quarantine_attachments": "Karantindagi ilovalar",
+ "quarantine_category": "Karantin bildirishnoma turkumini oʻzgartirish",
+ "quarantine_notification": "Karantin bildirishnomalarini oʻzgartirish",
+ "ratelimit": "Tezlik chegarasi",
+ "recipient_maps": "Qabul qiluvchi xaritalari",
+ "smtp_ip_access": "SMTP uchun ruxsat etilgan xostlarni oʻzgartirish",
+ "sogo_access": "SOGo kirishini boshqarishga ruxsat berish",
+ "sogo_profile_reset": "SOGo profilini tiklash",
+ "spam_alias": "Vaqtinchalik taxalluslar",
+ "spam_policy": "Qora roʻyxat/Oq roʻyxat",
+ "spam_score": "Spam bahosi",
+ "syncjobs": "Sinxronizatsiya vazifalari",
+ "tls_policy": "TLS siyosati",
+ "unlimited_quota": "Pochta qutilari uchun cheksiz kvota"
+ },
+ "add": {
+ "activate_filter_warn": "Faol belgilansa, boshqa barcha filtrlar oʻchirib qoʻyiladi.",
+ "active": "Faol",
+ "add": "Qoʻshish",
+ "add_domain_only": "Faqat domen qoʻshish",
+ "add_domain_restart": "Domen qoʻshish va SOGoni qayta ishga tushirish",
+ "alias_address": "Taxallus manzil(lar)i",
+ "alias_address_info": "Toʻliq e-pochta manzil(lar)i yoki @example.com — domenga keladigan barcha xabarlarni qabul qilish uchun (vergul bilan ajratilgan). Faqat mailcow domenlari.",
+ "alias_domain": "Taxallus domeni",
+ "alias_domain_info": "Faqat haqiqiy domen nomlari (vergul bilan ajratilgan).",
+ "app_name": "Ilova nomi",
+ "app_password": "Ilova paroli qoʻshish",
+ "app_passwd_protocols": "Ilova paroli uchun ruxsat etilgan protokollar",
+ "automap": "Papkalarni avtomatik xaritalashga harakat qilish (\"Sent items\", \"Sent\" => \"Sent\" va h.k.)",
+ "backup_mx_options": "Relay sozlamalari",
+ "bcc_dest_format": "BCC manzili bitta haqiqiy e-pochta manzili boʻlishi kerak.
Agar bir nechta manzilga nusxa joʻnatish kerak boʻlsa, taxallus yarating va shu yerda ishlating.",
+ "comment_info": "Maxfiy izoh foydalanuvchiga koʻrinmaydi, ommaviy izoh esa foydalanuvchi koʻrinishida ustiga sichqoncha kelganda maslahat sifatida koʻrsatiladi",
+ "custom_params": "Maxsus parametrlar",
+ "custom_params_hint": "Toʻgʻri: --param=xy, notoʻgʻri: --param xy",
+ "delete1": "Tugatilgach manbadan oʻchirish",
+ "delete2": "Manbada boʻlmagan xabarlarni manzildan oʻchirish",
+ "delete2duplicates": "Manzildagi dublikatlarni oʻchirish",
+ "description": "Tavsif",
+ "destination": "Manzil",
+ "disable_login": "Kirishni taqiqlash (kiruvchi pochta hali ham qabul qilinadi)",
+ "domain": "Domen",
+ "domain_matches_hostname": "%s domeni xost nomiga mos keladi",
+ "domain_quota_m": "Domenning umumiy kvotasi (MiB)",
+ "dry": "Sinxronizatsiyani simulyatsiya qilish",
+ "enc_method": "Shifrlash usuli",
+ "exclude": "Obyektlarni istisno qilish (regex)",
+ "full_name": "Toʻliq ism",
+ "gal": "Global manzillar roʻyxati",
+ "gal_info": "GAL domenning barcha obyektlarini oʻz ichiga oladi va hech bir foydalanuvchi tomonidan tahrirlanmaydi. Oʻchirilsa, SOGodagi bandlik maʼlumotlari yoʻqoladi! Oʻzgarishlarni qoʻllash uchun SOGoni qayta ishga tushiring.",
+ "generate": "yaratish",
+ "goto_ham": "ham sifatida oʻrgatish",
+ "goto_null": "Xatni jimgina rad etish",
+ "goto_spam": "spam sifatida oʻrgatish",
+ "hostname": "Xost",
+ "inactive": "Nofaol",
+ "internal": "Ichki",
+ "internal_info": "Ichki taxalluslarga faqat oʻz domeni yoki taxallus domenlaridan kirish mumkin.",
+ "sender_allowed": "Ushbu taxallus orqali joʻnatishga ruxsat berish",
+ "kind": "Turi",
+ "mailbox_quota_def": "Standart pochta qutisi kvotasi",
+ "mailbox_quota_m": "Bitta pochta qutisining maks. kvotasi (MiB)",
+ "mailbox_username": "Foydalanuvchi nomi (e-pochta manzilining chap qismi)",
+ "max_aliases": "Mumkin boʻlgan maks. taxalluslar",
+ "max_mailboxes": "Mumkin boʻlgan maks. pochta qutilari",
+ "mins_interval": "Soʻrov oraligʻi (daqiqa)",
+ "multiple_bookings": "Bir nechta bandlovlar",
+ "nexthop": "Keyingi nuqta",
+ "password": "Parol",
+ "password_repeat": "Tasdiqlash paroli (takrorlang)",
+ "port": "Port",
+ "post_domain_add": "Yangi domen qoʻshilgandan keyin SOGo konteyneri (\"sogo-mailcow\") qayta ishga tushirilishi kerak!
Bundan tashqari, domenning DNS sozlamalarini koʻrib chiqing. DNS sozlamalari tasdiqlangach, yangi domeningiz (autoconfig.<domain>, autodiscover.<domain>) uchun sertifikatlarni avtomatik yaratish uchun \"acme-mailcow\" konteynerini qayta ishga tushiring.
Bu qadam ixtiyoriy va har 24 soatda qayta urinib koʻriladi.",
+ "private_comment": "Maxfiy izoh",
+ "public_comment": "Ommaviy izoh",
+ "quota_mb": "Kvota (MiB)",
+ "relay_all": "Barcha qabul qiluvchilarni relay qilish",
+ "relay_all_info": "↪ Agar barcha qabul qiluvchilarni relay qilmaslikni tanlasangiz, relay qilinishi kerak boʻlgan har bir qabul qiluvchi uchun (\"koʻr\") pochta qutisi qoʻshishingiz kerak boʻladi.",
+ "relay_domain": "Ushbu domenni relay qilish",
+ "relay_transport_info": "
\r\nO'ralmagan istalgan portdan foydalaning va STARTTLS chiqaring. TLS ni majburlash uchun TLS siyosatini \"TLS siyosati xaritalari\"da yaratish mumkin.",
+ "select": "Iltimos, tanlang...",
+ "select_domain": "Avval domenni tanlang",
+ "sieve_desc": "Qisqa tavsif",
+ "sieve_type": "Filtr turi",
+ "skipcrossduplicates": "Papkalararo dublikat xabarlarni oʻtkazib yuborish (birinchi kelgan, birinchi xizmatlanadi)",
+ "subscribeall": "Barcha papkalarga obuna boʻlish",
+ "syncjob": "Sinxronizatsiya vazifasi qoʻshish",
+ "syncjob_hint": "Parollar oddiy matn sifatida saqlanishini unutmang!",
+ "tags": "Teglar",
+ "target_address": "Yoʻnaltirish manzillari",
+ "target_address_info": "Toʻliq e-pochta manzil(lar)i (vergul bilan ajratilgan).",
+ "target_domain": "Maqsad domen",
+ "timeout1": "Masofaviy xostga ulanish vaqtining tugashi",
+ "timeout2": "Mahalliy xostga ulanish vaqtining tugashi",
+ "username": "Foydalanuvchi nomi",
+ "validate": "Tekshirish",
+ "validation_success": "Muvaffaqiyatli tekshirildi"
+ },
+ "admin": {
+ "access": "Kirish",
+ "action": "Amal",
+ "activate_api": "API ni faollashtirish",
+ "activate_send": "Joʻnatish tugmasini faollashtirish",
+ "active": "Faol",
+ "active_rspamd_settings_map": "Faol sozlamalar xaritasi",
+ "add": "Qoʻshish",
+ "add_admin": "Administrator qoʻshish",
+ "add_domain_admin": "Domen administratorini qoʻshish",
+ "add_forwarding_host": "Yoʻnaltirish xosti qoʻshish",
+ "add_relayhost": "Joʻnatuvchiga bogʻliq transport qoʻshish",
+ "add_relayhost_hint": "Autentifikatsiya maʼlumotlari, agar boʻlsa, oddiy matn sifatida saqlanishini unutmang.",
+ "add_row": "Satr qoʻshish",
+ "add_settings_rule": "Sozlamalar qoidasini qoʻshish",
+ "add_transport": "Transport qoʻshish",
+ "add_transports_hint": "Autentifikatsiya maʼlumotlari, agar boʻlsa, oddiy matn sifatida saqlanishini unutmang.",
+ "additional_rows": " ta qoʻshimcha satr qoʻshildi",
+ "admin": "Administrator",
+ "admin_details": "Administrator maʼlumotlarini tahrirlash",
+ "admin_domains": "Domen tayinlashlari",
+ "admins": "Administratorlar",
+ "admins_ldap": "LDAP administratorlari",
+ "admin_quicklink": "Admin kirish sahifasiga tezkor havolani yashirish",
+ "advanced_settings": "Kengaytirilgan sozlamalar",
+ "allowed_methods": "Access-Control-Allow-Methods",
+ "allowed_origins": "Access-Control-Allow-Origin",
+ "api_allow_from": "API kirishini ushbu IP / CIDR tarmoq belgilanishlaridan ruxsat berish",
+ "api_info": "API ishlab chiqilmoqda. Hujjatlarni /api manzilida topishingiz mumkin",
+ "api_key": "API kaliti",
+ "api_read_only": "Faqat oʻqish uchun kirish",
+ "api_read_write": "Oʻqish va yozish uchun kirish",
+ "api_skip_ip_check": "API uchun IP tekshiruvini oʻtkazib yuborish",
+ "app_hide": "Kirishda yashirish",
+ "app_links": "Ilova havolalari",
+ "app_name": "Ilova nomi",
+ "apps_name": "\"mailcow Apps\" nomi",
+ "arrival_time": "Kelish vaqti (server vaqti)",
+ "authed_user": "Avtorizatsiya qilingan foydalanuvchi",
+ "ays": "Davom etishni xohlayotganingizga ishonchingiz komilmi?",
+ "ban_list_info": "Quyida bloklangan IP roʻyxati keltirilgan: tarmoq (qolgan blok vaqti) - [amallar].
Blokdan chiqarishga navbatga qoʻyilgan IP lar bir necha soniya ichida faol bloklash roʻyxatidan olib tashlanadi.
Qizil yorliqlar qora roʻyxat orqali faol doimiy bloklarni bildiradi.",
+ "change_logo": "Logotipni oʻzgartirish",
+ "logo_normal_label": "Oddiy",
+ "logo_dark_label": "Qorongʻi rejim uchun teskari",
+ "configuration": "Konfiguratsiya",
+ "convert_html_to_text": "HTMLni oddiy matnga aylantirish",
+ "copy_to_clipboard": "Matn vaqtinchalik xotiraga koʻchirildi!",
+ "cors_settings": "CORS sozlamalari",
+ "credentials_transport_warning": "Diqqat: Yangi transport xaritasi yozuvi qoʻshish keyingi nuqta ustunlari mos keladigan barcha yozuvlar uchun maʼlumotlarni yangilaydi.",
+ "customer_id": "Mijoz ID",
+ "customize": "Sozlash",
+ "login_page": "Kirish sahifasi",
+ "destination": "Manzil",
+ "dkim_add_key": "ARC/DKIM kaliti qoʻshish",
+ "dkim_domains_selector": "Tanlovchi",
+ "dkim_domains_wo_keys": "Kalit yetishmaydigan domenlarni tanlash",
+ "dkim_from": "Kimdan",
+ "dkim_from_title": "Maʼlumotlarni koʻchirib olish uchun manba domen",
+ "dkim_key_length": "DKIM kalit uzunligi (bit)",
+ "dkim_key_missing": "Kalit yetishmaydi",
+ "dkim_key_unused": "Kalit ishlatilmagan",
+ "dkim_key_valid": "Kalit haqiqiy",
+ "dkim_keys": "ARC/DKIM kalitlari",
+ "dkim_overwrite_key": "Mavjud DKIM kalitini ustidan yozish",
+ "dkim_private_key": "Maxfiy kalit",
+ "dkim_to": "Kimga",
+ "dkim_to_title": "Maqsad domen(lar) — ustidan yoziladi",
+ "domain": "Domen",
+ "domain_admin": "Domen administratori",
+ "domain_admins": "Domen administratorlari",
+ "domainadmin_quicklink": "Domen admin kirish sahifasiga tezkor havolani yashirish",
+ "domain_s": "Domen(lar)",
+ "duplicate": "Nusxalash",
+ "duplicate_dkim": "DKIM yozuvini nusxalash",
+ "edit": "Tahrirlash",
+ "empty": "Natijalar yoʻq",
+ "excludes": "Ushbu qabul qiluvchilarni istisno qiladi",
+ "f2b_ban_time": "Bloklash vaqti (s)",
+ "f2b_ban_time_increment": "Har bir bloklashda blok vaqti ortadi",
+ "f2b_blacklist": "Qora roʻyxatdagi tarmoqlar/xostlar",
+ "f2b_filter": "Regex filtrlari",
+ "f2b_list_info": "Qora roʻyxatdagi xost yoki tarmoq har doim oq roʻyxat elementidan ustun keladi. Roʻyxat yangilanishlarini qoʻllash uchun bir necha soniya kerak boʻladi.",
+ "f2b_manage_external": "Fail2ban ni tashqi boshqarish",
+ "f2b_manage_external_info": "Fail2ban hali ham banlist ni saqlaydi, ammo trafikni bloklash uchun faol qoidalarni oʻrnatmaydi. Trafikni tashqi tomondan bloklash uchun quyida yaratilgan banlist dan foydalaning.",
+ "f2b_max_attempts": "Maks. urinishlar",
+ "f2b_max_ban_time": "Maks. bloklash vaqti (s)",
+ "f2b_netban_ipv4": "Blokni qoʻllash uchun IPv4 subtarmoq oʻlchami (8-32)",
+ "f2b_netban_ipv6": "Blokni qoʻllash uchun IPv6 subtarmoq oʻlchami (8-128)",
+ "f2b_parameters": "Fail2ban parametrlari",
+ "f2b_regex_info": "Eʼtiborga olinadigan jurnallar: SOGo, Postfix, Dovecot, PHP-FPM.",
+ "f2b_retry_window": "Maks. urinishlar uchun qayta urinish oynasi (s)",
+ "f2b_whitelist": "Oq roʻyxatdagi tarmoqlar/xostlar",
+ "filter": "Filtr",
+ "filter_table": "Filtr jadvali",
+ "force_sso_text": "Tashqi OIDC provayder sozlangan boʻlsa, bu variant standart mailcow kirish formalarini yashiradi va faqat Yagona kirish tugmasini koʻrsatadi",
+ "force_sso": "mailcow kirishini oʻchirib, faqat Yagona kirishni koʻrsatish",
+ "forwarding_hosts": "Yoʻnaltirish xostlari",
+ "forwarding_hosts_add_hint": "Siz IPv4/IPv6 manzillarini, CIDR yozuvidagi tarmoqlarni, xost nomlarini (IP manzillariga aylantiriladi) yoki domen nomlarini (SPF TXT yoki yoʻq boʻlsa MX yozuvlarini soʻrash orqali IP manzillariga aylantiriladi) belgilashingiz mumkin.",
+ "forwarding_hosts_hint": "Kiruvchi xabarlar bu yerda keltirilgan istalgan xostlardan shartsiz qabul qilinadi. Bu xostlar keyin DNSBL ga qarshi tekshirilmaydi yoki greylisting ga olinmaydi. Ulardan kelgan spam hech qachon rad etilmaydi, ammo ixtiyoriy ravishda Junk papkasiga joylashtirilishi mumkin. Buning eng keng tarqalgan ishlatilishi — mailcow serveringizga kiruvchi xatlarni yoʻnaltirish qoidasi oʻrnatilgan pochta serverlarini koʻrsatish.",
+ "from": "Kimdan",
+ "generate": "yaratish",
+ "guid": "GUID - noyob nusxa ID si",
+ "guid_and_license": "GUID va litsenziya",
+ "hash_remove_info": "Ratelimit hashini oʻchirish (agar mavjud boʻlsa) uning hisoblagichini butunlay tiklaydi.
\r\n Har bir hash alohida rang bilan koʻrsatiladi.",
+ "help_text": "Kirish maskasi ostidagi yordam matnini bekor qilish (HTML ruxsat etilgan)",
+ "host": "Xost",
+ "html": "HTML",
+ "iam": "Identifikatsiya provayderi",
+ "iam_attribute_field": "Atribut maydoni",
+ "iam_authorize_url": "Avtorizatsiya nuqtasi",
+ "iam_auth_flow": "Autentifikatsiya oqimi",
+ "iam_auth_flow_info": "Yagona kirish (SSO) uchun ishlatiladigan Authorization Code Flow (Keycloak da Standard Flow) qoʻshimcha ravishda, mailcow toʻgʻridan-toʻgʻri maʼlumotlar bilan Autentifikatsiya oqimini ham qoʻllab-quvvatlaydi. Mailpassword Flow Keycloak Admin REST API yordamida foydalanuvchi maʼlumotlarini tekshirishga harakat qiladi. mailcow Keycloakda xaritalangan mailcow_password atributidan xeshlangan parolni oladi.",
+ "iam_basedn": "Base DN",
+ "iam_client_id": "Mijoz ID",
+ "iam_client_secret": "Mijoz maxfiy soʻzi",
+ "iam_client_scopes": "Mijoz qamrovlari",
+ "iam_default_template": "Standart shablon",
+ "iam_default_template_description": "Agar foydalanuvchiga shablon tayinlanmagan boʻlsa, pochta qutisini yaratishda standart shablon ishlatiladi, lekin pochta qutisini yangilash uchun emas.",
+ "iam_description": "Autentifikatsiya uchun tashqi provayderni sozlash
Foydalanuvchi pochta qutilari atribut xaritalashi oʻrnatilgan boʻlsa, ular birinchi marta kirgan zahoti avtomatik yaratiladi.",
+ "iam_extra_permission": "Quyidagi sozlamalarning ishlashi uchun Keycloak dagi mailcow mijoziga Service account va view-users ruxsati kerak.",
+ "iam_host": "Xost",
+ "iam_host_info": "Bir yoki bir nechta LDAP xostni vergul bilan ajratib kiriting.",
+ "iam_import_users": "Foydalanuvchilarni import qilish",
+ "iam_login_provisioning": "Kirishda foydalanuvchilarni avto-yaratish",
+ "iam_mapping": "Atribut xaritalashi",
+ "iam_bindpass": "Bind paroli",
+ "iam_periodic_full_sync": "Davriy toʻliq sinxronizatsiya",
+ "iam_port": "Port",
+ "iam_realm": "Realm",
+ "iam_redirect_url": "Yoʻnaltirish URL",
+ "iam_rest_flow": "Mailpassword Flow",
+ "iam_server_url": "Server URL",
+ "iam_sso": "Yagona kirish (SSO)",
+ "iam_sync_interval": "Sinxronizatsiya / import oraligʻi (daqiqa)",
+ "iam_test_connection": "Ulanishni tekshirish",
+ "iam_token_url": "Token nuqtasi",
+ "iam_userinfo_url": "Foydalanuvchi maʼlumotlari nuqtasi",
+ "iam_username_field": "Foydalanuvchi nomi maydoni",
+ "iam_binddn": "Bind DN",
+ "iam_use_ssl": "SSL dan foydalanish",
+ "iam_use_ssl_info": "SSL yoqilsa va port 389 ga oʻrnatilgan boʻlsa, u avtomatik ravishda 636 ga oʻzgartiriladi.",
+ "iam_use_tls": "StartTLS dan foydalanish",
+ "iam_use_tls_info": "TLS yoqilsa, LDAP serveringiz uchun standart portni (389) ishlatishingiz kerak. SSL portlari ishlatilmaydi.",
+ "iam_version": "Versiya",
+ "ignore_ssl_error": "SSL xatolarini eʼtiborsiz qoldirish",
+ "import": "Import",
+ "import_private_key": "Maxfiy kalitni import qilish",
+ "in_use_by": "Kim ishlatadi",
+ "inactive": "Nofaol",
+ "include_exclude": "Kiritish/Istisno qilish",
+ "include_exclude_info": "Standart holatda — tanlovsiz — barcha pochta qutilariga murojaat qilinadi",
+ "includes": "Ushbu qabul qiluvchilarni kiritish",
+ "ip_check": "IP tekshiruvi",
+ "ip_check_disabled": "IP tekshiruvi oʻchirilgan. Uni quyidagi joydan yoqishingiz mumkin:
Tizim > Konfiguratsiya > Variantlar > Sozlash",
+ "ip_check_opt_in": "Tashqi IP manzillarni aniqlash uchun ipv4.mailcow.email va ipv6.mailcow.email uchinchi tomon xizmatidan foydalanishga rozilik.",
+ "is_mx_based": "MX asosida",
+ "last_applied": "Oxirgi qoʻllanilgan",
+ "license_info": "Litsenziya talab qilinmaydi, ammo bu loyihaning rivojlanishiga yordam beradi.
GUID ni bu yerda roʻyxatdan oʻtkazing yoki mailcow oʻrnatmangiz uchun yordam sotib oling.",
+ "link": "Havola",
+ "loading": "Iltimos, kuting...",
+ "login_time": "Kirish vaqti",
+ "logo_info": "Tasviringiz yuqori navigatsiya paneli uchun 40px balandlikka, bosh sahifa uchun maks. 250px kenglikka oʻlchanadi. Masshtablanadigan grafika tavsiya etiladi.",
+ "lookup_mx": "Manzil — MX nomiga mos keladigan muntazam ifoda (.*\\.google\\.com — google.com bilan tugaydigan MX ga yoʻnaltirilgan barcha pochtani ushbu nuqta orqali yoʻnaltirish uchun)",
+ "main_name": "\"mailcow UI\" nomi",
+ "merged_vars_hint": "Kulrang satrlar vars.(local.)inc.php dan birlashtirilgan va oʻzgartirib boʻlmaydi.",
+ "message": "Xabar",
+ "message_size": "Xabar oʻlchami",
+ "nexthop": "Keyingi nuqta",
+ "needs_restart": "qayta ishga tushirish kerak",
+ "no": "✕",
+ "no_active_bans": "Faol bloklar yoʻq",
+ "no_new_rows": "Boshqa satrlar mavjud emas",
+ "no_record": "Yozuv yoʻq",
+ "oauth2_apps": "OAuth2 ilovalari",
+ "oauth2_add_client": "OAuth2 mijozini qoʻshish",
+ "oauth2_client_id": "Mijoz ID",
+ "oauth2_client_secret": "Mijoz maxfiy soʻzi",
+ "oauth2_info": "OAuth2 amalga oshirilishi \"Authorization Code\" grant turini qoʻllab-quvvatlaydi va refresh tokenlarini chiqaradi.
\r\nServer shuningdek refresh token ishlatilgandan keyin avtomatik ravishda yangi refresh tokenlarini chiqaradi.
\r\n• Standart qamrov — profile. Faqat pochta qutisi foydalanuvchilari OAuth2 ga qarshi autentifikatsiya qilinishi mumkin. Agar scope parametri tashlab ketilgan boʻlsa, u profile ga qaytadi.
\r\n• state parametri mijoz tomonidan avtorizatsiya soʻrovining bir qismi sifatida yuborilishi shart.
\r\nOAuth2 API ga soʻrovlar uchun yoʻllar:
\r\n\r\n
\r\nMijoz maxfiy soʻzini qayta yaratish mavjud avtorizatsiya kodlarini muddati tugashiga olib kelmaydi, lekin ular tokenni yangilashda muvaffaqiyatsiz boʻladi./oauth/authorize/oauth/token/oauth/profile
\r\nMijoz tokenlarini bekor qilish barcha faol sessiyalarning darhol tugashiga olib keladi. Barcha mijozlar qayta autentifikatsiya qilishlari kerak.",
+ "oauth2_redirect_uri": "Yoʻnaltirish URI",
+ "oauth2_renew_secret": "Yangi mijoz maxfiy soʻzini yaratish",
+ "oauth2_revoke_tokens": "Barcha mijoz tokenlarini bekor qilish",
+ "optional": "ixtiyoriy",
+ "options": "Variantlar",
+ "password": "Parol",
+ "password_length": "Parol uzunligi",
+ "password_policy": "Parol siyosati",
+ "password_policy_chars": "Kamida bitta alifbo belgisini oʻz ichiga olishi kerak",
+ "password_policy_length": "Minimal parol uzunligi %d",
+ "password_policy_lowerupper": "Kichik va katta harflarni oʻz ichiga olishi kerak",
+ "password_policy_numbers": "Kamida bitta raqamni oʻz ichiga olishi kerak",
+ "password_policy_special_chars": "Maxsus belgilarni oʻz ichiga olishi kerak",
+ "password_repeat": "Tasdiqlash paroli (takrorlang)",
+ "password_reset_info": "Agar tiklash uchun e-pochta kiritilmagan boʻlsa, bu funksiyadan foydalanib boʻlmaydi.",
+ "password_reset_settings": "Parolni tiklash sozlamalari",
+ "password_reset_tmpl_html": "HTML shablon",
+ "password_reset_tmpl_text": "Matnli shablon",
+ "password_settings": "Parol sozlamalari",
+ "priority": "Muhimlik darajasi",
+ "private_key": "Maxfiy kalit",
+ "quarantine": "Karantin",
+ "quarantine_bcc": "Barcha bildirishnomalarning nusxasini (BCC) ushbu qabul qiluvchiga yuborish:
Oʻchirish uchun boʻsh qoldiring. Imzolanmagan, tekshirilmagan xat. Faqat ichki yetkazib berilishi kerak.",
+ "quarantine_exclude_domains": "Domenlar va taxallus domenlarini istisno qilish",
+ "quarantine_max_age": "Maksimal yosh (kunlarda)
Qiymat 1 kun yoki undan koʻp boʻlishi kerak.",
+ "quarantine_max_score": "Agar xatning spam bahosi ushbu qiymatdan yuqori boʻlsa, bildirishnomani rad etish:
Standart 9999.0",
+ "quarantine_max_size": "Maksimal oʻlcham (MiB) (kattaroq elementlar rad etiladi):
0 cheksizlikni bildirmaydi.",
+ "quarantine_notification_html": "Bildirishnoma e-pochta shabloni:
Standart shablonni tiklash uchun boʻsh qoldiring.",
+ "quarantine_notification_sender": "Bildirishnoma e-pochta joʻnatuvchisi",
+ "quarantine_notification_subject": "Bildirishnoma e-pochta mavzusi",
+ "quarantine_redirect": "Barcha bildirishnomalarni ushbu qabul qiluvchiga yoʻnaltirish:
Oʻchirish uchun boʻsh qoldiring. Imzolanmagan, tekshirilmagan xat. Faqat ichki yetkazib berilishi kerak.",
+ "quarantine_release_format": "Chiqarilgan elementlar formati",
+ "quarantine_release_format_att": "Ilova sifatida",
+ "quarantine_release_format_raw": "Oʻzgartirilmagan asl nusxa",
+ "quarantine_retention_size": "Pochta qutisi uchun saqlash:
0 — nofaolligini bildiradi.",
+ "quicklink_text": "Boshqa kirish sahifalariga tezkor havolalarni kirish formasi ostida koʻrsatish yoki yashirish",
+ "quota_notification_html": "Bildirishnoma e-pochta shabloni:
Standart shablonni tiklash uchun boʻsh qoldiring.",
+ "quota_notification_sender": "Bildirishnoma e-pochta joʻnatuvchisi",
+ "quota_notification_subject": "Bildirishnoma e-pochta mavzusi",
+ "quota_notifications": "Kvota bildirishnomalari",
+ "quota_notifications_info": "Kvota bildirishnomalari foydalanuvchilarga foydalanish 80% va 95% ga yetganda bir martadan yuboriladi.",
+ "quota_notifications_vars": "{{percent}} — foydalanuvchining joriy kvotasi
{{username}} — pochta qutisi nomi",
+ "queue_unban": "blokdan chiqarish",
+ "r_active": "Faol cheklovlar",
+ "r_inactive": "Nofaol cheklovlar",
+ "r_info": "Faol cheklovlar roʻyxatidagi kulrang/oʻchirilgan elementlar mailcow uchun haqiqiy cheklovlar sifatida tanilmaydi va koʻchirib boʻlmaydi. Nomaʼlum cheklovlar baribir koʻrinish tartibida oʻrnatiladi. inc/vars.local.inc.php da yangi elementlarni qoʻshib, ularni almashtirishingiz mumkin.",
+ "rate_name": "Tezlik nomi",
+ "recipients": "Qabul qiluvchilar",
+ "refresh": "Yangilash",
+ "regen_api_key": "API kalitini qayta yaratish",
+ "regex_maps": "Regex xaritalari",
+ "relay_from": "\"From:\" manzili",
+ "relay_rcpt": "\"To:\" manzili",
+ "relay_run": "Sinovni ishga tushirish",
+ "relayhosts": "Joʻnatuvchiga bogʻliq transportlar",
+ "relayhosts_hint": "Domen konfiguratsiya muloqotida tanlash mumkin boʻlgan joʻnatuvchiga bogʻliq transportlarni belgilang.
\r\n Transport xizmati har doim \"smtp:\" va shuning uchun taklif qilinganda TLS ga harakat qiladi. Oʻralgan TLS (SMTPS) qoʻllab-quvvatlanmaydi. Foydalanuvchining individual chiquvchi TLS siyosati sozlamasi eʼtiborga olinadi.
\r\n Taxallus domenlari bilan birga tanlangan domenlarga taʼsir qiladi.",
+ "remove": "Olib tashlash",
+ "remove_row": "Satrni olib tashlash",
+ "reset_default": "Standartga qaytarish",
+ "reset_limit": "Hash ni olib tashlash",
+ "reset_password_vars": "{{link}} Yaratilgan parolni tiklash havolasi{{username}} Parolni tiklashni soʻragan foydalanuvchining pochta qutisi nomi{{username2}} Tiklash uchun pochta qutisi nomi{{date}} Parolni tiklash soʻrovi qilingan sana{{token_lifetime}} Daqiqalardagi token muddati{{hostname}} mailcow xost nomi",
+ "restore_template": "Standart shablonni tiklash uchun boʻsh qoldiring.",
+ "routing": "Yoʻnaltirish",
+ "rsetting_add_rule": "Qoida qoʻshish",
+ "rsetting_content": "Qoida mazmuni",
+ "rsetting_desc": "Qisqa tavsif",
+ "rsetting_no_selection": "Iltimos, qoidani tanlang",
+ "rsetting_none": "Qoidalar mavjud emas",
+ "rsettings_insert_preset": "Misol presetini kiritish \"%s\"",
+ "rsettings_preset_1": "Autentifikatsiya qilingan foydalanuvchilar uchun DKIM va tezlik chegarasidan boshqa hamma narsani oʻchirib qoʻyish",
+ "rsettings_preset_2": "Postmasterlar spamni xohlaydi",
+ "rsettings_preset_3": "Pochta qutisi uchun faqat maxsus joʻnatuvchilarga ruxsat berish (yaʼni, faqat ichki pochta qutisi sifatida ishlatish)",
+ "rsettings_preset_4": "Domen uchun Rspamd ni oʻchirish",
+ "rspamd_com_settings": "Sozlama nomi avtomatik yaratiladi, quyidagi misol presetlariga qarang. Batafsil maʼlumot uchun Rspamd hujjatlariga qarang",
+ "rspamd_global_filters": "Global filtr xaritalari",
+ "rspamd_global_filters_agree": "Ehtiyot boʻlaman!",
+ "rspamd_global_filters_info": "Global filtr xaritalari turli xil global rad etish va ruxsat berish roʻyxatlarini oʻz ichiga oladi.",
+ "rspamd_global_filters_regex": "Ularning nomlari ularning maqsadini tushuntiradi. Barcha mazmun \"/pattern/options\" formatidagi haqiqiy muntazam ifodalarni oʻz ichiga olishi kerak (masalan, /.+@domain\\.tld/i).
\r\n Har bir regex satriga oddiy tekshiruvlar bajariladi, ammo agar Rspamd sintaksisni toʻgʻri oʻqiy olmasa, uning funksionalligi buzilishi mumkin.
\r\n Rspamd oʻzgarganda xarita mazmunini oʻqishga harakat qiladi. Agar muammolarga duch kelsangiz, xarita qayta yuklanishi uchun Rspamd ni qayta ishga tushiring.
Qora roʻyxatdagi elementlar karantindan istisno qilinadi.",
+ "rspamd_settings_map": "Rspamd sozlamalar xaritasi",
+ "sal_level": "Moo darajasi",
+ "save": "Oʻzgarishlarni saqlash",
+ "search_domain_da": "Domenlarni qidirish",
+ "send": "Joʻnatish",
+ "sender": "Joʻnatuvchi",
+ "service": "Xizmat",
+ "service_id": "Xizmat ID",
+ "source": "Manba",
+ "spamfilter": "Spam filtri",
+ "subject": "Mavzu",
+ "success": "Muvaffaqiyatli",
+ "sys_mails": "Tizim xatlari",
+ "task": "Vazifa",
+ "text": "Matn",
+ "time": "Vaqt",
+ "title": "Sarlavha",
+ "title_name": "\"mailcow UI\" veb-sayt sarlavhasi",
+ "to_top": "Yuqoriga qaytish",
+ "transport_dest_format": "Regex yoki sintaksis: example.org, .example.org, *, box@example.org (bir nechta qiymatlarni vergul bilan ajratish mumkin)",
+ "transport_maps": "Transport xaritalari",
+ "transport_test_rcpt_info": "• Tashqi manzilga relay qilishni sinash uchun null@hosted.mailcow.de dan foydalaning.",
+ "transports_hint": "• Transport xaritasi yozuvi joʻnatuvchiga bogʻliq transport xaritasidan ustun.
\r\n• MX asosidagi transportlar afzalroq ishlatiladi.
\r\n• Foydalanuvchi boʻyicha chiquvchi TLS siyosati sozlamalari eʼtiborga olinmaydi va faqat TLS siyosati xaritasi yozuvlari orqali majburlanishi mumkin.
\r\n• Belgilangan transportlar uchun transport xizmati har doim \"smtp:\" va shuning uchun taklif qilinganda TLS ga harakat qiladi. Oʻralgan TLS (SMTPS) qoʻllab-quvvatlanmaydi.
\r\n• \"/localhost$/\" ga mos keladigan manzillar har doim \"local:\" orqali tashiladi, shuning uchun \"*\" manzili bu manzillarga qoʻllanmaydi.
\r\n• Misol uchun keyingi nuqta \"[host]:25\" uchun maʼlumotlarni aniqlash uchun, Postfix har doim \"[host]:25\" ni qidirishdan oldin \"host\" ni soʻraydi. Bu xatti-harakat \"host\" va \"[host]:25\" ni bir vaqtning oʻzida ishlatishni imkonsiz qiladi.",
+ "ui_footer": "Pastki qism (HTML ruxsat etilgan)",
+ "ui_header_announcement": "Eʼlonlar",
+ "ui_header_announcement_active": "Eʼlonni faollashtirish",
+ "ui_header_announcement_content": "Matn (HTML ruxsat etilgan)",
+ "ui_header_announcement_help": "Eʼlon barcha tizimga kirgan foydalanuvchilarga va UI ning kirish ekranida koʻrinadi.",
+ "ui_header_announcement_select": "Eʼlon turini tanlang",
+ "ui_header_announcement_type": "Tur",
+ "ui_header_announcement_type_danger": "Juda muhim",
+ "ui_header_announcement_type_info": "Maʼlumot",
+ "ui_header_announcement_type_warning": "Muhim",
+ "ui_texts": "UI yorliqlari va matnlari",
+ "unban_pending": "blokdan chiqarish kutilmoqda",
+ "unchanged_if_empty": "Oʻzgartirilmagan boʻlsa, boʻsh qoldiring",
+ "upload": "Yuklash",
+ "username": "Foydalanuvchi nomi",
+ "user_link": "Foydalanuvchi havolasi",
+ "user_quicklink": "Foydalanuvchi kirish sahifasiga tezkor havolani yashirish",
+ "validate_license_now": "GUID ni litsenziya serveriga qarshi tekshirish",
+ "verify": "Tasdiqlash",
+ "yes": "✓"
+ },
+ "danger": {
+ "access_denied": "Kirish rad etildi yoki noma'lum forma ma'lumotlari",
+ "tfa_removal_blocked": "Ikki faktorli autentifikatsiyani olib tashlab boʻlmaydi, chunki u sizning hisobingiz uchun talab qilinadi.",
+ "alias_domain_invalid": "%s taxallus domeni noto'g'ri",
+ "alias_empty": "Taxallus manzili boʻsh boʻlmasligi kerak",
+ "alias_goto_identical": "Taxallus va yoʻnaltirish manzili bir xil boʻlmasligi kerak",
+ "alias_invalid": "%s taxallus manzili noto'g'ri",
+ "aliasd_targetd_identical": "Taxallus domeni maqsad domeniga teng boʻlmasligi kerak: %s",
+ "aliases_in_use": "Maks. taxalluslar %d dan katta yoki teng boʻlishi kerak",
+ "app_name_empty": "Ilova nomi boʻsh boʻlolmaydi",
+ "app_passwd_id_invalid": "Ilova paroli ID %s noto'g'ri",
+ "authsource_in_use": "Identifikatsiya provayderini oʻzgartirib yoki oʻchirib boʻlmaydi, chunki u hozirda bir yoki bir nechta foydalanuvchilar tomonidan ishlatilmoqda.",
+ "bcc_empty": "BCC manzili boʻsh boʻlolmaydi",
+ "bcc_exists": "%s turi uchun %s BCC xaritasi mavjud",
+ "bcc_must_be_email": "BCC manzili %s haqiqiy e-pochta manzili emas",
+ "comment_too_long": "Izoh juda uzun, maks. 160 ta belgiga ruxsat berilgan",
+ "cors_invalid_method": "Noto'g'ri Allow-Method belgilangan",
+ "cors_invalid_origin": "Noto'g'ri Allow-Origin belgilangan",
+ "defquota_empty": "Bitta pochta qutisi uchun standart kvota 0 boʻlmasligi kerak.",
+ "demo_mode_enabled": "Demo rejim yoqilgan",
+ "description_invalid": "%s uchun resurs tavsifi noto'g'ri",
+ "dkim_domain_or_sel_exists": "\"%s\" uchun DKIM kaliti mavjud va u ustidan yozilmaydi",
+ "dkim_domain_or_sel_invalid": "DKIM domeni yoki tanlovchi noto'g'ri: %s",
+ "domain_cannot_match_hostname": "Domen xost nomiga mos kelishi mumkin emas",
+ "domain_exists": "%s domeni allaqachon mavjud",
+ "domain_invalid": "Domen nomi boʻsh yoki noto'g'ri",
+ "domain_not_empty": "Boʻsh boʻlmagan %s domenini olib tashlab boʻlmaydi",
+ "domain_not_found": "%s domeni topilmadi",
+ "domain_quota_m_in_use": "Domen kvotasi %s MiB dan katta yoki teng boʻlishi kerak",
+ "extended_sender_acl_denied": "Tashqi joʻnatuvchi manzillarini oʻrnatish uchun ACL yetishmayapti",
+ "extra_acl_invalid": "Tashqi joʻnatuvchi manzili \"%s\" noto'g'ri",
+ "extra_acl_invalid_domain": "Tashqi joʻnatuvchi \"%s\" noto'g'ri domendan foydalanmoqda",
+ "fido2_verification_failed": "FIDO2 tekshiruvi muvaffaqiyatsiz: %s",
+ "file_open_error": "Faylni yozish uchun ochib boʻlmadi",
+ "filter_type": "Notoʻgʻri filtr turi",
+ "from_invalid": "Joʻnatuvchi boʻsh boʻlmasligi kerak",
+ "generic_server_error": "Kutilmagan server xatosi yuz berdi. Iltimos, administratoringiz bilan bogʻlaning.",
+ "global_filter_write_error": "Filtr faylini yozib boʻlmadi: %s",
+ "global_map_invalid": "Global xarita ID %s noto'g'ri",
+ "global_map_write_error": "Global xarita ID %s ni yozib boʻlmadi: %s",
+ "goto_empty": "Taxallus manzili kamida bitta haqiqiy yoʻnaltirish manzilini oʻz ichiga olishi kerak",
+ "goto_invalid": "Yoʻnaltirish manzili %s noto'g'ri",
+ "ham_learn_error": "Ham oʻrgatish xatosi: %s",
+ "iam_test_connection": "Ulanish muvaffaqiyatsiz",
+ "imagick_exception": "Xato: Tasvirni oʻqishda Imagick istisnosi",
+ "img_dimensions_exceeded": "Tasvir maksimal tasvir oʻlchamidan oshib ketdi",
+ "img_invalid": "Tasvir faylini tekshirib boʻlmadi",
+ "img_size_exceeded": "Tasvir maksimal fayl oʻlchamidan oshib ketdi",
+ "img_tmp_missing": "Tasvir faylini tekshirib boʻlmadi: Vaqtinchalik fayl topilmadi",
+ "invalid_bcc_map_type": "Noto'g'ri BCC xarita turi",
+ "invalid_destination": "Manzil formati \"%s\" noto'g'ri",
+ "invalid_filter_type": "Noto'g'ri filtr turi",
+ "invalid_host": "Noto'g'ri xost belgilangan: %s",
+ "invalid_mime_type": "Noto'g'ri MIME turi",
+ "invalid_nexthop": "Keyingi nuqta formati noto'g'ri",
+ "invalid_nexthop_authenticated": "Keyingi nuqta boshqa maʼlumotlar bilan mavjud, iltimos avval bu keyingi nuqta uchun mavjud maʼlumotlarni yangilang.",
+ "invalid_recipient_map_new": "Yangi qabul qiluvchi noto'g'ri belgilangan: %s",
+ "invalid_recipient_map_old": "Asl qabul qiluvchi noto'g'ri belgilangan: %s",
+ "invalid_reset_token": "Noto'g'ri tiklash tokeni",
+ "ip_list_empty": "Ruxsat etilgan IP roʻyxati boʻsh boʻlolmaydi",
+ "is_alias": "%s allaqachon taxallus manzili sifatida tanilgan",
+ "is_alias_or_mailbox": "%s allaqachon taxallus, pochta qutisi yoki taxallus domenidan kengaytirilgan taxallus manzili sifatida tanilgan.",
+ "is_spam_alias": "%s allaqachon vaqtinchalik taxallus manzili (spam taxallus manzili) sifatida tanilgan",
+ "last_key": "Oxirgi kalitni oʻchirib boʻlmaydi, iltimos uning oʻrniga TFA ni oʻchiring.",
+ "login_failed": "Kirish muvaffaqiyatsiz",
+ "mailbox_defquota_exceeds_mailbox_maxquota": "Standart kvota maksimal kvota chegarasidan oshib ketdi",
+ "mailbox_invalid": "Pochta qutisi nomi noto'g'ri",
+ "mailbox_quota_exceeded": "Kvota domen chegarasidan oshib ketdi (maks. %d MiB)",
+ "mailbox_quota_exceeds_domain_quota": "Maks. kvota domen kvota chegarasidan oshib ketdi",
+ "mailbox_quota_left_exceeded": "Yetarli joy qolmadi (qolgan joy: %d MiB)",
+ "mailboxes_in_use": "Maks. pochta qutilari %d dan katta yoki teng boʻlishi kerak",
+ "malformed_username": "Noto'g'ri shakldagi foydalanuvchi nomi",
+ "map_content_empty": "Xarita mazmuni boʻsh boʻlolmaydi",
+ "max_age_invalid": "Maks. yosh %s noto'g'ri",
+ "max_alias_exceeded": "Maks. taxalluslar oshib ketdi",
+ "max_mailbox_exceeded": "Maks. pochta qutilari oshib ketdi (%d / %d)",
+ "max_quota_in_use": "Pochta qutisi kvotasi %d MiB dan katta yoki teng boʻlishi kerak",
+ "maxquota_empty": "Bitta pochta qutisi uchun maks. kvota 0 boʻlmasligi kerak.",
+ "mode_invalid": "Rejim %s noto'g'ri",
+ "mx_invalid": "MX yozuvi %s noto'g'ri",
+ "mysql_error": "MySQL xatosi: %s",
+ "network_host_invalid": "Noto'g'ri tarmoq yoki xost: %s",
+ "next_hop_interferes": "%s keyingi nuqta %s bilan tortishuvga kirishadi",
+ "next_hop_interferes_any": "Mavjud keyingi nuqta %s bilan tortishuvga kirishadi",
+ "nginx_reload_failed": "Nginx qayta yuklash muvaffaqiyatsiz: %s",
+ "no_user_defined": "Foydalanuvchi belgilanmagan",
+ "object_exists": "%s obyekti allaqachon mavjud",
+ "object_is_not_numeric": "%s qiymati raqamli emas",
+ "password_complexity": "Parol siyosatga mos kelmaydi",
+ "password_empty": "Parol boʻsh boʻlmasligi kerak",
+ "password_mismatch": "Tasdiqlash paroli mos kelmadi",
+ "password_reset_invalid_user": "Pochta qutisi topilmadi yoki tiklash uchun e-pochta oʻrnatilmagan",
+ "password_reset_na": "Parolni tiklash hozirda mavjud emas. Iltimos, administratoringiz bilan bogʻlaning.",
+ "policy_list_from_exists": "Berilgan nomli yozuv mavjud",
+ "policy_list_from_invalid": "Yozuv noto'g'ri formatga ega",
+ "private_key_error": "Maxfiy kalit xatosi: %s",
+ "pushover_credentials_missing": "Pushover tokeni va/yoki kaliti yetishmayapti",
+ "pushover_key": "Pushover kaliti notoʻgʻri formatga ega",
+ "pushover_token": "Pushover tokeni notoʻgʻri formatga ega",
+ "quarantine_category_invalid": "Karantin turkumi quyidagilardan biri boʻlishi kerak: add_header, reject, all",
+ "quota_not_0_not_numeric": "Kvota raqamli va >= 0 boʻlishi kerak",
+ "recipient_map_entry_exists": "Qabul qiluvchi xaritasi yozuvi \"%s\" mavjud",
+ "recovery_email_failed": "Tiklash e-pochtasini yuborib boʻlmadi. Iltimos, administratoringiz bilan bogʻlaning.",
+ "redis_error": "Redis xatosi: %s",
+ "relayhost_invalid": "Xarita yozuvi %s noto'g'ri",
+ "release_send_failed": "Xabarni chiqarib boʻlmadi: %s",
+ "required_data_missing": "Talab qilinadigan ma'lumotlar %s yetishmayapti",
+ "reset_f2b_regex": "Regex filtrini oʻz vaqtida tiklab boʻlmadi, iltimos qaytadan urinib koʻring yoki bir necha soniya kuting va sahifani qayta yuklang.",
+ "reset_token_limit_exceeded": "Tiklash tokeni chegarasi oshib ketdi. Iltimos, keyinroq urinib koʻring.",
+ "resource_invalid": "Resurs nomi %s noto'g'ri",
+ "rl_timeframe": "Tezlik chegarasi vaqt oraligʻi noto'g'ri",
+ "rspamd_ui_pw_length": "Rspamd UI paroli kamida 6 ta belgi uzunlikda boʻlishi kerak",
+ "script_empty": "Skript boʻsh boʻlolmaydi",
+ "sender_acl_invalid": "Joʻnatuvchi ACL qiymati %s noto'g'ri",
+ "set_acl_failed": "ACL ni oʻrnatib boʻlmadi",
+ "settings_map_invalid": "Sozlamalar xaritasi ID %s noto'g'ri",
+ "sieve_error": "Sieve tahlilchisi xatosi: %s",
+ "spam_learn_error": "Spam oʻrgatish xatosi: %s",
+ "subject_empty": "Mavzu boʻsh boʻlmasligi kerak",
+ "target_domain_invalid": "Maqsad domen %s noto'g'ri",
+ "targetd_not_found": "Maqsad domen %s topilmadi",
+ "targetd_relay_domain": "Maqsad domen %s relay domen",
+ "template_exists": "%s shabloni allaqachon mavjud",
+ "template_id_invalid": "Shablon ID %s noto'g'ri",
+ "template_name_invalid": "Shablon nomi noto'g'ri",
+ "temp_error": "Vaqtinchalik xato",
+ "text_empty": "Matn boʻsh boʻlmasligi kerak",
+ "tfa_token_invalid": "TFA tokeni noto'g'ri",
+ "tls_policy_map_dest_invalid": "Siyosat manzili noto'g'ri",
+ "tls_policy_map_entry_exists": "TLS siyosati xaritasi yozuvi \"%s\" mavjud",
+ "tls_policy_map_parameter_invalid": "Siyosat parametri noto'g'ri",
+ "to_invalid": "Qabul qiluvchi boʻsh boʻlmasligi kerak",
+ "totp_verification_failed": "TOTP tekshiruvi muvaffaqiyatsiz",
+ "transport_dest_exists": "Transport manzili \"%s\" mavjud",
+ "webauthn_verification_failed": "WebAuthn tekshiruvi muvaffaqiyatsiz: %s",
+ "webauthn_authenticator_failed": "Tanlangan autentifikator topilmadi",
+ "webauthn_publickey_failed": "Tanlangan autentifikator uchun ochiq kalit saqlanmagan",
+ "webauthn_username_failed": "Tanlangan autentifikator boshqa hisobga tegishli",
+ "unknown": "Noma'lum xato yuz berdi",
+ "unknown_tfa_method": "Noma'lum TFA usuli",
+ "unlimited_quota_acl": "Cheksiz kvota ACL tomonidan taqiqlangan",
+ "username_invalid": "Foydalanuvchi nomi %s ishlatib boʻlmaydi",
+ "validity_missing": "Iltimos, amal qilish muddatini tayinlang",
+ "value_missing": "Iltimos, barcha qiymatlarni kiriting",
+ "version_invalid": "Versiya %s noto'g'ri",
+ "yotp_verification_failed": "Yubico OTP tekshiruvi muvaffaqiyatsiz: %s"
+ },
+ "datatables": {
+ "collapse_all": "Hammasini yigʻish",
+ "decimal": ".",
+ "emptyTable": "Jadvalda ma'lumot mavjud emas",
+ "expand_all": "Hammasini kengaytirish",
+ "info": "_TOTAL_ tadan _START_ dan _END_ gacha koʻrsatilmoqda",
+ "infoEmpty": "0 tadan 0 dan 0 gacha koʻrsatilmoqda",
+ "infoFiltered": "(jami _MAX_ tadan filtrlangan)",
+ "infoPostFix": "",
+ "thousands": ",",
+ "lengthMenu": "_MENU_ ta yozuvni koʻrsatish",
+ "loadingRecords": "Yuklanmoqda...",
+ "processing": "Iltimos, kuting...",
+ "search": "Qidirish:",
+ "zeroRecords": "Mos keladigan yozuvlar topilmadi",
+ "paginate": {
+ "first": "Birinchi",
+ "last": "Oxirgi",
+ "next": "Keyingi",
+ "previous": "Oldingi"
+ },
+ "aria": {
+ "sortAscending": ": ustunni oʻsish boʻyicha saralash uchun faollashtiring",
+ "sortDescending": ": ustunni kamayish boʻyicha saralash uchun faollashtiring"
+ }
+ },
+ "debug": {
+ "architecture": "Arxitektura",
+ "chart_this_server": "Diagramma (bu server)",
+ "containers_info": "Konteyner ma'lumotlari",
+ "container_running": "Ishlamoqda",
+ "container_disabled": "Konteyner toʻxtatilgan yoki oʻchirilgan",
+ "container_stopped": "Toʻxtatilgan",
+ "cores": "Yadrolar",
+ "current_time": "Tizim vaqti",
+ "disk_usage": "Disk foydalanish",
+ "docs": "Hujjatlar",
+ "error_show_ip": "Ommaviy IP manzillarini aniqlab boʻlmadi",
+ "external_logs": "Tashqi jurnallar",
+ "history_all_servers": "Tarix (barcha serverlar)",
+ "in_memory_logs": "Xotiradagi jurnallar",
+ "last_modified": "Oxirgi oʻzgartirilgan",
+ "log_info": "
Xotiradagi jurnallar doimiy boʻlishi mumkin emas. Xotirada jurnal yurituvchi barcha ilovalar ham Docker daemoniga, demak standart jurnal yuritish drayveriga ham yozadi.\r\n
Xotiradagi jurnal turi konteynerlar bilan kichik muammolarni nosozliklarni bartaraf etish uchun ishlatilishi kerak.
IPv4/IPv6 manzillari va tarmoqlari.",
+ "allowed_protocols": "Toʻgʻridan-toʻgʻri foydalanuvchi kirishi uchun ruxsat etilgan protokollar (ilova paroli protokollariga taʼsir qilmaydi)",
+ "app_name": "Ilova nomi",
+ "app_passwd": "Ilova paroli",
+ "app_passwd_protocols": "Ilova paroli uchun ruxsat etilgan protokollar",
+ "automap": "Papkalarni avtomatik xaritalashga harakat qilish (\"Sent items\", \"Sent\" => \"Sent\" va h.k.)",
+ "backup_mx_options": "Relay sozlamalari",
+ "bcc_dest_format": "BCC manzili bitta haqiqiy e-pochta manzili boʻlishi kerak.
Agar bir nechta manzilga nusxa joʻnatish kerak boʻlsa, taxallus yarating va shu yerda ishlating.",
+ "client_id": "Mijoz ID",
+ "client_secret": "Mijoz maxfiy soʻzi",
+ "comment_info": "Maxfiy izoh foydalanuvchiga koʻrinmaydi, ommaviy izoh esa foydalanuvchi koʻrinishida ustiga sichqoncha kelganda maslahat sifatida koʻrsatiladi",
+ "created_on": "Yaratilgan sana",
+ "custom_attributes": "Maxsus atributlar",
+ "delete1": "Tugatilgach manbadan oʻchirish",
+ "delete2": "Manbada boʻlmagan xabarlarni manzildan oʻchirish",
+ "delete2duplicates": "Manzildagi dublikatlarni oʻchirish",
+ "delete_ays": "Iltimos, oʻchirish jarayonini tasdiqlang.",
+ "description": "Tavsif",
+ "disable_login": "Kirishni taqiqlash (kiruvchi pochta hali ham qabul qilinadi)",
+ "domain": "Domenni tahrirlash",
+ "domain_admin": "Domen administratorini tahrirlash",
+ "domain_footer": "Domen boʻyicha pastki qism",
+ "domain_footer_html": "HTML pastki qism",
+ "domain_footer_info": "Domen boʻyicha pastki qismlar ushbu domendagi manzilga bog'liq barcha chiquvchi xatlarga qoʻshiladi.
Pastki qism uchun quyidagi oʻzgaruvchilarni ishlatish mumkin:",
+ "domain_footer_info_vars": {
+ "auth_user": "{= auth_user =} - MTA tomonidan belgilangan autentifikatsiya qilingan foydalanuvchi nomi",
+ "from_user": "{= from_user =} - Konvertning Kimdan qismi, masalan \"moo@mailcow.tld\" uchun \"moo\" qaytaradi",
+ "from_name": "{= from_name =} - Konvertning Kimdan ismi, masalan \"Mailcow <moo@mailcow.tld>\" uchun \"Mailcow\" qaytaradi",
+ "from_addr": "{= from_addr =} - Konvertning Kimdan manzili qismi",
+ "from_domain": "{= from_domain =} - Konvertning Kimdan domeni qismi",
+ "custom": "{= foo =} - Agar pochta qutisida \"bar\" qiymatli \"foo\" maxsus atributi boʻlsa \"bar\" qaytaradi"
+ },
+ "domain_footer_plain": "PLAIN pastki qism",
+ "domain_footer_skip_replies": "Javob xatlarida pastki qismni e'tiborsiz qoldirish",
+ "domain_quota": "Domen kvotasi",
+ "domains": "Domenlar",
+ "dont_check_sender_acl": "%s domeni uchun joʻnatuvchi tekshiruvini oʻchirish (+ taxallus domenlari)",
+ "edit_alias_domain": "Taxallus domenini tahrirlash",
+ "encryption": "Shifrlash",
+ "exclude": "Obyektlarni istisno qilish (regex)",
+ "extended_sender_acl": "Tashqi joʻnatuvchi manzillari",
+ "extended_sender_acl_info": "DKIM domen kaliti mavjud boʻlsa, import qilinishi kerak.
\r\n Ushbu serverni mos SPF TXT yozuviga qoʻshishni unutmang.
\r\n Ushbu serverga tashqi manzil bilan ust-ust tushadigan domen yoki taxallus domeni qoʻshilganda, tashqi manzil olib tashlanadi.
\r\n *@domain.tld sifatida joʻnatishga ruxsat berish uchun @domain.tld dan foydalaning.",
+ "force_pw_update": "Keyingi kirishda parolni majburiy yangilash",
+ "force_pw_update_info": "Bu foydalanuvchi faqat %s ga kira oladi. Ilova parollari ishlash holatida qoladi.",
+ "footer_exclude": "Pastki qismdan istisno qilish",
+ "full_name": "Toʻliq ism",
+ "gal": "Global manzillar roʻyxati",
+ "gal_info": "GAL domenning barcha obyektlarini oʻz ichiga oladi va hech bir foydalanuvchi tomonidan tahrirlanmaydi. Oʻchirilsa, SOGodagi bandlik maʼlumotlari yoʻqoladi! Oʻzgarishlarni qoʻllash uchun SOGoni qayta ishga tushiring.",
+ "generate": "yaratish",
+ "grant_types": "Grant turlari",
+ "hostname": "Xost nomi",
+ "inactive": "Nofaol",
+ "internal": "Ichki",
+ "internal_info": "Ichki taxalluslarga faqat oʻz domeni yoki taxallus domenlaridan kirish mumkin.",
+ "sender_allowed": "Ushbu taxallus orqali joʻnatishga ruxsat berish",
+ "sender_allowed_info": "Oʻchirilgan boʻlsa, bu taxallus faqat xat qabul qilishi mumkin. Maxsus pochta qutilariga joʻnatishga ruxsat berish uchun joʻnatuvchi ACL dan foydalaning.",
+ "kind": "Turi",
+ "last_modified": "Oxirgi oʻzgartirilgan",
+ "lookup_mx": "Manzil — MX nomiga mos keladigan muntazam ifoda (.*\\.google\\.com — google.com bilan tugaydigan MX ga yoʻnaltirilgan barcha pochtani ushbu nuqta orqali yoʻnaltirish uchun)",
+ "mailbox": "Pochta qutisini tahrirlash",
+ "mailbox_quota_def": "Standart pochta qutisi kvotasi",
+ "mailbox_relayhost_info": "Faqat pochta qutisi va to'g'ridan-to'g'ri taxalluslarga qoʻllaniladi, domen relay xostini bekor qiladi.",
+ "mailbox_rename": "Pochta qutisini qayta nomlash",
+ "mailbox_rename_agree": "Men zaxira nusxasini yaratdim.",
+ "mailbox_rename_warning": "MUHIM! Pochta qutisini qayta nomlashdan oldin zaxira nusxasi yarating.",
+ "mailbox_rename_alias": "Taxallusni avtomatik yaratish",
+ "mailbox_rename_title": "Yangi mahalliy pochta qutisi nomi",
+ "max_aliases": "Maks. taxalluslar",
+ "max_mailboxes": "Mumkin boʻlgan maks. pochta qutilari",
+ "max_quota": "Bitta pochta qutisining maks. kvotasi (MiB)",
+ "maxage": "Masofadan soʻraladigan xabarlarning maksimal yoshi (kunlarda)
(0 = yoshni e'tiborsiz qoldirish)",
+ "maxbytespersecond": "Maks. soniyaga bayt
(0 = cheksiz)",
+ "mbox_rl_info": "Bu tezlik chegarasi SASL kirish nomiga qoʻllaniladi, u kirgan foydalanuvchi tomonidan ishlatiladigan har qanday \"from\" manziliga mos keladi. Pochta qutisi tezlik chegarasi domen boʻyicha tezlik chegarasini bekor qiladi.",
+ "mins_interval": "Oraliq (daqiqa)",
+ "mta_sts": "MTA-STS",
+ "mta_sts_info": "MTA-STS — pochta serverlari oʻrtasida xat yetkazib berishni haqiqiy sertifikatli TLS dan foydalanishga majburlovchi standart.
U DNSSEC mavjud emasligi yoki qoʻllab-quvvatlanmasligi sababli DANE imkoni boʻlmaganda ishlatiladi.
Eslatma: Agar qabul qiluvchi domen DNSSEC bilan DANE ni qoʻllab-quvvatlasa, DANE har doim afzal koʻriladi — MTA-STS faqat zaxira sifatida ishlaydi.",
+ "mta_sts_version": "Versiya",
+ "mta_sts_version_info": "MTA-STS standartining versiyasini belgilaydi — hozirda faqat STSv1 haqiqiy.",
+ "mta_sts_mode": "Rejim",
+ "mta_sts_mode_info": "Tanlash uchun uchta rejim mavjud:
",
+ "mta_sts_max_age": "Maks. yosh",
+ "mta_sts_max_age_info": "Qabul qiluvchi pochta serverlari ushbu siyosatni qayta olishdan oldin keshlashi mumkin boʻlgan vaqt (soniyalarda).",
+ "mta_sts_mx": "MX server",
+ "mta_sts_mx_info": "Faqat aniq sanab oʻtilgan pochta server xost nomlariga joʻnatishga ruxsat beradi; joʻnatuvchi MTA DNS MX xost nomi siyosat roʻyxatiga mos kelishini tekshiradi va faqat haqiqiy TLS sertifikati bilan yetkazib berishga ruxsat beradi (MITM ga qarshi himoya qiladi).",
+ "mta_sts_mx_notice": "Bir nechta MX serverlar belgilanishi mumkin (vergul bilan ajratilgan).",
+ "multiple_bookings": "Bir nechta bandlovlar",
+ "none_inherit": "Hech biri / Meros qilib olish",
+ "nexthop": "Keyingi nuqta",
+ "password": "Parol",
+ "password_recovery_email": "Parolni tiklash e-pochtasi",
+ "password_repeat": "Tasdiqlash paroli (takrorlang)",
+ "previous": "Oldingi sahifa",
+ "private_comment": "Maxfiy izoh",
+ "public_comment": "Ommaviy izoh",
+ "pushover": "Pushover",
+ "pushover_evaluate_x_prio": "Yuqori muhimlikdagi xatni eskalatsiya qilish [X-Priority: 1]",
+ "pushover_info": "Push bildirishnoma sozlamalari %s ga taxalluslar bilan birga (umumiy, umumiy boʻlmagan, teglangan) yetkazib beriladigan barcha toza (spam boʻlmagan) xatlarga qoʻllaniladi.",
+ "pushover_only_x_prio": "Faqat yuqori muhimlikdagi xatlarni koʻrib chiqish [X-Priority: 1]",
+ "pushover_sender_array": "Faqat quyidagi joʻnatuvchi e-pochta manzillarini koʻrib chiqish (vergul bilan ajratilgan)",
+ "pushover_sender_regex": "Quyidagi joʻnatuvchi regexini koʻrib chiqish",
+ "pushover_text": "Bildirishnoma matni",
+ "pushover_title": "Bildirishnoma sarlavhasi",
+ "pushover_sound": "Tovush",
+ "pushover_vars": "Joʻnatuvchi filtri belgilanmagan boʻlsa, barcha xatlar koʻrib chiqiladi.
Regex filtrlari va aniq joʻnatuvchi tekshiruvlari alohida belgilanishi mumkin va ketma-ket koʻrib chiqiladi. Ular bir-biriga bogʻliq emas.
Matn va sarlavha uchun ishlatiladigan oʻzgaruvchilar (ma'lumotlarni himoya qilish siyosatiga e'tibor bering)",
+ "pushover_verify": "Maʼlumotlarni tekshirish",
+ "quota_mb": "Kvota (MiB)",
+ "quota_warning_bcc": "Kvota ogohlantirishi BCC",
+ "quota_warning_bcc_info": "Ogohlantirishlar alohida nusxa sifatida quyidagi qabul qiluvchilarga yuboriladi. Mavzu mos foydalanuvchi nomi bilan qavs ichida qoʻshib qoʻyiladi, masalan: Kvota ogohlantirishi (user@example.com).",
+ "ratelimit": "Tezlik chegarasi",
+ "redirect_uri": "Yoʻnaltirish/Qaytarish URL",
+ "relay_all": "Barcha qabul qiluvchilarni relay qilish",
+ "relay_all_info": "↪ Agar barcha qabul qiluvchilarni relay qilmaslikni tanlasangiz, relay qilinishi kerak boʻlgan har bir qabul qiluvchi uchun (\"koʻr\") pochta qutisi qoʻshishingiz kerak boʻladi.",
+ "relay_domain": "Ushbu domenni relay qilish",
+ "relay_transport_info": "
\r\n B pochta qutisi foydalanuvchisi A pochta qutisi foydalanuvchisi oʻz manzilini joʻnatuvchi sifatida tanlay olishi uchun SOGo da delegatsiya yaratishi kerak. SOGo da pochta qutisini delegatsiya qilish uchun pochta koʻrinishida yuqori chap qismdagi pochta qutisi nomingiz oʻng tomonidagi menyudan (uch nuqta) foydalaning. Bu xatti-harakat taxallus manzillariga qoʻllanmaydi.",
+ "sieve_desc": "Qisqa tavsif",
+ "sieve_type": "Filtr turi",
+ "skipcrossduplicates": "Papkalararo dublikat xabarlarni oʻtkazib yuborish (birinchi kelgan, birinchi xizmatlanadi)",
+ "sogo_access": "SOGo ga toʻgʻridan-toʻgʻri yoʻnaltirish",
+ "sogo_access_info": "Tizimga kirgandan keyin foydalanuvchi avtomatik ravishda SOGo ga yoʻnaltiriladi.",
+ "sogo_visible": "Taxallus SOGo da koʻrinadi",
+ "sogo_visible_info": "Bu variant faqat SOGo da koʻrsatilishi mumkin boʻlgan obyektlarga taʼsir qiladi (kamida bitta mahalliy pochta qutisiga ishora qiluvchi umumiy yoki umumiy boʻlmagan taxallus manzillari). Yashirilgan boʻlsa, taxallus SOGo da tanlanadigan joʻnatuvchi sifatida koʻrinmaydi.",
+ "spam_alias": "Vaqt cheklangan taxallus manzillarini yaratish yoki oʻzgartirish",
+ "spam_filter": "Spam filtri",
+ "spam_policy": "Elementlarni ruxsat etilgan/qora roʻyxatga qoʻshish yoki olib tashlash",
+ "spam_score": "Maxsus spam bahosini oʻrnatish",
+ "subfolder2": "Manzilning subpapkasiga sinxronizatsiya qilish
(boʻsh = subpapkadan foydalanmang)",
+ "syncjob": "Sinxronizatsiya vazifasini tahrirlash",
+ "target_address": "Yoʻnaltirish manzil(lar)i (vergul bilan ajratilgan)",
+ "target_domain": "Maqsad domen",
+ "timeout1": "Masofaviy xostga ulanish vaqtining tugashi",
+ "timeout2": "Mahalliy xostga ulanish vaqtining tugashi",
+ "title": "Obyektni tahrirlash",
+ "unchanged_if_empty": "Oʻzgartirilmagan boʻlsa, boʻsh qoldiring",
+ "username": "Foydalanuvchi nomi",
+ "validate_save": "Tekshirish va saqlash"
+ },
+ "fido2": {
+ "confirm": "Tasdiqlash",
+ "fido2_auth": "FIDO2 bilan kirish",
+ "fido2_success": "Qurilma muvaffaqiyatli roʻyxatdan oʻtkazildi",
+ "fido2_validation_failed": "Tekshirish muvaffaqiyatsiz",
+ "fn": "Doʻstona nom",
+ "known_ids": "Maʼlum ID lar",
+ "none": "Oʻchirilgan",
+ "register_status": "Roʻyxatga olish holati",
+ "rename": "Qayta nomlash",
+ "set_fido2": "FIDO2 qurilmasini roʻyxatdan oʻtkazish",
+ "set_fido2_touchid": "Apple M1 da Touch ID ni roʻyxatdan oʻtkazish",
+ "set_fn": "Doʻstona nomni oʻrnatish",
+ "start_fido2_validation": "FIDO2 tekshiruvini boshlash"
+ },
+ "footer": {
+ "cancel": "Bekor qilish",
+ "confirm_delete": "Oʻchirishni tasdiqlash",
+ "delete_now": "Hozir oʻchirish",
+ "delete_these_items": "Iltimos, quyidagi obyekt ID siga oʻzgarishlaringizni tasdiqlang",
+ "hibp_check": "haveibeenpwned.com ga qarshi tekshirish",
+ "hibp_nok": "Mos keldi! Bu xavfli parol boʻlishi mumkin!",
+ "hibp_ok": "Mos kelmadi.",
+ "loading": "Iltimos, kuting...",
+ "nothing_selected": "Hech narsa tanlanmadi",
+ "restart_container": "Konteynerni qayta ishga tushirish",
+ "restart_container_info": "Muhim: Yumshoq qayta ishga tushirish biroz vaqt olishi mumkin, iltimos uning tugashini kuting.",
+ "restart_now": "Hozir qayta ishga tushirish",
+ "restarting_container": "Konteyner qayta ishga tushirilmoqda, bu biroz vaqt olishi mumkin"
+ },
+ "header": {
+ "administration": "Konfiguratsiya va tafsilotlar",
+ "apps": "Ilovalar",
+ "debug": "Maʼlumot",
+ "email": "E-pochta",
+ "mailcow_system": "Tizim",
+ "mailcow_config": "Konfiguratsiya",
+ "quarantine": "Karantin",
+ "restart_netfilter": "Netfilterni qayta ishga tushirish",
+ "restart_sogo": "SOGoni qayta ishga tushirish",
+ "user_settings": "Foydalanuvchi sozlamalari"
+ },
+ "info": {
+ "awaiting_tfa_confirmation": "TFA tasdiqlanishi kutilmoqda",
+ "no_action": "Amal qoʻllanib boʻlmaydi",
+ "session_expires": "Sessiyangiz taxminan 15 soniyadan keyin tugaydi"
+ },
+ "login": {
+ "back_to_mailcow": "mailcow ga qaytish",
+ "delayed": "Kirish %s soniyaga kechiktirildi.",
+ "fido2_webauthn": "FIDO2/WebAuthn kirish",
+ "forgot_password": "> Parolni unutdingizmi?",
+ "invalid_pass_reset_token": "Parolni tiklash tokeni noto'g'ri yoki muddati tugagan.
Iltimos, yangi parolni tiklash havolasini soʻrang.",
+ "login": "Kirish",
+ "login_linkstext": "Toʻgʻri kirish emasmi?",
+ "login_usertext": "Foydalanuvchi sifatida kirish",
+ "login_domainadmintext": "Domen administratori sifatida kirish",
+ "login_admintext": "Administrator sifatida kirish",
+ "login_user": "Foydalanuvchi kirishi",
+ "login_dadmin": "Domen-administratori kirishi",
+ "login_admin": "Administrator kirishi",
+ "mobileconfig_info": "Soʻralgan Apple ulanish profilini yuklab olish uchun pochta qutisi foydalanuvchisi sifatida kiring.",
+ "new_password": "Yangi parol",
+ "new_password_confirm": "Yangi parolni tasdiqlang",
+ "other_logins": "yoki quyidagi orqali kiring",
+ "password": "Parol",
+ "reset_password": "Parolni tiklash",
+ "request_reset_password": "Parol oʻzgartirishni soʻrash",
+ "username": "Foydalanuvchi nomi",
+ "email": "E-pochta manzili"
+ },
+ "mailbox": {
+ "action": "Amal",
+ "activate": "Faollashtirish",
+ "active": "Faol",
+ "add": "Qoʻshish",
+ "add_alias": "Taxallus qoʻshish",
+ "add_alias_expand": "Taxallusni taxallus domenlari boʻylab kengaytirish",
+ "add_bcc_entry": "BCC xaritasi qoʻshish",
+ "add_domain": "Domen qoʻshish",
+ "add_domain_alias": "Domen taxallusini qoʻshish",
+ "add_domain_record_first": "Iltimos, avval domen qoʻshing",
+ "add_filter": "Filtr qoʻshish",
+ "add_mailbox": "Pochta qutisi qoʻshish",
+ "add_recipient_map_entry": "Qabul qiluvchi xaritasini qoʻshish",
+ "add_resource": "Resurs qoʻshish",
+ "add_template": "Shablon qoʻshish",
+ "add_tls_policy_map": "TLS siyosati xaritasini qoʻshish",
+ "address_rewriting": "Manzilni qayta yozish",
+ "alias": "Taxallus",
+ "alias_domain_alias_hint": "Taxalluslar domen taxalluslariga avtomatik qoʻllanilmaydi. my-alias@domain taxallus manzili my-alias@alias-domain manzilini qoplamaydi (bu yerda \"alias-domain\" — \"domain\" uchun tasavvur qilingan taxallus domeni).
Tashqi pochta qutisiga xatni yoʻnaltirish uchun sieve filtridan foydalaning (\"Filtrlar\" yorligʻiga qarang yoki SOGo -> Forwarder dan foydalaning). Yoʻq taxalluslarni avtomatik qoʻshish uchun \"Taxallusni taxallus domenlari boʻylab kengaytirish\" dan foydalaning.",
+ "alias_domain_backupmx": "Relay domeni uchun taxallus domeni nofaol",
+ "aliases": "Taxalluslar",
+ "all_domains": "Barcha domenlar",
+ "allow_from_smtp": "Faqat ushbu IP larga SMTP dan foydalanishga ruxsat berish",
+ "allow_from_smtp_info": "Barcha joʻnatuvchilarga ruxsat berish uchun boʻsh qoldiring.
IPv4/IPv6 manzillari va tarmoqlari.",
+ "allowed_protocols": "Ruxsat etilgan protokollar",
+ "backup_mx": "Relay domeni",
+ "bcc": "BCC",
+ "bcc_destination": "BCC manzili",
+ "bcc_destinations": "BCC manzili",
+ "bcc_info": "BCC xaritalari barcha xabarlarning nusxalarini boshqa manzilga jimgina yoʻnaltirish uchun ishlatiladi. Qabul qiluvchi xaritasi turi yozuvi mahalliy manzil xatning qabul qiluvchisi sifatida ishlaganda ishlatiladi. Joʻnatuvchi xaritalari ham xuddi shu tamoyilga muvofiq ishlaydi.
\r\n Mahalliy manzilga yetkazib berish muvaffaqiyatsiz boʻlsa, xabar berilmaydi.",
+ "bcc_local_dest": "Mahalliy manzil",
+ "bcc_map": "BCC xaritasi",
+ "bcc_map_type": "BCC turi",
+ "bcc_maps": "BCC xaritalari",
+ "bcc_rcpt_map": "Qabul qiluvchi xaritasi",
+ "bcc_sender_map": "Joʻnatuvchi xaritasi",
+ "bcc_to_rcpt": "Qabul qiluvchi xaritasi turiga oʻtish",
+ "bcc_to_sender": "Joʻnatuvchi xaritasi turiga oʻtish",
+ "bcc_type": "BCC turi",
+ "booking_null": "Doimo boʻsh sifatida koʻrsatish",
+ "booking_0_short": "Doimo boʻsh",
+ "booking_custom": "Maxsus bandlovlar soni bilan qatʼiy cheklash",
+ "booking_custom_short": "Qatʼiy chegara",
+ "booking_ltnull": "Cheksiz, lekin bandlangan boʻlsa band sifatida koʻrsatish",
+ "booking_lt0_short": "Yumshoq chegara",
+ "catch_all": "Hammasini-qabul qilish",
+ "created_on": "Yaratilgan sana",
+ "daily": "Kunlik",
+ "deactivate": "Oʻchirish",
+ "description": "Tavsif",
+ "disable_login": "Kirishni taqiqlash (kiruvchi pochta hali ham qabul qilinadi)",
+ "disable_x": "Oʻchirish",
+ "dkim_domains_selector": "Tanlovchi",
+ "dkim_key_length": "DKIM kalit uzunligi (bit)",
+ "domain": "Domen",
+ "domain_admins": "Domen administratorlari",
+ "domain_aliases": "Domen taxalluslari",
+ "domain_templates": "Domen shablonlari",
+ "domain_quota": "Kvota",
+ "domain_quota_total": "Umumiy domen kvotasi",
+ "domains": "Domenlar",
+ "edit": "Tahrirlash",
+ "empty": "Natijalar yoʻq",
+ "enable_x": "Yoqish",
+ "excludes": "Istisnolar",
+ "filter_table": "Filtr jadvali",
+ "filters": "Filtrlar",
+ "fname": "Toʻliq ism",
+ "force_pw_update": "Keyingi kirishda parolni majburiy yangilash",
+ "gal": "Global manzillar roʻyxati",
+ "goto_ham": "ham sifatida oʻrgatish",
+ "goto_spam": "spam sifatida oʻrgatish",
+ "hourly": "Soatlik",
+ "iam": "Identifikatsiya provayderi",
+ "in_use": "Foydalanilmoqda (%)",
+ "inactive": "Nofaol",
+ "insert_preset": "Misol presetini kiritish \"%s\"",
+ "internal": "Ichki",
+ "kind": "Turi",
+ "last_mail_login": "Oxirgi pochta kirishi",
+ "last_modified": "Oxirgi oʻzgartirilgan",
+ "last_pw_change": "Oxirgi parol oʻzgarishi",
+ "last_run": "Oxirgi ishga tushirilgan",
+ "last_run_reset": "Keyingisini rejalashtirish",
+ "mailbox": "Pochta qutisi",
+ "mailbox_defaults": "Standart sozlamalar",
+ "mailbox_defaults_info": "Yangi pochta qutilari uchun standart sozlamalarni belgilang.",
+ "mailbox_defquota": "Standart pochta qutisi oʻlchami",
+ "mailbox_templates": "Pochta qutisi shablonlari",
+ "mailbox_quota": "Pochta qutisining maks. oʻlchami",
+ "mailboxes": "Pochta qutilari",
+ "max_aliases": "Maks. taxalluslar",
+ "max_mailboxes": "Mumkin boʻlgan maks. pochta qutilari",
+ "max_quota": "Bitta pochta qutisining maks. kvotasi",
+ "mins_interval": "Oraliq (daqiqa)",
+ "msg_num": "Xabar #",
+ "multiple_bookings": "Bir nechta bandlovlar",
+ "never": "Hech qachon",
+ "no": "✕",
+ "no_record": "%s obyekti uchun yozuv yoʻq",
+ "no_record_single": "Yozuv yoʻq",
+ "open_logs": "Jurnallarni ochish",
+ "owner": "Egasi",
+ "private_comment": "Maxfiy izoh",
+ "public_comment": "Ommaviy izoh",
+ "q_add_header": "Junk papkasiga koʻchirilganda",
+ "q_all": " Junk papkasiga koʻchirilganda va rad etilganda",
+ "q_reject": "rad etilganda",
+ "quarantine_category": "Karantin bildirishnoma turkumi",
+ "quarantine_notification": "Karantin bildirishnomalari",
+ "quick_actions": "Amallar",
+ "recipient": "Qabul qiluvchi",
+ "recipient_map": "Qabul qiluvchi xaritasi",
+ "recipient_map_info": "Qabul qiluvchi xaritalari xabar yetkazib berilishidan oldin manzilni almashtirish uchun ishlatiladi.",
+ "recipient_map_new": "Yangi qabul qiluvchi",
+ "recipient_map_new_info": "Qabul qiluvchi xaritasi manzili haqiqiy e-pochta manzili yoki domen nomi boʻlishi kerak.",
+ "recipient_map_old": "Asl qabul qiluvchi",
+ "recipient_map_old_info": "Qabul qiluvchi xaritasining asl manzili haqiqiy e-pochta manzili yoki domen nomi boʻlishi kerak.",
+ "recipient_maps": "Qabul qiluvchi xaritalari",
+ "relay_all": "Barcha qabul qiluvchilarni relay qilish",
+ "relay_unknown": "Nomaʼlum pochta qutilarini relay qilish",
+ "remove": "Olib tashlash",
+ "resources": "Resurslar",
+ "running": "Ishlamoqda",
+ "sender": "Joʻnatuvchi",
+ "set_postfilter": "Postfiltr sifatida belgilash",
+ "set_prefilter": "Prefiltr sifatida belgilash",
+ "sieve_info": "Bitta foydalanuvchi uchun bir nechta filtrlarni saqlash mumkin, lekin bir vaqtning oʻzida faqat bitta prefiltr va bitta postfiltr faol boʻlishi mumkin.
\r\nHar bir filtr tasvirlangan tartibda qayta ishlanadi. Muvaffaqiyatsiz skript ham, chiqarilgan \"keep;\" ham keyingi skriptlarning qayta ishlanishini toʻxtatmaydi. Global sieve skriptlariga oʻzgartirishlar Dovecot ni qayta ishga tushirishni keltirib chiqaradi.
Global sieve prefilter • Prefilter • Foydalanuvchi skriptlari • Postfilter • Global sieve postfilter",
+ "sieve_preset_1": "Xavfli boʻlishi mumkin boʻlgan fayl turlari bilan xatlarni rad etish",
+ "sieve_preset_2": "Aniq joʻnatuvchining xatini har doim oʻqilgan deb belgilash",
+ "sieve_preset_3": "Jimgina rad etish, keyingi sieve qayta ishlashini toʻxtatish",
+ "sieve_preset_4": "INBOX ga joylash, sieve filtrlari tomonidan keyingi qayta ishlashni oʻtkazib yuborish",
+ "sieve_preset_5": "Avto-javob (taʼtil)",
+ "sieve_preset_6": "Javob bilan xatni rad etish",
+ "sieve_preset_7": "Yoʻnaltirish va saqlash/tashlash",
+ "sieve_preset_8": "Aniq joʻnatuvchining xatini yoʻnaltirish, oʻqilgan deb belgilash va subpapkaga saralash",
+ "sieve_preset_header": "Iltimos, quyidagi misol presetlariga qarang. Batafsil maʼlumot uchun Wikipediaga qarang.",
+ "sogo_visible": "Taxallus SOGo da koʻrinadi",
+ "sogo_visible_n": "Taxallusni SOGo da yashirish",
+ "sogo_visible_y": "Taxallusni SOGo da koʻrsatish",
+ "spam_aliases": "Vaqt. taxallus",
+ "stats": "Statistika",
+ "status": "Holat",
+ "sync_jobs": "Sinxronizatsiya vazifalari",
+ "syncjob_check_log": "Jurnalni tekshirish",
+ "syncjob_last_run_result": "Oxirgi ishga tushirilgan natija",
+ "syncjob_EX_OK": "Muvaffaqiyatli",
+ "syncjob_EXIT_CONNECTION_FAILURE": "Ulanish muammosi",
+ "syncjob_EXIT_TLS_FAILURE": "Shifrlangan ulanish bilan muammo",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE": "Autentifikatsiya muammosi",
+ "syncjob_EXIT_OVERQUOTA": "Maqsad pochta qutisi kvotadan oshib ketdi",
+ "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Masofaviy serverga ulanib boʻlmadi",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Notoʻgʻri foydalanuvchi nomi yoki parol",
+ "table_size": "Jadval oʻlchami",
+ "table_size_show_n": "%s ta element koʻrsatish",
+ "target_address": "Yoʻnaltirish manzili",
+ "target_domain": "Maqsad domen",
+ "templates": "Shablonlar",
+ "template": "Shablon",
+ "tls_enforce_in": "Kiruvchi TLS ni majburlash",
+ "tls_enforce_out": "Chiquvchi TLS ni majburlash",
+ "tls_map_dest": "Manzil",
+ "tls_map_dest_info": "Misollar: example.org, .example.org, [mail.example.org]:25",
+ "tls_map_parameters": "Parametrlar",
+ "tls_map_parameters_info": "Boʻsh yoki parametrlar, masalan: protocols=!SSLv2 ciphers=medium exclude=3DES",
+ "tls_map_policy": "Siyosat",
+ "tls_policy_maps": "TLS siyosati xaritalari",
+ "tls_policy_maps_enforced_tls": "Bu siyosatlar chiquvchi TLS ulanishlarini majburlovchi pochta qutisi foydalanuvchilari uchun ham xatti-harakatni bekor qiladi. Agar quyida siyosat boʻlmasa, bu foydalanuvchilar smtp_tls_mandatory_protocols va smtp_tls_mandatory_ciphers sifatida belgilangan standart qiymatlarni qoʻllaydi.",
+ "tls_policy_maps_info": "Bu siyosat xaritasi foydalanuvchining TLS siyosati sozlamalaridan mustaqil ravishda chiquvchi TLS transport qoidalarini bekor qiladi.
\r\n Batafsil maʼlumot uchun \"smtp_tls_policy_maps\" hujjatlarini tekshiring.",
+ "tls_policy_maps_long": "Chiquvchi TLS siyosati xaritasi bekor qilishlari",
+ "toggle_all": "Hammasini almashtirish",
+ "username": "Foydalanuvchi nomi",
+ "waiting": "Kutilmoqda",
+ "weekly": "Haftalik",
+ "yes": "✓"
+ },
+ "oauth2": {
+ "access_denied": "OAuth2 orqali kirishga ruxsat berish uchun pochta qutisi egasi sifatida kiring.",
+ "authorize_app": "Ilovaga ruxsat berish",
+ "deny": "Rad etish",
+ "permit": "Ilovaga ruxsat berish",
+ "profile": "Profil",
+ "profile_desc": "Shaxsiy maʼlumotlarni koʻrish: foydalanuvchi nomi, toʻliq ism, yaratilgan, oʻzgartirilgan, faol",
+ "scope_ask_permission": "Ilova quyidagi ruxsatlarni soʻradi"
+ },
+ "quarantine": {
+ "action": "Amal",
+ "atts": "Ilovalar",
+ "check_hash": "VT da fayl hashini qidirish",
+ "confirm": "Tasdiqlash",
+ "confirm_delete": "Ushbu elementni oʻchirishni tasdiqlang.",
+ "danger": "Xavf",
+ "deliver_inbox": "Inbox ga yetkazib berish",
+ "disabled_by_config": "Joriy tizim konfiguratsiyasi karantin funksiyasini oʻchirib qoʻyadi. Iltimos, karantin elementlari uchun \"pochta qutisi boʻyicha saqlash\" va \"maksimal oʻlcham\"ni oʻrnating.",
+ "download_eml": "Yuklab olish (.eml)",
+ "empty": "Natijalar yoʻq",
+ "high_danger": "Yuqori",
+ "info": "Maʼlumot",
+ "junk_folder": "Junk papkasi",
+ "learn_spam_delete": "Spam sifatida oʻrgatish va oʻchirish",
+ "low_danger": "Past",
+ "medium_danger": "Oʻrtacha",
+ "neutral_danger": "Neytral",
+ "notified": "Xabar berildi",
+ "qhandler_success": "Soʻrov tizimga muvaffaqiyatli yuborildi. Endi oynani yopishingiz mumkin.",
+ "qid": "Rspamd QID",
+ "qinfo": "Karantin tizimi rad etilgan xatni (joʻnatuvchiga xat yetkazib berilgandek taassurot bermay) hamda pochta qutisining Junk papkasiga nusxa sifatida yetkazib berilgan xatni maʼlumotlar bazasiga saqlaydi.\r\n
\"Spam sifatida oʻrgatish va oʻchirish\" xabarni Bayesian teoremasi orqali spam sifatida oʻrgatadi va kelajakda oʻxshash xabarlarni rad etish uchun fuzzy hashlarni hisoblaydi.\r\n
Bir nechta xabarlarni oʻrgatish — tizimingizga qarab — vaqt talab qilishi mumkinligini unutmang.
Qora roʻyxatdagi elementlar karantindan istisno qilinadi.",
+ "qitem": "Karantin elementi",
+ "quarantine": "Karantin",
+ "quick_actions": "Amallar",
+ "quick_delete_link": "Tezkor oʻchirish havolasini ochish",
+ "quick_info_link": "Maʼlumot havolasini ochish",
+ "quick_release_link": "Tezkor chiqarish havolasini ochish",
+ "rcpt": "Qabul qiluvchi",
+ "received": "Qabul qilingan",
+ "recipients": "Qabul qiluvchilar",
+ "refresh": "Yangilash",
+ "rejected": "Rad etilgan",
+ "release": "Chiqarish",
+ "release_body": "Xabaringizni ushbu xabarga eml fayl sifatida ilova qildik.",
+ "release_subject": "Potensial xavfli karantin elementi %s",
+ "remove": "Olib tashlash",
+ "rewrite_subject": "Mavzuni qayta yozish",
+ "rspamd_result": "Rspamd natijasi",
+ "sender": "Joʻnatuvchi (SMTP)",
+ "sender_header": "Joʻnatuvchi (\"From\" sarlavhasi)",
+ "settings_info": "Karantinga olinadigan maksimal elementlar soni: %s
Maksimal e-pochta oʻlchami: %s MiB",
+ "show_item": "Elementni koʻrsatish",
+ "spam": "Spam",
+ "spam_score": "Baho",
+ "subj": "Mavzu",
+ "table_size": "Jadval oʻlchami",
+ "table_size_show_n": "%s ta element koʻrsatish",
+ "text_from_html_content": "Mazmun (oʻzgartirilgan html)",
+ "text_plain_content": "Mazmun (text/plain)",
+ "toggle_all": "Hammasini almashtirish",
+ "type": "Tur"
+ },
+ "queue": {
+ "delete": "Hammasini oʻchirish",
+ "flush": "Navbatni tozalash",
+ "info": "Pochta navbati yetkazib berilishini kutayotgan barcha xatlarni oʻz ichiga oladi. Agar e-pochta uzoq vaqt davomida pochta navbatida tursa, u tizim tomonidan avtomatik ravishda oʻchiriladi.
Tegishli xatning xato xabari xat nima uchun yetkazib berilmaganligi haqida maʼlumot beradi.",
+ "legend": "Pochta navbati amallari funksiyalari:",
+ "ays": "Iltimos, joriy navbatdagi barcha elementlarni oʻchirishni tasdiqlang.",
+ "deliver_mail": "Yetkazib berish",
+ "deliver_mail_legend": "Tanlangan xatlarni qayta yetkazib berishga harakat qiladi.",
+ "hold_mail": "Ushlab turish",
+ "hold_mail_legend": "Tanlangan xatlarni ushlab turadi. (Keyingi yetkazib berish urinishlarining oldini oladi)",
+ "queue_manager": "Navbat menejeri",
+ "show_message": "Xabarni koʻrsatish",
+ "unban": "navbatdan blokdan chiqarish",
+ "unhold_mail": "Ushlab turishni bekor qilish",
+ "unhold_mail_legend": "Tanlangan xatlarni yetkazib berish uchun chiqaradi. (Avval ushlab turish talab qilinadi)"
+ },
+ "ratelimit": {
+ "disabled": "Oʻchirilgan",
+ "second": "xabarlar / soniya",
+ "minute": "xabarlar / daqiqa",
+ "hour": "xabarlar / soat",
+ "day": "xabarlar / kun"
+ },
+ "start": {
+ "help": "Yordam panelini koʻrsatish/yashirish",
+ "imap_smtp_server_auth_info": "Iltimos, toʻliq e-pochta manzilingiz va PLAIN autentifikatsiya mexanizmidan foydalaning.
\r\nKirish maʼlumotlaringiz server tomonidagi majburiy shifrlash orqali shifrlanadi."
+ },
+ "success": {
+ "acl_saved": "%s obyekti uchun ACL saqlandi",
+ "admin_added": "Administrator %s qoʻshildi",
+ "admin_api_modified": "API ga oʻzgarishlar saqlandi",
+ "admin_modified": "Administrator oʻzgarishlari saqlandi",
+ "admin_removed": "Administrator %s olib tashlandi",
+ "alias_added": "Taxallus manzili %s (%d) qoʻshildi",
+ "alias_domain_removed": "Taxallus domeni %s olib tashlandi",
+ "alias_modified": "Taxallus manzili %s ga oʻzgarishlar saqlandi",
+ "alias_removed": "Taxallus %s olib tashlandi",
+ "aliasd_added": "Taxallus domeni %s qoʻshildi",
+ "aliasd_modified": "Taxallus domeni %s ga oʻzgarishlar saqlandi",
+ "app_links": "Ilova havolalariga oʻzgarishlar saqlandi",
+ "app_passwd_added": "Yangi ilova paroli qoʻshildi",
+ "app_passwd_removed": "Ilova paroli ID %s olib tashlandi",
+ "bcc_deleted": "BCC xaritasi yozuvlari oʻchirildi: %s",
+ "bcc_edited": "BCC xaritasi yozuvi %s tahrirlandi",
+ "bcc_saved": "BCC xaritasi yozuvi saqlandi",
+ "cors_headers_edited": "CORS sozlamalari saqlandi",
+ "custom_login_modified": "Kirishni sozlash muvaffaqiyatli saqlandi",
+ "db_init_complete": "Maʼlumotlar bazasini ishga tushirish tugadi",
+ "delete_filter": "Filtr ID %s oʻchirildi",
+ "delete_filters": "Filtrlar oʻchirildi: %s",
+ "deleted_syncjob": "Sinxronizatsiya vazifasi ID %s oʻchirildi",
+ "deleted_syncjobs": "Sinxronizatsiya vazifalari oʻchirildi: %s",
+ "dkim_added": "DKIM kaliti %s saqlandi",
+ "domain_add_dkim_available": "DKIM kaliti allaqachon mavjud edi",
+ "dkim_duplicated": "%s domeni uchun DKIM kaliti %s ga nusxalandi",
+ "dkim_removed": "DKIM kaliti %s olib tashlandi",
+ "domain_added": "Domen %s qoʻshildi",
+ "domain_admin_added": "Domen administratori %s qoʻshildi",
+ "domain_admin_modified": "Domen administratori %s ga oʻzgarishlar saqlandi",
+ "domain_admin_removed": "Domen administratori %s olib tashlandi",
+ "domain_footer_modified": "Domen pastki qismi %s ga oʻzgarishlar saqlandi",
+ "domain_modified": "Domen %s ga oʻzgarishlar saqlandi",
+ "domain_removed": "Domen %s olib tashlandi",
+ "dovecot_restart_success": "Dovecot muvaffaqiyatli qayta ishga tushirildi",
+ "eas_reset": "%s foydalanuvchisi uchun ActiveSync qurilmalari tiklandi",
+ "f2b_banlist_refreshed": "Banlist ID muvaffaqiyatli yangilandi.",
+ "f2b_modified": "Fail2ban parametrlariga oʻzgarishlar saqlandi",
+ "forwarding_host_added": "Yoʻnaltirish xosti %s qoʻshildi",
+ "forwarding_host_removed": "Yoʻnaltirish xosti %s olib tashlandi",
+ "global_filter_written": "Filtr faylga muvaffaqiyatli yozildi",
+ "hash_deleted": "Hash oʻchirildi",
+ "iam_test_connection": "Ulanish muvaffaqiyatli",
+ "ip_check_opt_in_modified": "IP tekshiruvi muvaffaqiyatli saqlandi",
+ "item_deleted": "Element %s muvaffaqiyatli oʻchirildi",
+ "item_released": "Element %s chiqarildi",
+ "items_deleted": "Element %s muvaffaqiyatli oʻchirildi",
+ "items_released": "Tanlangan elementlar chiqarildi",
+ "learned_ham": "ID %s ham sifatida muvaffaqiyatli oʻrgatildi",
+ "license_modified": "Litsenziyaga oʻzgarishlar saqlandi",
+ "logged_in_as": "%s sifatida tizimga kirildi",
+ "mailbox_added": "Pochta qutisi %s qoʻshildi",
+ "mailbox_modified": "Pochta qutisi %s ga oʻzgarishlar saqlandi",
+ "mailbox_removed": "Pochta qutisi %s olib tashlandi",
+ "mailbox_renamed": "Pochta qutisi %s dan %s ga qayta nomlandi",
+ "nginx_reloaded": "Nginx qayta yuklandi",
+ "object_modified": "Obyekt %s ga oʻzgarishlar saqlandi",
+ "password_policy_saved": "Parol siyosati muvaffaqiyatli saqlandi",
+ "password_changed_success": "Parol muvaffaqiyatli oʻzgartirildi",
+ "pushover_settings_edited": "Pushover sozlamalari muvaffaqiyatli oʻrnatildi, iltimos maʼlumotlarni tekshiring.",
+ "qlearn_spam": "Xabar ID %s spam sifatida oʻrgatildi va oʻchirildi",
+ "queue_command_success": "Navbat buyrugʻi muvaffaqiyatli yakunlandi",
+ "recipient_map_entry_deleted": "Qabul qiluvchi xaritasi ID %s oʻchirildi",
+ "recipient_map_entry_saved": "Qabul qiluvchi xaritasi yozuvi \"%s\" saqlandi",
+ "recovery_email_sent": "Tiklash e-pochtasi %s ga yuborildi",
+ "relayhost_added": "Xarita yozuvi %s qoʻshildi",
+ "relayhost_removed": "Xarita yozuvi %s olib tashlandi",
+ "reset_main_logo": "Standart logotipga qaytarildi",
+ "resource_added": "Resurs %s qoʻshildi",
+ "resource_modified": "Pochta qutisi %s ga oʻzgarishlar saqlandi",
+ "resource_removed": "Resurs %s olib tashlandi",
+ "rl_saved": "%s obyekti uchun tezlik chegarasi saqlandi",
+ "rspamd_ui_pw_set": "Rspamd UI paroli muvaffaqiyatli oʻrnatildi",
+ "saved_settings": "Sozlamalar saqlandi",
+ "settings_map_added": "Sozlamalar xaritasi yozuvi qoʻshildi",
+ "settings_map_removed": "Sozlamalar xaritasi ID %s olib tashlandi",
+ "sogo_profile_reset": "%s foydalanuvchisi uchun SOGo profili tiklandi",
+ "template_added": "Shablon %s qoʻshildi",
+ "template_modified": "Shablon %s ga oʻzgarishlar saqlandi",
+ "template_removed": "Shablon ID %s oʻchirildi",
+ "tls_policy_map_entry_deleted": "TLS siyosati xaritasi ID %s oʻchirildi",
+ "tls_policy_map_entry_saved": "TLS siyosati xaritasi yozuvi \"%s\" saqlandi",
+ "ui_texts": "UI matnlariga oʻzgarishlar saqlandi",
+ "upload_success": "Fayl muvaffaqiyatli yuklandi",
+ "verified_fido2_login": "FIDO2 kirishi tasdiqlandi",
+ "verified_totp_login": "TOTP kirishi tasdiqlandi",
+ "verified_webauthn_login": "WebAuthn kirishi tasdiqlandi",
+ "verified_yotp_login": "Yubico OTP kirishi tasdiqlandi"
+ },
+ "tfa": {
+ "authenticators": "Autentifikatorlar",
+ "api_register": "%s Yubico Cloud API dan foydalanadi. Iltimos, kalitingiz uchun API kalitini bu yerdan oling",
+ "confirm": "Tasdiqlash",
+ "confirm_totp_token": "Iltimos, yaratilgan tokenni kiritib oʻzgarishlaringizni tasdiqlang",
+ "delete_tfa": "TFA ni oʻchirish",
+ "disable_tfa": "Keyingi muvaffaqiyatli kirishgacha TFA ni oʻchirish",
+ "force_tfa": "Kirishda 2FA roʻyxatdan oʻtkazishni majburlash",
+ "force_tfa_info": "Foydalanuvchidan panelga kirishdan oldin ikki faktorli autentifikatsiyani sozlash talab qilinadi.",
+ "setup_title": "Ikki faktorli autentifikatsiya talab qilinadi",
+ "setup_required": "Hisobingiz ikki faktorli autentifikatsiyani talab qiladi. Davom etish uchun 2FA usulini sozlang.",
+ "cancel_setup": "Bekor qilish va chiqish",
+ "enter_qr_code": "Agar qurilmangiz QR kodlarni skanerlay olmasa, TOTP kodingiz",
+ "error_code": "Xato kodi",
+ "init_webauthn": "Ishga tushirilmoqda, iltimos kuting...",
+ "key_id": "Qurilmangiz uchun identifikator",
+ "key_id_totp": "Kalitingiz uchun identifikator",
+ "none": "Oʻchirish",
+ "reload_retry": "- (xato davom etsa, brauzerni qayta yuklang)",
+ "scan_qr_code": "Iltimos, quyidagi kodni autentifikator ilovangiz bilan skanerlang yoki kodni qoʻlda kiriting.",
+ "select": "Iltimos, tanlang",
+ "set_tfa": "Ikki faktorli autentifikatsiya usulini oʻrnatish",
+ "start_webauthn_validation": "Tekshiruvni boshlash",
+ "tfa": "Ikki faktorli autentifikatsiya",
+ "tfa_token_invalid": "TFA tokeni noto'g'ri",
+ "totp": "Vaqt asosidagi OTP (Google Authenticator, Authy va h.k.)",
+ "u2f_deprecated": "Sizning kalitingiz eskirgan U2F usulidan foydalanib roʻyxatdan oʻtkazilganga oʻxshaydi. Biz siz uchun ikki faktorli autentifikatsiyani oʻchirib qoʻyamiz va kalitingizni oʻchiramiz.",
+ "u2f_deprecated_important": "Iltimos, kalitingizni admin panelida yangi WebAuthn usuli bilan roʻyxatdan oʻtkazing.",
+ "webauthn": "WebAuthn autentifikatsiya",
+ "waiting_usb_auth": "USB qurilmasi kutilmoqda...
Iltimos, hozir USB qurilmangizdagi tugmani bosing.",
+ "waiting_usb_register": "USB qurilmasi kutilmoqda...
Iltimos, yuqorida parolingizni kiriting va USB qurilmangizdagi tugmani bosib roʻyxatga olinishingizni tasdiqlang.",
+ "yubi_otp": "Yubico OTP autentifikatsiya"
+ },
+ "user": {
+ "action": "Amal",
+ "active": "Faol",
+ "active_sieve": "Faol filtr",
+ "advanced_settings": "Kengaytirilgan sozlamalar",
+ "alias": "Taxallus",
+ "alias_create_random": "Tasodifiy taxallus yaratish",
+ "alias_extend_all": "Taxalluslarni 1 soatga uzaytirish",
+ "alias_full_date": "d.m.Y, H:i:s T",
+ "alias_remove_all": "Barcha taxalluslarni olib tashlash",
+ "alias_select_validity": "Amal qilish muddati",
+ "alias_time_left": "Qolgan vaqt",
+ "alias_valid_until": "Amal qiladi (gacha)",
+ "aliases_also_send_as": "Foydalanuvchi sifatida ham joʻnatishga ruxsat berilgan",
+ "aliases_send_as_all": "Quyidagi domen(lar) va ularning taxallus domenlari uchun joʻnatuvchi kirishini tekshirmaslik",
+ "app_hint": "Ilova parollari sizning IMAP, SMTP, CalDAV, CardDAV va EAS kirishi uchun muqobil parollardir. Foydalanuvchi nomi oʻzgarmaydi. SOGo webmail ilova parollari orqali mavjud emas.",
+ "allowed_protocols": "Ruxsat etilgan protokollar",
+ "app_name": "Ilova nomi",
+ "app_passwds": "Ilova parollari",
+ "apple_connection_profile": "Apple ulanish profili",
+ "apple_connection_profile_complete": "Bu ulanish profili Apple qurilmasi uchun IMAP va SMTP parametrlari hamda CalDAV (kalendarlar) va CardDAV (kontaktlar) yoʻllarini oʻz ichiga oladi.",
+ "apple_connection_profile_mailonly": "Bu ulanish profili Apple qurilmasi uchun IMAP va SMTP konfiguratsiya parametrlarini oʻz ichiga oladi.",
+ "apple_connection_profile_with_app_password": "Yangi ilova paroli yaratiladi va profilga qoʻshiladi, shunda qurilmangizni sozlashda parol kiritish kerak boʻlmaydi. Iltimos, faylni ulashmang, chunki u pochta qutingizga toʻliq kirish huquqini beradi.",
+ "attribute": "Atribut",
+ "authentication": "Autentifikatsiya",
+ "change_password": "Parolni oʻzgartirish",
+ "change_password_hint_app_passwords": "Hisobingizda %d ta ilova paroli mavjud va ular oʻzgartirilmaydi. Ularni boshqarish uchun Ilova parollari yorligʻiga oʻting.",
+ "clear_recent_successful_connections": "Koʻrilgan muvaffaqiyatli ulanishlarni tozalash",
+ "client_configuration": "E-pochta mijozlari va smartfonlar uchun konfiguratsiya qoʻllanmalarini koʻrsatish",
+ "create_app_passwd": "Ilova paroli yaratish",
+ "create_syncjob": "Yangi sinxronizatsiya vazifasi yaratish",
+ "created_on": "Yaratilgan sana",
+ "daily": "Kunlik",
+ "day": "kun",
+ "description": "Tavsif",
+ "delete_ays": "Iltimos, oʻchirish jarayonini tasdiqlang.",
+ "direct_aliases": "Toʻgʻridan-toʻgʻri taxallus manzillari",
+ "direct_aliases_desc": "Toʻgʻridan-toʻgʻri taxallus manzillariga spam filtri va TLS siyosati sozlamalari taʼsir qiladi.",
+ "direct_protocol_access": "Bu pochta qutisi foydalanuvchisi quyidagi protokollar va ilovalarga toʻgʻridan-toʻgʻri, tashqi kirishga ega. Bu sozlama administratoringiz tomonidan boshqariladi. Maxsus protokollar va ilovalarga kirishga ruxsat berish uchun ilova parollarini yaratish mumkin.
\"Webmail\" tugmasi SOGo ga yagona kirish (SSO) imkonini beradi va doimo mavjud.",
+ "eas_reset": "ActiveSync qurilma keshini tiklash",
+ "eas_reset_help": "Koʻp hollarda qurilma keshini tiklash buzilgan ActiveSync profilini tiklashga yordam beradi.
Diqqat: Barcha elementlar qayta yuklab olinadi!",
+ "eas_reset_now": "Hozir tiklash",
+ "edit": "Tahrirlash",
+ "email": "E-pochta",
+ "email_and_dav": "E-pochta, kalendarlar va kontaktlar",
+ "empty": "Natijalar yoʻq",
+ "encryption": "Shifrlash",
+ "excludes": "Istisnolar",
+ "expire_in": "Tugaydi",
+ "expire_never": "Hech qachon tugamasin",
+ "fido2_webauthn": "FIDO2/WebAuthn",
+ "forever": "Abadiy",
+ "force_pw_update": "Guruh dasturi xizmatlariga kirish uchun siz yangi parol oʻrnatishingiz kerak.",
+ "from": "dan",
+ "generate": "yaratish",
+ "hour": "soat",
+ "hourly": "Soatlik",
+ "hours": "soat",
+ "in_use": "Foydalanilmoqda",
+ "interval": "Oraliq",
+ "is_catch_all": "Domen(lar) uchun Hammasini-qabul qilish",
+ "last_mail_login": "Oxirgi pochta kirishi",
+ "last_pw_change": "Oxirgi parol oʻzgarishi",
+ "last_run": "Oxirgi ishga tushirilgan",
+ "last_ui_login": "Oxirgi UI kirishi",
+ "loading": "Yuklanmoqda...",
+ "login_history": "Kirish tarixi",
+ "mailbox": "Pochta qutisi",
+ "mailbox_details": "Tafsilotlar",
+ "mailbox_general": "Umumiy",
+ "mailbox_settings": "Sozlamalar",
+ "messages": "xabarlar",
+ "month": "oy",
+ "months": "oy",
+ "never": "Hech qachon",
+ "new_password": "Yangi parol",
+ "new_password_repeat": "Tasdiqlash paroli (takrorlang)",
+ "no_active_filter": "Faol filtr mavjud emas",
+ "no_last_login": "Oxirgi UI kirishi haqida maʼlumot yoʻq",
+ "no_record": "Yozuv yoʻq",
+ "open_logs": "Jurnallarni ochish",
+ "open_webmail_sso": "Webmail",
+ "overview": "Umumiy koʻrinish",
+ "password": "Parol",
+ "password_now": "Joriy parol (oʻzgarishlarni tasdiqlang)",
+ "pw_update_required": "Hisobingiz parol oʻzgartirishni talab qiladi. Davom etish uchun yangi parolni oʻrnating.",
+ "password_repeat": "Parol (takrorlang)",
+ "password_reset_info": "Agar parolni tiklash uchun e-pochta kiritilmagan boʻlsa, bu funksiyadan foydalanib boʻlmaydi.",
+ "protocols": "Protokollar",
+ "pushover_evaluate_x_prio": "Yuqori muhimlikdagi xatni eskalatsiya qilish [X-Priority: 1]",
+ "pushover_info": "Push bildirishnoma sozlamalari %s ga taxalluslar bilan birga (umumiy, umumiy boʻlmagan, teglangan) yetkazib beriladigan barcha toza (spam boʻlmagan) xatlarga qoʻllaniladi.",
+ "pushover_only_x_prio": "Faqat yuqori muhimlikdagi xatlarni koʻrib chiqish [X-Priority: 1]",
+ "pushover_sender_array": "Quyidagi joʻnatuvchi e-pochta manzillarini koʻrib chiqish (vergul bilan ajratilgan)",
+ "pushover_sender_regex": "Joʻnatuvchilarni quyidagi regex orqali mos kelishini tekshirish",
+ "pushover_text": "Bildirishnoma matni",
+ "pushover_title": "Bildirishnoma sarlavhasi",
+ "pushover_sound": "Tovush",
+ "pushover_vars": "Joʻnatuvchi filtri belgilanmagan boʻlsa, barcha xatlar koʻrib chiqiladi.
Regex filtrlari va aniq joʻnatuvchi tekshiruvlari alohida belgilanishi mumkin va ketma-ket koʻrib chiqiladi. Ular bir-biriga bogʻliq emas.
Matn va sarlavha uchun ishlatiladigan oʻzgaruvchilar (ma'lumotlarni himoya qilish siyosatiga e'tibor bering)",
+ "pushover_verify": "Maʼlumotlarni tekshirish",
+ "pw_recovery_email": "Parolni tiklash e-pochtasi",
+ "q_add_header": "Junk papkasi",
+ "q_all": "Barcha turkumlar",
+ "q_reject": "Rad etilgan",
+ "quarantine_category": "Karantin bildirishnoma turkumi",
+ "quarantine_category_info": "\"Rad etilgan\" bildirishnoma turkumi rad etilgan xatlarni oʻz ichiga oladi, \"Junk papkasi\" esa Junk papkasiga joylashtirilgan xatlar haqida foydalanuvchini xabardor qiladi.",
+ "quarantine_notification": "Karantin bildirishnomalari",
+ "quarantine_notification_info": "Bildirishnoma yuborilgandan keyin elementlar \"xabar berildi\" deb belgilanadi va bu element uchun keyingi bildirishnomalar yuborilmaydi.",
+ "recent_successful_connections": "Koʻrilgan muvaffaqiyatli ulanishlar",
+ "remove": "Olib tashlash",
+ "running": "Ishlamoqda",
+ "save": "Oʻzgarishlarni saqlash",
+ "save_changes": "Oʻzgarishlarni saqlash",
+ "sender_acl_disabled": "Joʻnatuvchi tekshiruvi oʻchirilgan",
+ "shared_aliases": "Umumiy taxallus manzillari",
+ "shared_aliases_desc": "Umumiy taxalluslarga foydalanuvchining maxsus sozlamalari (spam filtri yoki shifrlash siyosati kabi) taʼsir qilmaydi. Mos spam filtrlarini faqat administrator domen boʻyicha siyosat sifatida sozlashi mumkin.",
+ "show_sieve_filters": "Faol foydalanuvchi sieve filtrini koʻrsatish",
+ "sogo_profile_reset": "SOGo profilini tiklash",
+ "sogo_profile_reset_help": "Bu foydalanuvchining SOGo profilini yoʻq qiladi va barcha kontakt va kalendar maʼlumotlarini qaytarib boʻlmas tarzda oʻchiradi.",
+ "sogo_profile_reset_now": "Profilni hozir tiklash",
+ "spam_aliases": "Spam e-pochta taxalluslari",
+ "spam_aliases_info": "Spam taxallusi — bu haqiqiy e-pochta manzillarini himoya qilish uchun ishlatilishi mumkin boʻlgan vaqtinchalik e-pochta manzilidir.
Ixtiyoriy ravishda muddat tugash vaqtini belgilash mumkin, shunda taxallus belgilangan davrdan keyin avtomatik oʻchirib qoʻyiladi, suiisteʼmol qilingan yoki tarqalib ketgan manzillarni samarali tarzda chiqarib tashlaydi.",
+ "spam_score_reset": "Server standartiga qaytarish",
+ "spamfilter": "Spam filtri",
+ "spamfilter_behavior": "Baholash",
+ "spamfilter_bl": "Qora roʻyxat",
+ "spamfilter_bl_desc": "Qora roʻyxatdagi e-pochta manzillari har doim spam sifatida tasniflanadi va rad etiladi. Rad etilgan xat karantinga nusxalanmaydi. Joker belgilar ishlatilishi mumkin. Filtr faqat toʻgʻridan-toʻgʻri taxalluslarga (bitta maqsad pochta qutisiga ega taxalluslarga) qoʻllaniladi, hammasini-qabul qilish taxalluslari va pochta qutisining oʻzi istisno qilinadi.",
+ "spamfilter_default_score": "Standart qiymatlar",
+ "spamfilter_green": "Yashil: bu xabar spam emas",
+ "spamfilter_hint": "Birinchi qiymat \"past spam bahosi\"ni tavsiflaydi, ikkinchisi \"yuqori spam bahosi\"ni ifodalaydi.",
+ "spamfilter_red": "Qizil: bu xabar spam va server tomonidan rad etiladi",
+ "spamfilter_table_action": "Amal",
+ "spamfilter_table_add": "Element qoʻshish",
+ "spamfilter_table_domain_policy": "n/a (domen siyosati)",
+ "spamfilter_table_empty": "Koʻrsatish uchun ma'lumot yoʻq",
+ "spamfilter_table_remove": "olib tashlash",
+ "spamfilter_table_rule": "Qoida",
+ "spamfilter_wl": "Oq roʻyxat",
+ "spamfilter_wl_desc": "Oq roʻyxatdagi e-pochta manzillari hech qachon spam sifatida tasniflanmaydi. Joker belgilar ishlatilishi mumkin. Filtr faqat toʻgʻridan-toʻgʻri taxalluslarga (bitta maqsad pochta qutisiga ega taxalluslarga) qoʻllaniladi, hammasini-qabul qilish taxalluslari va pochta qutisining oʻzi istisno qilinadi.",
+ "spamfilter_yellow": "Sariq: bu xabar spam boʻlishi mumkin, spam sifatida belgilanadi va Junk papkangizga koʻchiriladi",
+ "status": "Holat",
+ "sync_jobs": "Sinxronizatsiya vazifalari",
+ "syncjob_check_log": "Jurnalni tekshirish",
+ "syncjob_last_run_result": "Oxirgi ishga tushirilgan natija",
+ "syncjob_EX_OK": "Muvaffaqiyatli",
+ "syncjob_EXIT_CONNECTION_FAILURE": "Ulanish muammosi",
+ "syncjob_EXIT_TLS_FAILURE": "Shifrlangan ulanish bilan muammo",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE": "Autentifikatsiya muammosi",
+ "syncjob_EXIT_OVERQUOTA": "Maqsad pochta qutisi kvotadan oshib ketdi",
+ "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Masofaviy serverga ulanib boʻlmadi",
+ "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Notoʻgʻri foydalanuvchi nomi yoki parol",
+ "tag_handling": "Teglangan xat uchun ishlovni oʻrnatish",
+ "tag_help_example": "Teglangan e-pochta manzili misoli: me+Facebook@example.org",
+ "tag_help_explain": "Subpapkada: tegga qarab nomlangan yangi subpapka INBOX ostida yaratiladi (\"INBOX/Facebook\").
\r\nMavzuda: teg nomi xatning mavzusiga oldindan qoʻshiladi, misol: \"[Facebook] Mening yangiliklarim\".",
+ "tag_in_none": "Hech narsa qilmaslik",
+ "tag_in_subfolder": "Subpapkada",
+ "tag_in_subject": "Mavzuda",
+ "text": "Matn",
+ "tfa_info": "Ikki faktorli autentifikatsiya hisobingizni himoya qilishga yordam beradi. Uni yoqsangiz, ikki faktorli autentifikatsiyani qoʻllab-quvvatlamaydigan ilovalar yoki xizmatlarga (masalan, pochta mijozlari) kirish uchun ilova parollari kerak boʻladi.",
+ "title": "Sarlavha",
+ "tls_enforce_in": "Kiruvchi TLS ni majburlash",
+ "tls_enforce_out": "Chiquvchi TLS ni majburlash",
+ "tls_policy": "Shifrlash siyosati",
+ "tls_policy_warning": "Diqqat: Agar shifrlangan pochta transferini majburlashga qaror qilsangiz, e-pochtalarni yoʻqotishingiz mumkin.
Siyosatga mos kelmaydigan xabarlar pochta tizimi tomonidan qatʼiy muvaffaqiyatsizlik bilan qaytariladi.
Bu variant sizning asosiy e-pochta manzilingiz (kirish nomingiz), taxallus domenlaridan olingan barcha manzillar va faqat ushbu pochta qutisi maqsad sifatida boʻlgan taxallus manzillariga qoʻllaniladi.",
+ "user_settings": "Foydalanuvchi sozlamalari",
+ "username": "Foydalanuvchi nomi",
+ "value": "Qiymat",
+ "verify": "Tasdiqlash",
+ "waiting": "Kutilmoqda",
+ "week": "hafta",
+ "weekly": "Haftalik",
+ "weeks": "hafta",
+ "with_app_password": "ilova paroli bilan",
+ "year": "yil",
+ "years": "yil"
+ },
+ "warning": {
+ "cannot_delete_self": "Tizimga kirgan foydalanuvchini oʻchirib boʻlmaydi",
+ "domain_added_sogo_failed": "Domen qoʻshildi, ammo SOGoni qayta ishga tushirib boʻlmadi, iltimos server jurnallaringizni tekshiring.",
+ "dovecot_restart_failed": "Dovecot qayta ishga tushirib boʻlmadi, iltimos jurnallarni tekshiring",
+ "fuzzy_learn_error": "Fuzzy hash oʻrgatish xatosi: %s",
+ "hash_not_found": "Hash topilmadi yoki allaqachon oʻchirilgan",
+ "ip_invalid": "Notoʻgʻri IP oʻtkazib yuborildi: %s",
+ "is_not_primary_alias": "Asosiy boʻlmagan taxallus oʻtkazib yuborildi: %s",
+ "no_active_admin": "Oxirgi faol administratorni oʻchirib boʻlmaydi",
+ "quota_exceeded_scope": "Domen kvotasi oshib ketdi: Bu domen doirasida faqat cheksiz pochta qutilari yaratilishi mumkin.",
+ "session_token": "Forma tokeni noto'g'ri: Token mos kelmadi",
+ "session_ua": "Forma tokeni noto'g'ri: User-Agent tekshiruvi xatosi"
+ }
+}
diff --git a/data/web/lang/lang.vi-vn.json b/data/web/lang/lang.vi-vn.json
index 0e9e6a2c4..42813fd25 100644
--- a/data/web/lang/lang.vi-vn.json
+++ b/data/web/lang/lang.vi-vn.json
@@ -111,7 +111,8 @@
"timeout2": "Thời gian chờ kết nối đến máy chủ cục bộ",
"username": "Tên người dùng",
"validate": "Xác thực",
- "validation_success": "Xác thực thành công"
+ "validation_success": "Xác thực thành công",
+ "sender_allowed": "Cho phép gửi dưới bí danh này"
},
"admin": {
"access": "Truy cập",
@@ -267,10 +268,10 @@
"includes": "Bao gồm những người nhận này",
"ip_check": "Kiểm tra IP",
"ip_check_disabled": "Kiểm tra IP đã bị vô hiệu hóa. Bạn có thể bật nó trong
Hệ thống > Cấu hình > Tùy chọn > Tùy chỉnh",
- "ip_check_opt_in": "Chọn tham gia sử dụng dịch vụ bên thứ ba ipv4.mailcow.email và ipv6.mailcow.email để phân giải địa chỉ IP bên ngoài.",
+ "ip_check_opt_in": "Đăng ký tham gia sử dụng dịch vụ bên thứ ba dùng ipv4.mailcow.email và ipv6.mailcow.email để phân giải địa chỉ IP bên ngoài.",
"is_mx_based": "Dựa trên MX",
"last_applied": "Áp dụng lần cuối",
- "license_info": "Giấy phép không bắt buộc nhưng giúp phát triển thêm.
Đăng ký GUID của bạn tại đây hoặc mua hỗ trợ cho cài đặt mailcow của bạn.",
+ "license_info": "Giấy phép tuy không bắt buộc nhưng giúp phát triển thêm.
Đăng ký GUID của bạn tại đây hoặc mua hỗ trợ cho cài đặt mailcow của bạn.",
"link": "Liên kết",
"loading": "Vui lòng đợi...",
"login_time": "Thời gian đăng nhập",
@@ -555,7 +556,9 @@
"validity_missing": "Vui lòng gán thời hạn hiệu lực",
"value_missing": "Vui lòng cung cấp tất cả các giá trị",
"version_invalid": "Phiên bản %s không hợp lệ",
- "yotp_verification_failed": "Xác thực Yubico OTP thất bại: %s"
+ "yotp_verification_failed": "Xác thực Yubico OTP thất bại: %s",
+ "tfa_removal_blocked": "Xác thực hai yếu tố không thể bị xóa vì đây là yêu cầu bắt buộc đối với tài khoản của bạn.",
+ "quarantine_category_invalid": "Danh mục cách ly phải là một trong các loại sau : add_header, reject, all."
},
"datatables": {
"collapse_all": "Thu gọn tất cả",
@@ -578,7 +581,9 @@
"aria": {
"sortAscending": ": kích hoạt để sắp xếp cột tăng dần",
"sortDescending": ": kích hoạt để sắp xếp cột giảm dần"
- }
+ },
+ "decimal": ".",
+ "thousands": ","
},
"debug": {
"architecture": "Kiến trúc",
@@ -692,6 +697,19 @@
"internal_info": "Bí danh nội bộ chỉ có thể truy cập từ tên miền sở hữu hoặc tên miền bí danh.",
"kind": "Loại",
"last_modified": "Sửa đổi lần cuối",
- "lookup_mx": "Đích là một biểu thức chính quy để khớp với tên MX (.*.google.com để định tuyến tất cả thư nhắm đến MX kết thúc bằng google.com qua bước nhảy này)"
+ "lookup_mx": "Đích là một biểu thức chính quy để khớp với tên MX (.*.google.com để định tuyến tất cả thư nhắm đến MX kết thúc bằng google.com qua bước nhảy này)",
+ "sender_allowed": "Cho phép gửi đi bằng bí danh",
+ "sender_allowed_info": "Nếu bị vô hiệu hóa, bí danh này chỉ có thể nhận thư. Sử dụng ACL của người gửi để ghi đè và cấp quyền gửi cho các hộp thư cụ thể.",
+ "mailbox": "Chỉnh sửa hộp thư",
+ "mailbox_quota_def": "Hạn mức hộp thư mặc định",
+ "mailbox_relayhost_info": "Chỉ áp dụng cho hộp thư và các bí danh trực tiếp, thao tác này sẽ ghi đè lên máy chủ chuyển tiếp tên miền.",
+ "mailbox_rename": "Đổi tên hộp thư",
+ "mailbox_rename_agree": "Tôi đã tạo bản sao lưu.",
+ "mailbox_rename_warning": "QUAN TRỌNG! Hãy tạo bản sao lưu trước khi đổi tên hộp thư.",
+ "mailbox_rename_alias": "Tạo tự động bí danh",
+ "mailbox_rename_title": "Tên mới của hộp thư cục bộ",
+ "max_aliases": "Số lượng Bí danh tối đa",
+ "max_mailboxes": "Số lượng hộp thư tối đa có thể có",
+ "max_quota": "Dung lượng tối đa cho mỗi hộp thư (MiB)"
}
}
diff --git a/data/web/lang/lang.zh-cn.json b/data/web/lang/lang.zh-cn.json
index fe225a5df..2a1a080b9 100644
--- a/data/web/lang/lang.zh-cn.json
+++ b/data/web/lang/lang.zh-cn.json
@@ -29,7 +29,8 @@
"syncjobs": "同步任务",
"tls_policy": "TLS 策略",
"unlimited_quota": "无限邮箱容量配额",
- "pw_reset": "允许重置mailcow使用者密码"
+ "pw_reset": "允许重置mailcow使用者密码",
+ "alias_external_goto": "允许带有外部目标地址的别名"
},
"add": {
"activate_filter_warn": "当“启用”选项被勾选后,其它所有的过滤器都会被禁用。",
@@ -111,7 +112,8 @@
"validation_success": "验证成功",
"dry": "模拟同步(Dry run)",
"internal_info": "内部的别名只能在域内部或者别名域内部访问。",
- "internal": "内部的"
+ "internal": "内部的",
+ "sender_allowed": "允许以该别名发送"
},
"admin": {
"access": "权限管理",
@@ -555,7 +557,10 @@
"max_age_invalid": "最大有效时间 %s 无效",
"mode_invalid": "模式 %s 无效",
"mx_invalid": "MX 记录 %s 无效",
- "version_invalid": "版本 %s 无效"
+ "version_invalid": "版本 %s 无效",
+ "tfa_removal_blocked": "无法移除两步验证,你的账户必须使用两步验证。",
+ "external_goto_denied": "不允许使用外部目标地址 %s",
+ "quarantine_category_invalid": "隔离分类必须是 add_header, reject, all 的其中一个"
},
"debug": {
"chart_this_server": "图表 (此服务器)",
@@ -754,7 +759,10 @@
"mta_sts_max_age_info": "接收方邮件服务器可缓存该策略的时长(秒),超出后需重新获取策略。",
"mta_sts_mx": "MX 服务器",
"mta_sts_mx_info": "仅允许向明确列出的邮件服务器发送邮件;发送方 MTA 会验证 DNS MX 记录的主机名是否与策略列表匹配,并仅允许携带有效 TLS 证书的投递(可防范中间人攻击)。",
- "mta_sts_mx_notice": "可配置多个 MX 服务器(以逗号分隔)。"
+ "mta_sts_mx_notice": "可配置多个 MX 服务器(以逗号分隔)。",
+ "sender_allowed": "允许以此别名发送",
+ "sender_allowed_info": "如果禁用了,此别名只能接收邮件。使用发件者 ACL 来覆盖此选项并赋予指定的邮箱发送权限。",
+ "mta_sts_active_info": "如果未选中,MTA-STS 策略不会被公布并且不会通过 ACME 为 MTA-STS 子域名请求证书。"
},
"fido2": {
"confirm": "确认",
@@ -1002,7 +1010,8 @@
"templates": "模板",
"template": "模板",
"iam": "身份提供者(IDP)",
- "internal": "内部的"
+ "internal": "内部的",
+ "force_tfa": "两步验证"
},
"oauth2": {
"access_denied": "请作为邮箱所有者登录以使用 OAuth2 授权。",
@@ -1210,7 +1219,12 @@
"waiting_usb_auth": "等待 USB 设备中...
现在请触碰你的 WebAuthn USB 设备上的按钮。",
"waiting_usb_register": "等待 USB 设备中...
请在上方输入你的密码并请触碰你的 WebAuthn USB 设备上的按钮以确认注册该 WebAuthn 设备。",
"yubi_otp": "Yubico OTP 认证",
- "authenticators": "验证器(Authenticators)"
+ "authenticators": "验证器(Authenticators)",
+ "force_tfa": "在登录时强制启用 2FA",
+ "force_tfa_info": "在访问面板前用户会被要求设置两步验证。",
+ "setup_title": "需要设置两步验证",
+ "setup_required": "你的账户需要设置两步验证。请添加一个两步验证方法以继续。",
+ "cancel_setup": "取消并注销"
},
"user": {
"action": "操作",
@@ -1384,7 +1398,8 @@
"overview": "概览",
"expire_never": "永不过期",
"forever": "永久",
- "spam_aliases_info": "垃圾邮件别名是一种临时电子邮件地址,可用于保护真实电子邮件地址。
还可以选择设置过期时间,以便在设定的时间后自动停用别名,从而有效地销毁被滥用或泄露的地址。"
+ "spam_aliases_info": "垃圾邮件别名是一种临时电子邮件地址,可用于保护真实电子邮件地址。
还可以选择设置过期时间,以便在设定的时间后自动停用别名,从而有效地销毁被滥用或泄露的地址。",
+ "pw_update_required": "你的账户需要修改一次密码。请设置一个新密码以继续。"
},
"warning": {
"cannot_delete_self": "不能删除已登录的用户",
diff --git a/data/web/lang/lang.zh-tw.json b/data/web/lang/lang.zh-tw.json
index 592efa809..e7310be7a 100644
--- a/data/web/lang/lang.zh-tw.json
+++ b/data/web/lang/lang.zh-tw.json
@@ -24,7 +24,7 @@
"sogo_access": "管理 SOGo 存取權",
"sogo_profile_reset": "重設 SOGo 個人資料",
"spam_alias": "臨時別名",
- "spam_policy": "黑名單/白名單",
+ "spam_policy": "封鎖名單/允許名單",
"spam_score": "垃圾郵件分數",
"syncjobs": "同步任務",
"tls_policy": "TLS 規則",
@@ -1180,7 +1180,7 @@
"no_last_login": "沒有最後 UI 登入訊息",
"no_record": "沒有紀錄",
"open_logs": "開啟日誌",
- "open_webmail_sso": "网络邮件",
+ "open_webmail_sso": "網頁信箱",
"password": "密碼",
"password_now": "目前密碼 (確認更改)",
"password_repeat": "密碼 (再次輸入)",
diff --git a/data/web/mobileconfig.php b/data/web/mobileconfig.php
index 7c0ead7f5..c57c48857 100644
--- a/data/web/mobileconfig.php
+++ b/data/web/mobileconfig.php
@@ -65,6 +65,7 @@ if (isset($_GET['app_password'])) {
$attr['protocols'][] = 'dav_access';
}
app_passwd("add", $attr);
+ $password = htmlspecialchars($password, ENT_NOQUOTES);
} else {
$app_password = false;
}
diff --git a/data/web/oauth/authorize.php b/data/web/oauth/authorize.php
index 1fdcd0335..2bde21d36 100644
--- a/data/web/oauth/authorize.php
+++ b/data/web/oauth/authorize.php
@@ -4,6 +4,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
if (!isset($_SESSION['mailcow_cc_role'])) {
$_SESSION['oauth2_request'] = $_SERVER['REQUEST_URI'];
header('Location: /?oauth');
+ exit;
}
$request = OAuth2\Request::createFromGlobals();
@@ -24,6 +25,11 @@ if (!isset($_POST['authorized'])) {
exit;
}
+if (empty($_SESSION['mailcow_cc_username'])) {
+ header('Location: /?oauth');
+ exit;
+}
+
// print the authorization code if the user has authorized your client
$is_authorized = ($_POST['authorized'] == '1');
$oauth2_server->handleAuthorizeRequest($request, $response, $is_authorized, $_SESSION['mailcow_cc_username']);
diff --git a/data/web/sogo-auth.php b/data/web/sogo-auth.php
index 3e3eb5f79..bc9694d8e 100644
--- a/data/web/sogo-auth.php
+++ b/data/web/sogo-auth.php
@@ -8,8 +8,12 @@ $ALLOW_ADMIN_EMAIL_LOGIN = (preg_match(
$session_var_user_allowed = 'sogo-sso-user-allowed';
$session_var_pass = 'sogo-sso-pass';
+// only the internal nginx auth_request loopback (127.0.0.1:65510) sets this;
+// external clients can never supply it (bare fastcgi param, not an HTTP header)
+$is_internal_auth = (($_SERVER['SOGO_AUTH_INTERNAL'] ?? '') === '1');
+
// validate credentials for basic auth requests
-if (isset($_SERVER['PHP_AUTH_USER'])) {
+if ($is_internal_auth && isset($_SERVER['PHP_AUTH_USER'])) {
// load prerequisites only when required
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
@@ -25,16 +29,8 @@ if (isset($_SERVER['PHP_AUTH_USER'])) {
elseif (preg_match('/^(\/SOGo|)\/Microsoft-Server-ActiveSync.*/', $original_uri) === 1) {
$service = 'EAS';
}
- if (empty($password)) {
- $remote = get_remote_ip();
- $docker_ipv4_network = getenv('IPV4_NETWORK');
- if ($remote == "{$docker_ipv4_network}.246") {
- $login_check = 'user';
- $password = file_get_contents("/etc/sogo-sso/sogo-sso.pass");
- }
- } else {
- $login_check = check_login($username, $password, array('service' => $service));
- }
+
+ $login_check = check_login($username, $password, array('service' => $service));
if ($login_check === 'user') {
header("X-User: $username");
header("X-Auth: Basic ".base64_encode("$username:$password"));
@@ -58,6 +54,16 @@ elseif (isset($_GET['login'])) {
(($_SESSION['acl']['login_as'] == "1" && $ALLOW_ADMIN_EMAIL_LOGIN !== 0) || ($is_dual === false && $login == $_SESSION['mailcow_cc_username']))) {
if (filter_var($login, FILTER_VALIDATE_EMAIL)) {
if (user_get_alias_details($login) !== false) {
+ // enforce tenant boundary
+ if (!hasMailboxObjectAccess($_SESSION['mailcow_cc_username'], $_SESSION['mailcow_cc_role'], $login)) {
+ header("Location: /");
+ exit;
+ }
+ // Block SOGo access if pending actions (2FA setup, password update)
+ if (!empty($_SESSION['pending_tfa_setup']) || !empty($_SESSION['pending_pw_update'])) {
+ header("Location: /");
+ exit;
+ }
// register username in session
$_SESSION[$session_var_user_allowed][] = $login;
// set dual login
@@ -83,13 +89,12 @@ elseif (isset($_GET['login'])) {
exit;
}
// only check for admin-login on sogo GUI requests
-elseif (isset($_SERVER['HTTP_X_ORIGINAL_URI']) && strcasecmp(substr($_SERVER['HTTP_X_ORIGINAL_URI'], 0, 9), "/SOGo/so/") === 0) {
+elseif ($is_internal_auth && isset($_SERVER['HTTP_X_ORIGINAL_URI']) && strcasecmp(substr($_SERVER['HTTP_X_ORIGINAL_URI'], 0, 9), "/SOGo/so/") === 0) {
// this is an nginx auth_request call, we check for existing sogo-sso session variables
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.inc.php';
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/inc/vars.local.inc.php')) {
include_once $_SERVER['DOCUMENT_ROOT'] . '/inc/vars.local.inc.php';
}
- require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/functions.inc.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/sessions.inc.php';
$email_list = array(
@@ -103,7 +108,8 @@ elseif (isset($_SERVER['HTTP_X_ORIGINAL_URI']) && strcasecmp(substr($_SERVER['HT
filter_var($email, FILTER_VALIDATE_EMAIL) &&
is_array($_SESSION[$session_var_user_allowed]) &&
in_array($email, $_SESSION[$session_var_user_allowed]) &&
- !$_SESSION['pending_pw_update']
+ !$_SESSION['pending_pw_update'] &&
+ !$_SESSION['pending_tfa_setup']
) {
$username = $email;
$password = file_get_contents("/etc/sogo-sso/sogo-sso.pass");
diff --git a/data/web/templates/admin/tab-config-customize.twig b/data/web/templates/admin/tab-config-customize.twig
index aecf1846e..f28e4c130 100644
--- a/data/web/templates/admin/tab-config-customize.twig
+++ b/data/web/templates/admin/tab-config-customize.twig
@@ -7,7 +7,33 @@
{{ lang.admin.customize }}
+
+