Merge branch '4.4'

* 4.4:
  fixed deprecation message
  [Translation] deprecate passing a null locale
  [Intl] Exclude root language
  [Stopwatch] Deprecate passing null in Section::get() method.
  [Mime] add check for openssl when using SMime
  [HttpClient] Add $response->toStream() to cast responses to regular PHP streams
This commit is contained in:
Fabien Potencier 2019-07-08 09:27:27 +02:00
commit a6f26a8279
125 changed files with 383 additions and 123 deletions

View File

@ -108,6 +108,11 @@ Security
* Implementations of `PasswordEncoderInterface` and `UserPasswordEncoderInterface` should add a new `needsRehash()` method
Stopwatch
---------
* Deprecated passing `null` as 1st (`$id`) argument of `Section::get()` method, pass a valid child section identifier instead.
TwigBridge
----------

View File

@ -36,7 +36,7 @@ class FlattenException
private $file;
private $line;
public static function createFromThrowable(\Throwable $exception, ?int $statusCode = null, array $headers = []): self
public static function createFromThrowable(\Throwable $exception, int $statusCode = null, array $headers = []): self
{
$e = new static();
$e->setMessage($exception->getMessage());

View File

@ -4,9 +4,11 @@ CHANGELOG
4.4.0
-----
* made `Psr18Client` implement relevant PSR-17 factories
* added `StreamWrapper`
* added `HttplugClient`
* added support for NTLM authentication
* added `$response->toStream()` to cast responses to regular PHP streams
* made `Psr18Client` implement relevant PSR-17 factories and have streaming responses
4.3.0
-----

View File

@ -25,6 +25,8 @@ use Psr\Http\Message\StreamFactoryInterface;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriFactoryInterface;
use Psr\Http\Message\UriInterface;
use Symfony\Component\HttpClient\Response\ResponseTrait;
use Symfony\Component\HttpClient\Response\StreamWrapper;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
@ -90,7 +92,9 @@ final class Psr18Client implements ClientInterface, RequestFactoryInterface, Str
}
}
return $psrResponse->withBody($this->streamFactory->createStream($response->getContent(false)));
$body = isset(class_uses($response)[ResponseTrait::class]) ? $response->toStream() : StreamWrapper::createResource($response, $this->client);
return $psrResponse->withBody($this->streamFactory->createStreamFromResource($body));
} catch (TransportExceptionInterface $e) {
if ($e instanceof \InvalidArgumentException) {
throw new Psr18RequestException($e, $request);

View File

@ -178,6 +178,19 @@ trait ResponseTrait
$this->close();
}
/**
* Casts the response to a PHP stream resource.
*
* @return resource|null
*/
public function toStream()
{
// Ensure headers arrived
$this->getStatusCode();
return StreamWrapper::createResource($this, null, $this->content, $this->handle && 'stream' === get_resource_type($this->handle) ? $this->handle : null);
}
/**
* Closes the response and all its network handles.
*/

View File

@ -0,0 +1,231 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\HttpClient\Response;
use Symfony\Contracts\HttpClient\Exception\ExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;
/**
* Allows turning ResponseInterface instances to PHP streams.
*
* @author Nicolas Grekas <p@tchwork.com>
*/
class StreamWrapper
{
/** @var resource */
public $context;
/** @var HttpClientInterface */
private $client;
/** @var ResponseInterface */
private $response;
/** @var resource|null */
private $content;
/** @var resource|null */
private $handle;
private $eof = false;
private $offset = 0;
/**
* Creates a PHP stream resource from a ResponseInterface.
*
* @param resource|null $contentBuffer The seekable resource where the response body is buffered
* @param resource|null $selectHandle The resource handle that should be monitored when
* stream_select() is used on the created stream
*
* @return resource
*/
public static function createResource(ResponseInterface $response, HttpClientInterface $client = null, $contentBuffer = null, $selectHandle = null)
{
if (null === $client && !method_exists($response, 'stream')) {
throw new \InvalidArgumentException(sprintf('Providing a client to "%s()" is required when the response doesn\'t have any "stream()" method.', __CLASS__));
}
if (false === stream_wrapper_register('symfony', __CLASS__, STREAM_IS_URL)) {
throw new \RuntimeException(error_get_last()['message'] ?? 'Registering the "symfony" stream wrapper failed.');
}
try {
$context = [
'client' => $client ?? $response,
'response' => $response,
'content' => $contentBuffer,
'handle' => $selectHandle,
];
return fopen('symfony://'.$response->getInfo('url'), 'r', false, stream_context_create(['symfony' => $context])) ?: null;
} finally {
stream_wrapper_unregister('symfony');
}
}
public function stream_open(string $path, string $mode, int $options): bool
{
if ('r' !== $mode) {
if ($options & STREAM_REPORT_ERRORS) {
trigger_error(sprintf('Invalid mode "%s": only "r" is supported.', $mode), E_USER_WARNING);
}
return false;
}
$context = stream_context_get_options($this->context)['symfony'] ?? null;
$this->client = $context['client'] ?? null;
$this->response = $context['response'] ?? null;
$this->content = $context['content'] ?? null;
$this->handle = $context['handle'] ?? null;
$this->context = null;
if (null !== $this->client && null !== $this->response) {
return true;
}
if ($options & STREAM_REPORT_ERRORS) {
trigger_error('Missing options "client" or "response" in "symfony" stream context.', E_USER_WARNING);
}
return false;
}
public function stream_read(int $count)
{
if (null !== $this->content) {
// Empty the internal activity list
foreach ($this->client->stream([$this->response], 0) as $chunk) {
try {
$chunk->isTimeout();
} catch (ExceptionInterface $e) {
trigger_error($e->getMessage(), E_USER_WARNING);
return false;
}
}
if (0 !== fseek($this->content, $this->offset)) {
return false;
}
if ('' !== $data = fread($this->content, $count)) {
fseek($this->content, 0, SEEK_END);
$this->offset += \strlen($data);
return $data;
}
}
foreach ($this->client->stream([$this->response]) as $chunk) {
try {
$this->eof = true;
$this->eof = !$chunk->isTimeout();
$this->eof = $chunk->isLast();
if ('' !== $data = $chunk->getContent()) {
$this->offset += \strlen($data);
return $data;
}
} catch (ExceptionInterface $e) {
trigger_error($e->getMessage(), E_USER_WARNING);
return false;
}
}
return '';
}
public function stream_tell(): int
{
return $this->offset;
}
public function stream_eof(): bool
{
return $this->eof;
}
public function stream_seek(int $offset, int $whence = SEEK_SET): bool
{
if (null === $this->content || 0 !== fseek($this->content, 0, SEEK_END)) {
return false;
}
$size = ftell($this->content);
if (SEEK_CUR === $whence) {
$offset += $this->offset;
}
if (SEEK_END === $whence || $size < $offset) {
foreach ($this->client->stream([$this->response]) as $chunk) {
try {
// Chunks are buffered in $this->content already
$size += \strlen($chunk->getContent());
if (SEEK_END !== $whence && $offset <= $size) {
break;
}
} catch (ExceptionInterface $e) {
trigger_error($e->getMessage(), E_USER_WARNING);
return false;
}
}
if (SEEK_END === $whence) {
$offset += $size;
}
}
if (0 <= $offset && $offset <= $size) {
$this->eof = false;
$this->offset = $offset;
return true;
}
return false;
}
public function stream_cast(int $castAs)
{
if (STREAM_CAST_FOR_SELECT === $castAs) {
return $this->handle ?? false;
}
return false;
}
public function stream_stat(): array
{
return [
'dev' => 0,
'ino' => 0,
'mode' => 33060,
'nlink' => 0,
'uid' => 0,
'gid' => 0,
'rdev' => 0,
'size' => (int) ($this->response->getHeaders(false)['content-length'][0] ?? 0),
'atime' => 0,
'mtime' => strtotime($this->response->getHeaders(false)['last-modified'][0] ?? '') ?: 0,
'ctime' => 0,
'blksize' => 0,
'blocks' => 0,
];
}
}

View File

@ -14,7 +14,6 @@ namespace Symfony\Component\HttpClient\Tests;
use Psr\Log\AbstractLogger;
use Symfony\Component\HttpClient\CurlHttpClient;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\Test\HttpClientTestCase;
/**
* @requires extension curl

View File

@ -0,0 +1,35 @@
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Component\HttpClient\Tests;
use Symfony\Contracts\HttpClient\Test\HttpClientTestCase as BaseHttpClientTestCase;
abstract class HttpClientTestCase extends BaseHttpClientTestCase
{
public function testToStream()
{
$client = $this->getHttpClient(__FUNCTION__);
$response = $client->request('GET', 'http://localhost:8057');
$stream = $response->toStream();
$this->assertSame("{\n \"SER", fread($stream, 10));
$this->assertSame('VER_PROTOCOL', fread($stream, 12));
$this->assertFalse(feof($stream));
$this->assertTrue(rewind($stream));
$this->assertInternalType('array', json_decode(fread($stream, 1024), true));
$this->assertSame('', fread($stream, 1));
$this->assertTrue(feof($stream));
}
}

View File

@ -17,7 +17,6 @@ use Symfony\Component\HttpClient\NativeHttpClient;
use Symfony\Component\HttpClient\Response\MockResponse;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\ResponseInterface;
use Symfony\Contracts\HttpClient\Test\HttpClientTestCase;
class MockHttpClientTest extends HttpClientTestCase
{
@ -31,13 +30,13 @@ class MockHttpClientTest extends HttpClientTestCase
];
$body = '{
"SERVER_PROTOCOL": "HTTP/1.1",
"SERVER_NAME": "127.0.0.1",
"REQUEST_URI": "/",
"REQUEST_METHOD": "GET",
"HTTP_FOO": "baR",
"HTTP_HOST": "localhost:8057"
}';
"SERVER_PROTOCOL": "HTTP/1.1",
"SERVER_NAME": "127.0.0.1",
"REQUEST_URI": "/",
"REQUEST_METHOD": "GET",
"HTTP_FOO": "baR",
"HTTP_HOST": "localhost:8057"
}';
$client = new NativeHttpClient();
@ -97,6 +96,7 @@ class MockHttpClientTest extends HttpClientTestCase
$responses[] = $mock;
break;
case 'testToStream':
case 'testBadRequestBody':
case 'testOnProgressCancel':
case 'testOnProgressError':

View File

@ -13,7 +13,6 @@ namespace Symfony\Component\HttpClient\Tests;
use Symfony\Component\HttpClient\NativeHttpClient;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Symfony\Contracts\HttpClient\Test\HttpClientTestCase;
class NativeHttpClientTest extends HttpClientTestCase
{

View File

@ -6,6 +6,11 @@ CHANGELOG
* removed `ResourceBundle` namespace
4.4.0
-----
* excluded language code `root`
4.3.0
-----

View File

@ -84,6 +84,7 @@ class LanguageDataGenerator extends AbstractDataGenerator
'zh' => 'zho',
];
private static $blacklist = [
'root' => true, // Absolute root language
'mul' => true, // Multiple languages
'mis' => true, // Uncoded language
'und' => true, // Unknown language

View File

@ -295,7 +295,6 @@
"rn": "Rundi",
"ro": "Roemeens",
"rof": "Rombo",
"root": "Root",
"ru": "Russies",
"rup": "Aromanies",
"rw": "Rwandees",

View File

@ -351,7 +351,6 @@
"ro": "ሮማኒያን",
"ro_MD": "ሞልዳቪያንኛ",
"rof": "ሮምቦ",
"root": "ሩት",
"ru": "ራሽያኛ",
"rup": "አሮማንያን",
"rw": "ኪንያርዋንድኛ",

View File

@ -393,7 +393,6 @@
"ro_MD": "المولدوفية",
"rof": "الرومبو",
"rom": "الغجرية",
"root": "الجذر",
"ru": "الروسية",
"rup": "الأرومانيان",
"rw": "الكينيارواندا",

View File

@ -288,7 +288,6 @@
"ro": "ৰোমানীয়",
"ro_MD": "মোল্ডাভিয়ান",
"rof": "ৰোম্বো",
"root": "ৰুট",
"ru": "ৰাছিয়ান",
"rup": "আৰোমানীয়",
"rw": "কিনয়াৰোৱাণ্ডা",

View File

@ -380,7 +380,6 @@
"ro_MD": "moldav",
"rof": "rombo",
"rom": "roman",
"root": "rut",
"ru": "rus",
"rup": "aroman",
"rw": "kinyarvanda",

View File

@ -285,7 +285,6 @@
"rn": "рунди",
"ro": "румын",
"rof": "ромбо",
"root": "рут",
"ru": "рус",
"rup": "ароман",
"rw": "кинјарванда",

View File

@ -297,7 +297,6 @@
"ro": "румынская",
"ro_MD": "малдаўская",
"rof": "ромба",
"root": "корань",
"ru": "руская",
"rup": "арумунская",
"rw": "руанда",

View File

@ -364,7 +364,6 @@
"ro_MD": "молдовски",
"rof": "ромбо",
"rom": "ромски",
"root": "роот",
"ru": "руски",
"rup": "арумънски",
"rw": "киняруанда",

View File

@ -382,7 +382,6 @@
"ro_MD": "মলদাভিয়",
"rof": "রম্বো",
"rom": "রোমানি",
"root": "মূল",
"ru": "রুশ",
"rup": "আরমেনিয়ান",
"rw": "কিনয়ারোয়ান্ডা",

View File

@ -399,7 +399,6 @@
"ro_MD": "moldoveg",
"rof": "rombo",
"rom": "romanieg",
"root": "gwrizienn",
"ru": "rusianeg",
"rup": "aroumaneg",
"rw": "kinyarwanda",

View File

@ -377,7 +377,6 @@
"ro_MD": "moldavski",
"rof": "rombo",
"rom": "romani",
"root": "korijenski",
"ru": "ruski",
"rup": "arumunski",
"rw": "kinjaruanda",

View File

@ -319,7 +319,6 @@
"ro": "румунски",
"ro_MD": "молдавски",
"rom": "романи",
"root": "рут",
"ru": "руски",
"rup": "ароманијски",
"rw": "кинјаруанда",

View File

@ -426,7 +426,6 @@
"ro_MD": "moldau",
"rof": "rombo",
"rom": "romaní",
"root": "arrel",
"ru": "rus",
"rup": "aromanès",
"rw": "ruandès",

View File

@ -291,7 +291,6 @@
"ro": "румынийн",
"ro_MD": "молдавийн",
"rof": "ромбо",
"root": "ораман мотт",
"ru": "оьрсийн",
"rup": "аруминийн",
"rw": "киньяруанда",

View File

@ -447,7 +447,6 @@
"ro_MD": "moldavština",
"rof": "rombo",
"rom": "romština",
"root": "kořen",
"rtm": "rotumanština",
"ru": "ruština",
"rue": "rusínština",

View File

@ -389,7 +389,6 @@
"ro_MD": "Moldofeg",
"rof": "Rombo",
"rom": "Romani",
"root": "Y Gwraidd",
"rtm": "Rotumaneg",
"ru": "Rwseg",
"rup": "Aromaneg",

View File

@ -394,7 +394,6 @@
"ro_MD": "moldovisk",
"rof": "rombo",
"rom": "romani",
"root": "rod",
"ru": "russisk",
"rup": "arumænsk",
"rw": "kinyarwanda",

View File

@ -443,7 +443,6 @@
"ro_MD": "Moldauisch",
"rof": "Rombo",
"rom": "Romani",
"root": "Root",
"rtm": "Rotumanisch",
"ru": "Russisch",
"rue": "Russinisch",

View File

@ -392,7 +392,6 @@
"ro_MD": "Μολδαβικά",
"rof": "Ρόμπο",
"rom": "Ρομανί",
"root": "Ρίζα",
"ru": "Ρωσικά",
"rup": "Αρομανικά",
"rw": "Κινιαρουάντα",

View File

@ -456,7 +456,6 @@
"ro_MD": "Moldavian",
"rof": "Rombo",
"rom": "Romany",
"root": "Root",
"rtm": "Rotuman",
"ru": "Russian",
"rue": "Rusyn",

View File

@ -395,7 +395,6 @@
"ro_MD": "moldavo",
"rof": "rombo",
"rom": "romaní",
"root": "raíz",
"ru": "ruso",
"rup": "arrumano",
"rw": "kinyarwanda",

View File

@ -448,7 +448,6 @@
"ro_MD": "moldova",
"rof": "rombo",
"rom": "mustlaskeel",
"root": "root",
"rtm": "rotuma",
"ru": "vene",
"rue": "russiini",

View File

@ -293,7 +293,6 @@
"ro": "errumaniera",
"ro_MD": "moldaviera",
"rof": "romboera",
"root": "erroa",
"ru": "errusiera",
"rup": "aromaniera",
"rw": "kinyaruanda",

View File

@ -393,7 +393,6 @@
"ro_MD": "مولداویایی",
"rof": "رومبویی",
"rom": "رومانویی",
"root": "ریشه",
"ru": "روسی",
"rup": "آرومانی",
"rw": "کینیارواندایی",

View File

@ -455,7 +455,6 @@
"ro_MD": "moldova",
"rof": "rombo",
"rom": "romani",
"root": "juuri",
"rtm": "rotuma",
"ru": "venäjä",
"rue": "ruteeni",

View File

@ -289,7 +289,6 @@
"ro": "rumenskt",
"ro_MD": "moldaviskt",
"rof": "rombo",
"root": "root",
"ru": "russiskt",
"rup": "aromenskt",
"rw": "kinyarwanda",

View File

@ -455,7 +455,6 @@
"ro_MD": "moldave",
"rof": "rombo",
"rom": "romani",
"root": "racine",
"rtm": "rotuman",
"ru": "russe",
"rue": "ruthène",

View File

@ -378,7 +378,6 @@
"ro_MD": "Moldavysk",
"rof": "Rombo",
"rom": "Romani",
"root": "Root",
"ru": "Russysk",
"rup": "Aromaniaansk",
"rw": "Kinyarwanda",

View File

@ -333,7 +333,6 @@
"ro_MD": "Moldáivis",
"rof": "rof",
"rom": "Romainis",
"root": "root",
"ru": "Rúisis",
"rup": "Arómáinis",
"rw": "Ciniaruaindis",

View File

@ -443,7 +443,6 @@
"ro_MD": "Moldobhais",
"rof": "Rombo",
"rom": "Romanais",
"root": "Root",
"ru": "Ruisis",
"rue": "Rusyn",
"rug": "Roviana",

View File

@ -297,7 +297,6 @@
"ro": "romanés",
"ro_MD": "moldavo",
"rof": "rombo",
"root": "raíz",
"ru": "ruso",
"rup": "aromanés",
"rw": "kiñaruanda",

View File

@ -393,7 +393,6 @@
"ro_MD": "મોલડાવિયન",
"rof": "રોમ્બો",
"rom": "રોમાની",
"root": "રૂટ",
"ru": "રશિયન",
"rup": "અરોમેનિયન",
"rw": "કિન્યારવાન્ડા",

View File

@ -386,7 +386,6 @@
"ro_MD": "מולדבית",
"rof": "רומבו",
"rom": "רומאני",
"root": "רוט",
"ru": "רוסית",
"rup": "ארומנית",
"rw": "קנירואנדית",

View File

@ -380,7 +380,6 @@
"ro_MD": "मोलडावियन",
"rof": "रोम्बो",
"rom": "रोमानी",
"root": "रूट",
"ru": "रूसी",
"rup": "अरोमानियन",
"rw": "किन्यारवांडा",

View File

@ -397,7 +397,6 @@
"ro_MD": "moldavski",
"rof": "rombo",
"rom": "romski",
"root": "korijenski",
"ru": "ruski",
"rup": "aromunski",
"rw": "kinyarwanda",

View File

@ -396,7 +396,6 @@
"ro_MD": "moldvai",
"rof": "rombo",
"rom": "roma",
"root": "ősi",
"ru": "orosz",
"rup": "aromán",
"rw": "kinyarvanda",

View File

@ -334,7 +334,6 @@
"ro_MD": "մոլդովերեն",
"rof": "ռոմբո",
"rom": "ռոմաներեն",
"root": "ռուտերեն",
"rtm": "ռոտուման",
"ru": "ռուսերեն",
"rue": "ռուսիներեն",

View File

@ -286,7 +286,6 @@
"ro": "romaniano",
"ro_MD": "moldavo",
"rof": "rombo",
"root": "radice",
"ru": "russo",
"rup": "aromaniano",
"rw": "kinyarwanda",

View File

@ -402,7 +402,6 @@
"ro_MD": "Moldavia",
"rof": "Rombo",
"rom": "Romani",
"root": "Root",
"rtm": "Rotuma",
"ru": "Rusia",
"rup": "Aromania",

View File

@ -402,7 +402,6 @@
"ro_MD": "Moldavia",
"rof": "Rombo",
"rom": "Romani",
"root": "Root",
"rtm": "Rotuma",
"ru": "Rusia",
"rup": "Aromania",

View File

@ -385,7 +385,6 @@
"ro_MD": "moldóvska",
"rof": "rombó",
"rom": "romaní",
"root": "rót",
"ru": "rússneska",
"rup": "arúmenska",
"rw": "kínjarvanda",

View File

@ -450,7 +450,6 @@
"ro_MD": "moldavo",
"rof": "rombo",
"rom": "romani",
"root": "root",
"rtm": "rotumano",
"ru": "russo",
"rue": "ruteno",

View File

@ -386,7 +386,6 @@
"ro_MD": "מולדבית",
"rof": "רומבו",
"rom": "רומאני",
"root": "רוט",
"ru": "רוסית",
"rup": "ארומנית",
"rw": "קנירואנדית",

View File

@ -448,7 +448,6 @@
"ro_MD": "モルダビア語",
"rof": "ロンボ語",
"rom": "ロマーニー語",
"root": "ルート",
"rtm": "ロツマ語",
"ru": "ロシア語",
"rue": "ルシン語",

View File

@ -360,7 +360,6 @@
"ro_MD": "მოლდავური",
"rof": "რომბო",
"rom": "ბოშური",
"root": "ძირეული ენა",
"ru": "რუსული",
"rup": "არომანული",
"rw": "კინიარუანდა",

View File

@ -294,7 +294,6 @@
"ro": "румын тілі",
"ro_MD": "молдован тілі",
"rof": "ромбо тілі",
"root": "ата тіл",
"ru": "орыс тілі",
"rup": "арумын тілі",
"rw": "киньяруанда тілі",

View File

@ -282,7 +282,6 @@
"ro": "រូម៉ានី",
"ro_MD": "ម៉ុលដាវី",
"rof": "រុមបូ",
"root": "រូត",
"ru": "រុស្ស៊ី",
"rup": "អារ៉ូម៉ានី",
"rw": "គិនយ៉ាវ៉ាន់ដា",

View File

@ -382,7 +382,6 @@
"ro_MD": "ಮಾಲ್ಡೇವಿಯನ್",
"rof": "ರೊಂಬೊ",
"rom": "ರೋಮಾನಿ",
"root": "ರೂಟ್",
"ru": "ರಷ್ಯನ್",
"rup": "ಅರೋಮಾನಿಯನ್",
"rw": "ಕಿನ್ಯಾರ್‌ವಾಂಡಾ",

View File

@ -400,7 +400,6 @@
"ro_MD": "몰도바어",
"rof": "롬보어",
"rom": "집시어",
"root": "어근",
"ru": "러시아어",
"rue": "루신어",
"rup": "아로마니아어",

View File

@ -328,7 +328,6 @@
"ro": "رومٲنی",
"ro_MD": "مولداوِیَن",
"rom": "رومَنی",
"root": "روٗٹ",
"ru": "روٗسی",
"rup": "اَرومانی",
"rw": "کِنیاوِندا",

View File

@ -287,7 +287,6 @@
"ro": "румынча",
"ro_MD": "молдованча",
"rof": "ромбочо",
"root": "түпкү",
"ru": "орусча",
"rup": "аромунча",
"rw": "руандача",

View File

@ -447,7 +447,6 @@
"ro_MD": "Moldawesch",
"rof": "Rombo",
"rom": "Romani",
"root": "Root",
"rtm": "Rotumanesch",
"ru": "Russesch",
"rue": "Russinesch",

View File

@ -388,7 +388,6 @@
"ro_MD": "ໂມດາວຽນ",
"rof": "ຣົມໂບ",
"rom": "ໂຣເມນີ",
"root": "ລູດ",
"ru": "ລັດເຊຍ",
"rup": "ອາໂຣມານຽນ",
"rw": "ຄິນຢາວານດາ",

View File

@ -454,7 +454,6 @@
"ro_MD": "moldavų",
"rof": "rombo",
"rom": "romų",
"root": "rūt",
"rtm": "rotumanų",
"ru": "rusų",
"rue": "rusinų",

View File

@ -381,7 +381,6 @@
"ro_MD": "moldāvu",
"rof": "rombo",
"rom": "čigānu",
"root": "sakne",
"ru": "krievu",
"rup": "aromūnu",
"rw": "kiņaruanda",

View File

@ -457,7 +457,6 @@
"ro_MD",
"rof",
"rom",
"root",
"rtm",
"ru",
"rue",

View File

@ -453,7 +453,6 @@
"ro_MD": "молдавски",
"rof": "ромбо",
"rom": "ромски",
"root": "корен",
"rtm": "ротумански",
"ru": "руски",
"rue": "русински",

View File

@ -394,7 +394,6 @@
"ro_MD": "മോൾഡാവിയൻ",
"rof": "റോംബോ",
"rom": "റൊമാനി",
"root": "മൂലഭാഷ",
"ru": "റഷ്യൻ",
"rup": "ആരോമാനിയൻ",
"rw": "കിന്യാർവാണ്ട",

View File

@ -291,7 +291,6 @@
"ro": "румын",
"ro_MD": "молдав",
"rof": "ромбо",
"root": "рут",
"ru": "орос",
"rup": "ароманы",
"rw": "киньяруанда",

View File

@ -385,7 +385,6 @@
"ro": "română",
"rof": "rombo",
"rom": "romani",
"root": "root",
"ru": "rusă",
"rup": "aromână",
"rw": "kinyarwanda",

View File

@ -382,7 +382,6 @@
"ro_MD": "मोल्डाव्हियन",
"rof": "रोम्बो",
"rom": "रोमानी",
"root": "रूट",
"ru": "रशियन",
"rup": "अरोमानियन",
"rw": "किन्यार्वान्डा",

View File

@ -334,7 +334,6 @@
"ro": "Romania",
"ro_MD": "Moldavia",
"rof": "Rombo",
"root": "Root",
"ru": "Rusia",
"rup": "Aromanian",
"rw": "Kinyarwanda",

View File

@ -371,7 +371,6 @@
"ro_MD": "Moldovan",
"rof": "Rombo",
"rom": "Romanesk",
"root": "Root",
"ru": "Russu",
"rup": "Aromanjan",
"rw": "Kinjarwanda",

View File

@ -308,7 +308,6 @@
"ro": "ရိုမေနီယား",
"ro_MD": "မော်လဒိုဗာ",
"rof": "ရွမ်ဘို",
"root": "မူလရင်းမြစ်",
"ru": "ရုရှ",
"rup": "အာရိုမန်းနီးယန်း",
"rw": "ကင်ရာဝန်ဒါ",

View File

@ -441,7 +441,6 @@
"ro_MD": "moldovsk",
"rof": "rombo",
"rom": "romani",
"root": "rot",
"rtm": "rotumansk",
"ru": "russisk",
"rue": "rusinsk",

View File

@ -441,7 +441,6 @@
"ro": "रोमानियाली",
"ro_MD": "मोल्डाभियाली",
"rof": "रोम्बो",
"root": "रुट",
"ru": "रसियाली",
"rup": "अरोमानीयाली",
"rw": "किन्यारवान्डा",

View File

@ -439,7 +439,6 @@
"ro": "Roemeens",
"rof": "Rombo",
"rom": "Romani",
"root": "Root",
"rtm": "Rotumaans",
"ru": "Russisch",
"rue": "Roetheens",

View File

@ -363,7 +363,6 @@
"ro_MD": "moldavisk",
"rof": "rombo",
"rom": "romani",
"root": "rot",
"ru": "russisk",
"rup": "arumensk",
"rw": "kinjarwanda",

View File

@ -441,7 +441,6 @@
"ro_MD": "moldovsk",
"rof": "rombo",
"rom": "romani",
"root": "rot",
"rtm": "rotumansk",
"ru": "russisk",
"rue": "rusinsk",

View File

@ -373,7 +373,6 @@
"ro_MD": "ମୋଲଡୋଭିଆନ୍",
"rof": "ରୋମ୍ବୋ",
"rom": "ରୋମାନି",
"root": "ରୋଟ୍",
"ru": "ରୁଷିୟ",
"rup": "ଆରୋମାନିଆନ୍",
"rw": "କିନ୍ୟାରୱାଣ୍ଡା",

View File

@ -302,7 +302,6 @@
"ro": "ਰੋਮਾਨੀਆਈ",
"ro_MD": "ਮੋਲਡਾਵੀਆਈ",
"rof": "ਰੋਮਬੋ",
"root": "ਰੂਟ",
"ru": "ਰੂਸੀ",
"rup": "ਅਰੋਮੀਨੀਆਈ",
"rw": "ਕਿਨਿਆਰਵਾਂਡਾ",

View File

@ -455,7 +455,6 @@
"ro_MD": "mołdawski",
"rof": "rombo",
"rom": "cygański",
"root": "język rdzenny",
"rtm": "rotumański",
"ru": "rosyjski",
"rue": "rusiński",

View File

@ -289,7 +289,6 @@
"ro": "رومانیایی",
"ro_MD": "مولداویایی",
"rof": "رومبو",
"root": "روټ",
"ru": "روسي",
"rup": "اروماني",
"rw": "کینیارونډا",

View File

@ -385,7 +385,6 @@
"ro_MD": "moldávio",
"rof": "rombo",
"rom": "romani",
"root": "raiz",
"ru": "russo",
"rup": "aromeno",
"rw": "quiniaruanda",

View File

@ -78,7 +78,6 @@
"pt_BR": "português do Brasil",
"pt_PT": "português europeu",
"raj": "rajastanês",
"root": "root",
"se": "sami do norte",
"sga": "irlandês antigo",
"shu": "árabe do Chade",

View File

@ -385,7 +385,6 @@
"ro": "română",
"rof": "rombo",
"rom": "romani",
"root": "root",
"ru": "rusă",
"rup": "aromână",
"rw": "kinyarwanda",

View File

@ -396,7 +396,6 @@
"ro_MD": "молдавский",
"rof": "ромбо",
"rom": "цыганский",
"root": "праязык",
"ru": "русский",
"rup": "арумынский",
"rw": "киньяруанда",

View File

@ -288,7 +288,6 @@
"ro": "روماني",
"ro_MD": "مالديوي",
"rof": "رومبو",
"root": "روٽ",
"ru": "روسي",
"rup": "ارومينين",
"rw": "ڪنيار وانڊا",

View File

@ -372,7 +372,6 @@
"ro_MD": "moldavski",
"rof": "rombo",
"rom": "romski",
"root": "rut",
"ru": "ruski",
"rup": "cincarski",
"rw": "kinjaruanda",

View File

@ -296,7 +296,6 @@
"ro": "රොමේනියානු",
"ro_MD": "මොල්ඩවිආනු",
"rof": "රෝම්බෝ",
"root": "රූට්",
"ru": "රුසියානු",
"rup": "ඇරොමානියානු",
"rw": "කින්යර්වන්ඩා",

View File

@ -391,7 +391,6 @@
"ro_MD": "moldavčina",
"rof": "rombo",
"rom": "rómčina",
"root": "koreň",
"ru": "ruština",
"rup": "arumunčina",
"rw": "rwandčina",

View File

@ -377,7 +377,6 @@
"ro_MD": "moldavščina",
"rof": "rombo",
"rom": "romščina",
"root": "rootščina",
"ru": "ruščina",
"rup": "aromunščina",
"rw": "ruandščina",

View File

@ -294,7 +294,6 @@
"ro": "rumanisht",
"ro_MD": "moldavisht",
"rof": "romboisht",
"root": "rutisht",
"ru": "rusisht",
"rup": "vllahisht",
"rw": "kiniaruandisht",

View File

@ -372,7 +372,6 @@
"ro_MD": "молдавски",
"rof": "ромбо",
"rom": "ромски",
"root": "рут",
"ru": "руски",
"rup": "цинцарски",
"rw": "кињаруанда",

View File

@ -372,7 +372,6 @@
"ro_MD": "moldavski",
"rof": "rombo",
"rom": "romski",
"root": "rut",
"ru": "ruski",
"rup": "cincarski",
"rw": "kinjaruanda",

View File

@ -455,7 +455,6 @@
"ro_MD": "moldaviska",
"rof": "rombo",
"rom": "romani",
"root": "rot",
"rtm": "rotumänska",
"ru": "ryska",
"rue": "rusyn",

View File

@ -316,7 +316,6 @@
"rn": "Kirundi",
"ro": "Kiromania",
"rof": "Kirombo",
"root": "Kiroot",
"ru": "Kirusi",
"rup": "Kiaromania",
"rw": "Kinyarwanda",

View File

@ -387,7 +387,6 @@
"ro_MD": "மோல்டாவியன்",
"rof": "ரோம்போ",
"rom": "ரோமானி",
"root": "ரூட்",
"ru": "ரஷியன்",
"rup": "அரோமானியன்",
"rw": "கின்யாருவான்டா",

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