Merge branch 'stable22' into backport/31605/stable22

This commit is contained in:
Git'Fellow 2022-05-16 12:32:20 +02:00 committed by GitHub
commit 6d7ea6322d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2039 changed files with 15848 additions and 15235 deletions

View file

@ -42,30 +42,75 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@ -75,28 +120,47 @@ class ClassLoader
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
@ -111,9 +175,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@ -156,11 +222,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@ -204,8 +272,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
@ -220,10 +290,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
@ -243,6 +315,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
@ -265,6 +339,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@ -285,6 +361,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@ -305,6 +383,8 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
@ -324,6 +404,8 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
@ -403,6 +485,11 @@ class ClassLoader
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@ -474,6 +561,10 @@ class ClassLoader
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{

View file

@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
@ -228,7 +243,7 @@ class InstalledVersions
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
@ -242,7 +257,7 @@ class InstalledVersions
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@ -265,7 +280,7 @@ class InstalledVersions
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
@ -288,7 +303,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
@ -298,7 +313,7 @@ class InstalledVersions
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{

View file

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -23,20 +23,11 @@ class ComposerAutoloaderInitAccessibility
}
spl_autoload_register(array('ComposerAutoloaderInitAccessibility', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitAccessibility', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitAccessibility::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
require __DIR__ . '/autoload_static.php';
\Composer\Autoload\ComposerStaticInitAccessibility::getInitializer($loader)();
$loader->setClassMapAuthoritative(true);
$loader->register(true);

View file

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'name' => '__root__',
'dev' => false,
),
@ -16,7 +16,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'dev_requirement' => false,
),
),

View file

@ -0,0 +1,19 @@
OC.L10N.register(
"accessibility",
{
"Dark theme" : "Tema Oscuro",
"Enable dark theme" : "Habilitar el tema oscuro",
"A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Tema oscuro facilita la navegación, reduciendo el brillo y la luminosidad. Aún se encuentra en desarrollo, así que, por favor, comunique cualquier problema que encuentre.",
"High contrast mode" : "Modo de alto contraste",
"Enable high contrast mode" : "Habilitar modo de contraste alto",
"A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Modo de alto contraste facilita tu navegación. La calidad visual puede ser menor pero se incrementa la claridad.",
"Dyslexia font" : "Fuente para las personas con dislexia",
"Enable dyslexia font" : "Habilita la fuente para personas con dislexia",
"OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic es un tipo de letra libre diseñada para reducir algunos de los errores de lectura comunes causados por la dislexia.",
"Accessibility" : "Accesibilidad",
"Accessibility options for nextcloud" : "Opciones de accesibilidad para nexcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Provee múltiples opciones de accesibilidad para facilitar tu uso de Nextcloud",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "El acceso universal es muy importante para nosotros. Seguimos los estándares web y verificamos que todo sea utilizable inclusive sin ratón, y con software de asistencia como lectores de pantalla. Buscamos cumplir con las {guidelines}Guías de Accesibilidad de Contenido Web{linkend} 2.1 sobre nivel AA, incluso sobre nivel AAA para el tema de alto contraste.",
"If you find any issues, dont hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Si encuentras cualquier problema, no dudes en reportarlo en {issuetracker}nuestra lista de errores{linkend}. Y si deseas involucrarte, ¡únete a {designteam}nuestro equipo de diseño{linkend}!"
},
"nplurals=2; plural=(n != 1);");

View file

@ -0,0 +1,17 @@
{ "translations": {
"Dark theme" : "Tema Oscuro",
"Enable dark theme" : "Habilitar el tema oscuro",
"A dark theme to ease your eyes by reducing the overall luminosity and brightness. It is still under development, so please report any issues you may find." : "Tema oscuro facilita la navegación, reduciendo el brillo y la luminosidad. Aún se encuentra en desarrollo, así que, por favor, comunique cualquier problema que encuentre.",
"High contrast mode" : "Modo de alto contraste",
"Enable high contrast mode" : "Habilitar modo de contraste alto",
"A high contrast mode to ease your navigation. Visual quality will be reduced but clarity will be increased." : "Modo de alto contraste facilita tu navegación. La calidad visual puede ser menor pero se incrementa la claridad.",
"Dyslexia font" : "Fuente para las personas con dislexia",
"Enable dyslexia font" : "Habilita la fuente para personas con dislexia",
"OpenDyslexic is a free typeface/font designed to mitigate some of the common reading errors caused by dyslexia." : "OpenDyslexic es un tipo de letra libre diseñada para reducir algunos de los errores de lectura comunes causados por la dislexia.",
"Accessibility" : "Accesibilidad",
"Accessibility options for nextcloud" : "Opciones de accesibilidad para nexcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Provee múltiples opciones de accesibilidad para facilitar tu uso de Nextcloud",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "El acceso universal es muy importante para nosotros. Seguimos los estándares web y verificamos que todo sea utilizable inclusive sin ratón, y con software de asistencia como lectores de pantalla. Buscamos cumplir con las {guidelines}Guías de Accesibilidad de Contenido Web{linkend} 2.1 sobre nivel AA, incluso sobre nivel AAA para el tema de alto contraste.",
"If you find any issues, dont hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "Si encuentras cualquier problema, no dudes en reportarlo en {issuetracker}nuestra lista de errores{linkend}. Y si deseas involucrarte, ¡únete a {designteam}nuestro equipo de diseño{linkend}!"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -14,6 +14,6 @@ OC.L10N.register(
"Accessibility options for nextcloud" : "Настройки доступности для Nextcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Предлагает дополнительные настройки для упрощения использования Nextcloud",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Доступная среда очень важна для нас. При разработке мы следуем веб-стандартам, контролируя возможность пользования всем сервисом без помощи мыши и с использованием вспомогательных программ, например, выполняющих чтение с экрана. Мы стремимся к выполнению рекомендаций {guidelines}Руководства доступности Веб-Контента{linkend} 2.1 на уровне АА, а при использовании режима высокой контрастности — даже на уровне ААА.",
"If you find any issues, dont hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "При обнаружении ошибок, не стесняйтесь сообщать о них {issuetracker}на наш форум{linkend}. Если Вы заинтересованы в продвижении проекта присоединяйтесь к {designteam}команде дизайнеров{linkend}!"
"If you find any issues, dont hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "При обнаружении ошибок, не стесняйтесь сообщать о них {issuetracker}на наш форум{linkend}. Если Вы заинтересованы в продвижении проекта присоединяйтесь к {designteam}нашей команде дизайнеров{linkend}!"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");

View file

@ -12,6 +12,6 @@
"Accessibility options for nextcloud" : "Настройки доступности для Nextcloud",
"Provides multiple accessibilities options to ease your use of Nextcloud" : "Предлагает дополнительные настройки для упрощения использования Nextcloud",
"Universal access is very important to us. We follow web standards and check to make everything usable also without mouse, and assistive software such as screenreaders. We aim to be compliant with the {guidelines}Web Content Accessibility Guidelines{linkend} 2.1 on AA level, with the high contrast theme even on AAA level." : "Доступная среда очень важна для нас. При разработке мы следуем веб-стандартам, контролируя возможность пользования всем сервисом без помощи мыши и с использованием вспомогательных программ, например, выполняющих чтение с экрана. Мы стремимся к выполнению рекомендаций {guidelines}Руководства доступности Веб-Контента{linkend} 2.1 на уровне АА, а при использовании режима высокой контрастности — даже на уровне ААА.",
"If you find any issues, dont hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "При обнаружении ошибок, не стесняйтесь сообщать о них {issuetracker}на наш форум{linkend}. Если Вы заинтересованы в продвижении проекта присоединяйтесь к {designteam}команде дизайнеров{linkend}!"
"If you find any issues, dont hesitate to report them on {issuetracker}our issue tracker{linkend}. And if you want to get involved, come join {designteam}our design team{linkend}!" : "При обнаружении ошибок, не стесняйтесь сообщать о них {issuetracker}на наш форум{linkend}. Если Вы заинтересованы в продвижении проекта присоединяйтесь к {designteam}нашей команде дизайнеров{linkend}!"
},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"
}

View file

@ -42,30 +42,75 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@ -75,28 +120,47 @@ class ClassLoader
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
@ -111,9 +175,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@ -156,11 +222,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@ -204,8 +272,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
@ -220,10 +290,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
@ -243,6 +315,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
@ -265,6 +339,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@ -285,6 +361,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@ -305,6 +383,8 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
@ -324,6 +404,8 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
@ -403,6 +485,11 @@ class ClassLoader
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@ -474,6 +561,10 @@ class ClassLoader
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{

View file

@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
@ -228,7 +243,7 @@ class InstalledVersions
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
@ -242,7 +257,7 @@ class InstalledVersions
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@ -265,7 +280,7 @@ class InstalledVersions
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
@ -288,7 +303,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
@ -298,7 +313,7 @@ class InstalledVersions
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{

View file

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(
@ -19,6 +19,8 @@ return array(
'OCA\\AdminAudit\\Actions\\UserManagement' => $baseDir . '/../lib/Actions/UserManagement.php',
'OCA\\AdminAudit\\Actions\\Versions' => $baseDir . '/../lib/Actions/Versions.php',
'OCA\\AdminAudit\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\AdminAudit\\AuditLogger' => $baseDir . '/../lib/AuditLogger.php',
'OCA\\AdminAudit\\BackgroundJobs\\Rotate' => $baseDir . '/../lib/BackgroundJobs/Rotate.php',
'OCA\\AdminAudit\\IAuditLogger' => $baseDir . '/../lib/IAuditLogger.php',
'OCA\\AdminAudit\\Listener\\CriticalActionPerformedEventListener' => $baseDir . '/../lib/Listener/CriticalActionPerformedEventListener.php',
);

View file

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -23,20 +23,11 @@ class ComposerAutoloaderInitAdminAudit
}
spl_autoload_register(array('ComposerAutoloaderInitAdminAudit', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitAdminAudit', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitAdminAudit::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
require __DIR__ . '/autoload_static.php';
\Composer\Autoload\ComposerStaticInitAdminAudit::getInitializer($loader)();
$loader->setClassMapAuthoritative(true);
$loader->register(true);

View file

@ -34,7 +34,9 @@ class ComposerStaticInitAdminAudit
'OCA\\AdminAudit\\Actions\\UserManagement' => __DIR__ . '/..' . '/../lib/Actions/UserManagement.php',
'OCA\\AdminAudit\\Actions\\Versions' => __DIR__ . '/..' . '/../lib/Actions/Versions.php',
'OCA\\AdminAudit\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\AdminAudit\\AuditLogger' => __DIR__ . '/..' . '/../lib/AuditLogger.php',
'OCA\\AdminAudit\\BackgroundJobs\\Rotate' => __DIR__ . '/..' . '/../lib/BackgroundJobs/Rotate.php',
'OCA\\AdminAudit\\IAuditLogger' => __DIR__ . '/..' . '/../lib/IAuditLogger.php',
'OCA\\AdminAudit\\Listener\\CriticalActionPerformedEventListener' => __DIR__ . '/..' . '/../lib/Listener/CriticalActionPerformedEventListener.php',
);

View file

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'name' => '__root__',
'dev' => false,
),
@ -16,7 +16,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'dev_requirement' => false,
),
),

View file

@ -28,13 +28,13 @@ declare(strict_types=1);
*/
namespace OCA\AdminAudit\Actions;
use Psr\Log\LoggerInterface;
use OCA\AdminAudit\IAuditLogger;
class Action {
/** @var LoggerInterface */
/** @var IAuditLogger */
private $logger;
public function __construct(LoggerInterface $logger) {
public function __construct(IAuditLogger $logger) {
$this->logger = $logger;
}

View file

@ -48,6 +48,8 @@ use OCA\AdminAudit\Actions\Sharing;
use OCA\AdminAudit\Actions\Trashbin;
use OCA\AdminAudit\Actions\UserManagement;
use OCA\AdminAudit\Actions\Versions;
use OCA\AdminAudit\AuditLogger;
use OCA\AdminAudit\IAuditLogger;
use OCA\AdminAudit\Listener\CriticalActionPerformedEventListener;
use OCP\App\ManagerEvent;
use OCP\AppFramework\App;
@ -65,6 +67,7 @@ use OCP\Log\Audit\CriticalActionPerformedEvent;
use OCP\Log\ILogFactory;
use OCP\Share;
use OCP\Util;
use Psr\Container\ContainerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
@ -79,14 +82,16 @@ class Application extends App implements IBootstrap {
}
public function register(IRegistrationContext $context): void {
$context->registerService(IAuditLogger::class, function (ContainerInterface $c) {
return new AuditLogger($c->get(ILogFactory::class), $c->get(Iconfig::class));
});
$context->registerEventListener(CriticalActionPerformedEvent::class, CriticalActionPerformedEventListener::class);
}
public function boot(IBootContext $context): void {
/** @var LoggerInterface $logger */
$logger = $context->injectFn(
Closure::fromCallable([$this, 'getLogger'])
);
/** @var IAuditLogger $logger */
$logger = $context->getAppContainer()->get(IAuditLogger::class);
/*
* TODO: once the hooks are migrated to lazy events, this should be done
@ -95,26 +100,10 @@ class Application extends App implements IBootstrap {
$this->registerHooks($logger, $context->getServerContainer());
}
private function getLogger(IConfig $config,
ILogFactory $logFactory): LoggerInterface {
$auditType = $config->getSystemValueString('log_type_audit', 'file');
$defaultTag = $config->getSystemValueString('syslog_tag', 'Nextcloud');
$auditTag = $config->getSystemValueString('syslog_tag_audit', $defaultTag);
$logFile = $config->getSystemValueString('logfile_audit', '');
if ($auditType === 'file' && !$logFile) {
$default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log';
// Legacy way was appconfig, now it's paralleled with the normal log config
$logFile = $config->getAppValue('admin_audit', 'logfile', $default);
}
return $logFactory->getCustomPsrLogger($logFile, $auditType, $auditTag);
}
/**
* Register hooks in order to log them
*/
private function registerHooks(LoggerInterface $logger,
private function registerHooks(IAuditLogger $logger,
IServerContainer $serverContainer): void {
$this->userManagementHooks($logger, $serverContainer->get(IUserSession::class));
$this->groupHooks($logger, $serverContainer->get(IGroupManager::class));
@ -134,7 +123,7 @@ class Application extends App implements IBootstrap {
$this->securityHooks($logger, $eventDispatcher);
}
private function userManagementHooks(LoggerInterface $logger,
private function userManagementHooks(IAuditLogger $logger,
IUserSession $userSession): void {
$userActions = new UserManagement($logger);
@ -148,7 +137,7 @@ class Application extends App implements IBootstrap {
$userSession->listen('\OC\User', 'postUnassignedUserId', [$userActions, 'unassign']);
}
private function groupHooks(LoggerInterface $logger,
private function groupHooks(IAuditLogger $logger,
IGroupManager $groupManager): void {
$groupActions = new GroupManagement($logger);
@ -159,7 +148,7 @@ class Application extends App implements IBootstrap {
$groupManager->listen('\OC\Group', 'postCreate', [$groupActions, 'createGroup']);
}
private function sharingHooks(LoggerInterface $logger): void {
private function sharingHooks(IAuditLogger $logger): void {
$shareActions = new Sharing($logger);
Util::connectHook(Share::class, 'post_shared', $shareActions, 'shared');
@ -171,7 +160,7 @@ class Application extends App implements IBootstrap {
Util::connectHook(Share::class, 'share_link_access', $shareActions, 'shareAccessed');
}
private function authHooks(LoggerInterface $logger): void {
private function authHooks(IAuditLogger $logger): void {
$authActions = new Auth($logger);
Util::connectHook('OC_User', 'pre_login', $authActions, 'loginAttempt');
@ -179,7 +168,7 @@ class Application extends App implements IBootstrap {
Util::connectHook('OC_User', 'logout', $authActions, 'logout');
}
private function appHooks(LoggerInterface $logger,
private function appHooks(IAuditLogger $logger,
EventDispatcherInterface $eventDispatcher): void {
$eventDispatcher->addListener(ManagerEvent::EVENT_APP_ENABLE, function (ManagerEvent $event) use ($logger) {
$appActions = new AppManagement($logger);
@ -195,7 +184,7 @@ class Application extends App implements IBootstrap {
});
}
private function consoleHooks(LoggerInterface $logger,
private function consoleHooks(IAuditLogger $logger,
EventDispatcherInterface $eventDispatcher): void {
$eventDispatcher->addListener(ConsoleEvent::EVENT_RUN, function (ConsoleEvent $event) use ($logger) {
$appActions = new Console($logger);
@ -203,7 +192,7 @@ class Application extends App implements IBootstrap {
});
}
private function fileHooks(LoggerInterface $logger,
private function fileHooks(IAuditLogger $logger,
EventDispatcherInterface $eventDispatcher): void {
$fileActions = new Files($logger);
$eventDispatcher->addListener(
@ -265,19 +254,19 @@ class Application extends App implements IBootstrap {
);
}
private function versionsHooks(LoggerInterface $logger): void {
private function versionsHooks(IAuditLogger $logger): void {
$versionsActions = new Versions($logger);
Util::connectHook('\OCP\Versions', 'rollback', $versionsActions, 'rollback');
Util::connectHook('\OCP\Versions', 'delete', $versionsActions, 'delete');
}
private function trashbinHooks(LoggerInterface $logger): void {
private function trashbinHooks(IAuditLogger $logger): void {
$trashActions = new Trashbin($logger);
Util::connectHook('\OCP\Trashbin', 'preDelete', $trashActions, 'delete');
Util::connectHook('\OCA\Files_Trashbin\Trashbin', 'post_restore', $trashActions, 'restore');
}
private function securityHooks(LoggerInterface $logger,
private function securityHooks(IAuditLogger $logger,
EventDispatcherInterface $eventDispatcher): void {
$eventDispatcher->addListener(IProvider::EVENT_SUCCESS, function (GenericEvent $event) use ($logger) {
$security = new Security($logger);

View file

@ -0,0 +1,88 @@
<?php
/**
* @copyright Copyright (c) 2022 Carl Schwan <carl@carlschwan.eu>
*
* @author Carl Schwan <carl@carlschwan.eu>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\AdminAudit;
use OCP\IConfig;
use OCP\Log\ILogFactory;
use Psr\Log\LoggerInterface;
/**
* Logger that logs in the audit log file instead of the normal log file
*/
class AuditLogger implements IAuditLogger {
/** @var LoggerInterface */
private $parentLogger;
public function __construct(ILogFactory $logFactory, IConfig $config) {
$auditType = $config->getSystemValueString('log_type_audit', 'file');
$defaultTag = $config->getSystemValueString('syslog_tag', 'Nextcloud');
$auditTag = $config->getSystemValueString('syslog_tag_audit', $defaultTag);
$logFile = $config->getSystemValueString('logfile_audit', '');
if ($auditType === 'file' && !$logFile) {
$default = $config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data') . '/audit.log';
// Legacy way was appconfig, now it's paralleled with the normal log config
$logFile = $config->getAppValue('admin_audit', 'logfile', $default);
}
$this->parentLogger = $logFactory->getCustomPsrLogger($logFile, $auditType, $auditTag);
}
public function emergency($message, array $context = array()) {
$this->parentLogger->emergency($message, $context);
}
public function alert($message, array $context = array()) {
$this->parentLogger->alert($message, $context);
}
public function critical($message, array $context = array()) {
$this->parentLogger->critical($message, $context);
}
public function error($message, array $context = array()) {
$this->parentLogger->error($message, $context);
}
public function warning($message, array $context = array()) {
$this->parentLogger->warning($message, $context);
}
public function notice($message, array $context = array()) {
$this->parentLogger->notice($message, $context);
}
public function info($message, array $context = array()) {
$this->parentLogger->info($message, $context);
}
public function debug($message, array $context = array()) {
$this->parentLogger->debug($message, $context);
}
public function log($level, $message, array $context = array()) {
$this->parentLogger->log($level, $message, $context);
}
}

View file

@ -0,0 +1,32 @@
<?php
/**
* @copyright Copyright (c) 2022 Carl Schwan <carl@carlschwan.eu>
*
* @author Carl Schwan <carl@carlschwan.eu>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\AdminAudit;
use Psr\Log\LoggerInterface;
/**
* Interface for a logger that logs in the audit log file instead of the normal log file
*/
interface IAuditLogger extends LoggerInterface {
}

View file

@ -44,7 +44,7 @@ class SecurityTest extends TestCase {
protected function setUp(): void {
parent::setUp();
$this->logger = $this->createMock(LoggerInterface::class);
$this->logger = $this->createMock(AuditLogger::class);
$this->security = new Security($this->logger);
$this->user = $this->createMock(IUser::class);

View file

@ -42,30 +42,75 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@ -75,28 +120,47 @@ class ClassLoader
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
@ -111,9 +175,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@ -156,11 +222,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@ -204,8 +272,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
@ -220,10 +290,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
@ -243,6 +315,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
@ -265,6 +339,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@ -285,6 +361,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@ -305,6 +383,8 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
@ -324,6 +404,8 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
@ -403,6 +485,11 @@ class ClassLoader
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@ -474,6 +561,10 @@ class ClassLoader
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{

View file

@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
@ -228,7 +243,7 @@ class InstalledVersions
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
@ -242,7 +257,7 @@ class InstalledVersions
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@ -265,7 +280,7 @@ class InstalledVersions
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
@ -288,7 +303,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
@ -298,7 +313,7 @@ class InstalledVersions
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{

View file

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -23,20 +23,11 @@ class ComposerAutoloaderInitCloudFederationAPI
}
spl_autoload_register(array('ComposerAutoloaderInitCloudFederationAPI', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitCloudFederationAPI', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitCloudFederationAPI::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
require __DIR__ . '/autoload_static.php';
\Composer\Autoload\ComposerStaticInitCloudFederationAPI::getInitializer($loader)();
$loader->setClassMapAuthoritative(true);
$loader->register(true);

View file

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'name' => '__root__',
'dev' => false,
),
@ -16,7 +16,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'dev_requirement' => false,
),
),

View file

@ -42,30 +42,75 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@ -75,28 +120,47 @@ class ClassLoader
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
@ -111,9 +175,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@ -156,11 +222,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@ -204,8 +272,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
@ -220,10 +290,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
@ -243,6 +315,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
@ -265,6 +339,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@ -285,6 +361,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@ -305,6 +383,8 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
@ -324,6 +404,8 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
@ -403,6 +485,11 @@ class ClassLoader
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@ -474,6 +561,10 @@ class ClassLoader
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{

View file

@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
@ -228,7 +243,7 @@ class InstalledVersions
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
@ -242,7 +257,7 @@ class InstalledVersions
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@ -265,7 +280,7 @@ class InstalledVersions
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
@ -288,7 +303,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
@ -298,7 +313,7 @@ class InstalledVersions
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{

View file

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -23,20 +23,11 @@ class ComposerAutoloaderInitComments
}
spl_autoload_register(array('ComposerAutoloaderInitComments', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitComments', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitComments::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
require __DIR__ . '/autoload_static.php';
\Composer\Autoload\ComposerStaticInitComments::getInitializer($loader)();
$loader->setClassMapAuthoritative(true);
$loader->register(true);

View file

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'name' => '__root__',
'dev' => false,
),
@ -16,7 +16,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'dev_requirement' => false,
),
),

View file

@ -10,6 +10,8 @@ OC.L10N.register(
"%1$s commented on %2$s" : "%1$s коментиран за %2$s",
"{author} commented on {file}" : "{author} коментира за {file}",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"{user} mentioned you in a comment on \"{file}\"" : "{user} ви спомена в коментар за “{file}”",
"Files app plugin to add comments to files" : "Добавка на приложението Файлове за добавяне на коментари към файловете",
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",

View file

@ -8,6 +8,8 @@
"%1$s commented on %2$s" : "%1$s коментиран за %2$s",
"{author} commented on {file}" : "{author} коментира за {file}",
"<strong>Comments</strong> for files" : "<strong>Коментари</strong> за файлове",
"You were mentioned on \"{file}\", in a comment by a user that has since been deleted" : "Бяхте споменат/а към “{file}”, в коментар от потребител, който вече е изтрит",
"{user} mentioned you in a comment on \"{file}\"" : "{user} ви спомена в коментар за “{file}”",
"Files app plugin to add comments to files" : "Добавка на приложението Файлове за добавяне на коментари към файловете",
"Edit comment" : "Редактирай коментра",
"Delete comment" : "Изтрий коментар",

View file

@ -42,30 +42,75 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
/** @var ?string */
private $vendorDir;
// PSR-4
/**
* @var array[]
* @psalm-var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, array<int, string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* @var array[]
* @psalm-var array<string, array<string, string[]>>
*/
private $prefixesPsr0 = array();
/**
* @var array[]
* @psalm-var array<string, string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var string[]
* @psalm-var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var bool[]
* @psalm-var array<string, bool>
*/
private $missingClasses = array();
/** @var ?string */
private $apcuPrefix;
/**
* @var self[]
*/
private static $registeredLoaders = array();
/**
* @param ?string $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
}
/**
* @return string[]
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
@ -75,28 +120,47 @@ class ClassLoader
return array();
}
/**
* @return array[]
* @psalm-return array<string, array<int, string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return array[]
* @psalm-return array<string, string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array $classMap Class to filename map
* @param string[] $classMap Class to filename map
* @psalm-param array<string, string> $classMap
*
* @return void
*/
public function addClassMap(array $classMap)
{
@ -111,9 +175,11 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
@ -156,11 +222,13 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@ -204,8 +272,10 @@ class ClassLoader
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param array|string $paths The PSR-0 base directories
* @param string $prefix The prefix
* @param string[]|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
@ -220,10 +290,12 @@ class ClassLoader
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-4 base directories
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param string[]|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
@ -243,6 +315,8 @@ class ClassLoader
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
@ -265,6 +339,8 @@ class ClassLoader
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
@ -285,6 +361,8 @@ class ClassLoader
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
@ -305,6 +383,8 @@ class ClassLoader
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
@ -324,6 +404,8 @@ class ClassLoader
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
@ -403,6 +485,11 @@ class ClassLoader
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
@ -474,6 +561,10 @@ class ClassLoader
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
* @private
*/
function includeFile($file)
{

View file

@ -20,12 +20,27 @@ use Composer\Semver\VersionParser;
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require it's presence, you can require `composer-runtime-api ^2.0`
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static $installedByVendor = array();
/**
@ -228,7 +243,7 @@ class InstalledVersions
/**
* @return array
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}
* @psalm-return array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}
*/
public static function getRootPackage()
{
@ -242,7 +257,7 @@ class InstalledVersions
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}
* @psalm-return array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}
*/
public static function getRawData()
{
@ -265,7 +280,7 @@ class InstalledVersions
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
public static function getAllRawData()
{
@ -288,7 +303,7 @@ class InstalledVersions
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>} $data
* @psalm-param array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>} $data
*/
public static function reload($data)
{
@ -298,7 +313,7 @@ class InstalledVersions
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string}>}>
* @psalm-return list<array{root: array{name: string, version: string, reference: string, pretty_version: string, aliases: string[], dev: bool, install_path: string, type: string}, versions: array<string, array{dev_requirement: bool, pretty_version?: string, version?: string, aliases?: string[], reference?: string, replaced?: string[], provided?: string[], install_path?: string, type?: string}>}>
*/
private static function getInstalled()
{

View file

@ -2,7 +2,7 @@
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -2,7 +2,7 @@
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$vendorDir = dirname(__DIR__);
$baseDir = $vendorDir;
return array(

View file

@ -23,20 +23,11 @@ class ComposerAutoloaderInitContactsInteraction
}
spl_autoload_register(array('ComposerAutoloaderInitContactsInteraction', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitContactsInteraction', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitContactsInteraction::getInitializer($loader));
} else {
$classMap = require __DIR__ . '/autoload_classmap.php';
if ($classMap) {
$loader->addClassMap($classMap);
}
}
require __DIR__ . '/autoload_static.php';
\Composer\Autoload\ComposerStaticInitContactsInteraction::getInitializer($loader)();
$loader->setClassMapAuthoritative(true);
$loader->register(true);

View file

@ -5,7 +5,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'name' => '__root__',
'dev' => false,
),
@ -16,7 +16,7 @@
'type' => 'library',
'install_path' => __DIR__ . '/../',
'aliases' => array(),
'reference' => 'fb5ee6087bfd1f4cc2f37cda7a7cab7072aaae86',
'reference' => 'e0adf546eedfa4f370a47f4cdb6e2b447191399b',
'dev_requirement' => false,
),
),

View file

@ -25,7 +25,6 @@ OC.L10N.register(
"Default images" : "الصور الإفتراضية",
"Plain background" : "خلفية سادة",
"Insert from {productName}" : "اضف من {productName}",
"Show something" : "أظهر شي ما",
"Get more widgets from the app store" : "احصل على ودجات من متجر التطبيقات"
"Show something" : "أظهر شي ما"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");

View file

@ -23,7 +23,6 @@
"Default images" : "الصور الإفتراضية",
"Plain background" : "خلفية سادة",
"Insert from {productName}" : "اضف من {productName}",
"Show something" : "أظهر شي ما",
"Get more widgets from the app store" : "احصل على ودجات من متجر التطبيقات"
"Show something" : "أظهر شي ما"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Табло",
"Dashboard app" : "Приложение за Табло",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Започнете деня си информиран\n\nТаблото за управление на Nextcloud е ваша отправна точка за деня, което ви дава\nвъзможност за преглед на предстоящите ви срещи, спешни имейли, съобщения в чат,\nвходящи билети, най-новите туитове и много повече! Потребителите могат да добавят изпълними модули,\nкоито те харесват и да променят фона по свой вкус.",
"Customize" : "Персонизиране",
"Edit widgets" : "Редактиране на изпълнимите модули",
"Get more widgets from the App Store" : "Вземете повече приспособления от App Store",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Изображения по подразбиране",
"Plain background" : "Обикновен фон",
"Insert from {productName}" : "Вмъкване от {productName}",
"Show something" : "Покажи нещо",
"Get more widgets from the app store" : "Вземете повече приспособления от app store"
"Show something" : "Покажи нещо"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Табло",
"Dashboard app" : "Приложение за Табло",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Започнете деня си информиран\n\nТаблото за управление на Nextcloud е ваша отправна точка за деня, което ви дава\nвъзможност за преглед на предстоящите ви срещи, спешни имейли, съобщения в чат,\nвходящи билети, най-новите туитове и много повече! Потребителите могат да добавят изпълними модули,\nкоито те харесват и да променят фона по свой вкус.",
"Customize" : "Персонизиране",
"Edit widgets" : "Редактиране на изпълнимите модули",
"Get more widgets from the App Store" : "Вземете повече приспособления от App Store",
@ -24,7 +25,6 @@
"Default images" : "Изображения по подразбиране",
"Plain background" : "Обикновен фон",
"Insert from {productName}" : "Вмъкване от {productName}",
"Show something" : "Покажи нещо",
"Get more widgets from the app store" : "Вземете повече приспособления от app store"
"Show something" : "Покажи нещо"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -3,8 +3,10 @@ OC.L10N.register(
{
"Dashboard" : "Tauler",
"Dashboard app" : "Aplicació tauler",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comença el dia informat\n\nEl tauler de control de Nextcloud és el vostre punt de partida del dia i us ofereix una\nvisió general de les vostres properes cites, correus electrònics urgents, missatges de xat,\ntiquets entrants, els darrers tuits i molt més! Els usuaris poden afegir els widgets\nque els agraden i canviar el fons al seu gust.",
"Customize" : "Personalitza",
"Edit widgets" : "Edita els ginys",
"Get more widgets from the App Store" : "Aconseguiu més widgets de la botiga d'aplicacions",
"Change background image" : "Canvia la imatge de fons",
"Weather service" : "Servei meteorològic",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Per a la seva privacitat, les dades meteorològiques les sol·licita el seu servidor Nextcloud en el seu lloc perquè el servei meteorològic no rebi cap informació personal.",
@ -25,7 +27,6 @@ OC.L10N.register(
"Default images" : "Imatges predeterminades",
"Plain background" : "Fons senzill",
"Insert from {productName}" : "Insereix des de {productName}",
"Show something" : "Mostra alguna cosa",
"Get more widgets from the app store" : "Obtenir més ginys de la botiga d'aplicacions"
"Show something" : "Mostra alguna cosa"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,8 +1,10 @@
{ "translations": {
"Dashboard" : "Tauler",
"Dashboard app" : "Aplicació tauler",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comença el dia informat\n\nEl tauler de control de Nextcloud és el vostre punt de partida del dia i us ofereix una\nvisió general de les vostres properes cites, correus electrònics urgents, missatges de xat,\ntiquets entrants, els darrers tuits i molt més! Els usuaris poden afegir els widgets\nque els agraden i canviar el fons al seu gust.",
"Customize" : "Personalitza",
"Edit widgets" : "Edita els ginys",
"Get more widgets from the App Store" : "Aconseguiu més widgets de la botiga d'aplicacions",
"Change background image" : "Canvia la imatge de fons",
"Weather service" : "Servei meteorològic",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Per a la seva privacitat, les dades meteorològiques les sol·licita el seu servidor Nextcloud en el seu lloc perquè el servei meteorològic no rebi cap informació personal.",
@ -23,7 +25,6 @@
"Default images" : "Imatges predeterminades",
"Plain background" : "Fons senzill",
"Insert from {productName}" : "Insereix des de {productName}",
"Show something" : "Mostra alguna cosa",
"Get more widgets from the app store" : "Obtenir més ginys de la botiga d'aplicacions"
"Show something" : "Mostra alguna cosa"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Nástěnka",
"Dashboard app" : "Aplikace Nástěnka",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Začněte svůj den informovaní\n\nNextcloud Přehled je Váš úvodní bod dne, který vám podává přehled nadcházejících schůzek, neodkladných e-mailů, zpráv v chatu,\npříchozích požadavcích, nejnovějších tweetů a mnoho dalšího! Uživatelé si mohou přidávat ovládací prvky, které chtějí a měnit pozadí dle své libosti.",
"Customize" : "Přizpůsobit si",
"Edit widgets" : "Upravit ovládací prvky",
"Get more widgets from the App Store" : "Získejte další ovládací prvky z katalogu aplikací",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Výchozí obrázky",
"Plain background" : "Jednolité pozadí",
"Insert from {productName}" : "Vložit z {productName}",
"Show something" : "Zobrazit něco",
"Get more widgets from the app store" : "Získejte další ovládací prvky z katalogu aplikací"
"Show something" : "Zobrazit něco"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Nástěnka",
"Dashboard app" : "Aplikace Nástěnka",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Začněte svůj den informovaní\n\nNextcloud Přehled je Váš úvodní bod dne, který vám podává přehled nadcházejících schůzek, neodkladných e-mailů, zpráv v chatu,\npříchozích požadavcích, nejnovějších tweetů a mnoho dalšího! Uživatelé si mohou přidávat ovládací prvky, které chtějí a měnit pozadí dle své libosti.",
"Customize" : "Přizpůsobit si",
"Edit widgets" : "Upravit ovládací prvky",
"Get more widgets from the App Store" : "Získejte další ovládací prvky z katalogu aplikací",
@ -24,7 +25,6 @@
"Default images" : "Výchozí obrázky",
"Plain background" : "Jednolité pozadí",
"Insert from {productName}" : "Vložit z {productName}",
"Show something" : "Zobrazit něco",
"Get more widgets from the app store" : "Získejte další ovládací prvky z katalogu aplikací"
"Show something" : "Zobrazit něco"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Standardbilleder",
"Plain background" : "Standard baggrund",
"Insert from {productName}" : "Indsæt fra {productName}",
"Show something" : "Vis noget",
"Get more widgets from the app store" : "Hent flere widgets fra app store"
"Show something" : "Vis noget"
},
"nplurals=2; plural=(n != 1);");

View file

@ -24,7 +24,6 @@
"Default images" : "Standardbilleder",
"Plain background" : "Standard baggrund",
"Insert from {productName}" : "Indsæt fra {productName}",
"Show something" : "Vis noget",
"Get more widgets from the app store" : "Hent flere widgets fra app store"
"Show something" : "Vis noget"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Dashboard",
"Dashboard app" : "Dashboard-App",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Starte informiert in den Tag\n\nDas Nextcloud-Dashboard ist Dein Ausgangspunkt für den Tag und gibt Dir\neinen Überblick über Deine anstehenden Termine, dringende E-Mails, Chatnachrichten, eingehende Tickets, neuste Tweets und vieles mehr! Benutzer können die Widgets hinzufügen, die sie mögen und den Hintergrund nach ihren Wünschen angepassen.",
"Customize" : "Anpassen",
"Edit widgets" : "Widgets bearbeiten",
"Get more widgets from the App Store" : "Hole Dir weitere Widgets aus dem App-Store",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Standardbilder",
"Plain background" : "Einfacher Hintergrund",
"Insert from {productName}" : "Von {productName} einfügen",
"Show something" : "Zeige etwas an",
"Get more widgets from the app store" : "Hole Dir weitere Widgets aus dem App Store"
"Show something" : "Zeige etwas an"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Dashboard",
"Dashboard app" : "Dashboard-App",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Starte informiert in den Tag\n\nDas Nextcloud-Dashboard ist Dein Ausgangspunkt für den Tag und gibt Dir\neinen Überblick über Deine anstehenden Termine, dringende E-Mails, Chatnachrichten, eingehende Tickets, neuste Tweets und vieles mehr! Benutzer können die Widgets hinzufügen, die sie mögen und den Hintergrund nach ihren Wünschen angepassen.",
"Customize" : "Anpassen",
"Edit widgets" : "Widgets bearbeiten",
"Get more widgets from the App Store" : "Hole Dir weitere Widgets aus dem App-Store",
@ -24,7 +25,6 @@
"Default images" : "Standardbilder",
"Plain background" : "Einfacher Hintergrund",
"Insert from {productName}" : "Von {productName} einfügen",
"Show something" : "Zeige etwas an",
"Get more widgets from the app store" : "Hole Dir weitere Widgets aus dem App Store"
"Show something" : "Zeige etwas an"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -27,7 +27,6 @@ OC.L10N.register(
"Default images" : "Standardbilder",
"Plain background" : "Einfacher Hintergrund",
"Insert from {productName}" : "Von {productName} einfügen",
"Show something" : "Etwas anzeigen",
"Get more widgets from the app store" : "Holen Sie sich weitere Widgets aus dem App Store"
"Show something" : "Etwas anzeigen"
},
"nplurals=2; plural=(n != 1);");

View file

@ -25,7 +25,6 @@
"Default images" : "Standardbilder",
"Plain background" : "Einfacher Hintergrund",
"Insert from {productName}" : "Von {productName} einfügen",
"Show something" : "Etwas anzeigen",
"Get more widgets from the app store" : "Holen Sie sich weitere Widgets aus dem App Store"
"Show something" : "Etwas anzeigen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Πίνακας ελέγχου",
"Dashboard app" : "Εφαρμογή Πίνακα Ελέγχου",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Ξεκινήστε τη μέρα σας ενημερωμένοι\n\nΤο Nextcloud Dashboard είναι το σημείο εκκίνησης της ημέρας, δίνοντάς σας μια επισκόπηση των επερχόμενων ραντεβού, των επειγόντων email, των μηνυμάτων συνομιλίας, και πολλά άλλα!\nΟι χρήστες μπορούν να προσθέσουν μικροεφαρμογές και να αλλάζουν το φόντο σύμφωνα με τις προτιμήσεις τους.",
"Customize" : "Προσαρμογή",
"Edit widgets" : "Επεξεργασία μικροεφαρμογών",
"Get more widgets from the App Store" : "Λάβετε περισσότερες μικροεφαρμογές από το App Store",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Προεπιλεγμένες εικόνες",
"Plain background" : "Απλό παρασκήνιο",
"Insert from {productName}" : "Εισαγωγή από {productName}",
"Show something" : "Δείξε οτιδήποτε",
"Get more widgets from the app store" : "Λάβετε περισσότερες μικροεφαρμογές από το App Store"
"Show something" : "Δείξε οτιδήποτε"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Πίνακας ελέγχου",
"Dashboard app" : "Εφαρμογή Πίνακα Ελέγχου",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Ξεκινήστε τη μέρα σας ενημερωμένοι\n\nΤο Nextcloud Dashboard είναι το σημείο εκκίνησης της ημέρας, δίνοντάς σας μια επισκόπηση των επερχόμενων ραντεβού, των επειγόντων email, των μηνυμάτων συνομιλίας, και πολλά άλλα!\nΟι χρήστες μπορούν να προσθέσουν μικροεφαρμογές και να αλλάζουν το φόντο σύμφωνα με τις προτιμήσεις τους.",
"Customize" : "Προσαρμογή",
"Edit widgets" : "Επεξεργασία μικροεφαρμογών",
"Get more widgets from the App Store" : "Λάβετε περισσότερες μικροεφαρμογές από το App Store",
@ -24,7 +25,6 @@
"Default images" : "Προεπιλεγμένες εικόνες",
"Plain background" : "Απλό παρασκήνιο",
"Insert from {productName}" : "Εισαγωγή από {productName}",
"Show something" : "Δείξε οτιδήποτε",
"Get more widgets from the app store" : "Λάβετε περισσότερες μικροεφαρμογές από το App Store"
"Show something" : "Δείξε οτιδήποτε"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Dashboard",
"Dashboard app" : "App Dashboard",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comienza tu día informado\n\nEl Dashboard de Nextcloud es tu punto de partida del día, dándote un\nresumen de tus próximas citas, emails urgentes, mensajes de chat,\npróximos tickets, últimos tweets y mucho más! Los usuarios pueden agregr widgets\nque le gusten y cambiar el fondo a su gusto.",
"Customize" : "Personalizar",
"Edit widgets" : "Editar widgets",
"Get more widgets from the App Store" : "Conseguir más widgets desde la tienda de Apps",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Imágenes predeterminadas",
"Plain background" : "Fondo liso",
"Insert from {productName}" : "Insertar desde {productName}",
"Show something" : "Mostrar algo",
"Get more widgets from the app store" : "Conseguir más widgets desde la app store"
"Show something" : "Mostrar algo"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Dashboard",
"Dashboard app" : "App Dashboard",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comienza tu día informado\n\nEl Dashboard de Nextcloud es tu punto de partida del día, dándote un\nresumen de tus próximas citas, emails urgentes, mensajes de chat,\npróximos tickets, últimos tweets y mucho más! Los usuarios pueden agregr widgets\nque le gusten y cambiar el fondo a su gusto.",
"Customize" : "Personalizar",
"Edit widgets" : "Editar widgets",
"Get more widgets from the App Store" : "Conseguir más widgets desde la tienda de Apps",
@ -24,7 +25,6 @@
"Default images" : "Imágenes predeterminadas",
"Plain background" : "Fondo liso",
"Insert from {productName}" : "Insertar desde {productName}",
"Show something" : "Mostrar algo",
"Get more widgets from the app store" : "Conseguir más widgets desde la app store"
"Show something" : "Mostrar algo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Mahaia",
"Dashboard app" : "Mahaia aplikazioa",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Hasi zure eguna informatuta\n\nNextcloud Dashboard zure eguneko abiapuntua da, erakutsiz\nzure hurrengo hitzorduen ikuspegi orokorra, premiazko mezu elektronikoak, txat mezuak,\nsarrerako txartelak, azken txioak eta askoz gehiago! Erabiltzaileek widget-ak gehi ditzakete\neta atzealdea aldatu nahieran.",
"Customize" : "Pertsonalizatu",
"Edit widgets" : "Editatu trepetak",
"Get more widgets from the App Store" : "Lortu widget gehiago App Store-tik",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Irudi lehenetsiak",
"Plain background" : "Atzeko plano arrunta",
"Insert from {productName}" : "Txertatu hemendik: {productName}",
"Show something" : "Erakutsi zerbait",
"Get more widgets from the app store" : "Eskuratu widget gehiago aplikazio-dendatik"
"Show something" : "Erakutsi zerbait"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Mahaia",
"Dashboard app" : "Mahaia aplikazioa",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Hasi zure eguna informatuta\n\nNextcloud Dashboard zure eguneko abiapuntua da, erakutsiz\nzure hurrengo hitzorduen ikuspegi orokorra, premiazko mezu elektronikoak, txat mezuak,\nsarrerako txartelak, azken txioak eta askoz gehiago! Erabiltzaileek widget-ak gehi ditzakete\neta atzealdea aldatu nahieran.",
"Customize" : "Pertsonalizatu",
"Edit widgets" : "Editatu trepetak",
"Get more widgets from the App Store" : "Lortu widget gehiago App Store-tik",
@ -24,7 +25,6 @@
"Default images" : "Irudi lehenetsiak",
"Plain background" : "Atzeko plano arrunta",
"Insert from {productName}" : "Txertatu hemendik: {productName}",
"Show something" : "Erakutsi zerbait",
"Get more widgets from the app store" : "Eskuratu widget gehiago aplikazio-dendatik"
"Show something" : "Erakutsi zerbait"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -23,7 +23,6 @@ OC.L10N.register(
"Default images" : "تصاویر پیش‌فرض",
"Plain background" : "تصویر زمینه ساده",
"Insert from {productName}" : "درج از {productName}",
"Show something" : "نمایش چیزی",
"Get more widgets from the app store" : "ابزارک‌های بیشتر را از فروشگاه برنامه دریافت کنید"
"Show something" : "نمایش چیزی"
},
"nplurals=2; plural=(n > 1);");

View file

@ -21,7 +21,6 @@
"Default images" : "تصاویر پیش‌فرض",
"Plain background" : "تصویر زمینه ساده",
"Insert from {productName}" : "درج از {productName}",
"Show something" : "نمایش چیزی",
"Get more widgets from the app store" : "ابزارک‌های بیشتر را از فروشگاه برنامه دریافت کنید"
"Show something" : "نمایش چیزی"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

View file

@ -5,6 +5,7 @@ OC.L10N.register(
"Dashboard app" : "Konsolisovellus",
"Customize" : "Mukauta",
"Edit widgets" : "Muokkaa pienoissovelluksia",
"Get more widgets from the App Store" : "Hae lisää pienoissovelluksia sovelluskaupasta",
"Change background image" : "Vaihda taustakuva",
"Weather service" : "Sääpalvelu",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Yksityisyytesi vuoksi Nextcloud-palvelin hakee säätiedot, joten sääpalvelulle ei lähetetä henkilökohtaisia tietojasi.",
@ -24,7 +25,7 @@ OC.L10N.register(
"Pick from Files" : "Valitse tiedostoista",
"Default images" : "Oletuskuvat",
"Plain background" : "Yksinkertainen tausta",
"Show something" : "Näytä jotain",
"Get more widgets from the app store" : "Hae lisää pienoissovelluksia sovelluskaupasta"
"Insert from {productName}" : "Aseta kohteesta {productName}",
"Show something" : "Näytä jotain"
},
"nplurals=2; plural=(n != 1);");

View file

@ -3,6 +3,7 @@
"Dashboard app" : "Konsolisovellus",
"Customize" : "Mukauta",
"Edit widgets" : "Muokkaa pienoissovelluksia",
"Get more widgets from the App Store" : "Hae lisää pienoissovelluksia sovelluskaupasta",
"Change background image" : "Vaihda taustakuva",
"Weather service" : "Sääpalvelu",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Yksityisyytesi vuoksi Nextcloud-palvelin hakee säätiedot, joten sääpalvelulle ei lähetetä henkilökohtaisia tietojasi.",
@ -22,7 +23,7 @@
"Pick from Files" : "Valitse tiedostoista",
"Default images" : "Oletuskuvat",
"Plain background" : "Yksinkertainen tausta",
"Show something" : "Näytä jotain",
"Get more widgets from the app store" : "Hae lisää pienoissovelluksia sovelluskaupasta"
"Insert from {productName}" : "Aseta kohteesta {productName}",
"Show something" : "Näytä jotain"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -5,7 +5,7 @@ OC.L10N.register(
"Dashboard app" : "Application Tableau de bord",
"Customize" : "Personnaliser",
"Edit widgets" : "Modifier les widgets",
"Get more widgets from the App Store" : "Obtenez plus de widgets depuis l'App Store",
"Get more widgets from the App Store" : "Obtenez plus de widgets depuis le magasin d'applications",
"Change background image" : "Modifier limage d'arrière-plan",
"Weather service" : "Service météo",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Pour votre vie privée, les données météorologiques sont demandées par votre serveur Nextcloud en votre nom afin que le service météo ne reçoive aucune information personnelle.",
@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Images par défaut",
"Plain background" : "Fond uni",
"Insert from {productName}" : "Insérer depuis {productName}",
"Show something" : "Montre quelque chose",
"Get more widgets from the app store" : "Obtenez plus de widgets de l'App Store"
"Show something" : "Montre quelque chose"
},
"nplurals=2; plural=(n > 1);");

View file

@ -3,7 +3,7 @@
"Dashboard app" : "Application Tableau de bord",
"Customize" : "Personnaliser",
"Edit widgets" : "Modifier les widgets",
"Get more widgets from the App Store" : "Obtenez plus de widgets depuis l'App Store",
"Get more widgets from the App Store" : "Obtenez plus de widgets depuis le magasin d'applications",
"Change background image" : "Modifier limage d'arrière-plan",
"Weather service" : "Service météo",
"For your privacy, the weather data is requested by your Nextcloud server on your behalf so the weather service receives no personal information." : "Pour votre vie privée, les données météorologiques sont demandées par votre serveur Nextcloud en votre nom afin que le service météo ne reçoive aucune information personnelle.",
@ -24,7 +24,6 @@
"Default images" : "Images par défaut",
"Plain background" : "Fond uni",
"Insert from {productName}" : "Insérer depuis {productName}",
"Show something" : "Montre quelque chose",
"Get more widgets from the app store" : "Obtenez plus de widgets de l'App Store"
"Show something" : "Montre quelque chose"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

View file

@ -25,7 +25,6 @@ OC.L10N.register(
"Default images" : "Imaxes predeterminadas",
"Plain background" : "Fondo sinxelo",
"Insert from {productName}" : "Inserir dende {productName}",
"Show something" : "Amosar algo",
"Get more widgets from the app store" : "Obter máis trebellos na tenda de aplicacións"
"Show something" : "Amosar algo"
},
"nplurals=2; plural=(n != 1);");

View file

@ -23,7 +23,6 @@
"Default images" : "Imaxes predeterminadas",
"Plain background" : "Fondo sinxelo",
"Insert from {productName}" : "Inserir dende {productName}",
"Show something" : "Amosar algo",
"Get more widgets from the app store" : "Obter máis trebellos na tenda de aplicacións"
"Show something" : "Amosar algo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -25,7 +25,6 @@ OC.L10N.register(
"Default images" : "תמונות ברירת מחדל",
"Plain background" : "רקע רגיל",
"Insert from {productName}" : "הכנס מ-{productName}",
"Show something" : "תראה משהו",
"Get more widgets from the app store" : "קבל יישומונים נוספים מחנות האפליקציות"
"Show something" : "תראה משהו"
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");

View file

@ -23,7 +23,6 @@
"Default images" : "תמונות ברירת מחדל",
"Plain background" : "רקע רגיל",
"Insert from {productName}" : "הכנס מ-{productName}",
"Show something" : "תראה משהו",
"Get more widgets from the app store" : "קבל יישומונים נוספים מחנות האפליקציות"
"Show something" : "תראה משהו"
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Zadane slike",
"Plain background" : "Obična pozadina",
"Insert from {productName}" : "Umetni iz {productName}",
"Show something" : "Prikaži nešto",
"Get more widgets from the app store" : "Pronađite više widgeta u trgovini aplikacijama"
"Show something" : "Prikaži nešto"
},
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");

View file

@ -24,7 +24,6 @@
"Default images" : "Zadane slike",
"Plain background" : "Obična pozadina",
"Insert from {productName}" : "Umetni iz {productName}",
"Show something" : "Prikaži nešto",
"Get more widgets from the app store" : "Pronađite više widgeta u trgovini aplikacijama"
"Show something" : "Prikaži nešto"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Irányítópult",
"Dashboard app" : "Irányítópult alkalmazás",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Kezdje informáltan a napot\n\nA Nextcloud irányítópult a napja kezdőpontja, áttekintést nyújtva a közelgő találkozókról, sürgős levelekről, csevegőüzenetekről, hibajegyekről, a legfrissebb tweetekről és sok másról. A felhasználók modulokat adhatnak hozzá, és tetszés szerint változtathatják a hátteret.",
"Customize" : "Testreszabás",
"Edit widgets" : "Modulok szerkesztése",
"Get more widgets from the App Store" : "További modulok letöltése az alkalmazástárból.",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Alapértelmezett képek",
"Plain background" : "Egyszerű háttér",
"Insert from {productName}" : "Beillesztés innen: {productName}-",
"Show something" : "Mutasson valamit",
"Get more widgets from the app store" : "Töltsön le további modulokat az alkalmazástárból"
"Show something" : "Mutasson valamit"
},
"nplurals=2; plural=(n != 1);");

View file

@ -1,6 +1,7 @@
{ "translations": {
"Dashboard" : "Irányítópult",
"Dashboard app" : "Irányítópult alkalmazás",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Kezdje informáltan a napot\n\nA Nextcloud irányítópult a napja kezdőpontja, áttekintést nyújtva a közelgő találkozókról, sürgős levelekről, csevegőüzenetekről, hibajegyekről, a legfrissebb tweetekről és sok másról. A felhasználók modulokat adhatnak hozzá, és tetszés szerint változtathatják a hátteret.",
"Customize" : "Testreszabás",
"Edit widgets" : "Modulok szerkesztése",
"Get more widgets from the App Store" : "További modulok letöltése az alkalmazástárból.",
@ -24,7 +25,6 @@
"Default images" : "Alapértelmezett képek",
"Plain background" : "Egyszerű háttér",
"Insert from {productName}" : "Beillesztés innen: {productName}-",
"Show something" : "Mutasson valamit",
"Get more widgets from the app store" : "Töltsön le további modulokat az alkalmazástárból"
"Show something" : "Mutasson valamit"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Gambar bawaan",
"Plain background" : "Latar belakang polos",
"Insert from {productName}" : "Sisipkan dari {productName}",
"Show something" : "Tunjukkan sesuatu",
"Get more widgets from the app store" : "Dapatkan lebih banyak widget dari app store"
"Show something" : "Tunjukkan sesuatu"
},
"nplurals=1; plural=0;");

View file

@ -24,7 +24,6 @@
"Default images" : "Gambar bawaan",
"Plain background" : "Latar belakang polos",
"Insert from {productName}" : "Sisipkan dari {productName}",
"Show something" : "Tunjukkan sesuatu",
"Get more widgets from the app store" : "Dapatkan lebih banyak widget dari app store"
"Show something" : "Tunjukkan sesuatu"
},"pluralForm" :"nplurals=1; plural=0;"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Immagini predefinite",
"Plain background" : "Sfondo semplice",
"Insert from {productName}" : "Inserisci da {productName}",
"Show something" : "Mostra qualcosa",
"Get more widgets from the app store" : "Ottieni altri widget dal negozio delle applicazioni"
"Show something" : "Mostra qualcosa"
},
"nplurals=2; plural=(n != 1);");

View file

@ -24,7 +24,6 @@
"Default images" : "Immagini predefinite",
"Plain background" : "Sfondo semplice",
"Insert from {productName}" : "Inserisci da {productName}",
"Show something" : "Mostra qualcosa",
"Get more widgets from the app store" : "Ottieni altri widget dal negozio delle applicazioni"
"Show something" : "Mostra qualcosa"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -25,7 +25,6 @@ OC.L10N.register(
"Default images" : "デフォルトの画像",
"Plain background" : "シンプルな背景",
"Insert from {productName}" : "{productName} から挿入",
"Show something" : "何か表示されます",
"Get more widgets from the app store" : "アプリストアで他のウィジェットを入手"
"Show something" : "何か表示されます"
},
"nplurals=1; plural=0;");

View file

@ -23,7 +23,6 @@
"Default images" : "デフォルトの画像",
"Plain background" : "シンプルな背景",
"Insert from {productName}" : "{productName} から挿入",
"Show something" : "何か表示されます",
"Get more widgets from the app store" : "アプリストアで他のウィジェットを入手"
"Show something" : "何か表示されます"
},"pluralForm" :"nplurals=1; plural=0;"
}

View file

@ -23,7 +23,6 @@ OC.L10N.register(
"Default images" : "საწყისი სურათები",
"Plain background" : "ცარიელი ფონი",
"Insert from {productName}" : "შეავსეთ {productName}-დან",
"Show something" : "აჩვენე რამე",
"Get more widgets from the app store" : "გადმოწერე მეტი ვიჯეტები app store-დან."
"Show something" : "აჩვენე რამე"
},
"nplurals=2; plural=(n!=1);");

View file

@ -21,7 +21,6 @@
"Default images" : "საწყისი სურათები",
"Plain background" : "ცარიელი ფონი",
"Insert from {productName}" : "შეავსეთ {productName}-დან",
"Show something" : "აჩვენე რამე",
"Get more widgets from the app store" : "გადმოწერე მეტი ვიჯეტები app store-დან."
"Show something" : "აჩვენე რამე"
},"pluralForm" :"nplurals=2; plural=(n!=1);"
}

View file

@ -24,7 +24,6 @@ OC.L10N.register(
"Pick from Files" : "파일로부터 선택",
"Default images" : "기본 이미지",
"Plain background" : "일반 배경",
"Insert from {productName}" : "{productName}로부터 삽입",
"Get more widgets from the app store" : "앱 스토어로부터 더 많은 위젯 가져오기"
"Insert from {productName}" : "{productName}로부터 삽입"
},
"nplurals=1; plural=0;");

View file

@ -22,7 +22,6 @@
"Pick from Files" : "파일로부터 선택",
"Default images" : "기본 이미지",
"Plain background" : "일반 배경",
"Insert from {productName}" : "{productName}로부터 삽입",
"Get more widgets from the app store" : "앱 스토어로부터 더 많은 위젯 가져오기"
"Insert from {productName}" : "{productName}로부터 삽입"
},"pluralForm" :"nplurals=1; plural=0;"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Numatytieji paveikslai",
"Plain background" : "Vientisas fonas",
"Insert from {productName}" : "Įterpti iš {productName}",
"Show something" : "Ką nors rodyti",
"Get more widgets from the app store" : "Gauti daugiau valdiklių iš programėlių parduotuvės"
"Show something" : "Ką nors rodyti"
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");

View file

@ -24,7 +24,6 @@
"Default images" : "Numatytieji paveikslai",
"Plain background" : "Vientisas fonas",
"Insert from {productName}" : "Įterpti iš {productName}",
"Show something" : "Ką nors rodyti",
"Get more widgets from the app store" : "Gauti daugiau valdiklių iš programėlių parduotuvės"
"Show something" : "Ką nors rodyti"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Стандардни слики",
"Plain background" : "Обична позадина",
"Insert from {productName}" : "Вметнни од {productName}",
"Show something" : "Прикажи нешто",
"Get more widgets from the app store" : "Преземи повеќе графички контроли од продавницата со апликации"
"Show something" : "Прикажи нешто"
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");

View file

@ -24,7 +24,6 @@
"Default images" : "Стандардни слики",
"Plain background" : "Обична позадина",
"Insert from {productName}" : "Вметнни од {productName}",
"Show something" : "Прикажи нешто",
"Get more widgets from the app store" : "Преземи повеќе графички контроли од продавницата со апликации"
"Show something" : "Прикажи нешто"
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
}

View file

@ -26,7 +26,6 @@ OC.L10N.register(
"Default images" : "Standaardafbeeldingen",
"Plain background" : "Kale achtergrond",
"Insert from {productName}" : "Invoegen vanuit {productName}",
"Show something" : "Toon iets",
"Get more widgets from the app store" : "Haal meer widgets op uit de app store"
"Show something" : "Toon iets"
},
"nplurals=2; plural=(n != 1);");

View file

@ -24,7 +24,6 @@
"Default images" : "Standaardafbeeldingen",
"Plain background" : "Kale achtergrond",
"Insert from {productName}" : "Invoegen vanuit {productName}",
"Show something" : "Toon iets",
"Get more widgets from the app store" : "Haal meer widgets op uit de app store"
"Show something" : "Toon iets"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View file

@ -27,7 +27,6 @@ OC.L10N.register(
"Default images" : "Obrazy domyślne",
"Plain background" : "Zwykłe tło",
"Insert from {productName}" : "Wstaw z {productName}",
"Show something" : "Pokaż coś",
"Get more widgets from the app store" : "Pobierz więcej widżetów ze sklepu z aplikacjami"
"Show something" : "Pokaż coś"
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");

View file

@ -25,7 +25,6 @@
"Default images" : "Obrazy domyślne",
"Plain background" : "Zwykłe tło",
"Insert from {productName}" : "Wstaw z {productName}",
"Show something" : "Pokaż coś",
"Get more widgets from the app store" : "Pobierz więcej widżetów ze sklepu z aplikacjami"
"Show something" : "Pokaż coś"
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
}

View file

@ -3,6 +3,7 @@ OC.L10N.register(
{
"Dashboard" : "Painel",
"Dashboard app" : "Aplicativo Painel",
"Start your day informed\n\nThe Nextcloud Dashboard is your starting point of the day, giving you an\noverview of your upcoming appointments, urgent emails, chat messages,\nincoming tickets, latest tweets and much more! Users can add the widgets\nthey like and change the background to their liking." : "Comece o seu dia informado\n\nO Painel Nextcloud é o seu ponto de partida do dia, dando-lhe uma\nvisão geral de seus compromissos futuros, e-mails urgentes, mensagens de bate-papo,\ningressos recebidos, tweets mais recentes e muito mais! Os usuários podem adicionar os widgets\neles gostam e mudam o fundo ao seu gosto.",
"Customize" : "Personalizar",
"Edit widgets" : "Editar widgets",
"Get more widgets from the App Store" : "Obtenha mais widgets na App Store",
@ -26,7 +27,6 @@ OC.L10N.register(
"Default images" : "Imagens padrão",
"Plain background" : "Fundo simples",
"Insert from {productName}" : "Inserir de {productName}",
"Show something" : "Mostrar alguma coisa",
"Get more widgets from the app store" : "Obtenha mais widgets a partir da loja de aplicativos"
"Show something" : "Mostrar alguma coisa"
},
"nplurals=2; plural=(n > 1);");

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