Merge branch '5.1' into 5.x

* 5.1:
  [Process] Dont test TTY if there is no TTY support
  Fixing some Mongolian
  translating the validators for european portuguese language
  Fix CI
  Update validators.he.xlf
  Update security.he.xlf
  Update validators.he.xlf
  Improve performances in CircualReference detection
  [PHPUnitBridge] Fixed crash on Windows with PHP 8
  Fix session called initized several time
This commit is contained in:
Nicolas Grekas 2020-11-02 16:46:10 +01:00
commit 5bf6bbe96c
14 changed files with 410 additions and 95 deletions

View File

@ -48,7 +48,7 @@ install:
- php composer.phar global require --no-progress --no-scripts --no-plugins symfony/flex
- git config --global user.email ""
- git config --global user.name "Symfony"
- FOR /F "tokens=* USEBACKQ" %%F IN (`bash -c "grep branch-version composer.json | grep -o '[0-9.]*'"`) DO (SET SYMFONY_VERSION=%%F)
- FOR /F "tokens=* USEBACKQ" %%F IN (`bash -c "grep branch-version composer.json | grep -o '[0-9.x]*'"`) DO (SET SYMFONY_VERSION=%%F)
- php .github/build-packages.php "HEAD^" %SYMFONY_VERSION% src\Symfony\Bridge\PhpUnit src\Symfony\Contracts
- SET "SYMFONY_REQUIRE=>=%SYMFONY_VERSION%"
- SET COMPOSER_ROOT_VERSION=%SYMFONY_VERSION%.x-dev

View File

@ -114,7 +114,7 @@ jobs:
run: |
COMPOSER_HOME="$(composer config home)"
([ -d "$COMPOSER_HOME" ] || mkdir "$COMPOSER_HOME") && cp .github/composer-config.json "$COMPOSER_HOME/config.json"
echo "COMPOSER_ROOT_VERSION=$(grep branch-version composer.json | grep -o '[0-9.]*').x-dev" >> $GITHUB_ENV
echo "COMPOSER_ROOT_VERSION=$(grep branch-version composer.json | grep -o '[0-9.x]*').x-dev" >> $GITHUB_ENV
- name: Determine composer cache directory
id: composer-cache

View File

@ -199,7 +199,7 @@ install:
git config --global user.email ""
git config --global user.name "Symfony"
export SYMFONY_VERSION=$(grep branch-version composer.json | grep -o '[0-9.]*')
export SYMFONY_VERSION=$(grep branch-version composer.json | grep -o '[0-9.x]*')
if [[ ! $deps ]]; then
php .github/build-packages.php HEAD^ $SYMFONY_VERSION src/Symfony/Bridge/PhpUnit src/Symfony/Contracts

View File

@ -175,6 +175,6 @@
],
"minimum-stability": "dev",
"extra": {
"branch-version": "5.2"
"branch-version": "5.x"
}
}

View File

@ -238,7 +238,7 @@ if (!file_exists("$PHPUNIT_DIR/$PHPUNIT_VERSION_DIR/phpunit") || $configurationH
}
$prevRoot = getenv('COMPOSER_ROOT_VERSION');
putenv("COMPOSER_ROOT_VERSION=$PHPUNIT_VERSION.99");
$q = '\\' === \DIRECTORY_SEPARATOR ? '"' : '';
$q = '\\' === \DIRECTORY_SEPARATOR && \PHP_VERSION_ID < 80000 ? '"' : '';
// --no-suggest is not in the list to keep compat with composer 1.0, which is shipped with Ubuntu 16.04LTS
$exit = proc_close(proc_open("$q$COMPOSER install --no-dev --prefer-dist --no-progress $q", [], $p, getcwd()));
putenv('COMPOSER_ROOT_VERSION'.(false !== $prevRoot ? '='.$prevRoot : ''));

View File

@ -185,25 +185,7 @@ class PhpDumper extends Dumper
}
}
(new AnalyzeServiceReferencesPass(false, !$this->getProxyDumper() instanceof NullDumper))->process($this->container);
$checkedNodes = [];
$this->circularReferences = [];
$this->singleUsePrivateIds = [];
foreach ($this->container->getCompiler()->getServiceReferenceGraph()->getNodes() as $id => $node) {
if (!$node->getValue() instanceof Definition) {
continue;
}
if (!isset($checkedNodes[$id])) {
$this->analyzeCircularReferences($id, $node->getOutEdges(), $checkedNodes);
}
if ($this->isSingleUsePrivateNode($node)) {
$this->singleUsePrivateIds[$id] = $id;
}
}
$this->container->getCompiler()->getServiceReferenceGraph()->clear();
$checkedNodes = [];
$this->singleUsePrivateIds = array_diff_key($this->singleUsePrivateIds, $this->circularReferences);
$this->analyzeReferences();
$this->docStar = $options['debug'] ? '*' : '';
if (!empty($options['file']) && is_dir($dir = \dirname($options['file']))) {
@ -429,61 +411,92 @@ EOF;
return $this->proxyDumper;
}
/**
* @param ServiceReferenceGraphEdge[] $edges
*/
private function analyzeCircularReferences(string $sourceId, array $edges, array &$checkedNodes, array &$currentPath = [], bool $byConstructor = true)
private function analyzeReferences()
{
$checkedNodes[$sourceId] = true;
$currentPath[$sourceId] = $byConstructor;
(new AnalyzeServiceReferencesPass(false, !$this->getProxyDumper() instanceof NullDumper))->process($this->container);
$checkedNodes = [];
$this->circularReferences = [];
$this->singleUsePrivateIds = [];
foreach ($this->container->getCompiler()->getServiceReferenceGraph()->getNodes() as $id => $node) {
if (!$node->getValue() instanceof Definition) {
continue;
}
if ($this->isSingleUsePrivateNode($node)) {
$this->singleUsePrivateIds[$id] = $id;
}
$newNodes = [];
if (!$this->collectCircularReferences($id, $node->getOutEdges(), $checkedNodes, $newNodes)) {
foreach ($newNodes as $newNodeId => $_) {
$checkedNodes[$newNodeId] = [];
}
continue;
}
$nodesToFlatten = $newNodes;
do {
$changedNodes = [];
foreach ($nodesToFlatten as $newNodeId => $_) {
$deps = &$checkedNodes[$newNodeId];
foreach ($deps as $id => [$path, $depsByConstructor]) {
foreach ($checkedNodes[$id] as $depsId => [$subPath, $subDepsByConstructor]) {
if (!isset($deps[$depsId]) || ($depsByConstructor && $subDepsByConstructor && !$deps[$depsId][1])) {
array_unshift($subPath, $id);
$deps[$depsId] = [$subPath, $depsByConstructor && $subDepsByConstructor];
$changedNodes += $newNodes[$newNodeId] ?? [];
}
}
}
}
} while ($nodesToFlatten = $changedNodes);
foreach ($newNodes as $newNodeId => $_) {
if (null !== $n = $checkedNodes[$newNodeId][$newNodeId] ?? null) {
$this->addCircularReferences($newNodeId, $n[0], $n[1]);
}
}
}
$this->container->getCompiler()->getServiceReferenceGraph()->clear();
$this->singleUsePrivateIds = array_diff_key($this->singleUsePrivateIds, $this->circularReferences);
}
private function collectCircularReferences(string $sourceId, array $edges, array &$checkedNodes, array &$newNodes, array $path = []): bool
{
$path[$sourceId] = true;
$checkedNodes[$sourceId] = [];
$newNodes[$sourceId] = [];
$circular = false;
foreach ($edges as $edge) {
$node = $edge->getDestNode();
$id = $node->getId();
if (!$node->getValue() instanceof Definition || $sourceId === $id || $edge->isLazy() || $edge->isWeak()) {
// no-op
} elseif (isset($currentPath[$id])) {
$this->addCircularReferences($id, $currentPath, $edge->isReferencedByConstructor());
continue;
}
if (isset($path[$id])) {
$circular = true;
} elseif (!isset($checkedNodes[$id])) {
$this->analyzeCircularReferences($id, $node->getOutEdges(), $checkedNodes, $currentPath, $edge->isReferencedByConstructor());
} elseif (isset($this->circularReferences[$id])) {
$this->connectCircularReferences($id, $currentPath, $edge->isReferencedByConstructor());
$circular = $this->collectCircularReferences($id, $node->getOutEdges(), $checkedNodes, $newNodes, $path) || $circular;
}
$checkedNodes[$sourceId][$id] = [[], $edge->isReferencedByConstructor()];
if (isset($newNodes[$id])) {
$newNodes[$id][$sourceId] = true;
}
}
unset($currentPath[$sourceId]);
unset($path[$sourceId]);
return $circular;
}
private function connectCircularReferences(string $sourceId, array &$currentPath, bool $byConstructor, array &$subPath = [])
private function addCircularReferences(string $sourceId, array $currentPath, bool $byConstructor)
{
$currentPath[$sourceId] = $subPath[$sourceId] = $byConstructor;
foreach ($this->circularReferences[$sourceId] as $id => $byConstructor) {
if (isset($currentPath[$id])) {
$this->addCircularReferences($id, $currentPath, $byConstructor);
} elseif (!isset($subPath[$id]) && isset($this->circularReferences[$id])) {
$this->connectCircularReferences($id, $currentPath, $byConstructor, $subPath);
}
}
unset($currentPath[$sourceId], $subPath[$sourceId]);
}
private function addCircularReferences(string $id, array $currentPath, bool $byConstructor)
{
$currentPath[$id] = $byConstructor;
$circularRefs = [];
foreach (array_reverse($currentPath) as $parentId => $v) {
$byConstructor = $byConstructor && $v;
$circularRefs[] = $parentId;
if ($parentId === $id) {
break;
}
}
$currentId = $id;
foreach ($circularRefs as $parentId) {
$currentId = $sourceId;
$currentPath = array_reverse($currentPath);
$currentPath[] = $currentId;
foreach ($currentPath as $parentId) {
if (empty($this->circularReferences[$parentId][$currentId])) {
$this->circularReferences[$parentId][$currentId] = $byConstructor;
}

View File

@ -14,6 +14,126 @@
<source>The CSRF token is invalid. Please try to resubmit the form.</source>
<target>אסימון CSRF אינו חוקי. אנא נסה לשלוח שוב את הטופס.</target>
</trans-unit>
<trans-unit id="99">
<source>This value is not a valid HTML5 color.</source>
<target>ערך זה אינו צבע HTML5 חוקי.</target>
</trans-unit>
<trans-unit id="100">
<source>Please enter a valid birthdate.</source>
<target>נא להזין את תאריך לידה תקני.</target>
</trans-unit>
<trans-unit id="101">
<source>The selected choice is invalid.</source>
<target>הבחירה שנבחרה אינה חוקית.</target>
</trans-unit>
<trans-unit id="102">
<source>The collection is invalid.</source>
<target>האוסף אינו חוקי.</target>
</trans-unit>
<trans-unit id="103">
<source>Please select a valid color.</source>
<target>אנא בחר צבע חוקי.</target>
</trans-unit>
<trans-unit id="104">
<source>Please select a valid country.</source>
<target>אנא בחר מדינה חוקית.</target>
</trans-unit>
<trans-unit id="105">
<source>Please select a valid currency.</source>
<target>אנא בחר מטבע חוקי.</target>
</trans-unit>
<trans-unit id="106">
<source>Please choose a valid date interval.</source>
<target>אנא בחר מרווח תאריכים חוקי.</target>
</trans-unit>
<trans-unit id="107">
<source>Please enter a valid date and time.</source>
<target>אנא הזן תאריך ושעה תקנים.</target>
</trans-unit>
<trans-unit id="108">
<source>Please enter a valid date.</source>
<target>נא להזין תאריך חוקי.</target>
</trans-unit>
<trans-unit id="109">
<source>Please select a valid file.</source>
<target>אנא בחר קובץ חוקי.</target>
</trans-unit>
<trans-unit id="110">
<source>The hidden field is invalid.</source>
<target>השדה הנסתר אינו חוקי.</target>
</trans-unit>
<trans-unit id="111">
<source>Please enter an integer.</source>
<target>אנא הזן מספר שלם.</target>
</trans-unit>
<trans-unit id="112">
<source>Please select a valid language.</source>
<target>אנא בחר שפה חוקי.</target>
</trans-unit>
<trans-unit id="113">
<source>Please select a valid locale.</source>
<target>אנא בחר שפה מקומית.</target>
</trans-unit>
<trans-unit id="114">
<source>Please enter a valid money amount.</source>
<target>אנא הזן סכום כסף חוקי.</target>
</trans-unit>
<trans-unit id="115">
<source>Please enter a number.</source>
<target>אנא הזן מספר.</target>
</trans-unit>
<trans-unit id="116">
<source>The password is invalid.</source>
<target>הסיסמה אינה חוקית.</target>
</trans-unit>
<trans-unit id="117">
<source>Please enter a percentage value.</source>
<target>אנא הזן ערך באחוזים.</target>
</trans-unit>
<trans-unit id="118">
<source>The values do not match.</source>
<target>הערכים אינם תואמים.</target>
</trans-unit>
<trans-unit id="119">
<source>Please enter a valid time.</source>
<target>אנא הזן שעה חוקי.</target>
</trans-unit>
<trans-unit id="120">
<source>Please select a valid timezone.</source>
<target>אנא בחר אזור זמן חוקי.</target>
</trans-unit>
<trans-unit id="121">
<source>Please enter a valid URL.</source>
<target>נא להזין את כתובת אתר חוקית.</target>
</trans-unit>
<trans-unit id="122">
<source>Please enter a valid search term.</source>
<target>אנא הזן מונח חיפוש חוקי.</target>
</trans-unit>
<trans-unit id="123">
<source>Please provide a valid phone number.</source>
<target>אנא ספק מספר טלפון חוקי.</target>
</trans-unit>
<trans-unit id="124">
<source>The checkbox has an invalid value.</source>
<target>לתיבת הסימון יש ערך לא חוקי.</target>
</trans-unit>
<trans-unit id="125">
<source>Please enter a valid email address.</source>
<target>אנא הזן כתובת דוא"ל תקנית.</target>
</trans-unit>
<trans-unit id="126">
<source>Please select a valid option.</source>
<target>אנא בחר אפשרות חוקית.</target>
</trans-unit>
<trans-unit id="127">
<source>Please select a valid range.</source>
<target>אנא בחר טווח חוקי.</target>
</trans-unit>
<trans-unit id="128">
<source>Please enter a valid week.</source>
<target>אנא הזן שבוע תקף.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -8,12 +8,132 @@
</trans-unit>
<trans-unit id="29">
<source>The uploaded file was too large. Please try to upload a smaller file.</source>
<target>O arquivo enviado é muito grande. Por favor, tente enviar um arquivo menor.</target>
<target>O ficheiro enviado é muito grande. Por favor, tente enviar um ficheiro menor.</target>
</trans-unit>
<trans-unit id="30">
<source>The CSRF token is invalid. Please try to resubmit the form.</source>
<target>O token CSRF está inválido. Por favor, tente enviar o formulário novamente.</target>
</trans-unit>
<trans-unit id="99">
<source>This value is not a valid HTML5 color.</source>
<target>Este valor não é uma cor HTML5 válida.</target>
</trans-unit>
<trans-unit id="100">
<source>Please enter a valid birthdate.</source>
<target>Por favor, informe uma data de nascimento válida.</target>
</trans-unit>
<trans-unit id="101">
<source>The selected choice is invalid.</source>
<target>A escolha seleccionada é inválida.</target>
</trans-unit>
<trans-unit id="102">
<source>The collection is invalid.</source>
<target>A coleção é inválida.</target>
</trans-unit>
<trans-unit id="103">
<source>Please select a valid color.</source>
<target>Por favor, selecione uma cor válida.</target>
</trans-unit>
<trans-unit id="104">
<source>Please select a valid country.</source>
<target>Por favor, selecione um país válido.</target>
</trans-unit>
<trans-unit id="105">
<source>Please select a valid currency.</source>
<target>Por favor, selecione uma moeda válida.</target>
</trans-unit>
<trans-unit id="106">
<source>Please choose a valid date interval.</source>
<target>Por favor, escolha um intervalo de datas válido.</target>
</trans-unit>
<trans-unit id="107">
<source>Please enter a valid date and time.</source>
<target>Por favor, informe uma data e horário válidos.</target>
</trans-unit>
<trans-unit id="108">
<source>Please enter a valid date.</source>
<target>Por favor, informe uma data válida.</target>
</trans-unit>
<trans-unit id="109">
<source>Please select a valid file.</source>
<target>Por favor, selecione um ficheiro válido.</target>
</trans-unit>
<trans-unit id="110">
<source>The hidden field is invalid.</source>
<target>O campo oculto é inválido.</target>
</trans-unit>
<trans-unit id="111">
<source>Please enter an integer.</source>
<target>Por favor, informe um inteiro.</target>
</trans-unit>
<trans-unit id="112">
<source>Please select a valid language.</source>
<target>Por favor selecione um idioma válido.</target>
</trans-unit>
<trans-unit id="113">
<source>Please select a valid locale.</source>
<target>Por favor, selecione um locale válido.</target>
</trans-unit>
<trans-unit id="114">
<source>Please enter a valid money amount.</source>
<target>Por favor, informe um valor monetário válido.</target>
</trans-unit>
<trans-unit id="115">
<source>Please enter a number.</source>
<target>Por favor, informe um número.</target>
</trans-unit>
<trans-unit id="116">
<source>The password is invalid.</source>
<target>A palavra-passe é inválida.</target>
</trans-unit>
<trans-unit id="117">
<source>Please enter a percentage value.</source>
<target>Por favor, informe um valor percentual.</target>
</trans-unit>
<trans-unit id="118">
<source>The values do not match.</source>
<target>Os valores não correspondem.</target>
</trans-unit>
<trans-unit id="119">
<source>Please enter a valid time.</source>
<target>Por favor, informe uma hora válida.</target>
</trans-unit>
<trans-unit id="120">
<source>Please select a valid timezone.</source>
<target>Por favor, selecione um fuso horário válido.</target>
</trans-unit>
<trans-unit id="121">
<source>Please enter a valid URL.</source>
<target>Por favor, informe uma URL válida.</target>
</trans-unit>
<trans-unit id="122">
<source>Please enter a valid search term.</source>
<target>Por favor, informe um termo de busca válido.</target>
</trans-unit>
<trans-unit id="123">
<source>Please provide a valid phone number.</source>
<target>Por favor, infome um número de telefone válido.</target>
</trans-unit>
<trans-unit id="124">
<source>The checkbox has an invalid value.</source>
<target>O checkbox possui um valor inválido.</target>
</trans-unit>
<trans-unit id="125">
<source>Please enter a valid email address.</source>
<target>Por favor, informe um endereço de email válido.</target>
</trans-unit>
<trans-unit id="126">
<source>Please select a valid option.</source>
<target>Por favor, selecione uma opção válida.</target>
</trans-unit>
<trans-unit id="127">
<source>Please select a valid range.</source>
<target>Por favor, selecione um intervalo válido.</target>
</trans-unit>
<trans-unit id="128">
<source>Please enter a valid week.</source>
<target>Por favor, selecione uma semana válida.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -59,7 +59,8 @@ abstract class AbstractSessionListener implements EventSubscriberInterface
$session = null;
$request = $event->getRequest();
if (!$request->hasSession()) {
$request->setSessionFactory(function () { return $this->getSession(); });
$sess = null;
$request->setSessionFactory(function () use (&$sess) { return $sess ?? $sess = $this->getSession(); });
}
$session = $session ?? ($this->container && $this->container->has('initialized_session') ? $this->container->get('initialized_session') : null);

View File

@ -22,12 +22,14 @@ use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\EventListener\AbstractSessionListener;
use Symfony\Component\HttpKernel\EventListener\SessionListener;
use Symfony\Component\HttpKernel\Exception\UnexpectedSessionUsageException;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\KernelInterface;
class SessionListenerTest extends TestCase
{
@ -182,6 +184,38 @@ class SessionListenerTest extends TestCase
$this->assertLessThanOrEqual((new \DateTime('now', new \DateTimeZone('UTC'))), (new \DateTime($response->headers->get('Expires'))));
}
public function testGetSessionIsCalledOnce()
{
$session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
$sessionStorage = $this->getMockBuilder(NativeSessionStorage::class)->getMock();
$kernel = $this->getMockBuilder(KernelInterface::class)->getMock();
$sessionStorage->expects($this->once())
->method('setOptions')
->with(['cookie_secure' => true]);
$requestStack = new RequestStack();
$requestStack->push($masterRequest = new Request([], [], [], [], [], ['HTTPS' => 'on']));
$container = new Container();
$container->set('session_storage', $sessionStorage);
$container->set('session', $session);
$container->set('request_stack', $requestStack);
$event = new GetResponseEvent($kernel, $masterRequest, HttpKernelInterface::MASTER_REQUEST);
$listener = new SessionListener($container);
$listener->onKernelRequest($event);
$subRequest = $masterRequest->duplicate();
// at this point both master and subrequest have a closure to build the session
$masterRequest->getSession();
// calling the factory on the subRequest should not trigger a second call to storage->sesOptions()
$subRequest->getSession();
}
public function testSessionUsageExceptionIfStatelessAndSessionUsed()
{
$session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();

View File

@ -476,6 +476,10 @@ class ProcessTest extends TestCase
$this->markTestSkipped('Windows does not have /dev/tty support');
}
if (!Process::isTtySupported()) {
$this->markTestSkipped('There is no TTY support');
}
$process = $this->getProcess('echo "foo" >> /dev/null && '.$this->getProcessForCode('usleep(100000);')->getCommandLine());
$process->setTty(true);
$process->start();
@ -491,6 +495,10 @@ class ProcessTest extends TestCase
$this->markTestSkipped('Windows does have /dev/tty support');
}
if (!Process::isTtySupported()) {
$this->markTestSkipped('There is no TTY support');
}
$process = $this->getProcess('echo "foo" >> /dev/null');
$process->setTty(true);
$process->run();
@ -1433,16 +1441,7 @@ class ProcessTest extends TestCase
$p = Process::fromShellCommandline(sprintf('"%s" -r %s "a" "" "b"', self::$phpBin, escapeshellarg('print_r($argv);')));
$p->run();
$expected = <<<EOTXT
Array
(
[0] => -
[1] => a
[2] =>
[3] => b
)
EOTXT;
$expected = "Array\n(\n [0] => -\n [1] => a\n [2] => \n [3] => b\n)\n";
$this->assertSame($expected, str_replace('Standard input code', '-', $p->getOutput()));
}

View File

@ -8,7 +8,7 @@
</trans-unit>
<trans-unit id="2">
<source>Authentication credentials could not be found.</source>
<target>Authentication credentials could not be found.</target>
<target>פרטי זיהוי לא נמצאו.</target>
</trans-unit>
<trans-unit id="3">
<source>Authentication request could not be processed due to a system problem.</source>
@ -16,23 +16,23 @@
</trans-unit>
<trans-unit id="4">
<source>Invalid credentials.</source>
<target>שם משתמש או סיסמא שגויים</target>
<target>שם משתמש או סיסמא שגויים.</target>
</trans-unit>
<trans-unit id="5">
<source>Cookie has already been used by someone else.</source>
<target>Cookie has already been used by someone else.</target>
<target>עוגיה כבר שומשה.</target>
</trans-unit>
<trans-unit id="6">
<source>Not privileged to request the resource.</source>
<target>Not privileged to request the resource.</target>
<target>אין הרשאה מתאימה.</target>
</trans-unit>
<trans-unit id="7">
<source>Invalid CSRF token.</source>
<target>Invalid CSRF token.</target>
<target>אסימון CSRF לא חוקי.</target>
</trans-unit>
<trans-unit id="9">
<source>No authentication provider found to support the authentication token.</source>
<target>No authentication provider found to support the authentication token.</target>
<target>לא נמצא ספק אימות המתאימה לבקשה.</target>
</trans-unit>
<trans-unit id="10">
<source>No session available, it either timed out or cookies are not enabled.</source>
@ -40,11 +40,11 @@
</trans-unit>
<trans-unit id="11">
<source>No token could be found.</source>
<target>No token could be found.</target>
<target>הטוקן לא נמצא.</target>
</trans-unit>
<trans-unit id="12">
<source>Username could not be found.</source>
<target>שם משתמש לא נמצא במערכת</target>
<target>שם משתמש לא נמצא.</target>
</trans-unit>
<trans-unit id="13">
<source>Account has expired.</source>
@ -52,7 +52,7 @@
</trans-unit>
<trans-unit id="14">
<source>Credentials have expired.</source>
<target>פרטי התחברות פקעו תוקף</target>
<target>פרטי התחברות פקעו תוקף.</target>
</trans-unit>
<trans-unit id="15">
<source>Account is disabled.</source>
@ -62,6 +62,14 @@
<source>Account is locked.</source>
<target>החשבון נעול.</target>
</trans-unit>
<trans-unit id="17">
<source>Too many failed login attempts, please try again later.</source>
<target>יותר מדי ניסיונות כניסה כושלים, אנא נסה שוב מאוחר יותר.</target>
</trans-unit>
<trans-unit id="18">
<source>Invalid or expired login link.</source>
<target>קישור כניסה לא חוקי או שפג תוקפו.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -366,6 +366,26 @@
<source>This value should be between {{ min }} and {{ max }}.</source>
<target>הערך חייב להיות בין {{ min }} ו- {{ max }}.</target>
</trans-unit>
<trans-unit id="95">
<source>This value is not a valid hostname.</source>
<target>ערך זה אינו שם מארח חוקי.</target>
</trans-unit>
<trans-unit id="96">
<source>The number of elements in this collection should be a multiple of {{ compared_value }}.</source>
<target>מספר האלמנטים באוסף זה צריך להיות מכפיל של {{ compared_value }}.</target>
</trans-unit>
<trans-unit id="97">
<source>This value should satisfy at least one of the following constraints:</source>
<target>ערך זה אמור לעמוד לפחות באחד התנאים הבאים:</target>
</trans-unit>
<trans-unit id="98">
<source>Each element of this collection should satisfy its own set of constraints.</source>
<target>כל אלמנט באוסף זה אמור לעמוד בקבוצת התנאים שלו.</target>
</trans-unit>
<trans-unit id="99">
<source>This value is not a valid International Securities Identification Number (ISIN).</source>
<target>ערך זה אינו מספר זיהוי ניירות ערך בינלאומי תקף (ISIN).</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -131,20 +131,20 @@
<target>Энэ утга зөвхөн тоо байна.</target>
</trans-unit>
<trans-unit id="36">
<source>This value is not a valid country.</source>
<target>Энэ утга үнэн бодит улс биш байна.</target>
</trans-unit>
<trans-unit id="37">
<source>This file is not a valid image.</source>
<target>Файл зураг биш байна.</target>
</trans-unit>
<trans-unit id="38">
<trans-unit id="37">
<source>This is not a valid IP address.</source>
<target>IP хаяг зөв биш байна.</target>
</trans-unit>
<trans-unit id="39">
<trans-unit id="38">
<source>This value is not a valid language.</source>
<target>Энэ утга үнэн зөв хэл биш байна .</target>
<target>Энэ утга үнэн зөв хэл биш байна.</target>
</trans-unit>
<trans-unit id="39">
<source>This value is not a valid locale.</source>
<target>Энэ утга үнэн зөв байршил биш байна.</target>
</trans-unit>
<trans-unit id="40">
<source>This value is not a valid country.</source>