diff options
576 files changed, 10606 insertions, 2617 deletions
diff --git a/apps/encryption/appinfo/register_command.php b/apps/encryption/appinfo/register_command.php index 4fdf7ecec38..0f03b63560a 100644 --- a/apps/encryption/appinfo/register_command.php +++ b/apps/encryption/appinfo/register_command.php @@ -21,10 +21,17 @@ */ use OCA\Encryption\Command\MigrateKeys; +use Symfony\Component\Console\Helper\QuestionHelper; $userManager = OC::$server->getUserManager(); $view = new \OC\Files\View(); $config = \OC::$server->getConfig(); +$userSession = \OC::$server->getUserSession(); $connection = \OC::$server->getDatabaseConnection(); $logger = \OC::$server->getLogger(); +$questionHelper = new QuestionHelper(); +$crypt = new \OCA\Encryption\Crypto\Crypt($logger, $userSession, $config); +$util = new \OCA\Encryption\Util($view, $crypt, $logger, $userSession, $config, $userManager); + $application->add(new MigrateKeys($userManager, $view, $connection, $config, $logger)); +$application->add(new \OCA\Encryption\Command\EnableMasterKey($util, $config, $questionHelper)); diff --git a/apps/encryption/command/enablemasterkey.php b/apps/encryption/command/enablemasterkey.php new file mode 100644 index 00000000000..f49579a3b81 --- /dev/null +++ b/apps/encryption/command/enablemasterkey.php @@ -0,0 +1,86 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + + +namespace OCA\Encryption\Command; + + +use OCA\Encryption\Util; +use OCP\IConfig; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\QuestionHelper; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\ConfirmationQuestion; + +class EnableMasterKey extends Command { + + /** @var Util */ + protected $util; + + /** @var IConfig */ + protected $config; + + /** @var QuestionHelper */ + protected $questionHelper; + + /** + * @param Util $util + * @param IConfig $config + * @param QuestionHelper $questionHelper + */ + public function __construct(Util $util, + IConfig $config, + QuestionHelper $questionHelper) { + + $this->util = $util; + $this->config = $config; + $this->questionHelper = $questionHelper; + parent::__construct(); + } + + protected function configure() { + $this + ->setName('encryption:enable-master-key') + ->setDescription('Enable the master key. Only available for fresh installations with no existing encrypted data! There is also no way to disable it again.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + + $isAlreadyEnabled = $this->util->isMasterKeyEnabled(); + + if($isAlreadyEnabled) { + $output->writeln('Master key already enabled'); + } else { + $question = new ConfirmationQuestion( + 'Warning: Only available for fresh installations with no existing encrypted data! ' + . 'There is also no way to disable it again. Do you want to continue? (y/n) ', false); + if ($this->questionHelper->ask($input, $output, $question)) { + $this->config->setAppValue('encryption', 'useMasterKey', '1'); + $output->writeln('Master key successfully enabled.'); + } else { + $output->writeln('aborted.'); + } + } + + } + +} diff --git a/apps/encryption/l10n/cs_CZ.js b/apps/encryption/l10n/cs_CZ.js index e9477dd54db..661731c31d3 100644 --- a/apps/encryption/l10n/cs_CZ.js +++ b/apps/encryption/l10n/cs_CZ.js @@ -25,6 +25,7 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena", + "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Soubor nelze načíst, pravděpodobně se jedná o sdílený soubor. Požádejte prosím vlastníka souboru, aby vám jej znovu sdílel.", "The share will expire on %s." : "Sdílení vyprší %s.", diff --git a/apps/encryption/l10n/cs_CZ.json b/apps/encryption/l10n/cs_CZ.json index ed75239894e..1b530d137ed 100644 --- a/apps/encryption/l10n/cs_CZ.json +++ b/apps/encryption/l10n/cs_CZ.json @@ -23,6 +23,7 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Chybný soukromý klíč pro šifrovací aplikaci. Aktualizujte prosím heslo svého soukromého klíče ve vašem osobním nastavení, abyste znovu získali přístup k vašim zašifrovaným souborům.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikace pro šifrování je zapnuta, ale vaše klíče nejsou inicializované. Prosím odhlaste se a znovu přihlaste", "Encryption App is enabled and ready" : "Aplikace šifrování je již povolena", + "one-time password for server-side-encryption" : "jednorázové heslo pro šifrování na straně serveru", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tento soubor se nepodařilo dešifrovat, pravděpodobně je sdílený. Požádejte prosím majitele souboru, aby jej s vámi znovu sdílel.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Soubor nelze načíst, pravděpodobně se jedná o sdílený soubor. Požádejte prosím vlastníka souboru, aby vám jej znovu sdílel.", "The share will expire on %s." : "Sdílení vyprší %s.", diff --git a/apps/encryption/l10n/es.js b/apps/encryption/l10n/es.js index 516722cdc0f..cadedbcc0d4 100644 --- a/apps/encryption/l10n/es.js +++ b/apps/encryption/l10n/es.js @@ -25,10 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Encryption App is enabled and ready" : "Cifrado App está habilitada y lista", + "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente sea un archivo compartido. Consulte con el propietario del mismo y que lo vuelva a compartir con usted.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: '%s'.\n\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.\n\n", "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", "Cheers!" : "¡Saludos!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola,\n<br><br>\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: <strong>%s</strong>\n<br><br>\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.<br><br>", "Enable recovery key" : "Activa la clave de recuperación", "Disable recovery key" : "Desactiva la clave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.", diff --git a/apps/encryption/l10n/es.json b/apps/encryption/l10n/es.json index b070b9393a3..9bdad94cb6d 100644 --- a/apps/encryption/l10n/es.json +++ b/apps/encryption/l10n/es.json @@ -23,10 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "La clave privada no es válida para la app de cifrado. Por favor, actualiza la contraseña de tu clave privada en tus ajustes personales para recuperar el acceso a tus archivos cifrados.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "La app de cifrado está habilitada pero sus claves no se han inicializado, por favor, cierre la sesión y vuelva a iniciarla de nuevo.", "Encryption App is enabled and ready" : "Cifrado App está habilitada y lista", + "one-time password for server-side-encryption" : "Contraseña de un solo uso para el cifrado en el lado servidor", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No fue posible descifrar este archivo, probablemente se trate de un archivo compartido. Solicite al propietario del mismo que vuelva a compartirlo con usted.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "No se puede leer este archivo, probablemente sea un archivo compartido. Consulte con el propietario del mismo y que lo vuelva a compartir con usted.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hola,\n\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: '%s'.\n\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.\n\n", "The share will expire on %s." : "El objeto dejará de ser compartido el %s.", "Cheers!" : "¡Saludos!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hola,\n<br><br>\nEl administrador ha habilitado el cifrado del lado servidor. Sus archivos serán cifrados usando como contraseña: <strong>%s</strong>\n<br><br>\nPor favor logese en el interfaz web, vaya a la sección , 'Modulo básico de cifrado' de sus opciones personales y actualice su contraseña tecleando esta contraseña en el campo 'contraseña antigua' e introduciendo la neva en su correspondiente campo.<br><br>", "Enable recovery key" : "Activa la clave de recuperación", "Disable recovery key" : "Desactiva la clave de recuperación", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clave de recuperación es una clave de cifrado extra que se usa para cifrar ficheros. Permite la recuperación de los ficheros de un usuario si él o ella olvida su contraseña.", diff --git a/apps/encryption/l10n/et_EE.js b/apps/encryption/l10n/et_EE.js index f7e7e1de12c..501772c2808 100644 --- a/apps/encryption/l10n/et_EE.js +++ b/apps/encryption/l10n/et_EE.js @@ -14,6 +14,8 @@ OC.L10N.register( "Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli", "Password successfully changed." : "Parool edukalt vahetatud.", "Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", + "Recovery Key disabled" : "Taastevõti on välja lülitatud", + "Recovery Key enabled" : "Taastevõti on sisse lülitatud", "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.", "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", @@ -23,8 +25,14 @@ OC.L10N.register( "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", "The share will expire on %s." : "Jagamine aegub %s.", "Cheers!" : "Terekest!", + "Enable recovery key" : "Luba taastevõtme kasutamine", + "Disable recovery key" : "Keela taastevõtme kasutamine", "Recovery key password" : "Taastevõtme parool", + "Repeat recovery key password" : "Korda taastevõtme parooli", "Change recovery key password:" : "Muuda taastevõtme parooli:", + "Old recovery key password" : "Vana taastevõtme parool", + "New recovery key password" : "Uus taastevõtme parool", + "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", diff --git a/apps/encryption/l10n/et_EE.json b/apps/encryption/l10n/et_EE.json index ab02c63a71e..14d4c59f9fc 100644 --- a/apps/encryption/l10n/et_EE.json +++ b/apps/encryption/l10n/et_EE.json @@ -12,6 +12,8 @@ "Please repeat the new recovery password" : "Palun korda uut taastevõtme parooli", "Password successfully changed." : "Parool edukalt vahetatud.", "Could not change the password. Maybe the old password was not correct." : "Ei suutnud vahetada parooli. Võib-olla on vana parool valesti sisestatud.", + "Recovery Key disabled" : "Taastevõti on välja lülitatud", + "Recovery Key enabled" : "Taastevõti on sisse lülitatud", "Could not update the private key password." : "Ei suutnud uuendada privaatse võtme parooli.", "The old password was not correct, please try again." : "Vana parool polnud õige, palun proovi uuesti.", "The current log-in password was not correct, please try again." : "Praeguse sisselogimise parool polnud õige, palun proovi uuesti.", @@ -21,8 +23,14 @@ "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Sa ei saa seda faili dekrüpteerida, see on tõenäoliselt jagatud fail. Palun lase omanikul seda faili sinuga uuesti jagada.", "The share will expire on %s." : "Jagamine aegub %s.", "Cheers!" : "Terekest!", + "Enable recovery key" : "Luba taastevõtme kasutamine", + "Disable recovery key" : "Keela taastevõtme kasutamine", "Recovery key password" : "Taastevõtme parool", + "Repeat recovery key password" : "Korda taastevõtme parooli", "Change recovery key password:" : "Muuda taastevõtme parooli:", + "Old recovery key password" : "Vana taastevõtme parool", + "New recovery key password" : "Uus taastevõtme parool", + "Repeat new recovery key password" : "Korda uut taastevõtme parooli", "Change Password" : "Muuda parooli", "Your private key password no longer matches your log-in password." : "Sinu provaatvõtme parool ei kattu enam sinu sisselogimise parooliga.", "Set your old private key password to your current log-in password:" : "Pane oma vana privaatvõtme parooliks oma praegune sisselogimise parool.", diff --git a/apps/encryption/l10n/fr.js b/apps/encryption/l10n/fr.js index 68063f083fc..0de35f8ec1c 100644 --- a/apps/encryption/l10n/fr.js +++ b/apps/encryption/l10n/fr.js @@ -25,10 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête", + "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de lire ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le repartager avec vous. ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe '%s'.\n\nVeuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel.\n", "The share will expire on %s." : "Le partage expirera le %s.", "Cheers!" : "À bientôt !", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour,<br><br>L'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe <strong>%s</strong>. <br><br>Veuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel. <br><br>", "Enable recovery key" : "Activer la clé de récupération", "Disable recovery key" : "Désactiver la clé de récupération", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clé de récupération est une clé supplémentaire utilisée pour chiffrer les fichiers. Elle permet de récupérer les fichiers des utilisateurs s'ils oublient leur mot de passe.", diff --git a/apps/encryption/l10n/fr.json b/apps/encryption/l10n/fr.json index 49616502217..3fa598a72ce 100644 --- a/apps/encryption/l10n/fr.json +++ b/apps/encryption/l10n/fr.json @@ -23,10 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Votre clef privée de chiffrement n'est pas valide ! Veuillez mettre à jour le mot de passe de la clef privée dans vos paramètres personnels pour récupérer l'accès à vos fichiers chiffrés.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "L'application de chiffrement est activée mais vos clefs ne sont pas initialisées. Veuillez vous déconnecter et ensuite vous reconnecter.", "Encryption App is enabled and ready" : "L'application de chiffrement est activée et prête", + "one-time password for server-side-encryption" : "Mot de passe à usage unique pour le chiffrement côté serveur", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de déchiffrer ce fichier : il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le partager à nouveau avec vous.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Impossible de lire ce fichier, il s'agit probablement d'un fichier partagé. Veuillez demander au propriétaire du fichier de le repartager avec vous. ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Bonjour,\n\nL'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe '%s'.\n\nVeuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel.\n", "The share will expire on %s." : "Le partage expirera le %s.", "Cheers!" : "À bientôt !", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Bonjour,<br><br>L'administrateur a activé le chiffrement côté serveur. Vos fichiers ont été chiffrés avec le mot de passe <strong>%s</strong>. <br><br>Veuillez vous connecté dans l'interface web, allez dans la section \"Module de chiffrement de base d'ownCloud\" de vos paramètres personnels. De là mettez à jour votre mot de passe de chiffrement en entrant ce mot de passe dans le champ \"Ancien mot de passe de connexion\" et votre mot de passe de connexion actuel. <br><br>", "Enable recovery key" : "Activer la clé de récupération", "Disable recovery key" : "Désactiver la clé de récupération", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "La clé de récupération est une clé supplémentaire utilisée pour chiffrer les fichiers. Elle permet de récupérer les fichiers des utilisateurs s'ils oublient leur mot de passe.", diff --git a/apps/encryption/l10n/id.js b/apps/encryption/l10n/id.js index c0eb1576f11..1247b35bad6 100644 --- a/apps/encryption/l10n/id.js +++ b/apps/encryption/l10n/id.js @@ -25,10 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap", + "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hai,\n\nadmin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi '%s'.\n\nSilakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi-masuk saat ini.\n\n", "The share will expire on %s." : "Pembagian akan berakhir pada %s.", "Cheers!" : "Horee!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>", "Enable recovery key" : "Aktifkan kunci pemulihan", "Disable recovery key" : "Nonaktifkan kunci pemulihan", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kunci pemulihan adalah kunci enkripsi tambahan yang digunakan untuk mengenkripsi berkas. Kunci pemulihan memungkinkan untuk memulihkan berkas-berkas pengguna ketika pengguna tersebut melupakan sandi mereka.", diff --git a/apps/encryption/l10n/id.json b/apps/encryption/l10n/id.json index 59f39b2ea3a..3771f7e935f 100644 --- a/apps/encryption/l10n/id.json +++ b/apps/encryption/l10n/id.json @@ -23,10 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Kunci privat tidak sah untuk Aplikasi Enskripsi. Silakan perbarui sandi kunci privat anda pada pengaturan pribadi untuk memulihkan akses ke berkas anda yang dienskripsi.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Aplikasi Enskripsi telah diaktifkan tetapi kunci tidak diinisialisasi, silakan log-out dan log-in lagi", "Encryption App is enabled and ready" : "Apl Enkripsi telah diaktifkan dan siap", + "one-time password for server-side-encryption" : "Sandi sekali pakai untuk server-side-encryption", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat mendekripsi berkas ini, mungkin ini adalah berkas bersama. Silakan meminta pemilik berkas ini untuk membagikan kembali dengan Anda.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Tidak dapat membaca berkas ini, kemungkinan merupakan berkas berbagi. Silakan minta pemilik berkas untuk membagikan ulang kepada Anda.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Hai,\n\nadmin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi '%s'.\n\nSilakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi-masuk saat ini.\n\n", "The share will expire on %s." : "Pembagian akan berakhir pada %s.", "Cheers!" : "Horee!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Hai,<br><br>admin mengaktifkan server-side-encryption. Berkas-berkas Anda dienkripsi menggunakan sandi <strong>%s</strong>.<br><br>Silakan masuk di antarmuka web, pergi ke bagian 'modul enkripsi dasar ownCloud' pada pengaturan pribadi Anda dan perbarui sandi enkripsi Anda dengan memasukkan sandi ini kedalam kolom 'sandi masuk yang lama' dan sandi masuk yang baru.<br><br>", "Enable recovery key" : "Aktifkan kunci pemulihan", "Disable recovery key" : "Nonaktifkan kunci pemulihan", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kunci pemulihan adalah kunci enkripsi tambahan yang digunakan untuk mengenkripsi berkas. Kunci pemulihan memungkinkan untuk memulihkan berkas-berkas pengguna ketika pengguna tersebut melupakan sandi mereka.", diff --git a/apps/encryption/l10n/th_TH.js b/apps/encryption/l10n/th_TH.js index 82db7a6e8b3..3c4a5d696fa 100644 --- a/apps/encryption/l10n/th_TH.js +++ b/apps/encryption/l10n/th_TH.js @@ -25,10 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", "Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน", + "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถถอดรหัสไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาถามเจ้าของไฟล์เพื่อยกเลิกการใช้งานร่วมกัน ", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถอ่านไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาสอบถามเจ้าของไฟล์เพื่อแชร์ไฟล์กับคุณ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "นี่คุณ<br>\n<br> \nผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong><br>\n<br>\nกรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br>\n<br>\n", "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", "Cheers!" : "ไชโย!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "นี่คุณ <br><br> ผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong> <br><br>กรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br><br>", "Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส", "Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน", diff --git a/apps/encryption/l10n/th_TH.json b/apps/encryption/l10n/th_TH.json index 11fd75b87e1..b69cdb8a871 100644 --- a/apps/encryption/l10n/th_TH.json +++ b/apps/encryption/l10n/th_TH.json @@ -23,10 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "รหัสส่วนตัวไม่ถูกต้องสำหรับการเข้ารหัสแอพฯ กรุณาอัพเดทรหัสการเข้ารหัสผ่านส่วนตัวของคุณในการตั้งค่าส่วนบุคคลและในการกู้คืนการเข้าถึงไฟล์ที่มีการเข้ารหัสของคุณ", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "การเข้ารหัสแอพฯ ถูกเปิดใช้งานแต่รหัสของคุณยังไม่ได้เริ่มต้นใช้ โปรดออกและเข้าสู่ระบบอีกครั้ง", "Encryption App is enabled and ready" : "เข้ารหัสแอพถูกเปิดใช้งานและพร้อมทำงาน", + "one-time password for server-side-encryption" : "รหัสผ่านเพียงครั้งเดียว สำหรับเข้ารหัสฝั่งเซิร์ฟเวอร์", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถถอดรหัสไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาถามเจ้าของไฟล์เพื่อยกเลิกการใช้งานร่วมกัน ", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "ไม่สามารถอ่านไฟล์นี้ มันอาจเป็นไฟล์ที่ใช้งานร่วมกัน กรุณาสอบถามเจ้าของไฟล์เพื่อแชร์ไฟล์กับคุณ", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "นี่คุณ<br>\n<br> \nผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong><br>\n<br>\nกรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br>\n<br>\n", "The share will expire on %s." : "การแชร์จะหมดอายุในวันที่ %s", "Cheers!" : "ไชโย!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "นี่คุณ <br><br> ผู้ดูแลระบบเปิดใช้งานการเข้ารหัสฝั่งเซิร์ฟเวอร์ ไฟล์ของคุณจะถูกเข้ารหัสโดยใช้รหัสผ่าน <strong>%s</strong> <br><br>กรุณาเข้าสู่ระบบเว็บอินเตอร์เฟซไปที่ส่วน \"โมดูลการเข้ารหัส ownCloud พื้นฐาน\" ของการตั้งค่าส่วนบุคคลของคุณและอัพเดทการเข้ารหัสรหัสผ่านของคุณโดย ป้อนรหัสผ่านนี้ในช่อง \"รหัสผ่านเก่าที่เข้าสู่ระบบ\" และเข้าสู่ระบบด้วยรหัสผ่านปัจจุบันของคุณ<br><br>", "Enable recovery key" : "เปิดใช้งานการกู้คืนรหัส", "Disable recovery key" : "ปิดใช้งานรหัสการกู้คืนรหัส", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "รหัสการกู้คืนเป็นการเข้ารหัสลับพิเศษจะใช้ในการเข้ารหัสไฟล์ มันจะช่วยเรื่องการกู้คืนไฟล์ของผู้ใช้ที่ลืมรหัสผ่าน", diff --git a/apps/encryption/l10n/tr.js b/apps/encryption/l10n/tr.js index 2c8eff7e62b..96db8f91209 100644 --- a/apps/encryption/l10n/tr.js +++ b/apps/encryption/l10n/tr.js @@ -25,10 +25,13 @@ OC.L10N.register( "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", "Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır", + "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan okunamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Selam,\n\nsistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız '%s' parolası kullanılarak şifrelendi.\n\nLütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.\n\n", "The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.", "Cheers!" : "Hoşçakalın!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Selam,<br><br>sistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız <strong>%s</strong> parolası kullanılarak şifrelendi.<br><br>Lütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.<br><br>", "Enable recovery key" : "Kurtarma anahtarını etkinleştir", "Disable recovery key" : "Kurtarma anahtarını devre dışı bırak", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kurtarma anahtarı, dosyaların şifrelenmesi için daha fazla \nşifreleme sunar. Bu kullanıcının dosyasının şifresini unuttuğunda kurtarmasına imkan verir.", diff --git a/apps/encryption/l10n/tr.json b/apps/encryption/l10n/tr.json index a1bb9b6a5d9..be6f6a5dfdd 100644 --- a/apps/encryption/l10n/tr.json +++ b/apps/encryption/l10n/tr.json @@ -23,10 +23,13 @@ "Invalid private key for Encryption App. Please update your private key password in your personal settings to recover access to your encrypted files." : "Şifreleme Uygulaması için geçersiz özel anahtar. Lütfen şifreli dosyalarınıza erişimi tekrar kazanabilmek için kişisel ayarlarınızdan özel anahtar parolanızı güncelleyin.", "Encryption App is enabled but your keys are not initialized, please log-out and log-in again" : "Şifreleme Uygulaması etkin ancak anahtarlarınız başlatılmamış. Lütfen oturumu kapatıp yeniden açın", "Encryption App is enabled and ready" : "Şifreleme Uygulaması etkin ve hazır", + "one-time password for server-side-encryption" : "sunucu tarafında şifleme için tek kullanımlık parola", "Can not decrypt this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan şifrelemesi kaldırılamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", "Can not read this file, probably this is a shared file. Please ask the file owner to reshare the file with you." : "Bu dosya muhtemelen bir paylaşılan dosya olduğundan okunamıyor. Lütfen dosyayı sizinle bir daha paylaşması için dosya sahibi ile iletişime geçin.", + "Hey there,\n\nthe admin enabled server-side-encryption. Your files were encrypted using the password '%s'.\n\nPlease login to the web interface, go to the section 'ownCloud basic encryption module' of your personal settings and update your encryption password by entering this password into the 'old log-in password' field and your current login-password.\n\n" : "Selam,\n\nsistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız '%s' parolası kullanılarak şifrelendi.\n\nLütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.\n\n", "The share will expire on %s." : "Bu paylaşım %s tarihinde sona erecek.", "Cheers!" : "Hoşçakalın!", + "Hey there,<br><br>the admin enabled server-side-encryption. Your files were encrypted using the password <strong>%s</strong>.<br><br>Please login to the web interface, go to the section \"ownCloud basic encryption module\" of your personal settings and update your encryption password by entering this password into the \"old log-in password\" field and your current login-password.<br><br>" : "Selam,<br><br>sistem yöneticisi sunucu tarafında şifrelemeyi etkinleştirdi. Dosyalarınız <strong>%s</strong> parolası kullanılarak şifrelendi.<br><br>Lütfen web arayüzünde oturum açın ve kişisel ayarlarınızdan 'ownCloud temel şifreleme modülü'ne giderek 'eski oturum parolası' alanına bu parolayı girerek şifreleme parolanızı ve mevcut oturum açma parolanızı güncelleyin.<br><br>", "Enable recovery key" : "Kurtarma anahtarını etkinleştir", "Disable recovery key" : "Kurtarma anahtarını devre dışı bırak", "The recovery key is an extra encryption key that is used to encrypt files. It allows recovery of a user's files if the user forgets his or her password." : "Kurtarma anahtarı, dosyaların şifrelenmesi için daha fazla \nşifreleme sunar. Bu kullanıcının dosyasının şifresini unuttuğunda kurtarmasına imkan verir.", diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php index 1bd6af2eca7..d2925e1b6be 100644 --- a/apps/encryption/lib/crypto/encryption.php +++ b/apps/encryption/lib/crypto/encryption.php @@ -84,6 +84,9 @@ class Encryption implements IEncryptionModule { /** @var EncryptAll */ private $encryptAll; + /** @var bool */ + private $useMasterPassword; + /** * * @param Crypt $crypt @@ -105,6 +108,7 @@ class Encryption implements IEncryptionModule { $this->encryptAll = $encryptAll; $this->logger = $logger; $this->l = $il10n; + $this->useMasterPassword = $util->isMasterKeyEnabled(); } /** @@ -193,23 +197,26 @@ class Encryption implements IEncryptionModule { $this->writeCache = ''; } $publicKeys = array(); - foreach ($this->accessList['users'] as $uid) { - try { - $publicKeys[$uid] = $this->keyManager->getPublicKey($uid); - } catch (PublicKeyMissingException $e) { - $this->logger->warning( - 'no public key found for user "{uid}", user will not be able to read the file', - ['app' => 'encryption', 'uid' => $uid] - ); - // if the public key of the owner is missing we should fail - if ($uid === $this->user) { - throw $e; + if ($this->useMasterPassword === true) { + $publicKeys[$this->keyManager->getMasterKeyId()] = $this->keyManager->getPublicMasterKey(); + } else { + foreach ($this->accessList['users'] as $uid) { + try { + $publicKeys[$uid] = $this->keyManager->getPublicKey($uid); + } catch (PublicKeyMissingException $e) { + $this->logger->warning( + 'no public key found for user "{uid}", user will not be able to read the file', + ['app' => 'encryption', 'uid' => $uid] + ); + // if the public key of the owner is missing we should fail + if ($uid === $this->user) { + throw $e; + } } } } $publicKeys = $this->keyManager->addSystemKeys($this->accessList, $publicKeys, $this->user); - $encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys); $this->keyManager->setAllFileKeys($this->path, $encryptedKeyfiles); } @@ -318,8 +325,12 @@ class Encryption implements IEncryptionModule { if (!empty($fileKey)) { $publicKeys = array(); - foreach ($accessList['users'] as $user) { - $publicKeys[$user] = $this->keyManager->getPublicKey($user); + if ($this->useMasterPassword === true) { + $publicKeys[$this->keyManager->getMasterKeyId()] = $this->keyManager->getPublicMasterKey(); + } else { + foreach ($accessList['users'] as $user) { + $publicKeys[$user] = $this->keyManager->getPublicKey($user); + } } $publicKeys = $this->keyManager->addSystemKeys($accessList, $publicKeys, $uid); diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php index 6c793e5964f..c4507228878 100644 --- a/apps/encryption/lib/keymanager.php +++ b/apps/encryption/lib/keymanager.php @@ -55,6 +55,10 @@ class KeyManager { */ private $publicShareKeyId; /** + * @var string + */ + private $masterKeyId; + /** * @var string UserID */ private $keyId; @@ -131,10 +135,20 @@ class KeyManager { $this->config->setAppValue('encryption', 'publicShareKeyId', $this->publicShareKeyId); } + $this->masterKeyId = $this->config->getAppValue('encryption', + 'masterKeyId'); + if (empty($this->masterKeyId)) { + $this->masterKeyId = 'master_' . substr(md5(time()), 0, 8); + $this->config->setAppValue('encryption', 'masterKeyId', $this->masterKeyId); + } + $this->keyId = $userSession && $userSession->isLoggedIn() ? $userSession->getUser()->getUID() : false; $this->log = $log; } + /** + * check if key pair for public link shares exists, if not we create one + */ public function validateShareKey() { $shareKey = $this->getPublicShareKey(); if (empty($shareKey)) { @@ -153,6 +167,26 @@ class KeyManager { } /** + * check if a key pair for the master key exists, if not we create one + */ + public function validateMasterKey() { + $masterKey = $this->getPublicMasterKey(); + if (empty($masterKey)) { + $keyPair = $this->crypt->createKeyPair(); + + // Save public key + $this->keyStorage->setSystemUserKey( + $this->masterKeyId . '.publicKey', $keyPair['publicKey'], + Encryption::ID); + + // Encrypt private key with system password + $encryptedKey = $this->crypt->encryptPrivateKey($keyPair['privateKey'], $this->getMasterKeyPassword(), $this->masterKeyId); + $header = $this->crypt->generateHeader(); + $this->setSystemPrivateKey($this->masterKeyId, $header . $encryptedKey); + } + } + + /** * @return bool */ public function recoveryKeyExists() { @@ -304,8 +338,15 @@ class KeyManager { $this->session->setStatus(Session::INIT_EXECUTED); + try { - $privateKey = $this->getPrivateKey($uid); + if($this->util->isMasterKeyEnabled()) { + $uid = $this->getMasterKeyId(); + $passPhrase = $this->getMasterKeyPassword(); + $privateKey = $this->getSystemPrivateKey($uid); + } else { + $privateKey = $this->getPrivateKey($uid); + } $privateKey = $this->crypt->decryptPrivateKey($privateKey, $passPhrase, $uid); } catch (PrivateKeyMissingException $e) { return false; @@ -345,6 +386,10 @@ class KeyManager { public function getFileKey($path, $uid) { $encryptedFileKey = $this->keyStorage->getFileKey($path, $this->fileKeyId, Encryption::ID); + if ($this->util->isMasterKeyEnabled()) { + $uid = $this->getMasterKeyId(); + } + if (is_null($uid)) { $uid = $this->getPublicShareKeyId(); $shareKey = $this->getShareKey($path, $uid); @@ -566,4 +611,37 @@ class KeyManager { return $publicKeys; } + + /** + * get master key password + * + * @return string + * @throws \Exception + */ + protected function getMasterKeyPassword() { + $password = $this->config->getSystemValue('secret'); + if (empty($password)){ + throw new \Exception('Can not get secret from ownCloud instance'); + } + + return $password; + } + + /** + * return master key id + * + * @return string + */ + public function getMasterKeyId() { + return $this->masterKeyId; + } + + /** + * get public master key + * + * @return string + */ + public function getPublicMasterKey() { + return $this->keyStorage->getSystemUserKey($this->masterKeyId . '.publicKey', Encryption::ID); + } } diff --git a/apps/encryption/lib/users/setup.php b/apps/encryption/lib/users/setup.php index 433ea824c9b..d4f7c374547 100644 --- a/apps/encryption/lib/users/setup.php +++ b/apps/encryption/lib/users/setup.php @@ -84,6 +84,7 @@ class Setup { */ public function setupServerSide($uid, $password) { $this->keyManager->validateShareKey(); + $this->keyManager->validateMasterKey(); // Check if user already has keys if (!$this->keyManager->userHasKeys($uid)) { return $this->keyManager->storeKeyPair($uid, $password, diff --git a/apps/encryption/lib/util.php b/apps/encryption/lib/util.php index fbedc5d6077..e9f916eff38 100644 --- a/apps/encryption/lib/util.php +++ b/apps/encryption/lib/util.php @@ -102,6 +102,16 @@ class Util { } /** + * check if master key is enabled + * + * @return bool + */ + public function isMasterKeyEnabled() { + $userMasterKey = $this->config->getAppValue('encryption', 'useMasterKey', '0'); + return ($userMasterKey === '1'); + } + + /** * @param $enabled * @return bool */ diff --git a/apps/encryption/tests/command/testenablemasterkey.php b/apps/encryption/tests/command/testenablemasterkey.php new file mode 100644 index 00000000000..c905329269e --- /dev/null +++ b/apps/encryption/tests/command/testenablemasterkey.php @@ -0,0 +1,103 @@ +<?php +/** + * @author Björn Schießle <schiessle@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + + +namespace OCA\Encryption\Tests\Command; + + +use OCA\Encryption\Command\EnableMasterKey; +use Test\TestCase; + +class TestEnableMasterKey extends TestCase { + + /** @var EnableMasterKey */ + protected $enableMasterKey; + + /** @var Util | \PHPUnit_Framework_MockObject_MockObject */ + protected $util; + + /** @var \OCP\IConfig | \PHPUnit_Framework_MockObject_MockObject */ + protected $config; + + /** @var \Symfony\Component\Console\Helper\QuestionHelper | \PHPUnit_Framework_MockObject_MockObject */ + protected $questionHelper; + + /** @var \Symfony\Component\Console\Output\OutputInterface | \PHPUnit_Framework_MockObject_MockObject */ + protected $output; + + /** @var \Symfony\Component\Console\Input\InputInterface | \PHPUnit_Framework_MockObject_MockObject */ + protected $input; + + public function setUp() { + parent::setUp(); + + $this->util = $this->getMockBuilder('OCA\Encryption\Util') + ->disableOriginalConstructor()->getMock(); + $this->config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor()->getMock(); + $this->questionHelper = $this->getMockBuilder('Symfony\Component\Console\Helper\QuestionHelper') + ->disableOriginalConstructor()->getMock(); + $this->output = $this->getMockBuilder('Symfony\Component\Console\Output\OutputInterface') + ->disableOriginalConstructor()->getMock(); + $this->input = $this->getMockBuilder('Symfony\Component\Console\Input\InputInterface') + ->disableOriginalConstructor()->getMock(); + + $this->enableMasterKey = new EnableMasterKey($this->util, $this->config, $this->questionHelper); + } + + /** + * @dataProvider dataTestExecute + * + * @param bool $isAlreadyEnabled + * @param string $answer + */ + public function testExecute($isAlreadyEnabled, $answer) { + + $this->util->expects($this->once())->method('isMasterKeyEnabled') + ->willReturn($isAlreadyEnabled); + + if ($isAlreadyEnabled) { + $this->output->expects($this->once())->method('writeln') + ->with('Master key already enabled'); + } else { + if ($answer === 'y') { + $this->questionHelper->expects($this->once())->method('ask')->willReturn(true); + $this->config->expects($this->once())->method('setAppValue') + ->with('encryption', 'useMasterKey', '1'); + } else { + $this->questionHelper->expects($this->once())->method('ask')->willReturn(false); + $this->config->expects($this->never())->method('setAppValue'); + + } + } + + $this->invokePrivate($this->enableMasterKey, 'execute', [$this->input, $this->output]); + } + + public function dataTestExecute() { + return [ + [true, ''], + [false, 'y'], + [false, 'n'], + [false, ''] + ]; + } +} diff --git a/apps/encryption/tests/lib/KeyManagerTest.php b/apps/encryption/tests/lib/KeyManagerTest.php index 71b00cf254a..8f1da623efb 100644 --- a/apps/encryption/tests/lib/KeyManagerTest.php +++ b/apps/encryption/tests/lib/KeyManagerTest.php @@ -27,6 +27,7 @@ namespace OCA\Encryption\Tests; use OCA\Encryption\KeyManager; +use OCA\Encryption\Session; use Test\TestCase; class KeyManagerTest extends TestCase { @@ -237,24 +238,62 @@ class KeyManagerTest extends TestCase { } + /** + * @dataProvider dataTestInit + * + * @param bool $useMasterKey + */ + public function testInit($useMasterKey) { + + $instance = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->setConstructorArgs( + [ + $this->keyStorageMock, + $this->cryptMock, + $this->configMock, + $this->userMock, + $this->sessionMock, + $this->logMock, + $this->utilMock + ] + )->setMethods(['getMasterKeyId', 'getMasterKeyPassword', 'getSystemPrivateKey', 'getPrivateKey']) + ->getMock(); - public function testInit() { - $this->keyStorageMock->expects($this->any()) - ->method('getUserKey') - ->with($this->equalTo($this->userId), $this->equalTo('privateKey')) - ->willReturn('privateKey'); - $this->cryptMock->expects($this->any()) - ->method('decryptPrivateKey') - ->with($this->equalTo('privateKey'), $this->equalTo('pass')) - ->willReturn('decryptedPrivateKey'); + $this->utilMock->expects($this->once())->method('isMasterKeyEnabled') + ->willReturn($useMasterKey); + + $this->sessionMock->expects($this->at(0))->method('setStatus') + ->with(Session::INIT_EXECUTED); + + $instance->expects($this->any())->method('getMasterKeyId')->willReturn('masterKeyId'); + $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword'); + $instance->expects($this->any())->method('getSystemPrivateKey')->with('masterKeyId')->willReturn('privateMasterKey'); + $instance->expects($this->any())->method('getPrivateKey')->with($this->userId)->willReturn('privateUserKey'); + + if($useMasterKey) { + $this->cryptMock->expects($this->once())->method('decryptPrivateKey') + ->with('privateMasterKey', 'masterKeyPassword', 'masterKeyId') + ->willReturn('key'); + } else { + $this->cryptMock->expects($this->once())->method('decryptPrivateKey') + ->with('privateUserKey', 'pass', $this->userId) + ->willReturn('key'); + } + $this->sessionMock->expects($this->once())->method('setPrivateKey') + ->with('key'); - $this->assertTrue( - $this->instance->init($this->userId, 'pass') - ); + $this->assertTrue($instance->init($this->userId, 'pass')); + } + public function dataTestInit() { + return [ + [true], + [false] + ]; } + public function testSetRecoveryKey() { $this->keyStorageMock->expects($this->exactly(2)) ->method('setSystemUserKey') @@ -401,5 +440,92 @@ class KeyManagerTest extends TestCase { ); } + public function testGetMasterKeyId() { + $this->assertSame('systemKeyId', $this->instance->getMasterKeyId()); + } + + public function testGetPublicMasterKey() { + $this->keyStorageMock->expects($this->once())->method('getSystemUserKey') + ->with('systemKeyId.publicKey', \OCA\Encryption\Crypto\Encryption::ID) + ->willReturn(true); + + $this->assertTrue( + $this->instance->getPublicMasterKey() + ); + } + + public function testGetMasterKeyPassword() { + $this->configMock->expects($this->once())->method('getSystemValue')->with('secret') + ->willReturn('password'); + + $this->assertSame('password', + $this->invokePrivate($this->instance, 'getMasterKeyPassword', []) + ); + } + + /** + * @expectedException \Exception + */ + public function testGetMasterKeyPasswordException() { + $this->configMock->expects($this->once())->method('getSystemValue')->with('secret') + ->willReturn(''); + + $this->invokePrivate($this->instance, 'getMasterKeyPassword', []); + } + + /** + * @dataProvider dataTestValidateMasterKey + * + * @param $masterKey + */ + public function testValidateMasterKey($masterKey) { + + /** @var \OCA\Encryption\KeyManager | \PHPUnit_Framework_MockObject_MockObject $instance */ + $instance = $this->getMockBuilder('OCA\Encryption\KeyManager') + ->setConstructorArgs( + [ + $this->keyStorageMock, + $this->cryptMock, + $this->configMock, + $this->userMock, + $this->sessionMock, + $this->logMock, + $this->utilMock + ] + )->setMethods(['getPublicMasterKey', 'setSystemPrivateKey', 'getMasterKeyPassword']) + ->getMock(); + + $instance->expects($this->once())->method('getPublicMasterKey') + ->willReturn($masterKey); + + $instance->expects($this->any())->method('getMasterKeyPassword')->willReturn('masterKeyPassword'); + $this->cryptMock->expects($this->any())->method('generateHeader')->willReturn('header'); + + if(empty($masterKey)) { + $this->cryptMock->expects($this->once())->method('createKeyPair') + ->willReturn(['publicKey' => 'public', 'privateKey' => 'private']); + $this->keyStorageMock->expects($this->once())->method('setSystemUserKey') + ->with('systemKeyId.publicKey', 'public', \OCA\Encryption\Crypto\Encryption::ID); + $this->cryptMock->expects($this->once())->method('encryptPrivateKey') + ->with('private', 'masterKeyPassword', 'systemKeyId') + ->willReturn('EncryptedKey'); + $instance->expects($this->once())->method('setSystemPrivateKey') + ->with('systemKeyId', 'headerEncryptedKey'); + } else { + $this->cryptMock->expects($this->never())->method('createKeyPair'); + $this->keyStorageMock->expects($this->never())->method('setSystemUserKey'); + $this->cryptMock->expects($this->never())->method('encryptPrivateKey'); + $instance->expects($this->never())->method('setSystemPrivateKey'); + } + + $instance->validateMasterKey(); + } + + public function dataTestValidateMasterKey() { + return [ + ['masterKey'], + [''] + ]; + } } diff --git a/apps/encryption/tests/lib/UtilTest.php b/apps/encryption/tests/lib/UtilTest.php index e75e8ea36b4..9988ff93f43 100644 --- a/apps/encryption/tests/lib/UtilTest.php +++ b/apps/encryption/tests/lib/UtilTest.php @@ -132,4 +132,25 @@ class UtilTest extends TestCase { return $default ?: null; } + /** + * @dataProvider dataTestIsMasterKeyEnabled + * + * @param string $value + * @param bool $expect + */ + public function testIsMasterKeyEnabled($value, $expect) { + $this->configMock->expects($this->once())->method('getAppValue') + ->with('encryption', 'useMasterKey', '0')->willReturn($value); + $this->assertSame($expect, + $this->instance->isMasterKeyEnabled() + ); + } + + public function dataTestIsMasterKeyEnabled() { + return [ + ['0', false], + ['1', true] + ]; + } + } diff --git a/apps/encryption/tests/lib/users/SetupTest.php b/apps/encryption/tests/lib/users/SetupTest.php index e6936c5c12e..bca3ff58b07 100644 --- a/apps/encryption/tests/lib/users/SetupTest.php +++ b/apps/encryption/tests/lib/users/SetupTest.php @@ -43,6 +43,8 @@ class SetupTest extends TestCase { private $instance; public function testSetupServerSide() { + $this->keyManagerMock->expects($this->exactly(2))->method('validateShareKey'); + $this->keyManagerMock->expects($this->exactly(2))->method('validateMasterKey'); $this->keyManagerMock->expects($this->exactly(2)) ->method('userHasKeys') ->with('admin') diff --git a/apps/files/css/detailsView.css b/apps/files/css/detailsView.css index ffead923124..8eded7acda1 100644 --- a/apps/files/css/detailsView.css +++ b/apps/files/css/detailsView.css @@ -19,6 +19,27 @@ float: left; } +#app-sidebar .thumbnailContainer.image { + margin-left: -15px; + margin-right: -35px; /* 15 + 20 for the close button */ + margin-top: -15px; +} + +#app-sidebar .image .thumbnail { + width:100%; + display:block; + height: 250px; + background-repeat: no-repeat; + background-position: 50% top; + background-size: 100%; + float: none; + margin: 0; +} + +#app-sidebar .image.portrait .thumbnail { + background-size: contain; +} + #app-sidebar .thumbnail { width: 75px; height: 75px; diff --git a/apps/files/css/files.css b/apps/files/css/files.css index 375666141ba..05033dc2fed 100644 --- a/apps/files/css/files.css +++ b/apps/files/css/files.css @@ -18,11 +18,6 @@ z-index: -30; } -#new { - z-index: 1010; - float: left; - padding: 0 !important; /* override default control bar button padding */ -} #trash { margin-right: 8px; float: right; @@ -30,49 +25,8 @@ padding: 10px; font-weight: normal; } -#new > a { - padding: 14px 10px; - position: relative; - top: 7px; -} -#new.active { - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - border-bottom: none; - background: #f8f8f8; -} -#new > ul { - display: none; - position: fixed; - min-width: 112px; - z-index: -10; - padding: 8px; - padding-bottom: 0; - margin-top: 13.5px; - margin-left: -1px; - text-align: left; - background: #f8f8f8; - border: 1px solid #ddd; - border: 1px solid rgba(240, 240, 240, 0.9); - border-radius: 5px; - border-top-left-radius: 0; - box-shadow: 0 2px 7px rgba(170,170,170,.4); -} -#new > ul > li { - height: 36px; - margin: 5px; - padding-left: 42px; - padding-bottom: 2px; - background-position: left center; - cursor: pointer; -} -#new > ul > li > p { - cursor: pointer; - padding-top: 7px; - padding-bottom: 7px; -} -#new .error, #fileList .error { +.newFileMenu .error, #fileList .error { color: #e9322d; border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; @@ -144,6 +98,30 @@ margin-bottom: 44px; } +#app-navigation .nav-files a.nav-icon-files { + width: auto; +} +/* button needs overrides due to navigation styles */ +#app-navigation .nav-files a.new { + width: 40px; + height: 32px; + padding: 0 10px; + margin: 0; + cursor: pointer; +} + +#app-navigation .nav-files a { + display: inline-block; +} + +#app-navigation .nav-files a.new.hidden { + display: none; +} + +#app-navigation .nav-files a.new.disabled { + opacity: 0.3; +} + #filestable tbody tr { background-color: #fff; height: 40px; @@ -600,7 +578,8 @@ a.action > img { #fileList a.action.action-menu { padding: 17px 14px; } -#fileList .fileActionsMenu { + +#fileList .popovermenu { margin-right: 21px; } @@ -655,13 +634,13 @@ a.action > img { } /* properly display actions in the popover menu */ -#fileList .fileActionsMenu .action { +#fileList .popovermenu .action { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)" !important; filter: alpha(opacity=50) !important; opacity: .5 !important; } -#fileList .fileActionsMenu .action:hover, -#fileList .fileActionsMenu .action:focus { +#fileList .popovermenu .action:hover, +#fileList .popovermenu .action:focus { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)" !important; filter: alpha(opacity=100) !important; opacity: 1 !important; @@ -745,43 +724,56 @@ table.dragshadow td.size { opacity: 0; } -.fileActionsMenu { - padding: 4px 12px; -} -.fileActionsMenu li { - padding: 5px 0; -} -#fileList .fileActionsMenu a.action img { +#fileList .popovermenu a.action img { padding: initial; } -#fileList .fileActionsMenu a.action { + +#fileList .popovermenu a.action { padding: 10px; margin: -10px; } -.fileActionsMenu.hidden { - display: none; +.newFileMenu { + width: 140px; + margin-left: -56px; + margin-top: 25px; } -#fileList .fileActionsMenu .action { - display: block; - line-height: 30px; - padding-left: 5px; - color: #000; +.newFileMenu .menuitem { + white-space: nowrap; + overflow: hidden; +} +.newFileMenu.popovermenu .menuitem .icon { + margin-bottom: -2px; +} +.newFileMenu.popovermenu a.menuitem, +.newFileMenu.popovermenu label.menuitem, +.newFileMenu.popovermenu .menuitem { padding: 0; + margin: 0; +} + +.newFileMenu.bubble:after { + left: 75px; + right: auto; +} +.newFileMenu.bubble:before { + left: 75px; + right: auto; } -.fileActionsMenu .action img, -.fileActionsMenu .action .no-icon { +.newFileMenu .filenameform { display: inline-block; - width: 16px; - margin-right: 5px; } -.fileActionsMenu .action { - opacity: 0.5; +.newFileMenu .filenameform input { + width: 100px; } -.fileActionsMenu li:hover .action { - opacity: 1; +#fileList .popovermenu .action { + display: block; + line-height: 30px; + padding-left: 5px; + color: #000; + padding: 0; } diff --git a/apps/files/css/upload.css b/apps/files/css/upload.css index bd60f831388..07b788b937f 100644 --- a/apps/files/css/upload.css +++ b/apps/files/css/upload.css @@ -24,20 +24,6 @@ } .file_upload_target { display:none; } .file_upload_form { display:inline; float:left; margin:0; padding:0; cursor:pointer; overflow:visible; } -#file_upload_start { - position: relative; - left: 0; - top: 0; - width: 44px; - height: 44px; - margin: -5px -3px; - padding: 0; - font-size: 16px; - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; - z-index: 20; - cursor: pointer; - overflow: hidden; -} #uploadprogresswrapper, #uploadprogresswrapper * { -moz-box-sizing: border-box; diff --git a/apps/files/index.php b/apps/files/index.php index a73caa50fbe..cc007ebdb07 100644 --- a/apps/files/index.php +++ b/apps/files/index.php @@ -38,6 +38,7 @@ OCP\Util::addStyle('files', 'upload'); OCP\Util::addStyle('files', 'mobile'); OCP\Util::addscript('files', 'app'); OCP\Util::addscript('files', 'file-upload'); +OCP\Util::addscript('files', 'newfilemenu'); OCP\Util::addscript('files', 'jquery.iframe-transport'); OCP\Util::addscript('files', 'jquery.fileupload'); OCP\Util::addscript('files', 'jquery-visibility'); diff --git a/apps/files/js/detailsview.js b/apps/files/js/detailsview.js index 83d7fd4a178..3a775c29ec6 100644 --- a/apps/files/js/detailsview.js +++ b/apps/files/js/detailsview.js @@ -35,7 +35,7 @@ var DetailsView = OC.Backbone.View.extend({ id: 'app-sidebar', tabName: 'div', - className: 'detailsView', + className: 'detailsView scroll-container', _template: null, diff --git a/apps/files/js/detailtabview.js b/apps/files/js/detailtabview.js index b0e170bc4e7..449047cf252 100644 --- a/apps/files/js/detailtabview.js +++ b/apps/files/js/detailtabview.js @@ -84,6 +84,13 @@ */ getFileInfo: function() { return this.model; + }, + + /** + * Load the next page of results + */ + nextPage: function() { + // load the next page, if applicable } }); DetailTabView._TAB_COUNT = 0; diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js index 6b6acdb5e01..17f0f777169 100644 --- a/apps/files/js/file-upload.js +++ b/apps/files/js/file-upload.js @@ -551,155 +551,6 @@ OC.Upload = { $('#file_upload_start').attr('multiple', 'multiple'); } - $(document).click(function(ev) { - // do not close when clicking in the dropdown - if ($(ev.target).closest('#new').length){ - return; - } - $('#new>ul').hide(); - $('#new').removeClass('active'); - if ($('#new .error').length > 0) { - $('#new .error').tipsy('hide'); - } - $('#new li').each(function(i,element) { - if ($(element).children('p').length === 0) { - $(element).children('form').remove(); - $(element).append('<p>' + $(element).data('text') + '</p>'); - } - }); - }); - $('#new').click(function(event) { - event.stopPropagation(); - }); - $('#new>a').click(function() { - $('#new>ul').toggle(); - $('#new').toggleClass('active'); - }); - $('#new li').click(function() { - if ($(this).children('p').length === 0) { - return; - } - - $('#new .error').tipsy('hide'); - - $('#new li').each(function(i, element) { - if ($(element).children('p').length === 0) { - $(element).children('form').remove(); - $(element).append('<p>' + $(element).data('text') + '</p>'); - } - }); - - var type = $(this).data('type'); - var text = $(this).children('p').text(); - $(this).data('text', text); - $(this).children('p').remove(); - - // add input field - var form = $('<form></form>'); - var input = $('<input type="text">'); - var newName = $(this).attr('data-newname') || ''; - var fileType = 'input-' + $(this).attr('data-type'); - if (newName) { - input.val(newName); - input.attr('id', fileType); - } - var label = $('<label class="hidden-visually" for="">' + escapeHTML(newName) + '</label>'); - label.attr('for', fileType); - - form.append(label).append(input); - $(this).append(form); - var lastPos; - var checkInput = function () { - var filename = input.val(); - if (!Files.isFileNameValid(filename)) { - // Files.isFileNameValid(filename) throws an exception itself - } else if (FileList.inList(filename)) { - throw t('files', '{new_name} already exists', {new_name: filename}); - } else { - return true; - } - }; - - // verify filename on typing - input.keyup(function(event) { - try { - checkInput(); - input.tipsy('hide'); - input.removeClass('error'); - } catch (error) { - input.attr('title', error); - input.tipsy({gravity: 'w', trigger: 'manual'}); - input.tipsy('show'); - input.addClass('error'); - } - }); - - input.focus(); - // pre select name up to the extension - lastPos = newName.lastIndexOf('.'); - if (lastPos === -1) { - lastPos = newName.length; - } - input.selectRange(0, lastPos); - form.submit(function(event) { - event.stopPropagation(); - event.preventDefault(); - try { - checkInput(); - var newname = input.val(); - if (FileList.lastAction) { - FileList.lastAction(); - } - var name = FileList.getUniqueName(newname); - switch(type) { - case 'file': - $.post( - OC.filePath('files', 'ajax', 'newfile.php'), - { - dir: FileList.getCurrentDirectory(), - filename: name - }, - function(result) { - if (result.status === 'success') { - FileList.add(result.data, {animate: true, scrollTo: true}); - } else { - OC.dialogs.alert(result.data.message, t('core', 'Could not create file')); - } - } - ); - break; - case 'folder': - $.post( - OC.filePath('files','ajax','newfolder.php'), - { - dir: FileList.getCurrentDirectory(), - foldername: name - }, - function(result) { - if (result.status === 'success') { - FileList.add(result.data, {animate: true, scrollTo: true}); - } else { - OC.dialogs.alert(result.data.message, t('core', 'Could not create folder')); - } - } - ); - break; - } - var li = form.parent(); - form.remove(); - /* workaround for IE 9&10 click event trap, 2 lines: */ - $('input').first().focus(); - $('#content').focus(); - li.append('<p>' + li.data('text') + '</p>'); - $('#new>a').click(); - } catch (error) { - input.attr('title', error); - input.tipsy({gravity: 'w', trigger: 'manual'}); - input.tipsy('show'); - input.addClass('error'); - } - }); - }); window.file_upload_param = file_upload_param; return file_upload_param; } diff --git a/apps/files/js/fileactionsmenu.js b/apps/files/js/fileactionsmenu.js index 623ebde5442..5ab0e42f93e 100644 --- a/apps/files/js/fileactionsmenu.js +++ b/apps/files/js/fileactionsmenu.js @@ -14,7 +14,7 @@ '<ul>' + '{{#each items}}' + '<li>' + - '<a href="#" class="action action-{{nameLowerCase}} permanent" data-action="{{name}}">{{#if icon}}<img src="{{icon}}"/>{{else}}<span class="no-icon"></span>{{/if}}<span>{{displayName}}</span></a>' + + '<a href="#" class="menuitem action action-{{nameLowerCase}} permanent" data-action="{{name}}">{{#if icon}}<img class="icon" src="{{icon}}"/>{{else}}<span class="no-icon"></span>{{/if}}<span>{{displayName}}</span></a>' + '</li>' + '{{/each}}' + '</ul>'; @@ -26,7 +26,7 @@ */ var FileActionsMenu = OC.Backbone.View.extend({ tagName: 'div', - className: 'fileActionsMenu bubble hidden open menu', + className: 'fileActionsMenu popovermenu bubble hidden open menu', /** * Current context diff --git a/apps/files/js/fileinfomodel.js b/apps/files/js/fileinfomodel.js index 05060854fba..22b1ca9ff0c 100644 --- a/apps/files/js/fileinfomodel.js +++ b/apps/files/js/fileinfomodel.js @@ -31,16 +31,15 @@ */ var FileInfoModel = OC.Backbone.Model.extend({ + defaults: { + mimetype: 'application/octet-stream', + path: '' + }, + initialize: function(data) { if (!_.isUndefined(data.id)) { data.id = parseInt(data.id, 10); } - - // TODO: normalize path - data.path = data.path || ''; - data.name = data.name; - - data.mimetype = data.mimetype || 'application/octet-stream'; }, /** @@ -53,6 +52,15 @@ }, /** + * Returns whether this file is an image + * + * @return {boolean} true if this is an image, false otherwise + */ + isImage: function() { + return this.has('mimetype') ? this.get('mimetype').substr(0, 6) === 'image/' : false; + }, + + /** * Returns the full path to this file * * @return {string} full path diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index ac96d587015..c52e414e3a7 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -9,6 +9,9 @@ */ (function() { + + var TEMPLATE_ADDBUTTON = '<a href="#" class="button new" title="{{addText}}"><img src="{{iconUrl}}"></img></a>'; + /** * @class OCA.Files.FileList * @classdesc @@ -220,6 +223,8 @@ this.$el.find('#controls').prepend(this.breadcrumb.$el); + this._renderNewButton(); + this.$el.find('thead th .columntitle').click(_.bind(this._onClickHeader, this)); this._onResize = _.debounce(_.bind(this._onResize, this), 100); @@ -262,6 +267,12 @@ * Destroy / uninitialize this instance. */ destroy: function() { + if (this._newFileMenu) { + this._newFileMenu.remove(); + } + if (this._newButton) { + this._newButton.remove(); + } // TODO: also unregister other event handlers this.fileActions.off('registerAction', this._onFileActionsUpdated); this.fileActions.off('setDefault', this._onFileActionsUpdated); @@ -291,6 +302,7 @@ * @return {OCA.Files.FileInfoModel} file info model */ getModelForFile: function(fileName) { + var self = this; var $tr; // jQuery object ? if (fileName.is) { @@ -318,6 +330,21 @@ if (!model.has('path')) { model.set('path', this.getCurrentDirectory(), {silent: true}); } + + model.on('change', function(model) { + // re-render row + var highlightState = $tr.hasClass('highlighted'); + $tr = self.updateRow( + $tr, + _.extend({isPreviewAvailable: true}, model.toJSON()), + {updateSummary: true, silent: false, animate: true} + ); + $tr.toggleClass('highlighted', highlightState); + }); + model.on('busy', function(model, state) { + self.showFileBusyState($tr, state); + }); + return model; }, @@ -341,6 +368,9 @@ if (!fileName) { OC.Apps.hideAppSidebar(this._detailsView.$el); this._detailsView.setFileInfo(null); + if (this._currentFileModel) { + this._currentFileModel.off(); + } this._currentFileModel = null; return; } @@ -1223,6 +1253,10 @@ reload: function() { this._selectedFiles = {}; this._selectionSummary.clear(); + if (this._currentFileModel) { + this._currentFileModel.off(); + } + this._currentFileModel = null; this.$el.find('.select-all').prop('checked', false); this.showMask(); if (this._reloadCall) { @@ -1359,6 +1393,12 @@ if (options.y) { urlSpec.y = options.y; } + if (options.a) { + urlSpec.a = options.a; + } + if (options.mode) { + urlSpec.mode = options.mode; + } if (etag){ // use etag as cache buster @@ -1377,9 +1417,14 @@ img.onload = function(){ // if loading the preview image failed (no preview for the mimetype) then img.width will < 5 if (img.width > 5) { - ready(previewURL); + ready(previewURL, img); + } else if (options.error) { + options.error(); } }; + if (options.error) { + img.onerror = options.error; + } img.src = previewURL; }, @@ -1544,6 +1589,23 @@ }, /** + * Updates the given row with the given file info + * + * @param {Object} $tr row element + * @param {OCA.Files.FileInfo} fileInfo file info + * @param {Object} options options + * + * @return {Object} new row element + */ + updateRow: function($tr, fileInfo, options) { + this.files.splice($tr.index(), 1); + $tr.remove(); + $tr = this.add(fileInfo, _.extend({updateSummary: false, silent: true}, options)); + this.$fileList.trigger($.Event('fileActionsReady', {fileList: this, $files: $tr})); + return $tr; + }, + + /** * Triggers file rename input field for the given file name. * If the user enters a new name, the file will be renamed. * @@ -1679,6 +1741,106 @@ form.trigger('submit'); }); }, + + /** + * Create an empty file inside the current directory. + * + * @param {string} name name of the file + * + * @return {Promise} promise that will be resolved after the + * file was created + * + * @since 8.2 + */ + createFile: function(name) { + var self = this; + var deferred = $.Deferred(); + var promise = deferred.promise(); + + OCA.Files.Files.isFileNameValid(name); + name = this.getUniqueName(name); + + if (this.lastAction) { + this.lastAction(); + } + + $.post( + OC.generateUrl('/apps/files/ajax/newfile.php'), + { + dir: this.getCurrentDirectory(), + filename: name + }, + function(result) { + if (result.status === 'success') { + self.add(result.data, {animate: true, scrollTo: true}); + deferred.resolve(result.status, result.data); + } else { + if (result.data && result.data.message) { + OC.Notification.showTemporary(result.data.message); + } else { + OC.Notification.showTemporary(t('core', 'Could not create file')); + } + deferred.reject(result.status, result.data); + } + } + ); + + return promise; + }, + + /** + * Create a directory inside the current directory. + * + * @param {string} name name of the directory + * + * @return {Promise} promise that will be resolved after the + * directory was created + * + * @since 8.2 + */ + createDirectory: function(name) { + var self = this; + var deferred = $.Deferred(); + var promise = deferred.promise(); + + OCA.Files.Files.isFileNameValid(name); + name = this.getUniqueName(name); + + if (this.lastAction) { + this.lastAction(); + } + + $.post( + OC.generateUrl('/apps/files/ajax/newfolder.php'), + { + dir: this.getCurrentDirectory(), + foldername: name + }, + function(result) { + if (result.status === 'success') { + self.add(result.data, {animate: true, scrollTo: true}); + deferred.resolve(result.status, result.data); + } else { + if (result.data && result.data.message) { + OC.Notification.showTemporary(result.data.message); + } else { + OC.Notification.showTemporary(t('core', 'Could not create folder')); + } + deferred.reject(result.status); + } + } + ); + + return promise; + }, + + /** + * Returns whether the given file name exists in the list + * + * @param {string} file file name + * + * @return {bool} true if the file exists in the list, false otherwise + */ inList:function(file) { return this.findFileEl(file).length; }, @@ -2340,6 +2502,47 @@ }); }, + _renderNewButton: function() { + // if an upload button (legacy) already exists, skip + if ($('#controls .button.upload').length) { + return; + } + if (!this._addButtonTemplate) { + this._addButtonTemplate = Handlebars.compile(TEMPLATE_ADDBUTTON); + } + var $newButton = $(this._addButtonTemplate({ + addText: t('files', 'New'), + iconUrl: OC.imagePath('core', 'actions/add') + })); + + $('#controls .actions').prepend($newButton); + $newButton.tooltip({'placement': 'bottom'}); + + $newButton.click(_.bind(this._onClickNewButton, this)); + this._newButton = $newButton; + }, + + _onClickNewButton: function(event) { + var $target = $(event.target); + if (!$target.hasClass('.button')) { + $target = $target.closest('.button'); + } + this._newButton.tooltip('hide'); + event.preventDefault(); + if ($target.hasClass('disabled')) { + return false; + } + if (!this._newFileMenu) { + this._newFileMenu = new OCA.Files.NewFileMenu({ + fileList: this + }); + $('body').append(this._newFileMenu.$el); + } + this._newFileMenu.showAt($target); + + return false; + }, + /** * Register a tab view to be added to all views */ diff --git a/apps/files/js/mainfileinfodetailview.js b/apps/files/js/mainfileinfodetailview.js index f647a0de2a9..785eed8d712 100644 --- a/apps/files/js/mainfileinfodetailview.js +++ b/apps/files/js/mainfileinfodetailview.js @@ -10,7 +10,7 @@ (function() { var TEMPLATE = - '<a href="#" class="thumbnail action-default"></a>' + + '<div class="thumbnailContainer"><a href="#" class="thumbnail action-default"></a></div>' + '<div class="file-details-container">' + '<div class="fileName"><h3 title="{{name}}" class="ellipsis">{{name}}</h3></div>' + ' <div class="file-details ellipsis">' + @@ -106,6 +106,7 @@ if (this.model) { var isFavorite = (this.model.get('tags') || []).indexOf(OC.TAG_FAVORITE) >= 0; this.$el.html(this.template({ + type: this.model.isImage()? 'image': '', nameLabel: t('files', 'Name'), name: this.model.get('displayName') || this.model.get('name'), pathLabel: t('files', 'Path'), @@ -123,16 +124,51 @@ // TODO: we really need OC.Previews var $iconDiv = this.$el.find('.thumbnail'); + $iconDiv.addClass('icon-loading'); + $container = this.$el.find('.thumbnailContainer'); if (!this.model.isDirectory()) { this._fileList.lazyLoadPreview({ path: this.model.getFullPath(), mime: this.model.get('mimetype'), etag: this.model.get('etag'), - x: 75, - y: 75, - callback: function(previewUrl) { - $iconDiv.css('background-image', 'url("' + previewUrl + '")'); - } + y: this.model.isImage() ? 250: 75, + x: this.model.isImage() ? 99999 /* only limit on y */ : 75, + a: this.model.isImage() ? 1 : null, + callback: function(previewUrl, img) { + $iconDiv.previewImg = previewUrl; + if (img) { + $iconDiv.removeClass('icon-loading'); + if(img.height > img.width) { + $container.addClass('portrait'); + } + } + if (this.model.isImage() && img) { + $iconDiv.parent().addClass('image'); + var targetHeight = img.height / window.devicePixelRatio; + if (targetHeight <= 75) { + $container.removeClass('image'); // small enough to fit in normaly + targetHeight = 75; + } + } else { + targetHeight = 75; + } + + // only set background when we have an actual preview + // when we dont have a preview we show the mime icon in the error handler + if (img) { + $iconDiv.css({ + 'background-image': 'url("' + previewUrl + '")', + 'height': targetHeight + }); + } + }.bind(this), + error: function() { + $iconDiv.removeClass('icon-loading'); + this.$el.find('.thumbnailContainer').removeClass('image'); //fall back to regular view + $iconDiv.css({ + 'background-image': 'url("' + $iconDiv.previewImg + '")' + }); + }.bind(this) }); } else { // TODO: special icons / shared / external diff --git a/apps/files/js/newfilemenu.js b/apps/files/js/newfilemenu.js new file mode 100644 index 00000000000..4c021e6b873 --- /dev/null +++ b/apps/files/js/newfilemenu.js @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2014 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +/* global Files */ + +(function() { + + var TEMPLATE_MENU = + '<ul>' + + '<li>' + + '<label for="file_upload_start" class="menuitem" data-action="upload" title="{{uploadMaxHumanFilesize}}"><span class="svg icon icon-upload"></span><span class="displayname">{{uploadLabel}}</span></label>' + + '</li>' + + '{{#each items}}' + + '<li>' + + '<a href="#" class="menuitem" data-templatename="{{templateName}}" data-filetype="{{fileType}}" data-action="{{id}}"><span class="icon {{iconClass}} svg"></span><span class="displayname">{{displayName}}</span></a>' + + '</li>' + + '{{/each}}' + + '</ul>'; + + var TEMPLATE_FILENAME_FORM = + '<form class="filenameform">' + + '<label class="hidden-visually" for="{{cid}}-input-{{fileType}}">{{fileName}}</label>' + + '<input id="{{cid}}-input-{{fileType}}" type="text" value="{{fileName}}">' + + '</form>'; + + /** + * Construct a new NewFileMenu instance + * @constructs NewFileMenu + * + * @memberof OCA.Files + */ + var NewFileMenu = OC.Backbone.View.extend({ + tagName: 'div', + className: 'newFileMenu popovermenu bubble hidden open menu', + + events: { + 'click .menuitem': '_onClickAction' + }, + + initialize: function(options) { + var self = this; + var $uploadEl = $('#file_upload_start'); + if ($uploadEl.length) { + $uploadEl.on('fileuploadstart', function() { + self.trigger('actionPerformed', 'upload'); + }); + } else { + console.warn('Missing upload element "file_upload_start"'); + } + + this._fileList = options && options.fileList; + }, + + template: function(data) { + if (!OCA.Files.NewFileMenu._TEMPLATE) { + OCA.Files.NewFileMenu._TEMPLATE = Handlebars.compile(TEMPLATE_MENU); + } + return OCA.Files.NewFileMenu._TEMPLATE(data); + }, + + /** + * Event handler whenever an action has been clicked within the menu + * + * @param {Object} event event object + */ + _onClickAction: function(event) { + var $target = $(event.target); + if (!$target.hasClass('menuitem')) { + $target = $target.closest('.menuitem'); + } + var action = $target.attr('data-action'); + // note: clicking the upload label will automatically + // set the focus on the "file_upload_start" hidden field + // which itself triggers the upload dialog. + // Currently the upload logic is still in file-upload.js and filelist.js + if (action === 'upload') { + OC.hideMenus(); + } else { + event.preventDefault(); + this._promptFileName($target); + } + }, + + _promptFileName: function($target) { + var self = this; + if (!OCA.Files.NewFileMenu._TEMPLATE_FORM) { + OCA.Files.NewFileMenu._TEMPLATE_FORM = Handlebars.compile(TEMPLATE_FILENAME_FORM); + } + + if ($target.find('form').length) { + $target.find('input').focus(); + return; + } + + // discard other forms + this.$el.find('form').remove(); + this.$el.find('.displayname').removeClass('hidden'); + + $target.find('.displayname').addClass('hidden'); + + var newName = $target.attr('data-templatename'); + var fileType = $target.attr('data-filetype'); + var $form = $(OCA.Files.NewFileMenu._TEMPLATE_FORM({ + fileName: newName, + cid: this.cid, + fileType: fileType + })); + + //this.trigger('actionPerformed', action); + $target.append($form); + + // here comes the OLD code + var $input = $form.find('input'); + + var lastPos; + var checkInput = function () { + var filename = $input.val(); + try { + if (!Files.isFileNameValid(filename)) { + // Files.isFileNameValid(filename) throws an exception itself + } else if (self._fileList.inList(filename)) { + throw t('files', '{newname} already exists', {newname: filename}); + } else { + return true; + } + } catch (error) { + $input.attr('title', error); + $input.tooltip({placement: 'right', trigger: 'manual'}); + $input.tooltip('show'); + $input.addClass('error'); + } + return false; + }; + + // verify filename on typing + $input.keyup(function() { + if (checkInput()) { + $input.tooltip('hide'); + $input.removeClass('error'); + } + }); + + $input.focus(); + // pre select name up to the extension + lastPos = newName.lastIndexOf('.'); + if (lastPos === -1) { + lastPos = newName.length; + } + $input.selectRange(0, lastPos); + + $form.submit(function(event) { + event.stopPropagation(); + event.preventDefault(); + + if (checkInput()) { + var newname = $input.val(); + self._createFile(fileType, newname); + $form.remove(); + $target.find('.displayname').removeClass('hidden'); + OC.hideMenus(); + } + }); + }, + + /** + * Creates a file with the given type and name. + * This calls the matching methods on the attached file list. + * + * @param {string} fileType file type + * @param {string} name file name + */ + _createFile: function(fileType, name) { + switch(fileType) { + case 'file': + this._fileList.createFile(name); + break; + case 'folder': + this._fileList.createDirectory(name); + break; + default: + console.warn('Unknown file type "' + fileType + '"'); + } + }, + + /** + * Renders the menu with the currently set items + */ + render: function() { + this.$el.html(this.template({ + uploadMaxHumanFileSize: 'TODO', + uploadLabel: t('files', 'Upload'), + items: [{ + id: 'file', + displayName: t('files', 'Text file'), + templateName: t('files', 'New text file.txt'), + iconClass: 'icon-filetype-text', + fileType: 'file' + }, { + id: 'folder', + displayName: t('files', 'Folder'), + templateName: t('files', 'New folder'), + iconClass: 'icon-folder', + fileType: 'folder' + }] + })); + }, + + /** + * Displays the menu under the given element + * + * @param {Object} $target target element + */ + showAt: function($target) { + this.render(); + var targetOffset = $target.offset(); + this.$el.css({ + left: targetOffset.left, + top: targetOffset.top + $target.height() + }); + this.$el.removeClass('hidden'); + + OC.showMenu(null, this.$el); + } + }); + + OCA.Files.NewFileMenu = NewFileMenu; + +})(); diff --git a/apps/files/js/tagsplugin.js b/apps/files/js/tagsplugin.js index ed1105a1706..9f45da9a6e2 100644 --- a/apps/files/js/tagsplugin.js +++ b/apps/files/js/tagsplugin.js @@ -92,6 +92,7 @@ actionHandler: function(fileName, context) { var $actionEl = context.$file.find('.action-favorite'); var $file = context.$file; + var fileInfo = context.fileList.files[$file.index()]; var dir = context.dir || context.fileList.getCurrentDirectory(); var tags = $file.attr('data-tags'); if (_.isUndefined(tags)) { @@ -106,9 +107,11 @@ } else { tags.push(OC.TAG_FAVORITE); } + + // pre-toggle the star toggleStar($actionEl, !isFavorite); - context.fileInfoModel.set('tags', tags); + context.fileInfoModel.trigger('busy', context.fileInfoModel, true); self.applyFileTags( dir + '/' + fileName, @@ -116,17 +119,16 @@ $actionEl, isFavorite ).then(function(result) { + context.fileInfoModel.trigger('busy', context.fileInfoModel, false); // response from server should contain updated tags var newTags = result.tags; if (_.isUndefined(newTags)) { newTags = tags; } - var fileInfo = context.fileList.files[$file.index()]; - // read latest state from result - toggleStar($actionEl, (newTags.indexOf(OC.TAG_FAVORITE) >= 0)); - $file.attr('data-tags', newTags.join('|')); - $file.attr('data-favorite', !isFavorite); - fileInfo.tags = newTags; + context.fileInfoModel.set({ + 'tags': newTags, + 'favorite': !isFavorite + }); }); } }); @@ -150,7 +152,13 @@ var oldElementToFile = fileList.elementToFile; fileList.elementToFile = function($el) { var fileInfo = oldElementToFile.apply(this, arguments); - fileInfo.tags = $el.attr('data-tags') || []; + var tags = $el.attr('data-tags'); + if (_.isUndefined(tags)) { + tags = ''; + } + tags = tags.split('|'); + tags = _.without(tags, ''); + fileInfo.tags = tags; return fileInfo; }; }, diff --git a/apps/files/l10n/af_ZA.js b/apps/files/l10n/af_ZA.js index 1844e8ad363..2061e5ec49c 100644 --- a/apps/files/l10n/af_ZA.js +++ b/apps/files/l10n/af_ZA.js @@ -2,7 +2,7 @@ OC.L10N.register( "files", { "Error" : "Fout", - "Settings" : "Instellings", - "Folder" : "Omslag" + "Folder" : "Omslag", + "Settings" : "Instellings" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/af_ZA.json b/apps/files/l10n/af_ZA.json index 841c572bc7c..95096fd551b 100644 --- a/apps/files/l10n/af_ZA.json +++ b/apps/files/l10n/af_ZA.json @@ -1,6 +1,6 @@ { "translations": { "Error" : "Fout", - "Settings" : "Instellings", - "Folder" : "Omslag" + "Folder" : "Omslag", + "Settings" : "Instellings" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ar.js b/apps/files/l10n/ar.js index d4960b2f370..6dab5f6ba27 100644 --- a/apps/files/l10n/ar.js +++ b/apps/files/l10n/ar.js @@ -27,12 +27,12 @@ OC.L10N.register( "Upload cancelled." : "تم إلغاء عملية رفع الملفات .", "Could not get result from server." : "تعذر الحصول على نتيجة من الخادم", "File upload is in progress. Leaving the page now will cancel the upload." : "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.", - "{new_name} already exists" : "{new_name} موجود مسبقا", "Actions" : "* تطبيقات.\n* أنشطة.", "Download" : "تحميل", "Pending" : "قيد الانتظار", "Error moving file" : "حدث خطأ أثناء نقل الملف", "Error" : "خطأ", + "{new_name} already exists" : "{new_name} موجود مسبقا", "Name" : "اسم", "Size" : "حجم", "Modified" : "معدل", @@ -40,10 +40,15 @@ OC.L10N.register( "_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"], "{dirs} and {files}" : "{dirs} و {files}", "_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"], + "New" : "جديد", "File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا", "Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !", "Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ", "Favorite" : "المفضلة", + "Upload" : "رفع", + "Text file" : "ملف", + "Folder" : "مجلد", + "New folder" : "مجلد جديد", "A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ", "A file or folder has been <strong>changed</strong>" : "تم <strong> تغيير</strong> ملف أو مجلد", "A file or folder has been <strong>deleted</strong>" : "تم <strong>حذف </strong> ملف أو مجلد", @@ -65,11 +70,6 @@ OC.L10N.register( "Settings" : "إعدادات", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا العنوان لـ <a href=\"%s\" target=\"_blank\">الدخول الى ملفاتك عن طريق WebDAV</a>", - "New" : "جديد", - "Text file" : "ملف", - "New folder" : "مجلد جديد", - "Folder" : "مجلد", - "Upload" : "رفع", "Cancel upload" : "إلغاء الرفع", "Delete" : "إلغاء", "Upload too large" : "حجم الترفيع أعلى من المسموح", diff --git a/apps/files/l10n/ar.json b/apps/files/l10n/ar.json index 16d9732aaef..745d82dc19b 100644 --- a/apps/files/l10n/ar.json +++ b/apps/files/l10n/ar.json @@ -25,12 +25,12 @@ "Upload cancelled." : "تم إلغاء عملية رفع الملفات .", "Could not get result from server." : "تعذر الحصول على نتيجة من الخادم", "File upload is in progress. Leaving the page now will cancel the upload." : "عملية رفع الملفات قيد التنفيذ. اغلاق الصفحة سوف يلغي عملية رفع الملفات.", - "{new_name} already exists" : "{new_name} موجود مسبقا", "Actions" : "* تطبيقات.\n* أنشطة.", "Download" : "تحميل", "Pending" : "قيد الانتظار", "Error moving file" : "حدث خطأ أثناء نقل الملف", "Error" : "خطأ", + "{new_name} already exists" : "{new_name} موجود مسبقا", "Name" : "اسم", "Size" : "حجم", "Modified" : "معدل", @@ -38,10 +38,15 @@ "_%n file_::_%n files_" : ["لا يوجد ملفات %n","ملف %n","2 ملف %n","قليل من ملفات %n","الكثير من ملفات %n"," ملفات %n"], "{dirs} and {files}" : "{dirs} و {files}", "_Uploading %n file_::_Uploading %n files_" : ["لا يوجد ملفات %n لتحميلها","تحميل 1 ملف %n","تحميل 2 ملف %n","يتم تحميل عدد قليل من ملفات %n","يتم تحميل عدد كبير من ملفات %n","يتم تحميل ملفات %n"], + "New" : "جديد", "File name cannot be empty." : "اسم الملف لا يجوز أن يكون فارغا", "Your storage is full, files can not be updated or synced anymore!" : "مساحتك التخزينية ممتلئة, لا يمكم تحديث ملفاتك أو مزامنتها بعد الآن !", "Your storage is almost full ({usedSpacePercent}%)" : "مساحتك التخزينية امتلأت تقريبا ", "Favorite" : "المفضلة", + "Upload" : "رفع", + "Text file" : "ملف", + "Folder" : "مجلد", + "New folder" : "مجلد جديد", "A new file or folder has been <strong>created</strong>" : "تم <strong> إنشاء</strong> ملف جديد أو مجلد ", "A file or folder has been <strong>changed</strong>" : "تم <strong> تغيير</strong> ملف أو مجلد", "A file or folder has been <strong>deleted</strong>" : "تم <strong>حذف </strong> ملف أو مجلد", @@ -63,11 +68,6 @@ "Settings" : "إعدادات", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "استخدم هذا العنوان لـ <a href=\"%s\" target=\"_blank\">الدخول الى ملفاتك عن طريق WebDAV</a>", - "New" : "جديد", - "Text file" : "ملف", - "New folder" : "مجلد جديد", - "Folder" : "مجلد", - "Upload" : "رفع", "Cancel upload" : "إلغاء الرفع", "Delete" : "إلغاء", "Upload too large" : "حجم الترفيع أعلى من المسموح", diff --git a/apps/files/l10n/ast.js b/apps/files/l10n/ast.js index 586d66d0c24..33bf5e37c0a 100644 --- a/apps/files/l10n/ast.js +++ b/apps/files/l10n/ast.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Xuba encaboxada.", "Could not get result from server." : "Nun pudo obtenese'l resultáu del sirvidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.", - "{new_name} already exists" : "{new_name} yá existe", - "Could not create file" : "Nun pudo crease'l ficheru", - "Could not create folder" : "Nun pudo crease la carpeta", "Actions" : "Aiciones", "Download" : "Descargar", "Select" : "Esbillar", @@ -48,7 +45,10 @@ OC.L10N.register( "Error moving file." : "Fallu moviendo'l ficheru.", "Error moving file" : "Fallu moviendo'l ficheru", "Error" : "Fallu", + "{new_name} already exists" : "{new_name} yá existe", "Could not rename file" : "Nun pudo renomase'l ficheru", + "Could not create file" : "Nun pudo crease'l ficheru", + "Could not create folder" : "Nun pudo crease la carpeta", "Error deleting file." : "Fallu desaniciando'l ficheru.", "Name" : "Nome", "Size" : "Tamañu", @@ -58,11 +58,16 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} y {files}", "You don’t have permission to upload or create files here" : "Nun tienes permisu pa xubir o crear ficheros equí", "_Uploading %n file_::_Uploading %n files_" : ["Xubiendo %n ficheru","Xubiendo %n ficheros"], + "New" : "Nuevu", "\"{name}\" is an invalid file name." : "\"{name}\" ye un nome de ficheru inválidu.", "File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.", "Your storage is full, files can not be updated or synced anymore!" : "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!", "Your storage is almost full ({usedSpacePercent}%)" : "L'almacenamientu ta casi completu ({usedSpacePercent}%)", "Favorite" : "Favoritu", + "Upload" : "Xubir", + "Text file" : "Ficheru de testu", + "Folder" : "Carpeta", + "New folder" : "Nueva carpeta", "A new file or folder has been <strong>created</strong>" : "<strong>Creóse</strong> un ficheru o carpeta nuevos", "A file or folder has been <strong>changed</strong>" : "<strong>Camudóse</strong> un ficheru o carpeta", "A file or folder has been <strong>deleted</strong>" : "<strong>Desanicióse</strong> un ficheru o carpeta", @@ -86,12 +91,6 @@ OC.L10N.register( "Settings" : "Axustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usa esta direición <a href=\"%s\" target=\"_blank\">p'acceder a los ficheros a traviés de WebDAV</a>", - "New" : "Nuevu", - "New text file" : "Ficheru de testu nuevu", - "Text file" : "Ficheru de testu", - "New folder" : "Nueva carpeta", - "Folder" : "Carpeta", - "Upload" : "Xubir", "Cancel upload" : "Encaboxar xuba", "Delete" : "Desaniciar", "Upload too large" : "La xuba ye abondo grande", diff --git a/apps/files/l10n/ast.json b/apps/files/l10n/ast.json index e9b411383a2..601bf2d85f1 100644 --- a/apps/files/l10n/ast.json +++ b/apps/files/l10n/ast.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Xuba encaboxada.", "Could not get result from server." : "Nun pudo obtenese'l resultáu del sirvidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La xuba del ficheru ta en progresu. Si dexes agora la páxina, va encaboxase la xuba.", - "{new_name} already exists" : "{new_name} yá existe", - "Could not create file" : "Nun pudo crease'l ficheru", - "Could not create folder" : "Nun pudo crease la carpeta", "Actions" : "Aiciones", "Download" : "Descargar", "Select" : "Esbillar", @@ -46,7 +43,10 @@ "Error moving file." : "Fallu moviendo'l ficheru.", "Error moving file" : "Fallu moviendo'l ficheru", "Error" : "Fallu", + "{new_name} already exists" : "{new_name} yá existe", "Could not rename file" : "Nun pudo renomase'l ficheru", + "Could not create file" : "Nun pudo crease'l ficheru", + "Could not create folder" : "Nun pudo crease la carpeta", "Error deleting file." : "Fallu desaniciando'l ficheru.", "Name" : "Nome", "Size" : "Tamañu", @@ -56,11 +56,16 @@ "{dirs} and {files}" : "{dirs} y {files}", "You don’t have permission to upload or create files here" : "Nun tienes permisu pa xubir o crear ficheros equí", "_Uploading %n file_::_Uploading %n files_" : ["Xubiendo %n ficheru","Xubiendo %n ficheros"], + "New" : "Nuevu", "\"{name}\" is an invalid file name." : "\"{name}\" ye un nome de ficheru inválidu.", "File name cannot be empty." : "El nome de ficheru nun pue quedar baleru.", "Your storage is full, files can not be updated or synced anymore!" : "L'almacenamientu ta completu, ¡yá nun se pueden anovar o sincronizar ficheros!", "Your storage is almost full ({usedSpacePercent}%)" : "L'almacenamientu ta casi completu ({usedSpacePercent}%)", "Favorite" : "Favoritu", + "Upload" : "Xubir", + "Text file" : "Ficheru de testu", + "Folder" : "Carpeta", + "New folder" : "Nueva carpeta", "A new file or folder has been <strong>created</strong>" : "<strong>Creóse</strong> un ficheru o carpeta nuevos", "A file or folder has been <strong>changed</strong>" : "<strong>Camudóse</strong> un ficheru o carpeta", "A file or folder has been <strong>deleted</strong>" : "<strong>Desanicióse</strong> un ficheru o carpeta", @@ -84,12 +89,6 @@ "Settings" : "Axustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usa esta direición <a href=\"%s\" target=\"_blank\">p'acceder a los ficheros a traviés de WebDAV</a>", - "New" : "Nuevu", - "New text file" : "Ficheru de testu nuevu", - "Text file" : "Ficheru de testu", - "New folder" : "Nueva carpeta", - "Folder" : "Carpeta", - "Upload" : "Xubir", "Cancel upload" : "Encaboxar xuba", "Delete" : "Desaniciar", "Upload too large" : "La xuba ye abondo grande", diff --git a/apps/files/l10n/az.js b/apps/files/l10n/az.js index ba3aa4e1b9f..7e80b0aa82d 100644 --- a/apps/files/l10n/az.js +++ b/apps/files/l10n/az.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Yüklənmə dayandırıldı.", "Could not get result from server." : "Nəticəni serverdən almaq mümkün olmur.", "File upload is in progress. Leaving the page now will cancel the upload." : "Faylın yüklənməsi gedir. Əgər səhifəni indi tərk etsəniz yüklənmə dayanacaq.", - "{new_name} already exists" : "{new_name} artıq mövcuddur", - "Could not create file" : "Faylı yaratmaq olmur", - "Could not create folder" : "Qovluğu yaratmaq olmur", "Download" : "Yüklə", "Select" : "Seç", "Pending" : "Gözləmə", @@ -46,7 +43,10 @@ OC.L10N.register( "Error moving file." : "Faylın köçürülməsində səhv baş verdi.", "Error moving file" : "Faylın köçürülməsində səhv baş verdi", "Error" : "Səhv", + "{new_name} already exists" : "{new_name} artıq mövcuddur", "Could not rename file" : "Faylın adını dəyişmək mümkün olmadı", + "Could not create file" : "Faylı yaratmaq olmur", + "Could not create folder" : "Qovluğu yaratmaq olmur", "Error deleting file." : "Faylın silinməsində səhv baş verdi.", "No entries in this folder match '{filter}'" : "Bu qovluqda '{filter}' uyğunluğunda heç bir verilən tapılmadı", "Name" : "Ad", @@ -57,6 +57,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} və {files}", "You don’t have permission to upload or create files here" : "Sizin burda yükləməyə və ya fayl yaratmağa yetkiniz yoxdur ", "_Uploading %n file_::_Uploading %n files_" : ["%n fayllar yüklənilir","%n fayllar yüklənilir"], + "New" : "Yeni", "\"{name}\" is an invalid file name." : "\"{name}\" yalnış fayl adıdır.", "File name cannot be empty." : "Faylın adı boş ola bilməz.", "Your storage is full, files can not be updated or synced anymore!" : "Sizin deponuz doludur, fayllar artıq yenilənə və sinxronizasiya edilə bilməz!", @@ -64,6 +65,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["uyğun '{filter}'","uyğun '{filter}'"], "Favorited" : "İstəkləndi", "Favorite" : "İstəkli", + "Upload" : "Serverə yüklə", + "Text file" : "Tekst faylı", + "Folder" : "Qovluq", + "New folder" : "Yeni qovluq", "An error occurred while trying to update the tags" : "Qeydlərin yenilənməsi müddətində səhv baş verdi ", "A new file or folder has been <strong>created</strong>" : "Yeni fayl və ya direktoriya <strong>yaradılmışdır</strong>", "A file or folder has been <strong>changed</strong>" : "Fayl və ya direktoriya <strong>dəyişdirilib</strong>", @@ -90,12 +95,6 @@ OC.L10N.register( "Settings" : "Quraşdırmalar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bu ünvanı <a href=\"%s\" target=\"_blank\">WebDAV vasitəsilə fayllarınızı əldə etmək üçün</a> istifadə edə bilərsiniz. ", - "New" : "Yeni", - "New text file" : "Yeni tekst faylı", - "Text file" : "Tekst faylı", - "New folder" : "Yeni qovluq", - "Folder" : "Qovluq", - "Upload" : "Serverə yüklə", "Cancel upload" : "Yüklənməni dayandır", "No files in here" : "Burda fayl yoxdur", "Upload some content or sync with your devices!" : "Bezi kontenti yüklə yada, öz avadanlıqlarınızla sinxronizasiya edin!", diff --git a/apps/files/l10n/az.json b/apps/files/l10n/az.json index a9790ba8322..83347ae9a14 100644 --- a/apps/files/l10n/az.json +++ b/apps/files/l10n/az.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Yüklənmə dayandırıldı.", "Could not get result from server." : "Nəticəni serverdən almaq mümkün olmur.", "File upload is in progress. Leaving the page now will cancel the upload." : "Faylın yüklənməsi gedir. Əgər səhifəni indi tərk etsəniz yüklənmə dayanacaq.", - "{new_name} already exists" : "{new_name} artıq mövcuddur", - "Could not create file" : "Faylı yaratmaq olmur", - "Could not create folder" : "Qovluğu yaratmaq olmur", "Download" : "Yüklə", "Select" : "Seç", "Pending" : "Gözləmə", @@ -44,7 +41,10 @@ "Error moving file." : "Faylın köçürülməsində səhv baş verdi.", "Error moving file" : "Faylın köçürülməsində səhv baş verdi", "Error" : "Səhv", + "{new_name} already exists" : "{new_name} artıq mövcuddur", "Could not rename file" : "Faylın adını dəyişmək mümkün olmadı", + "Could not create file" : "Faylı yaratmaq olmur", + "Could not create folder" : "Qovluğu yaratmaq olmur", "Error deleting file." : "Faylın silinməsində səhv baş verdi.", "No entries in this folder match '{filter}'" : "Bu qovluqda '{filter}' uyğunluğunda heç bir verilən tapılmadı", "Name" : "Ad", @@ -55,6 +55,7 @@ "{dirs} and {files}" : "{dirs} və {files}", "You don’t have permission to upload or create files here" : "Sizin burda yükləməyə və ya fayl yaratmağa yetkiniz yoxdur ", "_Uploading %n file_::_Uploading %n files_" : ["%n fayllar yüklənilir","%n fayllar yüklənilir"], + "New" : "Yeni", "\"{name}\" is an invalid file name." : "\"{name}\" yalnış fayl adıdır.", "File name cannot be empty." : "Faylın adı boş ola bilməz.", "Your storage is full, files can not be updated or synced anymore!" : "Sizin deponuz doludur, fayllar artıq yenilənə və sinxronizasiya edilə bilməz!", @@ -62,6 +63,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["uyğun '{filter}'","uyğun '{filter}'"], "Favorited" : "İstəkləndi", "Favorite" : "İstəkli", + "Upload" : "Serverə yüklə", + "Text file" : "Tekst faylı", + "Folder" : "Qovluq", + "New folder" : "Yeni qovluq", "An error occurred while trying to update the tags" : "Qeydlərin yenilənməsi müddətində səhv baş verdi ", "A new file or folder has been <strong>created</strong>" : "Yeni fayl və ya direktoriya <strong>yaradılmışdır</strong>", "A file or folder has been <strong>changed</strong>" : "Fayl və ya direktoriya <strong>dəyişdirilib</strong>", @@ -88,12 +93,6 @@ "Settings" : "Quraşdırmalar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bu ünvanı <a href=\"%s\" target=\"_blank\">WebDAV vasitəsilə fayllarınızı əldə etmək üçün</a> istifadə edə bilərsiniz. ", - "New" : "Yeni", - "New text file" : "Yeni tekst faylı", - "Text file" : "Tekst faylı", - "New folder" : "Yeni qovluq", - "Folder" : "Qovluq", - "Upload" : "Serverə yüklə", "Cancel upload" : "Yüklənməni dayandır", "No files in here" : "Burda fayl yoxdur", "Upload some content or sync with your devices!" : "Bezi kontenti yüklə yada, öz avadanlıqlarınızla sinxronizasiya edin!", diff --git a/apps/files/l10n/bg_BG.js b/apps/files/l10n/bg_BG.js index 1b79d6b2824..f21c5de9dc1 100644 --- a/apps/files/l10n/bg_BG.js +++ b/apps/files/l10n/bg_BG.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Качването е прекъснато.", "Could not get result from server." : "Не се получи резултат от сървърът.", "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.", - "{new_name} already exists" : "{new_name} вече съществува.", - "Could not create file" : "Несупешно създаване на файла.", - "Could not create folder" : "Неуспешно създаване на папка.", "Actions" : "Действия", "Download" : "Изтегли", "Select" : "Избери", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Грешка при местенето на файла.", "Error moving file" : "Грешка при преместването на файла.", "Error" : "Грешка", + "{new_name} already exists" : "{new_name} вече съществува.", "Could not rename file" : "Неуспешно преименуване на файла.", + "Could not create file" : "Несупешно създаване на файла.", + "Could not create folder" : "Неуспешно създаване на папка.", "Error deleting file." : "Грешка при изтриването на файла.", "No entries in this folder match '{filter}'" : "Нищо в тази папка не отговаря на '{filter}'", "Name" : "Име", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} и {files}", "You don’t have permission to upload or create files here" : "Нямаш разрешение да създаваш или качваш файлове тук.", "_Uploading %n file_::_Uploading %n files_" : ["Качване на %n файл","Качване на %n файла."], + "New" : "Създай", "\"{name}\" is an invalid file name." : "\"{name}\" е непозволено име за файл.", "File name cannot be empty." : "Името на файла не може да бъде оставено празно.", "Your storage is full, files can not be updated or synced anymore!" : "Заделеното място е запълнено, повече файлове не могат да бъдат синхронизирани или опреснени!", @@ -65,6 +66,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "], "Favorited" : "Отбелязано в любими", "Favorite" : "Любими", + "Upload" : "Качване", + "Text file" : "Текстов файл", + "Folder" : "Папка", + "New folder" : "Нова папка", "An error occurred while trying to update the tags" : "Настъпи грешка при опита за промяна на бележките", "A new file or folder has been <strong>created</strong>" : "Нов файл или папка беше <strong>създаден/а</strong>", "A file or folder has been <strong>changed</strong>" : "Файл или папка беше <strong>променен/а</strong>", @@ -90,12 +95,6 @@ OC.L10N.register( "Settings" : "Настройки", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Използвай този адрес, за да получиш <a href=\"%s\" target=\"_blank\">достъп до своите файлове чрез WebDAV</a>.", - "New" : "Създай", - "New text file" : "Нов текстов файл", - "Text file" : "Текстов файл", - "New folder" : "Нова папка", - "Folder" : "Папка", - "Upload" : "Качване", "Cancel upload" : "Отказване на качването", "No files in here" : "Тук няма файлове", "Upload some content or sync with your devices!" : "Качи съдържание или синхронизирай с твоите устройства!", diff --git a/apps/files/l10n/bg_BG.json b/apps/files/l10n/bg_BG.json index 4493a450d66..6778eff6da8 100644 --- a/apps/files/l10n/bg_BG.json +++ b/apps/files/l10n/bg_BG.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Качването е прекъснато.", "Could not get result from server." : "Не се получи резултат от сървърът.", "File upload is in progress. Leaving the page now will cancel the upload." : "Извършва се качване на файлове. Затварянето на тази страница ще прекъсне качването.", - "{new_name} already exists" : "{new_name} вече съществува.", - "Could not create file" : "Несупешно създаване на файла.", - "Could not create folder" : "Неуспешно създаване на папка.", "Actions" : "Действия", "Download" : "Изтегли", "Select" : "Избери", @@ -45,7 +42,10 @@ "Error moving file." : "Грешка при местенето на файла.", "Error moving file" : "Грешка при преместването на файла.", "Error" : "Грешка", + "{new_name} already exists" : "{new_name} вече съществува.", "Could not rename file" : "Неуспешно преименуване на файла.", + "Could not create file" : "Несупешно създаване на файла.", + "Could not create folder" : "Неуспешно създаване на папка.", "Error deleting file." : "Грешка при изтриването на файла.", "No entries in this folder match '{filter}'" : "Нищо в тази папка не отговаря на '{filter}'", "Name" : "Име", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} и {files}", "You don’t have permission to upload or create files here" : "Нямаш разрешение да създаваш или качваш файлове тук.", "_Uploading %n file_::_Uploading %n files_" : ["Качване на %n файл","Качване на %n файла."], + "New" : "Създай", "\"{name}\" is an invalid file name." : "\"{name}\" е непозволено име за файл.", "File name cannot be empty." : "Името на файла не може да бъде оставено празно.", "Your storage is full, files can not be updated or synced anymore!" : "Заделеното място е запълнено, повече файлове не могат да бъдат синхронизирани или опреснени!", @@ -63,6 +64,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["пасва на '{filter}'","пасват на '{filter}'\n "], "Favorited" : "Отбелязано в любими", "Favorite" : "Любими", + "Upload" : "Качване", + "Text file" : "Текстов файл", + "Folder" : "Папка", + "New folder" : "Нова папка", "An error occurred while trying to update the tags" : "Настъпи грешка при опита за промяна на бележките", "A new file or folder has been <strong>created</strong>" : "Нов файл или папка беше <strong>създаден/а</strong>", "A file or folder has been <strong>changed</strong>" : "Файл или папка беше <strong>променен/а</strong>", @@ -88,12 +93,6 @@ "Settings" : "Настройки", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Използвай този адрес, за да получиш <a href=\"%s\" target=\"_blank\">достъп до своите файлове чрез WebDAV</a>.", - "New" : "Създай", - "New text file" : "Нов текстов файл", - "Text file" : "Текстов файл", - "New folder" : "Нова папка", - "Folder" : "Папка", - "Upload" : "Качване", "Cancel upload" : "Отказване на качването", "No files in here" : "Тук няма файлове", "Upload some content or sync with your devices!" : "Качи съдържание или синхронизирай с твоите устройства!", diff --git a/apps/files/l10n/bn_BD.js b/apps/files/l10n/bn_BD.js index f21d44873f0..1272966209b 100644 --- a/apps/files/l10n/bn_BD.js +++ b/apps/files/l10n/bn_BD.js @@ -27,22 +27,27 @@ OC.L10N.register( "Close" : "বন্ধ", "Upload cancelled." : "আপলোড বাতিল করা হয়েছে।", "File upload is in progress. Leaving the page now will cancel the upload." : "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।", - "{new_name} already exists" : "{new_name} টি বিদ্যমান", "Actions" : "পদক্ষেপসমূহ", "Download" : "ডাউনলোড", "Pending" : "মুলতুবি", "Error moving file." : "ফাইল সরাতে সমস্যা হলো।", "Error moving file" : "ফাইল সরাতে সমস্যা হলো", "Error" : "সমস্যা", + "{new_name} already exists" : "{new_name} টি বিদ্যমান", "Could not rename file" : "ফাইলের পূণঃনামকরণ করা গেলনা", "Name" : "রাম", "Size" : "আকার", "Modified" : "পরিবর্তিত", "_Uploading %n file_::_Uploading %n files_" : ["%n ফাইল আপলোড হচ্ছে","%n ফাইল আপলোড হচ্ছে"], + "New" : "নতুন", "\"{name}\" is an invalid file name." : "\"{name}\" টি একটি অননুমোদিত ফাইল নাম।", "File name cannot be empty." : "ফাইলের নামটি ফাঁকা রাখা যাবে না।", "Your storage is almost full ({usedSpacePercent}%)" : "আপনার সংরক্ষণাধার প্রায় পরিপূর্ণ ({usedSpacePercent}%) ", "Favorite" : "প্রিয়জন", + "Upload" : "আপলোড", + "Text file" : "টেক্সট ফাইল", + "Folder" : "ফোল্ডার", + "New folder" : "নব ফােলডার", "A new file or folder has been <strong>created</strong>" : "একটি ফাইল বা ফোলডার <strong>তৈরি</strong> করা হয়েছে", "A file or folder has been <strong>changed</strong>" : "একটি ফাইল বা ফোলডার <strong>পরিবরতন</strong> করা হয়েছে", "A file or folder has been <strong>deleted</strong>" : "একটি ফাইল বা ফোলডার <strong>মোছা</strong> হয়েছে", @@ -59,11 +64,6 @@ OC.L10N.register( "Save" : "সংরক্ষণ", "Settings" : "নিয়ামকসমূহ", "WebDAV" : "WebDAV", - "New" : "নতুন", - "Text file" : "টেক্সট ফাইল", - "New folder" : "নব ফােলডার", - "Folder" : "ফোল্ডার", - "Upload" : "আপলোড", "Cancel upload" : "আপলোড বাতিল কর", "Delete" : "মুছে", "Upload too large" : "আপলোডের আকারটি অনেক বড়", diff --git a/apps/files/l10n/bn_BD.json b/apps/files/l10n/bn_BD.json index 740613e054d..472aae78865 100644 --- a/apps/files/l10n/bn_BD.json +++ b/apps/files/l10n/bn_BD.json @@ -25,22 +25,27 @@ "Close" : "বন্ধ", "Upload cancelled." : "আপলোড বাতিল করা হয়েছে।", "File upload is in progress. Leaving the page now will cancel the upload." : "ফাইল আপলোড চলমান। এই পৃষ্ঠা পরিত্যাগ করলে আপলোড বাতিল করা হবে।", - "{new_name} already exists" : "{new_name} টি বিদ্যমান", "Actions" : "পদক্ষেপসমূহ", "Download" : "ডাউনলোড", "Pending" : "মুলতুবি", "Error moving file." : "ফাইল সরাতে সমস্যা হলো।", "Error moving file" : "ফাইল সরাতে সমস্যা হলো", "Error" : "সমস্যা", + "{new_name} already exists" : "{new_name} টি বিদ্যমান", "Could not rename file" : "ফাইলের পূণঃনামকরণ করা গেলনা", "Name" : "রাম", "Size" : "আকার", "Modified" : "পরিবর্তিত", "_Uploading %n file_::_Uploading %n files_" : ["%n ফাইল আপলোড হচ্ছে","%n ফাইল আপলোড হচ্ছে"], + "New" : "নতুন", "\"{name}\" is an invalid file name." : "\"{name}\" টি একটি অননুমোদিত ফাইল নাম।", "File name cannot be empty." : "ফাইলের নামটি ফাঁকা রাখা যাবে না।", "Your storage is almost full ({usedSpacePercent}%)" : "আপনার সংরক্ষণাধার প্রায় পরিপূর্ণ ({usedSpacePercent}%) ", "Favorite" : "প্রিয়জন", + "Upload" : "আপলোড", + "Text file" : "টেক্সট ফাইল", + "Folder" : "ফোল্ডার", + "New folder" : "নব ফােলডার", "A new file or folder has been <strong>created</strong>" : "একটি ফাইল বা ফোলডার <strong>তৈরি</strong> করা হয়েছে", "A file or folder has been <strong>changed</strong>" : "একটি ফাইল বা ফোলডার <strong>পরিবরতন</strong> করা হয়েছে", "A file or folder has been <strong>deleted</strong>" : "একটি ফাইল বা ফোলডার <strong>মোছা</strong> হয়েছে", @@ -57,11 +62,6 @@ "Save" : "সংরক্ষণ", "Settings" : "নিয়ামকসমূহ", "WebDAV" : "WebDAV", - "New" : "নতুন", - "Text file" : "টেক্সট ফাইল", - "New folder" : "নব ফােলডার", - "Folder" : "ফোল্ডার", - "Upload" : "আপলোড", "Cancel upload" : "আপলোড বাতিল কর", "Delete" : "মুছে", "Upload too large" : "আপলোডের আকারটি অনেক বড়", diff --git a/apps/files/l10n/bn_IN.js b/apps/files/l10n/bn_IN.js index 903dadca605..995c9ad45d1 100644 --- a/apps/files/l10n/bn_IN.js +++ b/apps/files/l10n/bn_IN.js @@ -20,6 +20,8 @@ OC.L10N.register( "Error" : "ভুল", "Name" : "নাম", "Size" : "আকার", + "Folder" : "ফোল্ডার", + "New folder" : "নতুন ফোল্ডার", "A new file or folder has been <strong>created</strong>" : "একটি নতুন ফাইল বা ফোল্ডার হয়েছে <strong>তৈরি</strong>", "A file or folder has been <strong>changed</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>বদলানো হয়েছে</strong>", "A file or folder has been <strong>deleted</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>মুছে ফেলা হয়েছে</strong>", @@ -31,8 +33,6 @@ OC.L10N.register( "%2$s deleted %1$s" : "%2$s মুছেছে %1$s কে", "Save" : "সেভ", "Settings" : "সেটিংস", - "New folder" : "নতুন ফোল্ডার", - "Folder" : "ফোল্ডার", "Delete" : "মুছে ফেলা" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/bn_IN.json b/apps/files/l10n/bn_IN.json index afdcf0b6f13..17ce39d023a 100644 --- a/apps/files/l10n/bn_IN.json +++ b/apps/files/l10n/bn_IN.json @@ -18,6 +18,8 @@ "Error" : "ভুল", "Name" : "নাম", "Size" : "আকার", + "Folder" : "ফোল্ডার", + "New folder" : "নতুন ফোল্ডার", "A new file or folder has been <strong>created</strong>" : "একটি নতুন ফাইল বা ফোল্ডার হয়েছে <strong>তৈরি</strong>", "A file or folder has been <strong>changed</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>বদলানো হয়েছে</strong>", "A file or folder has been <strong>deleted</strong>" : "একটি নতুন ফাইল বা ফোল্ডার <strong>মুছে ফেলা হয়েছে</strong>", @@ -29,8 +31,6 @@ "%2$s deleted %1$s" : "%2$s মুছেছে %1$s কে", "Save" : "সেভ", "Settings" : "সেটিংস", - "New folder" : "নতুন ফোল্ডার", - "Folder" : "ফোল্ডার", "Delete" : "মুছে ফেলা" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/bs.js b/apps/files/l10n/bs.js index 6fb4c6ed0e9..f10c87bfef8 100644 --- a/apps/files/l10n/bs.js +++ b/apps/files/l10n/bs.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u toku. Napuštanje stranice prekinut će učitavanje.", - "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Datoteku nije moguće kreirati", - "Could not create folder" : "Direktorij nije moguće kreirati", "Actions" : "Radnje", "Download" : "Preuzmi", "Select" : "Izaberi", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Greška pri premještanju datoteke", "Error moving file" : "Greška pri premještanju datoteke", "Error" : "Greška", + "{new_name} already exists" : "{new_name} već postoji", "Could not rename file" : "Nemoguće preimenovati datoteku", + "Could not create file" : "Datoteku nije moguće kreirati", + "Could not create folder" : "Direktorij nije moguće kreirati", "Error deleting file." : "Greška pri brisanju datoteke", "Name" : "Ime", "Size" : "Veličina", @@ -57,12 +57,17 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Ovdje niste ovlašteni učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteke"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", "File name cannot be empty." : "Naziv datoteke ne može biti prazan", "Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", "Favorited" : "Favorizovano", "Favorite" : "Favorit", + "Upload" : "Učitaj", + "Text file" : "Tekstualna datoteka", + "Folder" : "Direktorij", + "New folder" : "Novi direktorij", "%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan", "%s could not be renamed" : "%s nije moguće preimenovati", "Upload (max. %s)" : "Učitaj (max. %s)", @@ -73,12 +78,6 @@ OC.L10N.register( "Settings" : "Postavke", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristi slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>", - "New" : "Novo", - "New text file" : "Nova tekstualna datoteka", - "Text file" : "Tekstualna datoteka", - "New folder" : "Novi direktorij", - "Folder" : "Direktorij", - "Upload" : "Učitaj", "Cancel upload" : "Prekini učitavanje", "Upload some content or sync with your devices!" : "Učitaj neki sadržaj ili sinhronizuj sa tvojim uređajima!", "Select all" : "Označi sve", diff --git a/apps/files/l10n/bs.json b/apps/files/l10n/bs.json index b398ca5a39b..7d8a87f6398 100644 --- a/apps/files/l10n/bs.json +++ b/apps/files/l10n/bs.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u toku. Napuštanje stranice prekinut će učitavanje.", - "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Datoteku nije moguće kreirati", - "Could not create folder" : "Direktorij nije moguće kreirati", "Actions" : "Radnje", "Download" : "Preuzmi", "Select" : "Izaberi", @@ -45,7 +42,10 @@ "Error moving file." : "Greška pri premještanju datoteke", "Error moving file" : "Greška pri premještanju datoteke", "Error" : "Greška", + "{new_name} already exists" : "{new_name} već postoji", "Could not rename file" : "Nemoguće preimenovati datoteku", + "Could not create file" : "Datoteku nije moguće kreirati", + "Could not create folder" : "Direktorij nije moguće kreirati", "Error deleting file." : "Greška pri brisanju datoteke", "Name" : "Ime", "Size" : "Veličina", @@ -55,12 +55,17 @@ "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Ovdje niste ovlašteni učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteke"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", "File name cannot be empty." : "Naziv datoteke ne može biti prazan", "Your storage is full, files can not be updated or synced anymore!" : "Vaša pohrana je puna, datoteke više nije moguće ažurirati niti sinhronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", "Favorited" : "Favorizovano", "Favorite" : "Favorit", + "Upload" : "Učitaj", + "Text file" : "Tekstualna datoteka", + "Folder" : "Direktorij", + "New folder" : "Novi direktorij", "%s could not be renamed as it has been deleted" : "%s nije moguće preimenovati jer je izbrisan", "%s could not be renamed" : "%s nije moguće preimenovati", "Upload (max. %s)" : "Učitaj (max. %s)", @@ -71,12 +76,6 @@ "Settings" : "Postavke", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristi slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>", - "New" : "Novo", - "New text file" : "Nova tekstualna datoteka", - "Text file" : "Tekstualna datoteka", - "New folder" : "Novi direktorij", - "Folder" : "Direktorij", - "Upload" : "Učitaj", "Cancel upload" : "Prekini učitavanje", "Upload some content or sync with your devices!" : "Učitaj neki sadržaj ili sinhronizuj sa tvojim uređajima!", "Select all" : "Označi sve", diff --git a/apps/files/l10n/ca.js b/apps/files/l10n/ca.js index 28261b62219..f8388534802 100644 --- a/apps/files/l10n/ca.js +++ b/apps/files/l10n/ca.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "La pujada s'ha cancel·lat.", "Could not get result from server." : "No hi ha resposta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", - "{new_name} already exists" : "{new_name} ja existeix", - "Could not create file" : "No s'ha pogut crear el fitxer", - "Could not create folder" : "No s'ha pogut crear la carpeta", "Actions" : "Accions", "Download" : "Baixa", "Select" : "Selecciona", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Error en moure el fitxer.", "Error moving file" : "Error en moure el fitxer", "Error" : "Error", + "{new_name} already exists" : "{new_name} ja existeix", "Could not rename file" : "No es pot canviar el nom de fitxer", + "Could not create file" : "No s'ha pogut crear el fitxer", + "Could not create folder" : "No s'ha pogut crear la carpeta", "Error deleting file." : "Error en esborrar el fitxer.", "No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'", "Name" : "Nom", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "No teniu permisos per a pujar o crear els fitxers aquí", "_Uploading %n file_::_Uploading %n files_" : ["Pujant %n fitxer","Pujant %n fitxers"], + "New" : "Nou", "\"{name}\" is an invalid file name." : "\"{name}\" no es un fitxer vàlid.", "File name cannot be empty." : "El nom del fitxer no pot ser buit.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'emmagatzematge de {owner} està ple, els arxius no es poden actualitzar o sincronitzar més!", @@ -67,6 +68,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["coincidències '{filter}'","coincidència '{filter}'"], "Favorited" : "Agregat a favorits", "Favorite" : "Preferits", + "Upload" : "Puja", + "Text file" : "Fitxer de text", + "Folder" : "Carpeta", + "New folder" : "Carpeta nova", "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes", "A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta", "A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta", @@ -93,12 +98,6 @@ OC.L10N.register( "Settings" : "Arranjament", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>", - "New" : "Nou", - "New text file" : "Nou fitxer de text", - "Text file" : "Fitxer de text", - "New folder" : "Carpeta nova", - "Folder" : "Carpeta", - "Upload" : "Puja", "Cancel upload" : "Cancel·la la pujada", "No files in here" : "No hi ha arxius", "Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.", diff --git a/apps/files/l10n/ca.json b/apps/files/l10n/ca.json index 7fcc056717d..10a39fc941a 100644 --- a/apps/files/l10n/ca.json +++ b/apps/files/l10n/ca.json @@ -34,9 +34,6 @@ "Upload cancelled." : "La pujada s'ha cancel·lat.", "Could not get result from server." : "No hi ha resposta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Hi ha una pujada en curs. Si abandoneu la pàgina la pujada es cancel·larà.", - "{new_name} already exists" : "{new_name} ja existeix", - "Could not create file" : "No s'ha pogut crear el fitxer", - "Could not create folder" : "No s'ha pogut crear la carpeta", "Actions" : "Accions", "Download" : "Baixa", "Select" : "Selecciona", @@ -45,7 +42,10 @@ "Error moving file." : "Error en moure el fitxer.", "Error moving file" : "Error en moure el fitxer", "Error" : "Error", + "{new_name} already exists" : "{new_name} ja existeix", "Could not rename file" : "No es pot canviar el nom de fitxer", + "Could not create file" : "No s'ha pogut crear el fitxer", + "Could not create folder" : "No s'ha pogut crear la carpeta", "Error deleting file." : "Error en esborrar el fitxer.", "No entries in this folder match '{filter}'" : "No hi ha resultats que coincideixin amb '{filter}'", "Name" : "Nom", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "No teniu permisos per a pujar o crear els fitxers aquí", "_Uploading %n file_::_Uploading %n files_" : ["Pujant %n fitxer","Pujant %n fitxers"], + "New" : "Nou", "\"{name}\" is an invalid file name." : "\"{name}\" no es un fitxer vàlid.", "File name cannot be empty." : "El nom del fitxer no pot ser buit.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'emmagatzematge de {owner} està ple, els arxius no es poden actualitzar o sincronitzar més!", @@ -65,6 +66,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["coincidències '{filter}'","coincidència '{filter}'"], "Favorited" : "Agregat a favorits", "Favorite" : "Preferits", + "Upload" : "Puja", + "Text file" : "Fitxer de text", + "Folder" : "Carpeta", + "New folder" : "Carpeta nova", "An error occurred while trying to update the tags" : "S'ha produït un error en tractar d'actualitzar les etiquetes", "A new file or folder has been <strong>created</strong>" : "S'ha <strong>creat</strong> un nou fitxer o una nova carpeta", "A file or folder has been <strong>changed</strong>" : "S'ha <strong>canviat</strong> un fitxer o una carpeta", @@ -91,12 +96,6 @@ "Settings" : "Arranjament", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Useu aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir als fitxers via WebDAV</a>", - "New" : "Nou", - "New text file" : "Nou fitxer de text", - "Text file" : "Fitxer de text", - "New folder" : "Carpeta nova", - "Folder" : "Carpeta", - "Upload" : "Puja", "Cancel upload" : "Cancel·la la pujada", "No files in here" : "No hi ha arxius", "Upload some content or sync with your devices!" : "Pugi continguts o sincronitzi els seus dispositius.", diff --git a/apps/files/l10n/cs_CZ.js b/apps/files/l10n/cs_CZ.js index c12c66892d9..d462c1361de 100644 --- a/apps/files/l10n/cs_CZ.js +++ b/apps/files/l10n/cs_CZ.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Odesílání zrušeno.", "Could not get result from server." : "Nepodařilo se získat výsledek ze serveru.", "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.", - "{new_name} already exists" : "{new_name} již existuje", - "Could not create file" : "Nepodařilo se vytvořit soubor", - "Could not create folder" : "Nepodařilo se vytvořit složku", "Actions" : "Činnosti", "Download" : "Stáhnout", "Select" : "Vybrat", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Chyba při přesunu souboru.", "Error moving file" : "Chyba při přesunu souboru", "Error" : "Chyba", + "{new_name} already exists" : "{new_name} již existuje", "Could not rename file" : "Nepodařilo se přejmenovat soubor", + "Could not create file" : "Nepodařilo se vytvořit soubor", + "Could not create folder" : "Nepodařilo se vytvořit složku", "Error deleting file." : "Chyba při mazání souboru.", "No entries in this folder match '{filter}'" : "V tomto adresáři nic nesouhlasí s '{filter}'", "Name" : "Název", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} a {files}", "You don’t have permission to upload or create files here" : "Nemáte oprávnění sem nahrávat nebo vytvářet soubory", "_Uploading %n file_::_Uploading %n files_" : ["Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"], + "New" : "Nový", "\"{name}\" is an invalid file name." : "\"{name}\" je neplatným názvem souboru.", "File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložiště uživatele {owner} je zaplněné, soubory nelze aktualizovat a synchronizovat!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"], "Favorited" : "Přidáno k oblíbeným", "Favorite" : "Oblíbené", + "Upload" : "Odeslat", + "Text file" : "Textový soubor", + "Folder" : "Složka", + "New folder" : "Nová složka", "An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba", "A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo složka", "A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>", @@ -98,12 +103,6 @@ OC.L10N.register( "Settings" : "Nastavení", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>", - "New" : "Nový", - "New text file" : "Nový textový soubor", - "Text file" : "Textový soubor", - "New folder" : "Nová složka", - "Folder" : "Složka", - "Upload" : "Odeslat", "Cancel upload" : "Zrušit odesílání", "No files in here" : "Žádné soubory", "Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!", diff --git a/apps/files/l10n/cs_CZ.json b/apps/files/l10n/cs_CZ.json index da8c653d37e..56695a52489 100644 --- a/apps/files/l10n/cs_CZ.json +++ b/apps/files/l10n/cs_CZ.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Odesílání zrušeno.", "Could not get result from server." : "Nepodařilo se získat výsledek ze serveru.", "File upload is in progress. Leaving the page now will cancel the upload." : "Probíhá odesílání souboru. Opuštění stránky způsobí zrušení nahrávání.", - "{new_name} already exists" : "{new_name} již existuje", - "Could not create file" : "Nepodařilo se vytvořit soubor", - "Could not create folder" : "Nepodařilo se vytvořit složku", "Actions" : "Činnosti", "Download" : "Stáhnout", "Select" : "Vybrat", @@ -47,7 +44,10 @@ "Error moving file." : "Chyba při přesunu souboru.", "Error moving file" : "Chyba při přesunu souboru", "Error" : "Chyba", + "{new_name} already exists" : "{new_name} již existuje", "Could not rename file" : "Nepodařilo se přejmenovat soubor", + "Could not create file" : "Nepodařilo se vytvořit soubor", + "Could not create folder" : "Nepodařilo se vytvořit složku", "Error deleting file." : "Chyba při mazání souboru.", "No entries in this folder match '{filter}'" : "V tomto adresáři nic nesouhlasí s '{filter}'", "Name" : "Název", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} a {files}", "You don’t have permission to upload or create files here" : "Nemáte oprávnění sem nahrávat nebo vytvářet soubory", "_Uploading %n file_::_Uploading %n files_" : ["Nahrávám %n soubor","Nahrávám %n soubory","Nahrávám %n souborů"], + "New" : "Nový", "\"{name}\" is an invalid file name." : "\"{name}\" je neplatným názvem souboru.", "File name cannot be empty." : "Název souboru nemůže být prázdný řetězec.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Úložiště uživatele {owner} je zaplněné, soubory nelze aktualizovat a synchronizovat!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n bajt","%n bajty","%n bajtů"], "Favorited" : "Přidáno k oblíbeným", "Favorite" : "Oblíbené", + "Upload" : "Odeslat", + "Text file" : "Textový soubor", + "Folder" : "Složka", + "New folder" : "Nová složka", "An error occurred while trying to update the tags" : "Při pokusu o úpravu tagů nastala chyba", "A new file or folder has been <strong>created</strong>" : "Byl <strong>vytvořen</strong> nový soubor nebo složka", "A file or folder has been <strong>changed</strong>" : "Soubor nebo složka byla <strong>změněna</strong>", @@ -96,12 +101,6 @@ "Settings" : "Nastavení", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použijte tuto adresu pro <a href=\"%s\" target=\"_blank\">přístup k vašim souborům přes WebDAV</a>", - "New" : "Nový", - "New text file" : "Nový textový soubor", - "Text file" : "Textový soubor", - "New folder" : "Nová složka", - "Folder" : "Složka", - "Upload" : "Odeslat", "Cancel upload" : "Zrušit odesílání", "No files in here" : "Žádné soubory", "Upload some content or sync with your devices!" : "Nahrajte nějaký obsah nebo synchronizujte se svými přístroji!", diff --git a/apps/files/l10n/cy_GB.js b/apps/files/l10n/cy_GB.js index f3a9825ea4c..bdf61e20f24 100644 --- a/apps/files/l10n/cy_GB.js +++ b/apps/files/l10n/cy_GB.js @@ -18,26 +18,26 @@ OC.L10N.register( "Close" : "Cau", "Upload cancelled." : "Diddymwyd llwytho i fyny.", "File upload is in progress. Leaving the page now will cancel the upload." : "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.", - "{new_name} already exists" : "{new_name} yn bodoli'n barod", "Actions" : "Gweithredoedd", "Download" : "Llwytho i lawr", "Pending" : "I ddod", "Error" : "Gwall", + "{new_name} already exists" : "{new_name} yn bodoli'n barod", "Name" : "Enw", "Size" : "Maint", "Modified" : "Addaswyd", + "New" : "Newydd", "File name cannot be empty." : "Does dim hawl cael enw ffeil gwag.", "Your storage is full, files can not be updated or synced anymore!" : "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!", "Your storage is almost full ({usedSpacePercent}%)" : "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)", + "Upload" : "Llwytho i fyny", + "Text file" : "Ffeil destun", + "Folder" : "Plygell", "File handling" : "Trafod ffeiliau", "Maximum upload size" : "Maint mwyaf llwytho i fyny", "max. possible: " : "mwyaf. posib:", "Save" : "Cadw", "Settings" : "Gosodiadau", - "New" : "Newydd", - "Text file" : "Ffeil destun", - "Folder" : "Plygell", - "Upload" : "Llwytho i fyny", "Cancel upload" : "Diddymu llwytho i fyny", "Delete" : "Dileu", "Upload too large" : "Maint llwytho i fyny'n rhy fawr", diff --git a/apps/files/l10n/cy_GB.json b/apps/files/l10n/cy_GB.json index e4c7a637625..eb66c24ec62 100644 --- a/apps/files/l10n/cy_GB.json +++ b/apps/files/l10n/cy_GB.json @@ -16,26 +16,26 @@ "Close" : "Cau", "Upload cancelled." : "Diddymwyd llwytho i fyny.", "File upload is in progress. Leaving the page now will cancel the upload." : "Mae ffeiliau'n cael eu llwytho i fyny. Bydd gadael y dudalen hon nawr yn diddymu'r broses.", - "{new_name} already exists" : "{new_name} yn bodoli'n barod", "Actions" : "Gweithredoedd", "Download" : "Llwytho i lawr", "Pending" : "I ddod", "Error" : "Gwall", + "{new_name} already exists" : "{new_name} yn bodoli'n barod", "Name" : "Enw", "Size" : "Maint", "Modified" : "Addaswyd", + "New" : "Newydd", "File name cannot be empty." : "Does dim hawl cael enw ffeil gwag.", "Your storage is full, files can not be updated or synced anymore!" : "Mae eich storfa'n llawn, ni ellir diweddaru a chydweddu ffeiliau mwyach!", "Your storage is almost full ({usedSpacePercent}%)" : "Mae eich storfa bron a bod yn llawn ({usedSpacePercent}%)", + "Upload" : "Llwytho i fyny", + "Text file" : "Ffeil destun", + "Folder" : "Plygell", "File handling" : "Trafod ffeiliau", "Maximum upload size" : "Maint mwyaf llwytho i fyny", "max. possible: " : "mwyaf. posib:", "Save" : "Cadw", "Settings" : "Gosodiadau", - "New" : "Newydd", - "Text file" : "Ffeil destun", - "Folder" : "Plygell", - "Upload" : "Llwytho i fyny", "Cancel upload" : "Diddymu llwytho i fyny", "Delete" : "Dileu", "Upload too large" : "Maint llwytho i fyny'n rhy fawr", diff --git a/apps/files/l10n/da.js b/apps/files/l10n/da.js index b82b69baf52..1ecbcb7e16f 100644 --- a/apps/files/l10n/da.js +++ b/apps/files/l10n/da.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Upload afbrudt.", "Could not get result from server." : "Kunne ikke hente resultat fra server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", - "{new_name} already exists" : "{new_name} eksisterer allerede", - "Could not create file" : "Kunne ikke oprette fil", - "Could not create folder" : "Kunne ikke oprette mappe", "Actions" : "Handlinger", "Download" : "Download", "Select" : "Vælg", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Fejl ved flytning af fil", "Error moving file" : "Fejl ved flytning af fil", "Error" : "Fejl", + "{new_name} already exists" : "{new_name} eksisterer allerede", "Could not rename file" : "Kunne ikke omdøbe filen", + "Could not create file" : "Kunne ikke oprette fil", + "Could not create folder" : "Kunne ikke oprette mappe", "Error deleting file." : "Fejl ved sletnign af fil.", "No entries in this folder match '{filter}'" : "Der er ingen poster i denne mappe, der matcher '{filter}'", "Name" : "Navn", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} og {files}", "You don’t have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her", "_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"], + "New" : "Ny", "\"{name}\" is an invalid file name." : "'{name}' er et ugyldigt filnavn.", "File name cannot be empty." : "Filnavnet kan ikke stå tomt.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opbevaringspladsen tilhørende {owner} er fyldt op - filer kan ikke længere opdateres eller synkroniseres!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Gjort til foretrukken", "Favorite" : "Foretrukken", + "Upload" : "Upload", + "Text file" : "Tekstfil", + "Folder" : "Mappe", + "New folder" : "Ny Mappe", "An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>", @@ -98,12 +103,6 @@ OC.L10N.register( "Settings" : "Indstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Brug denne adresse for at <a href=\"%s\" target=\"_blank\">tilgå dine filer via WebDAV</a>", - "New" : "Ny", - "New text file" : "Ny tekstfil", - "Text file" : "Tekstfil", - "New folder" : "Ny Mappe", - "Folder" : "Mappe", - "Upload" : "Upload", "Cancel upload" : "Fortryd upload", "No files in here" : "Her er ingen filer", "Upload some content or sync with your devices!" : "Overfør indhold eller synkronisér med dine enheder!", diff --git a/apps/files/l10n/da.json b/apps/files/l10n/da.json index 85e0f872433..c85759c5640 100644 --- a/apps/files/l10n/da.json +++ b/apps/files/l10n/da.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Upload afbrudt.", "Could not get result from server." : "Kunne ikke hente resultat fra server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fil upload kører. Hvis du forlader siden nu, vil uploadet blive annuleret.", - "{new_name} already exists" : "{new_name} eksisterer allerede", - "Could not create file" : "Kunne ikke oprette fil", - "Could not create folder" : "Kunne ikke oprette mappe", "Actions" : "Handlinger", "Download" : "Download", "Select" : "Vælg", @@ -47,7 +44,10 @@ "Error moving file." : "Fejl ved flytning af fil", "Error moving file" : "Fejl ved flytning af fil", "Error" : "Fejl", + "{new_name} already exists" : "{new_name} eksisterer allerede", "Could not rename file" : "Kunne ikke omdøbe filen", + "Could not create file" : "Kunne ikke oprette fil", + "Could not create folder" : "Kunne ikke oprette mappe", "Error deleting file." : "Fejl ved sletnign af fil.", "No entries in this folder match '{filter}'" : "Der er ingen poster i denne mappe, der matcher '{filter}'", "Name" : "Navn", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} og {files}", "You don’t have permission to upload or create files here" : "Du har ikke tilladelse til at uploade eller oprette filer her", "_Uploading %n file_::_Uploading %n files_" : ["Uploader %n fil","Uploader %n filer"], + "New" : "Ny", "\"{name}\" is an invalid file name." : "'{name}' er et ugyldigt filnavn.", "File name cannot be empty." : "Filnavnet kan ikke stå tomt.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opbevaringspladsen tilhørende {owner} er fyldt op - filer kan ikke længere opdateres eller synkroniseres!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Gjort til foretrukken", "Favorite" : "Foretrukken", + "Upload" : "Upload", + "Text file" : "Tekstfil", + "Folder" : "Mappe", + "New folder" : "Ny Mappe", "An error occurred while trying to update the tags" : "Der opstod en fejl under forsøg på at opdatere mærkerne", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapper er blevet <strong>oprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe er blevet <strong>ændret</strong>", @@ -96,12 +101,6 @@ "Settings" : "Indstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Brug denne adresse for at <a href=\"%s\" target=\"_blank\">tilgå dine filer via WebDAV</a>", - "New" : "Ny", - "New text file" : "Ny tekstfil", - "Text file" : "Tekstfil", - "New folder" : "Ny Mappe", - "Folder" : "Mappe", - "Upload" : "Upload", "Cancel upload" : "Fortryd upload", "No files in here" : "Her er ingen filer", "Upload some content or sync with your devices!" : "Overfør indhold eller synkronisér med dine enheder!", diff --git a/apps/files/l10n/de.js b/apps/files/l10n/de.js index 48e386308ec..5e22e05f80d 100644 --- a/apps/files/l10n/de.js +++ b/apps/files/l10n/de.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.", - "{new_name} already exists" : "{new_name} existiert bereits", - "Could not create file" : "Die Datei konnte nicht erstellt werden", - "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Actions" : "Aktionen", "Download" : "Herunterladen", "Select" : "Auswählen", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", + "{new_name} already exists" : "{new_name} existiert bereits", "Could not rename file" : "Die Datei konnte nicht umbenannt werden", + "Could not create file" : "Die Datei konnte nicht erstellt werden", + "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Error deleting file." : "Fehler beim Löschen der Datei.", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} und {files}", "You don’t have permission to upload or create files here" : "Du hast keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hochgeladen","%n Dateien werden hochgeladen"], + "New" : "Neu", "\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"], "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "Upload" : "Hochladen", + "Text file" : "Textdatei", + "Folder" : "Ordner", + "New folder" : "Neuer Ordner", "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", @@ -97,12 +102,6 @@ OC.L10N.register( "Settings" : "Einstellungen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Deine Dateien zuzugreifen</a>", - "New" : "Neu", - "New text file" : "Neue Textdatei", - "Text file" : "Textdatei", - "New folder" : "Neuer Ordner", - "Folder" : "Ordner", - "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files in here" : "Keine Dateien vorhanden", "Upload some content or sync with your devices!" : "Lade Inhalte hoch oder synchronisiere mit Deinen Geräten!", diff --git a/apps/files/l10n/de.json b/apps/files/l10n/de.json index fdf22ba9732..5e93d2b3856 100644 --- a/apps/files/l10n/de.json +++ b/apps/files/l10n/de.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Du die Seite jetzt verlässt, wird der Upload abgebrochen.", - "{new_name} already exists" : "{new_name} existiert bereits", - "Could not create file" : "Die Datei konnte nicht erstellt werden", - "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Actions" : "Aktionen", "Download" : "Herunterladen", "Select" : "Auswählen", @@ -47,7 +44,10 @@ "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", + "{new_name} already exists" : "{new_name} existiert bereits", "Could not rename file" : "Die Datei konnte nicht umbenannt werden", + "Could not create file" : "Die Datei konnte nicht erstellt werden", + "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Error deleting file." : "Fehler beim Löschen der Datei.", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} und {files}", "You don’t have permission to upload or create files here" : "Du hast keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hochgeladen","%n Dateien werden hochgeladen"], + "New" : "Neu", "\"{name}\" is an invalid file name." : "»{name}« ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n Byte","%n Bytes"], "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "Upload" : "Hochladen", + "Text file" : "Textdatei", + "Folder" : "Ordner", + "New folder" : "Neuer Ordner", "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", @@ -95,12 +100,6 @@ "Settings" : "Einstellungen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutze diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Deine Dateien zuzugreifen</a>", - "New" : "Neu", - "New text file" : "Neue Textdatei", - "Text file" : "Textdatei", - "New folder" : "Neuer Ordner", - "Folder" : "Ordner", - "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files in here" : "Keine Dateien vorhanden", "Upload some content or sync with your devices!" : "Lade Inhalte hoch oder synchronisiere mit Deinen Geräten!", diff --git a/apps/files/l10n/de_AT.js b/apps/files/l10n/de_AT.js index a6ff8843a63..70adef6bb08 100644 --- a/apps/files/l10n/de_AT.js +++ b/apps/files/l10n/de_AT.js @@ -5,6 +5,8 @@ OC.L10N.register( "Files" : "Dateien", "Download" : "Herunterladen", "Error" : "Fehler", + "Upload" : "Hochladen", + "New folder" : "Neuer Ordner", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner hat sich <strong>geändert</strong>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", @@ -16,8 +18,6 @@ OC.L10N.register( "%2$s deleted %1$s" : "%2$s löschte %1$s", "Save" : "Speichern", "Settings" : "Einstellungen", - "New folder" : "Neuer Ordner", - "Upload" : "Hochladen", "Cancel upload" : "Hochladen abbrechen", "Delete" : "Löschen" }, diff --git a/apps/files/l10n/de_AT.json b/apps/files/l10n/de_AT.json index 0356e6650af..8766f264741 100644 --- a/apps/files/l10n/de_AT.json +++ b/apps/files/l10n/de_AT.json @@ -3,6 +3,8 @@ "Files" : "Dateien", "Download" : "Herunterladen", "Error" : "Fehler", + "Upload" : "Hochladen", + "New folder" : "Neuer Ordner", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner hat sich <strong>geändert</strong>", "A file or folder has been <strong>deleted</strong>" : "Eine Datei oder ein Ordner wurde <strong>gelöscht</strong>", @@ -14,8 +16,6 @@ "%2$s deleted %1$s" : "%2$s löschte %1$s", "Save" : "Speichern", "Settings" : "Einstellungen", - "New folder" : "Neuer Ordner", - "Upload" : "Hochladen", "Cancel upload" : "Hochladen abbrechen", "Delete" : "Löschen" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/de_DE.js b/apps/files/l10n/de_DE.js index bc2f764ae55..34c6c8fb4a6 100644 --- a/apps/files/l10n/de_DE.js +++ b/apps/files/l10n/de_DE.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", - "{new_name} already exists" : "{new_name} existiert bereits", - "Could not create file" : "Die Datei konnte nicht erstellt werden", - "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Actions" : "Aktionen", "Download" : "Herunterladen", "Select" : "Auswählen", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", + "{new_name} already exists" : "{new_name} existiert bereits", "Could not rename file" : "Die Datei konnte nicht umbenannt werden", + "Could not create file" : "Die Datei konnte nicht erstellt werden", + "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Error deleting file." : "Fehler beim Löschen der Datei.", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} und {files}", "You don’t have permission to upload or create files here" : "Sie haben keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"], + "New" : "Neu", "\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", @@ -69,6 +70,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"], "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "Upload" : "Hochladen", + "Text file" : "Textdatei", + "Folder" : "Ordner", + "New folder" : "Neuer Ordner", "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", @@ -95,12 +100,6 @@ OC.L10N.register( "Settings" : "Einstellungen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", - "New" : "Neu", - "New text file" : "Neue Textdatei", - "Text file" : "Textdatei", - "New folder" : "Neuer Ordner", - "Folder" : "Ordner", - "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files in here" : "Keine Dateien vorhanden", "Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!", diff --git a/apps/files/l10n/de_DE.json b/apps/files/l10n/de_DE.json index 7e4ee06cb81..390e5e0e575 100644 --- a/apps/files/l10n/de_DE.json +++ b/apps/files/l10n/de_DE.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Upload abgebrochen.", "Could not get result from server." : "Ergebnis konnte nicht vom Server abgerufen werden.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dateiupload läuft. Wenn Sie die Seite jetzt verlassen, wird der Upload abgebrochen.", - "{new_name} already exists" : "{new_name} existiert bereits", - "Could not create file" : "Die Datei konnte nicht erstellt werden", - "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Actions" : "Aktionen", "Download" : "Herunterladen", "Select" : "Auswählen", @@ -47,7 +44,10 @@ "Error moving file." : "Fehler beim Verschieben der Datei.", "Error moving file" : "Fehler beim Verschieben der Datei", "Error" : "Fehler", + "{new_name} already exists" : "{new_name} existiert bereits", "Could not rename file" : "Die Datei konnte nicht umbenannt werden", + "Could not create file" : "Die Datei konnte nicht erstellt werden", + "Could not create folder" : "Der Ordner konnte nicht erstellt werden", "Error deleting file." : "Fehler beim Löschen der Datei.", "No entries in this folder match '{filter}'" : "Keine Einträge in diesem Ordner stimmen mit '{filter}' überein", "Name" : "Name", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} und {files}", "You don’t have permission to upload or create files here" : "Sie haben keine Berechtigung, hier Dateien hochzuladen oder zu erstellen", "_Uploading %n file_::_Uploading %n files_" : ["%n Datei wird hoch geladen","%n Dateien werden hoch geladen"], + "New" : "Neu", "\"{name}\" is an invalid file name." : "„{name}“ ist kein gültiger Dateiname.", "File name cannot be empty." : "Der Dateiname darf nicht leer sein.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Der Speicher von {owner} ist voll, Dateien können nicht mehr aktualisiert oder synchronisiert werden!", @@ -67,6 +68,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["stimmt mit '{filter}' überein","stimmen mit '{filter}' überein"], "Favorited" : "Favorisiert", "Favorite" : "Favorit", + "Upload" : "Hochladen", + "Text file" : "Textdatei", + "Folder" : "Ordner", + "New folder" : "Neuer Ordner", "An error occurred while trying to update the tags" : "Es ist ein Fehler beim Aktualisieren der Tags aufgetreten", "A new file or folder has been <strong>created</strong>" : "Eine neue Datei oder ein neuer Ordner wurde <strong>erstellt</strong>", "A file or folder has been <strong>changed</strong>" : "Eine Datei oder ein Ordner wurde <strong>geändert</strong>", @@ -93,12 +98,6 @@ "Settings" : "Einstellungen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Benutzen Sie diese Adresse, um <a href=\"%s\" target=\"_blank\">über WebDAV auf Ihre Dateien zuzugreifen</a>", - "New" : "Neu", - "New text file" : "Neue Textdatei", - "Text file" : "Textdatei", - "New folder" : "Neuer Ordner", - "Folder" : "Ordner", - "Upload" : "Hochladen", "Cancel upload" : "Upload abbrechen", "No files in here" : "Keine Dateien vorhanden", "Upload some content or sync with your devices!" : "Laden Sie Inhalte hoch oder synchronisieren Sie mit Ihren Geräten!", diff --git a/apps/files/l10n/el.js b/apps/files/l10n/el.js index 1d0ac807d5f..fe65869c3bb 100644 --- a/apps/files/l10n/el.js +++ b/apps/files/l10n/el.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Η αποστολή ακυρώθηκε.", "Could not get result from server." : "Αδυναμία λήψης αποτελέσματος από το διακομιστή.", "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", - "{new_name} already exists" : "{new_name} υπάρχει ήδη", - "Could not create file" : "Αδυναμία δημιουργίας αρχείου", - "Could not create folder" : "Αδυναμία δημιουργίας φακέλου", "Actions" : "Ενέργειες", "Download" : "Λήψη", "Select" : "Επιλογή", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.", "Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου", "Error" : "Σφάλμα", + "{new_name} already exists" : "{new_name} υπάρχει ήδη", "Could not rename file" : "Αδυναμία μετονομασίας αρχείου", + "Could not create file" : "Αδυναμία δημιουργίας αρχείου", + "Could not create folder" : "Αδυναμία δημιουργίας φακέλου", "Error deleting file." : "Σφάλμα διαγραφής αρχείου.", "No entries in this folder match '{filter}'" : "Δεν ταιριάζουν καταχωρήσεις σε αυτόν το φάκελο '{filter}'", "Name" : "Όνομα", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}", "You don’t have permission to upload or create files here" : "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"], + "New" : "Νέο", "\"{name}\" is an invalid file name." : "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.", "File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός χώρος του {owner} είναι πλήρης, τα αρχεία δεν δύναται να ενημερωθούν ή να συγχρονίσουν!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Προτιμώμενα", "Favorite" : "Αγαπημένο", + "{newname} already exists" : "το {newname} υπάρχει ήδη", + "Upload" : "Μεταφόρτωση", + "Text file" : "Αρχείο κειμένου", + "New text file.txt" : "Νέο αρχείο κειμένου.txt", + "Folder" : "Φάκελος", + "New folder" : "Νέος κατάλογος", "An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών", "A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>", "A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Ρυθμίσεις", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτήν την διεύθυνση για να αποκτήσετε <a href=\"%s\" target=\"_blank\">πρόσβαση στα αρχεία σας μέσω WebDAV</a>", - "New" : "Νέο", - "New text file" : "Νέο αρχείο κειμένου", - "Text file" : "Αρχείο κειμένου", - "New folder" : "Νέος κατάλογος", - "Folder" : "Φάκελος", - "Upload" : "Μεταφόρτωση", "Cancel upload" : "Ακύρωση μεταφόρτωσης", "No files in here" : "Δεν υπάρχουν αρχεία", "Upload some content or sync with your devices!" : "Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας!", diff --git a/apps/files/l10n/el.json b/apps/files/l10n/el.json index d3ea79a5e40..37ff95b406e 100644 --- a/apps/files/l10n/el.json +++ b/apps/files/l10n/el.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Η αποστολή ακυρώθηκε.", "Could not get result from server." : "Αδυναμία λήψης αποτελέσματος από το διακομιστή.", "File upload is in progress. Leaving the page now will cancel the upload." : "Η αποστολή του αρχείου βρίσκεται σε εξέλιξη. Το κλείσιμο της σελίδας θα ακυρώσει την αποστολή.", - "{new_name} already exists" : "{new_name} υπάρχει ήδη", - "Could not create file" : "Αδυναμία δημιουργίας αρχείου", - "Could not create folder" : "Αδυναμία δημιουργίας φακέλου", "Actions" : "Ενέργειες", "Download" : "Λήψη", "Select" : "Επιλογή", @@ -47,7 +44,10 @@ "Error moving file." : "Σφάλμα κατά τη μετακίνηση του αρχείου.", "Error moving file" : "Σφάλμα κατά τη μετακίνηση του αρχείου", "Error" : "Σφάλμα", + "{new_name} already exists" : "{new_name} υπάρχει ήδη", "Could not rename file" : "Αδυναμία μετονομασίας αρχείου", + "Could not create file" : "Αδυναμία δημιουργίας αρχείου", + "Could not create folder" : "Αδυναμία δημιουργίας φακέλου", "Error deleting file." : "Σφάλμα διαγραφής αρχείου.", "No entries in this folder match '{filter}'" : "Δεν ταιριάζουν καταχωρήσεις σε αυτόν το φάκελο '{filter}'", "Name" : "Όνομα", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{Κατάλογοι αρχείων} και {αρχεία}", "You don’t have permission to upload or create files here" : "Δεν έχετε δικαιώματα φόρτωσης ή δημιουργίας αρχείων εδώ", "_Uploading %n file_::_Uploading %n files_" : ["Ανέβασμα %n αρχείου","Ανέβασμα %n αρχείων"], + "New" : "Νέο", "\"{name}\" is an invalid file name." : "Το \"{name}\" είναι μη έγκυρο όνομα αρχείου.", "File name cannot be empty." : "Το όνομα αρχείου δεν μπορεί να είναι κενό.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Ο αποθηκευτικός χώρος του {owner} είναι πλήρης, τα αρχεία δεν δύναται να ενημερωθούν ή να συγχρονίσουν!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Προτιμώμενα", "Favorite" : "Αγαπημένο", + "{newname} already exists" : "το {newname} υπάρχει ήδη", + "Upload" : "Μεταφόρτωση", + "Text file" : "Αρχείο κειμένου", + "New text file.txt" : "Νέο αρχείο κειμένου.txt", + "Folder" : "Φάκελος", + "New folder" : "Νέος κατάλογος", "An error occurred while trying to update the tags" : "Ένα σφάλμα προέκυψε κατά τη διάρκεια ενημέρωσης των ετικετών", "A new file or folder has been <strong>created</strong>" : "Ένα νέο αρχείο ή κατάλογος έχουν <strong>δημιουργηθεί</strong>", "A file or folder has been <strong>changed</strong>" : "Ένα αρχείο ή κατάλογος έχουν <strong>αλλάξει</strong>", @@ -96,12 +103,6 @@ "Settings" : "Ρυθμίσεις", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Χρησιμοποιήστε αυτήν την διεύθυνση για να αποκτήσετε <a href=\"%s\" target=\"_blank\">πρόσβαση στα αρχεία σας μέσω WebDAV</a>", - "New" : "Νέο", - "New text file" : "Νέο αρχείο κειμένου", - "Text file" : "Αρχείο κειμένου", - "New folder" : "Νέος κατάλογος", - "Folder" : "Φάκελος", - "Upload" : "Μεταφόρτωση", "Cancel upload" : "Ακύρωση μεταφόρτωσης", "No files in here" : "Δεν υπάρχουν αρχεία", "Upload some content or sync with your devices!" : "Μεταφόρτωση περιεχομένου ή συγχρονισμός με τις συσκευές σας!", diff --git a/apps/files/l10n/en_GB.js b/apps/files/l10n/en_GB.js index 1433c5d9c18..decfe4dcd83 100644 --- a/apps/files/l10n/en_GB.js +++ b/apps/files/l10n/en_GB.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Upload cancelled.", "Could not get result from server." : "Could not get result from server.", "File upload is in progress. Leaving the page now will cancel the upload." : "File upload is in progress. Leaving the page now will cancel the upload.", - "{new_name} already exists" : "{new_name} already exists", - "Could not create file" : "Could not create file", - "Could not create folder" : "Could not create folder", "Actions" : "Actions", "Download" : "Download", "Select" : "Select", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Error moving file.", "Error moving file" : "Error moving file", "Error" : "Error", + "{new_name} already exists" : "{new_name} already exists", "Could not rename file" : "Could not rename file", + "Could not create file" : "Could not create file", + "Could not create folder" : "Could not create folder", "Error deleting file." : "Error deleting file.", "No entries in this folder match '{filter}'" : "No entries in this folder match '{filter}'", "Name" : "Name", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} and {files}", "You don’t have permission to upload or create files here" : "You don’t have permission to upload or create files here", "_Uploading %n file_::_Uploading %n files_" : ["Uploading %n file","Uploading %n files"], + "New" : "New", "\"{name}\" is an invalid file name." : "\"{name}\" is an invalid file name.", "File name cannot be empty." : "File name cannot be empty.", "Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!", @@ -65,6 +66,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"], "Favorited" : "Favourited", "Favorite" : "Favourite", + "Upload" : "Upload", + "Text file" : "Text file", + "Folder" : "Folder", + "New folder" : "New folder", "An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags", "A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", @@ -91,12 +96,6 @@ OC.L10N.register( "Settings" : "Settings", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>", - "New" : "New", - "New text file" : "New text file", - "Text file" : "Text file", - "New folder" : "New folder", - "Folder" : "Folder", - "Upload" : "Upload", "Cancel upload" : "Cancel upload", "No files in here" : "No files in here", "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!", diff --git a/apps/files/l10n/en_GB.json b/apps/files/l10n/en_GB.json index 84feb344142..cf06affa55e 100644 --- a/apps/files/l10n/en_GB.json +++ b/apps/files/l10n/en_GB.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Upload cancelled.", "Could not get result from server." : "Could not get result from server.", "File upload is in progress. Leaving the page now will cancel the upload." : "File upload is in progress. Leaving the page now will cancel the upload.", - "{new_name} already exists" : "{new_name} already exists", - "Could not create file" : "Could not create file", - "Could not create folder" : "Could not create folder", "Actions" : "Actions", "Download" : "Download", "Select" : "Select", @@ -45,7 +42,10 @@ "Error moving file." : "Error moving file.", "Error moving file" : "Error moving file", "Error" : "Error", + "{new_name} already exists" : "{new_name} already exists", "Could not rename file" : "Could not rename file", + "Could not create file" : "Could not create file", + "Could not create folder" : "Could not create folder", "Error deleting file." : "Error deleting file.", "No entries in this folder match '{filter}'" : "No entries in this folder match '{filter}'", "Name" : "Name", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} and {files}", "You don’t have permission to upload or create files here" : "You don’t have permission to upload or create files here", "_Uploading %n file_::_Uploading %n files_" : ["Uploading %n file","Uploading %n files"], + "New" : "New", "\"{name}\" is an invalid file name." : "\"{name}\" is an invalid file name.", "File name cannot be empty." : "File name cannot be empty.", "Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!", @@ -63,6 +64,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["matches '{filter}'","match '{filter}'"], "Favorited" : "Favourited", "Favorite" : "Favourite", + "Upload" : "Upload", + "Text file" : "Text file", + "Folder" : "Folder", + "New folder" : "New folder", "An error occurred while trying to update the tags" : "An error occurred whilst trying to update the tags", "A new file or folder has been <strong>created</strong>" : "A new file or folder has been <strong>created</strong>", "A file or folder has been <strong>changed</strong>" : "A file or folder has been <strong>changed</strong>", @@ -89,12 +94,6 @@ "Settings" : "Settings", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>", - "New" : "New", - "New text file" : "New text file", - "Text file" : "Text file", - "New folder" : "New folder", - "Folder" : "Folder", - "Upload" : "Upload", "Cancel upload" : "Cancel upload", "No files in here" : "No files in here", "Upload some content or sync with your devices!" : "Upload some content or sync with your devices!", diff --git a/apps/files/l10n/eo.js b/apps/files/l10n/eo.js index 0f6c7de8a31..3c208a6bc17 100644 --- a/apps/files/l10n/eo.js +++ b/apps/files/l10n/eo.js @@ -29,16 +29,16 @@ OC.L10N.register( "Upload cancelled." : "La alŝuto nuliĝis.", "Could not get result from server." : "Ne povis ekhaviĝi rezulto el la servilo.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", - "{new_name} already exists" : "{new_name} jam ekzistas", - "Could not create file" : "Ne povis kreiĝi dosiero", - "Could not create folder" : "Ne povis kreiĝi dosierujo", "Actions" : "Agoj", "Download" : "Elŝuti", "Select" : "Elekti", "Pending" : "Traktotaj", "Error moving file" : "Eraris movo de dosiero", "Error" : "Eraro", + "{new_name} already exists" : "{new_name} jam ekzistas", "Could not rename file" : "Ne povis alinomiĝi dosiero", + "Could not create file" : "Ne povis kreiĝi dosiero", + "Could not create folder" : "Ne povis kreiĝi dosierujo", "Name" : "Nomo", "Size" : "Grando", "Modified" : "Modifita", @@ -47,10 +47,15 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} kaj {files}", "You don’t have permission to upload or create files here" : "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "_Uploading %n file_::_Uploading %n files_" : ["Alŝutatas %n dosiero","Alŝutatas %n dosieroj"], + "New" : "Nova", "File name cannot be empty." : "Dosiernomo devas ne malpleni.", "Your storage is full, files can not be updated or synced anymore!" : "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!", "Your storage is almost full ({usedSpacePercent}%)" : "Via memoro preskaŭ plenas ({usedSpacePercent}%)", "Favorite" : "Favorato", + "Upload" : "Alŝuti", + "Text file" : "Tekstodosiero", + "Folder" : "Dosierujo", + "New folder" : "Nova dosierujo", "You created %1$s" : "Vi kreis %1$s", "%2$s created %1$s" : "%2$s kreis %1$s", "%1$s was created in a public folder" : "%1$s kreiĝis en publika dosierujo", @@ -68,12 +73,6 @@ OC.L10N.register( "Settings" : "Agordo", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uzu ĉi tiun adreson por <a href=\"%s\" target=\"_blank\">aliri viajn Dosierojn per WebDAV</a>", - "New" : "Nova", - "New text file" : "Nova tekstodosiero", - "Text file" : "Tekstodosiero", - "New folder" : "Nova dosierujo", - "Folder" : "Dosierujo", - "Upload" : "Alŝuti", "Cancel upload" : "Nuligi alŝuton", "No files in here" : "Neniu dosiero estas ĉi tie", "Select all" : "Elekti ĉion", diff --git a/apps/files/l10n/eo.json b/apps/files/l10n/eo.json index 88639f33449..bf69b68d883 100644 --- a/apps/files/l10n/eo.json +++ b/apps/files/l10n/eo.json @@ -27,16 +27,16 @@ "Upload cancelled." : "La alŝuto nuliĝis.", "Could not get result from server." : "Ne povis ekhaviĝi rezulto el la servilo.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosieralŝuto plenumiĝas. Lasi la paĝon nun nuligus la alŝuton.", - "{new_name} already exists" : "{new_name} jam ekzistas", - "Could not create file" : "Ne povis kreiĝi dosiero", - "Could not create folder" : "Ne povis kreiĝi dosierujo", "Actions" : "Agoj", "Download" : "Elŝuti", "Select" : "Elekti", "Pending" : "Traktotaj", "Error moving file" : "Eraris movo de dosiero", "Error" : "Eraro", + "{new_name} already exists" : "{new_name} jam ekzistas", "Could not rename file" : "Ne povis alinomiĝi dosiero", + "Could not create file" : "Ne povis kreiĝi dosiero", + "Could not create folder" : "Ne povis kreiĝi dosierujo", "Name" : "Nomo", "Size" : "Grando", "Modified" : "Modifita", @@ -45,10 +45,15 @@ "{dirs} and {files}" : "{dirs} kaj {files}", "You don’t have permission to upload or create files here" : "Vi ne havas permeson alŝuti aŭ krei dosierojn ĉi tie", "_Uploading %n file_::_Uploading %n files_" : ["Alŝutatas %n dosiero","Alŝutatas %n dosieroj"], + "New" : "Nova", "File name cannot be empty." : "Dosiernomo devas ne malpleni.", "Your storage is full, files can not be updated or synced anymore!" : "Via memoro plenas, ne plu eblas ĝisdatigi aŭ sinkronigi dosierojn!", "Your storage is almost full ({usedSpacePercent}%)" : "Via memoro preskaŭ plenas ({usedSpacePercent}%)", "Favorite" : "Favorato", + "Upload" : "Alŝuti", + "Text file" : "Tekstodosiero", + "Folder" : "Dosierujo", + "New folder" : "Nova dosierujo", "You created %1$s" : "Vi kreis %1$s", "%2$s created %1$s" : "%2$s kreis %1$s", "%1$s was created in a public folder" : "%1$s kreiĝis en publika dosierujo", @@ -66,12 +71,6 @@ "Settings" : "Agordo", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uzu ĉi tiun adreson por <a href=\"%s\" target=\"_blank\">aliri viajn Dosierojn per WebDAV</a>", - "New" : "Nova", - "New text file" : "Nova tekstodosiero", - "Text file" : "Tekstodosiero", - "New folder" : "Nova dosierujo", - "Folder" : "Dosierujo", - "Upload" : "Alŝuti", "Cancel upload" : "Nuligi alŝuton", "No files in here" : "Neniu dosiero estas ĉi tie", "Select all" : "Elekti ĉion", diff --git a/apps/files/l10n/es.js b/apps/files/l10n/es.js index 39f4b8d0569..318a86e5884 100644 --- a/apps/files/l10n/es.js +++ b/apps/files/l10n/es.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "{new_name} already exists" : "{new_name} ya existe", - "Could not create file" : "No se pudo crear el archivo", - "Could not create folder" : "No se pudo crear la carpeta", "Actions" : "Acciones", "Download" : "Descargar", "Select" : "Seleccionar", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Error al mover el archivo.", "Error moving file" : "Error moviendo archivo", "Error" : "Error", + "{new_name} already exists" : "{new_name} ya existe", "Could not rename file" : "No se pudo renombrar el archivo", + "Could not create file" : "No se pudo crear el archivo", + "Could not create folder" : "No se pudo crear la carpeta", "Error deleting file." : "Error al borrar el archivo", "No entries in this folder match '{filter}'" : "No hay resultados que coincidan con '{filter}'", "Name" : "Nombre", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} y {files}", "You don’t have permission to upload or create files here" : "No tiene permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "New" : "Nuevo", "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Agregado a Favoritos", "Favorite" : "Favorito", + "{newname} already exists" : "{new_name} ya existe", + "Upload" : "Subir", + "Text file" : "Archivo de texto", + "New text file.txt" : "Nuevo archivo de texto.txt", + "Folder" : "Carpeta", + "New folder" : "Nueva carpeta", "An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas", "A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta", "A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>", - "New" : "Nuevo", - "New text file" : "Nuevo archivo de texto", - "Text file" : "Archivo de texto", - "New folder" : "Nueva carpeta", - "Folder" : "Carpeta", - "Upload" : "Subir", "Cancel upload" : "Cancelar la subida", "No files in here" : "Aquí no hay archivos", "Upload some content or sync with your devices!" : "Suba contenidos o sincronice sus dispositivos.", diff --git a/apps/files/l10n/es.json b/apps/files/l10n/es.json index 064ffe3785d..26761bf2073 100644 --- a/apps/files/l10n/es.json +++ b/apps/files/l10n/es.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "{new_name} already exists" : "{new_name} ya existe", - "Could not create file" : "No se pudo crear el archivo", - "Could not create folder" : "No se pudo crear la carpeta", "Actions" : "Acciones", "Download" : "Descargar", "Select" : "Seleccionar", @@ -47,7 +44,10 @@ "Error moving file." : "Error al mover el archivo.", "Error moving file" : "Error moviendo archivo", "Error" : "Error", + "{new_name} already exists" : "{new_name} ya existe", "Could not rename file" : "No se pudo renombrar el archivo", + "Could not create file" : "No se pudo crear el archivo", + "Could not create folder" : "No se pudo crear la carpeta", "Error deleting file." : "Error al borrar el archivo", "No entries in this folder match '{filter}'" : "No hay resultados que coincidan con '{filter}'", "Name" : "Nombre", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} y {files}", "You don’t have permission to upload or create files here" : "No tiene permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "New" : "Nuevo", "\"{name}\" is an invalid file name." : "\"{name}\" es un nombre de archivo inválido.", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "El almacén de {owner} está repleto, ¡los archivos no se actualizarán ni sincronizarán más!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Agregado a Favoritos", "Favorite" : "Favorito", + "{newname} already exists" : "{new_name} ya existe", + "Upload" : "Subir", + "Text file" : "Archivo de texto", + "New text file.txt" : "Nuevo archivo de texto.txt", + "Folder" : "Carpeta", + "New folder" : "Nueva carpeta", "An error occurred while trying to update the tags" : "Se produjo un error al tratar de actualizar las etiquetas", "A new file or folder has been <strong>created</strong>" : "Se ha <strong>creado</strong> un nuevo archivo o carpeta", "A file or folder has been <strong>changed</strong>" : "Se ha <strong>modificado</strong> un archivo o carpeta", @@ -96,12 +103,6 @@ "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use esta URL <a href=\"%s\" target=\"_blank\">para acceder via WebDAV</a>", - "New" : "Nuevo", - "New text file" : "Nuevo archivo de texto", - "Text file" : "Archivo de texto", - "New folder" : "Nueva carpeta", - "Folder" : "Carpeta", - "Upload" : "Subir", "Cancel upload" : "Cancelar la subida", "No files in here" : "Aquí no hay archivos", "Upload some content or sync with your devices!" : "Suba contenidos o sincronice sus dispositivos.", diff --git a/apps/files/l10n/es_AR.js b/apps/files/l10n/es_AR.js index 8b277c3b9f5..f99464401b6 100644 --- a/apps/files/l10n/es_AR.js +++ b/apps/files/l10n/es_AR.js @@ -29,16 +29,16 @@ OC.L10N.register( "Upload cancelled." : "La subida fue cancelada", "Could not get result from server." : "No se pudo obtener resultados del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.", - "{new_name} already exists" : "{new_name} ya existe", - "Could not create file" : "No se pudo crear el archivo", - "Could not create folder" : "No se pudo crear el directorio", "Actions" : "Acciones", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendientes", "Error moving file" : "Error moviendo el archivo", "Error" : "Error", + "{new_name} already exists" : "{new_name} ya existe", "Could not rename file" : "No se pudo renombrar el archivo", + "Could not create file" : "No se pudo crear el archivo", + "Could not create folder" : "No se pudo crear el directorio", "Error deleting file." : "Error al borrar el archivo.", "Name" : "Nombre", "Size" : "Tamaño", @@ -48,10 +48,15 @@ OC.L10N.register( "{dirs} and {files}" : "{carpetas} y {archivos}", "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "New" : "Nuevo", "File name cannot be empty." : "El nombre del archivo no puede quedar vacío.", "Your storage is full, files can not be updated or synced anymore!" : "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando", "Your storage is almost full ({usedSpacePercent}%)" : "El almacenamiento está casi lleno ({usedSpacePercent}%)", "Favorite" : "Favorito", + "Upload" : "Subir", + "Text file" : "Archivo de texto", + "Folder" : "Carpeta", + "New folder" : "Nueva Carpeta", "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>", "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>modificado</strong>", "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", @@ -69,12 +74,6 @@ OC.L10N.register( "Settings" : "Configuración", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usar esta dirección para <a href=\"%s\" target=\"_blank\">acceder a tus archivos vía WebDAV</a>", - "New" : "Nuevo", - "New text file" : "Nuevo archivo de texto", - "Text file" : "Archivo de texto", - "New folder" : "Nueva Carpeta", - "Folder" : "Carpeta", - "Upload" : "Subir", "Cancel upload" : "Cancelar subida", "Delete" : "Borrar", "Upload too large" : "El tamaño del archivo que querés subir es demasiado grande", diff --git a/apps/files/l10n/es_AR.json b/apps/files/l10n/es_AR.json index a9bd63269db..43dc9d35c3c 100644 --- a/apps/files/l10n/es_AR.json +++ b/apps/files/l10n/es_AR.json @@ -27,16 +27,16 @@ "Upload cancelled." : "La subida fue cancelada", "Could not get result from server." : "No se pudo obtener resultados del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si salís de la página ahora, la subida se cancelará.", - "{new_name} already exists" : "{new_name} ya existe", - "Could not create file" : "No se pudo crear el archivo", - "Could not create folder" : "No se pudo crear el directorio", "Actions" : "Acciones", "Download" : "Descargar", "Select" : "Seleccionar", "Pending" : "Pendientes", "Error moving file" : "Error moviendo el archivo", "Error" : "Error", + "{new_name} already exists" : "{new_name} ya existe", "Could not rename file" : "No se pudo renombrar el archivo", + "Could not create file" : "No se pudo crear el archivo", + "Could not create folder" : "No se pudo crear el directorio", "Error deleting file." : "Error al borrar el archivo.", "Name" : "Nombre", "Size" : "Tamaño", @@ -46,10 +46,15 @@ "{dirs} and {files}" : "{carpetas} y {archivos}", "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "New" : "Nuevo", "File name cannot be empty." : "El nombre del archivo no puede quedar vacío.", "Your storage is full, files can not be updated or synced anymore!" : "El almacenamiento está lleno, los archivos no se pueden seguir actualizando ni sincronizando", "Your storage is almost full ({usedSpacePercent}%)" : "El almacenamiento está casi lleno ({usedSpacePercent}%)", "Favorite" : "Favorito", + "Upload" : "Subir", + "Text file" : "Archivo de texto", + "Folder" : "Carpeta", + "New folder" : "Nueva Carpeta", "A new file or folder has been <strong>created</strong>" : "Un archivo o carpeta ha sido <strong>creado</strong>", "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>modificado</strong>", "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", @@ -67,12 +72,6 @@ "Settings" : "Configuración", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Usar esta dirección para <a href=\"%s\" target=\"_blank\">acceder a tus archivos vía WebDAV</a>", - "New" : "Nuevo", - "New text file" : "Nuevo archivo de texto", - "Text file" : "Archivo de texto", - "New folder" : "Nueva Carpeta", - "Folder" : "Carpeta", - "Upload" : "Subir", "Cancel upload" : "Cancelar subida", "Delete" : "Borrar", "Upload too large" : "El tamaño del archivo que querés subir es demasiado grande", diff --git a/apps/files/l10n/es_CL.js b/apps/files/l10n/es_CL.js index a33902178e1..c6269cdafd1 100644 --- a/apps/files/l10n/es_CL.js +++ b/apps/files/l10n/es_CL.js @@ -5,6 +5,8 @@ OC.L10N.register( "Files" : "Archivos", "Download" : "Descargar", "Error" : "Error", + "Upload" : "Subir", + "New folder" : "Nuevo directorio", "A new file or folder has been <strong>created</strong>" : "Un nuevo archivo o carpeta ha sido <strong>creado</strong>", "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong>", "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", @@ -15,8 +17,6 @@ OC.L10N.register( "You deleted %1$s" : "Ha borrado %1$s", "%2$s deleted %1$s" : "%2$s borró %1$s", "Settings" : "Configuración", - "New folder" : "Nuevo directorio", - "Upload" : "Subir", "Cancel upload" : "cancelar subida" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/es_CL.json b/apps/files/l10n/es_CL.json index 9703b5d68f9..75215c9cb7f 100644 --- a/apps/files/l10n/es_CL.json +++ b/apps/files/l10n/es_CL.json @@ -3,6 +3,8 @@ "Files" : "Archivos", "Download" : "Descargar", "Error" : "Error", + "Upload" : "Subir", + "New folder" : "Nuevo directorio", "A new file or folder has been <strong>created</strong>" : "Un nuevo archivo o carpeta ha sido <strong>creado</strong>", "A file or folder has been <strong>changed</strong>" : "Un archivo o carpeta ha sido <strong>cambiado</strong>", "A file or folder has been <strong>deleted</strong>" : "Un archivo o carpeta ha sido <strong>eliminado</strong>", @@ -13,8 +15,6 @@ "You deleted %1$s" : "Ha borrado %1$s", "%2$s deleted %1$s" : "%2$s borró %1$s", "Settings" : "Configuración", - "New folder" : "Nuevo directorio", - "Upload" : "Subir", "Cancel upload" : "cancelar subida" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/es_MX.js b/apps/files/l10n/es_MX.js index 61438805521..b58037005aa 100644 --- a/apps/files/l10n/es_MX.js +++ b/apps/files/l10n/es_MX.js @@ -29,15 +29,15 @@ OC.L10N.register( "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "{new_name} already exists" : "{new_name} ya existe", - "Could not create file" : "No se pudo crear el archivo", - "Could not create folder" : "No se pudo crear la carpeta", "Actions" : "Acciones", "Download" : "Descargar", "Pending" : "Pendiente", "Error moving file" : "Error moviendo archivo", "Error" : "Error", + "{new_name} already exists" : "{new_name} ya existe", "Could not rename file" : "No se pudo renombrar el archivo", + "Could not create file" : "No se pudo crear el archivo", + "Could not create folder" : "No se pudo crear la carpeta", "Error deleting file." : "Error borrando el archivo.", "Name" : "Nombre", "Size" : "Tamaño", @@ -47,10 +47,15 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} y {files}", "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "New" : "Nuevo", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)", "Favorite" : "Favorito", + "Upload" : "Subir archivo", + "Text file" : "Archivo de texto", + "Folder" : "Carpeta", + "New folder" : "Nueva carpeta", "%s could not be renamed" : "%s no pudo ser renombrado", "File handling" : "Administración de archivos", "Maximum upload size" : "Tamaño máximo de subida", @@ -59,12 +64,6 @@ OC.L10N.register( "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilice esta dirección para <a href=\"%s\" target=\"_blank\">acceder a sus archivos vía WebDAV</a>", - "New" : "Nuevo", - "New text file" : "Nuevo archivo de texto", - "Text file" : "Archivo de texto", - "New folder" : "Nueva carpeta", - "Folder" : "Carpeta", - "Upload" : "Subir archivo", "Cancel upload" : "Cancelar subida", "Delete" : "Eliminar", "Upload too large" : "Subida demasido grande", diff --git a/apps/files/l10n/es_MX.json b/apps/files/l10n/es_MX.json index 9bd2fe80f2b..5655fd4bf09 100644 --- a/apps/files/l10n/es_MX.json +++ b/apps/files/l10n/es_MX.json @@ -27,15 +27,15 @@ "Upload cancelled." : "Subida cancelada.", "Could not get result from server." : "No se pudo obtener respuesta del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "La subida del archivo está en proceso. Si sale de la página ahora, la subida será cancelada.", - "{new_name} already exists" : "{new_name} ya existe", - "Could not create file" : "No se pudo crear el archivo", - "Could not create folder" : "No se pudo crear la carpeta", "Actions" : "Acciones", "Download" : "Descargar", "Pending" : "Pendiente", "Error moving file" : "Error moviendo archivo", "Error" : "Error", + "{new_name} already exists" : "{new_name} ya existe", "Could not rename file" : "No se pudo renombrar el archivo", + "Could not create file" : "No se pudo crear el archivo", + "Could not create folder" : "No se pudo crear la carpeta", "Error deleting file." : "Error borrando el archivo.", "Name" : "Nombre", "Size" : "Tamaño", @@ -45,10 +45,15 @@ "{dirs} and {files}" : "{dirs} y {files}", "You don’t have permission to upload or create files here" : "No tienes permisos para subir o crear archivos aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Subiendo %n archivo","Subiendo %n archivos"], + "New" : "Nuevo", "File name cannot be empty." : "El nombre de archivo no puede estar vacío.", "Your storage is full, files can not be updated or synced anymore!" : "Su almacenamiento está lleno, ¡los archivos no se actualizarán ni sincronizarán más!", "Your storage is almost full ({usedSpacePercent}%)" : "Su almacenamiento está casi lleno ({usedSpacePercent}%)", "Favorite" : "Favorito", + "Upload" : "Subir archivo", + "Text file" : "Archivo de texto", + "Folder" : "Carpeta", + "New folder" : "Nueva carpeta", "%s could not be renamed" : "%s no pudo ser renombrado", "File handling" : "Administración de archivos", "Maximum upload size" : "Tamaño máximo de subida", @@ -57,12 +62,6 @@ "Settings" : "Ajustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilice esta dirección para <a href=\"%s\" target=\"_blank\">acceder a sus archivos vía WebDAV</a>", - "New" : "Nuevo", - "New text file" : "Nuevo archivo de texto", - "Text file" : "Archivo de texto", - "New folder" : "Nueva carpeta", - "Folder" : "Carpeta", - "Upload" : "Subir archivo", "Cancel upload" : "Cancelar subida", "Delete" : "Eliminar", "Upload too large" : "Subida demasido grande", diff --git a/apps/files/l10n/et_EE.js b/apps/files/l10n/et_EE.js index 384bce053ef..173c6d5503a 100644 --- a/apps/files/l10n/et_EE.js +++ b/apps/files/l10n/et_EE.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Üleslaadimine tühistati.", "Could not get result from server." : "Serverist ei saadud tulemusi", "File upload is in progress. Leaving the page now will cancel the upload." : "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.", - "{new_name} already exists" : "{new_name} on juba olemas", - "Could not create file" : "Ei suuda luua faili", - "Could not create folder" : "Ei suuda luua kataloogi", "Actions" : "Tegevused", "Download" : "Lae alla", "Select" : "Vali", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Viga faili liigutamisel.", "Error moving file" : "Viga faili eemaldamisel", "Error" : "Viga", + "{new_name} already exists" : "{new_name} on juba olemas", "Could not rename file" : "Ei suuda faili ümber nimetada", + "Could not create file" : "Ei suuda luua faili", + "Could not create folder" : "Ei suuda luua kataloogi", "Error deleting file." : "Viga faili kustutamisel.", "No entries in this folder match '{filter}'" : "Ükski sissekanne ei kattu filtriga '{filter}'", "Name" : "Nimi", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ja {files}", "You don’t have permission to upload or create files here" : "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "_Uploading %n file_::_Uploading %n files_" : ["Laadin üles %n faili","Laadin üles %n faili"], + "New" : "Uus", "\"{name}\" is an invalid file name." : "\"{name}\" on vigane failinimi.", "File name cannot be empty." : "Faili nimi ei saa olla tühi.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} andmemaht on täis! Faile ei uuendata ega sünkroniseerita!", @@ -70,6 +71,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n bait","%n baiti"], "Favorited" : "Lemmikud", "Favorite" : "Lemmik", + "Upload" : "Lae üles", + "Text file" : "Tekstifail", + "Folder" : "Kaust", + "New folder" : "Uus kaust", "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", "A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>", "A file or folder has been <strong>changed</strong>" : "Fail või kataloog on <strong>muudetud</strong>", @@ -96,12 +101,6 @@ OC.L10N.register( "Settings" : "Seaded", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>", - "New" : "Uus", - "New text file" : "Uus tekstifail", - "Text file" : "Tekstifail", - "New folder" : "Uus kaust", - "Folder" : "Kaust", - "Upload" : "Lae üles", "Cancel upload" : "Tühista üleslaadimine", "No files in here" : "Siin ei ole faile", "Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!", diff --git a/apps/files/l10n/et_EE.json b/apps/files/l10n/et_EE.json index d069982f8f6..d880d3d4720 100644 --- a/apps/files/l10n/et_EE.json +++ b/apps/files/l10n/et_EE.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Üleslaadimine tühistati.", "Could not get result from server." : "Serverist ei saadud tulemusi", "File upload is in progress. Leaving the page now will cancel the upload." : "Faili üleslaadimine on töös. Lehelt lahkumine katkestab selle üleslaadimise.", - "{new_name} already exists" : "{new_name} on juba olemas", - "Could not create file" : "Ei suuda luua faili", - "Could not create folder" : "Ei suuda luua kataloogi", "Actions" : "Tegevused", "Download" : "Lae alla", "Select" : "Vali", @@ -47,7 +44,10 @@ "Error moving file." : "Viga faili liigutamisel.", "Error moving file" : "Viga faili eemaldamisel", "Error" : "Viga", + "{new_name} already exists" : "{new_name} on juba olemas", "Could not rename file" : "Ei suuda faili ümber nimetada", + "Could not create file" : "Ei suuda luua faili", + "Could not create folder" : "Ei suuda luua kataloogi", "Error deleting file." : "Viga faili kustutamisel.", "No entries in this folder match '{filter}'" : "Ükski sissekanne ei kattu filtriga '{filter}'", "Name" : "Nimi", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} ja {files}", "You don’t have permission to upload or create files here" : "Sul puuduvad õigused siia failide üleslaadimiseks või tekitamiseks", "_Uploading %n file_::_Uploading %n files_" : ["Laadin üles %n faili","Laadin üles %n faili"], + "New" : "Uus", "\"{name}\" is an invalid file name." : "\"{name}\" on vigane failinimi.", "File name cannot be empty." : "Faili nimi ei saa olla tühi.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} andmemaht on täis! Faile ei uuendata ega sünkroniseerita!", @@ -68,6 +69,10 @@ "_%n byte_::_%n bytes_" : ["%n bait","%n baiti"], "Favorited" : "Lemmikud", "Favorite" : "Lemmik", + "Upload" : "Lae üles", + "Text file" : "Tekstifail", + "Folder" : "Kaust", + "New folder" : "Uus kaust", "An error occurred while trying to update the tags" : "Siltide uuendamisel tekkis tõrge", "A new file or folder has been <strong>created</strong>" : "Uus fail või kataloog on <strong>loodud</strong>", "A file or folder has been <strong>changed</strong>" : "Fail või kataloog on <strong>muudetud</strong>", @@ -94,12 +99,6 @@ "Settings" : "Seaded", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Kasuta seda aadressi <a href=\"%s\" target=\"_blank\">oma failidele ligipääsuks WebDAV kaudu</a>", - "New" : "Uus", - "New text file" : "Uus tekstifail", - "Text file" : "Tekstifail", - "New folder" : "Uus kaust", - "Folder" : "Kaust", - "Upload" : "Lae üles", "Cancel upload" : "Tühista üleslaadimine", "No files in here" : "Siin ei ole faile", "Upload some content or sync with your devices!" : "Laadi sisu üles või süngi oma seadmetega!", diff --git a/apps/files/l10n/eu.js b/apps/files/l10n/eu.js index e14be1ba264..249e73b1871 100644 --- a/apps/files/l10n/eu.js +++ b/apps/files/l10n/eu.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Igoera ezeztatuta", "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", - "{new_name} already exists" : "{new_name} dagoeneko existitzen da", - "Could not create file" : "Ezin izan da fitxategia sortu", - "Could not create folder" : "Ezin izan da karpeta sortu", "Actions" : "Ekintzak", "Download" : "Deskargatu", "Select" : "hautatu", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Errorea fitxategia mugitzean.", "Error moving file" : "Errorea fitxategia mugitzean", "Error" : "Errorea", + "{new_name} already exists" : "{new_name} dagoeneko existitzen da", "Could not rename file" : "Ezin izan da fitxategia berrizendatu", + "Could not create file" : "Ezin izan da fitxategia sortu", + "Could not create folder" : "Ezin izan da karpeta sortu", "Error deleting file." : "Errorea fitxategia ezabatzerakoan.", "No entries in this folder match '{filter}'" : "Karpeta honetan ez dago sarrerarik '{filter}' iragazkiarekin bat egiten dutenak", "Name" : "Izena", @@ -58,12 +58,17 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} eta {files}", "You don’t have permission to upload or create files here" : "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n igotzen","%n fitxategi igotzen"], + "New" : "Berria", "\"{name}\" is an invalid file name." : "\"{name}\" ez da fitxategi izen baliogarria.", "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", "Your storage is full, files can not be updated or synced anymore!" : "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!", "Your storage is almost full ({usedSpacePercent}%)" : "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})", "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", + "Upload" : "Igo", + "Text file" : "Testu fitxategia", + "Folder" : "Karpeta", + "New folder" : "Karpeta berria", "A new file or folder has been <strong>created</strong>" : "Fitxategi edo karpeta berri bat <strong>sortu da</strong>", "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", @@ -87,12 +92,6 @@ OC.L10N.register( "Settings" : "Ezarpenak", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">helbidea erabili zure fitxategiak WebDAV bidez eskuratzeko</a>", - "New" : "Berria", - "New text file" : "Testu fitxategi berria", - "Text file" : "Testu fitxategia", - "New folder" : "Karpeta berria", - "Folder" : "Karpeta", - "Upload" : "Igo", "Cancel upload" : "Ezeztatu igoera", "Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!", "No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan", diff --git a/apps/files/l10n/eu.json b/apps/files/l10n/eu.json index 3436235e79c..5e610f3f4fa 100644 --- a/apps/files/l10n/eu.json +++ b/apps/files/l10n/eu.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Igoera ezeztatuta", "Could not get result from server." : "Ezin da zerbitzaritik emaitzik lortu", "File upload is in progress. Leaving the page now will cancel the upload." : "Fitxategien igoera martxan da. Orria orain uzteak igoera ezeztatutko du.", - "{new_name} already exists" : "{new_name} dagoeneko existitzen da", - "Could not create file" : "Ezin izan da fitxategia sortu", - "Could not create folder" : "Ezin izan da karpeta sortu", "Actions" : "Ekintzak", "Download" : "Deskargatu", "Select" : "hautatu", @@ -45,7 +42,10 @@ "Error moving file." : "Errorea fitxategia mugitzean.", "Error moving file" : "Errorea fitxategia mugitzean", "Error" : "Errorea", + "{new_name} already exists" : "{new_name} dagoeneko existitzen da", "Could not rename file" : "Ezin izan da fitxategia berrizendatu", + "Could not create file" : "Ezin izan da fitxategia sortu", + "Could not create folder" : "Ezin izan da karpeta sortu", "Error deleting file." : "Errorea fitxategia ezabatzerakoan.", "No entries in this folder match '{filter}'" : "Karpeta honetan ez dago sarrerarik '{filter}' iragazkiarekin bat egiten dutenak", "Name" : "Izena", @@ -56,12 +56,17 @@ "{dirs} and {files}" : "{dirs} eta {files}", "You don’t have permission to upload or create files here" : "Ez duzu fitxategiak hona igotzeko edo hemen sortzeko baimenik", "_Uploading %n file_::_Uploading %n files_" : ["Fitxategi %n igotzen","%n fitxategi igotzen"], + "New" : "Berria", "\"{name}\" is an invalid file name." : "\"{name}\" ez da fitxategi izen baliogarria.", "File name cannot be empty." : "Fitxategi izena ezin da hutsa izan.", "Your storage is full, files can not be updated or synced anymore!" : "Zure biltegiratzea beterik dago, ezingo duzu aurrerantzean fitxategirik igo edo sinkronizatu!", "Your storage is almost full ({usedSpacePercent}%)" : "Zure biltegiratzea nahiko beterik dago (%{usedSpacePercent})", "Favorited" : "Gogokoa", "Favorite" : "Gogokoa", + "Upload" : "Igo", + "Text file" : "Testu fitxategia", + "Folder" : "Karpeta", + "New folder" : "Karpeta berria", "A new file or folder has been <strong>created</strong>" : "Fitxategi edo karpeta berri bat <strong>sortu da</strong>", "A file or folder has been <strong>changed</strong>" : "Fitxategi edo karpeta bat <strong>aldatu da</strong>", "A file or folder has been <strong>deleted</strong>" : "Fitxategi edo karpeta bat <strong>ezabatu da</strong>", @@ -85,12 +90,6 @@ "Settings" : "Ezarpenak", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">helbidea erabili zure fitxategiak WebDAV bidez eskuratzeko</a>", - "New" : "Berria", - "New text file" : "Testu fitxategi berria", - "Text file" : "Testu fitxategia", - "New folder" : "Karpeta berria", - "Folder" : "Karpeta", - "Upload" : "Igo", "Cancel upload" : "Ezeztatu igoera", "Upload some content or sync with your devices!" : "Igo edukiren bat edo sinkronizatu zure gailuekin!", "No entries found in this folder" : "Ez da sarrerarik aurkitu karpeta honetan", diff --git a/apps/files/l10n/fa.js b/apps/files/l10n/fa.js index 5df2d0ccc3e..984c53c3740 100644 --- a/apps/files/l10n/fa.js +++ b/apps/files/l10n/fa.js @@ -22,18 +22,23 @@ OC.L10N.register( "Close" : "بستن", "Upload cancelled." : "بار گذاری لغو شد", "File upload is in progress. Leaving the page now will cancel the upload." : "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ", - "{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.", "Actions" : "فعالیت ها", "Download" : "دانلود", "Pending" : "در انتظار", "Error" : "خطا", + "{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.", "Name" : "نام", "Size" : "اندازه", "Modified" : "تاریخ", "_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"], + "New" : "جدید", "File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.", "Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!", "Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)", + "Upload" : "بارگزاری", + "Text file" : "فایل متنی", + "Folder" : "پوشه", + "New folder" : "پوشه جدید", "A new file or folder has been <strong>created</strong>" : "فایل یا پوشه ای <strong>ایجاد</strong> شد", "A file or folder has been <strong>changed</strong>" : "فایل یا پوشه ای به <strong>تغییر</strong> یافت", "A file or folder has been <strong>deleted</strong>" : "فایل یا پوشه ای به <strong>حذف</strong> شد", @@ -55,11 +60,6 @@ OC.L10N.register( "Settings" : "تنظیمات", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "از این آدرس استفاده کنید تا <a href=\"%s\" target=\"_blank\">بتوانید به فایلهای خود توسط WebDAV دسترسی پیدا کنید</a>", - "New" : "جدید", - "Text file" : "فایل متنی", - "New folder" : "پوشه جدید", - "Folder" : "پوشه", - "Upload" : "بارگزاری", "Cancel upload" : "متوقف کردن بار گذاری", "Delete" : "حذف", "Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)", diff --git a/apps/files/l10n/fa.json b/apps/files/l10n/fa.json index b36fee0090c..361dbee1a1f 100644 --- a/apps/files/l10n/fa.json +++ b/apps/files/l10n/fa.json @@ -20,18 +20,23 @@ "Close" : "بستن", "Upload cancelled." : "بار گذاری لغو شد", "File upload is in progress. Leaving the page now will cancel the upload." : "آپلودکردن پرونده در حال پیشرفت است. در صورت خروج از صفحه آپلود لغو میگردد. ", - "{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.", "Actions" : "فعالیت ها", "Download" : "دانلود", "Pending" : "در انتظار", "Error" : "خطا", + "{new_name} already exists" : "{نام _جدید} در حال حاضر وجود دارد.", "Name" : "نام", "Size" : "اندازه", "Modified" : "تاریخ", "_Uploading %n file_::_Uploading %n files_" : ["در حال بارگذاری %n فایل"], + "New" : "جدید", "File name cannot be empty." : "نام پرونده نمی تواند خالی باشد.", "Your storage is full, files can not be updated or synced anymore!" : "فضای ذخیره ی شما کاملا پر است، بیش از این فایلها بهنگام یا همگام سازی نمی توانند بشوند!", "Your storage is almost full ({usedSpacePercent}%)" : "فضای ذخیره ی شما تقریبا پر است ({usedSpacePercent}%)", + "Upload" : "بارگزاری", + "Text file" : "فایل متنی", + "Folder" : "پوشه", + "New folder" : "پوشه جدید", "A new file or folder has been <strong>created</strong>" : "فایل یا پوشه ای <strong>ایجاد</strong> شد", "A file or folder has been <strong>changed</strong>" : "فایل یا پوشه ای به <strong>تغییر</strong> یافت", "A file or folder has been <strong>deleted</strong>" : "فایل یا پوشه ای به <strong>حذف</strong> شد", @@ -53,11 +58,6 @@ "Settings" : "تنظیمات", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "از این آدرس استفاده کنید تا <a href=\"%s\" target=\"_blank\">بتوانید به فایلهای خود توسط WebDAV دسترسی پیدا کنید</a>", - "New" : "جدید", - "Text file" : "فایل متنی", - "New folder" : "پوشه جدید", - "Folder" : "پوشه", - "Upload" : "بارگزاری", "Cancel upload" : "متوقف کردن بار گذاری", "Delete" : "حذف", "Upload too large" : "سایز فایل برای آپلود زیاد است(م.تنظیمات در php.ini)", diff --git a/apps/files/l10n/fi_FI.js b/apps/files/l10n/fi_FI.js index 414312858a3..c6615a61234 100644 --- a/apps/files/l10n/fi_FI.js +++ b/apps/files/l10n/fi_FI.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Lähetys peruttu.", "Could not get result from server." : "Tuloksien saaminen palvelimelta ei onnistunut.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.", - "{new_name} already exists" : "{new_name} on jo olemassa", - "Could not create file" : "Tiedoston luominen epäonnistui", - "Could not create folder" : "Kansion luominen epäonnistui", "Actions" : "Toiminnot", "Download" : "Lataa", "Select" : "Valitse", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Virhe tiedostoa siirrettäessä.", "Error moving file" : "Virhe tiedostoa siirrettäessä", "Error" : "Virhe", + "{new_name} already exists" : "{new_name} on jo olemassa", "Could not rename file" : "Tiedoston nimeäminen uudelleen epäonnistui", + "Could not create file" : "Tiedoston luominen epäonnistui", + "Could not create folder" : "Kansion luominen epäonnistui", "Error deleting file." : "Virhe tiedostoa poistaessa.", "No entries in this folder match '{filter}'" : "Mikään tässä kansiossa ei vastaa suodatusta '{filter}'", "Name" : "Nimi", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ja {files}", "You don’t have permission to upload or create files here" : "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "_Uploading %n file_::_Uploading %n files_" : ["Lähetetään %n tiedosto","Lähetetään %n tiedostoa"], + "New" : "Uusi", "\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.", "File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"], "Favorited" : "Lisätty suosikkeihin", "Favorite" : "Suosikki", + "{newname} already exists" : "{newname} on jo olemassa", + "Upload" : "Lähetä", + "Text file" : "Tekstitiedosto", + "New text file.txt" : "Uusi tekstitiedosto.txt", + "Folder" : "Kansio", + "New folder" : "Uusi kansio", "An error occurred while trying to update the tags" : "Tunnisteiden päivitystä yrittäessä tapahtui virhe", "A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>", "A file or folder has been <strong>changed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Asetukset", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>", - "New" : "Uusi", - "New text file" : "Uusi tekstitiedosto", - "Text file" : "Tekstitiedosto", - "New folder" : "Uusi kansio", - "Folder" : "Kansio", - "Upload" : "Lähetä", "Cancel upload" : "Peru lähetys", "No files in here" : "Täällä ei ole tiedostoja", "Upload some content or sync with your devices!" : "Lähetä tiedostoja tai synkronoi sisältö laitteidesi kanssa!", diff --git a/apps/files/l10n/fi_FI.json b/apps/files/l10n/fi_FI.json index ade67816cc2..9be7c66d37a 100644 --- a/apps/files/l10n/fi_FI.json +++ b/apps/files/l10n/fi_FI.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Lähetys peruttu.", "Could not get result from server." : "Tuloksien saaminen palvelimelta ei onnistunut.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tiedoston lähetys on meneillään. Sivulta poistuminen nyt peruu tiedoston lähetyksen.", - "{new_name} already exists" : "{new_name} on jo olemassa", - "Could not create file" : "Tiedoston luominen epäonnistui", - "Could not create folder" : "Kansion luominen epäonnistui", "Actions" : "Toiminnot", "Download" : "Lataa", "Select" : "Valitse", @@ -47,7 +44,10 @@ "Error moving file." : "Virhe tiedostoa siirrettäessä.", "Error moving file" : "Virhe tiedostoa siirrettäessä", "Error" : "Virhe", + "{new_name} already exists" : "{new_name} on jo olemassa", "Could not rename file" : "Tiedoston nimeäminen uudelleen epäonnistui", + "Could not create file" : "Tiedoston luominen epäonnistui", + "Could not create folder" : "Kansion luominen epäonnistui", "Error deleting file." : "Virhe tiedostoa poistaessa.", "No entries in this folder match '{filter}'" : "Mikään tässä kansiossa ei vastaa suodatusta '{filter}'", "Name" : "Nimi", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} ja {files}", "You don’t have permission to upload or create files here" : "Käyttöoikeutesi eivät riitä tiedostojen lähettämiseen tai kansioiden luomiseen tähän sijaintiin", "_Uploading %n file_::_Uploading %n files_" : ["Lähetetään %n tiedosto","Lähetetään %n tiedostoa"], + "New" : "Uusi", "\"{name}\" is an invalid file name." : "\"{name}\" on virheellinen tiedostonimi.", "File name cannot be empty." : "Tiedoston nimi ei voi olla tyhjä.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Käyttäjän {owner} tallennustila on täynnä, tiedostoja ei voi enää päivittää tai synkronoida!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n tavu","%n tavua"], "Favorited" : "Lisätty suosikkeihin", "Favorite" : "Suosikki", + "{newname} already exists" : "{newname} on jo olemassa", + "Upload" : "Lähetä", + "Text file" : "Tekstitiedosto", + "New text file.txt" : "Uusi tekstitiedosto.txt", + "Folder" : "Kansio", + "New folder" : "Uusi kansio", "An error occurred while trying to update the tags" : "Tunnisteiden päivitystä yrittäessä tapahtui virhe", "A new file or folder has been <strong>created</strong>" : "Uusi tiedosto tai kansio on <strong>luotu</strong>", "A file or folder has been <strong>changed</strong>" : "Tiedostoa tai kansiota on <strong>muutettu</strong>", @@ -96,12 +103,6 @@ "Settings" : "Asetukset", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Käytä tätä osoitetta <a href=\"%s\" target=\"_blank\">käyttääksesi tiedostojasi WebDAVin kautta</a>", - "New" : "Uusi", - "New text file" : "Uusi tekstitiedosto", - "Text file" : "Tekstitiedosto", - "New folder" : "Uusi kansio", - "Folder" : "Kansio", - "Upload" : "Lähetä", "Cancel upload" : "Peru lähetys", "No files in here" : "Täällä ei ole tiedostoja", "Upload some content or sync with your devices!" : "Lähetä tiedostoja tai synkronoi sisältö laitteidesi kanssa!", diff --git a/apps/files/l10n/fr.js b/apps/files/l10n/fr.js index 40ad266ecea..3b84a6c0c53 100644 --- a/apps/files/l10n/fr.js +++ b/apps/files/l10n/fr.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Envoi annulé.", "Could not get result from server." : "Ne peut recevoir les résultats du serveur.", "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", - "{new_name} already exists" : "{new_name} existe déjà", - "Could not create file" : "Impossible de créer le fichier", - "Could not create folder" : "Impossible de créer le dossier", "Actions" : "Actions", "Download" : "Télécharger", "Select" : "Sélectionner", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Erreur lors du déplacement du fichier.", "Error moving file" : "Erreur lors du déplacement du fichier", "Error" : "Erreur", + "{new_name} already exists" : "{new_name} existe déjà", "Could not rename file" : "Impossible de renommer le fichier", + "Could not create file" : "Impossible de créer le fichier", + "Could not create folder" : "Impossible de créer le dossier", "Error deleting file." : "Erreur pendant la suppression du fichier.", "No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'", "Name" : "Nom", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} et {files}", "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici", "_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"], + "New" : "Nouveau", "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n octet","%n octets"], "Favorited" : "Marqué comme favori", "Favorite" : "Favoris", + "{newname} already exists" : "{newname} existe déjà", + "Upload" : "Chargement", + "Text file" : "Fichier texte", + "New text file.txt" : "Nouveau fichier texte \"file.txt\"", + "Folder" : "Dossier", + "New folder" : "Nouveau dossier", "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes", "A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>", "A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>", - "New" : "Nouveau", - "New text file" : "Nouveau fichier texte", - "Text file" : "Fichier texte", - "New folder" : "Nouveau dossier", - "Folder" : "Dossier", - "Upload" : "Chargement", "Cancel upload" : "Annuler l'envoi", "No files in here" : "Aucun fichier ici", "Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !", diff --git a/apps/files/l10n/fr.json b/apps/files/l10n/fr.json index ca2ecebe5d2..4d05b5a42c3 100644 --- a/apps/files/l10n/fr.json +++ b/apps/files/l10n/fr.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Envoi annulé.", "Could not get result from server." : "Ne peut recevoir les résultats du serveur.", "File upload is in progress. Leaving the page now will cancel the upload." : "L'envoi du fichier est en cours. Quitter cette page maintenant annulera l'envoi du fichier.", - "{new_name} already exists" : "{new_name} existe déjà", - "Could not create file" : "Impossible de créer le fichier", - "Could not create folder" : "Impossible de créer le dossier", "Actions" : "Actions", "Download" : "Télécharger", "Select" : "Sélectionner", @@ -47,7 +44,10 @@ "Error moving file." : "Erreur lors du déplacement du fichier.", "Error moving file" : "Erreur lors du déplacement du fichier", "Error" : "Erreur", + "{new_name} already exists" : "{new_name} existe déjà", "Could not rename file" : "Impossible de renommer le fichier", + "Could not create file" : "Impossible de créer le fichier", + "Could not create folder" : "Impossible de créer le dossier", "Error deleting file." : "Erreur pendant la suppression du fichier.", "No entries in this folder match '{filter}'" : "Aucune entrée de ce dossier ne correspond à '{filter}'", "Name" : "Nom", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} et {files}", "You don’t have permission to upload or create files here" : "Vous n'avez pas la permission d'ajouter des fichiers ici", "_Uploading %n file_::_Uploading %n files_" : ["Téléversement de %n fichier","Téléversement de %n fichiers"], + "New" : "Nouveau", "\"{name}\" is an invalid file name." : "\"{name}\" n'est pas un nom de fichier valide.", "File name cannot be empty." : "Le nom de fichier ne peut être vide.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "L'espace de stockage de {owner} est plein. Les fichiers ne peuvent plus être mis à jour ou synchronisés!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n octet","%n octets"], "Favorited" : "Marqué comme favori", "Favorite" : "Favoris", + "{newname} already exists" : "{newname} existe déjà", + "Upload" : "Chargement", + "Text file" : "Fichier texte", + "New text file.txt" : "Nouveau fichier texte \"file.txt\"", + "Folder" : "Dossier", + "New folder" : "Nouveau dossier", "An error occurred while trying to update the tags" : "Une erreur est survenue lors de la mise à jour des étiquettes", "A new file or folder has been <strong>created</strong>" : "Un nouveau fichier ou répertoire a été <strong>créé</strong>", "A file or folder has been <strong>changed</strong>" : "Un fichier ou un répertoire a été <strong>modifié</strong>", @@ -96,12 +103,6 @@ "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilisez cette adresse pour <a href=\"%s\" target=\"_blank\">accéder à vos fichiers par WebDAV</a>", - "New" : "Nouveau", - "New text file" : "Nouveau fichier texte", - "Text file" : "Fichier texte", - "New folder" : "Nouveau dossier", - "Folder" : "Dossier", - "Upload" : "Chargement", "Cancel upload" : "Annuler l'envoi", "No files in here" : "Aucun fichier ici", "Upload some content or sync with your devices!" : "Déposez du contenu ou synchronisez vos appareils !", diff --git a/apps/files/l10n/gl.js b/apps/files/l10n/gl.js index 3f666f2b95b..4293b3ab9ba 100644 --- a/apps/files/l10n/gl.js +++ b/apps/files/l10n/gl.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Envío cancelado.", "Could not get result from server." : "Non foi posíbel obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.", - "{new_name} already exists" : "Xa existe un {new_name}", - "Could not create file" : "Non foi posíbel crear o ficheiro", - "Could not create folder" : "Non foi posíbel crear o cartafol", "Actions" : "Accións", "Download" : "Descargar", "Select" : "Seleccionar", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Produciuse un erro ao mover o ficheiro.", "Error moving file" : "Produciuse un erro ao mover o ficheiro", "Error" : "Erro", + "{new_name} already exists" : "Xa existe un {new_name}", "Could not rename file" : "Non foi posíbel renomear o ficheiro", + "Could not create file" : "Non foi posíbel crear o ficheiro", + "Could not create folder" : "Non foi posíbel crear o cartafol", "Error deleting file." : "Produciuse un erro ao eliminar o ficheiro.", "No entries in this folder match '{filter}'" : "Non hai entradas neste cartafol coincidentes con «{filter}»", "Name" : "Nome", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Non ten permisos para enviar ou crear ficheiros aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Cargando %n ficheiro","Cargando %n ficheiros"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "«{name}» é un nome incorrecto de ficheiro.", "File name cannot be empty." : "O nome de ficheiro non pode estar baleiro", "Storage of {owner} is full, files can not be updated or synced anymore!" : "O espazo de almacenamento de {owner} está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Marcado como favorito", "Favorite" : "Favorito", + "Upload" : "Enviar", + "Text file" : "Ficheiro de texto", + "Folder" : "Cartafol", + "New folder" : "Novo cartafol", "An error occurred while trying to update the tags" : "Produciuse un erro ao tentar actualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "<strong>Creouse</strong> un novo ficheiro ou cartafol", "A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol", @@ -97,12 +102,6 @@ OC.L10N.register( "Settings" : "Axustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>", - "New" : "Novo", - "New text file" : "Ficheiro novo de texto", - "Text file" : "Ficheiro de texto", - "New folder" : "Novo cartafol", - "Folder" : "Cartafol", - "Upload" : "Enviar", "Cancel upload" : "Cancelar o envío", "No files in here" : "Aquí non hai ficheiros", "Upload some content or sync with your devices!" : "Envíe algún contido ou sincronice cos seus dispositivos!", diff --git a/apps/files/l10n/gl.json b/apps/files/l10n/gl.json index f9fec770356..34eeaa6a369 100644 --- a/apps/files/l10n/gl.json +++ b/apps/files/l10n/gl.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Envío cancelado.", "Could not get result from server." : "Non foi posíbel obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "O envío do ficheiro está en proceso. Saír agora da páxina cancelará o envío.", - "{new_name} already exists" : "Xa existe un {new_name}", - "Could not create file" : "Non foi posíbel crear o ficheiro", - "Could not create folder" : "Non foi posíbel crear o cartafol", "Actions" : "Accións", "Download" : "Descargar", "Select" : "Seleccionar", @@ -47,7 +44,10 @@ "Error moving file." : "Produciuse un erro ao mover o ficheiro.", "Error moving file" : "Produciuse un erro ao mover o ficheiro", "Error" : "Erro", + "{new_name} already exists" : "Xa existe un {new_name}", "Could not rename file" : "Non foi posíbel renomear o ficheiro", + "Could not create file" : "Non foi posíbel crear o ficheiro", + "Could not create folder" : "Non foi posíbel crear o cartafol", "Error deleting file." : "Produciuse un erro ao eliminar o ficheiro.", "No entries in this folder match '{filter}'" : "Non hai entradas neste cartafol coincidentes con «{filter}»", "Name" : "Nome", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Non ten permisos para enviar ou crear ficheiros aquí.", "_Uploading %n file_::_Uploading %n files_" : ["Cargando %n ficheiro","Cargando %n ficheiros"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "«{name}» é un nome incorrecto de ficheiro.", "File name cannot be empty." : "O nome de ficheiro non pode estar baleiro", "Storage of {owner} is full, files can not be updated or synced anymore!" : "O espazo de almacenamento de {owner} está cheo, non é posíbel actualizar ou sincronizar máis os ficheiros!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Marcado como favorito", "Favorite" : "Favorito", + "Upload" : "Enviar", + "Text file" : "Ficheiro de texto", + "Folder" : "Cartafol", + "New folder" : "Novo cartafol", "An error occurred while trying to update the tags" : "Produciuse un erro ao tentar actualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "<strong>Creouse</strong> un novo ficheiro ou cartafol", "A file or folder has been <strong>changed</strong>" : "<strong>Cambiouse</strong> un ficheiro ou cartafol", @@ -95,12 +100,6 @@ "Settings" : "Axustes", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Empregue esta ligazón para <a href=\"%s\" target=\"_blank\">acceder aos seus ficheiros mediante WebDAV</a>", - "New" : "Novo", - "New text file" : "Ficheiro novo de texto", - "Text file" : "Ficheiro de texto", - "New folder" : "Novo cartafol", - "Folder" : "Cartafol", - "Upload" : "Enviar", "Cancel upload" : "Cancelar o envío", "No files in here" : "Aquí non hai ficheiros", "Upload some content or sync with your devices!" : "Envíe algún contido ou sincronice cos seus dispositivos!", diff --git a/apps/files/l10n/he.js b/apps/files/l10n/he.js index 8918c8686c9..94956cbff0e 100644 --- a/apps/files/l10n/he.js +++ b/apps/files/l10n/he.js @@ -22,18 +22,23 @@ OC.L10N.register( "Upload cancelled." : "ההעלאה בוטלה.", "Could not get result from server." : "לא ניתן לגשת לתוצאות מהשרת.", "File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.", - "{new_name} already exists" : "{new_name} כבר קיים", "Actions" : "פעולות", "Download" : "הורדה", "Select" : "בחר", "Pending" : "ממתין", "Error" : "שגיאה", + "{new_name} already exists" : "{new_name} כבר קיים", "Name" : "שם", "Size" : "גודל", "Modified" : "זמן שינוי", + "New" : "חדש", "File name cannot be empty." : "שם קובץ אינו יכול להיות ריק", "Your storage is almost full ({usedSpacePercent}%)" : "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)", "Favorite" : "מועדף", + "Upload" : "העלאה", + "Text file" : "קובץ טקסט", + "Folder" : "תיקייה", + "New folder" : "תיקייה חדשה", "A new file or folder has been <strong>created</strong>" : "קובץ או תיקייה חדשים <strong>נוצרו<strong/>", "A file or folder has been <strong>changed</strong>" : "קובץ או תיקייה <strong>שונו<strong/>", "A file or folder has been <strong>deleted</strong>" : "קובץ או תיקייה <strong>נמחקו<strong/>", @@ -51,11 +56,6 @@ OC.L10N.register( "Save" : "שמירה", "Settings" : "הגדרות", "WebDAV" : "WebDAV", - "New" : "חדש", - "Text file" : "קובץ טקסט", - "New folder" : "תיקייה חדשה", - "Folder" : "תיקייה", - "Upload" : "העלאה", "Cancel upload" : "ביטול ההעלאה", "Delete" : "מחיקה", "Upload too large" : "העלאה גדולה מידי", diff --git a/apps/files/l10n/he.json b/apps/files/l10n/he.json index 38b8365eaa0..8dfc57f3276 100644 --- a/apps/files/l10n/he.json +++ b/apps/files/l10n/he.json @@ -20,18 +20,23 @@ "Upload cancelled." : "ההעלאה בוטלה.", "Could not get result from server." : "לא ניתן לגשת לתוצאות מהשרת.", "File upload is in progress. Leaving the page now will cancel the upload." : "מתבצעת כעת העלאת קבצים. עזיבה של העמוד תבטל את ההעלאה.", - "{new_name} already exists" : "{new_name} כבר קיים", "Actions" : "פעולות", "Download" : "הורדה", "Select" : "בחר", "Pending" : "ממתין", "Error" : "שגיאה", + "{new_name} already exists" : "{new_name} כבר קיים", "Name" : "שם", "Size" : "גודל", "Modified" : "זמן שינוי", + "New" : "חדש", "File name cannot be empty." : "שם קובץ אינו יכול להיות ריק", "Your storage is almost full ({usedSpacePercent}%)" : "שטח האחסון שלך כמעט מלא ({usedSpacePercent}%)", "Favorite" : "מועדף", + "Upload" : "העלאה", + "Text file" : "קובץ טקסט", + "Folder" : "תיקייה", + "New folder" : "תיקייה חדשה", "A new file or folder has been <strong>created</strong>" : "קובץ או תיקייה חדשים <strong>נוצרו<strong/>", "A file or folder has been <strong>changed</strong>" : "קובץ או תיקייה <strong>שונו<strong/>", "A file or folder has been <strong>deleted</strong>" : "קובץ או תיקייה <strong>נמחקו<strong/>", @@ -49,11 +54,6 @@ "Save" : "שמירה", "Settings" : "הגדרות", "WebDAV" : "WebDAV", - "New" : "חדש", - "Text file" : "קובץ טקסט", - "New folder" : "תיקייה חדשה", - "Folder" : "תיקייה", - "Upload" : "העלאה", "Cancel upload" : "ביטול ההעלאה", "Delete" : "מחיקה", "Upload too large" : "העלאה גדולה מידי", diff --git a/apps/files/l10n/hi.js b/apps/files/l10n/hi.js index 35ad6e5f688..c040105875d 100644 --- a/apps/files/l10n/hi.js +++ b/apps/files/l10n/hi.js @@ -4,9 +4,9 @@ OC.L10N.register( "Files" : "फाइलें ", "Close" : "बंद करें ", "Error" : "त्रुटि", - "Save" : "सहेजें", - "Settings" : "सेटिंग्स", + "Upload" : "अपलोड ", "New folder" : "नया फ़ोल्डर", - "Upload" : "अपलोड " + "Save" : "सहेजें", + "Settings" : "सेटिंग्स" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/hi.json b/apps/files/l10n/hi.json index 0bcf3ace1de..70db8f9d7f1 100644 --- a/apps/files/l10n/hi.json +++ b/apps/files/l10n/hi.json @@ -2,9 +2,9 @@ "Files" : "फाइलें ", "Close" : "बंद करें ", "Error" : "त्रुटि", - "Save" : "सहेजें", - "Settings" : "सेटिंग्स", + "Upload" : "अपलोड ", "New folder" : "नया फ़ोल्डर", - "Upload" : "अपलोड " + "Save" : "सहेजें", + "Settings" : "सेटिंग्स" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/hr.js b/apps/files/l10n/hr.js index fb273f410cc..379d43f4dbd 100644 --- a/apps/files/l10n/hr.js +++ b/apps/files/l10n/hr.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od poslužitelja.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u tijeku. Napuštanje stranice prekinut će učitavanje.", - "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Datoteku nije moguće kreirati", - "Could not create folder" : "Mapu nije moguće kreirati", "Actions" : "Radnje", "Download" : "Preuzimanje", "Select" : "Selektiraj", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Pogrešno premještanje datoteke", "Error moving file" : "Pogrešno premještanje datoteke", "Error" : "Pogreška", + "{new_name} already exists" : "{new_name} već postoji", "Could not rename file" : "Datoteku nije moguće preimenovati", + "Could not create file" : "Datoteku nije moguće kreirati", + "Could not create folder" : "Mapu nije moguće kreirati", "Error deleting file." : "Pogrešno brisanje datoteke", "No entries in this folder match '{filter}'" : "Nema zapisa u ovom folderu match '{filter}'", "Name" : "Naziv", @@ -58,12 +58,17 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Ovdje vam nije dopušteno učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteka"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", "File name cannot be empty." : "Naziv datoteke ne može biti prazan.", "Your storage is full, files can not be updated or synced anymore!" : "Vaša je pohrana puna, datoteke više nije moguće ažurirati niti sinkronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", "Favorited" : "Favoritovan", "Favorite" : "Favorit", + "Upload" : "Učitavanje", + "Text file" : "Tekstualna datoteka", + "Folder" : "Mapa", + "New folder" : "Nova mapa", "A new file or folder has been <strong>created</strong>" : "Nova datoteka ili nova mapa su <strong>kreirani</strong>", "A file or folder has been <strong>changed</strong>" : "Datoteka ili mapa su <strong>promijenjeni</strong>", "A file or folder has been <strong>deleted</strong>" : "Datoteka ili mapa su <strong>izbrisani</strong>", @@ -87,12 +92,6 @@ OC.L10N.register( "Settings" : "Postavke", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristitet slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>", - "New" : "Novo", - "New text file" : "Nova tekstualna datoteka", - "Text file" : "Tekstualna datoteka", - "New folder" : "Nova mapa", - "Folder" : "Mapa", - "Upload" : "Učitavanje", "Cancel upload" : "Prekini upload", "Upload some content or sync with your devices!" : "Aplodujte neki sadrzaj ili sinkronizirajte sa vasim uredjajem!", "No entries found in this folder" : "Zapis nije pronadjen u ovom direktorijumu ", diff --git a/apps/files/l10n/hr.json b/apps/files/l10n/hr.json index 92e6b5d80e1..a8d935848ea 100644 --- a/apps/files/l10n/hr.json +++ b/apps/files/l10n/hr.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Učitavanje je prekinuto.", "Could not get result from server." : "Nemoguće dobiti rezultat od poslužitelja.", "File upload is in progress. Leaving the page now will cancel the upload." : "Učitavanje datoteke je u tijeku. Napuštanje stranice prekinut će učitavanje.", - "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Datoteku nije moguće kreirati", - "Could not create folder" : "Mapu nije moguće kreirati", "Actions" : "Radnje", "Download" : "Preuzimanje", "Select" : "Selektiraj", @@ -45,7 +42,10 @@ "Error moving file." : "Pogrešno premještanje datoteke", "Error moving file" : "Pogrešno premještanje datoteke", "Error" : "Pogreška", + "{new_name} already exists" : "{new_name} već postoji", "Could not rename file" : "Datoteku nije moguće preimenovati", + "Could not create file" : "Datoteku nije moguće kreirati", + "Could not create folder" : "Mapu nije moguće kreirati", "Error deleting file." : "Pogrešno brisanje datoteke", "No entries in this folder match '{filter}'" : "Nema zapisa u ovom folderu match '{filter}'", "Name" : "Naziv", @@ -56,12 +56,17 @@ "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Ovdje vam nije dopušteno učitavati ili kreirati datoteke", "_Uploading %n file_::_Uploading %n files_" : ["Prenosim %n datoteku","Prenosim %n datoteke","Prenosim %n datoteka"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" je neispravno ime datoteke.", "File name cannot be empty." : "Naziv datoteke ne može biti prazan.", "Your storage is full, files can not be updated or synced anymore!" : "Vaša je pohrana puna, datoteke više nije moguće ažurirati niti sinkronizirati!", "Your storage is almost full ({usedSpacePercent}%)" : "Vaš prostor za pohranu je skoro pun ({usedSpacePercent}%)", "Favorited" : "Favoritovan", "Favorite" : "Favorit", + "Upload" : "Učitavanje", + "Text file" : "Tekstualna datoteka", + "Folder" : "Mapa", + "New folder" : "Nova mapa", "A new file or folder has been <strong>created</strong>" : "Nova datoteka ili nova mapa su <strong>kreirani</strong>", "A file or folder has been <strong>changed</strong>" : "Datoteka ili mapa su <strong>promijenjeni</strong>", "A file or folder has been <strong>deleted</strong>" : "Datoteka ili mapa su <strong>izbrisani</strong>", @@ -85,12 +90,6 @@ "Settings" : "Postavke", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristitet slijedeću adresu za <a href=\"%s\" target=\"_blank\">pristup vašim datotekama putem WebDAV-a</a>", - "New" : "Novo", - "New text file" : "Nova tekstualna datoteka", - "Text file" : "Tekstualna datoteka", - "New folder" : "Nova mapa", - "Folder" : "Mapa", - "Upload" : "Učitavanje", "Cancel upload" : "Prekini upload", "Upload some content or sync with your devices!" : "Aplodujte neki sadrzaj ili sinkronizirajte sa vasim uredjajem!", "No entries found in this folder" : "Zapis nije pronadjen u ovom direktorijumu ", diff --git a/apps/files/l10n/hu_HU.js b/apps/files/l10n/hu_HU.js index c7c7719db1c..8b9b7c17f15 100644 --- a/apps/files/l10n/hu_HU.js +++ b/apps/files/l10n/hu_HU.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "A feltöltést megszakítottuk.", "Could not get result from server." : "A kiszolgálótól nem kapható meg a művelet eredménye.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.", - "{new_name} already exists" : "{new_name} már létezik", - "Could not create file" : "Az állomány nem hozható létre", - "Could not create folder" : "A mappa nem hozható létre", "Actions" : "Műveletek", "Download" : "Letöltés", "Select" : "Kiválaszt", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Hiba történt a fájl áthelyezése közben.", "Error moving file" : "Az állomány áthelyezése nem sikerült.", "Error" : "Hiba", + "{new_name} already exists" : "{new_name} már létezik", "Could not rename file" : "Az állomány nem nevezhető át", + "Could not create file" : "Az állomány nem hozható létre", + "Could not create folder" : "A mappa nem hozható létre", "Error deleting file." : "Hiba a file törlése közben.", "No entries in this folder match '{filter}'" : "Nincsenek egyező bejegyzések ebben a könyvtárban '{filter}'", "Name" : "Név", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} és {files}", "You don’t have permission to upload or create files here" : "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"], + "New" : "Új", "\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.", "File name cannot be empty." : "A fájlnév nem lehet semmi.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"], "Favorited" : "Kedvenc", "Favorite" : "Kedvenc", + "{newname} already exists" : "{newname} már létezik", + "Upload" : "Feltöltés", + "Text file" : "Szövegfájl", + "New text file.txt" : "Új szöveges fájl.txt", + "Folder" : "Mappa", + "New folder" : "Új mappa", "An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket", "A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>", "A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Beállítások", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ezt a címet használja, ha <a href=\"%s\" target=\"_blank\">WebDAV-on keresztül szeretné elérni a fájljait</a>", - "New" : "Új", - "New text file" : "Új szövegfájl", - "Text file" : "Szövegfájl", - "New folder" : "Új mappa", - "Folder" : "Mappa", - "Upload" : "Feltöltés", "Cancel upload" : "A feltöltés megszakítása", "No files in here" : "Itt nincsenek fájlok", "Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!", diff --git a/apps/files/l10n/hu_HU.json b/apps/files/l10n/hu_HU.json index 08027509fb3..6d82cd60413 100644 --- a/apps/files/l10n/hu_HU.json +++ b/apps/files/l10n/hu_HU.json @@ -34,9 +34,6 @@ "Upload cancelled." : "A feltöltést megszakítottuk.", "Could not get result from server." : "A kiszolgálótól nem kapható meg a művelet eredménye.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fájlfeltöltés van folyamatban. Az oldal elhagyása megszakítja a feltöltést.", - "{new_name} already exists" : "{new_name} már létezik", - "Could not create file" : "Az állomány nem hozható létre", - "Could not create folder" : "A mappa nem hozható létre", "Actions" : "Műveletek", "Download" : "Letöltés", "Select" : "Kiválaszt", @@ -47,7 +44,10 @@ "Error moving file." : "Hiba történt a fájl áthelyezése közben.", "Error moving file" : "Az állomány áthelyezése nem sikerült.", "Error" : "Hiba", + "{new_name} already exists" : "{new_name} már létezik", "Could not rename file" : "Az állomány nem nevezhető át", + "Could not create file" : "Az állomány nem hozható létre", + "Could not create folder" : "A mappa nem hozható létre", "Error deleting file." : "Hiba a file törlése közben.", "No entries in this folder match '{filter}'" : "Nincsenek egyező bejegyzések ebben a könyvtárban '{filter}'", "Name" : "Név", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} és {files}", "You don’t have permission to upload or create files here" : "Önnek nincs jogosultsága ahhoz, hogy ide állományokat töltsön föl, vagy itt újakat hozzon létre", "_Uploading %n file_::_Uploading %n files_" : ["%n állomány feltöltése","%n állomány feltöltése"], + "New" : "Új", "\"{name}\" is an invalid file name." : "\"{name}\" érvénytelen, mint fájlnév.", "File name cannot be empty." : "A fájlnév nem lehet semmi.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "A {owner} felhasználó tárolója betelt, a fájlok nem frissíthetők és szinkronizálhatók többet!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n bájt","%n bájt"], "Favorited" : "Kedvenc", "Favorite" : "Kedvenc", + "{newname} already exists" : "{newname} már létezik", + "Upload" : "Feltöltés", + "Text file" : "Szövegfájl", + "New text file.txt" : "Új szöveges fájl.txt", + "Folder" : "Mappa", + "New folder" : "Új mappa", "An error occurred while trying to update the tags" : "Hiba történt, miközben megpróbálta frissíteni a címkéket", "A new file or folder has been <strong>created</strong>" : "Új fájl vagy könyvtár <strong>létrehozása</strong>", "A file or folder has been <strong>changed</strong>" : "Fájl vagy könyvtár <strong>módosítása</strong>", @@ -96,12 +103,6 @@ "Settings" : "Beállítások", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Ezt a címet használja, ha <a href=\"%s\" target=\"_blank\">WebDAV-on keresztül szeretné elérni a fájljait</a>", - "New" : "Új", - "New text file" : "Új szövegfájl", - "Text file" : "Szövegfájl", - "New folder" : "Új mappa", - "Folder" : "Mappa", - "Upload" : "Feltöltés", "Cancel upload" : "A feltöltés megszakítása", "No files in here" : "Itt nincsenek fájlok", "Upload some content or sync with your devices!" : "Tölts fel néhány tartalmat, vagy szinkronizálj az eszközöddel!", diff --git a/apps/files/l10n/ia.js b/apps/files/l10n/ia.js index d6d4b83cfca..9b5d321937e 100644 --- a/apps/files/l10n/ia.js +++ b/apps/files/l10n/ia.js @@ -13,7 +13,12 @@ OC.L10N.register( "Name" : "Nomine", "Size" : "Dimension", "Modified" : "Modificate", + "New" : "Nove", "File name cannot be empty." : "Le nomine de file non pote esser vacue.", + "Upload" : "Incargar", + "Text file" : "File de texto", + "Folder" : "Dossier", + "New folder" : "Nove dossier", "A new file or folder has been <strong>created</strong>" : "Un nove file o dossier ha essite <strong>create</strong>", "A file or folder has been <strong>changed</strong>" : "Un nove file o dossier ha essite <strong>modificate</strong>", "A file or folder has been <strong>deleted</strong>" : "Un nove file o dossier ha essite <strong>delite</strong>", @@ -31,11 +36,6 @@ OC.L10N.register( "Maximum upload size" : "Dimension maxime de incargamento", "Save" : "Salveguardar", "Settings" : "Configurationes", - "New" : "Nove", - "Text file" : "File de texto", - "New folder" : "Nove dossier", - "Folder" : "Dossier", - "Upload" : "Incargar", "Delete" : "Deler", "Upload too large" : "Incargamento troppo longe" }, diff --git a/apps/files/l10n/ia.json b/apps/files/l10n/ia.json index 0389c806b30..461634d526a 100644 --- a/apps/files/l10n/ia.json +++ b/apps/files/l10n/ia.json @@ -11,7 +11,12 @@ "Name" : "Nomine", "Size" : "Dimension", "Modified" : "Modificate", + "New" : "Nove", "File name cannot be empty." : "Le nomine de file non pote esser vacue.", + "Upload" : "Incargar", + "Text file" : "File de texto", + "Folder" : "Dossier", + "New folder" : "Nove dossier", "A new file or folder has been <strong>created</strong>" : "Un nove file o dossier ha essite <strong>create</strong>", "A file or folder has been <strong>changed</strong>" : "Un nove file o dossier ha essite <strong>modificate</strong>", "A file or folder has been <strong>deleted</strong>" : "Un nove file o dossier ha essite <strong>delite</strong>", @@ -29,11 +34,6 @@ "Maximum upload size" : "Dimension maxime de incargamento", "Save" : "Salveguardar", "Settings" : "Configurationes", - "New" : "Nove", - "Text file" : "File de texto", - "New folder" : "Nove dossier", - "Folder" : "Dossier", - "Upload" : "Incargar", "Delete" : "Deler", "Upload too large" : "Incargamento troppo longe" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/id.js b/apps/files/l10n/id.js index 8d57bacedf4..af35544da8a 100644 --- a/apps/files/l10n/id.js +++ b/apps/files/l10n/id.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Pengunggahan dibatalkan.", "Could not get result from server." : "Tidak mendapatkan hasil dari server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", - "{new_name} already exists" : "{new_name} sudah ada", - "Could not create file" : "Tidak dapat membuat berkas", - "Could not create folder" : "Tidak dapat membuat folder", "Actions" : "Tindakan", "Download" : "Unduh", "Select" : "Pilih", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Kesalahan saat memindahkan berkas.", "Error moving file" : "Kesalahan saat memindahkan berkas", "Error" : "Kesalahan ", + "{new_name} already exists" : "{new_name} sudah ada", "Could not rename file" : "Tidak dapat mengubah nama berkas", + "Could not create file" : "Tidak dapat membuat berkas", + "Could not create folder" : "Tidak dapat membuat folder", "Error deleting file." : "Kesalahan saat menghapus berkas.", "No entries in this folder match '{filter}'" : "Tidak ada entri di folder ini yang cocok dengan '{filter}'", "Name" : "Nama", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} dan {files}", "You don’t have permission to upload or create files here" : "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "_Uploading %n file_::_Uploading %n files_" : ["Mengunggah %n berkas"], + "New" : "Baru", "\"{name}\" is an invalid file name." : "\"{name}\" adalah nama berkas yang tidak sah.", "File name cannot be empty." : "Nama berkas tidak boleh kosong.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Penyimpanan {owner} penuh, berkas tidak dapat diperbarui atau disinkronisasikan lagi!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte"], "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "Upload" : "Unggah", + "Text file" : "Berkas teks", + "Folder" : "Folder", + "New folder" : "Map baru", "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label", "A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>", "A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>", @@ -98,12 +103,6 @@ OC.L10N.register( "Settings" : "Pengaturan", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>", - "New" : "Baru", - "New text file" : "Berkas teks baru", - "Text file" : "Berkas teks", - "New folder" : "Map baru", - "Folder" : "Folder", - "Upload" : "Unggah", "Cancel upload" : "Batal unggah", "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", diff --git a/apps/files/l10n/id.json b/apps/files/l10n/id.json index c38ca149788..2c0f8274542 100644 --- a/apps/files/l10n/id.json +++ b/apps/files/l10n/id.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Pengunggahan dibatalkan.", "Could not get result from server." : "Tidak mendapatkan hasil dari server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Berkas sedang diunggah. Meninggalkan halaman ini akan membatalkan proses.", - "{new_name} already exists" : "{new_name} sudah ada", - "Could not create file" : "Tidak dapat membuat berkas", - "Could not create folder" : "Tidak dapat membuat folder", "Actions" : "Tindakan", "Download" : "Unduh", "Select" : "Pilih", @@ -47,7 +44,10 @@ "Error moving file." : "Kesalahan saat memindahkan berkas.", "Error moving file" : "Kesalahan saat memindahkan berkas", "Error" : "Kesalahan ", + "{new_name} already exists" : "{new_name} sudah ada", "Could not rename file" : "Tidak dapat mengubah nama berkas", + "Could not create file" : "Tidak dapat membuat berkas", + "Could not create folder" : "Tidak dapat membuat folder", "Error deleting file." : "Kesalahan saat menghapus berkas.", "No entries in this folder match '{filter}'" : "Tidak ada entri di folder ini yang cocok dengan '{filter}'", "Name" : "Nama", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} dan {files}", "You don’t have permission to upload or create files here" : "Anda tidak memiliki akses untuk mengunggah atau membuat berkas disini", "_Uploading %n file_::_Uploading %n files_" : ["Mengunggah %n berkas"], + "New" : "Baru", "\"{name}\" is an invalid file name." : "\"{name}\" adalah nama berkas yang tidak sah.", "File name cannot be empty." : "Nama berkas tidak boleh kosong.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Penyimpanan {owner} penuh, berkas tidak dapat diperbarui atau disinkronisasikan lagi!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n byte"], "Favorited" : "Difavoritkan", "Favorite" : "Favorit", + "Upload" : "Unggah", + "Text file" : "Berkas teks", + "Folder" : "Folder", + "New folder" : "Map baru", "An error occurred while trying to update the tags" : "Terjadi kesalahan saat mencoba untuk memperbarui label", "A new file or folder has been <strong>created</strong>" : "Sebuah berkas atau folder baru telah <strong>dibuat</strong>", "A file or folder has been <strong>changed</strong>" : "Sebuah berkas atau folder telah <strong>diubah</strong>", @@ -96,12 +101,6 @@ "Settings" : "Pengaturan", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gunakan alamat ini untuk <a href=\"%s\" target=\"_blank\">mengakses Berkas via WebDAV</a>", - "New" : "Baru", - "New text file" : "Berkas teks baru", - "Text file" : "Berkas teks", - "New folder" : "Map baru", - "Folder" : "Folder", - "Upload" : "Unggah", "Cancel upload" : "Batal unggah", "No files in here" : "Tidak ada berkas disini", "Upload some content or sync with your devices!" : "Unggah beberapa konten dan sinkronisasikan dengan perangkat Anda!", diff --git a/apps/files/l10n/is.js b/apps/files/l10n/is.js index a3b44be4731..7ac24eba462 100644 --- a/apps/files/l10n/is.js +++ b/apps/files/l10n/is.js @@ -16,25 +16,25 @@ OC.L10N.register( "Close" : "Loka", "Upload cancelled." : "Hætt við innsendingu.", "File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.", - "{new_name} already exists" : "{new_name} er þegar til", "Download" : "Niðurhal", "Select" : "Velja", "Pending" : "Bíður", "Error" : "Villa", + "{new_name} already exists" : "{new_name} er þegar til", "Name" : "Nafn", "Size" : "Stærð", "Modified" : "Breytt", + "New" : "Nýtt", "File name cannot be empty." : "Nafn skráar má ekki vera tómt", + "Upload" : "Senda inn", + "Text file" : "Texta skrá", + "Folder" : "Mappa", "File handling" : "Meðhöndlun skrár", "Maximum upload size" : "Hámarks stærð innsendingar", "max. possible: " : "hámark mögulegt: ", "Save" : "Vista", "Settings" : "Stillingar", "WebDAV" : "WebDAV", - "New" : "Nýtt", - "Text file" : "Texta skrá", - "Folder" : "Mappa", - "Upload" : "Senda inn", "Cancel upload" : "Hætta við innsendingu", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Select all" : "Velja allt", diff --git a/apps/files/l10n/is.json b/apps/files/l10n/is.json index 9307f9b6df4..8e723d963a7 100644 --- a/apps/files/l10n/is.json +++ b/apps/files/l10n/is.json @@ -14,25 +14,25 @@ "Close" : "Loka", "Upload cancelled." : "Hætt við innsendingu.", "File upload is in progress. Leaving the page now will cancel the upload." : "Innsending í gangi. Ef þú ferð af þessari síðu mun innsending misheppnast.", - "{new_name} already exists" : "{new_name} er þegar til", "Download" : "Niðurhal", "Select" : "Velja", "Pending" : "Bíður", "Error" : "Villa", + "{new_name} already exists" : "{new_name} er þegar til", "Name" : "Nafn", "Size" : "Stærð", "Modified" : "Breytt", + "New" : "Nýtt", "File name cannot be empty." : "Nafn skráar má ekki vera tómt", + "Upload" : "Senda inn", + "Text file" : "Texta skrá", + "Folder" : "Mappa", "File handling" : "Meðhöndlun skrár", "Maximum upload size" : "Hámarks stærð innsendingar", "max. possible: " : "hámark mögulegt: ", "Save" : "Vista", "Settings" : "Stillingar", "WebDAV" : "WebDAV", - "New" : "Nýtt", - "Text file" : "Texta skrá", - "Folder" : "Mappa", - "Upload" : "Senda inn", "Cancel upload" : "Hætta við innsendingu", "No entries found in this folder" : "Engar skrár fundust í þessari möppu", "Select all" : "Velja allt", diff --git a/apps/files/l10n/it.js b/apps/files/l10n/it.js index 2a7e998cced..aa92ffc0f70 100644 --- a/apps/files/l10n/it.js +++ b/apps/files/l10n/it.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Caricamento annullato.", "Could not get result from server." : "Impossibile ottenere il risultato dal server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", - "{new_name} already exists" : "{new_name} esiste già", - "Could not create file" : "Impossibile creare il file", - "Could not create folder" : "Impossibile creare la cartella", "Actions" : "Azioni", "Download" : "Scarica", "Select" : "Seleziona", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Errore durante lo spostamento del file.", "Error moving file" : "Errore durante lo spostamento del file", "Error" : "Errore", + "{new_name} already exists" : "{new_name} esiste già", "Could not rename file" : "Impossibile rinominare il file", + "Could not create file" : "Impossibile creare il file", + "Could not create folder" : "Impossibile creare la cartella", "Error deleting file." : "Errore durante l'eliminazione del file.", "No entries in this folder match '{filter}'" : "Nessuna voce in questa cartella corrisponde a '{filter}'", "Name" : "Nome", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Qui non hai i permessi di caricare o creare file", "_Uploading %n file_::_Uploading %n files_" : ["Caricamento di %n file in corso","Caricamento di %n file in corso"], + "New" : "Nuovo", "\"{name}\" is an invalid file name." : "\"{name}\" non è un nome file valido.", "File name cannot be empty." : "Il nome del file non può essere vuoto.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione di {owner} è pieno, i file non possono essere più aggiornati o sincronizzati!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n byte"], "Favorited" : "Preferiti", "Favorite" : "Preferito", + "{newname} already exists" : "{newname} esiste già", + "Upload" : "Carica", + "Text file" : "File di testo", + "New text file.txt" : "Nuovo file di testo.txt", + "Folder" : "Cartella", + "New folder" : "Nuova cartella", "An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette", "A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>", "A file or folder has been <strong>changed</strong>" : "Un file o una cartella è stato <strong>modificato</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Impostazioni", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", - "New" : "Nuovo", - "New text file" : "Nuovo file di testo", - "Text file" : "File di testo", - "New folder" : "Nuova cartella", - "Folder" : "Cartella", - "Upload" : "Carica", "Cancel upload" : "Annulla caricamento", "No files in here" : "Qui non c'è alcun file", "Upload some content or sync with your devices!" : "Carica alcuni contenuti o sincronizza con i tuoi dispositivi!", diff --git a/apps/files/l10n/it.json b/apps/files/l10n/it.json index b61fb39ae5f..8f18858b2eb 100644 --- a/apps/files/l10n/it.json +++ b/apps/files/l10n/it.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Caricamento annullato.", "Could not get result from server." : "Impossibile ottenere il risultato dal server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Caricamento del file in corso. La chiusura della pagina annullerà il caricamento.", - "{new_name} already exists" : "{new_name} esiste già", - "Could not create file" : "Impossibile creare il file", - "Could not create folder" : "Impossibile creare la cartella", "Actions" : "Azioni", "Download" : "Scarica", "Select" : "Seleziona", @@ -47,7 +44,10 @@ "Error moving file." : "Errore durante lo spostamento del file.", "Error moving file" : "Errore durante lo spostamento del file", "Error" : "Errore", + "{new_name} already exists" : "{new_name} esiste già", "Could not rename file" : "Impossibile rinominare il file", + "Could not create file" : "Impossibile creare il file", + "Could not create folder" : "Impossibile creare la cartella", "Error deleting file." : "Errore durante l'eliminazione del file.", "No entries in this folder match '{filter}'" : "Nessuna voce in questa cartella corrisponde a '{filter}'", "Name" : "Nome", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Qui non hai i permessi di caricare o creare file", "_Uploading %n file_::_Uploading %n files_" : ["Caricamento di %n file in corso","Caricamento di %n file in corso"], + "New" : "Nuovo", "\"{name}\" is an invalid file name." : "\"{name}\" non è un nome file valido.", "File name cannot be empty." : "Il nome del file non può essere vuoto.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lo spazio di archiviazione di {owner} è pieno, i file non possono essere più aggiornati o sincronizzati!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n byte"], "Favorited" : "Preferiti", "Favorite" : "Preferito", + "{newname} already exists" : "{newname} esiste già", + "Upload" : "Carica", + "Text file" : "File di testo", + "New text file.txt" : "Nuovo file di testo.txt", + "Folder" : "Cartella", + "New folder" : "Nuova cartella", "An error occurred while trying to update the tags" : "Si è verificato un errore durante il tentativo di aggiornare le etichette", "A new file or folder has been <strong>created</strong>" : "Un nuovo file o cartella è stato <strong>creato</strong>", "A file or folder has been <strong>changed</strong>" : "Un file o una cartella è stato <strong>modificato</strong>", @@ -96,12 +103,6 @@ "Settings" : "Impostazioni", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizza questo indirizzo per <a href=\"%s\" target=\"_blank\">accedere ai tuoi file con WebDAV</a>", - "New" : "Nuovo", - "New text file" : "Nuovo file di testo", - "Text file" : "File di testo", - "New folder" : "Nuova cartella", - "Folder" : "Cartella", - "Upload" : "Carica", "Cancel upload" : "Annulla caricamento", "No files in here" : "Qui non c'è alcun file", "Upload some content or sync with your devices!" : "Carica alcuni contenuti o sincronizza con i tuoi dispositivi!", diff --git a/apps/files/l10n/ja.js b/apps/files/l10n/ja.js index 23326e2ab2e..91e75e6e76a 100644 --- a/apps/files/l10n/ja.js +++ b/apps/files/l10n/ja.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "アップロードはキャンセルされました。", "Could not get result from server." : "サーバーから結果を取得できませんでした。", "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", - "{new_name} already exists" : "{new_name} はすでに存在します", - "Could not create file" : "ファイルを作成できませんでした", - "Could not create folder" : "フォルダーを作成できませんでした", "Actions" : "アクション", "Download" : "ダウンロード", "Select" : "選択", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "ファイル移動でエラー", "Error moving file" : "ファイルの移動エラー", "Error" : "エラー", + "{new_name} already exists" : "{new_name} はすでに存在します", "Could not rename file" : "ファイルの名前変更ができませんでした", + "Could not create file" : "ファイルを作成できませんでした", + "Could not create folder" : "フォルダーを作成できませんでした", "Error deleting file." : "ファイルの削除エラー。", "No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません", "Name" : "名前", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} と {files}", "You don’t have permission to upload or create files here" : "ここにファイルをアップロードもしくは作成する権限がありません", "_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"], + "New" : "新規作成", "\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。", "File name cannot be empty." : "ファイル名を空にすることはできません。", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n バイト"], "Favorited" : "お気に入り済", "Favorite" : "お気に入り", + "Upload" : "アップロード", + "Text file" : "テキストファイル", + "Folder" : "フォルダー", + "New folder" : "新しいフォルダー", "An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました", "A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき", "A file or folder has been <strong>changed</strong>" : "ファイルまたはフォルダーを<strong>変更</strong>したとき", @@ -98,12 +103,6 @@ OC.L10N.register( "Settings" : "設定", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV経由でのファイルアクセス</a>にはこのアドレスを利用してください", - "New" : "新規作成", - "New text file" : "新規のテキストファイル作成", - "Text file" : "テキストファイル", - "New folder" : "新しいフォルダー", - "Folder" : "フォルダー", - "Upload" : "アップロード", "Cancel upload" : "アップロードをキャンセル", "No files in here" : "ファイルがありません", "Upload some content or sync with your devices!" : "何かコンテンツをアップロードするか、デバイスからファイルを同期してください。", diff --git a/apps/files/l10n/ja.json b/apps/files/l10n/ja.json index df2a7bd8058..7c0c94c0348 100644 --- a/apps/files/l10n/ja.json +++ b/apps/files/l10n/ja.json @@ -34,9 +34,6 @@ "Upload cancelled." : "アップロードはキャンセルされました。", "Could not get result from server." : "サーバーから結果を取得できませんでした。", "File upload is in progress. Leaving the page now will cancel the upload." : "ファイル転送を実行中です。今このページから移動するとアップロードが中止されます。", - "{new_name} already exists" : "{new_name} はすでに存在します", - "Could not create file" : "ファイルを作成できませんでした", - "Could not create folder" : "フォルダーを作成できませんでした", "Actions" : "アクション", "Download" : "ダウンロード", "Select" : "選択", @@ -47,7 +44,10 @@ "Error moving file." : "ファイル移動でエラー", "Error moving file" : "ファイルの移動エラー", "Error" : "エラー", + "{new_name} already exists" : "{new_name} はすでに存在します", "Could not rename file" : "ファイルの名前変更ができませんでした", + "Could not create file" : "ファイルを作成できませんでした", + "Could not create folder" : "フォルダーを作成できませんでした", "Error deleting file." : "ファイルの削除エラー。", "No entries in this folder match '{filter}'" : "このフォルダー内で '{filter}' にマッチするものはありません", "Name" : "名前", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} と {files}", "You don’t have permission to upload or create files here" : "ここにファイルをアップロードもしくは作成する権限がありません", "_Uploading %n file_::_Uploading %n files_" : ["%n 個のファイルをアップロード中"], + "New" : "新規作成", "\"{name}\" is an invalid file name." : "\"{name}\" は無効なファイル名です。", "File name cannot be empty." : "ファイル名を空にすることはできません。", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} のストレージは一杯です。ファイルの更新と同期はもうできません!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n バイト"], "Favorited" : "お気に入り済", "Favorite" : "お気に入り", + "Upload" : "アップロード", + "Text file" : "テキストファイル", + "Folder" : "フォルダー", + "New folder" : "新しいフォルダー", "An error occurred while trying to update the tags" : "タグを更新する際にエラーが発生しました", "A new file or folder has been <strong>created</strong>" : "新しいファイルまたはフォルダーを<strong>作成</strong>したとき", "A file or folder has been <strong>changed</strong>" : "ファイルまたはフォルダーを<strong>変更</strong>したとき", @@ -96,12 +101,6 @@ "Settings" : "設定", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">WebDAV経由でのファイルアクセス</a>にはこのアドレスを利用してください", - "New" : "新規作成", - "New text file" : "新規のテキストファイル作成", - "Text file" : "テキストファイル", - "New folder" : "新しいフォルダー", - "Folder" : "フォルダー", - "Upload" : "アップロード", "Cancel upload" : "アップロードをキャンセル", "No files in here" : "ファイルがありません", "Upload some content or sync with your devices!" : "何かコンテンツをアップロードするか、デバイスからファイルを同期してください。", diff --git a/apps/files/l10n/ka_GE.js b/apps/files/l10n/ka_GE.js index 68e142e74d5..33135feb7cc 100644 --- a/apps/files/l10n/ka_GE.js +++ b/apps/files/l10n/ka_GE.js @@ -20,29 +20,29 @@ OC.L10N.register( "Close" : "დახურვა", "Upload cancelled." : "ატვირთვა შეჩერებულ იქნა.", "File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას", - "{new_name} already exists" : "{new_name} უკვე არსებობს", "Actions" : "მოქმედებები", "Download" : "ჩამოტვირთვა", "Pending" : "მოცდის რეჟიმში", "Error" : "შეცდომა", + "{new_name} already exists" : "{new_name} უკვე არსებობს", "Name" : "სახელი", "Size" : "ზომა", "Modified" : "შეცვლილია", + "New" : "ახალი", "File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", "Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!", "Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)", "Favorite" : "ფავორიტი", + "Upload" : "ატვირთვა", + "Text file" : "ტექსტური ფაილი", + "Folder" : "საქაღალდე", + "New folder" : "ახალი ფოლდერი", "File handling" : "ფაილის დამუშავება", "Maximum upload size" : "მაქსიმუმ ატვირთის ზომა", "max. possible: " : "მაქს. შესაძლებელი:", "Save" : "შენახვა", "Settings" : "პარამეტრები", "WebDAV" : "WebDAV", - "New" : "ახალი", - "Text file" : "ტექსტური ფაილი", - "New folder" : "ახალი ფოლდერი", - "Folder" : "საქაღალდე", - "Upload" : "ატვირთვა", "Cancel upload" : "ატვირთვის გაუქმება", "Delete" : "წაშლა", "Upload too large" : "ასატვირთი ფაილი ძალიან დიდია", diff --git a/apps/files/l10n/ka_GE.json b/apps/files/l10n/ka_GE.json index 4cbe5e15fdd..ef3f109d306 100644 --- a/apps/files/l10n/ka_GE.json +++ b/apps/files/l10n/ka_GE.json @@ -18,29 +18,29 @@ "Close" : "დახურვა", "Upload cancelled." : "ატვირთვა შეჩერებულ იქნა.", "File upload is in progress. Leaving the page now will cancel the upload." : "მიმდინარეობს ფაილის ატვირთვა. სხვა გვერდზე გადასვლა გამოიწვევს ატვირთვის შეჩერებას", - "{new_name} already exists" : "{new_name} უკვე არსებობს", "Actions" : "მოქმედებები", "Download" : "ჩამოტვირთვა", "Pending" : "მოცდის რეჟიმში", "Error" : "შეცდომა", + "{new_name} already exists" : "{new_name} უკვე არსებობს", "Name" : "სახელი", "Size" : "ზომა", "Modified" : "შეცვლილია", + "New" : "ახალი", "File name cannot be empty." : "ფაილის სახელი არ შეიძლება იყოს ცარიელი.", "Your storage is full, files can not be updated or synced anymore!" : "თქვენი საცავი გადაივსო. ფაილების განახლება და სინქრონიზირება ვერ მოხერხდება!", "Your storage is almost full ({usedSpacePercent}%)" : "თქვენი საცავი თითქმის გადაივსო ({usedSpacePercent}%)", "Favorite" : "ფავორიტი", + "Upload" : "ატვირთვა", + "Text file" : "ტექსტური ფაილი", + "Folder" : "საქაღალდე", + "New folder" : "ახალი ფოლდერი", "File handling" : "ფაილის დამუშავება", "Maximum upload size" : "მაქსიმუმ ატვირთის ზომა", "max. possible: " : "მაქს. შესაძლებელი:", "Save" : "შენახვა", "Settings" : "პარამეტრები", "WebDAV" : "WebDAV", - "New" : "ახალი", - "Text file" : "ტექსტური ფაილი", - "New folder" : "ახალი ფოლდერი", - "Folder" : "საქაღალდე", - "Upload" : "ატვირთვა", "Cancel upload" : "ატვირთვის გაუქმება", "Delete" : "წაშლა", "Upload too large" : "ასატვირთი ფაილი ძალიან დიდია", diff --git a/apps/files/l10n/km.js b/apps/files/l10n/km.js index d21f200dc09..6b8517e7229 100644 --- a/apps/files/l10n/km.js +++ b/apps/files/l10n/km.js @@ -9,14 +9,19 @@ OC.L10N.register( "Files" : "ឯកសារ", "Close" : "បិទ", "Upload cancelled." : "បានបោះបង់ការផ្ទុកឡើង។", - "{new_name} already exists" : "មានឈ្មោះ {new_name} រួចហើយ", "Download" : "ទាញយក", "Pending" : "កំពុងរង់ចាំ", "Error" : "កំហុស", + "{new_name} already exists" : "មានឈ្មោះ {new_name} រួចហើយ", "Name" : "ឈ្មោះ", "Size" : "ទំហំ", "Modified" : "បានកែប្រែ", + "New" : "ថ្មី", "File name cannot be empty." : "ឈ្មោះឯកសារមិនអាចនៅទទេបានឡើយ។", + "Upload" : "ផ្ទុកឡើង", + "Text file" : "ឯកសារអក្សរ", + "Folder" : "ថត", + "New folder" : "ថតថ្មី", "You created %1$s" : "អ្នកបានបង្កើត %1$s", "%2$s created %1$s" : "%2$s បានបង្កើត %1$s", "You changed %1$s" : "អ្នកបានផ្លាស់ប្ដូរ %1$s", @@ -27,11 +32,6 @@ OC.L10N.register( "Save" : "រក្សាទុក", "Settings" : "ការកំណត់", "WebDAV" : "WebDAV", - "New" : "ថ្មី", - "Text file" : "ឯកសារអក្សរ", - "New folder" : "ថតថ្មី", - "Folder" : "ថត", - "Upload" : "ផ្ទុកឡើង", "Cancel upload" : "បោះបង់ការផ្ទុកឡើង", "Delete" : "លុប", "Upload too large" : "ផ្ទុកឡើងធំពេក" diff --git a/apps/files/l10n/km.json b/apps/files/l10n/km.json index bd147f593d0..ebbb9a8b4ab 100644 --- a/apps/files/l10n/km.json +++ b/apps/files/l10n/km.json @@ -7,14 +7,19 @@ "Files" : "ឯកសារ", "Close" : "បិទ", "Upload cancelled." : "បានបោះបង់ការផ្ទុកឡើង។", - "{new_name} already exists" : "មានឈ្មោះ {new_name} រួចហើយ", "Download" : "ទាញយក", "Pending" : "កំពុងរង់ចាំ", "Error" : "កំហុស", + "{new_name} already exists" : "មានឈ្មោះ {new_name} រួចហើយ", "Name" : "ឈ្មោះ", "Size" : "ទំហំ", "Modified" : "បានកែប្រែ", + "New" : "ថ្មី", "File name cannot be empty." : "ឈ្មោះឯកសារមិនអាចនៅទទេបានឡើយ។", + "Upload" : "ផ្ទុកឡើង", + "Text file" : "ឯកសារអក្សរ", + "Folder" : "ថត", + "New folder" : "ថតថ្មី", "You created %1$s" : "អ្នកបានបង្កើត %1$s", "%2$s created %1$s" : "%2$s បានបង្កើត %1$s", "You changed %1$s" : "អ្នកបានផ្លាស់ប្ដូរ %1$s", @@ -25,11 +30,6 @@ "Save" : "រក្សាទុក", "Settings" : "ការកំណត់", "WebDAV" : "WebDAV", - "New" : "ថ្មី", - "Text file" : "ឯកសារអក្សរ", - "New folder" : "ថតថ្មី", - "Folder" : "ថត", - "Upload" : "ផ្ទុកឡើង", "Cancel upload" : "បោះបង់ការផ្ទុកឡើង", "Delete" : "លុប", "Upload too large" : "ផ្ទុកឡើងធំពេក" diff --git a/apps/files/l10n/kn.js b/apps/files/l10n/kn.js index 59e444e46c6..9bd8982fdaf 100644 --- a/apps/files/l10n/kn.js +++ b/apps/files/l10n/kn.js @@ -28,9 +28,6 @@ OC.L10N.register( "Close" : "ಮುಚ್ಚು", "Upload cancelled." : "ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಯಿತು.", "Could not get result from server." : "ಪರಿಚಾರಕ ಕಣಕದಿಂದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.", - "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", - "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ", - "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ", "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ", "Select" : "ಆಯ್ಕೆ ಮಾಡಿ", "Pending" : "ಬಾಕಿ ಇದೆ", @@ -38,7 +35,10 @@ OC.L10N.register( "Error moving file." : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ.", "Error moving file" : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ", "Error" : "ತಪ್ಪಾಗಿದೆ", + "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", "Could not rename file" : "ಕಡತ ಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ", + "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ", + "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ", "Error deleting file." : "ಕಡತವನ್ನು ಅಳಿಸುವಲ್ಲಿ ಲೋಪವಾದೆ", "Name" : "ಹೆಸರು", "Size" : " ಪ್ರಮಾಣ", @@ -47,9 +47,14 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n ಕಡತ"], "You don’t have permission to upload or create files here" : "ನಿಮಗೆ ಇಲ್ಲಿ ಅಪ್ಲೋಡ್ ಅಥವಾ ಕಡತಗಳನ್ನು ರಚಿಸವ ಅನುಮತಿ ಇಲ್ಲ", "_Uploading %n file_::_Uploading %n files_" : ["%n 'ನೆ ಕಡತವನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ"], + "New" : "ಹೊಸ", "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು", "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", + "Upload" : "ವರ್ಗಾಯಿಸಿ", + "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ", + "Folder" : "ಕಡತಕೋಶ", + "New folder" : "ಹೊಸ ಕಡತಕೋಶ", "Upload (max. %s)" : "ವರ್ಗಾವಣೆ (ಗರಿಷ್ಠ %s)", "File handling" : "ಕಡತ ನಿರ್ವಹಣೆ", "Maximum upload size" : "ಗರಿಷ್ಠ ವರ್ಗಾವಣೆ ಗಾತ್ರ", @@ -57,12 +62,6 @@ OC.L10N.register( "Save" : "ಉಳಿಸಿ", "Settings" : "ಆಯ್ಕೆ", "WebDAV" : "WebDAV", - "New" : "ಹೊಸ", - "New text file" : "ಹೊಸ ಸರಳಾಕ್ಷರದ ಕಡತ ", - "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ", - "New folder" : "ಹೊಸ ಕಡತಕೋಶ", - "Folder" : "ಕಡತಕೋಶ", - "Upload" : "ವರ್ಗಾಯಿಸಿ", "Cancel upload" : "ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ", "Select all" : "ಎಲ್ಲಾ ಆಯ್ಕೆ ಮಾಡಿ", "Delete" : "ಅಳಿಸಿ", diff --git a/apps/files/l10n/kn.json b/apps/files/l10n/kn.json index d432dbdae33..803b1c87cf4 100644 --- a/apps/files/l10n/kn.json +++ b/apps/files/l10n/kn.json @@ -26,9 +26,6 @@ "Close" : "ಮುಚ್ಚು", "Upload cancelled." : "ವರ್ಗಾವಣೆಯನ್ನು ರದ್ದು ಮಾಡಲಾಯಿತು.", "Could not get result from server." : "ಪರಿಚಾರಕ ಕಣಕದಿಂದ ಫಲಿತಾಂಶವನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಾಗಿಲ್ಲ.", - "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", - "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ", - "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ", "Download" : "ಪ್ರತಿಯನ್ನು ಸ್ಥಳೀಯವಾಗಿ ಉಳಿಸಿಕೊಳ್ಳಿ", "Select" : "ಆಯ್ಕೆ ಮಾಡಿ", "Pending" : "ಬಾಕಿ ಇದೆ", @@ -36,7 +33,10 @@ "Error moving file." : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ.", "Error moving file" : "ಕಡತದ ಸ್ಥಾನವನ್ನು ಬದಲಾಯಿಸುವಾಗ ದೋಷವಾಗಿದೆ", "Error" : "ತಪ್ಪಾಗಿದೆ", + "{new_name} already exists" : "ಈಗಾಗಲೇ {new_name} ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", "Could not rename file" : "ಕಡತ ಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ", + "Could not create file" : "ಕಡತ ರಚಿಸಲಾಗಲಿಲ್ಲ", + "Could not create folder" : "ಕೋಶವನ್ನು ರಚಿಸಲಾಗಿಲ್ಲ", "Error deleting file." : "ಕಡತವನ್ನು ಅಳಿಸುವಲ್ಲಿ ಲೋಪವಾದೆ", "Name" : "ಹೆಸರು", "Size" : " ಪ್ರಮಾಣ", @@ -45,9 +45,14 @@ "_%n file_::_%n files_" : ["%n ಕಡತ"], "You don’t have permission to upload or create files here" : "ನಿಮಗೆ ಇಲ್ಲಿ ಅಪ್ಲೋಡ್ ಅಥವಾ ಕಡತಗಳನ್ನು ರಚಿಸವ ಅನುಮತಿ ಇಲ್ಲ", "_Uploading %n file_::_Uploading %n files_" : ["%n 'ನೆ ಕಡತವನ್ನು ವರ್ಗಾಯಿಸಲಾಗುತ್ತಿದೆ"], + "New" : "ಹೊಸ", "File name cannot be empty." : "ಕಡತ ಹೆಸರು ಖಾಲಿ ಇರುವಂತಿಲ್ಲ.", "Favorited" : "ಅಚ್ಚುಮೆಚ್ಚಿನವು", "Favorite" : "ಅಚ್ಚುಮೆಚ್ಚಿನ", + "Upload" : "ವರ್ಗಾಯಿಸಿ", + "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ", + "Folder" : "ಕಡತಕೋಶ", + "New folder" : "ಹೊಸ ಕಡತಕೋಶ", "Upload (max. %s)" : "ವರ್ಗಾವಣೆ (ಗರಿಷ್ಠ %s)", "File handling" : "ಕಡತ ನಿರ್ವಹಣೆ", "Maximum upload size" : "ಗರಿಷ್ಠ ವರ್ಗಾವಣೆ ಗಾತ್ರ", @@ -55,12 +60,6 @@ "Save" : "ಉಳಿಸಿ", "Settings" : "ಆಯ್ಕೆ", "WebDAV" : "WebDAV", - "New" : "ಹೊಸ", - "New text file" : "ಹೊಸ ಸರಳಾಕ್ಷರದ ಕಡತ ", - "Text file" : "ಸರಳಾಕ್ಷರದ ಕಡತ", - "New folder" : "ಹೊಸ ಕಡತಕೋಶ", - "Folder" : "ಕಡತಕೋಶ", - "Upload" : "ವರ್ಗಾಯಿಸಿ", "Cancel upload" : "ವರ್ಗಾವಣೆ ರದ್ದು ಮಾಡಿ", "Select all" : "ಎಲ್ಲಾ ಆಯ್ಕೆ ಮಾಡಿ", "Delete" : "ಅಳಿಸಿ", diff --git a/apps/files/l10n/ko.js b/apps/files/l10n/ko.js index 65ca5780d6f..50126226933 100644 --- a/apps/files/l10n/ko.js +++ b/apps/files/l10n/ko.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "업로드가 취소되었습니다.", "Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.", "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.", - "{new_name} already exists" : "{new_name}이(가) 이미 존재함", - "Could not create file" : "파일을 만들 수 없음", - "Could not create folder" : "폴더를 만들 수 없음", "Actions" : "작업", "Download" : "다운로드", "Select" : "선택", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "파일 이동 오류.", "Error moving file" : "파일 이동 오류", "Error" : "오류", + "{new_name} already exists" : "{new_name}이(가) 이미 존재함", "Could not rename file" : "이름을 변경할 수 없음", + "Could not create file" : "파일을 만들 수 없음", + "Could not create folder" : "폴더를 만들 수 없음", "Error deleting file." : "파일 삭제 오류.", "No entries in this folder match '{filter}'" : "이 폴더에 '{filter}'와(과) 일치하는 항목 없음", "Name" : "이름", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} 그리고 {files}", "You don’t have permission to upload or create files here" : "여기에 파일을 업로드하거나 만들 권한이 없습니다", "_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"], + "New" : "새로 만들기", "\"{name}\" is an invalid file name." : "\"{name}\"은(는) 잘못된 파일 이름입니다.", "File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}의 저장소가 가득 찼습니다. 파일을 더 이상 업데이트하거나 동기화할 수 없습니다!", @@ -69,6 +70,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}'와(과) 일치"], "Favorited" : "책갈피에 추가됨", "Favorite" : "즐겨찾기", + "Upload" : "업로드", + "Text file" : "텍스트 파일", + "Folder" : "폴더", + "New folder" : "새 폴더", "An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생", "A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>", "A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>", @@ -95,12 +100,6 @@ OC.L10N.register( "Settings" : "설정", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>", - "New" : "새로 만들기", - "New text file" : "새 텍스트 파일", - "Text file" : "텍스트 파일", - "New folder" : "새 폴더", - "Folder" : "폴더", - "Upload" : "업로드", "Cancel upload" : "업로드 취소", "No files in here" : "여기에 파일 없음", "Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!", diff --git a/apps/files/l10n/ko.json b/apps/files/l10n/ko.json index 9139e78c0ac..95601323bd1 100644 --- a/apps/files/l10n/ko.json +++ b/apps/files/l10n/ko.json @@ -34,9 +34,6 @@ "Upload cancelled." : "업로드가 취소되었습니다.", "Could not get result from server." : "서버에서 결과를 가져올 수 없습니다.", "File upload is in progress. Leaving the page now will cancel the upload." : "파일 업로드가 진행 중입니다. 이 페이지를 벗어나면 업로드가 취소됩니다.", - "{new_name} already exists" : "{new_name}이(가) 이미 존재함", - "Could not create file" : "파일을 만들 수 없음", - "Could not create folder" : "폴더를 만들 수 없음", "Actions" : "작업", "Download" : "다운로드", "Select" : "선택", @@ -47,7 +44,10 @@ "Error moving file." : "파일 이동 오류.", "Error moving file" : "파일 이동 오류", "Error" : "오류", + "{new_name} already exists" : "{new_name}이(가) 이미 존재함", "Could not rename file" : "이름을 변경할 수 없음", + "Could not create file" : "파일을 만들 수 없음", + "Could not create folder" : "폴더를 만들 수 없음", "Error deleting file." : "파일 삭제 오류.", "No entries in this folder match '{filter}'" : "이 폴더에 '{filter}'와(과) 일치하는 항목 없음", "Name" : "이름", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} 그리고 {files}", "You don’t have permission to upload or create files here" : "여기에 파일을 업로드하거나 만들 권한이 없습니다", "_Uploading %n file_::_Uploading %n files_" : ["파일 %n개 업로드 중"], + "New" : "새로 만들기", "\"{name}\" is an invalid file name." : "\"{name}\"은(는) 잘못된 파일 이름입니다.", "File name cannot be empty." : "파일 이름이 비어 있을 수 없습니다.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner}의 저장소가 가득 찼습니다. 파일을 더 이상 업데이트하거나 동기화할 수 없습니다!", @@ -67,6 +68,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}'와(과) 일치"], "Favorited" : "책갈피에 추가됨", "Favorite" : "즐겨찾기", + "Upload" : "업로드", + "Text file" : "텍스트 파일", + "Folder" : "폴더", + "New folder" : "새 폴더", "An error occurred while trying to update the tags" : "태그를 업데이트하는 중 오류 발생", "A new file or folder has been <strong>created</strong>" : "새 파일이나 폴더가 <strong>생성됨</strong>", "A file or folder has been <strong>changed</strong>" : "파일이나 폴더가 <strong>변경됨</strong>", @@ -93,12 +98,6 @@ "Settings" : "설정", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "WebDAV로 파일에 접근하려면 <a href=\"%s\" target=\"_blank\">이 주소를 사용하십시오</a>", - "New" : "새로 만들기", - "New text file" : "새 텍스트 파일", - "Text file" : "텍스트 파일", - "New folder" : "새 폴더", - "Folder" : "폴더", - "Upload" : "업로드", "Cancel upload" : "업로드 취소", "No files in here" : "여기에 파일 없음", "Upload some content or sync with your devices!" : "파일을 업로드하거나 장치와 동기화하십시오!", diff --git a/apps/files/l10n/ku_IQ.js b/apps/files/l10n/ku_IQ.js index 4e676ceaa81..32af16b3673 100644 --- a/apps/files/l10n/ku_IQ.js +++ b/apps/files/l10n/ku_IQ.js @@ -8,9 +8,9 @@ OC.L10N.register( "Select" : "دیاریکردنی", "Error" : "ههڵه", "Name" : "ناو", - "Save" : "پاشکهوتکردن", - "Settings" : "ڕێکخستنهکان", + "Upload" : "بارکردن", "Folder" : "بوخچه", - "Upload" : "بارکردن" + "Save" : "پاشکهوتکردن", + "Settings" : "ڕێکخستنهکان" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/ku_IQ.json b/apps/files/l10n/ku_IQ.json index 3a42444a605..4f1068bbb04 100644 --- a/apps/files/l10n/ku_IQ.json +++ b/apps/files/l10n/ku_IQ.json @@ -6,9 +6,9 @@ "Select" : "دیاریکردنی", "Error" : "ههڵه", "Name" : "ناو", - "Save" : "پاشکهوتکردن", - "Settings" : "ڕێکخستنهکان", + "Upload" : "بارکردن", "Folder" : "بوخچه", - "Upload" : "بارکردن" + "Save" : "پاشکهوتکردن", + "Settings" : "ڕێکخستنهکان" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/lb.js b/apps/files/l10n/lb.js index f6f28c15a77..513d802c1e4 100644 --- a/apps/files/l10n/lb.js +++ b/apps/files/l10n/lb.js @@ -20,16 +20,16 @@ OC.L10N.register( "Name" : "Numm", "Size" : "Gréisst", "Modified" : "Geännert", + "New" : "Nei", + "Upload" : "Eroplueden", + "Text file" : "Text Fichier", + "Folder" : "Dossier", + "New folder" : "Neien Dossier", "File handling" : "Fichier handling", "Maximum upload size" : "Maximum Upload Gréisst ", "max. possible: " : "max. méiglech:", "Save" : "Späicheren", "Settings" : "Astellungen", - "New" : "Nei", - "Text file" : "Text Fichier", - "New folder" : "Neien Dossier", - "Folder" : "Dossier", - "Upload" : "Eroplueden", "Cancel upload" : "Upload ofbriechen", "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt", "Select all" : "All auswielen", diff --git a/apps/files/l10n/lb.json b/apps/files/l10n/lb.json index 07363a6ab6c..fb586a90991 100644 --- a/apps/files/l10n/lb.json +++ b/apps/files/l10n/lb.json @@ -18,16 +18,16 @@ "Name" : "Numm", "Size" : "Gréisst", "Modified" : "Geännert", + "New" : "Nei", + "Upload" : "Eroplueden", + "Text file" : "Text Fichier", + "Folder" : "Dossier", + "New folder" : "Neien Dossier", "File handling" : "Fichier handling", "Maximum upload size" : "Maximum Upload Gréisst ", "max. possible: " : "max. méiglech:", "Save" : "Späicheren", "Settings" : "Astellungen", - "New" : "Nei", - "Text file" : "Text Fichier", - "New folder" : "Neien Dossier", - "Folder" : "Dossier", - "Upload" : "Eroplueden", "Cancel upload" : "Upload ofbriechen", "No entries found in this folder" : "Keng Elementer an dësem Dossier fonnt", "Select all" : "All auswielen", diff --git a/apps/files/l10n/lt_LT.js b/apps/files/l10n/lt_LT.js index 272a92f99c4..26fb351f50d 100644 --- a/apps/files/l10n/lt_LT.js +++ b/apps/files/l10n/lt_LT.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Įkėlimas atšauktas.", "Could not get result from server." : "Nepavyko gauti rezultato iš serverio.", "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.", - "{new_name} already exists" : "{new_name} jau egzistuoja", - "Could not create file" : "Neįmanoma sukurti failo", - "Could not create folder" : "Neįmanoma sukurti aplanko", "Actions" : "Veiksmai", "Download" : "Atsisiųsti", "Select" : "Pasirinkiti", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Klaida perkeliant failą.", "Error moving file" : "Klaida perkeliant failą", "Error" : "Klaida", + "{new_name} already exists" : "{new_name} jau egzistuoja", "Could not rename file" : "Neįmanoma pervadinti failo", + "Could not create file" : "Neįmanoma sukurti failo", + "Could not create folder" : "Neįmanoma sukurti aplanko", "Error deleting file." : "Klaida trinant failą.", "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Name" : "Pavadinimas", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ir {files}", "You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus", "_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"], + "New" : "Naujas", "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.", "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", @@ -69,6 +70,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"], "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", + "Upload" : "Įkelti", + "Text file" : "Teksto failas", + "Folder" : "Katalogas", + "New folder" : "Naujas aplankas", "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida", "A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>", "A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>", @@ -95,12 +100,6 @@ OC.L10N.register( "Settings" : "Nustatymai", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>", - "New" : "Naujas", - "New text file" : "Naujas tekstinis failas", - "Text file" : "Teksto failas", - "New folder" : "Naujas aplankas", - "Folder" : "Katalogas", - "Upload" : "Įkelti", "Cancel upload" : "Atšaukti siuntimą", "No files in here" : "Čia nėra failų", "Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!", diff --git a/apps/files/l10n/lt_LT.json b/apps/files/l10n/lt_LT.json index 65103d0cc03..ee8fb0480c2 100644 --- a/apps/files/l10n/lt_LT.json +++ b/apps/files/l10n/lt_LT.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Įkėlimas atšauktas.", "Could not get result from server." : "Nepavyko gauti rezultato iš serverio.", "File upload is in progress. Leaving the page now will cancel the upload." : "Failo įkėlimas pradėtas. Jei paliksite šį puslapį, įkėlimas nutrūks.", - "{new_name} already exists" : "{new_name} jau egzistuoja", - "Could not create file" : "Neįmanoma sukurti failo", - "Could not create folder" : "Neįmanoma sukurti aplanko", "Actions" : "Veiksmai", "Download" : "Atsisiųsti", "Select" : "Pasirinkiti", @@ -47,7 +44,10 @@ "Error moving file." : "Klaida perkeliant failą.", "Error moving file" : "Klaida perkeliant failą", "Error" : "Klaida", + "{new_name} already exists" : "{new_name} jau egzistuoja", "Could not rename file" : "Neįmanoma pervadinti failo", + "Could not create file" : "Neįmanoma sukurti failo", + "Could not create folder" : "Neįmanoma sukurti aplanko", "Error deleting file." : "Klaida trinant failą.", "No entries in this folder match '{filter}'" : "Nėra įrašų šiame aplanko atitikmeniui „{filter}“", "Name" : "Pavadinimas", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} ir {files}", "You don’t have permission to upload or create files here" : "Jūs neturite leidimo čia įkelti arba kurti failus", "_Uploading %n file_::_Uploading %n files_" : ["Įkeliamas %n failas","Įkeliami %n failai","Įkeliama %n failų"], + "New" : "Naujas", "\"{name}\" is an invalid file name." : "„{name}“ yra netinkamas failo pavadinime.", "File name cannot be empty." : "Failo pavadinimas negali būti tuščias.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} saugykla yra pilna, failai daugiau nebegali būti atnaujinti arba sinchronizuojami!", @@ -67,6 +68,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["atitikmuo „{filter}“","atitikmenys „{filter}“","atitikmenų „{filter}“"], "Favorited" : "Pažymėta mėgstamu", "Favorite" : "Mėgiamas", + "Upload" : "Įkelti", + "Text file" : "Teksto failas", + "Folder" : "Katalogas", + "New folder" : "Naujas aplankas", "An error occurred while trying to update the tags" : "Bandant atnaujinti žymes įvyko klaida", "A new file or folder has been <strong>created</strong>" : "Naujas failas ar aplankas buvo <strong>sukurtas</strong>", "A file or folder has been <strong>changed</strong>" : "Failas ar aplankas buvo <strong>pakeistas</strong>", @@ -93,12 +98,6 @@ "Settings" : "Nustatymai", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Naudokite šį adresą, kad <a href=\"%s\" target=\"_blank\">pasiektumėte savo failus per WebDAV</a>", - "New" : "Naujas", - "New text file" : "Naujas tekstinis failas", - "Text file" : "Teksto failas", - "New folder" : "Naujas aplankas", - "Folder" : "Katalogas", - "Upload" : "Įkelti", "Cancel upload" : "Atšaukti siuntimą", "No files in here" : "Čia nėra failų", "Upload some content or sync with your devices!" : "Įkelkite kokį nors turinį, arba sinchronizuokite su savo įrenginiais!", diff --git a/apps/files/l10n/lv.js b/apps/files/l10n/lv.js index b5963af978b..e86b2d335e7 100644 --- a/apps/files/l10n/lv.js +++ b/apps/files/l10n/lv.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Augšupielāde ir atcelta.", "Could not get result from server." : "Nevar saņemt rezultātus no servera", "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.", - "{new_name} already exists" : "{new_name} jau eksistē", - "Could not create file" : "Neizdevās izveidot datni", - "Could not create folder" : "Neizdevās izveidot mapi", "Actions" : "Darbības", "Download" : "Lejupielādēt", "Select" : "Norādīt", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Kļūda, pārvietojot datni.", "Error moving file" : "Kļūda, pārvietojot datni", "Error" : "Kļūda", + "{new_name} already exists" : "{new_name} jau eksistē", "Could not rename file" : "Neizdevās pārsaukt datni", + "Could not create file" : "Neizdevās izveidot datni", + "Could not create folder" : "Neizdevās izveidot mapi", "Error deleting file." : "Kļūda, dzēšot datni.", "No entries in this folder match '{filter}'" : "Šajā mapē nekas nav atrasts, meklējot pēc '{filter}'", "Name" : "Nosaukums", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} un {files}", "You don’t have permission to upload or create files here" : "Jums nav tiesību, augšupielādēt vai veidot, šeit datnes", "_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielāde %n failus"], + "New" : "Jauna", "\"{name}\" is an invalid file name." : "\"{name}\" ir nepareizs datnes nosaukums.", "File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.", "Your storage is full, files can not be updated or synced anymore!" : "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!", @@ -65,6 +66,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["atrasts pēc '{filter}'","atrasts pēc '{filter}'","atrasti pēc '{filter}'"], "Favorited" : "Favorīti", "Favorite" : "Iecienītais", + "Upload" : "Augšupielādēt", + "Text file" : "Teksta datne", + "Folder" : "Mape", + "New folder" : "Jauna mape", "An error occurred while trying to update the tags" : "Atjaunojot atzīmes notika kļūda", "A new file or folder has been <strong>created</strong>" : "<strong>Izveidots</strong> jauns fails vai mape", "A file or folder has been <strong>changed</strong>" : "<strong>Izmainīts</strong> fails vai mape", @@ -89,12 +94,6 @@ OC.L10N.register( "Settings" : "Iestatījumi", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Izmantojot šo adresi, <a href=\"%s\" target=\"_blank\">piekļūstiet saviem failiem, izmantojot WebDAV</a>", - "New" : "Jauna", - "New text file" : "Jauna teksta datne", - "Text file" : "Teksta datne", - "New folder" : "Jauna mape", - "Folder" : "Mape", - "Upload" : "Augšupielādēt", "Cancel upload" : "Atcelt augšupielādi", "Upload some content or sync with your devices!" : "Augšupielādē kaut ko vai sinhronizē saturu ar savām ierīcēm!", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", diff --git a/apps/files/l10n/lv.json b/apps/files/l10n/lv.json index 5e9498ee6f7..7a5a53c1305 100644 --- a/apps/files/l10n/lv.json +++ b/apps/files/l10n/lv.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Augšupielāde ir atcelta.", "Could not get result from server." : "Nevar saņemt rezultātus no servera", "File upload is in progress. Leaving the page now will cancel the upload." : "Notiek augšupielāde. Pametot lapu tagad, tiks atcelta augšupielāde.", - "{new_name} already exists" : "{new_name} jau eksistē", - "Could not create file" : "Neizdevās izveidot datni", - "Could not create folder" : "Neizdevās izveidot mapi", "Actions" : "Darbības", "Download" : "Lejupielādēt", "Select" : "Norādīt", @@ -45,7 +42,10 @@ "Error moving file." : "Kļūda, pārvietojot datni.", "Error moving file" : "Kļūda, pārvietojot datni", "Error" : "Kļūda", + "{new_name} already exists" : "{new_name} jau eksistē", "Could not rename file" : "Neizdevās pārsaukt datni", + "Could not create file" : "Neizdevās izveidot datni", + "Could not create folder" : "Neizdevās izveidot mapi", "Error deleting file." : "Kļūda, dzēšot datni.", "No entries in this folder match '{filter}'" : "Šajā mapē nekas nav atrasts, meklējot pēc '{filter}'", "Name" : "Nosaukums", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} un {files}", "You don’t have permission to upload or create files here" : "Jums nav tiesību, augšupielādēt vai veidot, šeit datnes", "_Uploading %n file_::_Uploading %n files_" : ["%n","Augšupielāde %n failu","Augšupielāde %n failus"], + "New" : "Jauna", "\"{name}\" is an invalid file name." : "\"{name}\" ir nepareizs datnes nosaukums.", "File name cannot be empty." : "Datnes nosaukums nevar būt tukšs.", "Your storage is full, files can not be updated or synced anymore!" : "Jūsu krātuve ir pilna, datnes vairs nevar augšupielādēt vai sinhronizēt!", @@ -63,6 +64,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["atrasts pēc '{filter}'","atrasts pēc '{filter}'","atrasti pēc '{filter}'"], "Favorited" : "Favorīti", "Favorite" : "Iecienītais", + "Upload" : "Augšupielādēt", + "Text file" : "Teksta datne", + "Folder" : "Mape", + "New folder" : "Jauna mape", "An error occurred while trying to update the tags" : "Atjaunojot atzīmes notika kļūda", "A new file or folder has been <strong>created</strong>" : "<strong>Izveidots</strong> jauns fails vai mape", "A file or folder has been <strong>changed</strong>" : "<strong>Izmainīts</strong> fails vai mape", @@ -87,12 +92,6 @@ "Settings" : "Iestatījumi", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Izmantojot šo adresi, <a href=\"%s\" target=\"_blank\">piekļūstiet saviem failiem, izmantojot WebDAV</a>", - "New" : "Jauna", - "New text file" : "Jauna teksta datne", - "Text file" : "Teksta datne", - "New folder" : "Jauna mape", - "Folder" : "Mape", - "Upload" : "Augšupielādēt", "Cancel upload" : "Atcelt augšupielādi", "Upload some content or sync with your devices!" : "Augšupielādē kaut ko vai sinhronizē saturu ar savām ierīcēm!", "No entries found in this folder" : "Šajā mapē nekas nav atrasts", diff --git a/apps/files/l10n/mk.js b/apps/files/l10n/mk.js index 6246b5b192b..b9225ac6708 100644 --- a/apps/files/l10n/mk.js +++ b/apps/files/l10n/mk.js @@ -26,23 +26,28 @@ OC.L10N.register( "Upload cancelled." : "Преземањето е прекинато.", "Could not get result from server." : "Не можам да добијам резултат од серверот.", "File upload is in progress. Leaving the page now will cancel the upload." : "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", - "{new_name} already exists" : "{new_name} веќе постои", - "Could not create file" : "Не множам да креирам датотека", - "Could not create folder" : "Не можам да креирам папка", "Actions" : "Акции", "Download" : "Преземи", "Select" : "Избери", "Pending" : "Чека", "Error moving file" : "Грешка при префрлање на датотека", "Error" : "Грешка", + "{new_name} already exists" : "{new_name} веќе постои", "Could not rename file" : "Не можам да ја преименувам датотеката", + "Could not create file" : "Не множам да креирам датотека", + "Could not create folder" : "Не можам да креирам папка", "Name" : "Име", "Size" : "Големина", "Modified" : "Променето", "{dirs} and {files}" : "{dirs} и {files}", + "New" : "Ново", "File name cannot be empty." : "Името на датотеката не може да биде празно.", "Your storage is full, files can not be updated or synced anymore!" : "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!", "Your storage is almost full ({usedSpacePercent}%)" : "Вашиот сториџ е скоро полн ({usedSpacePercent}%)", + "Upload" : "Подигни", + "Text file" : "Текстуална датотека", + "Folder" : "Папка", + "New folder" : "Нова папка", "You created %1$s" : "Вие креиравте %1$s", "%2$s created %1$s" : "%2$s креирано %1$s", "You changed %1$s" : "Вие изменивте %1$s", @@ -57,11 +62,6 @@ OC.L10N.register( "Save" : "Сними", "Settings" : "Подесувања", "WebDAV" : "WebDAV", - "New" : "Ново", - "Text file" : "Текстуална датотека", - "New folder" : "Нова папка", - "Folder" : "Папка", - "Upload" : "Подигни", "Cancel upload" : "Откажи прикачување", "Delete" : "Избриши", "Upload too large" : "Фајлот кој се вчитува е преголем", diff --git a/apps/files/l10n/mk.json b/apps/files/l10n/mk.json index 9ad1ea0706c..e6ce76ecb45 100644 --- a/apps/files/l10n/mk.json +++ b/apps/files/l10n/mk.json @@ -24,23 +24,28 @@ "Upload cancelled." : "Преземањето е прекинато.", "Could not get result from server." : "Не можам да добијам резултат од серверот.", "File upload is in progress. Leaving the page now will cancel the upload." : "Подигање на датотека е во тек. Напуштење на страницата ќе го прекине.", - "{new_name} already exists" : "{new_name} веќе постои", - "Could not create file" : "Не множам да креирам датотека", - "Could not create folder" : "Не можам да креирам папка", "Actions" : "Акции", "Download" : "Преземи", "Select" : "Избери", "Pending" : "Чека", "Error moving file" : "Грешка при префрлање на датотека", "Error" : "Грешка", + "{new_name} already exists" : "{new_name} веќе постои", "Could not rename file" : "Не можам да ја преименувам датотеката", + "Could not create file" : "Не множам да креирам датотека", + "Could not create folder" : "Не можам да креирам папка", "Name" : "Име", "Size" : "Големина", "Modified" : "Променето", "{dirs} and {files}" : "{dirs} и {files}", + "New" : "Ново", "File name cannot be empty." : "Името на датотеката не може да биде празно.", "Your storage is full, files can not be updated or synced anymore!" : "Вашиот сториџ е полн, датотеките веќе не можат да се освежуваат или синхронизираат!", "Your storage is almost full ({usedSpacePercent}%)" : "Вашиот сториџ е скоро полн ({usedSpacePercent}%)", + "Upload" : "Подигни", + "Text file" : "Текстуална датотека", + "Folder" : "Папка", + "New folder" : "Нова папка", "You created %1$s" : "Вие креиравте %1$s", "%2$s created %1$s" : "%2$s креирано %1$s", "You changed %1$s" : "Вие изменивте %1$s", @@ -55,11 +60,6 @@ "Save" : "Сними", "Settings" : "Подесувања", "WebDAV" : "WebDAV", - "New" : "Ново", - "Text file" : "Текстуална датотека", - "New folder" : "Нова папка", - "Folder" : "Папка", - "Upload" : "Подигни", "Cancel upload" : "Откажи прикачување", "Delete" : "Избриши", "Upload too large" : "Фајлот кој се вчитува е преголем", diff --git a/apps/files/l10n/mn.js b/apps/files/l10n/mn.js index d55fa0c2b29..994f002b48c 100644 --- a/apps/files/l10n/mn.js +++ b/apps/files/l10n/mn.js @@ -2,6 +2,7 @@ OC.L10N.register( "files", { "Files" : "Файлууд", + "Upload" : "Байршуулах", "A new file or folder has been <strong>created</strong>" : "Файл эсвэл хавтас амжилттай <strong>үүсгэгдлээ</strong>", "A file or folder has been <strong>changed</strong>" : "Файл эсвэл хавтас амжилттай <strong>солигдлоо</strong>", "A file or folder has been <strong>deleted</strong>" : "Файл эсвэл хавтас амжилттай <strong>устгагдлаа</strong>", @@ -16,7 +17,6 @@ OC.L10N.register( "You restored %1$s" : "Та %1$s-ийг сэргээлээ", "%2$s restored %1$s" : "%2$s %1$s-ийг сэргээлээ", "Save" : "Хадгалах", - "Settings" : "Тохиргоо", - "Upload" : "Байршуулах" + "Settings" : "Тохиргоо" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/mn.json b/apps/files/l10n/mn.json index d2ff8f5fa4a..f1b58c7e13f 100644 --- a/apps/files/l10n/mn.json +++ b/apps/files/l10n/mn.json @@ -1,5 +1,6 @@ { "translations": { "Files" : "Файлууд", + "Upload" : "Байршуулах", "A new file or folder has been <strong>created</strong>" : "Файл эсвэл хавтас амжилттай <strong>үүсгэгдлээ</strong>", "A file or folder has been <strong>changed</strong>" : "Файл эсвэл хавтас амжилттай <strong>солигдлоо</strong>", "A file or folder has been <strong>deleted</strong>" : "Файл эсвэл хавтас амжилттай <strong>устгагдлаа</strong>", @@ -14,7 +15,6 @@ "You restored %1$s" : "Та %1$s-ийг сэргээлээ", "%2$s restored %1$s" : "%2$s %1$s-ийг сэргээлээ", "Save" : "Хадгалах", - "Settings" : "Тохиргоо", - "Upload" : "Байршуулах" + "Settings" : "Тохиргоо" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ms_MY.js b/apps/files/l10n/ms_MY.js index bffc265c0fe..0bbbe400b28 100644 --- a/apps/files/l10n/ms_MY.js +++ b/apps/files/l10n/ms_MY.js @@ -18,6 +18,10 @@ OC.L10N.register( "Name" : "Nama", "Size" : "Saiz", "Modified" : "Dimodifikasi", + "New" : "Baru", + "Upload" : "Muat naik", + "Text file" : "Fail teks", + "Folder" : "Folder", "You created %1$s" : "Anda telah membina %1$s", "%2$s created %1$s" : "%2$s membina %1$s", "You changed %1$s" : "Anda menukar %1$s", @@ -26,10 +30,6 @@ OC.L10N.register( "max. possible: " : "maksimum:", "Save" : "Simpan", "Settings" : "Tetapan", - "New" : "Baru", - "Text file" : "Fail teks", - "Folder" : "Folder", - "Upload" : "Muat naik", "Cancel upload" : "Batal muat naik", "Delete" : "Padam", "Upload too large" : "Muatnaik terlalu besar", diff --git a/apps/files/l10n/ms_MY.json b/apps/files/l10n/ms_MY.json index 30b8777b035..071fab23194 100644 --- a/apps/files/l10n/ms_MY.json +++ b/apps/files/l10n/ms_MY.json @@ -16,6 +16,10 @@ "Name" : "Nama", "Size" : "Saiz", "Modified" : "Dimodifikasi", + "New" : "Baru", + "Upload" : "Muat naik", + "Text file" : "Fail teks", + "Folder" : "Folder", "You created %1$s" : "Anda telah membina %1$s", "%2$s created %1$s" : "%2$s membina %1$s", "You changed %1$s" : "Anda menukar %1$s", @@ -24,10 +28,6 @@ "max. possible: " : "maksimum:", "Save" : "Simpan", "Settings" : "Tetapan", - "New" : "Baru", - "Text file" : "Fail teks", - "Folder" : "Folder", - "Upload" : "Muat naik", "Cancel upload" : "Batal muat naik", "Delete" : "Padam", "Upload too large" : "Muatnaik terlalu besar", diff --git a/apps/files/l10n/nb_NO.js b/apps/files/l10n/nb_NO.js index 2dec11dd26a..6c7653d05e6 100644 --- a/apps/files/l10n/nb_NO.js +++ b/apps/files/l10n/nb_NO.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Opplasting avbrutt.", "Could not get result from server." : "Fikk ikke resultat fra serveren.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.", - "{new_name} already exists" : "{new_name} finnes allerede", - "Could not create file" : "Klarte ikke å opprette fil", - "Could not create folder" : "Klarte ikke å opprette mappe", "Actions" : "Handlinger", "Download" : "Last ned", "Select" : "Velg", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Feil ved flytting av fil.", "Error moving file" : "Feil ved flytting av fil", "Error" : "Feil", + "{new_name} already exists" : "{new_name} finnes allerede", "Could not rename file" : "Klarte ikke å gi nytt navn til fil", + "Could not create file" : "Klarte ikke å opprette fil", + "Could not create folder" : "Klarte ikke å opprette mappe", "Error deleting file." : "Feil ved sletting av fil.", "No entries in this folder match '{filter}'" : "Ingen oppføringer i denne mappen stemmer med '{filter}'", "Name" : "Navn", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} og {files}", "You don’t have permission to upload or create files here" : "Du har ikke tillatelse til å laste opp eller opprette filer her", "_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"], + "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.", "File name cannot be empty." : "Filnavn kan ikke være tomt.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!", @@ -69,6 +70,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"], "Favorited" : "Er favoritt", "Favorite" : "Gjør til favoritt", + "Upload" : "Last opp", + "Text file" : "Tekstfil", + "Folder" : "Mappe", + "New folder" : "Ny mappe", "An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>", @@ -95,12 +100,6 @@ OC.L10N.register( "Settings" : "Innstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>", - "New" : "Ny", - "New text file" : "Ny tekstfil", - "Text file" : "Tekstfil", - "New folder" : "Ny mappe", - "Folder" : "Mappe", - "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "No files in here" : "Ingen filer her", "Upload some content or sync with your devices!" : "Last opp noe innhold eller synkroniser med enhetene dine!", diff --git a/apps/files/l10n/nb_NO.json b/apps/files/l10n/nb_NO.json index f5adc80f138..f75d26d6d1d 100644 --- a/apps/files/l10n/nb_NO.json +++ b/apps/files/l10n/nb_NO.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Opplasting avbrutt.", "Could not get result from server." : "Fikk ikke resultat fra serveren.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filopplasting pågår. Forlater du siden nå avbrytes opplastingen.", - "{new_name} already exists" : "{new_name} finnes allerede", - "Could not create file" : "Klarte ikke å opprette fil", - "Could not create folder" : "Klarte ikke å opprette mappe", "Actions" : "Handlinger", "Download" : "Last ned", "Select" : "Velg", @@ -47,7 +44,10 @@ "Error moving file." : "Feil ved flytting av fil.", "Error moving file" : "Feil ved flytting av fil", "Error" : "Feil", + "{new_name} already exists" : "{new_name} finnes allerede", "Could not rename file" : "Klarte ikke å gi nytt navn til fil", + "Could not create file" : "Klarte ikke å opprette fil", + "Could not create folder" : "Klarte ikke å opprette mappe", "Error deleting file." : "Feil ved sletting av fil.", "No entries in this folder match '{filter}'" : "Ingen oppføringer i denne mappen stemmer med '{filter}'", "Name" : "Navn", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} og {files}", "You don’t have permission to upload or create files here" : "Du har ikke tillatelse til å laste opp eller opprette filer her", "_Uploading %n file_::_Uploading %n files_" : ["Laster opp %n fil","Laster opp %n filer"], + "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" er et uglydig filnavn.", "File name cannot be empty." : "Filnavn kan ikke være tomt.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Lagringsplass for {owner} er full, filer kan ikke oppdateres eller synkroniseres lenger!", @@ -67,6 +68,10 @@ "_matches '{filter}'_::_match '{filter}'_" : [" stemmer med '{filter}'"," stemmer med '{filter}'"], "Favorited" : "Er favoritt", "Favorite" : "Gjør til favoritt", + "Upload" : "Last opp", + "Text file" : "Tekstfil", + "Folder" : "Mappe", + "New folder" : "Ny mappe", "An error occurred while trying to update the tags" : "En feil oppstod under oppdatering av taggene", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mappe ble <strong>opprettet</strong>", "A file or folder has been <strong>changed</strong>" : "En fil eller mappe ble <strong>endret</strong>", @@ -93,12 +98,6 @@ "Settings" : "Innstillinger", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Bruk denne adressen for å <a href=\"%s\" target=\"_blank\">få tilgang til filene dine via WebDAV</a>", - "New" : "Ny", - "New text file" : "Ny tekstfil", - "Text file" : "Tekstfil", - "New folder" : "Ny mappe", - "Folder" : "Mappe", - "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "No files in here" : "Ingen filer her", "Upload some content or sync with your devices!" : "Last opp noe innhold eller synkroniser med enhetene dine!", diff --git a/apps/files/l10n/nl.js b/apps/files/l10n/nl.js index 8392da4c2eb..3470d011dc6 100644 --- a/apps/files/l10n/nl.js +++ b/apps/files/l10n/nl.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Uploaden geannuleerd.", "Could not get result from server." : "Kon het resultaat van de server niet terugkrijgen.", "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", - "{new_name} already exists" : "{new_name} bestaat al", - "Could not create file" : "Kon bestand niet creëren", - "Could not create folder" : "Kon niet creëren map", "Actions" : "Acties", "Download" : "Downloaden", "Select" : "Selecteer", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Fout bij verplaatsen bestand.", "Error moving file" : "Fout bij verplaatsen bestand", "Error" : "Fout", + "{new_name} already exists" : "{new_name} bestaat al", "Could not rename file" : "Kon de naam van het bestand niet wijzigen", + "Could not create file" : "Kon bestand niet creëren", + "Could not create folder" : "Kon niet creëren map", "Error deleting file." : "Fout bij verwijderen bestand.", "No entries in this folder match '{filter}'" : "Niets in deze map komt overeen met '{filter}'", "Name" : "Naam", @@ -59,6 +59,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} en {files}", "You don’t have permission to upload or create files here" : "U hebt geen toestemming om hier te uploaden of bestanden te maken", "_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"], + "New" : "Nieuw", "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", @@ -70,6 +71,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Favoriet", "Favorite" : "Favoriet", + "{newname} already exists" : "{newname} bestaat al", + "Upload" : "Uploaden", + "Text file" : "Tekstbestand", + "New text file.txt" : "Nieuw tekstbestand.txt", + "Folder" : "Map", + "New folder" : "Nieuwe map", "An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken", "A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>", "A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>", @@ -97,12 +104,6 @@ OC.L10N.register( "Settings" : "Instellingen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>", - "New" : "Nieuw", - "New text file" : "Nieuw tekstbestand", - "Text file" : "Tekstbestand", - "New folder" : "Nieuwe map", - "Folder" : "Map", - "Upload" : "Uploaden", "Cancel upload" : "Upload afbreken", "No files in here" : "Hier geen bestanden", "Upload some content or sync with your devices!" : "Upload bestanden of synchroniseer met uw apparaten!", diff --git a/apps/files/l10n/nl.json b/apps/files/l10n/nl.json index 532905c9c4a..04c0b7916b5 100644 --- a/apps/files/l10n/nl.json +++ b/apps/files/l10n/nl.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Uploaden geannuleerd.", "Could not get result from server." : "Kon het resultaat van de server niet terugkrijgen.", "File upload is in progress. Leaving the page now will cancel the upload." : "Bestandsupload is bezig. Wanneer de pagina nu verlaten wordt, stopt de upload.", - "{new_name} already exists" : "{new_name} bestaat al", - "Could not create file" : "Kon bestand niet creëren", - "Could not create folder" : "Kon niet creëren map", "Actions" : "Acties", "Download" : "Downloaden", "Select" : "Selecteer", @@ -47,7 +44,10 @@ "Error moving file." : "Fout bij verplaatsen bestand.", "Error moving file" : "Fout bij verplaatsen bestand", "Error" : "Fout", + "{new_name} already exists" : "{new_name} bestaat al", "Could not rename file" : "Kon de naam van het bestand niet wijzigen", + "Could not create file" : "Kon bestand niet creëren", + "Could not create folder" : "Kon niet creëren map", "Error deleting file." : "Fout bij verwijderen bestand.", "No entries in this folder match '{filter}'" : "Niets in deze map komt overeen met '{filter}'", "Name" : "Naam", @@ -57,6 +57,7 @@ "{dirs} and {files}" : "{dirs} en {files}", "You don’t have permission to upload or create files here" : "U hebt geen toestemming om hier te uploaden of bestanden te maken", "_Uploading %n file_::_Uploading %n files_" : ["%n bestand aan het uploaden","%n bestanden aan het uploaden"], + "New" : "Nieuw", "\"{name}\" is an invalid file name." : "\"{name}\" is een ongeldige bestandsnaam.", "File name cannot be empty." : "Bestandsnaam kan niet leeg zijn.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Opslagruimte van {owner} zit vol, bestanden kunnen niet meer worden ge-upload of gesynchroniseerd!", @@ -68,6 +69,12 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Favoriet", "Favorite" : "Favoriet", + "{newname} already exists" : "{newname} bestaat al", + "Upload" : "Uploaden", + "Text file" : "Tekstbestand", + "New text file.txt" : "Nieuw tekstbestand.txt", + "Folder" : "Map", + "New folder" : "Nieuwe map", "An error occurred while trying to update the tags" : "Er trad een fout op bij uw poging de tags bij te werken", "A new file or folder has been <strong>created</strong>" : "Een nieuw bestand of map is <strong>aangemaakt</strong>", "A file or folder has been <strong>changed</strong>" : "Een bestand of map is <strong>gewijzigd</strong>", @@ -95,12 +102,6 @@ "Settings" : "Instellingen", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Gebruik deze link <a href=\"%s\" target=\"_blank\">om uw bestanden via WebDAV te benaderen</a>", - "New" : "Nieuw", - "New text file" : "Nieuw tekstbestand", - "Text file" : "Tekstbestand", - "New folder" : "Nieuwe map", - "Folder" : "Map", - "Upload" : "Uploaden", "Cancel upload" : "Upload afbreken", "No files in here" : "Hier geen bestanden", "Upload some content or sync with your devices!" : "Upload bestanden of synchroniseer met uw apparaten!", diff --git a/apps/files/l10n/nn_NO.js b/apps/files/l10n/nn_NO.js index b7523a465d9..cc993f5ca6d 100644 --- a/apps/files/l10n/nn_NO.js +++ b/apps/files/l10n/nn_NO.js @@ -26,12 +26,12 @@ OC.L10N.register( "Upload cancelled." : "Opplasting avbroten.", "Could not get result from server." : "Klarte ikkje å henta resultat frå tenaren.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.", - "{new_name} already exists" : "{new_name} finst allereie", "Actions" : "Handlingar", "Download" : "Last ned", "Pending" : "Under vegs", "Error moving file" : "Feil ved flytting av fil", "Error" : "Feil", + "{new_name} already exists" : "{new_name} finst allereie", "Name" : "Namn", "Size" : "Storleik", "Modified" : "Endra", @@ -39,10 +39,15 @@ OC.L10N.register( "_%n file_::_%n files_" : ["%n fil","%n filer"], "{dirs} and {files}" : "{dirs} og {files}", "_Uploading %n file_::_Uploading %n files_" : ["Lastar opp %n fil","Lastar opp %n filer"], + "New" : "Ny", "File name cannot be empty." : "Filnamnet kan ikkje vera tomt.", "Your storage is full, files can not be updated or synced anymore!" : "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!", "Your storage is almost full ({usedSpacePercent}%)" : "Lagringa di er nesten full ({usedSpacePercent} %)", "Favorite" : "Favoritt", + "Upload" : "Last opp", + "Text file" : "Tekst fil", + "Folder" : "Mappe", + "New folder" : "Ny mappe", "A new file or folder has been <strong>created</strong>" : "Ei ny fil eller mappe er <strong>oppretta</strong>", "A file or folder has been <strong>changed</strong>" : "Ei fil eller mappe er <strong>endra</strong>", "A file or folder has been <strong>deleted</strong>" : "Ei fil eller mappe er <strong>sletta</strong>", @@ -60,11 +65,6 @@ OC.L10N.register( "Save" : "Lagre", "Settings" : "Innstillingar", "WebDAV" : "WebDAV", - "New" : "Ny", - "Text file" : "Tekst fil", - "New folder" : "Ny mappe", - "Folder" : "Mappe", - "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "Delete" : "Slett", "Upload too large" : "For stor opplasting", diff --git a/apps/files/l10n/nn_NO.json b/apps/files/l10n/nn_NO.json index 05bef4cb9d2..62d1cfb2c50 100644 --- a/apps/files/l10n/nn_NO.json +++ b/apps/files/l10n/nn_NO.json @@ -24,12 +24,12 @@ "Upload cancelled." : "Opplasting avbroten.", "Could not get result from server." : "Klarte ikkje å henta resultat frå tenaren.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fila lastar no opp. Viss du forlèt sida no vil opplastinga verta avbroten.", - "{new_name} already exists" : "{new_name} finst allereie", "Actions" : "Handlingar", "Download" : "Last ned", "Pending" : "Under vegs", "Error moving file" : "Feil ved flytting av fil", "Error" : "Feil", + "{new_name} already exists" : "{new_name} finst allereie", "Name" : "Namn", "Size" : "Storleik", "Modified" : "Endra", @@ -37,10 +37,15 @@ "_%n file_::_%n files_" : ["%n fil","%n filer"], "{dirs} and {files}" : "{dirs} og {files}", "_Uploading %n file_::_Uploading %n files_" : ["Lastar opp %n fil","Lastar opp %n filer"], + "New" : "Ny", "File name cannot be empty." : "Filnamnet kan ikkje vera tomt.", "Your storage is full, files can not be updated or synced anymore!" : "Lagringa di er full, kan ikkje lenger oppdatera eller synkronisera!", "Your storage is almost full ({usedSpacePercent}%)" : "Lagringa di er nesten full ({usedSpacePercent} %)", "Favorite" : "Favoritt", + "Upload" : "Last opp", + "Text file" : "Tekst fil", + "Folder" : "Mappe", + "New folder" : "Ny mappe", "A new file or folder has been <strong>created</strong>" : "Ei ny fil eller mappe er <strong>oppretta</strong>", "A file or folder has been <strong>changed</strong>" : "Ei fil eller mappe er <strong>endra</strong>", "A file or folder has been <strong>deleted</strong>" : "Ei fil eller mappe er <strong>sletta</strong>", @@ -58,11 +63,6 @@ "Save" : "Lagre", "Settings" : "Innstillingar", "WebDAV" : "WebDAV", - "New" : "Ny", - "Text file" : "Tekst fil", - "New folder" : "Ny mappe", - "Folder" : "Mappe", - "Upload" : "Last opp", "Cancel upload" : "Avbryt opplasting", "Delete" : "Slett", "Upload too large" : "For stor opplasting", diff --git a/apps/files/l10n/oc.js b/apps/files/l10n/oc.js index a362dde52be..75bceacac3b 100644 --- a/apps/files/l10n/oc.js +++ b/apps/files/l10n/oc.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Mandadís anullat.", "Could not get result from server." : "Pòt pas recebre los resultats del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Lo mandadís del fichièr es en cors. Quitar aquesta pagina ara anullarà lo mandadís del fichièr.", - "{new_name} already exists" : "{new_name} existís ja", - "Could not create file" : "Impossible de crear lo fichièr", - "Could not create folder" : "Impossible de crear lo dorsièr", "Actions" : "Accions", "Download" : "Telecargar", "Select" : "Seleccionar", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Error al moment del desplaçament del fichièr.", "Error moving file" : "Error al moment del desplaçament del fichièr", "Error" : "Error", + "{new_name} already exists" : "{new_name} existís ja", "Could not rename file" : "Impossible de renomenar lo fichièr", + "Could not create file" : "Impossible de crear lo fichièr", + "Could not create folder" : "Impossible de crear lo dorsièr", "Error deleting file." : "Error pendent la supression del fichièr.", "No entries in this folder match '{filter}'" : "Cap d'entrada d'aqueste dorsièr correspond pas a '{filter}'", "Name" : "Nom", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Avètz pas la permission d'apondre de fichièrs aicí", "_Uploading %n file_::_Uploading %n files_" : ["Mandadís de %n fichièr","Mandadís de %n fichièrs"], + "New" : "Novèl", "\"{name}\" is an invalid file name." : "\"{name}\" es pas un nom de fichièr valid.", "File name cannot be empty." : "Lo nom de fichièr pòt pas èsser void.", "Your storage is full, files can not be updated or synced anymore!" : "Vòstre espaci d'emmagazinatge es plen, los fichièrs pòdon pas mai èsser aponduts o sincronizats !", @@ -65,6 +66,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["correspond a '{filter}'","correspondon a '{filter}'"], "Favorited" : "Marcat coma favorit", "Favorite" : "Favorit", + "Upload" : "Cargament", + "Text file" : "Fichièr tèxte", + "Folder" : "Dorsièr", + "New folder" : "Novèl dorsièr", "An error occurred while trying to update the tags" : "Una error s'es produsida al moment de la mesa a jorn de las etiquetas", "A new file or folder has been <strong>created</strong>" : "Un novèl fichièr o repertòri es estat <strong>creat</strong>", "A file or folder has been <strong>changed</strong>" : "Un fichièr o un repertòri es estat <strong>modificat</strong>", @@ -91,12 +96,6 @@ OC.L10N.register( "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizatz aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir a vòstres fichièrs per WebDAV</a>", - "New" : "Novèl", - "New text file" : "Novèl fichièr tèxte", - "Text file" : "Fichièr tèxte", - "New folder" : "Novèl dorsièr", - "Folder" : "Dorsièr", - "Upload" : "Cargament", "Cancel upload" : "Anullar lo mandadís", "No files in here" : "Pas cap de fichièr aicí", "Upload some content or sync with your devices!" : "Depausatz de contengut o sincronizatz vòstres aparelhs !", diff --git a/apps/files/l10n/oc.json b/apps/files/l10n/oc.json index 3b89728ce9c..20b690a2ed8 100644 --- a/apps/files/l10n/oc.json +++ b/apps/files/l10n/oc.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Mandadís anullat.", "Could not get result from server." : "Pòt pas recebre los resultats del servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Lo mandadís del fichièr es en cors. Quitar aquesta pagina ara anullarà lo mandadís del fichièr.", - "{new_name} already exists" : "{new_name} existís ja", - "Could not create file" : "Impossible de crear lo fichièr", - "Could not create folder" : "Impossible de crear lo dorsièr", "Actions" : "Accions", "Download" : "Telecargar", "Select" : "Seleccionar", @@ -45,7 +42,10 @@ "Error moving file." : "Error al moment del desplaçament del fichièr.", "Error moving file" : "Error al moment del desplaçament del fichièr", "Error" : "Error", + "{new_name} already exists" : "{new_name} existís ja", "Could not rename file" : "Impossible de renomenar lo fichièr", + "Could not create file" : "Impossible de crear lo fichièr", + "Could not create folder" : "Impossible de crear lo dorsièr", "Error deleting file." : "Error pendent la supression del fichièr.", "No entries in this folder match '{filter}'" : "Cap d'entrada d'aqueste dorsièr correspond pas a '{filter}'", "Name" : "Nom", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Avètz pas la permission d'apondre de fichièrs aicí", "_Uploading %n file_::_Uploading %n files_" : ["Mandadís de %n fichièr","Mandadís de %n fichièrs"], + "New" : "Novèl", "\"{name}\" is an invalid file name." : "\"{name}\" es pas un nom de fichièr valid.", "File name cannot be empty." : "Lo nom de fichièr pòt pas èsser void.", "Your storage is full, files can not be updated or synced anymore!" : "Vòstre espaci d'emmagazinatge es plen, los fichièrs pòdon pas mai èsser aponduts o sincronizats !", @@ -63,6 +64,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["correspond a '{filter}'","correspondon a '{filter}'"], "Favorited" : "Marcat coma favorit", "Favorite" : "Favorit", + "Upload" : "Cargament", + "Text file" : "Fichièr tèxte", + "Folder" : "Dorsièr", + "New folder" : "Novèl dorsièr", "An error occurred while trying to update the tags" : "Una error s'es produsida al moment de la mesa a jorn de las etiquetas", "A new file or folder has been <strong>created</strong>" : "Un novèl fichièr o repertòri es estat <strong>creat</strong>", "A file or folder has been <strong>changed</strong>" : "Un fichièr o un repertòri es estat <strong>modificat</strong>", @@ -89,12 +94,6 @@ "Settings" : "Paramètres", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilizatz aquesta adreça per <a href=\"%s\" target=\"_blank\">accedir a vòstres fichièrs per WebDAV</a>", - "New" : "Novèl", - "New text file" : "Novèl fichièr tèxte", - "Text file" : "Fichièr tèxte", - "New folder" : "Novèl dorsièr", - "Folder" : "Dorsièr", - "Upload" : "Cargament", "Cancel upload" : "Anullar lo mandadís", "No files in here" : "Pas cap de fichièr aicí", "Upload some content or sync with your devices!" : "Depausatz de contengut o sincronizatz vòstres aparelhs !", diff --git a/apps/files/l10n/pa.js b/apps/files/l10n/pa.js index 8f7fafa6e32..c92f4473ccb 100644 --- a/apps/files/l10n/pa.js +++ b/apps/files/l10n/pa.js @@ -5,8 +5,8 @@ OC.L10N.register( "Files" : "ਫਾਇਲਾਂ", "Download" : "ਡਾਊਨਲੋਡ", "Error" : "ਗਲਤੀ", - "Settings" : "ਸੈਟਿੰਗ", "Upload" : "ਅੱਪਲੋਡ", + "Settings" : "ਸੈਟਿੰਗ", "Cancel upload" : "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ", "Delete" : "ਹਟਾਓ" }, diff --git a/apps/files/l10n/pa.json b/apps/files/l10n/pa.json index b14ece73520..438a0cdb313 100644 --- a/apps/files/l10n/pa.json +++ b/apps/files/l10n/pa.json @@ -3,8 +3,8 @@ "Files" : "ਫਾਇਲਾਂ", "Download" : "ਡਾਊਨਲੋਡ", "Error" : "ਗਲਤੀ", - "Settings" : "ਸੈਟਿੰਗ", "Upload" : "ਅੱਪਲੋਡ", + "Settings" : "ਸੈਟਿੰਗ", "Cancel upload" : "ਅੱਪਲੋਡ ਰੱਦ ਕਰੋ", "Delete" : "ਹਟਾਓ" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files/l10n/pl.js b/apps/files/l10n/pl.js index 28ffe4444e8..c64f9c97d60 100644 --- a/apps/files/l10n/pl.js +++ b/apps/files/l10n/pl.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Wczytywanie anulowane.", "Could not get result from server." : "Nie można uzyskać wyniku z serwera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", - "{new_name} already exists" : "{new_name} już istnieje", - "Could not create file" : "Nie można utworzyć pliku", - "Could not create folder" : "Nie można utworzyć folderu", "Actions" : "Akcje", "Download" : "Pobierz", "Select" : "Wybierz", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Błąd podczas przenoszenia pliku.", "Error moving file" : "Błąd prz przenoszeniu pliku", "Error" : "Błąd", + "{new_name} already exists" : "{new_name} już istnieje", "Could not rename file" : "Nie można zmienić nazwy pliku", + "Could not create file" : "Nie można utworzyć pliku", + "Could not create folder" : "Nie można utworzyć folderu", "Error deleting file." : "Błąd podczas usuwania pliku", "No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'", "Name" : "Nazwa", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"], + "New" : "Nowy", "\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.", "File name cannot be empty." : "Nazwa pliku nie może być pusta.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ", @@ -66,6 +67,10 @@ OC.L10N.register( "Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", "Favorited" : "Ulubione", "Favorite" : "Ulubione", + "Upload" : "Wyślij", + "Text file" : "Plik tekstowy", + "Folder" : "Folder", + "New folder" : "Nowy folder", "A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>", "A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>", "A file or folder has been <strong>deleted</strong>" : "Plik lub folder został <strong>usunięty</strong>", @@ -89,12 +94,6 @@ OC.L10N.register( "Settings" : "Ustawienia", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Użyj tego adresu do <a href=\"%s\" target=\"_blank\">dostępu do twoich plików przez WebDAV</a>", - "New" : "Nowy", - "New text file" : "Nowy plik tekstowy", - "Text file" : "Plik tekstowy", - "New folder" : "Nowy folder", - "Folder" : "Folder", - "Upload" : "Wyślij", "Cancel upload" : "Anuluj wysyłanie", "No entries found in this folder" : "Brak wpisów w tym folderze", "Select all" : "Wybierz wszystko", diff --git a/apps/files/l10n/pl.json b/apps/files/l10n/pl.json index c2d49274c6b..d5a3c33e698 100644 --- a/apps/files/l10n/pl.json +++ b/apps/files/l10n/pl.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Wczytywanie anulowane.", "Could not get result from server." : "Nie można uzyskać wyniku z serwera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Wysyłanie pliku jest w toku. Jeśli opuścisz tę stronę, wysyłanie zostanie przerwane.", - "{new_name} already exists" : "{new_name} już istnieje", - "Could not create file" : "Nie można utworzyć pliku", - "Could not create folder" : "Nie można utworzyć folderu", "Actions" : "Akcje", "Download" : "Pobierz", "Select" : "Wybierz", @@ -45,7 +42,10 @@ "Error moving file." : "Błąd podczas przenoszenia pliku.", "Error moving file" : "Błąd prz przenoszeniu pliku", "Error" : "Błąd", + "{new_name} already exists" : "{new_name} już istnieje", "Could not rename file" : "Nie można zmienić nazwy pliku", + "Could not create file" : "Nie można utworzyć pliku", + "Could not create folder" : "Nie można utworzyć folderu", "Error deleting file." : "Błąd podczas usuwania pliku", "No entries in this folder match '{filter}'" : "Brak wyników pasujących do '{filter}'", "Name" : "Nazwa", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Nie masz uprawnień do wczytywania lub tworzenia plików w tym miejscu", "_Uploading %n file_::_Uploading %n files_" : ["Wysyłanie %n pliku","Wysyłanie %n plików","Wysyłanie %n plików"], + "New" : "Nowy", "\"{name}\" is an invalid file name." : "\"{name}\" jest nieprawidłową nazwą pliku.", "File name cannot be empty." : "Nazwa pliku nie może być pusta.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Brak wolnego miejsca {owner}, pliki nie mogą zostać zaktualizowane lub synchronizowane! ", @@ -64,6 +65,10 @@ "Your storage is almost full ({usedSpacePercent}%)" : "Twój magazyn jest prawie pełny ({usedSpacePercent}%)", "Favorited" : "Ulubione", "Favorite" : "Ulubione", + "Upload" : "Wyślij", + "Text file" : "Plik tekstowy", + "Folder" : "Folder", + "New folder" : "Nowy folder", "A new file or folder has been <strong>created</strong>" : "Nowy plik lub folder został <strong>utworzony</strong>", "A file or folder has been <strong>changed</strong>" : "Plik lub folder został <strong>zmieniony</strong>", "A file or folder has been <strong>deleted</strong>" : "Plik lub folder został <strong>usunięty</strong>", @@ -87,12 +92,6 @@ "Settings" : "Ustawienia", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Użyj tego adresu do <a href=\"%s\" target=\"_blank\">dostępu do twoich plików przez WebDAV</a>", - "New" : "Nowy", - "New text file" : "Nowy plik tekstowy", - "Text file" : "Plik tekstowy", - "New folder" : "Nowy folder", - "Folder" : "Folder", - "Upload" : "Wyślij", "Cancel upload" : "Anuluj wysyłanie", "No entries found in this folder" : "Brak wpisów w tym folderze", "Select all" : "Wybierz wszystko", diff --git a/apps/files/l10n/pt_BR.js b/apps/files/l10n/pt_BR.js index 81378cdef4c..7f154cbbf5e 100644 --- a/apps/files/l10n/pt_BR.js +++ b/apps/files/l10n/pt_BR.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio.", - "{new_name} already exists" : "{new_name} já existe", - "Could not create file" : "Não foi possível criar o arquivo", - "Could not create folder" : "Não foi possível criar a pasta", "Actions" : "Ações", "Download" : "Baixar", "Select" : "Selecionar", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Erro movendo o arquivo.", "Error moving file" : "Erro movendo o arquivo", "Error" : "Erro", + "{new_name} already exists" : "{new_name} já existe", "Could not rename file" : "Não foi possível renomear o arquivo", + "Could not create file" : "Não foi possível criar o arquivo", + "Could not create folder" : "Não foi possível criar a pasta", "Error deleting file." : "Erro eliminando o arquivo.", "No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'", "Name" : "Nome", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar arquivos aqui", "_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.", "File name cannot be empty." : "O nome do arquivo não pode estar vazio.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Favorito", "Favorite" : "Favorito", + "{newname} already exists" : "{newname} já existe", + "Upload" : "Enviar", + "Text file" : "Arquivo texto", + "New text file.txt" : "Novo texto file.txt", + "Folder" : "Pasta", + "New folder" : "Nova pasta", "An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>", "A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "Configurações", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>", - "New" : "Novo", - "New text file" : "Novo arquivo texto", - "Text file" : "Arquivo texto", - "New folder" : "Nova pasta", - "Folder" : "Pasta", - "Upload" : "Enviar", "Cancel upload" : "Cancelar envio", "No files in here" : "Nenhum arquivo aqui", "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com seus dispositivos!", diff --git a/apps/files/l10n/pt_BR.json b/apps/files/l10n/pt_BR.json index 1cdb7969af7..81c76bb2b84 100644 --- a/apps/files/l10n/pt_BR.json +++ b/apps/files/l10n/pt_BR.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de arquivo em andamento. Sair da página agora resultará no cancelamento do envio.", - "{new_name} already exists" : "{new_name} já existe", - "Could not create file" : "Não foi possível criar o arquivo", - "Could not create folder" : "Não foi possível criar a pasta", "Actions" : "Ações", "Download" : "Baixar", "Select" : "Selecionar", @@ -47,7 +44,10 @@ "Error moving file." : "Erro movendo o arquivo.", "Error moving file" : "Erro movendo o arquivo", "Error" : "Erro", + "{new_name} already exists" : "{new_name} já existe", "Could not rename file" : "Não foi possível renomear o arquivo", + "Could not create file" : "Não foi possível criar o arquivo", + "Could not create folder" : "Não foi possível criar a pasta", "Error deleting file." : "Erro eliminando o arquivo.", "No entries in this folder match '{filter}'" : "Nenhuma entrada nesta pasta coincide com '{filter}'", "Name" : "Nome", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar arquivos aqui", "_Uploading %n file_::_Uploading %n files_" : ["Enviando %n arquivo","Enviando %n arquivos"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de arquivo inválido.", "File name cannot be empty." : "O nome do arquivo não pode estar vazio.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Armazenamento do {owner} está cheio, os arquivos não podem ser mais atualizados ou sincronizados!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n byte","%n bytes"], "Favorited" : "Favorito", "Favorite" : "Favorito", + "{newname} already exists" : "{newname} já existe", + "Upload" : "Enviar", + "Text file" : "Arquivo texto", + "New text file.txt" : "Novo texto file.txt", + "Folder" : "Pasta", + "New folder" : "Nova pasta", "An error occurred while trying to update the tags" : "Ocorreu um erro enquanto tentava atualizar as etiquetas", "A new file or folder has been <strong>created</strong>" : "Um novo arquivo ou pasta foi <strong>criado</strong>", "A file or folder has been <strong>changed</strong>" : "Um arquivo ou pasta foi <strong>modificado</strong>", @@ -96,12 +103,6 @@ "Settings" : "Configurações", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Use este endereço <a href=\"%s\" target=\"_blank\">para ter acesso aos seus Arquivos via WebDAV</a>", - "New" : "Novo", - "New text file" : "Novo arquivo texto", - "Text file" : "Arquivo texto", - "New folder" : "Nova pasta", - "Folder" : "Pasta", - "Upload" : "Enviar", "Cancel upload" : "Cancelar envio", "No files in here" : "Nenhum arquivo aqui", "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com seus dispositivos!", diff --git a/apps/files/l10n/pt_PT.js b/apps/files/l10n/pt_PT.js index 07817ecf79d..32f7dee7d43 100644 --- a/apps/files/l10n/pt_PT.js +++ b/apps/files/l10n/pt_PT.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de ficheiro em progresso. Se deixar a página agora, irá cancelar o envio.", - "{new_name} already exists" : "O nome {new_name} já existe", - "Could not create file" : "Não pôde criar ficheiro", - "Could not create folder" : "Não pôde criar pasta", "Actions" : "Ações", "Download" : "Descarregar", "Select" : "Selecionar", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Erro a mover o ficheiro.", "Error moving file" : "Erro ao mover o ficheiro", "Error" : "Erro", + "{new_name} already exists" : "O nome {new_name} já existe", "Could not rename file" : "Não pôde renomear o ficheiro", + "Could not create file" : "Não pôde criar ficheiro", + "Could not create folder" : "Não pôde criar pasta", "Error deleting file." : "Erro ao apagar o ficheiro.", "No entries in this folder match '{filter}'" : "Nenhumas entradas nesta pasta correspondem a '{filter}'", "Name" : "Nome", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar ficheiros aqui", "_Uploading %n file_::_Uploading %n files_" : ["A carregar %n ficheiro","A carregar %n ficheiros"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de ficheiro inválido.", "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", "Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", @@ -65,6 +66,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], "Favorited" : "Assinalado como Favorito", "Favorite" : "Favorito", + "Upload" : "Enviar", + "Text file" : "Ficheiro de Texto", + "Folder" : "Pasta", + "New folder" : "Nova Pasta", "An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags", "A new file or folder has been <strong>created</strong>" : "Foi <strong>criado</strong> um novo ficheiro ou pasta", "A file or folder has been <strong>changed</strong>" : "Foi <strong>alterado</strong> um ficheiro ou pasta", @@ -91,12 +96,6 @@ OC.L10N.register( "Settings" : "Definições", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>", - "New" : "Novo", - "New text file" : "Novo ficheiro de texto", - "Text file" : "Ficheiro de Texto", - "New folder" : "Nova Pasta", - "Folder" : "Pasta", - "Upload" : "Enviar", "Cancel upload" : "Cancelar o envio", "No files in here" : "Nenhuns ficheiros aqui", "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com os seus aparelhos!", diff --git a/apps/files/l10n/pt_PT.json b/apps/files/l10n/pt_PT.json index cca3e42bc72..5c6a8aececa 100644 --- a/apps/files/l10n/pt_PT.json +++ b/apps/files/l10n/pt_PT.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Envio cancelado.", "Could not get result from server." : "Não foi possível obter o resultado do servidor.", "File upload is in progress. Leaving the page now will cancel the upload." : "Envio de ficheiro em progresso. Se deixar a página agora, irá cancelar o envio.", - "{new_name} already exists" : "O nome {new_name} já existe", - "Could not create file" : "Não pôde criar ficheiro", - "Could not create folder" : "Não pôde criar pasta", "Actions" : "Ações", "Download" : "Descarregar", "Select" : "Selecionar", @@ -45,7 +42,10 @@ "Error moving file." : "Erro a mover o ficheiro.", "Error moving file" : "Erro ao mover o ficheiro", "Error" : "Erro", + "{new_name} already exists" : "O nome {new_name} já existe", "Could not rename file" : "Não pôde renomear o ficheiro", + "Could not create file" : "Não pôde criar ficheiro", + "Could not create folder" : "Não pôde criar pasta", "Error deleting file." : "Erro ao apagar o ficheiro.", "No entries in this folder match '{filter}'" : "Nenhumas entradas nesta pasta correspondem a '{filter}'", "Name" : "Nome", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} e {files}", "You don’t have permission to upload or create files here" : "Você não tem permissão para enviar ou criar ficheiros aqui", "_Uploading %n file_::_Uploading %n files_" : ["A carregar %n ficheiro","A carregar %n ficheiros"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" é um nome de ficheiro inválido.", "File name cannot be empty." : "O nome do ficheiro não pode estar em branco.", "Your storage is full, files can not be updated or synced anymore!" : "O seu armazenamento está cheio, os ficheiros já não podem ser atualizados ou sincronizados.", @@ -63,6 +64,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["corresponde a '{filter}'","correspondem a '{filter}'"], "Favorited" : "Assinalado como Favorito", "Favorite" : "Favorito", + "Upload" : "Enviar", + "Text file" : "Ficheiro de Texto", + "Folder" : "Pasta", + "New folder" : "Nova Pasta", "An error occurred while trying to update the tags" : "Ocorreu um erro ao tentar atualizar as tags", "A new file or folder has been <strong>created</strong>" : "Foi <strong>criado</strong> um novo ficheiro ou pasta", "A file or folder has been <strong>changed</strong>" : "Foi <strong>alterado</strong> um ficheiro ou pasta", @@ -89,12 +94,6 @@ "Settings" : "Definições", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Utilize esta ligação para <a href=\"%s\" target=\"_blank\">aceder aos seus ficheiros via WebDAV</a>", - "New" : "Novo", - "New text file" : "Novo ficheiro de texto", - "Text file" : "Ficheiro de Texto", - "New folder" : "Nova Pasta", - "Folder" : "Pasta", - "Upload" : "Enviar", "Cancel upload" : "Cancelar o envio", "No files in here" : "Nenhuns ficheiros aqui", "Upload some content or sync with your devices!" : "Carregue algum conteúdo ou sincronize com os seus aparelhos!", diff --git a/apps/files/l10n/ro.js b/apps/files/l10n/ro.js index 1d571ea8f67..35753e97da8 100644 --- a/apps/files/l10n/ro.js +++ b/apps/files/l10n/ro.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Încărcare anulată.", "Could not get result from server." : "Nu se poate obține rezultatul de la server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.", - "{new_name} already exists" : "{new_name} există deja", - "Could not create file" : "Nu s-a putut crea fisierul", - "Could not create folder" : "Nu s-a putut crea folderul", "Actions" : "Acțiuni", "Download" : "Descarcă", "Select" : "Alege", @@ -46,7 +43,10 @@ OC.L10N.register( "Error moving file." : "Eroare la mutarea fișierului.", "Error moving file" : "Eroare la mutarea fișierului", "Error" : "Eroare", + "{new_name} already exists" : "{new_name} există deja", "Could not rename file" : "Nu s-a putut redenumi fișierul", + "Could not create file" : "Nu s-a putut crea fisierul", + "Could not create folder" : "Nu s-a putut crea folderul", "Error deleting file." : "Eroare la ștergerea fișierului.", "Name" : "Nume", "Size" : "Mărime", @@ -56,11 +56,16 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} și {files}", "You don’t have permission to upload or create files here" : "Nu aveți permisiunea de a încărca sau crea fișiere aici", "_Uploading %n file_::_Uploading %n files_" : ["Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."], + "New" : "Nou", "\"{name}\" is an invalid file name." : "\"{name}\" este un nume de fișier nevalid.", "File name cannot be empty." : "Numele fișierului nu poate rămâne gol.", "Your storage is full, files can not be updated or synced anymore!" : "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!", "Your storage is almost full ({usedSpacePercent}%)" : "Spațiul de stocare este aproape plin ({usedSpacePercent}%)", "Favorite" : "Favorit", + "Upload" : "Încărcă", + "Text file" : "Fișier text", + "Folder" : "Dosar", + "New folder" : "Un nou dosar", "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>", "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau dosar a fost <strong>modificat</strong>", "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau dosar a fost <strong>șters</strong>", @@ -84,12 +89,6 @@ OC.L10N.register( "Settings" : "Setări", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Folosește această adresă <a href=\"%s\" target=\"_blank\">pentru acces la fișierele tale folosind WebDAV</a>", - "New" : "Nou", - "New text file" : "Un nou fișier text", - "Text file" : "Fișier text", - "New folder" : "Un nou dosar", - "Folder" : "Dosar", - "Upload" : "Încărcă", "Cancel upload" : "Anulează încărcarea", "Select all" : "Selectează tot", "Delete" : "Șterge", diff --git a/apps/files/l10n/ro.json b/apps/files/l10n/ro.json index d0152c340ab..22d66f8dbf0 100644 --- a/apps/files/l10n/ro.json +++ b/apps/files/l10n/ro.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Încărcare anulată.", "Could not get result from server." : "Nu se poate obține rezultatul de la server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Fișierul este în curs de încărcare. Părăsirea paginii va întrerupe încărcarea.", - "{new_name} already exists" : "{new_name} există deja", - "Could not create file" : "Nu s-a putut crea fisierul", - "Could not create folder" : "Nu s-a putut crea folderul", "Actions" : "Acțiuni", "Download" : "Descarcă", "Select" : "Alege", @@ -44,7 +41,10 @@ "Error moving file." : "Eroare la mutarea fișierului.", "Error moving file" : "Eroare la mutarea fișierului", "Error" : "Eroare", + "{new_name} already exists" : "{new_name} există deja", "Could not rename file" : "Nu s-a putut redenumi fișierul", + "Could not create file" : "Nu s-a putut crea fisierul", + "Could not create folder" : "Nu s-a putut crea folderul", "Error deleting file." : "Eroare la ștergerea fișierului.", "Name" : "Nume", "Size" : "Mărime", @@ -54,11 +54,16 @@ "{dirs} and {files}" : "{dirs} și {files}", "You don’t have permission to upload or create files here" : "Nu aveți permisiunea de a încărca sau crea fișiere aici", "_Uploading %n file_::_Uploading %n files_" : ["Se încarcă %n fișier.","Se încarcă %n fișiere.","Se încarcă %n fișiere."], + "New" : "Nou", "\"{name}\" is an invalid file name." : "\"{name}\" este un nume de fișier nevalid.", "File name cannot be empty." : "Numele fișierului nu poate rămâne gol.", "Your storage is full, files can not be updated or synced anymore!" : "Spațiul de stocare este plin, fișierele nu mai pot fi actualizate sau sincronizate!", "Your storage is almost full ({usedSpacePercent}%)" : "Spațiul de stocare este aproape plin ({usedSpacePercent}%)", "Favorite" : "Favorit", + "Upload" : "Încărcă", + "Text file" : "Fișier text", + "Folder" : "Dosar", + "New folder" : "Un nou dosar", "A new file or folder has been <strong>created</strong>" : "Un nou fișier sau dosar a fost <strong>creat</strong>", "A file or folder has been <strong>changed</strong>" : "Un nou fișier sau dosar a fost <strong>modificat</strong>", "A file or folder has been <strong>deleted</strong>" : "Un nou fișier sau dosar a fost <strong>șters</strong>", @@ -82,12 +87,6 @@ "Settings" : "Setări", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Folosește această adresă <a href=\"%s\" target=\"_blank\">pentru acces la fișierele tale folosind WebDAV</a>", - "New" : "Nou", - "New text file" : "Un nou fișier text", - "Text file" : "Fișier text", - "New folder" : "Un nou dosar", - "Folder" : "Dosar", - "Upload" : "Încărcă", "Cancel upload" : "Anulează încărcarea", "Select all" : "Selectează tot", "Delete" : "Șterge", diff --git a/apps/files/l10n/ru.js b/apps/files/l10n/ru.js index 87116553e40..962698709c3 100644 --- a/apps/files/l10n/ru.js +++ b/apps/files/l10n/ru.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Загрузка отменена.", "Could not get result from server." : "Не удалось получить ответ от сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.", - "{new_name} already exists" : "{new_name} уже существует", - "Could not create file" : "Не удалось создать файл", - "Could not create folder" : "Не удалось создать каталог", "Actions" : "Действия", "Download" : "Скачать", "Select" : "Выбрать", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Ошибка при перемещении файла.", "Error moving file" : "Ошибка при перемещении файла", "Error" : "Ошибка", + "{new_name} already exists" : "{new_name} уже существует", "Could not rename file" : "Не удалось переименовать файл", + "Could not create file" : "Не удалось создать файл", + "Could not create folder" : "Не удалось создать каталог", "Error deleting file." : "Ошибка при удалении файла.", "No entries in this folder match '{filter}'" : "В данном каталоге нет элементов соответствующих '{filter}'", "Name" : "Имя", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} и {files}", "You don’t have permission to upload or create files here" : "У вас нет прав для загрузки или создания файлов здесь.", "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов","Закачка %n файлов"], + "New" : "Новый", "\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.", "File name cannot be empty." : "Имя файла не может быть пустым.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!", @@ -71,6 +72,10 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байтов","%n байта(ов)"], "Favorited" : "Избранное", "Favorite" : "Избранное", + "Upload" : "Загрузить", + "Text file" : "Текстовый файл", + "Folder" : "Каталог", + "New folder" : "Новый каталог", "An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка", "A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог", "A file or folder has been <strong>changed</strong>" : "<strong>Изменён</strong> файл или каталог", @@ -98,12 +103,6 @@ OC.L10N.register( "Settings" : "Настройки", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">доступа файлам через WebDAV</a>", - "New" : "Новый", - "New text file" : "Новый текстовый файл", - "Text file" : "Текстовый файл", - "New folder" : "Новый каталог", - "Folder" : "Каталог", - "Upload" : "Загрузить", "Cancel upload" : "Отменить загрузку", "No files in here" : "Здесь нет файлов", "Upload some content or sync with your devices!" : "Загрузите что-нибудь или синхронизируйте со своими устройствами!", diff --git a/apps/files/l10n/ru.json b/apps/files/l10n/ru.json index 8880ec6f5aa..410ef1d9cbe 100644 --- a/apps/files/l10n/ru.json +++ b/apps/files/l10n/ru.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Загрузка отменена.", "Could not get result from server." : "Не удалось получить ответ от сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Идёт загрузка файла. Покинув страницу, вы прервёте загрузку.", - "{new_name} already exists" : "{new_name} уже существует", - "Could not create file" : "Не удалось создать файл", - "Could not create folder" : "Не удалось создать каталог", "Actions" : "Действия", "Download" : "Скачать", "Select" : "Выбрать", @@ -47,7 +44,10 @@ "Error moving file." : "Ошибка при перемещении файла.", "Error moving file" : "Ошибка при перемещении файла", "Error" : "Ошибка", + "{new_name} already exists" : "{new_name} уже существует", "Could not rename file" : "Не удалось переименовать файл", + "Could not create file" : "Не удалось создать файл", + "Could not create folder" : "Не удалось создать каталог", "Error deleting file." : "Ошибка при удалении файла.", "No entries in this folder match '{filter}'" : "В данном каталоге нет элементов соответствующих '{filter}'", "Name" : "Имя", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} и {files}", "You don’t have permission to upload or create files here" : "У вас нет прав для загрузки или создания файлов здесь.", "_Uploading %n file_::_Uploading %n files_" : ["Закачка %n файла","Закачка %n файлов","Закачка %n файлов","Закачка %n файлов"], + "New" : "Новый", "\"{name}\" is an invalid file name." : "\"{name}\" это неправильное имя файла.", "File name cannot be empty." : "Имя файла не может быть пустым.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Хранилище {owner} переполнено, файлы больше не могут быть обновлены или синхронизированы!", @@ -69,6 +70,10 @@ "_%n byte_::_%n bytes_" : ["%n байт","%n байта","%n байтов","%n байта(ов)"], "Favorited" : "Избранное", "Favorite" : "Избранное", + "Upload" : "Загрузить", + "Text file" : "Текстовый файл", + "Folder" : "Каталог", + "New folder" : "Новый каталог", "An error occurred while trying to update the tags" : "Во время обновления тегов возникла ошибка", "A new file or folder has been <strong>created</strong>" : "<strong>Создан</strong> новый файл или каталог", "A file or folder has been <strong>changed</strong>" : "<strong>Изменён</strong> файл или каталог", @@ -96,12 +101,6 @@ "Settings" : "Настройки", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Используйте этот адрес для <a href=\"%s\" target=\"_blank\">доступа файлам через WebDAV</a>", - "New" : "Новый", - "New text file" : "Новый текстовый файл", - "Text file" : "Текстовый файл", - "New folder" : "Новый каталог", - "Folder" : "Каталог", - "Upload" : "Загрузить", "Cancel upload" : "Отменить загрузку", "No files in here" : "Здесь нет файлов", "Upload some content or sync with your devices!" : "Загрузите что-нибудь или синхронизируйте со своими устройствами!", diff --git a/apps/files/l10n/si_LK.js b/apps/files/l10n/si_LK.js index 5c43bdd9be7..ea63cda82dc 100644 --- a/apps/files/l10n/si_LK.js +++ b/apps/files/l10n/si_LK.js @@ -19,6 +19,10 @@ OC.L10N.register( "Name" : "නම", "Size" : "ප්රමාණය", "Modified" : "වෙනස් කළ", + "New" : "නව", + "Upload" : "උඩුගත කරන්න", + "Text file" : "පෙළ ගොනුව", + "Folder" : "ෆෝල්ඩරය", "A new file or folder has been <strong>created</strong>" : "නව ගොනුවක් හෝ බහාලුමක් <strong> නිර්මාණය කර ඇත</ strong> ", "A file or folder has been <strong>changed</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>වෙනස්</strong> වී ඇත", "A file or folder has been <strong>deleted</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>මකා දමා</strong> ඇත", @@ -28,10 +32,6 @@ OC.L10N.register( "max. possible: " : "හැකි උපරිමය:", "Save" : "සුරකින්න", "Settings" : "සිටුවම්", - "New" : "නව", - "Text file" : "පෙළ ගොනුව", - "Folder" : "ෆෝල්ඩරය", - "Upload" : "උඩුගත කරන්න", "Cancel upload" : "උඩුගත කිරීම අත් හරින්න", "Delete" : "මකා දමන්න", "Upload too large" : "උඩුගත කිරීම විශාල වැඩිය", diff --git a/apps/files/l10n/si_LK.json b/apps/files/l10n/si_LK.json index 6fbac44938e..6cfbe30ff4a 100644 --- a/apps/files/l10n/si_LK.json +++ b/apps/files/l10n/si_LK.json @@ -17,6 +17,10 @@ "Name" : "නම", "Size" : "ප්රමාණය", "Modified" : "වෙනස් කළ", + "New" : "නව", + "Upload" : "උඩුගත කරන්න", + "Text file" : "පෙළ ගොනුව", + "Folder" : "ෆෝල්ඩරය", "A new file or folder has been <strong>created</strong>" : "නව ගොනුවක් හෝ බහාලුමක් <strong> නිර්මාණය කර ඇත</ strong> ", "A file or folder has been <strong>changed</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>වෙනස්</strong> වී ඇත", "A file or folder has been <strong>deleted</strong>" : "ගොනුවක් හෝ ෆෝල්ඩරයක් <strong>මකා දමා</strong> ඇත", @@ -26,10 +30,6 @@ "max. possible: " : "හැකි උපරිමය:", "Save" : "සුරකින්න", "Settings" : "සිටුවම්", - "New" : "නව", - "Text file" : "පෙළ ගොනුව", - "Folder" : "ෆෝල්ඩරය", - "Upload" : "උඩුගත කරන්න", "Cancel upload" : "උඩුගත කිරීම අත් හරින්න", "Delete" : "මකා දමන්න", "Upload too large" : "උඩුගත කිරීම විශාල වැඩිය", diff --git a/apps/files/l10n/sk_SK.js b/apps/files/l10n/sk_SK.js index ebb328e5a41..ebe1973a9ed 100644 --- a/apps/files/l10n/sk_SK.js +++ b/apps/files/l10n/sk_SK.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Odosielanie je zrušené.", "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.", - "{new_name} already exists" : "{new_name} už existuje", - "Could not create file" : "Nemožno vytvoriť súbor", - "Could not create folder" : "Nemožno vytvoriť priečinok", "Actions" : "Akcie", "Download" : "Sťahovanie", "Select" : "Vybrať", @@ -48,7 +45,10 @@ OC.L10N.register( "Error moving file." : "Chyba pri presune súboru.", "Error moving file" : "Chyba pri presúvaní súboru", "Error" : "Chyba", + "{new_name} already exists" : "{new_name} už existuje", "Could not rename file" : "Nemožno premenovať súbor", + "Could not create file" : "Nemožno vytvoriť súbor", + "Could not create folder" : "Nemožno vytvoriť priečinok", "Error deleting file." : "Chyba pri mazaní súboru.", "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'", "Name" : "Názov", @@ -59,6 +59,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} a {files}", "You don’t have permission to upload or create files here" : "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "_Uploading %n file_::_Uploading %n files_" : ["Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"], + "New" : "Nový", "\"{name}\" is an invalid file name." : "\"{name}\" je neplatné meno súboru.", "File name cannot be empty." : "Meno súboru nemôže byť prázdne", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", @@ -66,6 +67,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"], "Favorited" : "Pridané k obľúbeným", "Favorite" : "Obľúbené", + "Upload" : "Nahrať", + "Text file" : "Textový súbor", + "Folder" : "Priečinok", + "New folder" : "Nový priečinok", "An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe", "A new file or folder has been <strong>created</strong>" : "Nový súbor alebo priečinok bol <strong>vytvorený</strong>", "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>", @@ -90,12 +95,6 @@ OC.L10N.register( "Settings" : "Nastavenia", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použite túto linku <a href=\"%s\" target=\"_blank\">pre prístup k vašim súborom cez WebDAV</a>", - "New" : "Nový", - "New text file" : "Nový textový súbor", - "Text file" : "Textový súbor", - "New folder" : "Nový priečinok", - "Folder" : "Priečinok", - "Upload" : "Nahrať", "Cancel upload" : "Zrušiť nahrávanie", "No files in here" : "Nie sú tu žiadne súbory", "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!", diff --git a/apps/files/l10n/sk_SK.json b/apps/files/l10n/sk_SK.json index 0595e921535..ccd7a045699 100644 --- a/apps/files/l10n/sk_SK.json +++ b/apps/files/l10n/sk_SK.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Odosielanie je zrušené.", "Could not get result from server." : "Nepodarilo sa dostať výsledky zo servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Opustenie stránky zruší práve prebiehajúce odosielanie súboru.", - "{new_name} already exists" : "{new_name} už existuje", - "Could not create file" : "Nemožno vytvoriť súbor", - "Could not create folder" : "Nemožno vytvoriť priečinok", "Actions" : "Akcie", "Download" : "Sťahovanie", "Select" : "Vybrať", @@ -46,7 +43,10 @@ "Error moving file." : "Chyba pri presune súboru.", "Error moving file" : "Chyba pri presúvaní súboru", "Error" : "Chyba", + "{new_name} already exists" : "{new_name} už existuje", "Could not rename file" : "Nemožno premenovať súbor", + "Could not create file" : "Nemožno vytvoriť súbor", + "Could not create folder" : "Nemožno vytvoriť priečinok", "Error deleting file." : "Chyba pri mazaní súboru.", "No entries in this folder match '{filter}'" : "V tomto priečinku nič nezodpovedá '{filter}'", "Name" : "Názov", @@ -57,6 +57,7 @@ "{dirs} and {files}" : "{dirs} a {files}", "You don’t have permission to upload or create files here" : "Nemáte oprávnenie sem nahrávať alebo vytvoriť súbory", "_Uploading %n file_::_Uploading %n files_" : ["Nahrávam %n súbor","Nahrávam %n súbory","Nahrávam %n súborov"], + "New" : "Nový", "\"{name}\" is an invalid file name." : "\"{name}\" je neplatné meno súboru.", "File name cannot be empty." : "Meno súboru nemôže byť prázdne", "Your storage is full, files can not be updated or synced anymore!" : "Vaše úložisko je plné. Súbory nemožno aktualizovať ani synchronizovať!", @@ -64,6 +65,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["zodpovedá '{filter}'","zodpovedá '{filter}'","zodpovedá '{filter}'"], "Favorited" : "Pridané k obľúbeným", "Favorite" : "Obľúbené", + "Upload" : "Nahrať", + "Text file" : "Textový súbor", + "Folder" : "Priečinok", + "New folder" : "Nový priečinok", "An error occurred while trying to update the tags" : "Pri pokuse o aktualizáciu štítkov došlo k chybe", "A new file or folder has been <strong>created</strong>" : "Nový súbor alebo priečinok bol <strong>vytvorený</strong>", "A file or folder has been <strong>changed</strong>" : "Súbor alebo priečinok bol <strong>zmenený</strong>", @@ -88,12 +93,6 @@ "Settings" : "Nastavenia", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Použite túto linku <a href=\"%s\" target=\"_blank\">pre prístup k vašim súborom cez WebDAV</a>", - "New" : "Nový", - "New text file" : "Nový textový súbor", - "Text file" : "Textový súbor", - "New folder" : "Nový priečinok", - "Folder" : "Priečinok", - "Upload" : "Nahrať", "Cancel upload" : "Zrušiť nahrávanie", "No files in here" : "Nie sú tu žiadne súbory", "Upload some content or sync with your devices!" : "Nahrajte nejaký obsah alebo synchronizujte zo svojimi zariadeniami!", diff --git a/apps/files/l10n/sl.js b/apps/files/l10n/sl.js index 17cbdb1470c..2d296468d69 100644 --- a/apps/files/l10n/sl.js +++ b/apps/files/l10n/sl.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Pošiljanje je preklicano.", "Could not get result from server." : "Ni mogoče pridobiti podatkov s strežnika.", "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.", - "{new_name} already exists" : "{new_name} že obstaja", - "Could not create file" : "Ni mogoče ustvariti datoteke", - "Could not create folder" : "Ni mogoče ustvariti mape", "Actions" : "Dejanja", "Download" : "Prejmi", "Select" : "Izberi", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Napaka premikanja datoteke.", "Error moving file" : "Napaka premikanja datoteke", "Error" : "Napaka", + "{new_name} already exists" : "{new_name} že obstaja", "Could not rename file" : "Ni mogoče preimenovati datoteke", + "Could not create file" : "Ni mogoče ustvariti datoteke", + "Could not create folder" : "Ni mogoče ustvariti mape", "Error deleting file." : "Napaka brisanja datoteke.", "No entries in this folder match '{filter}'" : "Ni zadetkov, ki bi bili skladni z nizom '{filter}'", "Name" : "Ime", @@ -58,6 +58,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} in {files}", "You don’t have permission to upload or create files here" : "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" je neveljavno ime datoteke.", "File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Shramba uporabnika {owner} je polna, zato datotek ni več mogoče posodabljati in usklajevati!", @@ -67,6 +68,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["se sklada s filtrom '{filter}'","se skladata s filtrom '{filter}'","se skladajo s filtrom '{filter}'","se skladajo s filtrom '{filter}'"], "Favorited" : "Označeno kot priljubljeno", "Favorite" : "Priljubljene", + "Upload" : "Pošlji", + "Text file" : "Besedilna datoteka", + "Folder" : "Mapa", + "New folder" : "Nova mapa", "An error occurred while trying to update the tags" : "Prišlo je do napake med posodabljanjem oznak", "A new file or folder has been <strong>created</strong>" : "Nova datoteka ali mapa je <strong>ustvarjena</strong>", "A file or folder has been <strong>changed</strong>" : "Datoteka ali mapa je <strong>spremenjena</strong>.", @@ -93,12 +98,6 @@ OC.L10N.register( "Settings" : "Nastavitve", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek peko sistema WebDAV</a>.", - "New" : "Novo", - "New text file" : "Nova besedilna datoteka", - "Text file" : "Besedilna datoteka", - "New folder" : "Nova mapa", - "Folder" : "Mapa", - "Upload" : "Pošlji", "Cancel upload" : "Prekliči pošiljanje", "No files in here" : "V mapi ni datotek", "Upload some content or sync with your devices!" : "Uvozite vsebino ali pa omogočite usklajevanje z napravami!", diff --git a/apps/files/l10n/sl.json b/apps/files/l10n/sl.json index 0e123f4e715..0cb69f5f7a1 100644 --- a/apps/files/l10n/sl.json +++ b/apps/files/l10n/sl.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Pošiljanje je preklicano.", "Could not get result from server." : "Ni mogoče pridobiti podatkov s strežnika.", "File upload is in progress. Leaving the page now will cancel the upload." : "V teku je pošiljanje datoteke. Če zapustite to stran zdaj, bo pošiljanje preklicano.", - "{new_name} already exists" : "{new_name} že obstaja", - "Could not create file" : "Ni mogoče ustvariti datoteke", - "Could not create folder" : "Ni mogoče ustvariti mape", "Actions" : "Dejanja", "Download" : "Prejmi", "Select" : "Izberi", @@ -45,7 +42,10 @@ "Error moving file." : "Napaka premikanja datoteke.", "Error moving file" : "Napaka premikanja datoteke", "Error" : "Napaka", + "{new_name} already exists" : "{new_name} že obstaja", "Could not rename file" : "Ni mogoče preimenovati datoteke", + "Could not create file" : "Ni mogoče ustvariti datoteke", + "Could not create folder" : "Ni mogoče ustvariti mape", "Error deleting file." : "Napaka brisanja datoteke.", "No entries in this folder match '{filter}'" : "Ni zadetkov, ki bi bili skladni z nizom '{filter}'", "Name" : "Ime", @@ -56,6 +56,7 @@ "{dirs} and {files}" : "{dirs} in {files}", "You don’t have permission to upload or create files here" : "Ni ustreznih dovoljenj za pošiljanje ali ustvarjanje datotek na tem mestu.", "_Uploading %n file_::_Uploading %n files_" : ["Posodabljanje %n datoteke","Posodabljanje %n datotek","Posodabljanje %n datotek","Posodabljanje %n datotek"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" je neveljavno ime datoteke.", "File name cannot be empty." : "Ime datoteke ne sme biti prazno polje.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Shramba uporabnika {owner} je polna, zato datotek ni več mogoče posodabljati in usklajevati!", @@ -65,6 +66,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["se sklada s filtrom '{filter}'","se skladata s filtrom '{filter}'","se skladajo s filtrom '{filter}'","se skladajo s filtrom '{filter}'"], "Favorited" : "Označeno kot priljubljeno", "Favorite" : "Priljubljene", + "Upload" : "Pošlji", + "Text file" : "Besedilna datoteka", + "Folder" : "Mapa", + "New folder" : "Nova mapa", "An error occurred while trying to update the tags" : "Prišlo je do napake med posodabljanjem oznak", "A new file or folder has been <strong>created</strong>" : "Nova datoteka ali mapa je <strong>ustvarjena</strong>", "A file or folder has been <strong>changed</strong>" : "Datoteka ali mapa je <strong>spremenjena</strong>.", @@ -91,12 +96,6 @@ "Settings" : "Nastavitve", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Uporabite naslov <a href=\"%s\" target=\"_blank\"> za dostop do datotek peko sistema WebDAV</a>.", - "New" : "Novo", - "New text file" : "Nova besedilna datoteka", - "Text file" : "Besedilna datoteka", - "New folder" : "Nova mapa", - "Folder" : "Mapa", - "Upload" : "Pošlji", "Cancel upload" : "Prekliči pošiljanje", "No files in here" : "V mapi ni datotek", "Upload some content or sync with your devices!" : "Uvozite vsebino ali pa omogočite usklajevanje z napravami!", diff --git a/apps/files/l10n/sq.js b/apps/files/l10n/sq.js index c76819b7b8f..2b87c39d968 100644 --- a/apps/files/l10n/sq.js +++ b/apps/files/l10n/sq.js @@ -35,15 +35,15 @@ OC.L10N.register( "Upload cancelled." : "Ngarkimi u anullua", "Could not get result from server." : "Nuk mund të merret ndonjë rezultat nga serveri.", "File upload is in progress. Leaving the page now will cancel the upload." : "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin", - "{new_name} already exists" : "{new_name} është ekzistues ", - "Could not create file" : "Skedari nuk mund të krijohet", - "Could not create folder" : "I pamundur krijimi i kartelës", "Download" : "Shkarko", "Pending" : "Në vijim", "Error moving file." : "Gabim në lëvizjen e skedarëve.", "Error moving file" : "Gabim lëvizjen dokumentave", "Error" : "Gabim", + "{new_name} already exists" : "{new_name} është ekzistues ", "Could not rename file" : "Riemërtimi i skedarit nuk është i mundur", + "Could not create file" : "Skedari nuk mund të krijohet", + "Could not create folder" : "I pamundur krijimi i kartelës", "Error deleting file." : "Gabim gjatë fshirjes së skedarit.", "Name" : "Emri", "Size" : "Madhësia", @@ -53,10 +53,15 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} dhe {files}", "You don’t have permission to upload or create files here" : "Ju nuk keni të drejta për të ngarkuar apo krijuar skedarë këtu", "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkoj %n skedar","Po ngarkoj %n skedarë"], + "New" : "E re", "\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm.", "File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.", "Your storage is full, files can not be updated or synced anymore!" : "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!", "Your storage is almost full ({usedSpacePercent}%)" : "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)", + "Upload" : "Ngarko", + "Text file" : "Skedar tekst", + "Folder" : "Dosje", + "New folder" : "Dosje e're", "A new file or folder has been <strong>created</strong>" : "Një skedar ose një dosje e re është <strong>krijuar</strong>", "A file or folder has been <strong>changed</strong>" : "Një skedar ose një dosje ka <strong>ndryshuar</strong>", "A file or folder has been <strong>deleted</strong>" : "Një skedar ose një dosje është <strong>fshirë</strong>", @@ -80,12 +85,6 @@ OC.L10N.register( "Settings" : "Konfigurime", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Përdorni këtë adresë për <a href=\"%s\" target=\"_blank\">qasje në skedarët tuaj me anë të WebDAV</a>", - "New" : "E re", - "New text file" : "Skedar i ri tekst", - "Text file" : "Skedar tekst", - "New folder" : "Dosje e're", - "Folder" : "Dosje", - "Upload" : "Ngarko", "Cancel upload" : "Anullo ngarkimin", "Delete" : "Fshi", "Upload too large" : "Ngarkimi shumë i madh", diff --git a/apps/files/l10n/sq.json b/apps/files/l10n/sq.json index 619aaa79a56..1e755ee80f6 100644 --- a/apps/files/l10n/sq.json +++ b/apps/files/l10n/sq.json @@ -33,15 +33,15 @@ "Upload cancelled." : "Ngarkimi u anullua", "Could not get result from server." : "Nuk mund të merret ndonjë rezultat nga serveri.", "File upload is in progress. Leaving the page now will cancel the upload." : "Skedari duke u ngarkuar. Largimi nga faqja do të anullojë ngarkimin", - "{new_name} already exists" : "{new_name} është ekzistues ", - "Could not create file" : "Skedari nuk mund të krijohet", - "Could not create folder" : "I pamundur krijimi i kartelës", "Download" : "Shkarko", "Pending" : "Në vijim", "Error moving file." : "Gabim në lëvizjen e skedarëve.", "Error moving file" : "Gabim lëvizjen dokumentave", "Error" : "Gabim", + "{new_name} already exists" : "{new_name} është ekzistues ", "Could not rename file" : "Riemërtimi i skedarit nuk është i mundur", + "Could not create file" : "Skedari nuk mund të krijohet", + "Could not create folder" : "I pamundur krijimi i kartelës", "Error deleting file." : "Gabim gjatë fshirjes së skedarit.", "Name" : "Emri", "Size" : "Madhësia", @@ -51,10 +51,15 @@ "{dirs} and {files}" : "{dirs} dhe {files}", "You don’t have permission to upload or create files here" : "Ju nuk keni të drejta për të ngarkuar apo krijuar skedarë këtu", "_Uploading %n file_::_Uploading %n files_" : ["Po ngarkoj %n skedar","Po ngarkoj %n skedarë"], + "New" : "E re", "\"{name}\" is an invalid file name." : "\"{name}\" është emër i pavlefshëm.", "File name cannot be empty." : "Emri i skedarit nuk mund të jetë bosh.", "Your storage is full, files can not be updated or synced anymore!" : "Hapsira juaj e arkivimit është plot, skedarët nuk mund të përditësohen ose sinkronizohen!", "Your storage is almost full ({usedSpacePercent}%)" : "Hapsira juaj e arkivimit është pothuajse në fund ({usedSpacePercent}%)", + "Upload" : "Ngarko", + "Text file" : "Skedar tekst", + "Folder" : "Dosje", + "New folder" : "Dosje e're", "A new file or folder has been <strong>created</strong>" : "Një skedar ose një dosje e re është <strong>krijuar</strong>", "A file or folder has been <strong>changed</strong>" : "Një skedar ose një dosje ka <strong>ndryshuar</strong>", "A file or folder has been <strong>deleted</strong>" : "Një skedar ose një dosje është <strong>fshirë</strong>", @@ -78,12 +83,6 @@ "Settings" : "Konfigurime", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Përdorni këtë adresë për <a href=\"%s\" target=\"_blank\">qasje në skedarët tuaj me anë të WebDAV</a>", - "New" : "E re", - "New text file" : "Skedar i ri tekst", - "Text file" : "Skedar tekst", - "New folder" : "Dosje e're", - "Folder" : "Dosje", - "Upload" : "Ngarko", "Cancel upload" : "Anullo ngarkimin", "Delete" : "Fshi", "Upload too large" : "Ngarkimi shumë i madh", diff --git a/apps/files/l10n/sr.js b/apps/files/l10n/sr.js index 2a6df1f9cd2..597389e15da 100644 --- a/apps/files/l10n/sr.js +++ b/apps/files/l10n/sr.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Отпремање је отказано.", "Could not get result from server." : "Не могу да добијем резултат са сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Отпремање фајла је у току. Ако сада напустите страницу, отказаћете отпремање.", - "{new_name} already exists" : "{new_name} већ постоји", - "Could not create file" : "Не могу да створим фајл", - "Could not create folder" : "Не могу да створим фасциклу", "Actions" : "Радње", "Download" : "Преузми", "Select" : "Изабери", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Грешка при премештању фајла.", "Error moving file" : "Грешка при премештању фајла", "Error" : "Грешка", + "{new_name} already exists" : "{new_name} већ постоји", "Could not rename file" : "Не могу да преименујем фајл", + "Could not create file" : "Не могу да створим фајл", + "Could not create folder" : "Не могу да створим фасциклу", "Error deleting file." : "Грешка при брисању фајла.", "No entries in this folder match '{filter}'" : "У овој фасцикли ништа се не поклапа са '{filter}'", "Name" : "Назив", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} и {files}", "You don’t have permission to upload or create files here" : "Немате дозволе да овде отпремате или стварате фајлове", "_Uploading %n file_::_Uploading %n files_" : ["Отпремам %n фајл","Отпремам %n фајла","Отпремам %n фајлова"], + "New" : "Ново", "\"{name}\" is an invalid file name." : "\"{name}\" није исправан назив фајла.", "File name cannot be empty." : "Назив фајла не може бити празан.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Складиште корисника {owner} је пуно. Фајлови се не могу ажурирати нити синхронизовати!", @@ -69,6 +70,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["се поклапа са '{filter}'","се поклапају са '{filter}'","се поклапа са '{filter}'"], "Favorited" : "Омиљено", "Favorite" : "Омиљени", + "Upload" : "Отпреми", + "Text file" : "текстуални фајл", + "Folder" : "фасцикла", + "New folder" : "Нова фасцикла", "An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака", "A new file or folder has been <strong>created</strong>" : "Нови фајл или фасцикла су <strong>направљени</strong>", "A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>", @@ -95,12 +100,6 @@ OC.L10N.register( "Settings" : "Поставке", "WebDAV" : "ВебДАВ", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Користите ову адресу да <a href=\"%s\" target=\"_blank\"> приступите фајловима преко ВебДАВ-а</a>", - "New" : "Ново", - "New text file" : "Нов текстуални фајл", - "Text file" : "текстуални фајл", - "New folder" : "Нова фасцикла", - "Folder" : "фасцикла", - "Upload" : "Отпреми", "Cancel upload" : "Откажи отпремање", "No files in here" : "Овде нема фајлова", "Upload some content or sync with your devices!" : "Отпремите неки садржај или синхронизујте са вашим уређајима!", diff --git a/apps/files/l10n/sr.json b/apps/files/l10n/sr.json index 09aabbb72e7..ec2fcc101e6 100644 --- a/apps/files/l10n/sr.json +++ b/apps/files/l10n/sr.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Отпремање је отказано.", "Could not get result from server." : "Не могу да добијем резултат са сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Отпремање фајла је у току. Ако сада напустите страницу, отказаћете отпремање.", - "{new_name} already exists" : "{new_name} већ постоји", - "Could not create file" : "Не могу да створим фајл", - "Could not create folder" : "Не могу да створим фасциклу", "Actions" : "Радње", "Download" : "Преузми", "Select" : "Изабери", @@ -47,7 +44,10 @@ "Error moving file." : "Грешка при премештању фајла.", "Error moving file" : "Грешка при премештању фајла", "Error" : "Грешка", + "{new_name} already exists" : "{new_name} већ постоји", "Could not rename file" : "Не могу да преименујем фајл", + "Could not create file" : "Не могу да створим фајл", + "Could not create folder" : "Не могу да створим фасциклу", "Error deleting file." : "Грешка при брисању фајла.", "No entries in this folder match '{filter}'" : "У овој фасцикли ништа се не поклапа са '{filter}'", "Name" : "Назив", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} и {files}", "You don’t have permission to upload or create files here" : "Немате дозволе да овде отпремате или стварате фајлове", "_Uploading %n file_::_Uploading %n files_" : ["Отпремам %n фајл","Отпремам %n фајла","Отпремам %n фајлова"], + "New" : "Ново", "\"{name}\" is an invalid file name." : "\"{name}\" није исправан назив фајла.", "File name cannot be empty." : "Назив фајла не може бити празан.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "Складиште корисника {owner} је пуно. Фајлови се не могу ажурирати нити синхронизовати!", @@ -67,6 +68,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["се поклапа са '{filter}'","се поклапају са '{filter}'","се поклапа са '{filter}'"], "Favorited" : "Омиљено", "Favorite" : "Омиљени", + "Upload" : "Отпреми", + "Text file" : "текстуални фајл", + "Folder" : "фасцикла", + "New folder" : "Нова фасцикла", "An error occurred while trying to update the tags" : "Дошло је до грешке при покушају ажурирања ознака", "A new file or folder has been <strong>created</strong>" : "Нови фајл или фасцикла су <strong>направљени</strong>", "A file or folder has been <strong>changed</strong>" : "Фајл или фасцикла су <strong>измењени</strong>", @@ -93,12 +98,6 @@ "Settings" : "Поставке", "WebDAV" : "ВебДАВ", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Користите ову адресу да <a href=\"%s\" target=\"_blank\"> приступите фајловима преко ВебДАВ-а</a>", - "New" : "Ново", - "New text file" : "Нов текстуални фајл", - "Text file" : "текстуални фајл", - "New folder" : "Нова фасцикла", - "Folder" : "фасцикла", - "Upload" : "Отпреми", "Cancel upload" : "Откажи отпремање", "No files in here" : "Овде нема фајлова", "Upload some content or sync with your devices!" : "Отпремите неки садржај или синхронизујте са вашим уређајима!", diff --git a/apps/files/l10n/sr@latin.js b/apps/files/l10n/sr@latin.js index 28e317ff9be..b00575619e9 100644 --- a/apps/files/l10n/sr@latin.js +++ b/apps/files/l10n/sr@latin.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Otpremanje je otkazano.", "Could not get result from server." : "Ne mogu da dobijem rezultat sa servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, otkazaćete otpremanje.", - "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Ne mogu da stvorim fajl", - "Could not create folder" : "Ne mogu da stvorim fasciklu", "Download" : "Preuzmi", "Select" : "Izaberi", "Pending" : "Na čekanju", @@ -46,7 +43,10 @@ OC.L10N.register( "Error moving file." : "Greška pri premeštanju fajla.", "Error moving file" : "Greška pri premeštanju fajla", "Error" : "Greška", + "{new_name} already exists" : "{new_name} već postoji", "Could not rename file" : "Ne mogu da preimenujem fajl", + "Could not create file" : "Ne mogu da stvorim fajl", + "Could not create folder" : "Ne mogu da stvorim fasciklu", "Error deleting file." : "Greška pri brisanju fajla.", "No entries in this folder match '{filter}'" : "U ovoj fascikli ništa se ne poklapa sa '{filter}'", "Name" : "Naziv", @@ -57,6 +57,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Nemate dozvole da ovde otpremate ili stvarate fajlove", "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajla","Otpremam %n fajlova"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" nije ispravan naziv fajla.", "File name cannot be empty." : "Naziv fajla ne može biti prazan.", "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno. Fajlovi više ne mogu biti ažurirani ni sinhronizovani!", @@ -64,6 +65,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["se poklapa sa '{filter}'","se poklapaju sa '{filter}'","se poklapa sa '{filter}'"], "Favorited" : "Omiljeno", "Favorite" : "Omiljeni", + "Upload" : "Otpremi", + "Text file" : "tekstualni fajl", + "Folder" : "fascikla", + "New folder" : "Nova fascikla", "An error occurred while trying to update the tags" : "Došlo je do greške pri pokušaju ažuriranja oznaka", "A new file or folder has been <strong>created</strong>" : "Novi fajl ili fascikla su <strong>napravljeni</strong>", "A file or folder has been <strong>changed</strong>" : "Fajl ili fascikla su <strong>izmenjeni</strong>", @@ -90,12 +95,6 @@ OC.L10N.register( "Settings" : "Postavke", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristite ovu adresu da <a href=\"%s\" target=\"_blank\"> pristupite fajlovima preko WebDAV-a</a>", - "New" : "Novo", - "New text file" : "Nov tekstualni fajl", - "Text file" : "tekstualni fajl", - "New folder" : "Nova fascikla", - "Folder" : "fascikla", - "Upload" : "Otpremi", "Cancel upload" : "Otkaži otpremanje", "No files in here" : "Ovde nema fajlova", "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa vašim uređajima!", diff --git a/apps/files/l10n/sr@latin.json b/apps/files/l10n/sr@latin.json index 5f31ed2547c..b6ffda5aa6b 100644 --- a/apps/files/l10n/sr@latin.json +++ b/apps/files/l10n/sr@latin.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Otpremanje je otkazano.", "Could not get result from server." : "Ne mogu da dobijem rezultat sa servera.", "File upload is in progress. Leaving the page now will cancel the upload." : "Otpremanje fajla je u toku. Ako sada napustite stranicu, otkazaćete otpremanje.", - "{new_name} already exists" : "{new_name} već postoji", - "Could not create file" : "Ne mogu da stvorim fajl", - "Could not create folder" : "Ne mogu da stvorim fasciklu", "Download" : "Preuzmi", "Select" : "Izaberi", "Pending" : "Na čekanju", @@ -44,7 +41,10 @@ "Error moving file." : "Greška pri premeštanju fajla.", "Error moving file" : "Greška pri premeštanju fajla", "Error" : "Greška", + "{new_name} already exists" : "{new_name} već postoji", "Could not rename file" : "Ne mogu da preimenujem fajl", + "Could not create file" : "Ne mogu da stvorim fajl", + "Could not create folder" : "Ne mogu da stvorim fasciklu", "Error deleting file." : "Greška pri brisanju fajla.", "No entries in this folder match '{filter}'" : "U ovoj fascikli ništa se ne poklapa sa '{filter}'", "Name" : "Naziv", @@ -55,6 +55,7 @@ "{dirs} and {files}" : "{dirs} i {files}", "You don’t have permission to upload or create files here" : "Nemate dozvole da ovde otpremate ili stvarate fajlove", "_Uploading %n file_::_Uploading %n files_" : ["Otpremam %n fajl","Otpremam %n fajla","Otpremam %n fajlova"], + "New" : "Novo", "\"{name}\" is an invalid file name." : "\"{name}\" nije ispravan naziv fajla.", "File name cannot be empty." : "Naziv fajla ne može biti prazan.", "Your storage is full, files can not be updated or synced anymore!" : "Vaše skladište je puno. Fajlovi više ne mogu biti ažurirani ni sinhronizovani!", @@ -62,6 +63,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["se poklapa sa '{filter}'","se poklapaju sa '{filter}'","se poklapa sa '{filter}'"], "Favorited" : "Omiljeno", "Favorite" : "Omiljeni", + "Upload" : "Otpremi", + "Text file" : "tekstualni fajl", + "Folder" : "fascikla", + "New folder" : "Nova fascikla", "An error occurred while trying to update the tags" : "Došlo je do greške pri pokušaju ažuriranja oznaka", "A new file or folder has been <strong>created</strong>" : "Novi fajl ili fascikla su <strong>napravljeni</strong>", "A file or folder has been <strong>changed</strong>" : "Fajl ili fascikla su <strong>izmenjeni</strong>", @@ -88,12 +93,6 @@ "Settings" : "Postavke", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Koristite ovu adresu da <a href=\"%s\" target=\"_blank\"> pristupite fajlovima preko WebDAV-a</a>", - "New" : "Novo", - "New text file" : "Nov tekstualni fajl", - "Text file" : "tekstualni fajl", - "New folder" : "Nova fascikla", - "Folder" : "fascikla", - "Upload" : "Otpremi", "Cancel upload" : "Otkaži otpremanje", "No files in here" : "Ovde nema fajlova", "Upload some content or sync with your devices!" : "Otpremite neki sadržaj ili sinhronizujte sa vašim uređajima!", diff --git a/apps/files/l10n/sv.js b/apps/files/l10n/sv.js index c6b64eab029..5f9a08404d7 100644 --- a/apps/files/l10n/sv.js +++ b/apps/files/l10n/sv.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Uppladdning avbruten.", "Could not get result from server." : "Gick inte att hämta resultat från server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", - "{new_name} already exists" : "{new_name} finns redan", - "Could not create file" : "Kunde ej skapa fil", - "Could not create folder" : "Kunde ej skapa katalog", "Actions" : "Åtgärder", "Download" : "Ladda ner", "Select" : "Välj", @@ -47,7 +44,10 @@ OC.L10N.register( "Error moving file." : "Fel vid flytt av fil.", "Error moving file" : "Fel uppstod vid flyttning av fil", "Error" : "Fel", + "{new_name} already exists" : "{new_name} finns redan", "Could not rename file" : "Kan ej byta filnamn", + "Could not create file" : "Kunde ej skapa fil", + "Could not create folder" : "Kunde ej skapa katalog", "Error deleting file." : "Kunde inte ta bort filen.", "Name" : "Namn", "Size" : "Storlek", @@ -57,12 +57,17 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} och {files}", "You don’t have permission to upload or create files here" : "Du har ej tillåtelse att ladda upp eller skapa filer här", "_Uploading %n file_::_Uploading %n files_" : ["Laddar upp %n fil","Laddar upp %n filer"], + "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" är ett ogiltligt filnamn.", "File name cannot be empty." : "Filnamn kan inte vara tomt.", "Your storage is full, files can not be updated or synced anymore!" : "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", "Your storage is almost full ({usedSpacePercent}%)" : "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)", "Favorited" : "Favoritiserad", "Favorite" : "Favorit", + "Upload" : "Ladda upp", + "Text file" : "Textfil", + "Folder" : "Mapp", + "New folder" : "Ny mapp", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapp har blivit <strong>skapad</strong>", "A file or folder has been <strong>changed</strong>" : "En ny fil eller mapp har blivit <strong>ändrad</strong>", "A file or folder has been <strong>deleted</strong>" : "En ny fil eller mapp har blivit <strong>raderad</strong>", @@ -86,12 +91,6 @@ OC.L10N.register( "Settings" : "Inställningar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Använd denna adress till <a href=\"%s\" target=\"_blank\">nå dina Filer via WebDAV</a>", - "New" : "Ny", - "New text file" : "Ny textfil", - "Text file" : "Textfil", - "New folder" : "Ny mapp", - "Folder" : "Mapp", - "Upload" : "Ladda upp", "Cancel upload" : "Avbryt uppladdning", "Upload some content or sync with your devices!" : "Ladda upp innehåll eller synkronisera med dina enheter!", "Select all" : "Välj allt", diff --git a/apps/files/l10n/sv.json b/apps/files/l10n/sv.json index c752155dbb9..e6775948cf6 100644 --- a/apps/files/l10n/sv.json +++ b/apps/files/l10n/sv.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Uppladdning avbruten.", "Could not get result from server." : "Gick inte att hämta resultat från server.", "File upload is in progress. Leaving the page now will cancel the upload." : "Filuppladdning pågår. Lämnar du sidan så avbryts uppladdningen.", - "{new_name} already exists" : "{new_name} finns redan", - "Could not create file" : "Kunde ej skapa fil", - "Could not create folder" : "Kunde ej skapa katalog", "Actions" : "Åtgärder", "Download" : "Ladda ner", "Select" : "Välj", @@ -45,7 +42,10 @@ "Error moving file." : "Fel vid flytt av fil.", "Error moving file" : "Fel uppstod vid flyttning av fil", "Error" : "Fel", + "{new_name} already exists" : "{new_name} finns redan", "Could not rename file" : "Kan ej byta filnamn", + "Could not create file" : "Kunde ej skapa fil", + "Could not create folder" : "Kunde ej skapa katalog", "Error deleting file." : "Kunde inte ta bort filen.", "Name" : "Namn", "Size" : "Storlek", @@ -55,12 +55,17 @@ "{dirs} and {files}" : "{dirs} och {files}", "You don’t have permission to upload or create files here" : "Du har ej tillåtelse att ladda upp eller skapa filer här", "_Uploading %n file_::_Uploading %n files_" : ["Laddar upp %n fil","Laddar upp %n filer"], + "New" : "Ny", "\"{name}\" is an invalid file name." : "\"{name}\" är ett ogiltligt filnamn.", "File name cannot be empty." : "Filnamn kan inte vara tomt.", "Your storage is full, files can not be updated or synced anymore!" : "Ditt lagringsutrymme är fullt, filer kan inte längre uppdateras eller synkroniseras!", "Your storage is almost full ({usedSpacePercent}%)" : "Ditt lagringsutrymme är nästan fullt ({usedSpacePercent}%)", "Favorited" : "Favoritiserad", "Favorite" : "Favorit", + "Upload" : "Ladda upp", + "Text file" : "Textfil", + "Folder" : "Mapp", + "New folder" : "Ny mapp", "A new file or folder has been <strong>created</strong>" : "En ny fil eller mapp har blivit <strong>skapad</strong>", "A file or folder has been <strong>changed</strong>" : "En ny fil eller mapp har blivit <strong>ändrad</strong>", "A file or folder has been <strong>deleted</strong>" : "En ny fil eller mapp har blivit <strong>raderad</strong>", @@ -84,12 +89,6 @@ "Settings" : "Inställningar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Använd denna adress till <a href=\"%s\" target=\"_blank\">nå dina Filer via WebDAV</a>", - "New" : "Ny", - "New text file" : "Ny textfil", - "Text file" : "Textfil", - "New folder" : "Ny mapp", - "Folder" : "Mapp", - "Upload" : "Ladda upp", "Cancel upload" : "Avbryt uppladdning", "Upload some content or sync with your devices!" : "Ladda upp innehåll eller synkronisera med dina enheter!", "Select all" : "Välj allt", diff --git a/apps/files/l10n/ta_IN.js b/apps/files/l10n/ta_IN.js index c12b3fc948e..c8453338084 100644 --- a/apps/files/l10n/ta_IN.js +++ b/apps/files/l10n/ta_IN.js @@ -2,6 +2,8 @@ OC.L10N.register( "files", { "Files" : "கோப்புகள்", + "Upload" : "பதிவேற்று", + "New folder" : "புதிய கோப்புறை", "A new file or folder has been <strong>created</strong>" : "ஒரு புதிய கோப்புறை அல்லது ஆவணம் <strong> உருவாக்கப்பட்டுள்ளது.</strong>", "A file or folder has been <strong>changed</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong>மாற்றம் செய்யப்பட்டுள்ளது.</strong>", "A file or folder has been <strong>deleted</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong> நீக்கப்பட்டுள்ளது. </strong>", @@ -11,8 +13,6 @@ OC.L10N.register( "%2$s changed %1$s" : "%2$s %1$s 'ல் மாற்றம் செய்துள்ளார். ", "You deleted %1$s" : "நீங்கள் %1$s 'ஐ நீக்கி உள்ளீர்கள்.", "%2$s deleted %1$s" : "%2$s , %1$s 'ஐ நீக்கியுள்ளார்.", - "Settings" : "அமைப்புகள்", - "New folder" : "புதிய கோப்புறை", - "Upload" : "பதிவேற்று" + "Settings" : "அமைப்புகள்" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/ta_IN.json b/apps/files/l10n/ta_IN.json index 086a3416614..392601a3756 100644 --- a/apps/files/l10n/ta_IN.json +++ b/apps/files/l10n/ta_IN.json @@ -1,5 +1,7 @@ { "translations": { "Files" : "கோப்புகள்", + "Upload" : "பதிவேற்று", + "New folder" : "புதிய கோப்புறை", "A new file or folder has been <strong>created</strong>" : "ஒரு புதிய கோப்புறை அல்லது ஆவணம் <strong> உருவாக்கப்பட்டுள்ளது.</strong>", "A file or folder has been <strong>changed</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong>மாற்றம் செய்யப்பட்டுள்ளது.</strong>", "A file or folder has been <strong>deleted</strong>" : "ஒரு கோப்புறை அல்லது ஆவணம் <strong> நீக்கப்பட்டுள்ளது. </strong>", @@ -9,8 +11,6 @@ "%2$s changed %1$s" : "%2$s %1$s 'ல் மாற்றம் செய்துள்ளார். ", "You deleted %1$s" : "நீங்கள் %1$s 'ஐ நீக்கி உள்ளீர்கள்.", "%2$s deleted %1$s" : "%2$s , %1$s 'ஐ நீக்கியுள்ளார்.", - "Settings" : "அமைப்புகள்", - "New folder" : "புதிய கோப்புறை", - "Upload" : "பதிவேற்று" + "Settings" : "அமைப்புகள்" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/ta_LK.js b/apps/files/l10n/ta_LK.js index ef41c862b4c..90a955e135b 100644 --- a/apps/files/l10n/ta_LK.js +++ b/apps/files/l10n/ta_LK.js @@ -14,25 +14,25 @@ OC.L10N.register( "Close" : "மூடுக", "Upload cancelled." : "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது", "File upload is in progress. Leaving the page now will cancel the upload." : "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.", - "{new_name} already exists" : "{new_name} ஏற்கனவே உள்ளது", "Actions" : "செயல்கள்", "Download" : "பதிவிறக்குக", "Select" : "தெரிக", "Pending" : "நிலுவையிலுள்ள", "Error" : "வழு", + "{new_name} already exists" : "{new_name} ஏற்கனவே உள்ளது", "Name" : "பெயர்", "Size" : "அளவு", "Modified" : "மாற்றப்பட்டது", + "New" : "புதிய", "Favorite" : "விருப்பமான", + "Upload" : "பதிவேற்றுக", + "Text file" : "கோப்பு உரை", + "Folder" : "கோப்புறை", "File handling" : "கோப்பு கையாளுதல்", "Maximum upload size" : "பதிவேற்றக்கூடிய ஆகக்கூடிய அளவு ", "max. possible: " : "ஆகக் கூடியது:", "Save" : "சேமிக்க ", "Settings" : "அமைப்புகள்", - "New" : "புதிய", - "Text file" : "கோப்பு உரை", - "Folder" : "கோப்புறை", - "Upload" : "பதிவேற்றுக", "Cancel upload" : "பதிவேற்றலை இரத்து செய்க", "Delete" : "நீக்குக", "Upload too large" : "பதிவேற்றல் மிகப்பெரியது", diff --git a/apps/files/l10n/ta_LK.json b/apps/files/l10n/ta_LK.json index a233c016cad..64220b86744 100644 --- a/apps/files/l10n/ta_LK.json +++ b/apps/files/l10n/ta_LK.json @@ -12,25 +12,25 @@ "Close" : "மூடுக", "Upload cancelled." : "பதிவேற்றல் இரத்து செய்யப்பட்டுள்ளது", "File upload is in progress. Leaving the page now will cancel the upload." : "கோப்பு பதிவேற்றம் செயல்பாட்டில் உள்ளது. இந்தப் பக்கத்திலிருந்து வெறியேறுவதானது பதிவேற்றலை இரத்து செய்யும்.", - "{new_name} already exists" : "{new_name} ஏற்கனவே உள்ளது", "Actions" : "செயல்கள்", "Download" : "பதிவிறக்குக", "Select" : "தெரிக", "Pending" : "நிலுவையிலுள்ள", "Error" : "வழு", + "{new_name} already exists" : "{new_name} ஏற்கனவே உள்ளது", "Name" : "பெயர்", "Size" : "அளவு", "Modified" : "மாற்றப்பட்டது", + "New" : "புதிய", "Favorite" : "விருப்பமான", + "Upload" : "பதிவேற்றுக", + "Text file" : "கோப்பு உரை", + "Folder" : "கோப்புறை", "File handling" : "கோப்பு கையாளுதல்", "Maximum upload size" : "பதிவேற்றக்கூடிய ஆகக்கூடிய அளவு ", "max. possible: " : "ஆகக் கூடியது:", "Save" : "சேமிக்க ", "Settings" : "அமைப்புகள்", - "New" : "புதிய", - "Text file" : "கோப்பு உரை", - "Folder" : "கோப்புறை", - "Upload" : "பதிவேற்றுக", "Cancel upload" : "பதிவேற்றலை இரத்து செய்க", "Delete" : "நீக்குக", "Upload too large" : "பதிவேற்றல் மிகப்பெரியது", diff --git a/apps/files/l10n/te.js b/apps/files/l10n/te.js index 481c994e301..51f6b1c5291 100644 --- a/apps/files/l10n/te.js +++ b/apps/files/l10n/te.js @@ -5,10 +5,10 @@ OC.L10N.register( "Error" : "పొరపాటు", "Name" : "పేరు", "Size" : "పరిమాణం", + "Folder" : "సంచయం", + "New folder" : "కొత్త సంచయం", "Save" : "భద్రపరచు", "Settings" : "అమరికలు", - "New folder" : "కొత్త సంచయం", - "Folder" : "సంచయం", "Delete" : "తొలగించు" }, "nplurals=2; plural=(n != 1);"); diff --git a/apps/files/l10n/te.json b/apps/files/l10n/te.json index a836ec02fa8..fa7efa9d702 100644 --- a/apps/files/l10n/te.json +++ b/apps/files/l10n/te.json @@ -3,10 +3,10 @@ "Error" : "పొరపాటు", "Name" : "పేరు", "Size" : "పరిమాణం", + "Folder" : "సంచయం", + "New folder" : "కొత్త సంచయం", "Save" : "భద్రపరచు", "Settings" : "అమరికలు", - "New folder" : "కొత్త సంచయం", - "Folder" : "సంచయం", "Delete" : "తొలగించు" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/apps/files/l10n/th_TH.js b/apps/files/l10n/th_TH.js index 2529d3e8ca8..2b092551a17 100644 --- a/apps/files/l10n/th_TH.js +++ b/apps/files/l10n/th_TH.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "การอัพโหลดถูกยกเลิก", "Could not get result from server." : "ไม่สามารถรับผลลัพธ์จากเซิร์ฟเวอร์", "File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", - "{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ", - "Could not create file" : "ไม่สามารถสร้างไฟล์", - "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์", "Actions" : "การกระทำ", "Download" : "ดาวน์โหลด", "Select" : "เลือก", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", "Error moving file" : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", "Error" : "ข้อผิดพลาด", + "{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ", "Could not rename file" : "ไม่สามารถเปลี่ยนชื่อไฟล์", + "Could not create file" : "ไม่สามารถสร้างไฟล์", + "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์", "Error deleting file." : "เกิดข้อผิดพลาดในการลบไฟล์", "No entries in this folder match '{filter}'" : "ไม่มีรายการในโฟลเดอร์นี้ที่ตรงกับ '{filter}'", "Name" : "ชื่อ", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} และ {files}", "You don’t have permission to upload or create files here" : "คุณไม่ได้รับอนุญาตให้อัพโหลดหรือสร้างไฟล์ที่นี่", "_Uploading %n file_::_Uploading %n files_" : ["อัพโหลด %n ไฟล์"], + "New" : "ใหม่", "\"{name}\" is an invalid file name." : "\"{name}\" เป็นชื่อไฟล์ที่ไม่ถูกต้อง", "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", "Storage of {owner} is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของ {owner} เต็มแล้ว ไฟล์ไม่สามารถอัพเดทหรือประสานข้อมูลได้อีก!", @@ -71,6 +72,12 @@ OC.L10N.register( "_%n byte_::_%n bytes_" : ["%n ไบต์"], "Favorited" : "รายการโปรด", "Favorite" : "รายการโปรด", + "{newname} already exists" : "{newname} ถูกใช้ไปแล้ว", + "Upload" : "อัพโหลด", + "Text file" : "ไฟล์ข้อความ", + "New text file.txt" : "ไฟล์ข้อความใหม่ .txt", + "Folder" : "แฟ้มเอกสาร", + "New folder" : "โฟลเดอร์ใหม่", "An error occurred while trying to update the tags" : "เกิดข้อผิดพลาดขณะที่พยายามจะปรับปรุงแท็ก", "A new file or folder has been <strong>created</strong>" : "มีไฟล์ใหม่หรือโฟลเดอร์ได้ถูก <strong>สร้างขึ้น!</strong>", "A file or folder has been <strong>changed</strong>" : "มีไฟล์หรือโฟลเดอร์ได้ถูก <strong>เปลี่ยน!</strong>", @@ -98,12 +105,6 @@ OC.L10N.register( "Settings" : "ตั้งค่า", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "ใช้ที่อยู่นี้เพื่อ <a href=\"%s\" target=\"_blank\">เข้าถึงไฟล์ของคุณผ่าน WebDAV</a>", - "New" : "ใหม่", - "New text file" : "ไฟล์ข้อความใหม่", - "Text file" : "ไฟล์ข้อความ", - "New folder" : "โฟลเดอร์ใหม่", - "Folder" : "แฟ้มเอกสาร", - "Upload" : "อัพโหลด", "Cancel upload" : "ยกเลิกการอัพโหลด", "No files in here" : "ไม่มีไฟล์ที่นี่", "Upload some content or sync with your devices!" : "อัพโหลดเนื้อหาบางส่วนหรือประสานข้อมูลกับอุปกรณ์ของคุณ! อีกครั้ง", diff --git a/apps/files/l10n/th_TH.json b/apps/files/l10n/th_TH.json index cf4fc24fc0a..3125adc820f 100644 --- a/apps/files/l10n/th_TH.json +++ b/apps/files/l10n/th_TH.json @@ -34,9 +34,6 @@ "Upload cancelled." : "การอัพโหลดถูกยกเลิก", "Could not get result from server." : "ไม่สามารถรับผลลัพธ์จากเซิร์ฟเวอร์", "File upload is in progress. Leaving the page now will cancel the upload." : "การอัพโหลดไฟล์กำลังอยู่ในระหว่างดำเนินการ การออกจากหน้าเว็บนี้จะทำให้การอัพโหลดถูกยกเลิก", - "{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ", - "Could not create file" : "ไม่สามารถสร้างไฟล์", - "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์", "Actions" : "การกระทำ", "Download" : "ดาวน์โหลด", "Select" : "เลือก", @@ -47,7 +44,10 @@ "Error moving file." : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", "Error moving file" : "ข้อผิดพลาดในการเคลื่อนย้ายไฟล์", "Error" : "ข้อผิดพลาด", + "{new_name} already exists" : "{new_name} มีอยู่แล้วในระบบ", "Could not rename file" : "ไม่สามารถเปลี่ยนชื่อไฟล์", + "Could not create file" : "ไม่สามารถสร้างไฟล์", + "Could not create folder" : "ไม่สามารถสร้างโฟลเดอร์", "Error deleting file." : "เกิดข้อผิดพลาดในการลบไฟล์", "No entries in this folder match '{filter}'" : "ไม่มีรายการในโฟลเดอร์นี้ที่ตรงกับ '{filter}'", "Name" : "ชื่อ", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} และ {files}", "You don’t have permission to upload or create files here" : "คุณไม่ได้รับอนุญาตให้อัพโหลดหรือสร้างไฟล์ที่นี่", "_Uploading %n file_::_Uploading %n files_" : ["อัพโหลด %n ไฟล์"], + "New" : "ใหม่", "\"{name}\" is an invalid file name." : "\"{name}\" เป็นชื่อไฟล์ที่ไม่ถูกต้อง", "File name cannot be empty." : "ชื่อไฟล์ไม่สามารถเว้นว่างได้", "Storage of {owner} is full, files can not be updated or synced anymore!" : "พื้นที่จัดเก็บข้อมูลของ {owner} เต็มแล้ว ไฟล์ไม่สามารถอัพเดทหรือประสานข้อมูลได้อีก!", @@ -69,6 +70,12 @@ "_%n byte_::_%n bytes_" : ["%n ไบต์"], "Favorited" : "รายการโปรด", "Favorite" : "รายการโปรด", + "{newname} already exists" : "{newname} ถูกใช้ไปแล้ว", + "Upload" : "อัพโหลด", + "Text file" : "ไฟล์ข้อความ", + "New text file.txt" : "ไฟล์ข้อความใหม่ .txt", + "Folder" : "แฟ้มเอกสาร", + "New folder" : "โฟลเดอร์ใหม่", "An error occurred while trying to update the tags" : "เกิดข้อผิดพลาดขณะที่พยายามจะปรับปรุงแท็ก", "A new file or folder has been <strong>created</strong>" : "มีไฟล์ใหม่หรือโฟลเดอร์ได้ถูก <strong>สร้างขึ้น!</strong>", "A file or folder has been <strong>changed</strong>" : "มีไฟล์หรือโฟลเดอร์ได้ถูก <strong>เปลี่ยน!</strong>", @@ -96,12 +103,6 @@ "Settings" : "ตั้งค่า", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "ใช้ที่อยู่นี้เพื่อ <a href=\"%s\" target=\"_blank\">เข้าถึงไฟล์ของคุณผ่าน WebDAV</a>", - "New" : "ใหม่", - "New text file" : "ไฟล์ข้อความใหม่", - "Text file" : "ไฟล์ข้อความ", - "New folder" : "โฟลเดอร์ใหม่", - "Folder" : "แฟ้มเอกสาร", - "Upload" : "อัพโหลด", "Cancel upload" : "ยกเลิกการอัพโหลด", "No files in here" : "ไม่มีไฟล์ที่นี่", "Upload some content or sync with your devices!" : "อัพโหลดเนื้อหาบางส่วนหรือประสานข้อมูลกับอุปกรณ์ของคุณ! อีกครั้ง", diff --git a/apps/files/l10n/tr.js b/apps/files/l10n/tr.js index 345b9ffd9fb..157280b696c 100644 --- a/apps/files/l10n/tr.js +++ b/apps/files/l10n/tr.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Yükleme iptal edildi.", "Could not get result from server." : "Sunucudan sonuç alınamadı.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.", - "{new_name} already exists" : "{new_name} zaten mevcut", - "Could not create file" : "Dosya oluşturulamadı", - "Could not create folder" : "Klasör oluşturulamadı", "Actions" : "Eylemler", "Download" : "İndir", "Select" : "Seç", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "Dosya taşıma hatası.", "Error moving file" : "Dosya taşıma hatası", "Error" : "Hata", + "{new_name} already exists" : "{new_name} zaten mevcut", "Could not rename file" : "Dosya adlandırılamadı", + "Could not create file" : "Dosya oluşturulamadı", + "Could not create folder" : "Klasör oluşturulamadı", "Error deleting file." : "Dosya silinirken hata.", "No entries in this folder match '{filter}'" : "Bu klasörde hiçbir girdi '{filter}' ile eşleşmiyor", "Name" : "İsim", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} ve {files}", "You don’t have permission to upload or create files here" : "Buraya dosya yükleme veya oluşturma izniniz yok", "_Uploading %n file_::_Uploading %n files_" : ["%n dosya yükleniyor","%n dosya yükleniyor"], + "New" : "Yeni", "\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.", "File name cannot be empty." : "Dosya adı boş olamaz.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} depolama alanı dolu, artık dosyalar güncellenmeyecek yada eşitlenmeyecek.", @@ -67,8 +68,14 @@ OC.L10N.register( "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"], + "Path" : "Yol", + "_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"], "Favorited" : "Sık kullanılanlara eklendi", "Favorite" : "Sık kullanılan", + "Upload" : "Yükle", + "Text file" : "Metin dosyası", + "Folder" : "Klasör", + "New folder" : "Yeni klasör", "An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu", "A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>", "A file or folder has been <strong>changed</strong>" : "Bir dosya veya klasör <strong>değiştirildi</strong>", @@ -90,17 +97,12 @@ OC.L10N.register( "File handling" : "Dosya işlemleri", "Maximum upload size" : "Azami yükleme boyutu", "max. possible: " : "mümkün olan en fazla: ", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "PHP-FPM ile bu değerin kaydedildikten sonra etkili olabilmesi için 5 dakika gerekebilir.", "Save" : "Kaydet", "Can not be edited from here due to insufficient permissions." : "Yetersiz izinler buradan düzenlenemez.", "Settings" : "Ayarlar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın", - "New" : "Yeni", - "New text file" : "Yeni metin dosyası", - "Text file" : "Metin dosyası", - "New folder" : "Yeni klasör", - "Folder" : "Klasör", - "Upload" : "Yükle", "Cancel upload" : "Yüklemeyi iptal et", "No files in here" : "Burada hiç dosya yok", "Upload some content or sync with your devices!" : "Bir şeyler yükleyin veya aygıtlarınızla eşitleyin!", diff --git a/apps/files/l10n/tr.json b/apps/files/l10n/tr.json index fc4ca146881..8a15f7ff315 100644 --- a/apps/files/l10n/tr.json +++ b/apps/files/l10n/tr.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Yükleme iptal edildi.", "Could not get result from server." : "Sunucudan sonuç alınamadı.", "File upload is in progress. Leaving the page now will cancel the upload." : "Dosya yükleme işlemi sürüyor. Şu anda sayfadan ayrılmak yükleme işlemini iptal edecek.", - "{new_name} already exists" : "{new_name} zaten mevcut", - "Could not create file" : "Dosya oluşturulamadı", - "Could not create folder" : "Klasör oluşturulamadı", "Actions" : "Eylemler", "Download" : "İndir", "Select" : "Seç", @@ -47,7 +44,10 @@ "Error moving file." : "Dosya taşıma hatası.", "Error moving file" : "Dosya taşıma hatası", "Error" : "Hata", + "{new_name} already exists" : "{new_name} zaten mevcut", "Could not rename file" : "Dosya adlandırılamadı", + "Could not create file" : "Dosya oluşturulamadı", + "Could not create folder" : "Klasör oluşturulamadı", "Error deleting file." : "Dosya silinirken hata.", "No entries in this folder match '{filter}'" : "Bu klasörde hiçbir girdi '{filter}' ile eşleşmiyor", "Name" : "İsim", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} ve {files}", "You don’t have permission to upload or create files here" : "Buraya dosya yükleme veya oluşturma izniniz yok", "_Uploading %n file_::_Uploading %n files_" : ["%n dosya yükleniyor","%n dosya yükleniyor"], + "New" : "Yeni", "\"{name}\" is an invalid file name." : "\"{name}\" geçersiz bir dosya adı.", "File name cannot be empty." : "Dosya adı boş olamaz.", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} depolama alanı dolu, artık dosyalar güncellenmeyecek yada eşitlenmeyecek.", @@ -65,8 +66,14 @@ "Storage of {owner} is almost full ({usedSpacePercent}%)" : " {owner} depolama alanı neredeyse dolu ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "Depolama alanınız neredeyse dolu (%{usedSpacePercent})", "_matches '{filter}'_::_match '{filter}'_" : ["'{filter}' ile eşleşiyor","'{filter}' ile eşleşiyor"], + "Path" : "Yol", + "_%n byte_::_%n bytes_" : ["%n bayt","%n bayt"], "Favorited" : "Sık kullanılanlara eklendi", "Favorite" : "Sık kullanılan", + "Upload" : "Yükle", + "Text file" : "Metin dosyası", + "Folder" : "Klasör", + "New folder" : "Yeni klasör", "An error occurred while trying to update the tags" : "Etiketler güncellenmeye çalışılırken bir hata oluştu", "A new file or folder has been <strong>created</strong>" : "Yeni bir dosya veya klasör <strong>oluşturuldu</strong>", "A file or folder has been <strong>changed</strong>" : "Bir dosya veya klasör <strong>değiştirildi</strong>", @@ -88,17 +95,12 @@ "File handling" : "Dosya işlemleri", "Maximum upload size" : "Azami yükleme boyutu", "max. possible: " : "mümkün olan en fazla: ", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "PHP-FPM ile bu değerin kaydedildikten sonra etkili olabilmesi için 5 dakika gerekebilir.", "Save" : "Kaydet", "Can not be edited from here due to insufficient permissions." : "Yetersiz izinler buradan düzenlenemez.", "Settings" : "Ayarlar", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "<a href=\"%s\" target=\"_blank\">Dosyalarınıza WebDAV aracılığıyla erişmek için</a> bu adresi kullanın", - "New" : "Yeni", - "New text file" : "Yeni metin dosyası", - "Text file" : "Metin dosyası", - "New folder" : "Yeni klasör", - "Folder" : "Klasör", - "Upload" : "Yükle", "Cancel upload" : "Yüklemeyi iptal et", "No files in here" : "Burada hiç dosya yok", "Upload some content or sync with your devices!" : "Bir şeyler yükleyin veya aygıtlarınızla eşitleyin!", diff --git a/apps/files/l10n/ug.js b/apps/files/l10n/ug.js index 8d8dbe886c9..8d6dabd50d7 100644 --- a/apps/files/l10n/ug.js +++ b/apps/files/l10n/ug.js @@ -14,23 +14,23 @@ OC.L10N.register( "Close" : "ياپ", "Upload cancelled." : "يۈكلەشتىن ۋاز كەچتى.", "File upload is in progress. Leaving the page now will cancel the upload." : "ھۆججەت يۈكلەش مەشغۇلاتى ئېلىپ بېرىلىۋاتىدۇ. Leaving the page now will cancel the upload.", - "{new_name} already exists" : "{new_name} مەۋجۇت", "Actions" : "مەشغۇلاتلار", "Download" : "چۈشۈر", "Pending" : "كۈتۈۋاتىدۇ", "Error" : "خاتالىق", + "{new_name} already exists" : "{new_name} مەۋجۇت", "Name" : "ئاتى", "Size" : "چوڭلۇقى", "Modified" : "ئۆزگەرتكەن", + "New" : "يېڭى", "Favorite" : "يىغقۇچ", + "Upload" : "يۈكلە", + "Text file" : "تېكىست ھۆججەت", + "Folder" : "قىسقۇچ", + "New folder" : "يېڭى قىسقۇچ", "Save" : "ساقلا", "Settings" : "تەڭشەكلەر", "WebDAV" : "WebDAV", - "New" : "يېڭى", - "Text file" : "تېكىست ھۆججەت", - "New folder" : "يېڭى قىسقۇچ", - "Folder" : "قىسقۇچ", - "Upload" : "يۈكلە", "Cancel upload" : "يۈكلەشتىن ۋاز كەچ", "Delete" : "ئۆچۈر", "Upload too large" : "يۈكلەندىغىنى بەك چوڭ" diff --git a/apps/files/l10n/ug.json b/apps/files/l10n/ug.json index 0ace5900d0e..86bd8391af2 100644 --- a/apps/files/l10n/ug.json +++ b/apps/files/l10n/ug.json @@ -12,23 +12,23 @@ "Close" : "ياپ", "Upload cancelled." : "يۈكلەشتىن ۋاز كەچتى.", "File upload is in progress. Leaving the page now will cancel the upload." : "ھۆججەت يۈكلەش مەشغۇلاتى ئېلىپ بېرىلىۋاتىدۇ. Leaving the page now will cancel the upload.", - "{new_name} already exists" : "{new_name} مەۋجۇت", "Actions" : "مەشغۇلاتلار", "Download" : "چۈشۈر", "Pending" : "كۈتۈۋاتىدۇ", "Error" : "خاتالىق", + "{new_name} already exists" : "{new_name} مەۋجۇت", "Name" : "ئاتى", "Size" : "چوڭلۇقى", "Modified" : "ئۆزگەرتكەن", + "New" : "يېڭى", "Favorite" : "يىغقۇچ", + "Upload" : "يۈكلە", + "Text file" : "تېكىست ھۆججەت", + "Folder" : "قىسقۇچ", + "New folder" : "يېڭى قىسقۇچ", "Save" : "ساقلا", "Settings" : "تەڭشەكلەر", "WebDAV" : "WebDAV", - "New" : "يېڭى", - "Text file" : "تېكىست ھۆججەت", - "New folder" : "يېڭى قىسقۇچ", - "Folder" : "قىسقۇچ", - "Upload" : "يۈكلە", "Cancel upload" : "يۈكلەشتىن ۋاز كەچ", "Delete" : "ئۆچۈر", "Upload too large" : "يۈكلەندىغىنى بەك چوڭ" diff --git a/apps/files/l10n/uk.js b/apps/files/l10n/uk.js index f695cfb49e5..a06cc2f3d73 100644 --- a/apps/files/l10n/uk.js +++ b/apps/files/l10n/uk.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "Вивантаження скасовано.", "Could not get result from server." : "Не вдалося отримати результат від сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується вивантаження файлу. Закриття цієї сторінки приведе до скасування вивантаження.", - "{new_name} already exists" : "{new_name} вже існує", - "Could not create file" : "Не вдалося створити файл", - "Could not create folder" : "Не вдалося створити теку", "Actions" : "Дії", "Download" : "Завантажити", "Select" : "Оберіть", @@ -48,7 +45,10 @@ OC.L10N.register( "Error moving file." : "Помилка переміщення файлу.", "Error moving file" : "Помилка переміщення файлу", "Error" : "Помилка", + "{new_name} already exists" : "{new_name} вже існує", "Could not rename file" : "Неможливо перейменувати файл", + "Could not create file" : "Не вдалося створити файл", + "Could not create folder" : "Не вдалося створити теку", "Error deleting file." : "Помилка видалення файлу.", "No entries in this folder match '{filter}'" : "Нічого не знайдено в цій теці '{filter}'", "Name" : "Ім'я", @@ -59,6 +59,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} і {files}", "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів", "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів"], + "New" : "Створити", "\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.", "File name cannot be empty." : " Ім'я файлу не може бути порожнім.", "Your storage is full, files can not be updated or synced anymore!" : "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !", @@ -66,6 +67,10 @@ OC.L10N.register( "_matches '{filter}'_::_match '{filter}'_" : ["знайдено '{filter}'","знайдено '{filter}'","знайдено '{filter}'"], "Favorited" : "Улюблений", "Favorite" : "Улюблений", + "Upload" : "Вивантажити", + "Text file" : "Текстовий файл", + "Folder" : "Тека", + "New folder" : "Нова тека", "An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки", "A new file or folder has been <strong>created</strong>" : "Новий файл або теку було <strong>створено</strong>", "A file or folder has been <strong>changed</strong>" : "Файл або теку було <strong> змінено </strong>", @@ -92,12 +97,6 @@ OC.L10N.register( "Settings" : "Налаштування", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>", - "New" : "Створити", - "New text file" : "Новий текстовий файл", - "Text file" : "Текстовий файл", - "New folder" : "Нова тека", - "Folder" : "Тека", - "Upload" : "Вивантажити", "Cancel upload" : "Скасувати вивантаження", "No files in here" : "Тут немає файлів", "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!", diff --git a/apps/files/l10n/uk.json b/apps/files/l10n/uk.json index adc124a267f..964ada95de1 100644 --- a/apps/files/l10n/uk.json +++ b/apps/files/l10n/uk.json @@ -34,9 +34,6 @@ "Upload cancelled." : "Вивантаження скасовано.", "Could not get result from server." : "Не вдалося отримати результат від сервера.", "File upload is in progress. Leaving the page now will cancel the upload." : "Виконується вивантаження файлу. Закриття цієї сторінки приведе до скасування вивантаження.", - "{new_name} already exists" : "{new_name} вже існує", - "Could not create file" : "Не вдалося створити файл", - "Could not create folder" : "Не вдалося створити теку", "Actions" : "Дії", "Download" : "Завантажити", "Select" : "Оберіть", @@ -46,7 +43,10 @@ "Error moving file." : "Помилка переміщення файлу.", "Error moving file" : "Помилка переміщення файлу", "Error" : "Помилка", + "{new_name} already exists" : "{new_name} вже існує", "Could not rename file" : "Неможливо перейменувати файл", + "Could not create file" : "Не вдалося створити файл", + "Could not create folder" : "Не вдалося створити теку", "Error deleting file." : "Помилка видалення файлу.", "No entries in this folder match '{filter}'" : "Нічого не знайдено в цій теці '{filter}'", "Name" : "Ім'я", @@ -57,6 +57,7 @@ "{dirs} and {files}" : "{dirs} і {files}", "You don’t have permission to upload or create files here" : "У вас недостатньо прав для вивантаження або створення тут файлів", "_Uploading %n file_::_Uploading %n files_" : ["Вивантаження %n файлу","Вивантаження %n файлів","Вивантаження %n файлів"], + "New" : "Створити", "\"{name}\" is an invalid file name." : "\"{name}\" - некоректне ім'я файлу.", "File name cannot be empty." : " Ім'я файлу не може бути порожнім.", "Your storage is full, files can not be updated or synced anymore!" : "Ваше сховище переповнене, файли більше не можуть бути оновлені або синхронізовані !", @@ -64,6 +65,10 @@ "_matches '{filter}'_::_match '{filter}'_" : ["знайдено '{filter}'","знайдено '{filter}'","знайдено '{filter}'"], "Favorited" : "Улюблений", "Favorite" : "Улюблений", + "Upload" : "Вивантажити", + "Text file" : "Текстовий файл", + "Folder" : "Тека", + "New folder" : "Нова тека", "An error occurred while trying to update the tags" : "Виникла помилка при спробі оновити мітки", "A new file or folder has been <strong>created</strong>" : "Новий файл або теку було <strong>створено</strong>", "A file or folder has been <strong>changed</strong>" : "Файл або теку було <strong> змінено </strong>", @@ -90,12 +95,6 @@ "Settings" : "Налаштування", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "Для доступу до файлів через WebDAV використовуйте <a href=\"%s\" target=\"_blank\">це посилання</a>", - "New" : "Створити", - "New text file" : "Новий текстовий файл", - "Text file" : "Текстовий файл", - "New folder" : "Нова тека", - "Folder" : "Тека", - "Upload" : "Вивантажити", "Cancel upload" : "Скасувати вивантаження", "No files in here" : "Тут немає файлів", "Upload some content or sync with your devices!" : "Вивантажте щось або синхронізуйте з пристроями!", diff --git a/apps/files/l10n/vi.js b/apps/files/l10n/vi.js index b96c4fca63c..5e83c36abea 100644 --- a/apps/files/l10n/vi.js +++ b/apps/files/l10n/vi.js @@ -31,16 +31,16 @@ OC.L10N.register( "Upload cancelled." : "Hủy tải lên", "Could not get result from server." : "Không thể nhận được kết quả từ máy chủ.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.", - "{new_name} already exists" : "{new_name} đã tồn tại", - "Could not create file" : "Không thể tạo file", - "Could not create folder" : "Không thể tạo thư mục", "Actions" : "Actions", "Download" : "Tải về", "Select" : "Chọn", "Pending" : "Đang chờ", "Error moving file" : "Lỗi di chuyển tập tin", "Error" : "Lỗi", + "{new_name} already exists" : "{new_name} đã tồn tại", "Could not rename file" : "Không thể đổi tên file", + "Could not create file" : "Không thể tạo file", + "Could not create folder" : "Không thể tạo thư mục", "Error deleting file." : "Lỗi xóa file,", "Name" : "Tên", "Size" : "Kích cỡ", @@ -50,10 +50,15 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} và {files}", "You don’t have permission to upload or create files here" : "Bạn không có quyền upload hoặc tạo files ở đây", "_Uploading %n file_::_Uploading %n files_" : ["Đang tải lên %n tập tin"], + "New" : "Tạo mới", "File name cannot be empty." : "Tên file không được rỗng", "Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!", "Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)", "Favorite" : "Ưu thích", + "Upload" : "Tải lên", + "Text file" : "Tập tin văn bản", + "Folder" : "Thư mục", + "New folder" : "Tạo thư mục", "%s could not be renamed" : "%s không thể đổi tên", "File handling" : "Xử lý tập tin", "Maximum upload size" : "Kích thước tối đa ", @@ -61,12 +66,6 @@ OC.L10N.register( "Save" : "Lưu", "Settings" : "Cài đặt", "WebDAV" : "WebDAV", - "New" : "Tạo mới", - "New text file" : "File text mới", - "Text file" : "Tập tin văn bản", - "New folder" : "Tạo thư mục", - "Folder" : "Thư mục", - "Upload" : "Tải lên", "Cancel upload" : "Hủy upload", "No entries found in this folder" : "Chưa có mục nào trong thư mục", "Select all" : "Chọn tất cả", diff --git a/apps/files/l10n/vi.json b/apps/files/l10n/vi.json index 38e0e1c3846..285c0e39240 100644 --- a/apps/files/l10n/vi.json +++ b/apps/files/l10n/vi.json @@ -29,16 +29,16 @@ "Upload cancelled." : "Hủy tải lên", "Could not get result from server." : "Không thể nhận được kết quả từ máy chủ.", "File upload is in progress. Leaving the page now will cancel the upload." : "Tập tin tải lên đang được xử lý. Nếu bạn rời khỏi trang bây giờ sẽ hủy quá trình này.", - "{new_name} already exists" : "{new_name} đã tồn tại", - "Could not create file" : "Không thể tạo file", - "Could not create folder" : "Không thể tạo thư mục", "Actions" : "Actions", "Download" : "Tải về", "Select" : "Chọn", "Pending" : "Đang chờ", "Error moving file" : "Lỗi di chuyển tập tin", "Error" : "Lỗi", + "{new_name} already exists" : "{new_name} đã tồn tại", "Could not rename file" : "Không thể đổi tên file", + "Could not create file" : "Không thể tạo file", + "Could not create folder" : "Không thể tạo thư mục", "Error deleting file." : "Lỗi xóa file,", "Name" : "Tên", "Size" : "Kích cỡ", @@ -48,10 +48,15 @@ "{dirs} and {files}" : "{dirs} và {files}", "You don’t have permission to upload or create files here" : "Bạn không có quyền upload hoặc tạo files ở đây", "_Uploading %n file_::_Uploading %n files_" : ["Đang tải lên %n tập tin"], + "New" : "Tạo mới", "File name cannot be empty." : "Tên file không được rỗng", "Your storage is full, files can not be updated or synced anymore!" : "Your storage is full, files can not be updated or synced anymore!", "Your storage is almost full ({usedSpacePercent}%)" : "Your storage is almost full ({usedSpacePercent}%)", "Favorite" : "Ưu thích", + "Upload" : "Tải lên", + "Text file" : "Tập tin văn bản", + "Folder" : "Thư mục", + "New folder" : "Tạo thư mục", "%s could not be renamed" : "%s không thể đổi tên", "File handling" : "Xử lý tập tin", "Maximum upload size" : "Kích thước tối đa ", @@ -59,12 +64,6 @@ "Save" : "Lưu", "Settings" : "Cài đặt", "WebDAV" : "WebDAV", - "New" : "Tạo mới", - "New text file" : "File text mới", - "Text file" : "Tập tin văn bản", - "New folder" : "Tạo thư mục", - "Folder" : "Thư mục", - "Upload" : "Tải lên", "Cancel upload" : "Hủy upload", "No entries found in this folder" : "Chưa có mục nào trong thư mục", "Select all" : "Chọn tất cả", diff --git a/apps/files/l10n/zh_CN.js b/apps/files/l10n/zh_CN.js index 92945f43ba5..84b31368a14 100644 --- a/apps/files/l10n/zh_CN.js +++ b/apps/files/l10n/zh_CN.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "上传已取消", "Could not get result from server." : "不能从服务器得到结果", "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。", - "{new_name} already exists" : "{new_name} 已存在", - "Could not create file" : "不能创建文件", - "Could not create folder" : "不能创建文件夹", "Actions" : "动作", "Download" : "下载", "Select" : "选择", @@ -49,7 +46,10 @@ OC.L10N.register( "Error moving file." : "移动文件出错。", "Error moving file" : "移动文件错误", "Error" : "错误", + "{new_name} already exists" : "{new_name} 已存在", "Could not rename file" : "不能重命名文件", + "Could not create file" : "不能创建文件", + "Could not create folder" : "不能创建文件夹", "Error deleting file." : "删除文件出错。", "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”", "Name" : "名称", @@ -60,6 +60,7 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} 和 {files}", "You don’t have permission to upload or create files here" : "您没有权限来上传湖州哦和创建文件", "_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"], + "New" : "新建", "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。", "File name cannot be empty." : "文件名不能为空。", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!", @@ -67,8 +68,14 @@ OC.L10N.register( "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"], + "Path" : "路径", + "_%n byte_::_%n bytes_" : ["%n 字节"], "Favorited" : "已收藏", "Favorite" : "收藏", + "Upload" : "上传", + "Text file" : "文本文件", + "Folder" : "文件夹", + "New folder" : "增加文件夹", "An error occurred while trying to update the tags" : "更新标签时出错", "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>", "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>", @@ -90,17 +97,12 @@ OC.L10N.register( "File handling" : "文件处理", "Maximum upload size" : "最大上传大小", "max. possible: " : "最大允许: ", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "对于 PHP-FPM 这个值保存后可能需要长达5分钟才会生效。", "Save" : "保存", "Can not be edited from here due to insufficient permissions." : "由于权限不足无法在此编辑。", "Settings" : "设置", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>", - "New" : "新建", - "New text file" : "创建文本文件", - "Text file" : "文本文件", - "New folder" : "增加文件夹", - "Folder" : "文件夹", - "Upload" : "上传", "Cancel upload" : "取消上传", "No files in here" : "无文件", "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!", diff --git a/apps/files/l10n/zh_CN.json b/apps/files/l10n/zh_CN.json index 5bd652a3444..4d9a3737a98 100644 --- a/apps/files/l10n/zh_CN.json +++ b/apps/files/l10n/zh_CN.json @@ -34,9 +34,6 @@ "Upload cancelled." : "上传已取消", "Could not get result from server." : "不能从服务器得到结果", "File upload is in progress. Leaving the page now will cancel the upload." : "文件正在上传中。现在离开此页会导致上传动作被取消。", - "{new_name} already exists" : "{new_name} 已存在", - "Could not create file" : "不能创建文件", - "Could not create folder" : "不能创建文件夹", "Actions" : "动作", "Download" : "下载", "Select" : "选择", @@ -47,7 +44,10 @@ "Error moving file." : "移动文件出错。", "Error moving file" : "移动文件错误", "Error" : "错误", + "{new_name} already exists" : "{new_name} 已存在", "Could not rename file" : "不能重命名文件", + "Could not create file" : "不能创建文件", + "Could not create folder" : "不能创建文件夹", "Error deleting file." : "删除文件出错。", "No entries in this folder match '{filter}'" : "此文件夹中无项目匹配“{filter}”", "Name" : "名称", @@ -58,6 +58,7 @@ "{dirs} and {files}" : "{dirs} 和 {files}", "You don’t have permission to upload or create files here" : "您没有权限来上传湖州哦和创建文件", "_Uploading %n file_::_Uploading %n files_" : ["上传 %n 个文件"], + "New" : "新建", "\"{name}\" is an invalid file name." : "“{name}”是一个无效的文件名。", "File name cannot be empty." : "文件名不能为空。", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的存储空间已满,文件将无法更新或同步!", @@ -65,8 +66,14 @@ "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的存储空间即将用完 ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "您的存储空间即将用完 ({usedSpacePercent}%)", "_matches '{filter}'_::_match '{filter}'_" : ["匹配“{filter}”"], + "Path" : "路径", + "_%n byte_::_%n bytes_" : ["%n 字节"], "Favorited" : "已收藏", "Favorite" : "收藏", + "Upload" : "上传", + "Text file" : "文本文件", + "Folder" : "文件夹", + "New folder" : "增加文件夹", "An error occurred while trying to update the tags" : "更新标签时出错", "A new file or folder has been <strong>created</strong>" : "一个新的文件或文件夹已被<strong>创建</strong>", "A file or folder has been <strong>changed</strong>" : "一个文件或文件夹已被<strong>修改</strong>", @@ -88,17 +95,12 @@ "File handling" : "文件处理", "Maximum upload size" : "最大上传大小", "max. possible: " : "最大允许: ", + "With PHP-FPM this value may take up to 5 minutes to take effect after saving." : "对于 PHP-FPM 这个值保存后可能需要长达5分钟才会生效。", "Save" : "保存", "Can not be edited from here due to insufficient permissions." : "由于权限不足无法在此编辑。", "Settings" : "设置", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用这个地址 <a href=\"%s\" target=\"_blank\">通过 WebDAV 访问您的文件</a>", - "New" : "新建", - "New text file" : "创建文本文件", - "Text file" : "文本文件", - "New folder" : "增加文件夹", - "Folder" : "文件夹", - "Upload" : "上传", "Cancel upload" : "取消上传", "No files in here" : "无文件", "Upload some content or sync with your devices!" : "上传一些内容或者与设备同步!", diff --git a/apps/files/l10n/zh_HK.js b/apps/files/l10n/zh_HK.js index 02193710b4e..94f4397f23b 100644 --- a/apps/files/l10n/zh_HK.js +++ b/apps/files/l10n/zh_HK.js @@ -11,6 +11,10 @@ OC.L10N.register( "Name" : "名稱", "Size" : "大小", "{dirs} and {files}" : "{dirs} 和 {files}", + "New" : "新增", + "Upload" : "上戴", + "Folder" : "資料夾", + "New folder" : "新資料夾", "A new file or folder has been <strong>created</strong>" : "新檔案或資料夾已被 <strong> 新增 </strong>", "A file or folder has been <strong>changed</strong>" : "檔案或資料夾已被 <strong> 變成 </strong>", "A file or folder has been <strong>deleted</strong>" : "新檔案或資料夾已被 <strong> 刪除 </strong>", @@ -23,10 +27,6 @@ OC.L10N.register( "Save" : "儲存", "Settings" : "設定", "WebDAV" : "WebDAV", - "New" : "新增", - "New folder" : "新資料夾", - "Folder" : "資料夾", - "Upload" : "上戴", "Cancel upload" : "取消上戴", "Delete" : "刪除" }, diff --git a/apps/files/l10n/zh_HK.json b/apps/files/l10n/zh_HK.json index 23f24afa0a6..63716aca559 100644 --- a/apps/files/l10n/zh_HK.json +++ b/apps/files/l10n/zh_HK.json @@ -9,6 +9,10 @@ "Name" : "名稱", "Size" : "大小", "{dirs} and {files}" : "{dirs} 和 {files}", + "New" : "新增", + "Upload" : "上戴", + "Folder" : "資料夾", + "New folder" : "新資料夾", "A new file or folder has been <strong>created</strong>" : "新檔案或資料夾已被 <strong> 新增 </strong>", "A file or folder has been <strong>changed</strong>" : "檔案或資料夾已被 <strong> 變成 </strong>", "A file or folder has been <strong>deleted</strong>" : "新檔案或資料夾已被 <strong> 刪除 </strong>", @@ -21,10 +25,6 @@ "Save" : "儲存", "Settings" : "設定", "WebDAV" : "WebDAV", - "New" : "新增", - "New folder" : "新資料夾", - "Folder" : "資料夾", - "Upload" : "上戴", "Cancel upload" : "取消上戴", "Delete" : "刪除" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files/l10n/zh_TW.js b/apps/files/l10n/zh_TW.js index 049b63814a6..7c013533e2a 100644 --- a/apps/files/l10n/zh_TW.js +++ b/apps/files/l10n/zh_TW.js @@ -36,9 +36,6 @@ OC.L10N.register( "Upload cancelled." : "上傳已取消", "Could not get result from server." : "無法從伺服器取回結果", "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳。", - "{new_name} already exists" : "{new_name} 已經存在", - "Could not create file" : "無法建立檔案", - "Could not create folder" : "無法建立資料夾", "Actions" : "動作", "Download" : "下載", "Select" : "選擇", @@ -48,7 +45,10 @@ OC.L10N.register( "Error moving file." : "移動檔案發生錯誤", "Error moving file" : "移動檔案失敗", "Error" : "錯誤", + "{new_name} already exists" : "{new_name} 已經存在", "Could not rename file" : "無法重新命名", + "Could not create file" : "無法建立檔案", + "Could not create folder" : "無法建立資料夾", "Error deleting file." : "刪除檔案發生錯誤", "No entries in this folder match '{filter}'" : "在此資料夾中沒有項目與 '{filter}' 相符", "Name" : "名稱", @@ -59,13 +59,22 @@ OC.L10N.register( "{dirs} and {files}" : "{dirs} 和 {files}", "You don’t have permission to upload or create files here" : "您沒有權限在這裡上傳或建立檔案", "_Uploading %n file_::_Uploading %n files_" : ["%n 個檔案正在上傳"], + "New" : "新增", "\"{name}\" is an invalid file name." : "{name} 是無效的檔名", "File name cannot be empty." : "檔名不能為空", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的儲存空間已滿,沒有辦法再更新或是同步檔案!", "Your storage is full, files can not be updated or synced anymore!" : "您的儲存空間已滿,沒有辦法再更新或是同步檔案!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的儲存空間快要滿了 ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "您的儲存空間快要滿了 ({usedSpacePercent}%)", + "Path" : "路徑", + "_%n byte_::_%n bytes_" : ["%n 位元組"], + "Favorited" : "已加入最愛", "Favorite" : "我的最愛", + "Upload" : "上傳", + "Text file" : "文字檔", + "Folder" : "資料夾", + "New folder" : "新資料夾", + "An error occurred while trying to update the tags" : "更新標籤時發生錯誤", "A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>", "A file or folder has been <strong>changed</strong>" : "檔案或目錄已被 <strong>變更</strong>", "A file or folder has been <strong>deleted</strong>" : "檔案或目錄已被 <strong>刪除</strong>", @@ -89,12 +98,6 @@ OC.L10N.register( "Settings" : "設定", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個地址<a href=\"%s\" target=\"_blank\">來透過 WebDAV 存取檔案</a>", - "New" : "新增", - "New text file" : "新文字檔", - "Text file" : "文字檔", - "New folder" : "新資料夾", - "Folder" : "資料夾", - "Upload" : "上傳", "Cancel upload" : "取消上傳", "No files in here" : "沒有任何檔案", "Upload some content or sync with your devices!" : "在您的裝置中同步或上傳一些內容", diff --git a/apps/files/l10n/zh_TW.json b/apps/files/l10n/zh_TW.json index 7b047c3c012..9d1aec9e4f2 100644 --- a/apps/files/l10n/zh_TW.json +++ b/apps/files/l10n/zh_TW.json @@ -34,9 +34,6 @@ "Upload cancelled." : "上傳已取消", "Could not get result from server." : "無法從伺服器取回結果", "File upload is in progress. Leaving the page now will cancel the upload." : "檔案上傳中,離開此頁面將會取消上傳。", - "{new_name} already exists" : "{new_name} 已經存在", - "Could not create file" : "無法建立檔案", - "Could not create folder" : "無法建立資料夾", "Actions" : "動作", "Download" : "下載", "Select" : "選擇", @@ -46,7 +43,10 @@ "Error moving file." : "移動檔案發生錯誤", "Error moving file" : "移動檔案失敗", "Error" : "錯誤", + "{new_name} already exists" : "{new_name} 已經存在", "Could not rename file" : "無法重新命名", + "Could not create file" : "無法建立檔案", + "Could not create folder" : "無法建立資料夾", "Error deleting file." : "刪除檔案發生錯誤", "No entries in this folder match '{filter}'" : "在此資料夾中沒有項目與 '{filter}' 相符", "Name" : "名稱", @@ -57,13 +57,22 @@ "{dirs} and {files}" : "{dirs} 和 {files}", "You don’t have permission to upload or create files here" : "您沒有權限在這裡上傳或建立檔案", "_Uploading %n file_::_Uploading %n files_" : ["%n 個檔案正在上傳"], + "New" : "新增", "\"{name}\" is an invalid file name." : "{name} 是無效的檔名", "File name cannot be empty." : "檔名不能為空", "Storage of {owner} is full, files can not be updated or synced anymore!" : "{owner} 的儲存空間已滿,沒有辦法再更新或是同步檔案!", "Your storage is full, files can not be updated or synced anymore!" : "您的儲存空間已滿,沒有辦法再更新或是同步檔案!", "Storage of {owner} is almost full ({usedSpacePercent}%)" : "{owner} 的儲存空間快要滿了 ({usedSpacePercent}%)", "Your storage is almost full ({usedSpacePercent}%)" : "您的儲存空間快要滿了 ({usedSpacePercent}%)", + "Path" : "路徑", + "_%n byte_::_%n bytes_" : ["%n 位元組"], + "Favorited" : "已加入最愛", "Favorite" : "我的最愛", + "Upload" : "上傳", + "Text file" : "文字檔", + "Folder" : "資料夾", + "New folder" : "新資料夾", + "An error occurred while trying to update the tags" : "更新標籤時發生錯誤", "A new file or folder has been <strong>created</strong>" : "新的檔案或目錄已被 <strong>建立</strong>", "A file or folder has been <strong>changed</strong>" : "檔案或目錄已被 <strong>變更</strong>", "A file or folder has been <strong>deleted</strong>" : "檔案或目錄已被 <strong>刪除</strong>", @@ -87,12 +96,6 @@ "Settings" : "設定", "WebDAV" : "WebDAV", "Use this address to <a href=\"%s\" target=\"_blank\">access your Files via WebDAV</a>" : "使用這個地址<a href=\"%s\" target=\"_blank\">來透過 WebDAV 存取檔案</a>", - "New" : "新增", - "New text file" : "新文字檔", - "Text file" : "文字檔", - "New folder" : "新資料夾", - "Folder" : "資料夾", - "Upload" : "上傳", "Cancel upload" : "取消上傳", "No files in here" : "沒有任何檔案", "Upload some content or sync with your devices!" : "在您的裝置中同步或上傳一些內容", diff --git a/apps/files/templates/list.php b/apps/files/templates/list.php index 32651b261da..15af1970dc3 100644 --- a/apps/files/templates/list.php +++ b/apps/files/templates/list.php @@ -1,40 +1,16 @@ <div id="controls"> <div class="actions creatable hidden"> - <?php if(!isset($_['dirToken'])):?> - <div id="new" class="button"> - <a><?php p($l->t('New'));?></a> - <ul> - <li class="icon-filetype-text svg" - data-type="file" data-newname="<?php p($l->t('New text file')) ?>.txt"> - <p><?php p($l->t('Text file'));?></p> - </li> - <li class="icon-filetype-folder svg" - data-type="folder" data-newname="<?php p($l->t('New folder')) ?>"> - <p><?php p($l->t('Folder'));?></p> - </li> - </ul> - </div> - <?php endif;?> - <?php /* Note: the template attributes are here only for the public page. These are normally loaded - through ajax instead (updateStorageStatistics). - */ ?> - <div id="upload" class="button" + <?php /* + Only show upload button for public page + */ ?> + <?php if(isset($_['dirToken'])):?> + <div id="upload" class="button upload" title="<?php isset($_['uploadMaxHumanFilesize']) ? p($l->t('Upload (max. %s)', array($_['uploadMaxHumanFilesize']))) : '' ?>"> - <input type="hidden" id="max_upload" name="MAX_FILE_SIZE" value="<?php isset($_['uploadMaxFilesize']) ? p($_['uploadMaxFilesize']) : '' ?>"> - <input type="hidden" id="upload_limit" value="<?php isset($_['uploadLimit']) ? p($_['uploadLimit']) : '' ?>"> - <input type="hidden" id="free_space" value="<?php isset($_['freeSpace']) ? p($_['freeSpace']) : '' ?>"> - <?php if(isset($_['dirToken'])):?> - <input type="hidden" id="publicUploadRequestToken" name="requesttoken" value="<?php p($_['requesttoken']) ?>" /> - <input type="hidden" id="dirToken" name="dirToken" value="<?php p($_['dirToken']) ?>" /> - <?php endif;?> - <input type="hidden" class="max_human_file_size" - value="(max <?php isset($_['uploadMaxHumanFilesize']) ? p($_['uploadMaxHumanFilesize']) : ''; ?>)"> - <input type="file" id="file_upload_start" name='files[]' - data-url="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" /> <label for="file_upload_start" class="svg icon-upload"> <span class="hidden-visually"><?php p($l->t('Upload'))?></span> </label> </div> + <?php endif; ?> <div id="uploadprogresswrapper"> <div id="uploadprogressbar"></div> <button class="stop icon-close" style="display:none"> @@ -48,7 +24,19 @@ <div class="notCreatable notPublic hidden"> <?php p($l->t('You don’t have permission to upload or create files here'))?> </div> + <?php /* Note: the template attributes are here only for the public page. These are normally loaded + through ajax instead (updateStorageStatistics). + */ ?> <input type="hidden" name="permissions" value="" id="permissions"> + <input type="hidden" id="max_upload" name="MAX_FILE_SIZE" value="<?php isset($_['uploadMaxFilesize']) ? p($_['uploadMaxFilesize']) : '' ?>"> + <input type="hidden" id="upload_limit" value="<?php isset($_['uploadLimit']) ? p($_['uploadLimit']) : '' ?>"> + <input type="hidden" id="free_space" value="<?php isset($_['freeSpace']) ? p($_['freeSpace']) : '' ?>"> + <?php if(isset($_['dirToken'])):?> + <input type="hidden" id="publicUploadRequestToken" name="requesttoken" value="<?php p($_['requesttoken']) ?>" /> + <input type="hidden" id="dirToken" name="dirToken" value="<?php p($_['dirToken']) ?>" /> + <?php endif;?> + <input type="hidden" class="max_human_file_size" + value="(max <?php isset($_['uploadMaxHumanFilesize']) ? p($_['uploadMaxHumanFilesize']) : ''; ?>)"> </div> <div id="emptycontent" class="hidden"> @@ -101,6 +89,10 @@ </tfoot> </table> <input type="hidden" name="dir" id="dir" value="" /> +<div class="hiddenuploadfield"> + <input type="file" id="file_upload_start" class="hiddenuploadfield" name="files[]" + data-url="<?php print_unescaped(OCP\Util::linkTo('files', 'ajax/upload.php')); ?>" /> +</div> <div id="editor"></div><!-- FIXME Do not use this div in your app! It is deprecated and will be removed in the future! --> <div id="uploadsize-message" title="<?php p($l->t('Upload too large'))?>"> <p> diff --git a/apps/files/tests/js/fileUploadSpec.js b/apps/files/tests/js/fileUploadSpec.js index 817654c4fa9..cad8468d1c8 100644 --- a/apps/files/tests/js/fileUploadSpec.js +++ b/apps/files/tests/js/fileUploadSpec.js @@ -19,7 +19,6 @@ * */ -/* global OC */ describe('OC.Upload tests', function() { var $dummyUploader; var testFile; @@ -118,54 +117,4 @@ describe('OC.Upload tests', function() { ); }); }); - describe('New file', function() { - var $input; - var currentDirStub; - - beforeEach(function() { - OC.Upload.init(); - $('#new>a').click(); - $('#new li[data-type=file]').click(); - $input = $('#new input[type=text]'); - - currentDirStub = sinon.stub(FileList, 'getCurrentDirectory'); - currentDirStub.returns('testdir'); - }); - afterEach(function() { - currentDirStub.restore(); - }); - it('sets default text in field', function() { - expect($input.length).toEqual(1); - expect($input.val()).toEqual('New text file.txt'); - }); - it('creates file when enter is pressed', function() { - $input.val('somefile.txt'); - $input.trigger(new $.Event('keyup', {keyCode: 13})); - $input.parent('form').submit(); - expect(fakeServer.requests.length).toEqual(2); - - var request = fakeServer.requests[1]; - expect(request.method).toEqual('POST'); - expect(request.url).toEqual(OC.webroot + '/index.php/apps/files/ajax/newfile.php'); - var query = OC.parseQueryString(request.requestBody); - expect(query).toEqual({ - dir: 'testdir', - filename: 'somefile.txt' - }); - }); - it('prevents entering invalid file names', function() { - $input.val('..'); - $input.trigger(new $.Event('keyup', {keyCode: 13})); - $input.parent('form').submit(); - expect(fakeServer.requests.length).toEqual(1); - }); - it('prevents entering file names that already exist', function() { - var inListStub = sinon.stub(FileList, 'inList').returns(true); - $input.val('existing.txt'); - $input.trigger(new $.Event('keyup', {keyCode: 13})); - $input.parent('form').submit(); - expect(fakeServer.requests.length).toEqual(1); - inListStub.restore(); - }); - }); }); diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js index a6d72a88efd..c05e7c37214 100644 --- a/apps/files/tests/js/filelistSpec.js +++ b/apps/files/tests/js/filelistSpec.js @@ -2157,6 +2157,93 @@ describe('OCA.Files.FileList tests', function() { expect(fileList.$fileList.find('tr').length).toEqual(5); }); }); + describe('create file', function() { + var deferredCreate; + + beforeEach(function() { + deferredCreate = $.Deferred(); + }); + + it('creates file with given name and adds it to the list', function() { + var deferred = fileList.createFile('test file.txt'); + var successStub = sinon.stub(); + var failureStub = sinon.stub(); + + deferred.done(successStub); + deferred.fail(failureStub); + + expect(fakeServer.requests.length).toEqual(1); + expect(fakeServer.requests[0].url).toEqual(OC.generateUrl('/apps/files/ajax/newfile.php')); + + var query = fakeServer.requests[0].requestBody; + expect(OC.parseQueryString(query)).toEqual({ + dir: '/subdir', + filename: 'test file.txt' + }); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + data: { + path: '/subdir', + name: 'test file.txt', + mimetype: 'text/plain' + } + }) + ); + + var $tr = fileList.findFileEl('test file.txt'); + expect($tr.length).toEqual(1); + expect($tr.attr('data-mime')).toEqual('text/plain'); + + expect(successStub.calledOnce).toEqual(true); + expect(failureStub.notCalled).toEqual(true); + }); + // TODO: error cases + // TODO: unique name cases + }); + describe('create directory', function() { + it('creates directory with given name and adds it to the list', function() { + var deferred = fileList.createDirectory('test directory'); + var successStub = sinon.stub(); + var failureStub = sinon.stub(); + + deferred.done(successStub); + deferred.fail(failureStub); + + expect(fakeServer.requests.length).toEqual(1); + expect(fakeServer.requests[0].url).toEqual(OC.generateUrl('/apps/files/ajax/newfolder.php')); + var query = fakeServer.requests[0].requestBody; + expect(OC.parseQueryString(query)).toEqual({ + dir: '/subdir', + foldername: 'test directory' + }); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + data: { + path: '/subdir', + name: 'test directory', + mimetype: 'httpd/unix-directory' + } + }) + ); + + var $tr = fileList.findFileEl('test directory'); + expect($tr.length).toEqual(1); + expect($tr.attr('data-mime')).toEqual('httpd/unix-directory'); + + expect(successStub.calledOnce).toEqual(true); + expect(failureStub.notCalled).toEqual(true); + }); + // TODO: error cases + // TODO: unique name cases + }); /** * Test upload mostly by testing the code inside the event handlers * that were registered on the magic upload object @@ -2359,4 +2446,36 @@ describe('OCA.Files.FileList tests', function() { expect(fileInfo.type).toEqual('file'); }); }); + describe('new file menu', function() { + var newFileMenuStub; + + beforeEach(function() { + newFileMenuStub = sinon.stub(OCA.Files.NewFileMenu.prototype, 'showAt'); + }); + afterEach(function() { + newFileMenuStub.restore(); + }) + it('renders new button when no legacy upload button exists', function() { + expect(fileList.$el.find('.button.upload').length).toEqual(0); + expect(fileList.$el.find('.button.new').length).toEqual(1); + }); + it('does not render new button when no legacy upload button exists (public page)', function() { + fileList.destroy(); + $('#controls').append('<input type="button" class="button upload" />'); + fileList = new OCA.Files.FileList($('#app-content-files')); + expect(fileList.$el.find('.button.upload').length).toEqual(1); + expect(fileList.$el.find('.button.new').length).toEqual(0); + }); + it('opens the new file menu when clicking on the "New" button', function() { + var $button = fileList.$el.find('.button.new'); + $button.click(); + expect(newFileMenuStub.calledOnce).toEqual(true); + }); + it('does not open the new file menu when button is disabled', function() { + var $button = fileList.$el.find('.button.new'); + $button.addClass('disabled'); + $button.click(); + expect(newFileMenuStub.notCalled).toEqual(true); + }); + }); }); diff --git a/apps/files/tests/js/mainfileinfodetailviewSpec.js b/apps/files/tests/js/mainfileinfodetailviewSpec.js index 3d78312c86e..2b9e2b23f93 100644 --- a/apps/files/tests/js/mainfileinfodetailviewSpec.js +++ b/apps/files/tests/js/mainfileinfodetailviewSpec.js @@ -20,11 +20,10 @@ */ describe('OCA.Files.MainFileInfoDetailView tests', function() { - var view, tooltipStub, fileListMock, fileActions, fileList, testFileInfo; + var view, tooltipStub, fileActions, fileList, testFileInfo; beforeEach(function() { tooltipStub = sinon.stub($.fn, 'tooltip'); - fileListMock = sinon.mock(OCA.Files.FileList.prototype); fileActions = new OCA.Files.FileActions(); fileList = new OCA.Files.FileList($('<table></table>'), { fileActions: fileActions @@ -40,6 +39,7 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { permissions: 31, path: '/subdir', size: 123456789, + etag: 'abcdefg', mtime: Date.UTC(2015, 6, 17, 1, 2, 0, 0) }); }); @@ -47,7 +47,6 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { view.remove(); view = undefined; tooltipStub.restore(); - fileListMock.restore(); }); describe('rendering', function() { @@ -76,9 +75,31 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { }); it('displays mime icon', function() { // File + var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview'); testFileInfo.set('mimetype', 'text/calendar'); view.setFileInfo(testFileInfo); + expect(lazyLoadPreviewStub.calledOnce).toEqual(true); + var previewArgs = lazyLoadPreviewStub.getCall(0).args; + expect(previewArgs[0].mime).toEqual('text/calendar'); + expect(previewArgs[0].path).toEqual('/subdir/One.txt'); + expect(previewArgs[0].etag).toEqual('abcdefg'); + + expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true); + + // returns mime icon first without img parameter + previewArgs[0].callback( + OC.imagePath('core', 'filetypes/text-calendar.svg') + ); + + // still loading + expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true); + + // preview loading failed, no prview + previewArgs[0].error(); + + // loading stopped, the mimetype icon gets displayed + expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false); expect(view.$el.find('.thumbnail').css('background-image')) .toContain('filetypes/text-calendar.svg'); @@ -88,17 +109,46 @@ describe('OCA.Files.MainFileInfoDetailView tests', function() { expect(view.$el.find('.thumbnail').css('background-image')) .toContain('filetypes/folder.svg'); + + lazyLoadPreviewStub.restore(); }); it('displays thumbnail', function() { - testFileInfo.set('mimetype', 'test/plain'); + var lazyLoadPreviewStub = sinon.stub(fileList, 'lazyLoadPreview'); + + testFileInfo.set('mimetype', 'text/plain'); view.setFileInfo(testFileInfo); - var expectation = fileListMock.expects('lazyLoadPreview'); - expectation.once(); + expect(lazyLoadPreviewStub.calledOnce).toEqual(true); + var previewArgs = lazyLoadPreviewStub.getCall(0).args; + expect(previewArgs[0].mime).toEqual('text/plain'); + expect(previewArgs[0].path).toEqual('/subdir/One.txt'); + expect(previewArgs[0].etag).toEqual('abcdefg'); - view.setFileInfo(testFileInfo); + expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true); + + // returns mime icon first without img parameter + previewArgs[0].callback( + OC.imagePath('core', 'filetypes/text-plain.svg') + ); + + // still loading + expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(true); + + // return an actual (simulated) image + previewArgs[0].callback( + 'testimage', { + width: 100, + height: 200 + } + ); + + // loading stopped, image got displayed + expect(view.$el.find('.thumbnail').css('background-image')) + .toContain('testimage'); + + expect(view.$el.find('.thumbnail').hasClass('icon-loading')).toEqual(false); - fileListMock.verify(); + lazyLoadPreviewStub.restore(); }); it('does not show size if no size available', function() { testFileInfo.unset('size'); diff --git a/apps/files/tests/js/newfilemenuSpec.js b/apps/files/tests/js/newfilemenuSpec.js new file mode 100644 index 00000000000..3d89a997eb2 --- /dev/null +++ b/apps/files/tests/js/newfilemenuSpec.js @@ -0,0 +1,119 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2015 Vincent Petry <pvince81@owncloud.com> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +describe('OCA.Files.NewFileMenu', function() { + var FileList = OCA.Files.FileList; + var menu, fileList, $uploadField, $trigger; + + beforeEach(function() { + // dummy upload button + var $container = $('<div id="app-content-files"></div>'); + $uploadField = $('<input id="file_upload_start"></input>'); + $trigger = $('<a href="#">Menu</a>'); + $container.append($uploadField).append($trigger); + $('#testArea').append($container); + + fileList = new FileList($container); + menu = new OCA.Files.NewFileMenu({ + fileList: fileList + }); + menu.showAt($trigger); + }); + afterEach(function() { + OC.hideMenus(); + fileList = null; + menu = null; + }); + + describe('rendering', function() { + it('renders menu items', function() { + var $items = menu.$el.find('.menuitem'); + expect($items.length).toEqual(3); + // label points to the file_upload_start item + var $item = $items.eq(0); + expect($item.is('label')).toEqual(true); + expect($item.attr('for')).toEqual('file_upload_start'); + }); + }); + describe('New file/folder', function() { + var $input; + var createFileStub; + var createDirectoryStub; + + beforeEach(function() { + createFileStub = sinon.stub(FileList.prototype, 'createFile'); + createDirectoryStub = sinon.stub(FileList.prototype, 'createDirectory'); + menu.$el.find('.menuitem').eq(1).click(); + $input = menu.$el.find('form.filenameform input'); + }); + afterEach(function() { + createFileStub.restore(); + createDirectoryStub.restore(); + }); + + it('sets default text in field', function() { + expect($input.length).toEqual(1); + expect($input.val()).toEqual('New text file.txt'); + }); + it('creates file when enter is pressed', function() { + $input.val('somefile.txt'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.parent('form').submit(); + + expect(createFileStub.calledOnce).toEqual(true); + expect(createFileStub.getCall(0).args[0]).toEqual('somefile.txt'); + expect(createDirectoryStub.notCalled).toEqual(true); + }); + it('prevents entering invalid file names', function() { + $input.val('..'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.closest('form').submit(); + + expect(createFileStub.notCalled).toEqual(true); + expect(createDirectoryStub.notCalled).toEqual(true); + }); + it('prevents entering file names that already exist', function() { + var inListStub = sinon.stub(fileList, 'inList').returns(true); + $input.val('existing.txt'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.closest('form').submit(); + + expect(createFileStub.notCalled).toEqual(true); + expect(createDirectoryStub.notCalled).toEqual(true); + inListStub.restore(); + }); + it('switching fields removes the previous form', function() { + menu.$el.find('.menuitem').eq(2).click(); + expect(menu.$el.find('form').length).toEqual(1); + }); + it('creates directory when clicking on create directory field', function() { + menu.$el.find('.menuitem').eq(2).click(); + $input = menu.$el.find('form.filenameform input'); + $input.val('some folder'); + $input.trigger(new $.Event('keyup', {keyCode: 13})); + $input.closest('form').submit(); + + expect(createDirectoryStub.calledOnce).toEqual(true); + expect(createDirectoryStub.getCall(0).args[0]).toEqual('some folder'); + expect(createFileStub.notCalled).toEqual(true); + }); + }); +}); diff --git a/apps/files/tests/js/tagspluginspec.js b/apps/files/tests/js/tagspluginspec.js index 5309973cf4f..533aa63362c 100644 --- a/apps/files/tests/js/tagspluginspec.js +++ b/apps/files/tests/js/tagspluginspec.js @@ -79,12 +79,12 @@ describe('OCA.Files.TagsPlugin tests', function() { it('sends request to server and updates icon', function() { var request; fileList.setFiles(testFiles); - $tr = fileList.$el.find('tbody tr:first'); - $action = $tr.find('.action-favorite'); + var $tr = fileList.findFileEl('One.txt'); + var $action = $tr.find('.action-favorite'); $action.click(); expect(fakeServer.requests.length).toEqual(1); - var request = fakeServer.requests[0]; + request = fakeServer.requests[0]; expect(JSON.parse(request.requestBody)).toEqual({ tags: ['tag1', 'tag2', OC.TAG_FAVORITE] }); @@ -92,12 +92,18 @@ describe('OCA.Files.TagsPlugin tests', function() { tags: ['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE] })); + // re-read the element as it was re-inserted + $tr = fileList.findFileEl('One.txt'); + $action = $tr.find('.action-favorite'); + expect($tr.attr('data-favorite')).toEqual('true'); expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]); expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3', OC.TAG_FAVORITE]); expect($action.find('img').attr('src')).toEqual(OC.imagePath('core', 'actions/starred')); $action.click(); + + expect(fakeServer.requests.length).toEqual(2); request = fakeServer.requests[1]; expect(JSON.parse(request.requestBody)).toEqual({ tags: ['tag1', 'tag2', 'tag3'] @@ -106,10 +112,29 @@ describe('OCA.Files.TagsPlugin tests', function() { tags: ['tag1', 'tag2', 'tag3'] })); - expect($tr.attr('data-favorite')).toEqual('false'); + // re-read the element as it was re-inserted + $tr = fileList.findFileEl('One.txt'); + $action = $tr.find('.action-favorite'); + + expect($tr.attr('data-favorite')).toBeFalsy(); expect($tr.attr('data-tags').split('|')).toEqual(['tag1', 'tag2', 'tag3']); expect(fileList.files[0].tags).toEqual(['tag1', 'tag2', 'tag3']); expect($action.find('img').attr('src')).toEqual(OC.imagePath('core', 'actions/star')); }); }); + describe('elementToFile', function() { + it('returns tags', function() { + fileList.setFiles(testFiles); + var $tr = fileList.findFileEl('One.txt'); + var data = fileList.elementToFile($tr); + expect(data.tags).toEqual(['tag1', 'tag2']); + }); + it('returns empty array when no tags present', function() { + delete testFiles[0].tags; + fileList.setFiles(testFiles); + var $tr = fileList.findFileEl('One.txt'); + var data = fileList.elementToFile($tr); + expect(data.tags).toEqual([]); + }); + }); }); diff --git a/apps/files_external/js/settings.js b/apps/files_external/js/settings.js index b542fe63d64..bf9981adabf 100644 --- a/apps/files_external/js/settings.js +++ b/apps/files_external/js/settings.js @@ -756,6 +756,13 @@ MountConfigListView.prototype = _.extend({ $tr.append(priorityEl); $td.children().not('[type=hidden]').first().focus(); + // FIXME default backend mount options + $tr.find('input.mountOptions').val(JSON.stringify({ + 'encrypt': true, + 'previews': true, + 'filesystem_check_changes': 1 + })); + $tr.find('td').last().attr('class', 'remove'); $tr.find('td.mountOptionsToggle').removeClass('hidden'); $tr.find('td').last().removeAttr('style'); diff --git a/apps/files_external/l10n/cs_CZ.js b/apps/files_external/l10n/cs_CZ.js index b39eef71eaa..ab352880b7c 100644 --- a/apps/files_external/l10n/cs_CZ.js +++ b/apps/files_external/l10n/cs_CZ.js @@ -1,6 +1,9 @@ OC.L10N.register( "files_external", { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Získání přístupových tokenů selhalo. Ověřte že klíč aplikace a tajné heslo jsou správné.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Získání přístupových tokenů selhalo. Ověřte že klíč aplikace a tajné heslo jsou správné.", + "Please provide a valid app key and secret." : "Zadejte prosím platný klíč a tajné heslo aplikace.", "Step 1 failed. Exception: %s" : "Selhal krok 1. Výjimka: %s", "Step 2 failed. Exception: %s" : "Selhal krok 2. Výjimka: %s", "External storage" : "Externí úložiště", @@ -22,12 +25,15 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP login s tajným klíčem", "Public key" : "Veřejný klíč", "Storage with id \"%i\" not found" : "Úložiště s id \"%i\" nebylo nalezeno", + "Invalid backend or authentication mechanism class" : "Neplatný backend nebo třída ověřovacího mechanismu", "Invalid mount point" : "Neplatný přípojný bod", "Invalid storage backend \"%s\"" : "Neplatná služba úložiště \"%s\"", "Personal" : "Osobní", "System" : "Systém", "Grant access" : "Povolit přístup", "Access granted" : "Přístup povolen", + "Error configuring OAuth1" : "Chyba nastavení OAuth1", + "Error configuring OAuth2" : "Chyba nastavení OAuth2", "Enable encryption" : "Povolit šifrování", "Enable previews" : "Povolit náhledy", "Check for changes" : "Zkontrolovat změny", @@ -39,12 +45,18 @@ OC.L10N.register( "Saved" : "Uloženo", "Generate keys" : "Vytvořit klíče", "Error generating key pair" : "Chyba při vytváření páru klíčů", + "Access key" : "Přístupový klíč", + "Secret key" : "Tajný klíč", "None" : "Žádné", + "OAuth1" : "OAuth1", "App key" : "Klíč aplikace", "App secret" : "Tajemství aplikace", + "OAuth2" : "OAuth2", "Client ID" : "Klientské ID", "Client secret" : "Klientské tajemství", + "Username and password" : "Uživatelské jméno a heslo", "Password" : "Heslo", + "Session credentials" : "Přihlašovací údaje sezení", "Amazon S3" : "Amazon S3", "Hostname" : "Hostname", "Port" : "Port", @@ -55,11 +67,15 @@ OC.L10N.register( "URL" : "URL", "Secure https://" : "Zabezpečené https://", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "Zabezpečené ftps://", + "Google Drive" : "Google Drive", "Local" : "Místní", "Location" : "Umístění", "ownCloud" : "ownCloud", + "SFTP" : "SFTP", "Root" : "Kořen", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Poznámka:</b>", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", @@ -71,6 +87,7 @@ OC.L10N.register( "Scope" : "Rozsah", "External Storage" : "Externí úložiště", "Folder name" : "Název složky", + "Authentication" : "Ověření", "Configuration" : "Nastavení", "Available for" : "Dostupné pro", "Advanced settings" : "Pokročilá nastavení", diff --git a/apps/files_external/l10n/cs_CZ.json b/apps/files_external/l10n/cs_CZ.json index c014da7976f..03afeb48b8e 100644 --- a/apps/files_external/l10n/cs_CZ.json +++ b/apps/files_external/l10n/cs_CZ.json @@ -1,4 +1,7 @@ { "translations": { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Získání přístupových tokenů selhalo. Ověřte že klíč aplikace a tajné heslo jsou správné.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Získání přístupových tokenů selhalo. Ověřte že klíč aplikace a tajné heslo jsou správné.", + "Please provide a valid app key and secret." : "Zadejte prosím platný klíč a tajné heslo aplikace.", "Step 1 failed. Exception: %s" : "Selhal krok 1. Výjimka: %s", "Step 2 failed. Exception: %s" : "Selhal krok 2. Výjimka: %s", "External storage" : "Externí úložiště", @@ -20,12 +23,15 @@ "SFTP with secret key login" : "SFTP login s tajným klíčem", "Public key" : "Veřejný klíč", "Storage with id \"%i\" not found" : "Úložiště s id \"%i\" nebylo nalezeno", + "Invalid backend or authentication mechanism class" : "Neplatný backend nebo třída ověřovacího mechanismu", "Invalid mount point" : "Neplatný přípojný bod", "Invalid storage backend \"%s\"" : "Neplatná služba úložiště \"%s\"", "Personal" : "Osobní", "System" : "Systém", "Grant access" : "Povolit přístup", "Access granted" : "Přístup povolen", + "Error configuring OAuth1" : "Chyba nastavení OAuth1", + "Error configuring OAuth2" : "Chyba nastavení OAuth2", "Enable encryption" : "Povolit šifrování", "Enable previews" : "Povolit náhledy", "Check for changes" : "Zkontrolovat změny", @@ -37,12 +43,18 @@ "Saved" : "Uloženo", "Generate keys" : "Vytvořit klíče", "Error generating key pair" : "Chyba při vytváření páru klíčů", + "Access key" : "Přístupový klíč", + "Secret key" : "Tajný klíč", "None" : "Žádné", + "OAuth1" : "OAuth1", "App key" : "Klíč aplikace", "App secret" : "Tajemství aplikace", + "OAuth2" : "OAuth2", "Client ID" : "Klientské ID", "Client secret" : "Klientské tajemství", + "Username and password" : "Uživatelské jméno a heslo", "Password" : "Heslo", + "Session credentials" : "Přihlašovací údaje sezení", "Amazon S3" : "Amazon S3", "Hostname" : "Hostname", "Port" : "Port", @@ -53,11 +65,15 @@ "URL" : "URL", "Secure https://" : "Zabezpečené https://", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "Zabezpečené ftps://", + "Google Drive" : "Google Drive", "Local" : "Místní", "Location" : "Umístění", "ownCloud" : "ownCloud", + "SFTP" : "SFTP", "Root" : "Kořen", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Poznámka:</b>", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> cURL podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Poznámka:</b> FTP podpora v PHP není povolena nebo nainstalována. Není možné připojení %s. Prosím požádejte svého správce systému ať ji nainstaluje.", @@ -69,6 +85,7 @@ "Scope" : "Rozsah", "External Storage" : "Externí úložiště", "Folder name" : "Název složky", + "Authentication" : "Ověření", "Configuration" : "Nastavení", "Available for" : "Dostupné pro", "Advanced settings" : "Pokročilá nastavení", diff --git a/apps/files_external/l10n/fr.js b/apps/files_external/l10n/fr.js index 42944b2f2fb..8ac5b1a4466 100644 --- a/apps/files_external/l10n/fr.js +++ b/apps/files_external/l10n/fr.js @@ -27,13 +27,17 @@ OC.L10N.register( "Storage with id \"%i\" not found" : "Stockage avec l'id \"%i\" non trouvé", "Invalid backend or authentication mechanism class" : "Système de stockage ou méthode d'authentification non valable", "Invalid mount point" : "Point de montage non valide", + "Objectstore forbidden" : "\"Objectstore\" interdit", "Invalid storage backend \"%s\"" : "Service de stockage non valide : \"%s\"", + "Unsatisfied backend parameters" : "Paramètres manquants pour le service", "Unsatisfied authentication mechanism parameters" : "Paramètres manquants pour la méthode d'authentification", "Admin-only storage backend \"%s\"" : "Service de stockage \"%s\" pour admins seulement", "Personal" : "Personnel", "System" : "Système", "Grant access" : "Autoriser l'accès", "Access granted" : "Accès autorisé", + "Error configuring OAuth1" : "Erreur lors de la configuration de OAuth1", + "Error configuring OAuth2" : "Erreur lors de la configuration de OAuth2", "Enable encryption" : "Activer le chiffrement", "Enable previews" : "Activer les prévisualisations", "Check for changes" : "Rechercher les modifications", @@ -45,6 +49,9 @@ OC.L10N.register( "Saved" : "Sauvegardé", "Generate keys" : "Générer des clés", "Error generating key pair" : "Erreur lors de la génération des clés", + "Access key" : "Clé d'accès", + "Secret key" : "Clé secrète", + "Builtin" : "inclus", "None" : "Aucun", "OAuth1" : "OAuth1", "App key" : "App key", diff --git a/apps/files_external/l10n/fr.json b/apps/files_external/l10n/fr.json index ffc2de0ef53..67b8932202f 100644 --- a/apps/files_external/l10n/fr.json +++ b/apps/files_external/l10n/fr.json @@ -25,13 +25,17 @@ "Storage with id \"%i\" not found" : "Stockage avec l'id \"%i\" non trouvé", "Invalid backend or authentication mechanism class" : "Système de stockage ou méthode d'authentification non valable", "Invalid mount point" : "Point de montage non valide", + "Objectstore forbidden" : "\"Objectstore\" interdit", "Invalid storage backend \"%s\"" : "Service de stockage non valide : \"%s\"", + "Unsatisfied backend parameters" : "Paramètres manquants pour le service", "Unsatisfied authentication mechanism parameters" : "Paramètres manquants pour la méthode d'authentification", "Admin-only storage backend \"%s\"" : "Service de stockage \"%s\" pour admins seulement", "Personal" : "Personnel", "System" : "Système", "Grant access" : "Autoriser l'accès", "Access granted" : "Accès autorisé", + "Error configuring OAuth1" : "Erreur lors de la configuration de OAuth1", + "Error configuring OAuth2" : "Erreur lors de la configuration de OAuth2", "Enable encryption" : "Activer le chiffrement", "Enable previews" : "Activer les prévisualisations", "Check for changes" : "Rechercher les modifications", @@ -43,6 +47,9 @@ "Saved" : "Sauvegardé", "Generate keys" : "Générer des clés", "Error generating key pair" : "Erreur lors de la génération des clés", + "Access key" : "Clé d'accès", + "Secret key" : "Clé secrète", + "Builtin" : "inclus", "None" : "Aucun", "OAuth1" : "OAuth1", "App key" : "App key", diff --git a/apps/files_external/l10n/id.js b/apps/files_external/l10n/id.js index a15106a8f74..e26ad12f3a8 100644 --- a/apps/files_external/l10n/id.js +++ b/apps/files_external/l10n/id.js @@ -1,6 +1,9 @@ OC.L10N.register( "files_external", { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Permintaan pengambilan token gagal. Pastikan kunci dan kerahasiaan aplikasi Anda sudah benar.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Akses pengambilan token gagal. Pastikan kunci dan kerahasiaan aplikasi Anda sudah benar.", + "Please provide a valid app key and secret." : "Silakan berikan kunci dan kerahasiaan aplikasi yang benar.", "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s", "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s", "External storage" : "Penyimpanan eksternal", @@ -22,12 +25,19 @@ OC.L10N.register( "SFTP with secret key login" : "SFTP dengan kunci rahasia masuk", "Public key" : "Kunci Public", "Storage with id \"%i\" not found" : "Penyimpanan dengan id \"%i\" tidak ditemukan", + "Invalid backend or authentication mechanism class" : "Beckend atau kelas mekanisme otentikasi salah.", "Invalid mount point" : "Mount point salah", + "Objectstore forbidden" : "Objectstore terlarang", "Invalid storage backend \"%s\"" : "Backend penyimpanan \"%s\" salah", + "Unsatisfied backend parameters" : "Parameter backend tidak lengkap", + "Unsatisfied authentication mechanism parameters" : "Parameter mekanisme otentikasi tidak lengkap", + "Admin-only storage backend \"%s\"" : "Backend penyimpanan hanya-admin \"%s\"", "Personal" : "Pribadi", "System" : "Sistem", "Grant access" : "Berikan hak akses", "Access granted" : "Akses diberikan", + "Error configuring OAuth1" : "Kesalahan mengkonfigurasi OAuth1", + "Error configuring OAuth2" : "Kesalahan mengkonfigurasi OAuth2", "Enable encryption" : "Aktifkan enkripsi", "Enable previews" : "Aktifkan pratinjau", "Check for changes" : "Periksa perubahan", @@ -39,12 +49,19 @@ OC.L10N.register( "Saved" : "Disimpan", "Generate keys" : "Hasilkan kunci", "Error generating key pair" : "Kesalahan saat menghasilkan pasangan kunci", + "Access key" : "Kunci akses", + "Secret key" : "Kunci rahasia", + "Builtin" : "Internal", "None" : "Tidak ada", + "OAuth1" : "OAuth1", "App key" : "Kunci Apl", "App secret" : "Rahasia Apl", + "OAuth2" : "OAuth2", "Client ID" : "ID Klien", "Client secret" : "Rahasia klien", + "Username and password" : "Nama pengguna dan sandi", "Password" : "Sandi", + "Session credentials" : "Kredensial sesi", "Amazon S3" : "Amazon S3", "Hostname" : "Nama Host", "Port" : "Port", @@ -55,11 +72,15 @@ OC.L10N.register( "URL" : "URL", "Secure https://" : "Secure https://", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "Secure ftps://", + "Google Drive" : "Google Drive", "Local" : "Lokal", "Location" : "lokasi", "ownCloud" : "ownCloud", + "SFTP" : "SFTP", "Root" : "Root", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Catatan:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", @@ -71,6 +92,7 @@ OC.L10N.register( "Scope" : "Skop", "External Storage" : "Penyimpanan Eksternal", "Folder name" : "Nama folder", + "Authentication" : "Otentikasi", "Configuration" : "Konfigurasi", "Available for" : "Tersedia untuk", "Advanced settings" : "Pengaturan Lanjutan", diff --git a/apps/files_external/l10n/id.json b/apps/files_external/l10n/id.json index aa4990ec828..9c83475f756 100644 --- a/apps/files_external/l10n/id.json +++ b/apps/files_external/l10n/id.json @@ -1,4 +1,7 @@ { "translations": { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Permintaan pengambilan token gagal. Pastikan kunci dan kerahasiaan aplikasi Anda sudah benar.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Akses pengambilan token gagal. Pastikan kunci dan kerahasiaan aplikasi Anda sudah benar.", + "Please provide a valid app key and secret." : "Silakan berikan kunci dan kerahasiaan aplikasi yang benar.", "Step 1 failed. Exception: %s" : "Langkah 1 gagal. Kecuali: %s", "Step 2 failed. Exception: %s" : "Langkah 2 gagal. Kecuali: %s", "External storage" : "Penyimpanan eksternal", @@ -20,12 +23,19 @@ "SFTP with secret key login" : "SFTP dengan kunci rahasia masuk", "Public key" : "Kunci Public", "Storage with id \"%i\" not found" : "Penyimpanan dengan id \"%i\" tidak ditemukan", + "Invalid backend or authentication mechanism class" : "Beckend atau kelas mekanisme otentikasi salah.", "Invalid mount point" : "Mount point salah", + "Objectstore forbidden" : "Objectstore terlarang", "Invalid storage backend \"%s\"" : "Backend penyimpanan \"%s\" salah", + "Unsatisfied backend parameters" : "Parameter backend tidak lengkap", + "Unsatisfied authentication mechanism parameters" : "Parameter mekanisme otentikasi tidak lengkap", + "Admin-only storage backend \"%s\"" : "Backend penyimpanan hanya-admin \"%s\"", "Personal" : "Pribadi", "System" : "Sistem", "Grant access" : "Berikan hak akses", "Access granted" : "Akses diberikan", + "Error configuring OAuth1" : "Kesalahan mengkonfigurasi OAuth1", + "Error configuring OAuth2" : "Kesalahan mengkonfigurasi OAuth2", "Enable encryption" : "Aktifkan enkripsi", "Enable previews" : "Aktifkan pratinjau", "Check for changes" : "Periksa perubahan", @@ -37,12 +47,19 @@ "Saved" : "Disimpan", "Generate keys" : "Hasilkan kunci", "Error generating key pair" : "Kesalahan saat menghasilkan pasangan kunci", + "Access key" : "Kunci akses", + "Secret key" : "Kunci rahasia", + "Builtin" : "Internal", "None" : "Tidak ada", + "OAuth1" : "OAuth1", "App key" : "Kunci Apl", "App secret" : "Rahasia Apl", + "OAuth2" : "OAuth2", "Client ID" : "ID Klien", "Client secret" : "Rahasia klien", + "Username and password" : "Nama pengguna dan sandi", "Password" : "Sandi", + "Session credentials" : "Kredensial sesi", "Amazon S3" : "Amazon S3", "Hostname" : "Nama Host", "Port" : "Port", @@ -53,11 +70,15 @@ "URL" : "URL", "Secure https://" : "Secure https://", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "Secure ftps://", + "Google Drive" : "Google Drive", "Local" : "Lokal", "Location" : "lokasi", "ownCloud" : "ownCloud", + "SFTP" : "SFTP", "Root" : "Root", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Catatan:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan cURL di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Catatan:</b> Dukungan FTP di PHP tidak diaktifkan atau belum diinstal. Mengaitkan %s tidak dimungkinkan. Silakan minta administrator sistem Anda untuk menginstalnya.", @@ -69,6 +90,7 @@ "Scope" : "Skop", "External Storage" : "Penyimpanan Eksternal", "Folder name" : "Nama folder", + "Authentication" : "Otentikasi", "Configuration" : "Konfigurasi", "Available for" : "Tersedia untuk", "Advanced settings" : "Pengaturan Lanjutan", diff --git a/apps/files_external/l10n/pt_PT.js b/apps/files_external/l10n/pt_PT.js index 44c542d596c..182eb7f17f1 100644 --- a/apps/files_external/l10n/pt_PT.js +++ b/apps/files_external/l10n/pt_PT.js @@ -1,6 +1,9 @@ OC.L10N.register( "files_external", { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Não foi possível obter as senhas solicitadas. Verifique se o código e o segredo da sua app estão corretos.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Não foi possível obter as senhas de acesso. Verifique se o código e o segredo da sua app estão corretos.", + "Please provide a valid app key and secret." : "Por favor, indique um código e segredo de app válidos.", "Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s", "Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s", "External storage" : "Armazenamento Externo", @@ -10,34 +13,50 @@ OC.L10N.register( "Region (optional for OpenStack Object Storage)" : "Região (opcional para OpenStack Object Storage)", "API Key (required for Rackspace Cloud Files)" : "Chave API (necessário para Rackspace Cloud File)", "Tenantname (required for OpenStack Object Storage)" : "Nome do Serviço (necessário para OpenStack Object Storage)", - "Password (required for OpenStack Object Storage)" : "Senha (necessária para OpenStack Object Storage)", + "Password (required for OpenStack Object Storage)" : "Palavra-passe (necessária para OpenStack Object Storage)", "Service Name (required for OpenStack Object Storage)" : "Nome do Serviço (necessário para OpenStack Object Storage)", "URL of identity endpoint (required for OpenStack Object Storage)" : "Nome do Serviço (necessário para OpenStack Object Storage)", - "Timeout of HTTP requests in seconds" : "Timeout de pedidos HTTP em segundos", + "Timeout of HTTP requests in seconds" : "Expiração de pedidos HTTP em segundos", "SMB / CIFS using OC login" : "SMB / CIFS utilizando o início de sessão OC", "Host" : "Anfitrião", - "Username as share" : "Utilizar nome de utilizador como partilha", + "Username as share" : "Nome de utilizador como partilha", "Share" : "Compartilhar", "Remote subfolder" : "Subpasta remota ", "Public key" : "Chave pública", - "Storage with id \"%i\" not found" : "Armazenamento com ID \"%i\" não encontrado", + "Storage with id \"%i\" not found" : "Não foi encontrado o armazenamento com a id. \"%i\"", "Invalid mount point" : "Ponto de montagem inválido", "Invalid storage backend \"%s\"" : "Backend de armazenamento inválido \"%s\"", + "Unsatisfied authentication mechanism parameters" : "Parâmetros do mecanismo de autenticação inválidos", "Personal" : "Pessoal", "System" : "Sistema", "Grant access" : "Conceder acesso", "Access granted" : "Acesso autorizado", + "Error configuring OAuth1" : "Erro de configuração OAuth1", + "Error configuring OAuth2" : "Erro de configuração OAuth2", + "Enable encryption" : "Ative a encriptação", + "Enable previews" : "Ative as pré-visualizações", + "Check for changes" : "Verifique as suas alterações", + "Never" : "Nunca", + "Once every direct access" : "Uma vez em cada acesso direto", + "Every time the filesystem is used" : "De todas as vezes que o sistema de ficheiros é usado", "All users. Type to select user or group." : "Todos os utilizadores. Digite para selecionar o utilizador ou grupo.", "(group)" : "(grupo)", "Saved" : "Guardado", "Generate keys" : "Gerar chaves", "Error generating key pair" : "Erro ao gerar chave par", + "Access key" : "Código de acesso", + "Secret key" : "Código secreto", + "Builtin" : "Integrado", "None" : "Nenhum", + "OAuth1" : "OAuth1", "App key" : "Chave da App", - "App secret" : "Chave secreta da aplicação", + "App secret" : "Segredo da app", + "OAuth2" : "OAuth2", "Client ID" : "Id. do Cliente", - "Client secret" : "Segredo do cliente", + "Client secret" : "Segredo do cliente\\\\", + "Username and password" : "Nome de utilizador e palavra-passe", "Password" : "Palavra-passe", + "Session credentials" : "Credenciais da sessão", "Amazon S3" : "Amazon S3", "Hostname" : "Nome do Anfitrião", "Port" : "Porta", @@ -48,11 +67,15 @@ OC.L10N.register( "URL" : "URL", "Secure https://" : "https:// Seguro", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "ftps:// Seguro", + "Google Drive" : "Google Drive", "Local" : "Local", "Location" : "Localização:", "ownCloud" : "ownCloud", - "Root" : "Raiz", + "SFTP" : "SFTP", + "Root" : "Root", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Nota:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", @@ -64,6 +87,7 @@ OC.L10N.register( "Scope" : "Âmbito", "External Storage" : "Armazenamento Externo", "Folder name" : "Nome da pasta", + "Authentication" : "Autenticação", "Configuration" : "Configuração", "Available for" : "Disponível para ", "Advanced settings" : "Definições avançadas", diff --git a/apps/files_external/l10n/pt_PT.json b/apps/files_external/l10n/pt_PT.json index cda3b0bbd07..0f3a9298057 100644 --- a/apps/files_external/l10n/pt_PT.json +++ b/apps/files_external/l10n/pt_PT.json @@ -1,4 +1,7 @@ { "translations": { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Não foi possível obter as senhas solicitadas. Verifique se o código e o segredo da sua app estão corretos.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Não foi possível obter as senhas de acesso. Verifique se o código e o segredo da sua app estão corretos.", + "Please provide a valid app key and secret." : "Por favor, indique um código e segredo de app válidos.", "Step 1 failed. Exception: %s" : "Passo 1 falhou. Exceção: %s", "Step 2 failed. Exception: %s" : "Passo 2 falhou. Exceção: %s", "External storage" : "Armazenamento Externo", @@ -8,34 +11,50 @@ "Region (optional for OpenStack Object Storage)" : "Região (opcional para OpenStack Object Storage)", "API Key (required for Rackspace Cloud Files)" : "Chave API (necessário para Rackspace Cloud File)", "Tenantname (required for OpenStack Object Storage)" : "Nome do Serviço (necessário para OpenStack Object Storage)", - "Password (required for OpenStack Object Storage)" : "Senha (necessária para OpenStack Object Storage)", + "Password (required for OpenStack Object Storage)" : "Palavra-passe (necessária para OpenStack Object Storage)", "Service Name (required for OpenStack Object Storage)" : "Nome do Serviço (necessário para OpenStack Object Storage)", "URL of identity endpoint (required for OpenStack Object Storage)" : "Nome do Serviço (necessário para OpenStack Object Storage)", - "Timeout of HTTP requests in seconds" : "Timeout de pedidos HTTP em segundos", + "Timeout of HTTP requests in seconds" : "Expiração de pedidos HTTP em segundos", "SMB / CIFS using OC login" : "SMB / CIFS utilizando o início de sessão OC", "Host" : "Anfitrião", - "Username as share" : "Utilizar nome de utilizador como partilha", + "Username as share" : "Nome de utilizador como partilha", "Share" : "Compartilhar", "Remote subfolder" : "Subpasta remota ", "Public key" : "Chave pública", - "Storage with id \"%i\" not found" : "Armazenamento com ID \"%i\" não encontrado", + "Storage with id \"%i\" not found" : "Não foi encontrado o armazenamento com a id. \"%i\"", "Invalid mount point" : "Ponto de montagem inválido", "Invalid storage backend \"%s\"" : "Backend de armazenamento inválido \"%s\"", + "Unsatisfied authentication mechanism parameters" : "Parâmetros do mecanismo de autenticação inválidos", "Personal" : "Pessoal", "System" : "Sistema", "Grant access" : "Conceder acesso", "Access granted" : "Acesso autorizado", + "Error configuring OAuth1" : "Erro de configuração OAuth1", + "Error configuring OAuth2" : "Erro de configuração OAuth2", + "Enable encryption" : "Ative a encriptação", + "Enable previews" : "Ative as pré-visualizações", + "Check for changes" : "Verifique as suas alterações", + "Never" : "Nunca", + "Once every direct access" : "Uma vez em cada acesso direto", + "Every time the filesystem is used" : "De todas as vezes que o sistema de ficheiros é usado", "All users. Type to select user or group." : "Todos os utilizadores. Digite para selecionar o utilizador ou grupo.", "(group)" : "(grupo)", "Saved" : "Guardado", "Generate keys" : "Gerar chaves", "Error generating key pair" : "Erro ao gerar chave par", + "Access key" : "Código de acesso", + "Secret key" : "Código secreto", + "Builtin" : "Integrado", "None" : "Nenhum", + "OAuth1" : "OAuth1", "App key" : "Chave da App", - "App secret" : "Chave secreta da aplicação", + "App secret" : "Segredo da app", + "OAuth2" : "OAuth2", "Client ID" : "Id. do Cliente", - "Client secret" : "Segredo do cliente", + "Client secret" : "Segredo do cliente\\\\", + "Username and password" : "Nome de utilizador e palavra-passe", "Password" : "Palavra-passe", + "Session credentials" : "Credenciais da sessão", "Amazon S3" : "Amazon S3", "Hostname" : "Nome do Anfitrião", "Port" : "Porta", @@ -46,11 +65,15 @@ "URL" : "URL", "Secure https://" : "https:// Seguro", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "ftps:// Seguro", + "Google Drive" : "Google Drive", "Local" : "Local", "Location" : "Localização:", "ownCloud" : "ownCloud", - "Root" : "Raiz", + "SFTP" : "SFTP", + "Root" : "Root", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Nota:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte cURL no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Aviso:</b> O suporte FTP no PHP não está activo ou instalado. Não é possível montar %s. Peça ao seu administrador para instalar.", @@ -62,6 +85,7 @@ "Scope" : "Âmbito", "External Storage" : "Armazenamento Externo", "Folder name" : "Nome da pasta", + "Authentication" : "Autenticação", "Configuration" : "Configuração", "Available for" : "Disponível para ", "Advanced settings" : "Definições avançadas", diff --git a/apps/files_external/l10n/tr.js b/apps/files_external/l10n/tr.js index 81418098ea0..68e69034857 100644 --- a/apps/files_external/l10n/tr.js +++ b/apps/files_external/l10n/tr.js @@ -1,6 +1,9 @@ OC.L10N.register( "files_external", { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Getirme istek jetonları başarısız oldu. Uygulama anahtarınızın ve gizli bilginin doğruluğunu kontrol edin.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Getirme erişim jetonları başarısız oldu. Uygulama anahtarınızın ve gizli bilginin doğruluğunu kontrol edin.", + "Please provide a valid app key and secret." : "Lütfen geçerli bir uygulama anahtarı ve gizli bilgisini girin.", "Step 1 failed. Exception: %s" : "Adım 1 başarısız. Özel durum: %s", "Step 2 failed. Exception: %s" : "Adım 2 başarısız. Özel durum: %s", "External storage" : "Harici depolama", @@ -22,12 +25,19 @@ OC.L10N.register( "SFTP with secret key login" : "Gizli anahtar oturumu ile SFTP", "Public key" : "Ortak anahtar", "Storage with id \"%i\" not found" : "\"%i\" kimliği ile bir depolama bulunamadı", + "Invalid backend or authentication mechanism class" : "Geçersiz arkauç veya kimlik doğrulama mekanizma sınıfı", "Invalid mount point" : "Geçersiz bağlama noktası", + "Objectstore forbidden" : "Nesne deposu yasaktır", "Invalid storage backend \"%s\"" : "Geçersiz depolama arka ucu \"%s\"", + "Unsatisfied backend parameters" : "Yetersiz arkauç parametreleri", + "Unsatisfied authentication mechanism parameters" : "Yetersiz kimlik doğrulama mekanizması parametreleri", + "Admin-only storage backend \"%s\"" : "Sadece yönetici erişimli depolama arkaucu \"%s\"", "Personal" : "Kişisel", "System" : "Sistem", "Grant access" : "Erişimi sağla", "Access granted" : "Giriş kabul edildi", + "Error configuring OAuth1" : "OAuth1 yapılandırma hatası", + "Error configuring OAuth2" : "OAuth2 yapılandırma hatası", "Enable encryption" : "Şifrelemeyi aç", "Enable previews" : "Önizlemeleri aç", "Check for changes" : "Değişiklikleri denetle", @@ -39,12 +49,19 @@ OC.L10N.register( "Saved" : "Kaydedildi", "Generate keys" : "Anahtarlar üret", "Error generating key pair" : "Anahtar çifti üretirken hata", + "Access key" : "Erişim anahtarı", + "Secret key" : "Gizli anahtar", + "Builtin" : "Yerleşik", "None" : "Hiçbiri", + "OAuth1" : "OAuth1", "App key" : "Uyg. anahtarı", "App secret" : "Uyg. parolası", + "OAuth2" : "OAuth2", "Client ID" : "İstemci kimliği", "Client secret" : "İstemci parolası", + "Username and password" : "Kullanıcı adı ve parola", "Password" : "Parola", + "Session credentials" : "Oturum bilgileri", "Amazon S3" : "Amazon S3", "Hostname" : "Makine adı", "Port" : "Port", @@ -55,11 +72,15 @@ OC.L10N.register( "URL" : "URL", "Secure https://" : "Güvenli https://", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "Güvenli ftps://", + "Google Drive" : "Google Drive", "Local" : "Yerel", "Location" : "Konum", "ownCloud" : "ownCloud", + "SFTP" : "SFTP", "Root" : "Kök", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Not:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", @@ -71,6 +92,7 @@ OC.L10N.register( "Scope" : "Kapsam", "External Storage" : "Harici Depolama", "Folder name" : "Klasör ismi", + "Authentication" : "Kimlik Doğrulama", "Configuration" : "Yapılandırma", "Available for" : "Kullanabilenler", "Advanced settings" : "Gelişmiş ayarlar", diff --git a/apps/files_external/l10n/tr.json b/apps/files_external/l10n/tr.json index 48349335bf4..7859e8e08dc 100644 --- a/apps/files_external/l10n/tr.json +++ b/apps/files_external/l10n/tr.json @@ -1,4 +1,7 @@ { "translations": { + "Fetching request tokens failed. Verify that your app key and secret are correct." : "Getirme istek jetonları başarısız oldu. Uygulama anahtarınızın ve gizli bilginin doğruluğunu kontrol edin.", + "Fetching access tokens failed. Verify that your app key and secret are correct." : "Getirme erişim jetonları başarısız oldu. Uygulama anahtarınızın ve gizli bilginin doğruluğunu kontrol edin.", + "Please provide a valid app key and secret." : "Lütfen geçerli bir uygulama anahtarı ve gizli bilgisini girin.", "Step 1 failed. Exception: %s" : "Adım 1 başarısız. Özel durum: %s", "Step 2 failed. Exception: %s" : "Adım 2 başarısız. Özel durum: %s", "External storage" : "Harici depolama", @@ -20,12 +23,19 @@ "SFTP with secret key login" : "Gizli anahtar oturumu ile SFTP", "Public key" : "Ortak anahtar", "Storage with id \"%i\" not found" : "\"%i\" kimliği ile bir depolama bulunamadı", + "Invalid backend or authentication mechanism class" : "Geçersiz arkauç veya kimlik doğrulama mekanizma sınıfı", "Invalid mount point" : "Geçersiz bağlama noktası", + "Objectstore forbidden" : "Nesne deposu yasaktır", "Invalid storage backend \"%s\"" : "Geçersiz depolama arka ucu \"%s\"", + "Unsatisfied backend parameters" : "Yetersiz arkauç parametreleri", + "Unsatisfied authentication mechanism parameters" : "Yetersiz kimlik doğrulama mekanizması parametreleri", + "Admin-only storage backend \"%s\"" : "Sadece yönetici erişimli depolama arkaucu \"%s\"", "Personal" : "Kişisel", "System" : "Sistem", "Grant access" : "Erişimi sağla", "Access granted" : "Giriş kabul edildi", + "Error configuring OAuth1" : "OAuth1 yapılandırma hatası", + "Error configuring OAuth2" : "OAuth2 yapılandırma hatası", "Enable encryption" : "Şifrelemeyi aç", "Enable previews" : "Önizlemeleri aç", "Check for changes" : "Değişiklikleri denetle", @@ -37,12 +47,19 @@ "Saved" : "Kaydedildi", "Generate keys" : "Anahtarlar üret", "Error generating key pair" : "Anahtar çifti üretirken hata", + "Access key" : "Erişim anahtarı", + "Secret key" : "Gizli anahtar", + "Builtin" : "Yerleşik", "None" : "Hiçbiri", + "OAuth1" : "OAuth1", "App key" : "Uyg. anahtarı", "App secret" : "Uyg. parolası", + "OAuth2" : "OAuth2", "Client ID" : "İstemci kimliği", "Client secret" : "İstemci parolası", + "Username and password" : "Kullanıcı adı ve parola", "Password" : "Parola", + "Session credentials" : "Oturum bilgileri", "Amazon S3" : "Amazon S3", "Hostname" : "Makine adı", "Port" : "Port", @@ -53,11 +70,15 @@ "URL" : "URL", "Secure https://" : "Güvenli https://", "Dropbox" : "Dropbox", + "FTP" : "FTP", "Secure ftps://" : "Güvenli ftps://", + "Google Drive" : "Google Drive", "Local" : "Yerel", "Location" : "Konum", "ownCloud" : "ownCloud", + "SFTP" : "SFTP", "Root" : "Kök", + "SMB / CIFS" : "SMB / CIFS", "<b>Note:</b> " : "<b>Not:</b> ", "<b>Note:</b> The cURL support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de cURL desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", "<b>Note:</b> The FTP support in PHP is not enabled or installed. Mounting of %s is not possible. Please ask your system administrator to install it." : "<b>Not:</b> PHP'de FTP desteği etkin veya kurulu değil. %s bağlaması mümkün olmayacak. Lütfen kurulumu için sistem yöneticilerinizle iletişime geçin.", @@ -69,6 +90,7 @@ "Scope" : "Kapsam", "External Storage" : "Harici Depolama", "Folder name" : "Klasör ismi", + "Authentication" : "Kimlik Doğrulama", "Configuration" : "Yapılandırma", "Available for" : "Kullanabilenler", "Advanced settings" : "Gelişmiş ayarlar", diff --git a/apps/files_external/lib/google.php b/apps/files_external/lib/google.php index e29b1036244..94f954178c0 100644 --- a/apps/files_external/lib/google.php +++ b/apps/files_external/lib/google.php @@ -248,8 +248,6 @@ class Google extends \OC\Files\Storage\Common { } public function opendir($path) { - // Remove leading and trailing slashes - $path = trim($path, '/'); $folder = $this->getDriveFile($path); if ($folder) { $files = array(); diff --git a/apps/files_sharing/ajax/external.php b/apps/files_sharing/ajax/external.php index d26a64d3aec..66cfd8e9d1a 100644 --- a/apps/files_sharing/ajax/external.php +++ b/apps/files_sharing/ajax/external.php @@ -52,6 +52,7 @@ $externalManager = new \OCA\Files_Sharing\External\Manager( \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), \OC::$server->getUserSession()->getUser()->getUID() ); diff --git a/apps/files_sharing/api/local.php b/apps/files_sharing/api/local.php index 87025998b3d..61b8b47d2d3 100644 --- a/apps/files_sharing/api/local.php +++ b/apps/files_sharing/api/local.php @@ -346,6 +346,10 @@ class Local { } } } + + $data['permissions'] = $share['permissions']; + $data['expiration'] = $share['expiration']; + return new \OC_OCS_Result($data); } else { return new \OC_OCS_Result(null, 404, "couldn't share file"); diff --git a/apps/files_sharing/api/remote.php b/apps/files_sharing/api/remote.php index f6cb0a29d8b..0f6d2dc265a 100644 --- a/apps/files_sharing/api/remote.php +++ b/apps/files_sharing/api/remote.php @@ -38,6 +38,7 @@ class Remote { Filesystem::getMountManager(), Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), \OC_User::getUser() ); @@ -56,6 +57,7 @@ class Remote { Filesystem::getMountManager(), Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), \OC_User::getUser() ); @@ -78,6 +80,7 @@ class Remote { Filesystem::getMountManager(), Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), \OC_User::getUser() ); @@ -87,5 +90,4 @@ class Remote { return new \OC_OCS_Result(null, 404, "wrong share ID, share doesn't exist."); } - } diff --git a/apps/files_sharing/api/server2server.php b/apps/files_sharing/api/server2server.php index 4328e3830ba..6ecaea20535 100644 --- a/apps/files_sharing/api/server2server.php +++ b/apps/files_sharing/api/server2server.php @@ -70,6 +70,7 @@ class Server2Server { \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), $shareWith ); @@ -82,6 +83,28 @@ class Server2Server { Activity::FILES_SHARING_APP, Activity::SUBJECT_REMOTE_SHARE_RECEIVED, array($user, trim($name, '/')), '', array(), '', '', $shareWith, Activity::TYPE_REMOTE_SHARE, Activity::PRIORITY_LOW); + $urlGenerator = \OC::$server->getURLGenerator(); + + $notificationManager = \OC::$server->getNotificationManager(); + $notification = $notificationManager->createNotification(); + $notification->setApp('files_sharing') + ->setUser($shareWith) + ->setTimestamp(time()) + ->setObject('remote_share', $remoteId) + ->setSubject('remote_share', [$user, trim($name, '/')]); + + $acceptAction = $notification->createAction(); + $acceptAction->setLabel('accept') + ->setLink($urlGenerator->getAbsoluteURL('/ocs/v1.php/apps/files_sharing/api/v1/remote_shares/' . $remoteId), 'POST'); + $declineAction = $notification->createAction(); + $declineAction->setLabel('decline') + ->setLink($urlGenerator->getAbsoluteURL('/ocs/v1.php/apps/files_sharing/api/v1/remote_shares/' . $remoteId), 'DELETE'); + + $notification->addAction($acceptAction) + ->addAction($declineAction); + + $notificationManager->notify($notification); + return new \OC_OCS_Result(); } catch (\Exception $e) { \OCP\Util::writeLog('files_sharing', 'server can not add remote share, ' . $e->getMessage(), \OCP\Util::ERROR); diff --git a/apps/files_sharing/api/sharees.php b/apps/files_sharing/api/sharees.php new file mode 100644 index 00000000000..d7eabb9a550 --- /dev/null +++ b/apps/files_sharing/api/sharees.php @@ -0,0 +1,409 @@ +<?php +/** + * @author Roeland Jago Douma <roeland@famdouma.nl> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\Files_Sharing\API; + +use OCP\Contacts\IManager; +use OCP\IGroup; +use OCP\IGroupManager; +use OCP\ILogger; +use OCP\IRequest; +use OCP\IUser; +use OCP\IUserManager; +use OCP\IConfig; +use OCP\IUserSession; +use OCP\IURLGenerator; +use OCP\Share; + +class Sharees { + + /** @var IGroupManager */ + protected $groupManager; + + /** @var IUserManager */ + protected $userManager; + + /** @var IManager */ + protected $contactsManager; + + /** @var IConfig */ + protected $config; + + /** @var IUserSession */ + protected $userSession; + + /** @var IRequest */ + protected $request; + + /** @var IURLGenerator */ + protected $urlGenerator; + + /** @var ILogger */ + protected $logger; + + /** @var bool */ + protected $shareWithGroupOnly = false; + + /** @var int */ + protected $offset = 0; + + /** @var int */ + protected $limit = 10; + + /** @var array */ + protected $result = [ + 'exact' => [ + 'users' => [], + 'groups' => [], + 'remotes' => [], + ], + 'users' => [], + 'groups' => [], + 'remotes' => [], + ]; + + protected $reachedEndFor = []; + + /** + * @param IGroupManager $groupManager + * @param IUserManager $userManager + * @param IManager $contactsManager + * @param IConfig $config + * @param IUserSession $userSession + * @param IURLGenerator $urlGenerator + * @param IRequest $request + * @param ILogger $logger + */ + public function __construct(IGroupManager $groupManager, + IUserManager $userManager, + IManager $contactsManager, + IConfig $config, + IUserSession $userSession, + IURLGenerator $urlGenerator, + IRequest $request, + ILogger $logger) { + $this->groupManager = $groupManager; + $this->userManager = $userManager; + $this->contactsManager = $contactsManager; + $this->config = $config; + $this->userSession = $userSession; + $this->urlGenerator = $urlGenerator; + $this->request = $request; + $this->logger = $logger; + } + + /** + * @param string $search + */ + protected function getUsers($search) { + $this->result['users'] = $this->result['exact']['users'] = $users = []; + + if ($this->shareWithGroupOnly) { + // Search in all the groups this user is part of + $userGroups = $this->groupManager->getUserGroupIds($this->userSession->getUser()); + foreach ($userGroups as $userGroup) { + $usersTmp = $this->groupManager->displayNamesInGroup($userGroup, $search, $this->limit, $this->offset); + foreach ($usersTmp as $uid => $userDisplayName) { + $users[$uid] = $userDisplayName; + } + } + } else { + // Search in all users + $usersTmp = $this->userManager->searchDisplayName($search, $this->limit, $this->offset); + + foreach ($usersTmp as $user) { + $users[$user->getUID()] = $user->getDisplayName(); + } + } + + if (sizeof($users) < $this->limit) { + $this->reachedEndFor[] = 'users'; + } + + $foundUserById = false; + foreach ($users as $uid => $userDisplayName) { + if (strtolower($uid) === $search || strtolower($userDisplayName) === $search) { + if (strtolower($uid) === $search) { + $foundUserById = true; + } + $this->result['exact']['users'][] = [ + 'label' => $userDisplayName, + 'value' => [ + 'shareType' => Share::SHARE_TYPE_USER, + 'shareWith' => $uid, + ], + ]; + } else { + $this->result['users'][] = [ + 'label' => $userDisplayName, + 'value' => [ + 'shareType' => Share::SHARE_TYPE_USER, + 'shareWith' => $uid, + ], + ]; + } + } + + if ($this->offset === 0 && !$foundUserById) { + // On page one we try if the search result has a direct hit on the + // user id and if so, we add that to the exact match list + $user = $this->userManager->get($search); + if ($user instanceof IUser) { + array_push($this->result['exact']['users'], [ + 'label' => $user->getDisplayName(), + 'value' => [ + 'shareType' => Share::SHARE_TYPE_USER, + 'shareWith' => $user->getUID(), + ], + ]); + } + } + } + + /** + * @param string $search + */ + protected function getGroups($search) { + $this->result['groups'] = $this->result['exact']['groups'] = []; + + $groups = $this->groupManager->search($search, $this->limit, $this->offset); + $groups = array_map(function (IGroup $group) { return $group->getGID(); }, $groups); + + if (sizeof($groups) < $this->limit) { + $this->reachedEndFor[] = 'groups'; + } + + $userGroups = []; + if (!empty($groups) && $this->shareWithGroupOnly) { + // Intersect all the groups that match with the groups this user is a member of + $userGroups = $this->groupManager->getUserGroups($this->userSession->getUser()); + $userGroups = array_map(function (IGroup $group) { return $group->getGID(); }, $userGroups); + $groups = array_intersect($groups, $userGroups); + } + + foreach ($groups as $gid) { + if (strtolower($gid) === $search) { + $this->result['exact']['groups'][] = [ + 'label' => $search, + 'value' => [ + 'shareType' => Share::SHARE_TYPE_GROUP, + 'shareWith' => $search, + ], + ]; + } else { + $this->result['groups'][] = [ + 'label' => $gid, + 'value' => [ + 'shareType' => Share::SHARE_TYPE_GROUP, + 'shareWith' => $gid, + ], + ]; + } + } + + if ($this->offset === 0 && empty($this->result['exact']['groups'])) { + // On page one we try if the search result has a direct hit on the + // user id and if so, we add that to the exact match list + $group = $this->groupManager->get($search); + if ($group instanceof IGroup && (!$this->shareWithGroupOnly || in_array($group->getGID(), $userGroups))) { + array_push($this->result['exact']['groups'], [ + 'label' => $group->getGID(), + 'value' => [ + 'shareType' => Share::SHARE_TYPE_GROUP, + 'shareWith' => $group->getGID(), + ], + ]); + } + } + } + + /** + * @param string $search + * @return array possible sharees + */ + protected function getRemote($search) { + $this->result['remotes'] = []; + + // Search in contacts + //@todo Pagination missing + $addressBookContacts = $this->contactsManager->search($search, ['CLOUD', 'FN']); + $foundRemoteById = false; + foreach ($addressBookContacts as $contact) { + if (isset($contact['CLOUD'])) { + foreach ($contact['CLOUD'] as $cloudId) { + if (strtolower($contact['FN']) === $search || strtolower($cloudId) === $search) { + if (strtolower($cloudId) === $search) { + $foundRemoteById = true; + } + $this->result['exact']['remotes'][] = [ + 'label' => $contact['FN'], + 'value' => [ + 'shareType' => Share::SHARE_TYPE_REMOTE, + 'shareWith' => $cloudId, + ], + ]; + } else { + $this->result['remotes'][] = [ + 'label' => $contact['FN'], + 'value' => [ + 'shareType' => Share::SHARE_TYPE_REMOTE, + 'shareWith' => $cloudId, + ], + ]; + } + } + } + } + + if (!$foundRemoteById && substr_count($search, '@') >= 1 && substr_count($search, ' ') === 0 && $this->offset === 0) { + $this->result['exact']['remotes'][] = [ + 'label' => $search, + 'value' => [ + 'shareType' => Share::SHARE_TYPE_REMOTE, + 'shareWith' => $search, + ], + ]; + } + + $this->reachedEndFor[] = 'remotes'; + } + + /** + * @return \OC_OCS_Result + */ + public function search() { + $search = isset($_GET['search']) ? (string) $_GET['search'] : ''; + $itemType = isset($_GET['itemType']) ? (string) $_GET['itemType'] : null; + $page = !empty($_GET['page']) ? max(1, (int) $_GET['page']) : 1; + $perPage = !empty($_GET['limit']) ? max(1, (int) $_GET['limit']) : 200; + + $shareTypes = [ + Share::SHARE_TYPE_USER, + Share::SHARE_TYPE_GROUP, + Share::SHARE_TYPE_REMOTE, + ]; + if (isset($_GET['shareType']) && is_array($_GET['shareType'])) { + $shareTypes = array_intersect($shareTypes, $_GET['shareType']); + sort($shareTypes); + + } else if (isset($_GET['shareType']) && is_numeric($_GET['shareType'])) { + $shareTypes = array_intersect($shareTypes, [(int) $_GET['shareType']]); + sort($shareTypes); + } + + if (in_array(Share::SHARE_TYPE_REMOTE, $shareTypes) && !$this->isRemoteSharingAllowed($itemType)) { + // Remove remote shares from type array, because it is not allowed. + $shareTypes = array_diff($shareTypes, [Share::SHARE_TYPE_REMOTE]); + } + + $this->shareWithGroupOnly = $this->config->getAppValue('core', 'shareapi_only_share_with_group_members', 'no') === 'yes'; + $this->limit = (int) $perPage; + $this->offset = $perPage * ($page - 1); + + return $this->searchSharees(strtolower($search), $itemType, $shareTypes, $page, $perPage); + } + + /** + * Method to get out the static call for better testing + * + * @param string $itemType + * @return bool + */ + protected function isRemoteSharingAllowed($itemType) { + try { + $backend = Share::getBackend($itemType); + return $backend->isShareTypeAllowed(Share::SHARE_TYPE_REMOTE); + } catch (\Exception $e) { + return false; + } + } + + /** + * Testable search function that does not need globals + * + * @param string $search + * @param string $itemType + * @param array $shareTypes + * @param int $page + * @param int $perPage + * @return \OC_OCS_Result + */ + protected function searchSharees($search, $itemType, array $shareTypes, $page, $perPage) { + // Verify arguments + if ($itemType === null) { + return new \OC_OCS_Result(null, 400, 'missing itemType'); + } + + // Get users + if (in_array(Share::SHARE_TYPE_USER, $shareTypes)) { + $this->getUsers($search); + } + + // Get groups + if (in_array(Share::SHARE_TYPE_GROUP, $shareTypes)) { + $this->getGroups($search); + } + + // Get remote + if (in_array(Share::SHARE_TYPE_REMOTE, $shareTypes)) { + $this->getRemote($search); + } + + $response = new \OC_OCS_Result($this->result); + $response->setItemsPerPage($perPage); + + if (sizeof($this->reachedEndFor) < 3) { + $response->addHeader('Link', $this->getPaginationLink($page, [ + 'search' => $search, + 'itemType' => $itemType, + 'shareType' => $shareTypes, + 'limit' => $perPage, + ])); + } + + return $response; + } + + /** + * Generates a bunch of pagination links for the current page + * + * @param int $page Current page + * @param array $params Parameters for the URL + * @return string + */ + protected function getPaginationLink($page, array $params) { + if ($this->isV2()) { + $url = $this->urlGenerator->getAbsoluteURL('/ocs/v2.php/apps/files_sharing/api/v1/sharees') . '?'; + } else { + $url = $this->urlGenerator->getAbsoluteURL('/ocs/v1.php/apps/files_sharing/api/v1/sharees') . '?'; + } + $params['page'] = $page + 1; + $link = '<' . $url . http_build_query($params) . '>; rel="next"'; + + return $link; + } + + /** + * @return bool + */ + protected function isV2() { + return $this->request->getScriptName() === '/ocs/v2.php'; + } +} diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php index 9000fafd8dd..20f1b046d35 100644 --- a/apps/files_sharing/appinfo/app.php +++ b/apps/files_sharing/appinfo/app.php @@ -58,10 +58,6 @@ $application->setupPropagation(); \OCP\Util::addScript('files_sharing', 'external'); \OCP\Util::addStyle('files_sharing', 'sharetabview'); -// FIXME: registering a job here will cause additional useless SQL queries -// when the route is not cron.php, needs a better way -\OC::$server->getJobList()->add('OCA\Files_sharing\Lib\DeleteOrphanedSharesJob'); - \OC::$server->getActivityManager()->registerExtension(function() { return new \OCA\Files_Sharing\Activity( \OC::$server->query('L10NFactory'), @@ -107,3 +103,10 @@ if ($config->getAppValue('core', 'shareapi_enabled', 'yes') === 'yes') { } } } + +$manager = \OC::$server->getNotificationManager(); +$manager->registerNotifier(function() { + return new \OCA\Files_Sharing\Notifier( + \OC::$server->getL10NFactory() + ); +}); diff --git a/apps/files_sharing/appinfo/application.php b/apps/files_sharing/appinfo/application.php index 530195c65fa..d0dcadb77e8 100644 --- a/apps/files_sharing/appinfo/application.php +++ b/apps/files_sharing/appinfo/application.php @@ -93,6 +93,7 @@ class Application extends App { \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), $server->getHTTPHelper(), + $server->getNotificationManager(), $uid ); }); diff --git a/apps/files_sharing/appinfo/install.php b/apps/files_sharing/appinfo/install.php new file mode 100644 index 00000000000..f076a17e444 --- /dev/null +++ b/apps/files_sharing/appinfo/install.php @@ -0,0 +1,22 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +\OC::$server->getJobList()->add('OCA\Files_sharing\Lib\DeleteOrphanedSharesJob'); diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php index 184ad29bba4..375124cb730 100644 --- a/apps/files_sharing/appinfo/routes.php +++ b/apps/files_sharing/appinfo/routes.php @@ -102,3 +102,16 @@ API::register('delete', array('\OCA\Files_Sharing\API\Remote', 'declineShare'), 'files_sharing'); +$sharees = new \OCA\Files_Sharing\API\Sharees(\OC::$server->getGroupManager(), + \OC::$server->getUserManager(), + \OC::$server->getContactsManager(), + \OC::$server->getConfig(), + \OC::$server->getUserSession(), + \OC::$server->getURLGenerator(), + \OC::$server->getRequest(), + \OC::$server->getLogger()); + +API::register('get', + '/apps/files_sharing/api/v1/sharees', + [$sharees, 'search'], + 'files_sharing', API::USER_AUTH); diff --git a/apps/files_sharing/appinfo/update.php b/apps/files_sharing/appinfo/update.php index e98b60ea36d..66b8b78cacf 100644 --- a/apps/files_sharing/appinfo/update.php +++ b/apps/files_sharing/appinfo/update.php @@ -28,3 +28,4 @@ if (version_compare($installedVersion, '0.6.0', '<')) { $m->addAcceptRow(); } +\OC::$server->getJobList()->add('OCA\Files_sharing\Lib\DeleteOrphanedSharesJob'); diff --git a/apps/files_sharing/appinfo/version b/apps/files_sharing/appinfo/version index b6160487433..844f6a91acb 100644 --- a/apps/files_sharing/appinfo/version +++ b/apps/files_sharing/appinfo/version @@ -1 +1 @@ -0.6.2 +0.6.3 diff --git a/apps/files_sharing/js/settings-personal.js b/apps/files_sharing/js/settings-personal.js index 1c7aea0b9d6..14a9b7bbfa7 100644 --- a/apps/files_sharing/js/settings-personal.js +++ b/apps/files_sharing/js/settings-personal.js @@ -12,4 +12,8 @@ $(document).ready(function() { } }); + $('#oca-files-sharing-add-to-your-website').click(function() { + $('#oca-files-sharing-add-to-your-website-expanded').slideDown(); + }); + }); diff --git a/apps/files_sharing/l10n/cs_CZ.js b/apps/files_sharing/l10n/cs_CZ.js index 7051d9e56db..c16b2c77e59 100644 --- a/apps/files_sharing/l10n/cs_CZ.js +++ b/apps/files_sharing/l10n/cs_CZ.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s", "You shared %1$s via link" : "Sdílíte %1$s přes odkaz", "Shares" : "Sdílení", + "Accept" : "Přijmout", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s", "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID", "This share is password-protected" : "Toto sdílení je chráněno heslem", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Sdružený cloud", "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:", "Share it:" : "Sdílet:", - "Add it to your website:" : "Přidat na svou webovou stránku:", "Share with me via ownCloud" : "Sdíleno se mnou přes ownCloud", "HTML Code:" : "HTML kód:" }, diff --git a/apps/files_sharing/l10n/cs_CZ.json b/apps/files_sharing/l10n/cs_CZ.json index c93886aa33c..208cc0fa24b 100644 --- a/apps/files_sharing/l10n/cs_CZ.json +++ b/apps/files_sharing/l10n/cs_CZ.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s s vámi sdílí %1$s", "You shared %1$s via link" : "Sdílíte %1$s přes odkaz", "Shares" : "Sdílení", + "Accept" : "Přijmout", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID, více na %s", "Share with me through my #ownCloud Federated Cloud ID" : "Sdílej se mnou pomocí mého #ownCloud sdruženého cloud ID", "This share is password-protected" : "Toto sdílení je chráněno heslem", @@ -64,7 +65,6 @@ "Federated Cloud" : "Sdružený cloud", "Your Federated Cloud ID:" : "Vaše sdružené cloud ID:", "Share it:" : "Sdílet:", - "Add it to your website:" : "Přidat na svou webovou stránku:", "Share with me via ownCloud" : "Sdíleno se mnou přes ownCloud", "HTML Code:" : "HTML kód:" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/files_sharing/l10n/da.js b/apps/files_sharing/l10n/da.js index 7e05b2ca442..2ab7513f139 100644 --- a/apps/files_sharing/l10n/da.js +++ b/apps/files_sharing/l10n/da.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s delt %1$s med dig", "You shared %1$s via link" : "Du delte %1$s via link", "Shares" : "Delt", + "Accept" : "Acceptér", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med mig gennem min #ownCloud Federated Cloud ID, se %s", "Share with me through my #ownCloud Federated Cloud ID" : "Del med mig gennem min #ownCloud Federated Cloud ID", "This share is password-protected" : "Delingen er beskyttet af kodeord", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Din Federated Cloud ID:", "Share it:" : "Del:", - "Add it to your website:" : "Tilføj den til din hjemmeside:", + "Add to your website" : "Tilføj til dit websted", "Share with me via ownCloud" : "Del med mig gennem ownCloud", "HTML Code:" : "HTMLkode:" }, diff --git a/apps/files_sharing/l10n/da.json b/apps/files_sharing/l10n/da.json index d08dbdc4273..fe071e1d585 100644 --- a/apps/files_sharing/l10n/da.json +++ b/apps/files_sharing/l10n/da.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s delt %1$s med dig", "You shared %1$s via link" : "Du delte %1$s via link", "Shares" : "Delt", + "Accept" : "Acceptér", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med mig gennem min #ownCloud Federated Cloud ID, se %s", "Share with me through my #ownCloud Federated Cloud ID" : "Del med mig gennem min #ownCloud Federated Cloud ID", "This share is password-protected" : "Delingen er beskyttet af kodeord", @@ -64,7 +65,7 @@ "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Din Federated Cloud ID:", "Share it:" : "Del:", - "Add it to your website:" : "Tilføj den til din hjemmeside:", + "Add to your website" : "Tilføj til dit websted", "Share with me via ownCloud" : "Del med mig gennem ownCloud", "HTML Code:" : "HTMLkode:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/de.js b/apps/files_sharing/l10n/de.js index f6dcf690b60..973aa0f15ac 100644 --- a/apps/files_sharing/l10n/de.js +++ b/apps/files_sharing/l10n/de.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt", "You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben", "Shares" : "Freigaben", + "Accept" : "Ok", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", "Share it:" : "Zum Teilen:", - "Add it to your website:" : "Zum Hinzufügen zu Deiner Website:", "Share with me via ownCloud" : "Teile mit mir über ownCloud", "HTML Code:" : "HTML-Code:" }, diff --git a/apps/files_sharing/l10n/de.json b/apps/files_sharing/l10n/de.json index 76f9b6d1155..5526be3b6bf 100644 --- a/apps/files_sharing/l10n/de.json +++ b/apps/files_sharing/l10n/de.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s hat %1$s mit Dir geteilt", "You shared %1$s via link" : "Du hast %1$s über einen Link freigegeben", "Shares" : "Freigaben", + "Accept" : "Ok", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", "Share with me through my #ownCloud Federated Cloud ID" : "Teile mit mir über meine #ownCloud Federated-Cloud-ID", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", @@ -64,7 +65,6 @@ "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Deine Federated-Cloud-ID:", "Share it:" : "Zum Teilen:", - "Add it to your website:" : "Zum Hinzufügen zu Deiner Website:", "Share with me via ownCloud" : "Teile mit mir über ownCloud", "HTML Code:" : "HTML-Code:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/de_DE.js b/apps/files_sharing/l10n/de_DE.js index 3c1eccd4607..47243b8f81d 100644 --- a/apps/files_sharing/l10n/de_DE.js +++ b/apps/files_sharing/l10n/de_DE.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt", "You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt", "Shares" : "Geteiltes", + "Accept" : "Akzeptieren", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", "Share it:" : "Zum Teilen:", - "Add it to your website:" : "Zum Hinzufügen zu Ihrer Website:", "Share with me via ownCloud" : "Teilen Sie mit mir über ownCloud", "HTML Code:" : "HTML-Code:" }, diff --git a/apps/files_sharing/l10n/de_DE.json b/apps/files_sharing/l10n/de_DE.json index 08732c602ec..b63286de48d 100644 --- a/apps/files_sharing/l10n/de_DE.json +++ b/apps/files_sharing/l10n/de_DE.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s hat %1$s mit Ihnen geteilt", "You shared %1$s via link" : "Sie haben %1$s über einen Link geteilt", "Shares" : "Geteiltes", + "Accept" : "Akzeptieren", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID, siehe %s", "Share with me through my #ownCloud Federated Cloud ID" : "Teilen Sie mit mir über meine #ownCloud Federated-Cloud-ID", "This share is password-protected" : "Diese Freigabe ist durch ein Passwort geschützt", @@ -64,7 +65,6 @@ "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Ihre Federated-Cloud-ID:", "Share it:" : "Zum Teilen:", - "Add it to your website:" : "Zum Hinzufügen zu Ihrer Website:", "Share with me via ownCloud" : "Teilen Sie mit mir über ownCloud", "HTML Code:" : "HTML-Code:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/el.js b/apps/files_sharing/l10n/el.js index 6a88a675f75..037ddcd9d1d 100644 --- a/apps/files_sharing/l10n/el.js +++ b/apps/files_sharing/l10n/el.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς", "You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου", "Shares" : "Κοινόχρηστοι φάκελοι", + "Accept" : "Αποδοχή", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Διαμοιρασμός με εμένα μέσω του #ownCloud Federated Cloud ID μου, δείτε %s", "Share with me through my #ownCloud Federated Cloud ID" : "Διαμοιρασμός με εμένα μέσω του #ownCloud Federated Cloud ID μου", "This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Federated σύννεφο", "Your Federated Cloud ID:" : "Το ID σας στο Federated Cloud:", "Share it:" : "Μοιραστείτε το:", - "Add it to your website:" : "Προσθέστε το στην ιστοσελίδα σας:", + "Add to your website" : "Προσθήκη στην ιστοσελίδα σας", "Share with me via ownCloud" : "Διαμοιρασμός με εμένα μέσω του ", "HTML Code:" : "Κώδικας HTML:" }, diff --git a/apps/files_sharing/l10n/el.json b/apps/files_sharing/l10n/el.json index 01b4e6d01b8..9eb19b2ba83 100644 --- a/apps/files_sharing/l10n/el.json +++ b/apps/files_sharing/l10n/el.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "Ο %2$s διαμοιράστηκε το %1$s με εσάς", "You shared %1$s via link" : "Μοιραστήκατε το %1$s μέσω συνδέσμου", "Shares" : "Κοινόχρηστοι φάκελοι", + "Accept" : "Αποδοχή", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Διαμοιρασμός με εμένα μέσω του #ownCloud Federated Cloud ID μου, δείτε %s", "Share with me through my #ownCloud Federated Cloud ID" : "Διαμοιρασμός με εμένα μέσω του #ownCloud Federated Cloud ID μου", "This share is password-protected" : "Αυτός ο κοινόχρηστος φάκελος προστατεύεται με κωδικό", @@ -64,7 +65,7 @@ "Federated Cloud" : "Federated σύννεφο", "Your Federated Cloud ID:" : "Το ID σας στο Federated Cloud:", "Share it:" : "Μοιραστείτε το:", - "Add it to your website:" : "Προσθέστε το στην ιστοσελίδα σας:", + "Add to your website" : "Προσθήκη στην ιστοσελίδα σας", "Share with me via ownCloud" : "Διαμοιρασμός με εμένα μέσω του ", "HTML Code:" : "Κώδικας HTML:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/en_GB.js b/apps/files_sharing/l10n/en_GB.js index 40f80be5b61..424fe743088 100644 --- a/apps/files_sharing/l10n/en_GB.js +++ b/apps/files_sharing/l10n/en_GB.js @@ -40,6 +40,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s shared %1$s with you", "You shared %1$s via link" : "You shared %1$s via link", "Shares" : "Shares", + "Accept" : "Accept", "This share is password-protected" : "This share is password-protected", "The password is wrong. Try again." : "The password is wrong. Try again.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/en_GB.json b/apps/files_sharing/l10n/en_GB.json index 5a70bee7212..4e41be946d1 100644 --- a/apps/files_sharing/l10n/en_GB.json +++ b/apps/files_sharing/l10n/en_GB.json @@ -38,6 +38,7 @@ "%2$s shared %1$s with you" : "%2$s shared %1$s with you", "You shared %1$s via link" : "You shared %1$s via link", "Shares" : "Shares", + "Accept" : "Accept", "This share is password-protected" : "This share is password-protected", "The password is wrong. Try again." : "The password is wrong. Try again.", "Password" : "Password", diff --git a/apps/files_sharing/l10n/eo.js b/apps/files_sharing/l10n/eo.js index 6c78d555304..ef900774146 100644 --- a/apps/files_sharing/l10n/eo.js +++ b/apps/files_sharing/l10n/eo.js @@ -23,6 +23,7 @@ OC.L10N.register( "You shared %1$s with group %2$s" : "Vi kunhavigis %1$s kun la grupo %2$s", "%2$s shared %1$s with you" : "%2$s kunhavigis %1$s kun vi", "You shared %1$s via link" : "Vi kunhavigis %1$s per ligilo", + "Accept" : "Akcepti", "This share is password-protected" : "Ĉi tiu kunhavigo estas protektata per pasvorto", "The password is wrong. Try again." : "La pasvorto malĝustas. Provu denove.", "Password" : "Pasvorto", diff --git a/apps/files_sharing/l10n/eo.json b/apps/files_sharing/l10n/eo.json index 8899e3021ca..cc648a7c60d 100644 --- a/apps/files_sharing/l10n/eo.json +++ b/apps/files_sharing/l10n/eo.json @@ -21,6 +21,7 @@ "You shared %1$s with group %2$s" : "Vi kunhavigis %1$s kun la grupo %2$s", "%2$s shared %1$s with you" : "%2$s kunhavigis %1$s kun vi", "You shared %1$s via link" : "Vi kunhavigis %1$s per ligilo", + "Accept" : "Akcepti", "This share is password-protected" : "Ĉi tiu kunhavigo estas protektata per pasvorto", "The password is wrong. Try again." : "La pasvorto malĝustas. Provu denove.", "Password" : "Pasvorto", diff --git a/apps/files_sharing/l10n/es.js b/apps/files_sharing/l10n/es.js index 7e5e48bbf78..ca1e8c430db 100644 --- a/apps/files_sharing/l10n/es.js +++ b/apps/files_sharing/l10n/es.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted", "You shared %1$s via link" : "Ha compartido %1$s vía enlace", "Shares" : "Compartidos", + "Accept" : "Aceptar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud, ver %s", "Share with me through my #ownCloud Federated Cloud ID" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud", "This share is password-protected" : "Este elemento compartido está protegido por contraseña", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID Nube Federada:", "Share it:" : "Compartir:", - "Add it to your website:" : "Agregarlo a su sitio de internet:", + "Add to your website" : "Añadir a su Website", "Share with me via ownCloud" : "Compartirlo conmigo vía OwnCloud", "HTML Code:" : "Código HTML:" }, diff --git a/apps/files_sharing/l10n/es.json b/apps/files_sharing/l10n/es.json index 358330b80ac..4b300e1227f 100644 --- a/apps/files_sharing/l10n/es.json +++ b/apps/files_sharing/l10n/es.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s ha compartido %1$s con usted", "You shared %1$s via link" : "Ha compartido %1$s vía enlace", "Shares" : "Compartidos", + "Accept" : "Aceptar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud, ver %s", "Share with me through my #ownCloud Federated Cloud ID" : "Compartirlo conmigo a través de mi ID Nube Federada #ownCloud", "This share is password-protected" : "Este elemento compartido está protegido por contraseña", @@ -64,7 +65,7 @@ "Federated Cloud" : "Nube Federada", "Your Federated Cloud ID:" : "Su ID Nube Federada:", "Share it:" : "Compartir:", - "Add it to your website:" : "Agregarlo a su sitio de internet:", + "Add to your website" : "Añadir a su Website", "Share with me via ownCloud" : "Compartirlo conmigo vía OwnCloud", "HTML Code:" : "Código HTML:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/et_EE.js b/apps/files_sharing/l10n/et_EE.js index 535608ad511..ada0a548162 100644 --- a/apps/files_sharing/l10n/et_EE.js +++ b/apps/files_sharing/l10n/et_EE.js @@ -4,13 +4,17 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "Serverist serverisse jagamine pole antud serveris lubatud", "The mountpoint name contains invalid characters." : "Ühenduspunkti nimes on vigaseid märke.", "Invalid or untrusted SSL certificate" : "Vigane või tundmatu SSL sertifikaat", + "Storage not valid" : "Andmehoidla pole korrektne", "Couldn't add remote share" : "Ei suutnud lisada kaugjagamist", "Shared with you" : "Sinuga jagatud", "Shared with others" : "Teistega jagatud", "Shared by link" : "Jagatud lingiga", "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", + "Files and folders others share with you will show up here" : "Siin näidatakse faile ja kaustasid, mida teised on sulle jaganud", "Nothing shared yet" : "Midagi pole veel jagatud", + "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", "No shared links" : "Jagatud linke pole", + "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisata kaugjagamise {name} asukohast {owner}@{remote}?", "Remote share" : "Kaugjagamine", "Remote share password" : "Kaugjagamise parool", @@ -27,6 +31,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", "You shared %1$s via link" : "Jagasid %1$s lingiga", "Shares" : "Jagamised", + "Accept" : "Nõustu", "This share is password-protected" : "See jagamine on parooliga kaitstud", "The password is wrong. Try again." : "Parool on vale. Proovi uuesti.", "Password" : "Parool", @@ -47,7 +52,6 @@ OC.L10N.register( "Allow users on this server to send shares to other servers" : "Luba selle serveri kasutajatel saata faile teistesse serveritesse", "Allow users on this server to receive shares from other servers" : "Luba selle serveri kasutajatel võtta vastu jagamisi teistest serveritest", "Share it:" : "Jaga seda:", - "Add it to your website:" : "Lisa see oma veebisaidile:", "Share with me via ownCloud" : "Jaga minuga läbi ownCloudiga", "HTML Code:" : "HTML kood:" }, diff --git a/apps/files_sharing/l10n/et_EE.json b/apps/files_sharing/l10n/et_EE.json index f894b06fc9e..afa7fc6884d 100644 --- a/apps/files_sharing/l10n/et_EE.json +++ b/apps/files_sharing/l10n/et_EE.json @@ -2,13 +2,17 @@ "Server to server sharing is not enabled on this server" : "Serverist serverisse jagamine pole antud serveris lubatud", "The mountpoint name contains invalid characters." : "Ühenduspunkti nimes on vigaseid märke.", "Invalid or untrusted SSL certificate" : "Vigane või tundmatu SSL sertifikaat", + "Storage not valid" : "Andmehoidla pole korrektne", "Couldn't add remote share" : "Ei suutnud lisada kaugjagamist", "Shared with you" : "Sinuga jagatud", "Shared with others" : "Teistega jagatud", "Shared by link" : "Jagatud lingiga", "Nothing shared with you yet" : "Sinuga pole veel midagi jagatud", + "Files and folders others share with you will show up here" : "Siin näidatakse faile ja kaustasid, mida teised on sulle jaganud", "Nothing shared yet" : "Midagi pole veel jagatud", + "Files and folders you share will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa oled teistega jaganud", "No shared links" : "Jagatud linke pole", + "Files and folders you share by link will show up here" : "Siin kuvatakse faile ja kaustasid, mida sa jagad lingiga", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Soovid lisata kaugjagamise {name} asukohast {owner}@{remote}?", "Remote share" : "Kaugjagamine", "Remote share password" : "Kaugjagamise parool", @@ -25,6 +29,7 @@ "%2$s shared %1$s with you" : "%2$s jagas sinuga %1$s", "You shared %1$s via link" : "Jagasid %1$s lingiga", "Shares" : "Jagamised", + "Accept" : "Nõustu", "This share is password-protected" : "See jagamine on parooliga kaitstud", "The password is wrong. Try again." : "Parool on vale. Proovi uuesti.", "Password" : "Parool", @@ -45,7 +50,6 @@ "Allow users on this server to send shares to other servers" : "Luba selle serveri kasutajatel saata faile teistesse serveritesse", "Allow users on this server to receive shares from other servers" : "Luba selle serveri kasutajatel võtta vastu jagamisi teistest serveritest", "Share it:" : "Jaga seda:", - "Add it to your website:" : "Lisa see oma veebisaidile:", "Share with me via ownCloud" : "Jaga minuga läbi ownCloudiga", "HTML Code:" : "HTML kood:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/fi_FI.js b/apps/files_sharing/l10n/fi_FI.js index 6ef1f741f6d..2a3f7937fdc 100644 --- a/apps/files_sharing/l10n/fi_FI.js +++ b/apps/files_sharing/l10n/fi_FI.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi", "You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta", "Shares" : "Jaot", + "Accept" : "Hyväksy", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Jaa kanssani käyttäen #ownCloud ja federoitua pilvitunnistetta, katso %s", "Share with me through my #ownCloud Federated Cloud ID" : "Jaa kanssani käyttäen #ownCloud ja federoitua pilvitunnistetta", "This share is password-protected" : "Tämä jako on suojattu salasanalla", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Federoitu pilvi", "Your Federated Cloud ID:" : "Federoidun pilvesi tunniste:", "Share it:" : "Jaa se:", - "Add it to your website:" : "Lisää verkkosivustollesi:", + "Add to your website" : "Lisää verkkosivuillesi", "Share with me via ownCloud" : "Jaa kanssani ownCloudin kautta", "HTML Code:" : "HTML-koodi:" }, diff --git a/apps/files_sharing/l10n/fi_FI.json b/apps/files_sharing/l10n/fi_FI.json index dfb9afb5a8b..d7809f57130 100644 --- a/apps/files_sharing/l10n/fi_FI.json +++ b/apps/files_sharing/l10n/fi_FI.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s jakoi kohteen %1$s kanssasi", "You shared %1$s via link" : "Jaoit kohteen %1$s linkin kautta", "Shares" : "Jaot", + "Accept" : "Hyväksy", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Jaa kanssani käyttäen #ownCloud ja federoitua pilvitunnistetta, katso %s", "Share with me through my #ownCloud Federated Cloud ID" : "Jaa kanssani käyttäen #ownCloud ja federoitua pilvitunnistetta", "This share is password-protected" : "Tämä jako on suojattu salasanalla", @@ -64,7 +65,7 @@ "Federated Cloud" : "Federoitu pilvi", "Your Federated Cloud ID:" : "Federoidun pilvesi tunniste:", "Share it:" : "Jaa se:", - "Add it to your website:" : "Lisää verkkosivustollesi:", + "Add to your website" : "Lisää verkkosivuillesi", "Share with me via ownCloud" : "Jaa kanssani ownCloudin kautta", "HTML Code:" : "HTML-koodi:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/fr.js b/apps/files_sharing/l10n/fr.js index e07b93c788b..a59409e008a 100644 --- a/apps/files_sharing/l10n/fr.js +++ b/apps/files_sharing/l10n/fr.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous", "You shared %1$s via link" : "Vous avez partagé %1$s par lien public", "Shares" : "Partages", + "Accept" : "Accepter", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud %s", "Share with me through my #ownCloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud", "This share is password-protected" : "Ce partage est protégé par un mot de passe", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :", "Share it:" : "Partager :", - "Add it to your website:" : "Ajouter à votre site web :", + "Add to your website" : "Ajouter à votre site web", "Share with me via ownCloud" : "Partagez avec moi via ownCloud", "HTML Code:" : "Code HTML :" }, diff --git a/apps/files_sharing/l10n/fr.json b/apps/files_sharing/l10n/fr.json index e597d3100b4..0bb6f2b1b9e 100644 --- a/apps/files_sharing/l10n/fr.json +++ b/apps/files_sharing/l10n/fr.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s a partagé %1$s avec vous", "You shared %1$s via link" : "Vous avez partagé %1$s par lien public", "Shares" : "Partages", + "Accept" : "Accepter", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud %s", "Share with me through my #ownCloud Federated Cloud ID" : "Partagez avec moi grâce à mon identifiant Federated Cloud #owncloud", "This share is password-protected" : "Ce partage est protégé par un mot de passe", @@ -64,7 +65,7 @@ "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Votre identifiant Federated Cloud :", "Share it:" : "Partager :", - "Add it to your website:" : "Ajouter à votre site web :", + "Add to your website" : "Ajouter à votre site web", "Share with me via ownCloud" : "Partagez avec moi via ownCloud", "HTML Code:" : "Code HTML :" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/files_sharing/l10n/gl.js b/apps/files_sharing/l10n/gl.js index 0e279172124..f2a2d528ffc 100644 --- a/apps/files_sharing/l10n/gl.js +++ b/apps/files_sharing/l10n/gl.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s compartiu %1$s con vostede", "You shared %1$s via link" : "Vostede compartiu %1$s mediante ligazón", "Shares" : "Comparticións", + "Accept" : "Aceptar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Comparte comigo a través do meu ID da nube federada do #ownCloud , vexa %s", "Share with me through my #ownCloud Federated Cloud ID" : "Comparte comigo a través do meu ID da nube federada do #ownCloud", "This share is password-protected" : "Esta compartición está protexida con contrasinal", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Nube federada", "Your Federated Cloud ID:" : "ID da súa nube federada:", "Share it:" : "Compártao:", - "Add it to your website:" : "Engádao o seu sitio web:", "Share with me via ownCloud" : "Comparte comigo a través do ownCloud", "HTML Code:" : "Código HTML:" }, diff --git a/apps/files_sharing/l10n/gl.json b/apps/files_sharing/l10n/gl.json index b4757ca2b2b..b9998a47a12 100644 --- a/apps/files_sharing/l10n/gl.json +++ b/apps/files_sharing/l10n/gl.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s compartiu %1$s con vostede", "You shared %1$s via link" : "Vostede compartiu %1$s mediante ligazón", "Shares" : "Comparticións", + "Accept" : "Aceptar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Comparte comigo a través do meu ID da nube federada do #ownCloud , vexa %s", "Share with me through my #ownCloud Federated Cloud ID" : "Comparte comigo a través do meu ID da nube federada do #ownCloud", "This share is password-protected" : "Esta compartición está protexida con contrasinal", @@ -64,7 +65,6 @@ "Federated Cloud" : "Nube federada", "Your Federated Cloud ID:" : "ID da súa nube federada:", "Share it:" : "Compártao:", - "Add it to your website:" : "Engádao o seu sitio web:", "Share with me via ownCloud" : "Comparte comigo a través do ownCloud", "HTML Code:" : "Código HTML:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/hu_HU.js b/apps/files_sharing/l10n/hu_HU.js index b374be1c317..c78bdce652d 100644 --- a/apps/files_sharing/l10n/hu_HU.js +++ b/apps/files_sharing/l10n/hu_HU.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s", "You shared %1$s via link" : "Megosztottam link segítségével: %1$s", "Shares" : "Megosztások", + "Accept" : "Elfogadás", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s", "Share with me through my #ownCloud Federated Cloud ID" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével ", "This share is password-protected" : "Ez egy jelszóval védett megosztás", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Egyesített felhő", "Your Federated Cloud ID:" : "Egyesített felhő azonosító:", "Share it:" : "Ossza meg:", - "Add it to your website:" : "Adja hozzá a saját weboldalához:", + "Add to your website" : "Add hozzá saját weboldaladhoz", "Share with me via ownCloud" : "Ossza meg velem ownCloud-on keresztül", "HTML Code:" : "HTML Code:" }, diff --git a/apps/files_sharing/l10n/hu_HU.json b/apps/files_sharing/l10n/hu_HU.json index f140b98a57c..22cc1422eb7 100644 --- a/apps/files_sharing/l10n/hu_HU.json +++ b/apps/files_sharing/l10n/hu_HU.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s megosztotta velem ezt: %1$s", "You shared %1$s via link" : "Megosztottam link segítségével: %1$s", "Shares" : "Megosztások", + "Accept" : "Elfogadás", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével, lásd %s", "Share with me through my #ownCloud Federated Cloud ID" : "Ossza meg velem az #ownCloud Egyesített Felhő Azonosító segítségével ", "This share is password-protected" : "Ez egy jelszóval védett megosztás", @@ -64,7 +65,7 @@ "Federated Cloud" : "Egyesített felhő", "Your Federated Cloud ID:" : "Egyesített felhő azonosító:", "Share it:" : "Ossza meg:", - "Add it to your website:" : "Adja hozzá a saját weboldalához:", + "Add to your website" : "Add hozzá saját weboldaladhoz", "Share with me via ownCloud" : "Ossza meg velem ownCloud-on keresztül", "HTML Code:" : "HTML Code:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/id.js b/apps/files_sharing/l10n/id.js index 60b460da8e8..f30c0b53b47 100644 --- a/apps/files_sharing/l10n/id.js +++ b/apps/files_sharing/l10n/id.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", "You shared %1$s via link" : "Anda membagikan %1$s via tautan", "Shares" : "Dibagikan", + "Accept" : "Terima", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #ownCloud Federated Cloud ID saya, lihat %s", "Share with me through my #ownCloud Federated Cloud ID" : "Dibagikan pada saya melalui #ownCloud Federated Cloud ID saya", "This share is password-protected" : "Berbagi ini dilindungi sandi", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Federated Cloud ID Anda:", "Share it:" : "Bagikan:", - "Add it to your website:" : "Tambahkan ke situs web Anda:", "Share with me via ownCloud" : "Dibagikan pada saya via ownCloud", "HTML Code:" : "Kode HTML:" }, diff --git a/apps/files_sharing/l10n/id.json b/apps/files_sharing/l10n/id.json index c4ea5a5c56d..3b6f65c1a09 100644 --- a/apps/files_sharing/l10n/id.json +++ b/apps/files_sharing/l10n/id.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s membagikan %1$s dengan Anda", "You shared %1$s via link" : "Anda membagikan %1$s via tautan", "Shares" : "Dibagikan", + "Accept" : "Terima", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Dibagikan pada saya melalui #ownCloud Federated Cloud ID saya, lihat %s", "Share with me through my #ownCloud Federated Cloud ID" : "Dibagikan pada saya melalui #ownCloud Federated Cloud ID saya", "This share is password-protected" : "Berbagi ini dilindungi sandi", @@ -64,7 +65,6 @@ "Federated Cloud" : "Federated Cloud", "Your Federated Cloud ID:" : "Federated Cloud ID Anda:", "Share it:" : "Bagikan:", - "Add it to your website:" : "Tambahkan ke situs web Anda:", "Share with me via ownCloud" : "Dibagikan pada saya via ownCloud", "HTML Code:" : "Kode HTML:" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/it.js b/apps/files_sharing/l10n/it.js index 8f89da9484d..bf041f2b9b6 100644 --- a/apps/files_sharing/l10n/it.js +++ b/apps/files_sharing/l10n/it.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te", "You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento", "Shares" : "Condivisioni", + "Accept" : "Accetta", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud, vedi %s", "Share with me through my #ownCloud Federated Cloud ID" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud", "This share is password-protected" : "Questa condivione è protetta da password", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Cloud federata", "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:", "Share it:" : "Condividilo:", - "Add it to your website:" : "Aggiungilo al tuo sito web:", + "Add to your website" : "Aggiungilo al tuo sito web", "Share with me via ownCloud" : "Condividi con me tramite ownCloud", "HTML Code:" : "Codice HTML:" }, diff --git a/apps/files_sharing/l10n/it.json b/apps/files_sharing/l10n/it.json index cad5b0c7db0..34a10595f98 100644 --- a/apps/files_sharing/l10n/it.json +++ b/apps/files_sharing/l10n/it.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s ha condiviso %1$s con te", "You shared %1$s via link" : "Hai condiviso %1$s tramite collegamento", "Shares" : "Condivisioni", + "Accept" : "Accetta", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud, vedi %s", "Share with me through my #ownCloud Federated Cloud ID" : "Condividi con me attraverso il mio ID di cloud federata #ownCloud", "This share is password-protected" : "Questa condivione è protetta da password", @@ -64,7 +65,7 @@ "Federated Cloud" : "Cloud federata", "Your Federated Cloud ID:" : "Il tuo ID di cloud federata:", "Share it:" : "Condividilo:", - "Add it to your website:" : "Aggiungilo al tuo sito web:", + "Add to your website" : "Aggiungilo al tuo sito web", "Share with me via ownCloud" : "Condividi con me tramite ownCloud", "HTML Code:" : "Codice HTML:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/ja.js b/apps/files_sharing/l10n/ja.js index 73174dfeb84..413f4a2ac8c 100644 --- a/apps/files_sharing/l10n/ja.js +++ b/apps/files_sharing/l10n/ja.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s は %1$s をあなたと共有しました", "You shared %1$s via link" : "リンク経由で %1$s を共有しています", "Shares" : "共有", + "Accept" : "承諾", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "#ownCloud の「クラウド連携ID」で私と共有できます。こちらを見てください。%s", "Share with me through my #ownCloud Federated Cloud ID" : "#ownCloud の「クラウド連携ID」で私と共有できます。", "This share is password-protected" : "この共有はパスワードで保護されています", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "クラウド連携", "Your Federated Cloud ID:" : "あなたのクラウド連携ID:", "Share it:" : "以下で共有:", - "Add it to your website:" : "ウェブサイトに追加:", "Share with me via ownCloud" : "OwnCloud経由で共有", "HTML Code:" : "HTMLコード:" }, diff --git a/apps/files_sharing/l10n/ja.json b/apps/files_sharing/l10n/ja.json index 79cd4f0bc36..65d762871de 100644 --- a/apps/files_sharing/l10n/ja.json +++ b/apps/files_sharing/l10n/ja.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s は %1$s をあなたと共有しました", "You shared %1$s via link" : "リンク経由で %1$s を共有しています", "Shares" : "共有", + "Accept" : "承諾", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "#ownCloud の「クラウド連携ID」で私と共有できます。こちらを見てください。%s", "Share with me through my #ownCloud Federated Cloud ID" : "#ownCloud の「クラウド連携ID」で私と共有できます。", "This share is password-protected" : "この共有はパスワードで保護されています", @@ -64,7 +65,6 @@ "Federated Cloud" : "クラウド連携", "Your Federated Cloud ID:" : "あなたのクラウド連携ID:", "Share it:" : "以下で共有:", - "Add it to your website:" : "ウェブサイトに追加:", "Share with me via ownCloud" : "OwnCloud経由で共有", "HTML Code:" : "HTMLコード:" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/ko.js b/apps/files_sharing/l10n/ko.js index 638f750b2ef..2ad6c0422b1 100644 --- a/apps/files_sharing/l10n/ko.js +++ b/apps/files_sharing/l10n/ko.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함", "You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함", "Shares" : "공유", + "Accept" : "수락", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s", "Share with me through my #ownCloud Federated Cloud ID" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨", "This share is password-protected" : "이 공유는 암호로 보호되어 있습니다", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "연합 클라우드", "Your Federated Cloud ID:" : "내 연합 클라우드 ID:", "Share it:" : "공유하기:", - "Add it to your website:" : "웹 사이트에 다음을 추가하십시오:", "Share with me via ownCloud" : "ownCloud로 나와 공유하기", "HTML Code:" : "HTML 코드:" }, diff --git a/apps/files_sharing/l10n/ko.json b/apps/files_sharing/l10n/ko.json index 36d69b0f763..d31bf0060dd 100644 --- a/apps/files_sharing/l10n/ko.json +++ b/apps/files_sharing/l10n/ko.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s 님이 내게 %1$s을(를) 공유함", "You shared %1$s via link" : "내가 %1$s을(를) 링크로 공유함", "Shares" : "공유", + "Accept" : "수락", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨, 더 알아보기: %s", "Share with me through my #ownCloud Federated Cloud ID" : "내 #ownCloud 연합 클라우드 ID를 통해서 공유됨", "This share is password-protected" : "이 공유는 암호로 보호되어 있습니다", @@ -64,7 +65,6 @@ "Federated Cloud" : "연합 클라우드", "Your Federated Cloud ID:" : "내 연합 클라우드 ID:", "Share it:" : "공유하기:", - "Add it to your website:" : "웹 사이트에 다음을 추가하십시오:", "Share with me via ownCloud" : "ownCloud로 나와 공유하기", "HTML Code:" : "HTML 코드:" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/nb_NO.js b/apps/files_sharing/l10n/nb_NO.js index 4b76dab034c..4df003d0e4d 100644 --- a/apps/files_sharing/l10n/nb_NO.js +++ b/apps/files_sharing/l10n/nb_NO.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", "You shared %1$s via link" : "Du delte %1$s via lenke", "Shares" : "Delinger", + "Accept" : "Aksepter", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky, se %s", "Share with me through my #ownCloud Federated Cloud ID" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky", "This share is password-protected" : "Denne delingen er passordbeskyttet", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", "Share it:" : "Del den:", - "Add it to your website:" : "Legg den på websiden din:", "Share with me via ownCloud" : "Del med meg via ownCloud", "HTML Code:" : "HTML-kode:" }, diff --git a/apps/files_sharing/l10n/nb_NO.json b/apps/files_sharing/l10n/nb_NO.json index c466d22e3de..079f1e854ac 100644 --- a/apps/files_sharing/l10n/nb_NO.json +++ b/apps/files_sharing/l10n/nb_NO.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s delte %1$s med deg", "You shared %1$s via link" : "Du delte %1$s via lenke", "Shares" : "Delinger", + "Accept" : "Aksepter", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky, se %s", "Share with me through my #ownCloud Federated Cloud ID" : "Del med meg gjennom min #ownCloud ID for sammenknyttet sky", "This share is password-protected" : "Denne delingen er passordbeskyttet", @@ -64,7 +65,6 @@ "Federated Cloud" : "Sammenknyttet sky", "Your Federated Cloud ID:" : "Din ID for sammenknyttet sky:", "Share it:" : "Del den:", - "Add it to your website:" : "Legg den på websiden din:", "Share with me via ownCloud" : "Del med meg via ownCloud", "HTML Code:" : "HTML-kode:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/nl.js b/apps/files_sharing/l10n/nl.js index f2541545680..7468819fda7 100644 --- a/apps/files_sharing/l10n/nl.js +++ b/apps/files_sharing/l10n/nl.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", "You shared %1$s via link" : "U deelde %1$s via link", "Shares" : "Gedeeld", + "Accept" : "Accepteren", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deel met mij via mijn #ownCloud federated Cloud ID, zie %s", "Share with me through my #ownCloud Federated Cloud ID" : "Deel met mij via mijn #ownCloud federated Cloud ID", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Gefedereerde Cloud", "Your Federated Cloud ID:" : "Uw Federated Cloud ID:", "Share it:" : "Deel het:", - "Add it to your website:" : "Voeg het toe aan uw website:", + "Add to your website" : "Toevoegen aan uw website", "Share with me via ownCloud" : "Deel met mij via ownCloud", "HTML Code:" : "HTML Code:" }, diff --git a/apps/files_sharing/l10n/nl.json b/apps/files_sharing/l10n/nl.json index 193f787b835..57df2d5c155 100644 --- a/apps/files_sharing/l10n/nl.json +++ b/apps/files_sharing/l10n/nl.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s deelde %1$s met u", "You shared %1$s via link" : "U deelde %1$s via link", "Shares" : "Gedeeld", + "Accept" : "Accepteren", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Deel met mij via mijn #ownCloud federated Cloud ID, zie %s", "Share with me through my #ownCloud Federated Cloud ID" : "Deel met mij via mijn #ownCloud federated Cloud ID", "This share is password-protected" : "Deze share is met een wachtwoord beveiligd", @@ -64,7 +65,7 @@ "Federated Cloud" : "Gefedereerde Cloud", "Your Federated Cloud ID:" : "Uw Federated Cloud ID:", "Share it:" : "Deel het:", - "Add it to your website:" : "Voeg het toe aan uw website:", + "Add to your website" : "Toevoegen aan uw website", "Share with me via ownCloud" : "Deel met mij via ownCloud", "HTML Code:" : "HTML Code:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/pl.js b/apps/files_sharing/l10n/pl.js index a0efb5ff607..62b128844df 100644 --- a/apps/files_sharing/l10n/pl.js +++ b/apps/files_sharing/l10n/pl.js @@ -30,6 +30,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą", "You shared %1$s via link" : "Udostępniasz %1$s przez link", "Shares" : "Udziały", + "Accept" : "Akceptuj", "This share is password-protected" : "Udział ten jest chroniony hasłem", "The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.", "Password" : "Hasło", diff --git a/apps/files_sharing/l10n/pl.json b/apps/files_sharing/l10n/pl.json index 6ffad562b7f..76052b1dfb7 100644 --- a/apps/files_sharing/l10n/pl.json +++ b/apps/files_sharing/l10n/pl.json @@ -28,6 +28,7 @@ "%2$s shared %1$s with you" : "%2$s współdzieli %1$s z Tobą", "You shared %1$s via link" : "Udostępniasz %1$s przez link", "Shares" : "Udziały", + "Accept" : "Akceptuj", "This share is password-protected" : "Udział ten jest chroniony hasłem", "The password is wrong. Try again." : "To hasło jest niewłaściwe. Spróbuj ponownie.", "Password" : "Hasło", diff --git a/apps/files_sharing/l10n/pt_BR.js b/apps/files_sharing/l10n/pt_BR.js index d8b3bc9e81e..064e611e11e 100644 --- a/apps/files_sharing/l10n/pt_BR.js +++ b/apps/files_sharing/l10n/pt_BR.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você", "You shared %1$s via link" : "Você compartilhou %1$s via link", "Shares" : "Compartilhamentos", + "Accept" : "Aceitar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s", "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID", "This share is password-protected" : "Este compartilhamento esta protegido por senha", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "Nuvem Conglomerada", "Your Federated Cloud ID:" : "Seu Federados Nuvem ID:", "Share it:" : "Compartilhe:", - "Add it to your website:" : "Adicione ao seu site:", + "Add to your website" : "Adicione ao seu website", "Share with me via ownCloud" : "Compartilhe comigo via ownCloud", "HTML Code:" : "Código HTML:" }, diff --git a/apps/files_sharing/l10n/pt_BR.json b/apps/files_sharing/l10n/pt_BR.json index 80d75ebd647..c1b4c255912 100644 --- a/apps/files_sharing/l10n/pt_BR.json +++ b/apps/files_sharing/l10n/pt_BR.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s compartilhou %1$s com você", "You shared %1$s via link" : "Você compartilhou %1$s via link", "Shares" : "Compartilhamentos", + "Accept" : "Aceitar", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID, veja %s", "Share with me through my #ownCloud Federated Cloud ID" : "Compartilhe comigo através do meu #ownCloud Nuvem Federados ID", "This share is password-protected" : "Este compartilhamento esta protegido por senha", @@ -64,7 +65,7 @@ "Federated Cloud" : "Nuvem Conglomerada", "Your Federated Cloud ID:" : "Seu Federados Nuvem ID:", "Share it:" : "Compartilhe:", - "Add it to your website:" : "Adicione ao seu site:", + "Add to your website" : "Adicione ao seu website", "Share with me via ownCloud" : "Compartilhe comigo via ownCloud", "HTML Code:" : "Código HTML:" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/files_sharing/l10n/pt_PT.js b/apps/files_sharing/l10n/pt_PT.js index 8e9afdd0626..dc501ebe048 100644 --- a/apps/files_sharing/l10n/pt_PT.js +++ b/apps/files_sharing/l10n/pt_PT.js @@ -4,41 +4,46 @@ OC.L10N.register( "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível neste servidor", "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém carateres inválidos.", "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável", - "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar para partilha remota, a palavra-passe pode estar errada", + "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar para a partilha remota, a palavra-passe poderá estar errada", "Storage not valid" : "Armazenamento inválido", "Couldn't add remote share" : "Não foi possível adicionar a partilha remota", "Shared with you" : "Partilhado consigo ", "Shared with others" : "Partilhado com outros", "Shared by link" : "Partilhado pela hiperligação", "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", - "Files and folders others share with you will show up here" : "Os ficheiros e pastas que os outros partilham consigo, serão mostradas aqui", - "Nothing shared yet" : "Ainda não foi nada paratilhado", - "Files and folders you share will show up here" : "Os ficheiros e pastas que você partilha serão mostrados aqui", + "Files and folders others share with you will show up here" : "Os ficheiros e pastas que os outros partilham consigo, serão mostradaos aqui", + "Nothing shared yet" : "Ainda não foi partilhado nada", + "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", "No shared links" : "Sem hiperligações partilhadas", - "Files and folders you share by link will show up here" : "Os ficheiros e pastas que você partilha por link serão mostrados aqui", + "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha com esta hiperligação, serão mostrados aqui", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?", "Remote share" : "Partilha remota", "Remote share password" : "Senha da partilha remota", "Cancel" : "Cancelar", "Add remote share" : "Adicionar partilha remota", - "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação do OwnCloud (7 ou superior) encontrada em {remote}", + "You can upload into this folder" : "Pode enviar para esta pasta", + "No ownCloud installation (7 or higher) found at {remote}" : "Não foi encontrada nenhuma instalação OwnCloud (7 ou superior) em {remote}", "Invalid ownCloud url" : "Url ownCloud inválido", "Shared by" : "Partilhado por", "Sharing" : "Partilha", "A file or folder has been <strong>shared</strong>" : "Foi <strong>partilhado</strong> um ficheiro ou uma pasta", "A file or folder was shared from <strong>another server</strong>" : "Um ficheiro ou pasta foi partilhado a partir de <strong>outro servidor</strong>", - "A public shared file or folder was <strong>downloaded</strong>" : "Um ficheiro ou pasta partilhada publicamente foi <strong>descarregado</strong>", - "You received a new remote share from %s" : "Você recebeu uma nova partilha remota de %s", + "A public shared file or folder was <strong>downloaded</strong>" : "Foi <strong>transferido</strong> um ficheiro ou pasta partilhada publicamente", + "You received a new remote share %2$s from %1$s" : "Recebeu uma nova partilha remota %2$s de %1$s", + "You received a new remote share from %s" : "Recebeu uma nova partilha remota de %s", "%1$s accepted remote share %2$s" : "%1$s aceitou a partilha remota %2$s", "%1$s declined remote share %2$s" : "%1$s rejeitou a partilha remota %2$s", - "%1$s unshared %2$s from you" : "%1$s retirou a partilha %2$s contigo", - "Public shared folder %1$s was downloaded" : "A pasta partilhada publicamente %1$s foi descarregada", - "Public shared file %1$s was downloaded" : "O ficheiro partilhado publicamente %1$s foi descarregado", + "%1$s unshared %2$s from you" : "%1$s cancelou a partilha %2$s consigo", + "Public shared folder %1$s was downloaded" : "A pasta partilhada publicamente %1$s foi transferida", + "Public shared file %1$s was downloaded" : "Foi transferido o ficheiro %1$s partilhado publicamente", "You shared %1$s with %2$s" : "Partilhou %1$s com %2$s", "You shared %1$s with group %2$s" : "Partilhou %1$s com o grupo %2$s", "%2$s shared %1$s with you" : "%2$s partilhou %1$s consigo", "You shared %1$s via link" : "Partilhou %1$s através de uma hiperligação", "Shares" : "Partilhas", + "Accept" : "Aceitar", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partilhe comigo através da minha Id. da Nuvem Federada #ownCloud, veja %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Partilhe comigo através da minha Id. da Nuvem Federada #ownCloud", "This share is password-protected" : "Esta partilha está protegida por senha", "The password is wrong. Try again." : "A senha está errada. Por favor, tente de novo.", "Password" : "Senha", @@ -55,10 +60,14 @@ OC.L10N.register( "Download" : "Transferir", "Download %s" : "Transferir %s", "Direct link" : "Hiperligação direta", - "Federated Cloud Sharing" : "Partilha de Cloud Federada", + "Federated Cloud Sharing" : "Partilha de Nuvem Federada", "Open documentation" : "Abrir documentação", "Allow users on this server to send shares to other servers" : "Permitir utilizadores neste servidor para enviar as partilhas para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir utilizadores neste servidor para receber as partilhas de outros servidores", + "Federated Cloud" : "Nuvem Federada", + "Your Federated Cloud ID:" : "A Sua Id. da Nuvem Federada", + "Share it:" : "Partilhe:", + "Add to your website" : "Adicione ao seu sítio da Web", "Share with me via ownCloud" : "Partilhe comigo via ownCloud", "HTML Code:" : "Código HTML:" }, diff --git a/apps/files_sharing/l10n/pt_PT.json b/apps/files_sharing/l10n/pt_PT.json index 9a66c73a681..9c5bc14e610 100644 --- a/apps/files_sharing/l10n/pt_PT.json +++ b/apps/files_sharing/l10n/pt_PT.json @@ -2,41 +2,46 @@ "Server to server sharing is not enabled on this server" : "A partilha entre servidores não se encontra disponível neste servidor", "The mountpoint name contains invalid characters." : "O nome do ponto de montagem contém carateres inválidos.", "Invalid or untrusted SSL certificate" : "Certificado SSL inválido ou não confiável", - "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar para partilha remota, a palavra-passe pode estar errada", + "Could not authenticate to remote share, password might be wrong" : "Não foi possível autenticar para a partilha remota, a palavra-passe poderá estar errada", "Storage not valid" : "Armazenamento inválido", "Couldn't add remote share" : "Não foi possível adicionar a partilha remota", "Shared with you" : "Partilhado consigo ", "Shared with others" : "Partilhado com outros", "Shared by link" : "Partilhado pela hiperligação", "Nothing shared with you yet" : "Ainda não foi partilhado nada consigo", - "Files and folders others share with you will show up here" : "Os ficheiros e pastas que os outros partilham consigo, serão mostradas aqui", - "Nothing shared yet" : "Ainda não foi nada paratilhado", - "Files and folders you share will show up here" : "Os ficheiros e pastas que você partilha serão mostrados aqui", + "Files and folders others share with you will show up here" : "Os ficheiros e pastas que os outros partilham consigo, serão mostradaos aqui", + "Nothing shared yet" : "Ainda não foi partilhado nada", + "Files and folders you share will show up here" : "Os ficheiros e as pastas que partilha serão mostrados aqui", "No shared links" : "Sem hiperligações partilhadas", - "Files and folders you share by link will show up here" : "Os ficheiros e pastas que você partilha por link serão mostrados aqui", + "Files and folders you share by link will show up here" : "Os ficheiros e as pastas que partilha com esta hiperligação, serão mostrados aqui", "Do you want to add the remote share {name} from {owner}@{remote}?" : "Deseja adicionar a partilha remota {nome} de {proprietário}@{remoto}?", "Remote share" : "Partilha remota", "Remote share password" : "Senha da partilha remota", "Cancel" : "Cancelar", "Add remote share" : "Adicionar partilha remota", - "No ownCloud installation (7 or higher) found at {remote}" : "Nenhuma instalação do OwnCloud (7 ou superior) encontrada em {remote}", + "You can upload into this folder" : "Pode enviar para esta pasta", + "No ownCloud installation (7 or higher) found at {remote}" : "Não foi encontrada nenhuma instalação OwnCloud (7 ou superior) em {remote}", "Invalid ownCloud url" : "Url ownCloud inválido", "Shared by" : "Partilhado por", "Sharing" : "Partilha", "A file or folder has been <strong>shared</strong>" : "Foi <strong>partilhado</strong> um ficheiro ou uma pasta", "A file or folder was shared from <strong>another server</strong>" : "Um ficheiro ou pasta foi partilhado a partir de <strong>outro servidor</strong>", - "A public shared file or folder was <strong>downloaded</strong>" : "Um ficheiro ou pasta partilhada publicamente foi <strong>descarregado</strong>", - "You received a new remote share from %s" : "Você recebeu uma nova partilha remota de %s", + "A public shared file or folder was <strong>downloaded</strong>" : "Foi <strong>transferido</strong> um ficheiro ou pasta partilhada publicamente", + "You received a new remote share %2$s from %1$s" : "Recebeu uma nova partilha remota %2$s de %1$s", + "You received a new remote share from %s" : "Recebeu uma nova partilha remota de %s", "%1$s accepted remote share %2$s" : "%1$s aceitou a partilha remota %2$s", "%1$s declined remote share %2$s" : "%1$s rejeitou a partilha remota %2$s", - "%1$s unshared %2$s from you" : "%1$s retirou a partilha %2$s contigo", - "Public shared folder %1$s was downloaded" : "A pasta partilhada publicamente %1$s foi descarregada", - "Public shared file %1$s was downloaded" : "O ficheiro partilhado publicamente %1$s foi descarregado", + "%1$s unshared %2$s from you" : "%1$s cancelou a partilha %2$s consigo", + "Public shared folder %1$s was downloaded" : "A pasta partilhada publicamente %1$s foi transferida", + "Public shared file %1$s was downloaded" : "Foi transferido o ficheiro %1$s partilhado publicamente", "You shared %1$s with %2$s" : "Partilhou %1$s com %2$s", "You shared %1$s with group %2$s" : "Partilhou %1$s com o grupo %2$s", "%2$s shared %1$s with you" : "%2$s partilhou %1$s consigo", "You shared %1$s via link" : "Partilhou %1$s através de uma hiperligação", "Shares" : "Partilhas", + "Accept" : "Aceitar", + "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Partilhe comigo através da minha Id. da Nuvem Federada #ownCloud, veja %s", + "Share with me through my #ownCloud Federated Cloud ID" : "Partilhe comigo através da minha Id. da Nuvem Federada #ownCloud", "This share is password-protected" : "Esta partilha está protegida por senha", "The password is wrong. Try again." : "A senha está errada. Por favor, tente de novo.", "Password" : "Senha", @@ -53,10 +58,14 @@ "Download" : "Transferir", "Download %s" : "Transferir %s", "Direct link" : "Hiperligação direta", - "Federated Cloud Sharing" : "Partilha de Cloud Federada", + "Federated Cloud Sharing" : "Partilha de Nuvem Federada", "Open documentation" : "Abrir documentação", "Allow users on this server to send shares to other servers" : "Permitir utilizadores neste servidor para enviar as partilhas para outros servidores", "Allow users on this server to receive shares from other servers" : "Permitir utilizadores neste servidor para receber as partilhas de outros servidores", + "Federated Cloud" : "Nuvem Federada", + "Your Federated Cloud ID:" : "A Sua Id. da Nuvem Federada", + "Share it:" : "Partilhe:", + "Add to your website" : "Adicione ao seu sítio da Web", "Share with me via ownCloud" : "Partilhe comigo via ownCloud", "HTML Code:" : "Código HTML:" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/apps/files_sharing/l10n/ru.js b/apps/files_sharing/l10n/ru.js index df1ee8603b4..2d89b5e3102 100644 --- a/apps/files_sharing/l10n/ru.js +++ b/apps/files_sharing/l10n/ru.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s поделился с вами %1$s", "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки", "Shares" : "События обмена файлами", + "Accept" : "Принять", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ, смотрите %s", "Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ", "This share is password-protected" : "Общий ресурс защищен паролем", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Объединение облачных хранилищ", "Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:", "Share it:" : "Поделись этим:", - "Add it to your website:" : "Добавь это на свой сайт:", "Share with me via ownCloud" : "Поделитесь мной через ownCloud", "HTML Code:" : "HTML код:" }, diff --git a/apps/files_sharing/l10n/ru.json b/apps/files_sharing/l10n/ru.json index d533d01cb01..0f7a152f536 100644 --- a/apps/files_sharing/l10n/ru.json +++ b/apps/files_sharing/l10n/ru.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s поделился с вами %1$s", "You shared %1$s via link" : "Вы поделились %1$s с помощью ссылки", "Shares" : "События обмена файлами", + "Accept" : "Принять", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ, смотрите %s", "Share with me through my #ownCloud Federated Cloud ID" : "Поделитесь со мной через мой #ownCloud ID в объединении облачных хранилищ", "This share is password-protected" : "Общий ресурс защищен паролем", @@ -64,7 +65,6 @@ "Federated Cloud" : "Объединение облачных хранилищ", "Your Federated Cloud ID:" : "Ваш ID в объединении облачных хранилищ:", "Share it:" : "Поделись этим:", - "Add it to your website:" : "Добавь это на свой сайт:", "Share with me via ownCloud" : "Поделитесь мной через ownCloud", "HTML Code:" : "HTML код:" },"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);" diff --git a/apps/files_sharing/l10n/sk_SK.js b/apps/files_sharing/l10n/sk_SK.js index cfefda0ba8c..677b4f24e21 100644 --- a/apps/files_sharing/l10n/sk_SK.js +++ b/apps/files_sharing/l10n/sk_SK.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s vám zdieľal %1$s", "You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu", "Shares" : "Zdieľanie", + "Accept" : "Schváliť", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID, viac n %s", "Share with me through my #ownCloud Federated Cloud ID" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID", "This share is password-protected" : "Toto zdieľanie je chránené heslom", @@ -65,7 +66,6 @@ OC.L10N.register( "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov", "Your Federated Cloud ID:" : "Vaše združené Cloud ID", "Share it:" : "Zdieľať:", - "Add it to your website:" : "Pridať na svoju webstránku:", "Share with me via ownCloud" : "Zdieľané so mnou cez ownCloud", "HTML Code:" : "HTML kód:" }, diff --git a/apps/files_sharing/l10n/sk_SK.json b/apps/files_sharing/l10n/sk_SK.json index f9b51d1dd76..f4f6cc3798b 100644 --- a/apps/files_sharing/l10n/sk_SK.json +++ b/apps/files_sharing/l10n/sk_SK.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s vám zdieľal %1$s", "You shared %1$s via link" : "Zdieľate %1$s prostredníctvom odkazu", "Shares" : "Zdieľanie", + "Accept" : "Schváliť", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID, viac n %s", "Share with me through my #ownCloud Federated Cloud ID" : "Zdieľajte so mnou pomocou môjho #ownCloud Federated Cloud ID", "This share is password-protected" : "Toto zdieľanie je chránené heslom", @@ -63,7 +64,6 @@ "Allow users on this server to receive shares from other servers" : "Povoliť používateľom z tohoto servera prijímať zdieľania z iných serverov", "Your Federated Cloud ID:" : "Vaše združené Cloud ID", "Share it:" : "Zdieľať:", - "Add it to your website:" : "Pridať na svoju webstránku:", "Share with me via ownCloud" : "Zdieľané so mnou cez ownCloud", "HTML Code:" : "HTML kód:" },"pluralForm" :"nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;" diff --git a/apps/files_sharing/l10n/sl.js b/apps/files_sharing/l10n/sl.js index d613f169081..3b6622aedf2 100644 --- a/apps/files_sharing/l10n/sl.js +++ b/apps/files_sharing/l10n/sl.js @@ -39,6 +39,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "Uporabnik %2$s je omogočil souporabo %1$s", "You shared %1$s via link" : "Omogočili ste souporabo %1$s preko povezave", "Shares" : "Souporaba", + "Accept" : "Sprejmi", "This share is password-protected" : "To mesto je zaščiteno z geslom.", "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", "Password" : "Geslo", diff --git a/apps/files_sharing/l10n/sl.json b/apps/files_sharing/l10n/sl.json index fb00547388b..2d443de13d9 100644 --- a/apps/files_sharing/l10n/sl.json +++ b/apps/files_sharing/l10n/sl.json @@ -37,6 +37,7 @@ "%2$s shared %1$s with you" : "Uporabnik %2$s je omogočil souporabo %1$s", "You shared %1$s via link" : "Omogočili ste souporabo %1$s preko povezave", "Shares" : "Souporaba", + "Accept" : "Sprejmi", "This share is password-protected" : "To mesto je zaščiteno z geslom.", "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", "Password" : "Geslo", diff --git a/apps/files_sharing/l10n/sr.js b/apps/files_sharing/l10n/sr.js index 5676cc5a00c..ddb15bd2183 100644 --- a/apps/files_sharing/l10n/sr.js +++ b/apps/files_sharing/l10n/sr.js @@ -40,6 +40,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s подели %1$s са вама", "You shared %1$s via link" : "Поделили сте %1$s путем везе", "Shares" : "Дељења", + "Accept" : "Прихвати", "This share is password-protected" : "Дељење је заштићено лозинком", "The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.", "Password" : "Лозинка", diff --git a/apps/files_sharing/l10n/sr.json b/apps/files_sharing/l10n/sr.json index fca522a1039..dc44b1fbb60 100644 --- a/apps/files_sharing/l10n/sr.json +++ b/apps/files_sharing/l10n/sr.json @@ -38,6 +38,7 @@ "%2$s shared %1$s with you" : "%2$s подели %1$s са вама", "You shared %1$s via link" : "Поделили сте %1$s путем везе", "Shares" : "Дељења", + "Accept" : "Прихвати", "This share is password-protected" : "Дељење је заштићено лозинком", "The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.", "Password" : "Лозинка", diff --git a/apps/files_sharing/l10n/sv.js b/apps/files_sharing/l10n/sv.js index 77b1171d9b2..9b1d9ccb591 100644 --- a/apps/files_sharing/l10n/sv.js +++ b/apps/files_sharing/l10n/sv.js @@ -36,6 +36,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s delade %1$s med dig", "You shared %1$s via link" : "Du delade %1$s via länk", "Shares" : "Delningar", + "Accept" : "Acceptera", "This share is password-protected" : "Den här delningen är lösenordsskyddad", "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.", "Password" : "Lösenord", diff --git a/apps/files_sharing/l10n/sv.json b/apps/files_sharing/l10n/sv.json index a8bb9afd01f..0d13069dfba 100644 --- a/apps/files_sharing/l10n/sv.json +++ b/apps/files_sharing/l10n/sv.json @@ -34,6 +34,7 @@ "%2$s shared %1$s with you" : "%2$s delade %1$s med dig", "You shared %1$s via link" : "Du delade %1$s via länk", "Shares" : "Delningar", + "Accept" : "Acceptera", "This share is password-protected" : "Den här delningen är lösenordsskyddad", "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.", "Password" : "Lösenord", diff --git a/apps/files_sharing/l10n/th_TH.js b/apps/files_sharing/l10n/th_TH.js index 86175f5a627..ea3c8ac7296 100644 --- a/apps/files_sharing/l10n/th_TH.js +++ b/apps/files_sharing/l10n/th_TH.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s ถูกแชร์ %1$s กับคุณ", "You shared %1$s via link" : "คุณแชร์ %1$s ผ่านลิงค์", "Shares" : "แชร์", + "Accept" : "ยอมรับ", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "แชร์ร่วมกับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์ในเครือ สามารถดูได้ที่ %s", "Share with me through my #ownCloud Federated Cloud ID" : "แชร์ร่วมกับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์ในเครือ", "This share is password-protected" : "นี้แชร์การป้องกันด้วยรหัสผ่าน", @@ -66,7 +67,7 @@ OC.L10N.register( "Federated Cloud" : "สหพันธ์คลาวด์", "Your Federated Cloud ID:" : "ไอดีคลาวด์ของคุณ:", "Share it:" : "แชร์มัน:", - "Add it to your website:" : "เพิ่มไปยังเว็บไซต์ของคุณ:", + "Add to your website" : "เพิ่มไปยังเว็บไซต์", "Share with me via ownCloud" : "แชร์ร่วมกับฉันผ่าน ownCloud", "HTML Code:" : "โค้ด HTML:" }, diff --git a/apps/files_sharing/l10n/th_TH.json b/apps/files_sharing/l10n/th_TH.json index 5704a59336c..196c088abd7 100644 --- a/apps/files_sharing/l10n/th_TH.json +++ b/apps/files_sharing/l10n/th_TH.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s ถูกแชร์ %1$s กับคุณ", "You shared %1$s via link" : "คุณแชร์ %1$s ผ่านลิงค์", "Shares" : "แชร์", + "Accept" : "ยอมรับ", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "แชร์ร่วมกับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์ในเครือ สามารถดูได้ที่ %s", "Share with me through my #ownCloud Federated Cloud ID" : "แชร์ร่วมกับฉันผ่าน #ownCloud ด้วยไอดีคลาวด์ในเครือ", "This share is password-protected" : "นี้แชร์การป้องกันด้วยรหัสผ่าน", @@ -64,7 +65,7 @@ "Federated Cloud" : "สหพันธ์คลาวด์", "Your Federated Cloud ID:" : "ไอดีคลาวด์ของคุณ:", "Share it:" : "แชร์มัน:", - "Add it to your website:" : "เพิ่มไปยังเว็บไซต์ของคุณ:", + "Add to your website" : "เพิ่มไปยังเว็บไซต์", "Share with me via ownCloud" : "แชร์ร่วมกับฉันผ่าน ownCloud", "HTML Code:" : "โค้ด HTML:" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/apps/files_sharing/l10n/tr.js b/apps/files_sharing/l10n/tr.js index ce96af88e1e..bb00dd4295a 100644 --- a/apps/files_sharing/l10n/tr.js +++ b/apps/files_sharing/l10n/tr.js @@ -41,6 +41,7 @@ OC.L10N.register( "%2$s shared %1$s with you" : "%2$s sizinle %1$s dosyasını paylaştı", "You shared %1$s via link" : "Bağlantı ile %1$s paylaşımını yaptınız", "Shares" : "Paylaşımlar", + "Accept" : "Kabul et", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "#ownCloud Birleşik Bulut kimliğim ile paylaşıldı, bkz %s", "Share with me through my #ownCloud Federated Cloud ID" : "#ownCloud Birleşmiş Bulut kimliğim ile paylaşıldı", "This share is password-protected" : "Bu paylaşım parola korumalı", @@ -66,7 +67,6 @@ OC.L10N.register( "Federated Cloud" : "Birleşmiş Bulut", "Your Federated Cloud ID:" : "Birleşmiş Bulut Kimliğiniz:", "Share it:" : "Paylaşın:", - "Add it to your website:" : "Web sitenize ekleyin:", "Share with me via ownCloud" : "Benimle ownCloud aracılığıyla paylaşıldı", "HTML Code:" : "HTML Kodu:" }, diff --git a/apps/files_sharing/l10n/tr.json b/apps/files_sharing/l10n/tr.json index 8705219ab2e..1371bf37447 100644 --- a/apps/files_sharing/l10n/tr.json +++ b/apps/files_sharing/l10n/tr.json @@ -39,6 +39,7 @@ "%2$s shared %1$s with you" : "%2$s sizinle %1$s dosyasını paylaştı", "You shared %1$s via link" : "Bağlantı ile %1$s paylaşımını yaptınız", "Shares" : "Paylaşımlar", + "Accept" : "Kabul et", "Share with me through my #ownCloud Federated Cloud ID, see %s" : "#ownCloud Birleşik Bulut kimliğim ile paylaşıldı, bkz %s", "Share with me through my #ownCloud Federated Cloud ID" : "#ownCloud Birleşmiş Bulut kimliğim ile paylaşıldı", "This share is password-protected" : "Bu paylaşım parola korumalı", @@ -64,7 +65,6 @@ "Federated Cloud" : "Birleşmiş Bulut", "Your Federated Cloud ID:" : "Birleşmiş Bulut Kimliğiniz:", "Share it:" : "Paylaşın:", - "Add it to your website:" : "Web sitenize ekleyin:", "Share with me via ownCloud" : "Benimle ownCloud aracılığıyla paylaşıldı", "HTML Code:" : "HTML Kodu:" },"pluralForm" :"nplurals=2; plural=(n > 1);" diff --git a/apps/files_sharing/l10n/uk.js b/apps/files_sharing/l10n/uk.js index 37c838b6aa4..80c28c8a936 100644 --- a/apps/files_sharing/l10n/uk.js +++ b/apps/files_sharing/l10n/uk.js @@ -61,7 +61,6 @@ OC.L10N.register( "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах", "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів", "Share it:" : "Поділитися цим:", - "Add it to your website:" : "Додати до вашого сайту:", "HTML Code:" : "HTML код:" }, "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/apps/files_sharing/l10n/uk.json b/apps/files_sharing/l10n/uk.json index b062a761fbb..0b5de75ac5a 100644 --- a/apps/files_sharing/l10n/uk.json +++ b/apps/files_sharing/l10n/uk.json @@ -59,7 +59,6 @@ "Allow users on this server to send shares to other servers" : "Дозволити користувачам цього сервера публікувати на інших серверах", "Allow users on this server to receive shares from other servers" : "Дозволити користувачам на цьому сервері отримувати публікації з інших серверів", "Share it:" : "Поділитися цим:", - "Add it to your website:" : "Додати до вашого сайту:", "HTML Code:" : "HTML код:" },"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);" }
\ No newline at end of file diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php index c25dc92409f..377c9f02253 100644 --- a/apps/files_sharing/lib/cache.php +++ b/apps/files_sharing/lib/cache.php @@ -47,6 +47,7 @@ class Shared_Cache extends Cache { * @param \OC\Files\Storage\Shared $storage */ public function __construct($storage) { + parent::__construct($storage); $this->storage = $storage; } @@ -94,6 +95,7 @@ class Shared_Cache extends Cache { * @return array|false */ public function get($file) { + $mimetypeLoader = \OC::$server->getMimeTypeLoader(); if (is_string($file)) { $cache = $this->getSourceCache($file); if ($cache) { @@ -130,8 +132,8 @@ class Shared_Cache extends Cache { $data['mtime'] = (int)$data['mtime']; $data['storage_mtime'] = (int)$data['storage_mtime']; $data['encrypted'] = (bool)$data['encrypted']; - $data['mimetype'] = $this->getMimetype($data['mimetype']); - $data['mimepart'] = $this->getMimetype($data['mimepart']); + $data['mimetype'] = $mimetypeLoader->getMimetypeById($data['mimetype']); + $data['mimepart'] = $mimetypeLoader->getMimetypeById($data['mimepart']); if ($data['storage_mtime'] === 0) { $data['storage_mtime'] = $data['mtime']; } diff --git a/apps/files_sharing/lib/external/manager.php b/apps/files_sharing/lib/external/manager.php index 67a26c096c2..17142e95099 100644 --- a/apps/files_sharing/lib/external/manager.php +++ b/apps/files_sharing/lib/external/manager.php @@ -28,6 +28,7 @@ namespace OCA\Files_Sharing\External; use OC\Files\Filesystem; use OCP\Files; +use OC\Notification\IManager; class Manager { const STORAGE = '\OCA\Files_Sharing\External\Storage'; @@ -58,19 +59,26 @@ class Manager { private $httpHelper; /** + * @var IManager + */ + private $notificationManager; + + /** * @param \OCP\IDBConnection $connection * @param \OC\Files\Mount\Manager $mountManager * @param \OCP\Files\Storage\IStorageFactory $storageLoader * @param \OC\HTTPHelper $httpHelper + * @param IManager $notificationManager * @param string $uid */ public function __construct(\OCP\IDBConnection $connection, \OC\Files\Mount\Manager $mountManager, - \OCP\Files\Storage\IStorageFactory $storageLoader, \OC\HTTPHelper $httpHelper, $uid) { + \OCP\Files\Storage\IStorageFactory $storageLoader, \OC\HTTPHelper $httpHelper, IManager $notificationManager, $uid) { $this->connection = $connection; $this->mountManager = $mountManager; $this->storageLoader = $storageLoader; $this->httpHelper = $httpHelper; $this->uid = $uid; + $this->notificationManager = $notificationManager; } /** @@ -206,6 +214,7 @@ class Manager { $acceptShare->execute(array(1, $mountPoint, $hash, $id, $this->uid)); $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'accept'); + $this->scrapNotification($share['remote_id']); return true; } @@ -228,6 +237,7 @@ class Manager { $removeShare->execute(array($id, $this->uid)); $this->sendFeedbackToRemote($share['remote'], $share['share_token'], $share['remote_id'], 'decline'); + $this->scrapNotification($share['remote_id']); return true; } @@ -235,6 +245,17 @@ class Manager { } /** + * @param int $remoteShare + */ + protected function scrapNotification($remoteShare) { + $filter = $this->notificationManager->createNotification(); + $filter->setApp('files_sharing') + ->setUser($this->uid) + ->setObject('remote_share', (int) $remoteShare); + $this->notificationManager->markProcessed($filter); + } + + /** * inform remote server whether server-to-server share was accepted/declined * * @param string $remote @@ -265,6 +286,7 @@ class Manager { \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), $params['user'] ); diff --git a/apps/files_sharing/lib/hooks.php b/apps/files_sharing/lib/hooks.php index 7dd04f2f4a0..1937010f390 100644 --- a/apps/files_sharing/lib/hooks.php +++ b/apps/files_sharing/lib/hooks.php @@ -33,6 +33,7 @@ class Hooks { \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), $params['uid']); $manager->removeUserShares($params['uid']); diff --git a/apps/files_sharing/lib/mountprovider.php b/apps/files_sharing/lib/mountprovider.php index 3f59fd131d0..14a79625993 100644 --- a/apps/files_sharing/lib/mountprovider.php +++ b/apps/files_sharing/lib/mountprovider.php @@ -66,12 +66,6 @@ class MountProvider implements IMountProvider { return $share['permissions'] > 0; }); $shares = array_map(function ($share) use ($user, $storageFactory) { - try { - Filesystem::initMountPoints($share['uid_owner']); - } catch(NoUserException $e) { - \OC::$server->getLogger()->warning('The user \'' . $share['uid_owner'] . '\' of share with ID \'' . $share['id'] . '\' can\'t be retrieved.', array('app' => 'files_sharing')); - return null; - } // for updating etags for the share owner when we make changes to this share. $ownerPropagator = $this->propagationManager->getChangePropagator($share['uid_owner']); diff --git a/apps/files_sharing/lib/notifier.php b/apps/files_sharing/lib/notifier.php new file mode 100644 index 00000000000..cc2deb3f439 --- /dev/null +++ b/apps/files_sharing/lib/notifier.php @@ -0,0 +1,86 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Files_Sharing; + + +use OC\Notification\INotification; +use OC\Notification\INotifier; + +class Notifier implements INotifier { + /** @var \OCP\L10N\IFactory */ + protected $factory; + + /** + * @param \OCP\L10N\IFactory $factory + */ + public function __construct(\OCP\L10N\IFactory $factory) { + $this->factory = $factory; + } + + /** + * @param INotification $notification + * @param string $languageCode The code of the language that should be used to prepare the notification + * @return INotification + */ + public function prepare(INotification $notification, $languageCode) { + if ($notification->getApp() !== 'files_sharing') { + // Not my app => throw + throw new \InvalidArgumentException(); + } + + // Read the language from the notification + $l = $this->factory->get('files_sharing', $languageCode); + + switch ($notification->getSubject()) { + // Deal with known subjects + case 'remote_share': + $params = $notification->getSubjectParameters(); + $notification->setParsedSubject( + (string) $l->t('You received %s as a remote share from %s', $params) + ); + + // Deal with the actions for a known subject + foreach ($notification->getActions() as $action) { + switch ($action->getLabel()) { + case 'accept': + $action->setParsedLabel( + (string) $l->t('Accept') + ); + break; + + case 'decline': + $action->setParsedLabel( + (string) $l->t('Decline') + ); + break; + } + + $notification->addParsedAction($action); + } + return $notification; + + default: + // Unknown subject => Unknown notification => throw + throw new \InvalidArgumentException(); + } + } +} diff --git a/apps/files_sharing/lib/propagation/recipientpropagator.php b/apps/files_sharing/lib/propagation/recipientpropagator.php index 11764106861..420cacb3d2f 100644 --- a/apps/files_sharing/lib/propagation/recipientpropagator.php +++ b/apps/files_sharing/lib/propagation/recipientpropagator.php @@ -126,7 +126,13 @@ class RecipientPropagator { }); } + protected $propagatingIds = []; + public function propagateById($id) { + if (isset($this->propagatingIds[$id])) { + return; + } + $this->propagatingIds[$id] = true; $shares = Share::getAllSharesForFileId($id); foreach ($shares as $share) { // propagate down the share tree @@ -141,5 +147,7 @@ class RecipientPropagator { $watcher->writeHook(['path' => $path]); } } + + unset($this->propagatingIds[$id]); } } diff --git a/apps/files_sharing/lib/sharedmount.php b/apps/files_sharing/lib/sharedmount.php index 2771e0415b0..9aa9bbf562b 100644 --- a/apps/files_sharing/lib/sharedmount.php +++ b/apps/files_sharing/lib/sharedmount.php @@ -81,7 +81,7 @@ class SharedMount extends MountPoint implements MoveableMount { ); if ($newMountPoint !== $share['file_target']) { - self::updateFileTarget($newMountPoint, $share); + $this->updateFileTarget($newMountPoint, $share); $share['file_target'] = $newMountPoint; $share['unique_name'] = true; } diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php index c7529df0617..1ac401f3cf8 100644 --- a/apps/files_sharing/lib/sharedstorage.php +++ b/apps/files_sharing/lib/sharedstorage.php @@ -55,6 +55,10 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { $this->ownerView = $arguments['ownerView']; } + private function init() { + Filesystem::initMountPoints($this->share['uid_owner']); + } + /** * get id of the mount point * @@ -80,6 +84,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { * @return array Returns array with the keys path, permissions, and owner or false if not found */ public function getFile($target) { + $this->init(); if (!isset($this->files[$target])) { // Check for partial files if (pathinfo($target, PATHINFO_EXTENSION) === 'part') { @@ -319,7 +324,7 @@ class Shared extends \OC\Files\Storage\Common implements ISharedStorage { } public function rename($path1, $path2) { - + $this->init(); // we need the paths relative to data/user/files $relPath1 = $this->getMountPoint() . '/' . $path1; $relPath2 = $this->getMountPoint() . '/' . $path2; diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php index 43c76125e16..cde28c80fc4 100644 --- a/apps/files_sharing/templates/public.php +++ b/apps/files_sharing/templates/public.php @@ -17,6 +17,7 @@ OCP\Util::addStyle('files', 'upload'); OCP\Util::addScript('files', 'filesummary'); OCP\Util::addScript('files', 'breadcrumb'); OCP\Util::addScript('files', 'fileinfomodel'); +OCP\Util::addScript('files', 'newfilemenu'); OCP\Util::addScript('files', 'files'); OCP\Util::addScript('files', 'filelist'); OCP\Util::addscript('files', 'keyboardshortcuts'); diff --git a/apps/files_sharing/templates/settings-personal.php b/apps/files_sharing/templates/settings-personal.php index ae6b909df7e..1b93084e547 100644 --- a/apps/files_sharing/templates/settings-personal.php +++ b/apps/files_sharing/templates/settings-personal.php @@ -46,13 +46,13 @@ if ($_['showShareIT']) { data-url='https://plus.google.com/share?url=<?php p(urlencode($_['reference'])); ?>'/> Google+ </button> + <button id="oca-files-sharing-add-to-your-website"> + <?php p($l->t('Add to your website')) ?> + </button> </p> - <br> - - <p> - <?php p($l->t('Add it to your website:')); ?> - + <div class="hidden" id="oca-files-sharing-add-to-your-website-expanded"> + <p style="margin: 10px 0"> <a target="_blank" href="<?php p($_['reference']); ?>" style="padding:10px;background-color:#1d2d44;color:#fff;border-radius:3px;padding-left:4px;"> <img src="<?php p($_['owncloud_logo_path']); ?>" @@ -71,6 +71,7 @@ if ($_['showShareIT']) { </a></xmp> </p> + </div> <?php } ?> </div> diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php index d0ee71cec5a..3809b812051 100644 --- a/apps/files_sharing/tests/api.php +++ b/apps/files_sharing/tests/api.php @@ -73,40 +73,108 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium */ - function testCreateShare() { + function testCreateShareUserFile() { + // simulate a post request + $_POST['path'] = $this->filename; + $_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2; + $_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER; + + $result = \OCA\Files_Sharing\API\Local::createShare([]); + + $this->assertTrue($result->succeeded()); + $data = $result->getData(); + $this->assertEquals(23, $data['permissions']); + $this->assertEmpty($data['expiration']); + + $share = $this->getShareFromId($data['id']); + $items = \OCP\Share::getItemShared('file', $share['item_source']); + $this->assertTrue(!empty($items)); - // share to user + $fileinfo = $this->view->getFileInfo($this->filename); + \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + } + function testCreateShareUserFolder() { // simulate a post request - $_POST['path'] = $this->filename; + $_POST['path'] = $this->folder; $_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2; $_POST['shareType'] = \OCP\Share::SHARE_TYPE_USER; - $result = \OCA\Files_Sharing\API\Local::createShare(array()); + $result = \OCA\Files_Sharing\API\Local::createShare([]); $this->assertTrue($result->succeeded()); $data = $result->getData(); + $this->assertEquals(31, $data['permissions']); + $this->assertEmpty($data['expiration']); $share = $this->getShareFromId($data['id']); + $items = \OCP\Share::getItemShared('file', $share['item_source']); + $this->assertTrue(!empty($items)); + + $fileinfo = $this->view->getFileInfo($this->folder); + \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + } + + + function testCreateShareGroupFile() { + // simulate a post request + $_POST['path'] = $this->filename; + $_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_GROUP1; + $_POST['shareType'] = \OCP\Share::SHARE_TYPE_GROUP; + + $result = \OCA\Files_Sharing\API\Local::createShare([]); + $this->assertTrue($result->succeeded()); + $data = $result->getData(); + $this->assertEquals(23, $data['permissions']); + $this->assertEmpty($data['expiration']); + + $share = $this->getShareFromId($data['id']); $items = \OCP\Share::getItemShared('file', $share['item_source']); + $this->assertTrue(!empty($items)); + + $fileinfo = $this->view->getFileInfo($this->filename); + \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_GROUP1); + } + + function testCreateShareGroupFolder() { + // simulate a post request + $_POST['path'] = $this->folder; + $_POST['shareWith'] = \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_GROUP1; + $_POST['shareType'] = \OCP\Share::SHARE_TYPE_GROUP; + + $result = \OCA\Files_Sharing\API\Local::createShare([]); + + $this->assertTrue($result->succeeded()); + $data = $result->getData(); + $this->assertEquals(31, $data['permissions']); + $this->assertEmpty($data['expiration']); + $share = $this->getShareFromId($data['id']); + $items = \OCP\Share::getItemShared('file', $share['item_source']); $this->assertTrue(!empty($items)); - // share link + $fileinfo = $this->view->getFileInfo($this->folder); + \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_GROUP, + \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_GROUP1); + } + public function testCreateShareLink() { // simulate a post request $_POST['path'] = $this->folder; $_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK; - $result = \OCA\Files_Sharing\API\Local::createShare(array()); + $result = \OCA\Files_Sharing\API\Local::createShare([]); // check if API call was successful $this->assertTrue($result->succeeded()); $data = $result->getData(); - - // check if we have a token + $this->assertEquals(1, $data['permissions']); + $this->assertEmpty($data['expiration']); $this->assertTrue(is_string($data['token'])); // check for correct link @@ -115,18 +183,39 @@ class Test_Files_Sharing_Api extends TestCase { $share = $this->getShareFromId($data['id']); - $items = \OCP\Share::getItemShared('file', $share['item_source']); - $this->assertTrue(!empty($items)); - $fileinfo = $this->view->getFileInfo($this->filename); + $fileinfo = $this->view->getFileInfo($this->folder); + \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null); + } - \OCP\Share::unshare('file', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_USER, - \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2); + public function testCreateShareLinkPublicUpload() { + // simulate a post request + $_POST['path'] = $this->folder; + $_POST['shareType'] = \OCP\Share::SHARE_TYPE_LINK; + $_POST['publicUpload'] = 'true'; - $fileinfo = $this->view->getFileInfo($this->folder); + $result = \OCA\Files_Sharing\API\Local::createShare(array()); + + // check if API call was successful + $this->assertTrue($result->succeeded()); + + $data = $result->getData(); + $this->assertEquals(7, $data['permissions']); + $this->assertEmpty($data['expiration']); + $this->assertTrue(is_string($data['token'])); + // check for correct link + $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']); + $this->assertEquals($url, $data['url']); + + + $share = $this->getShareFromId($data['id']); + $items = \OCP\Share::getItemShared('file', $share['item_source']); + $this->assertTrue(!empty($items)); + + $fileinfo = $this->view->getFileInfo($this->folder); \OCP\Share::unshare('folder', $fileinfo['fileid'], \OCP\Share::SHARE_TYPE_LINK, null); } @@ -287,7 +376,7 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile */ function testGetAllShares() { @@ -334,7 +423,7 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareLink */ function testPublicLinkUrl() { // simulate a post request @@ -379,7 +468,8 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile + * @depends testCreateShareLink */ function testGetShareFromSource() { @@ -409,7 +499,8 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile + * @depends testCreateShareLink */ function testGetShareFromSourceWithReshares() { @@ -463,7 +554,7 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile */ function testGetShareFromId() { @@ -911,7 +1002,8 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile + * @depends testCreateShareLink */ function testUpdateShare() { @@ -1037,7 +1129,7 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile */ public function testUpdateShareInvalidPermissions() { @@ -1232,7 +1324,7 @@ class Test_Files_Sharing_Api extends TestCase { /** * @medium - * @depends testCreateShare + * @depends testCreateShareUserFile */ function testDeleteShare() { @@ -1526,6 +1618,7 @@ class Test_Files_Sharing_Api extends TestCase { $data = $result->getData(); $this->assertTrue(is_string($data['token'])); + $this->assertEquals($date, substr($data['expiration'], 0, 10)); // check for correct link $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']); @@ -1564,6 +1657,7 @@ class Test_Files_Sharing_Api extends TestCase { $data = $result->getData(); $this->assertTrue(is_string($data['token'])); + $this->assertEquals($date->format('Y-m-d') . ' 00:00:00', $data['expiration']); // check for correct link $url = \OC::$server->getURLGenerator()->getAbsoluteURL('/index.php/s/' . $data['token']); diff --git a/apps/files_sharing/tests/api/shareestest.php b/apps/files_sharing/tests/api/shareestest.php new file mode 100644 index 00000000000..1e4438acd88 --- /dev/null +++ b/apps/files_sharing/tests/api/shareestest.php @@ -0,0 +1,995 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\Files_Sharing\Tests\API; + +use Doctrine\DBAL\Connection; +use OC\Share\Constants; +use OCA\Files_Sharing\API\Sharees; +use OCA\Files_sharing\Tests\TestCase; +use OCP\Share; + +class ShareesTest extends TestCase { + /** @var Sharees */ + protected $sharees; + + /** @var \OCP\IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $userManager; + + /** @var \OCP\IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $groupManager; + + /** @var \OCP\Contacts\IManager|\PHPUnit_Framework_MockObject_MockObject */ + protected $contactsManager; + + /** @var \OCP\IUserSession|\PHPUnit_Framework_MockObject_MockObject */ + protected $session; + + /** @var \OCP\IRequest|\PHPUnit_Framework_MockObject_MockObject */ + protected $request; + + protected function setUp() { + parent::setUp(); + + $this->userManager = $this->getMockBuilder('OCP\IUserManager') + ->disableOriginalConstructor() + ->getMock(); + + $this->groupManager = $this->getMockBuilder('OCP\IGroupManager') + ->disableOriginalConstructor() + ->getMock(); + + $this->contactsManager = $this->getMockBuilder('OCP\Contacts\IManager') + ->disableOriginalConstructor() + ->getMock(); + + $this->session = $this->getMockBuilder('OCP\IUserSession') + ->disableOriginalConstructor() + ->getMock(); + + $this->request = $this->getMockBuilder('OCP\IRequest') + ->disableOriginalConstructor() + ->getMock(); + + $this->sharees = new Sharees( + $this->groupManager, + $this->userManager, + $this->contactsManager, + $this->getMockBuilder('OCP\IConfig')->disableOriginalConstructor()->getMock(), + $this->session, + $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), + $this->request, + $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock() + ); + } + + protected function getUserMock($uid, $displayName) { + $user = $this->getMockBuilder('OCP\IUser') + ->disableOriginalConstructor() + ->getMock(); + + $user->expects($this->any()) + ->method('getUID') + ->willReturn($uid); + + $user->expects($this->any()) + ->method('getDisplayName') + ->willReturn($displayName); + + return $user; + } + + protected function getGroupMock($gid) { + $group = $this->getMockBuilder('OCP\IGroup') + ->disableOriginalConstructor() + ->getMock(); + + $group->expects($this->any()) + ->method('getGID') + ->willReturn($gid); + + return $group; + } + + public function dataGetUsers() { + return [ + ['test', false, [], [], [], [], true, false], + ['test', true, [], [], [], [], true, false], + [ + 'test', false, [], [], + [ + ['label' => 'Test', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test']], + ], [], true, $this->getUserMock('test', 'Test') + ], + [ + 'test', true, [], [], + [ + ['label' => 'Test', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test']], + ], [], true, $this->getUserMock('test', 'Test') + ], + [ + 'test', + false, + [], + [ + $this->getUserMock('test1', 'Test One'), + ], + [], + [ + ['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], + true, + false, + ], + [ + 'test', + false, + [], + [ + $this->getUserMock('test1', 'Test One'), + $this->getUserMock('test2', 'Test Two'), + ], + [], + [ + ['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ['label' => 'Test Two', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], + ], + false, + false, + ], + [ + 'test', + false, + [], + [ + $this->getUserMock('test0', 'Test'), + $this->getUserMock('test1', 'Test One'), + $this->getUserMock('test2', 'Test Two'), + ], + [ + ['label' => 'Test', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test0']], + ], + [ + ['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ['label' => 'Test Two', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], + ], + false, + false, + ], + [ + 'test', + true, + ['abc', 'xyz'], + [ + ['abc', 'test', 2, 0, ['test1' => 'Test One']], + ['xyz', 'test', 2, 0, []], + ], + [], + [ + ['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], + true, + false, + ], + [ + 'test', + true, + ['abc', 'xyz'], + [ + ['abc', 'test', 2, 0, [ + 'test1' => 'Test One', + 'test2' => 'Test Two', + ]], + ['xyz', 'test', 2, 0, [ + 'test1' => 'Test One', + 'test2' => 'Test Two', + ]], + ], + [], + [ + ['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ['label' => 'Test Two', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], + ], + false, + false, + ], + [ + 'test', + true, + ['abc', 'xyz'], + [ + ['abc', 'test', 2, 0, [ + 'test' => 'Test One', + ]], + ['xyz', 'test', 2, 0, [ + 'test2' => 'Test Two', + ]], + ], + [ + ['label' => 'Test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test']], + ], + [ + ['label' => 'Test Two', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], + ], + false, + false, + ], + ]; + } + + /** + * @dataProvider dataGetUsers + * + * @param string $searchTerm + * @param bool $shareWithGroupOnly + * @param array $groupResponse + * @param array $userResponse + * @param array $exactExpected + * @param array $expected + * @param bool $reachedEnd + * @param mixed $singleUser + */ + public function testGetUsers($searchTerm, $shareWithGroupOnly, $groupResponse, $userResponse, $exactExpected, $expected, $reachedEnd, $singleUser) { + $this->invokePrivate($this->sharees, 'limit', [2]); + $this->invokePrivate($this->sharees, 'offset', [0]); + $this->invokePrivate($this->sharees, 'shareWithGroupOnly', [$shareWithGroupOnly]); + + $user = $this->getUserMock('admin', 'Administrator'); + $this->session->expects($this->any()) + ->method('getUser') + ->willReturn($user); + + if (!$shareWithGroupOnly) { + $this->userManager->expects($this->once()) + ->method('searchDisplayName') + ->with($searchTerm, $this->invokePrivate($this->sharees, 'limit'), $this->invokePrivate($this->sharees, 'offset')) + ->willReturn($userResponse); + } else { + $this->groupManager->expects($this->once()) + ->method('getUserGroupIds') + ->with($user) + ->willReturn($groupResponse); + + $this->groupManager->expects($this->exactly(sizeof($groupResponse))) + ->method('displayNamesInGroup') + ->with($this->anything(), $searchTerm, $this->invokePrivate($this->sharees, 'limit'), $this->invokePrivate($this->sharees, 'offset')) + ->willReturnMap($userResponse); + } + + if ($singleUser !== false) { + $this->userManager->expects($this->once()) + ->method('get') + ->with($searchTerm) + ->willReturn($singleUser); + } + + $this->invokePrivate($this->sharees, 'getUsers', [$searchTerm]); + $result = $this->invokePrivate($this->sharees, 'result'); + + $this->assertEquals($exactExpected, $result['exact']['users']); + $this->assertEquals($expected, $result['users']); + $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor')); + } + + public function dataGetGroups() { + return [ + ['test', false, [], [], [], [], true, false], + [ + 'test', false, + [$this->getGroupMock('test1')], + [], + [], + [['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]], + true, + false, + ], + [ + 'test', false, + [ + $this->getGroupMock('test'), + $this->getGroupMock('test1'), + ], + [], + [['label' => 'test', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test']]], + [['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]], + false, + false, + ], + [ + 'test', false, + [ + $this->getGroupMock('test0'), + $this->getGroupMock('test1'), + ], + [], + [], + [ + ['label' => 'test0', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test0']], + ['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']], + ], + false, + null, + ], + [ + 'test', false, + [ + $this->getGroupMock('test0'), + $this->getGroupMock('test1'), + ], + [], + [ + ['label' => 'test', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test']], + ], + [ + ['label' => 'test0', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test0']], + ['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']], + ], + false, + $this->getGroupMock('test'), + ], + ['test', true, [], [], [], [], true, false], + [ + 'test', true, + [ + $this->getGroupMock('test1'), + $this->getGroupMock('test2'), + ], + [$this->getGroupMock('test1')], + [], + [['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]], + false, + false, + ], + [ + 'test', true, + [ + $this->getGroupMock('test'), + $this->getGroupMock('test1'), + ], + [$this->getGroupMock('test')], + [['label' => 'test', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test']]], + [], + false, + false, + ], + [ + 'test', true, + [ + $this->getGroupMock('test'), + $this->getGroupMock('test1'), + ], + [$this->getGroupMock('test1')], + [], + [['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]], + false, + false, + ], + [ + 'test', true, + [ + $this->getGroupMock('test'), + $this->getGroupMock('test1'), + ], + [$this->getGroupMock('test'), $this->getGroupMock('test0'), $this->getGroupMock('test1')], + [['label' => 'test', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test']]], + [['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']]], + false, + false, + ], + [ + 'test', true, + [ + $this->getGroupMock('test0'), + $this->getGroupMock('test1'), + ], + [$this->getGroupMock('test'), $this->getGroupMock('test0'), $this->getGroupMock('test1')], + [], + [ + ['label' => 'test0', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test0']], + ['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']], + ], + false, + null, + ], + [ + 'test', true, + [ + $this->getGroupMock('test0'), + $this->getGroupMock('test1'), + ], + [$this->getGroupMock('test'), $this->getGroupMock('test0'), $this->getGroupMock('test1')], + [ + ['label' => 'test', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test']], + ], + [ + ['label' => 'test0', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test0']], + ['label' => 'test1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'test1']], + ], + false, + $this->getGroupMock('test'), + ], + ]; + } + + /** + * @dataProvider dataGetGroups + * + * @param string $searchTerm + * @param bool $shareWithGroupOnly + * @param array $groupResponse + * @param array $userGroupsResponse + * @param array $exactExpected + * @param array $expected + * @param bool $reachedEnd + * @param mixed $singleGroup + */ + public function testGetGroups($searchTerm, $shareWithGroupOnly, $groupResponse, $userGroupsResponse, $exactExpected, $expected, $reachedEnd, $singleGroup) { + $this->invokePrivate($this->sharees, 'limit', [2]); + $this->invokePrivate($this->sharees, 'offset', [0]); + $this->invokePrivate($this->sharees, 'shareWithGroupOnly', [$shareWithGroupOnly]); + + $this->groupManager->expects($this->once()) + ->method('search') + ->with($searchTerm, $this->invokePrivate($this->sharees, 'limit'), $this->invokePrivate($this->sharees, 'offset')) + ->willReturn($groupResponse); + + if ($singleGroup !== false) { + $this->groupManager->expects($this->once()) + ->method('get') + ->with($searchTerm) + ->willReturn($singleGroup); + } + + if ($shareWithGroupOnly) { + $user = $this->getUserMock('admin', 'Administrator'); + $this->session->expects($this->any()) + ->method('getUser') + ->willReturn($user); + + $numGetUserGroupsCalls = empty($groupResponse) ? 0 : 1; + $this->groupManager->expects($this->exactly($numGetUserGroupsCalls)) + ->method('getUserGroups') + ->with($user) + ->willReturn($userGroupsResponse); + } + + $this->invokePrivate($this->sharees, 'getGroups', [$searchTerm]); + $result = $this->invokePrivate($this->sharees, 'result'); + + $this->assertEquals($exactExpected, $result['exact']['groups']); + $this->assertEquals($expected, $result['groups']); + $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor')); + } + + public function dataGetRemote() { + return [ + ['test', [], [], [], true], + [ + 'test@remote', + [], + [ + ['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']], + ], + [], + true, + ], + [ + 'test', + [ + [ + 'FN' => 'User3 @ Localhost', + ], + [ + 'FN' => 'User2 @ Localhost', + 'CLOUD' => [ + ], + ], + [ + 'FN' => 'User @ Localhost', + 'CLOUD' => [ + 'username@localhost', + ], + ], + ], + [], + [ + ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost']], + ], + true, + ], + [ + 'test@remote', + [ + [ + 'FN' => 'User3 @ Localhost', + ], + [ + 'FN' => 'User2 @ Localhost', + 'CLOUD' => [ + ], + ], + [ + 'FN' => 'User @ Localhost', + 'CLOUD' => [ + 'username@localhost', + ], + ], + ], + [ + ['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']], + ], + [ + ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost']], + ], + true, + ], + [ + 'username@localhost', + [ + [ + 'FN' => 'User3 @ Localhost', + ], + [ + 'FN' => 'User2 @ Localhost', + 'CLOUD' => [ + ], + ], + [ + 'FN' => 'User @ Localhost', + 'CLOUD' => [ + 'username@localhost', + ], + ], + ], + [ + ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost']], + ], + [ + ], + true, + ], + ]; + } + + /** + * @dataProvider dataGetRemote + * + * @param string $searchTerm + * @param array $contacts + * @param array $exactExpected + * @param array $expected + * @param bool $reachedEnd + */ + public function testGetRemote($searchTerm, $contacts, $exactExpected, $expected, $reachedEnd) { + $this->contactsManager->expects($this->any()) + ->method('search') + ->with($searchTerm, ['CLOUD', 'FN']) + ->willReturn($contacts); + + $this->invokePrivate($this->sharees, 'getRemote', [$searchTerm]); + $result = $this->invokePrivate($this->sharees, 'result'); + + $this->assertEquals($exactExpected, $result['exact']['remotes']); + $this->assertEquals($expected, $result['remotes']); + $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor')); + } + + public function dataSearch() { + $allTypes = [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE]; + + return [ + [[], '', true, '', null, $allTypes, 1, 200, false], + + // Test itemType + [[ + 'search' => '', + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'search' => 'foobar', + ], '', true, 'foobar', null, $allTypes, 1, 200, false], + [[ + 'search' => 0, + ], '', true, '0', null, $allTypes, 1, 200, false], + + // Test itemType + [[ + 'itemType' => '', + ], '', true, '', '', $allTypes, 1, 200, false], + [[ + 'itemType' => 'folder', + ], '', true, '', 'folder', $allTypes, 1, 200, false], + [[ + 'itemType' => 0, + ], '', true, '', '0', $allTypes, 1, 200, false], + + // Test shareType + [[ + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'shareType' => 0, + ], '', true, '', null, [0], 1, 200, false], + [[ + 'shareType' => '0', + ], '', true, '', null, [0], 1, 200, false], + [[ + 'shareType' => 1, + ], '', true, '', null, [1], 1, 200, false], + [[ + 'shareType' => 12, + ], '', true, '', null, [], 1, 200, false], + [[ + 'shareType' => 'foobar', + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'shareType' => [0, 1, 2], + ], '', true, '', null, [0, 1], 1, 200, false], + [[ + 'shareType' => [0, 1], + ], '', true, '', null, [0, 1], 1, 200, false], + [[ + 'shareType' => $allTypes, + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'shareType' => $allTypes, + ], '', false, '', null, [0, 1], 1, 200, false], + + // Test pagination + [[ + 'page' => 0, + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'page' => '0', + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'page' => -1, + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'page' => 1, + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'page' => 10, + ], '', true, '', null, $allTypes, 10, 200, false], + + // Test limit + [[ + 'limit' => 0, + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'limit' => '0', + ], '', true, '', null, $allTypes, 1, 200, false], + [[ + 'limit' => -1, + ], '', true, '', null, $allTypes, 1, 1, false], + [[ + 'limit' => 1, + ], '', true, '', null, $allTypes, 1, 1, false], + [[ + 'limit' => 10, + ], '', true, '', null, $allTypes, 1, 10, false], + + // Test $shareWithGroupOnly setting + [[], 'no', true, '', null, $allTypes, 1, 200, false], + [[], 'yes', true, '', null, $allTypes, 1, 200, true], + + ]; + } + + /** + * @dataProvider dataSearch + * + * @param array $getData + * @param string $apiSetting + * @param bool $remoteSharingEnabled + * @param string $search + * @param string $itemType + * @param array $shareTypes + * @param int $page + * @param int $perPage + * @param bool $shareWithGroupOnly + */ + public function testSearch($getData, $apiSetting, $remoteSharingEnabled, $search, $itemType, $shareTypes, $page, $perPage, $shareWithGroupOnly) { + $oldGet = $_GET; + $_GET = $getData; + + $config = $this->getMockBuilder('OCP\IConfig') + ->disableOriginalConstructor() + ->getMock(); + $config->expects($this->once()) + ->method('getAppValue') + ->with('core', 'shareapi_only_share_with_group_members', 'no') + ->willReturn($apiSetting); + + $sharees = $this->getMockBuilder('\OCA\Files_Sharing\API\Sharees') + ->setConstructorArgs([ + $this->groupManager, + $this->userManager, + $this->contactsManager, + $config, + $this->session, + $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock() + ]) + ->setMethods(array('searchSharees', 'isRemoteSharingAllowed')) + ->getMock(); + $sharees->expects($this->once()) + ->method('searchSharees') + ->with($search, $itemType, $shareTypes, $page, $perPage) + ->willReturnCallback(function + ($isearch, $iitemType, $ishareTypes, $ipage, $iperPage) + use ($search, $itemType, $shareTypes, $page, $perPage) { + + // We are doing strict comparisons here, so we can differ 0/'' and null on shareType/itemType + $this->assertSame($search, $isearch); + $this->assertSame($itemType, $iitemType); + $this->assertSame($shareTypes, $ishareTypes); + $this->assertSame($page, $ipage); + $this->assertSame($perPage, $iperPage); + return new \OC_OCS_Result([]); + }); + $sharees->expects($this->any()) + ->method('isRemoteSharingAllowed') + ->with($itemType) + ->willReturn($remoteSharingEnabled); + + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\API\Sharees $sharees */ + $this->assertInstanceOf('\OC_OCS_Result', $sharees->search()); + + $this->assertSame($shareWithGroupOnly, $this->invokePrivate($sharees, 'shareWithGroupOnly')); + + $_GET = $oldGet; + } + + public function dataIsRemoteSharingAllowed() { + return [ + ['file', true], + ['folder', true], + ['', false], + ['contacts', false], + ]; + } + + /** + * @dataProvider dataIsRemoteSharingAllowed + * + * @param string $itemType + * @param bool $expected + */ + public function testIsRemoteSharingAllowed($itemType, $expected) { + $this->assertSame($expected, $this->invokePrivate($this->sharees, 'isRemoteSharingAllowed', [$itemType])); + } + + public function dataSearchSharees() { + return [ + ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], [], + [ + 'exact' => ['users' => [], 'groups' => [], 'remotes' => []], + 'users' => [], + 'groups' => [], + 'remotes' => [], + ], false], + ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], [], + [ + 'exact' => ['users' => [], 'groups' => [], 'remotes' => []], + 'users' => [], + 'groups' => [], + 'remotes' => [], + ], false], + [ + 'test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [ + ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], [ + ['label' => 'testgroup1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'testgroup1']], + ], [ + ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']], + ], + [ + 'exact' => ['users' => [], 'groups' => [], 'remotes' => []], + 'users' => [ + ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], + 'groups' => [ + ['label' => 'testgroup1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'testgroup1']], + ], + 'remotes' => [ + ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']], + ], + ], true, + ], + // No groups requested + [ + 'test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_REMOTE], 1, 2, false, [ + ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], null, [ + ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']], + ], + [ + 'exact' => ['users' => [], 'groups' => [], 'remotes' => []], + 'users' => [ + ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], + 'groups' => [], + 'remotes' => [ + ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']], + ], + ], false, + ], + // Share type restricted to user - Only one user + [ + 'test', 'folder', [Share::SHARE_TYPE_USER], 1, 2, false, [ + ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], null, null, + [ + 'exact' => ['users' => [], 'groups' => [], 'remotes' => []], + 'users' => [ + ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ], + 'groups' => [], + 'remotes' => [], + ], false, + ], + // Share type restricted to user - Multipage result + [ + 'test', 'folder', [Share::SHARE_TYPE_USER], 1, 2, false, [ + ['label' => 'test 1', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ['label' => 'test 2', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], + ], null, null, + [ + 'exact' => ['users' => [], 'groups' => [], 'remotes' => []], + 'users' => [ + ['label' => 'test 1', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], + ['label' => 'test 2', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], + ], + 'groups' => [], + 'remotes' => [], + ], true, + ], + ]; + } + + /** + * @dataProvider dataSearchSharees + * + * @param string $searchTerm + * @param string $itemType + * @param array $shareTypes + * @param int $page + * @param int $perPage + * @param bool $shareWithGroupOnly + * @param array $mockedUserResult + * @param array $mockedGroupsResult + * @param array $mockedRemotesResult + * @param array $expected + * @param bool $nextLink + */ + public function testSearchSharees($searchTerm, $itemType, array $shareTypes, $page, $perPage, $shareWithGroupOnly, + $mockedUserResult, $mockedGroupsResult, $mockedRemotesResult, $expected, $nextLink) { + /** @var \PHPUnit_Framework_MockObject_MockObject|\OCA\Files_Sharing\API\Sharees $sharees */ + $sharees = $this->getMockBuilder('\OCA\Files_Sharing\API\Sharees') + ->setConstructorArgs([ + $this->groupManager, + $this->userManager, + $this->contactsManager, + $this->getMockBuilder('OCP\IConfig')->disableOriginalConstructor()->getMock(), + $this->session, + $this->getMockBuilder('OCP\IURLGenerator')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock(), + $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock() + ]) + ->setMethods(array('getShareesForShareIds', 'getUsers', 'getGroups', 'getRemote')) + ->getMock(); + $sharees->expects(($mockedUserResult === null) ? $this->never() : $this->once()) + ->method('getUsers') + ->with($searchTerm) + ->willReturnCallback(function() use ($sharees, $mockedUserResult) { + $result = $this->invokePrivate($sharees, 'result'); + $result['users'] = $mockedUserResult; + $this->invokePrivate($sharees, 'result', [$result]); + }); + $sharees->expects(($mockedGroupsResult === null) ? $this->never() : $this->once()) + ->method('getGroups') + ->with($searchTerm) + ->willReturnCallback(function() use ($sharees, $mockedGroupsResult) { + $result = $this->invokePrivate($sharees, 'result'); + $result['groups'] = $mockedGroupsResult; + $this->invokePrivate($sharees, 'result', [$result]); + }); + $sharees->expects(($mockedRemotesResult === null) ? $this->never() : $this->once()) + ->method('getRemote') + ->with($searchTerm) + ->willReturnCallback(function() use ($sharees, $mockedRemotesResult) { + $result = $this->invokePrivate($sharees, 'result'); + $result['remotes'] = $mockedRemotesResult; + $this->invokePrivate($sharees, 'result', [$result]); + }); + + /** @var \OC_OCS_Result $ocs */ + $ocs = $this->invokePrivate($sharees, 'searchSharees', [$searchTerm, $itemType, $shareTypes, $page, $perPage, $shareWithGroupOnly]); + $this->assertInstanceOf('\OC_OCS_Result', $ocs); + $this->assertEquals($expected, $ocs->getData()); + + // Check if next link is set + if ($nextLink) { + $headers = $ocs->getHeaders(); + $this->assertArrayHasKey('Link', $headers); + $this->assertStringStartsWith('<', $headers['Link']); + $this->assertStringEndsWith('>; rel="next"', $headers['Link']); + } + } + + public function testSearchShareesNoItemType() { + /** @var \OC_OCS_Result $ocs */ + $ocs = $this->invokePrivate($this->sharees, 'searchSharees', ['', null, [], [], 0, 0, false]); + $this->assertInstanceOf('\OC_OCS_Result', $ocs); + + $this->assertSame(400, $ocs->getStatusCode(), 'Expected status code 400'); + $this->assertSame([], $ocs->getData(), 'Expected that no data is send'); + + $meta = $ocs->getMeta(); + $this->assertNotEmpty($meta); + $this->assertArrayHasKey('message', $meta); + $this->assertSame('missing itemType', $meta['message']); + } + + public function dataGetPaginationLink() { + return [ + [1, '/ocs/v1.php', ['limit' => 2], '<?limit=2&page=2>; rel="next"'], + [10, '/ocs/v2.php', ['limit' => 2], '<?limit=2&page=11>; rel="next"'], + ]; + } + + /** + * @dataProvider dataGetPaginationLink + * + * @param int $page + * @param string $scriptName + * @param array $params + * @param array $expected + */ + public function testGetPaginationLink($page, $scriptName, $params, $expected) { + $this->request->expects($this->once()) + ->method('getScriptName') + ->willReturn($scriptName); + + $this->assertEquals($expected, $this->invokePrivate($this->sharees, 'getPaginationLink', [$page, $params])); + } + + public function dataIsV2() { + return [ + ['/ocs/v1.php', false], + ['/ocs/v2.php', true], + ]; + } + + /** + * @dataProvider dataIsV2 + * + * @param string $scriptName + * @param bool $expected + */ + public function testIsV2($scriptName, $expected) { + $this->request->expects($this->once()) + ->method('getScriptName') + ->willReturn($scriptName); + + $this->assertEquals($expected, $this->invokePrivate($this->sharees, 'isV2')); + } +} diff --git a/apps/files_sharing/tests/external/managertest.php b/apps/files_sharing/tests/external/managertest.php index df01ea0f738..8e03c67a9a3 100644 --- a/apps/files_sharing/tests/external/managertest.php +++ b/apps/files_sharing/tests/external/managertest.php @@ -50,6 +50,7 @@ class ManagerTest extends TestCase { $this->mountManager, new StorageFactory(), $httpHelper, + \OC::$server->getNotificationManager(), $this->uid ); } diff --git a/apps/files_sharing/tests/server2server.php b/apps/files_sharing/tests/server2server.php index a1c87d73393..a4cc8209a8e 100644 --- a/apps/files_sharing/tests/server2server.php +++ b/apps/files_sharing/tests/server2server.php @@ -154,6 +154,7 @@ class Test_Files_Sharing_S2S_OCS_API extends TestCase { \OC\Files\Filesystem::getMountManager(), \OC\Files\Filesystem::getLoader(), \OC::$server->getHTTPHelper(), + \OC::$server->getNotificationManager(), $toDelete ); diff --git a/apps/files_versions/ajax/getVersions.php b/apps/files_versions/ajax/getVersions.php index 20d60240179..59bd30f434f 100644 --- a/apps/files_versions/ajax/getVersions.php +++ b/apps/files_versions/ajax/getVersions.php @@ -44,6 +44,6 @@ if( $versions ) { } else { - \OCP\JSON::success(array('data' => array('versions' => false, 'endReached' => true))); + \OCP\JSON::success(array('data' => array('versions' => [], 'endReached' => true))); } diff --git a/apps/files_versions/ajax/preview.php b/apps/files_versions/ajax/preview.php index 8a9a5fba14c..2f33f0278ef 100644 --- a/apps/files_versions/ajax/preview.php +++ b/apps/files_versions/ajax/preview.php @@ -53,7 +53,10 @@ try { $preview->setScalingUp($scalingUp); $preview->showPreview(); -}catch(\Exception $e) { +} catch (\OCP\Files\NotFoundException $e) { + \OC_Response::setStatus(404); + \OCP\Util::writeLog('core', $e->getmessage(), \OCP\Util::DEBUG); +} catch (\Exception $e) { \OC_Response::setStatus(500); \OCP\Util::writeLog('core', $e->getmessage(), \OCP\Util::DEBUG); } diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php index 3bad0d8a94d..967f2e73a34 100644 --- a/apps/files_versions/appinfo/app.php +++ b/apps/files_versions/appinfo/app.php @@ -19,7 +19,6 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ -OCP\Util::addscript('files_versions', 'versions'); OCP\Util::addStyle('files_versions', 'versions'); \OCA\Files_Versions\Hooks::connectHooks(); diff --git a/apps/files_versions/css/versions.css b/apps/files_versions/css/versions.css index e3ccfc3c864..ec0f0cc9896 100644 --- a/apps/files_versions/css/versions.css +++ b/apps/files_versions/css/versions.css @@ -1,19 +1,18 @@ -#dropdown.drop-versions { - width: 360px; +.versionsTabView .clear-float { + clear: both; } - -#found_versions li { +.versionsTabView li { width: 100%; cursor: default; height: 56px; float: left; border-bottom: 1px solid rgba(100,100,100,.1); } -#found_versions li:last-child { +.versionsTabView li:last-child { border-bottom: none; } -#found_versions li > * { +.versionsTabView li > * { padding: 7px; float: left; vertical-align: top; @@ -22,34 +21,34 @@ opacity: .5; } -#found_versions li > a, -#found_versions li > span { +.versionsTabView li > a, +.versionsTabView li > span { padding: 17px 7px; } -#found_versions li > *:hover, -#found_versions li > *:focus { +.versionsTabView li > *:hover, +.versionsTabView li > *:focus { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter: alpha(opacity=100); opacity: 1; } -#found_versions img { +.versionsTabView img { cursor: pointer; padding-right: 4px; } -#found_versions img.preview { +.versionsTabView img.preview { cursor: default; opacity: 1; } -#found_versions .versionDate { +.versionsTabView .versionDate { min-width: 100px; vertical-align: text-bottom; } -#found_versions .revertVersion { +.versionsTabView .revertVersion { cursor: pointer; float: right; max-width: 130px; diff --git a/apps/files_versions/js/filesplugin.js b/apps/files_versions/js/filesplugin.js new file mode 100644 index 00000000000..42075ce6462 --- /dev/null +++ b/apps/files_versions/js/filesplugin.js @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + OCA.Versions = OCA.Versions || {}; + + /** + * @namespace + */ + OCA.Versions.Util = { + /** + * Initialize the versions plugin. + * + * @param {OCA.Files.FileList} fileList file list to be extended + */ + attach: function(fileList) { + if (fileList.id === 'trashbin' || fileList.id === 'files.public') { + return; + } + + fileList.registerTabView(new OCA.Versions.VersionsTabView('versionsTabView')); + } + }; +})(); + +OC.Plugins.register('OCA.Files.FileList', OCA.Versions.Util); + diff --git a/apps/files_versions/js/versioncollection.js b/apps/files_versions/js/versioncollection.js new file mode 100644 index 00000000000..3f8214cde8c --- /dev/null +++ b/apps/files_versions/js/versioncollection.js @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + /** + * @memberof OCA.Versions + */ + var VersionCollection = OC.Backbone.Collection.extend({ + model: OCA.Versions.VersionModel, + + /** + * @var OCA.Files.FileInfoModel + */ + _fileInfo: null, + + _endReached: false, + _currentIndex: 0, + + url: function() { + var url = OC.generateUrl('/apps/files_versions/ajax/getVersions.php'); + var query = { + source: this._fileInfo.getFullPath(), + start: this._currentIndex + }; + return url + '?' + OC.buildQueryString(query); + }, + + setFileInfo: function(fileInfo) { + this._fileInfo = fileInfo; + // reset + this._endReached = false; + this._currentIndex = 0; + }, + + getFileInfo: function() { + return this._fileInfo; + }, + + hasMoreResults: function() { + return !this._endReached; + }, + + fetch: function(options) { + if (!options || options.remove) { + this._currentIndex = 0; + } + return OC.Backbone.Collection.prototype.fetch.apply(this, arguments); + }, + + /** + * Fetch the next set of results + */ + fetchNext: function() { + if (!this.hasMoreResults()) { + return null; + } + if (this._currentIndex === 0) { + return this.fetch(); + } + return this.fetch({remove: false}); + }, + + parse: function(result) { + var results = _.map(result.data.versions, function(version) { + var revision = parseInt(version.version, 10); + return { + id: revision, + name: version.name, + fullPath: version.path, + timestamp: revision, + size: version.size + }; + }); + this._endReached = result.data.endReached; + this._currentIndex += results.length; + return results; + } + }); + + OCA.Versions = OCA.Versions || {}; + + OCA.Versions.VersionCollection = VersionCollection; +})(); + diff --git a/apps/files_versions/js/versionmodel.js b/apps/files_versions/js/versionmodel.js new file mode 100644 index 00000000000..dc610fc2144 --- /dev/null +++ b/apps/files_versions/js/versionmodel.js @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + /** + * @memberof OCA.Versions + */ + var VersionModel = OC.Backbone.Model.extend({ + + /** + * Restores the original file to this revision + */ + revert: function(options) { + options = options ? _.clone(options) : {}; + var model = this; + var file = this.getFullPath(); + var revision = this.get('timestamp'); + + $.ajax({ + type: 'GET', + url: OC.generateUrl('/apps/files_versions/ajax/rollbackVersion.php'), + dataType: 'json', + data: { + file: file, + revision: revision + }, + success: function(response) { + if (response.status === 'error') { + if (options.error) { + options.error.call(options.context, model, response, options); + } + model.trigger('error', model, response, options); + } else { + if (options.success) { + options.success.call(options.context, model, response, options); + } + model.trigger('revert', model, response, options); + } + } + }); + }, + + getFullPath: function() { + return this.get('fullPath'); + }, + + getPreviewUrl: function() { + var url = OC.generateUrl('/apps/files_versions/preview'); + var params = { + file: this.get('fullPath'), + version: this.get('timestamp') + }; + return url + '?' + OC.buildQueryString(params); + }, + + getDownloadUrl: function() { + var url = OC.generateUrl('/apps/files_versions/download.php'); + var params = { + file: this.get('fullPath'), + revision: this.get('timestamp') + }; + return url + '?' + OC.buildQueryString(params); + } + }); + + OCA.Versions = OCA.Versions || {}; + + OCA.Versions.VersionModel = VersionModel; +})(); + diff --git a/apps/files_versions/js/versions.js b/apps/files_versions/js/versions.js deleted file mode 100644 index e86bb4c3307..00000000000 --- a/apps/files_versions/js/versions.js +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (c) 2014 - * - * This file is licensed under the Affero General Public License version 3 - * or later. - * - * See the COPYING-README file. - * - */ - -/* global scanFiles, escapeHTML, formatDate */ -$(document).ready(function(){ - - // TODO: namespace all this as OCA.FileVersions - - if ($('#isPublic').val()){ - // no versions actions in public mode - // beware of https://github.com/owncloud/core/issues/4545 - // as enabling this might hang Chrome - return; - } - - if (OCA.Files) { - // Add versions button to 'files/index.php' - OCA.Files.fileActions.register( - 'file', - 'Versions', - OC.PERMISSION_UPDATE, - function() { - // Specify icon for hitory button - return OC.imagePath('core','actions/history'); - }, function(filename, context){ - // Action to perform when clicked - if (scanFiles.scanning){return;}//workaround to prevent additional http request block scanning feedback - - var file = context.dir.replace(/(?!<=\/)$|\/$/, '/' + filename); - var createDropDown = true; - // Check if drop down is already visible for a different file - if (($('#dropdown').length > 0) ) { - if ( $('#dropdown').hasClass('drop-versions') && file == $('#dropdown').data('file')) { - createDropDown = false; - } - $('#dropdown').slideUp(OC.menuSpeed); - $('#dropdown').remove(); - $('tr').removeClass('mouseOver'); - } - - if(createDropDown === true) { - createVersionsDropdown(filename, file, context.fileList); - } - }, t('files_versions', 'Versions') - ); - } - - $(document).on("click", 'span[class="revertVersion"]', function() { - var revision = $(this).attr('id'); - var file = $(this).attr('value'); - revertFile(file, revision); - }); - -}); - -function revertFile(file, revision) { - - $.ajax({ - type: 'GET', - url: OC.linkTo('files_versions', 'ajax/rollbackVersion.php'), - dataType: 'json', - data: {file: file, revision: revision}, - async: false, - success: function(response) { - if (response.status === 'error') { - OC.Notification.show( t('files_version', 'Failed to revert {file} to revision {timestamp}.', {file:file, timestamp:formatDate(revision * 1000)}) ); - } else { - $('#dropdown').slideUp(OC.menuSpeed, function() { - $('#dropdown').closest('tr').find('.modified:first').html(relative_modified_date(revision)); - $('#dropdown').remove(); - $('tr').removeClass('mouseOver'); - }); - } - } - }); - -} - -function goToVersionPage(url){ - window.location.assign(url); -} - -function createVersionsDropdown(filename, files, fileList) { - - var start = 0; - var fileEl; - - var html = '<div id="dropdown" class="drop drop-versions" data-file="'+escapeHTML(files)+'">'; - html += '<div id="private">'; - html += '<ul id="found_versions">'; - html += '</ul>'; - html += '</div>'; - html += '<input type="button" value="'+ t('files_versions', 'More versions...') + '" name="show-more-versions" id="show-more-versions" style="display: none;" />'; - - if (filename) { - fileEl = fileList.findFileEl(filename); - fileEl.addClass('mouseOver'); - $(html).appendTo(fileEl.find('td.filename')); - } else { - $(html).appendTo($('thead .share')); - } - - getVersions(start); - start = start + 5; - - $("#show-more-versions").click(function() { - //get more versions - getVersions(start); - start = start + 5; - }); - - function getVersions(start) { - $.ajax({ - type: 'GET', - url: OC.filePath('files_versions', 'ajax', 'getVersions.php'), - dataType: 'json', - data: {source: files, start: start}, - async: false, - success: function(result) { - var versions = result.data.versions; - if (result.data.endReached === true) { - $("#show-more-versions").css("display", "none"); - } else { - $("#show-more-versions").css("display", "block"); - } - if (versions) { - $.each(versions, function(index, row) { - addVersion(row); - }); - } else { - $('<div style="text-align:center;">'+ t('files_versions', 'No other versions available') + '</div>').appendTo('#dropdown'); - } - $('#found_versions').change(function() { - var revision = parseInt($(this).val()); - revertFile(files, revision); - }); - } - }); - } - - function addVersion( revision ) { - var title = formatDate(revision.version*1000); - var name ='<span class="versionDate" title="' + title + '">' + revision.humanReadableTimestamp + '</span>'; - - var path = OC.filePath('files_versions', '', 'download.php'); - - var preview = '<img class="preview" src="'+revision.preview+'"/>'; - - var download ='<a href="' + path + "?file=" + encodeURIComponent(files) + '&revision=' + revision.version + '">'; - download+='<img'; - download+=' src="' + OC.imagePath('core', 'actions/download') + '"'; - download+=' name="downloadVersion" />'; - download+=name; - download+='</a>'; - - var revert='<span class="revertVersion"'; - revert+=' id="' + revision.version + '">'; - revert+='<img'; - revert+=' src="' + OC.imagePath('core', 'actions/history') + '"'; - revert+=' name="revertVersion"'; - revert+='/>'+t('files_versions', 'Restore')+'</span>'; - - var version=$('<li/>'); - version.attr('value', revision.version); - version.html(preview + download + revert); - // add file here for proper name escaping - version.find('span.revertVersion').attr('value', files); - - version.appendTo('#found_versions'); - } - - $('#dropdown').slideDown(1000); -} - -$(this).click( - function(event) { - if ($('#dropdown').has(event.target).length === 0 && $('#dropdown').hasClass('drop-versions')) { - $('#dropdown').slideUp(OC.menuSpeed, function() { - $('#dropdown').remove(); - $('tr').removeClass('mouseOver'); - }); - } - - - } -); diff --git a/apps/files_versions/js/versionstabview.js b/apps/files_versions/js/versionstabview.js new file mode 100644 index 00000000000..1f84428e616 --- /dev/null +++ b/apps/files_versions/js/versionstabview.js @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ + +(function() { + var TEMPLATE_ITEM = + '<li data-revision="{{timestamp}}">' + + '<img class="preview" src="{{previewUrl}}"/>' + + '<a href="{{downloadUrl}}" class="downloadVersion"><img src="{{downloadIconUrl}}" />' + + '<span class="versiondate has-tooltip" title="{{formattedTimestamp}}">{{relativeTimestamp}}</span>' + + '</a>' + + '<a href="#" class="revertVersion"><img src="{{revertIconUrl}}" />{{revertLabel}}</a>' + + '</li>'; + + var TEMPLATE = + '<ul class="versions"></ul>' + + '<div class="clear-float"></div>' + + '<div class="empty hidden">{{emptyResultLabel}}</div>' + + '<input type="button" class="showMoreVersions hidden" value="{{moreVersionsLabel}}"' + + ' name="show-more-versions" id="show-more-versions" />' + + '<div class="loading hidden" style="height: 50px"></div>'; + + /** + * @memberof OCA.Versions + */ + var VersionsTabView = OCA.Files.DetailTabView.extend( + /** @lends OCA.Versions.VersionsTabView.prototype */ { + id: 'versionsTabView', + className: 'tab versionsTabView', + + _template: null, + + $versionsContainer: null, + + events: { + 'click .revertVersion': '_onClickRevertVersion', + 'click .showMoreVersions': '_onClickShowMoreVersions' + }, + + initialize: function() { + this.collection = new OCA.Versions.VersionCollection(); + this.collection.on('request', this._onRequest, this); + this.collection.on('sync', this._onEndRequest, this); + this.collection.on('update', this._onUpdate, this); + this.collection.on('error', this._onError, this); + this.collection.on('add', this._onAddModel, this); + }, + + getLabel: function() { + return t('files_versions', 'Versions'); + }, + + nextPage: function() { + if (this._loading || !this.collection.hasMoreResults()) { + return; + } + + if (this.collection.getFileInfo() && this.collection.getFileInfo().isDirectory()) { + return; + } + this.collection.fetchNext(); + }, + + _onClickShowMoreVersions: function(ev) { + ev.preventDefault(); + this.nextPage(); + }, + + _onClickRevertVersion: function(ev) { + var self = this; + var $target = $(ev.target); + var fileInfoModel = this.collection.getFileInfo(); + var revision; + if (!$target.is('li')) { + $target = $target.closest('li'); + } + + ev.preventDefault(); + revision = $target.attr('data-revision'); + + var versionModel = this.collection.get(revision); + versionModel.revert({ + success: function() { + // reset and re-fetch the updated collection + self.collection.setFileInfo(fileInfoModel); + self.collection.fetch(); + + // update original model + fileInfoModel.trigger('busy', fileInfoModel, false); + fileInfoModel.set({ + size: versionModel.get('size'), + mtime: versionModel.get('timestamp') * 1000, + // temp dummy, until we can do a PROPFIND + etag: versionModel.get('id') + versionModel.get('timestamp') + }); + }, + + error: function() { + OC.Notification.showTemporary( + t('files_version', 'Failed to revert {file} to revision {timestamp}.', { + file: versionModel.getFullPath(), + timestamp: OC.Util.formatDate(versionModel.get('timestamp') * 1000) + }) + ); + } + }); + + // spinner + this._toggleLoading(true); + fileInfoModel.trigger('busy', fileInfoModel, true); + }, + + _toggleLoading: function(state) { + this._loading = state; + this.$el.find('.loading').toggleClass('hidden', !state); + }, + + _onRequest: function() { + this._toggleLoading(true); + this.$el.find('.showMoreVersions').addClass('hidden'); + }, + + _onEndRequest: function() { + this._toggleLoading(false); + this.$el.find('.empty').toggleClass('hidden', !!this.collection.length); + this.$el.find('.showMoreVersions').toggleClass('hidden', !this.collection.hasMoreResults()); + }, + + _onAddModel: function(model) { + this.$versionsContainer.append(this.itemTemplate(this._formatItem(model))); + }, + + template: function(data) { + if (!this._template) { + this._template = Handlebars.compile(TEMPLATE); + } + + return this._template(data); + }, + + itemTemplate: function(data) { + if (!this._itemTemplate) { + this._itemTemplate = Handlebars.compile(TEMPLATE_ITEM); + } + + return this._itemTemplate(data); + }, + + setFileInfo: function(fileInfo) { + if (fileInfo) { + this.render(); + this.collection.setFileInfo(fileInfo); + this.collection.reset({silent: true}); + this.nextPage(); + } else { + this.render(); + this.collection.reset(); + } + }, + + _formatItem: function(version) { + var timestamp = version.get('timestamp') * 1000; + return _.extend({ + formattedTimestamp: OC.Util.formatDate(timestamp), + relativeTimestamp: OC.Util.relativeModifiedDate(timestamp), + downloadUrl: version.getDownloadUrl(), + downloadIconUrl: OC.imagePath('core', 'actions/download'), + revertIconUrl: OC.imagePath('core', 'actions/history'), + previewUrl: version.getPreviewUrl(), + revertLabel: t('files_versions', 'Restore'), + }, version.attributes); + }, + + /** + * Renders this details view + */ + render: function() { + this.$el.html(this.template({ + emptyResultLabel: t('files_versions', 'No other versions available'), + moreVersionsLabel: t('files_versions', 'More versions...') + })); + this.$el.find('.has-tooltip').tooltip(); + this.$versionsContainer = this.$el.find('ul.versions'); + this.delegateEvents(); + } + }); + + OCA.Versions = OCA.Versions || {}; + + OCA.Versions.VersionsTabView = VersionsTabView; +})(); + diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php index ccd89a4a14f..5ef2cc3c7d0 100644 --- a/apps/files_versions/lib/hooks.php +++ b/apps/files_versions/lib/hooks.php @@ -43,6 +43,9 @@ class Hooks { \OCP\Util::connectHook('OC_Filesystem', 'post_copy', 'OCA\Files_Versions\Hooks', 'copy_hook'); \OCP\Util::connectHook('OC_Filesystem', 'rename', 'OCA\Files_Versions\Hooks', 'pre_renameOrCopy_hook'); \OCP\Util::connectHook('OC_Filesystem', 'copy', 'OCA\Files_Versions\Hooks', 'pre_renameOrCopy_hook'); + + $eventDispatcher = \OC::$server->getEventDispatcher(); + $eventDispatcher->addListener('OCA\Files::loadAdditionalScripts', ['OCA\Files_Versions\Hooks', 'onLoadFilesAppScripts']); } /** @@ -154,4 +157,13 @@ class Hooks { } } + /** + * Load additional scripts when the files app is visible + */ + public static function onLoadFilesAppScripts() { + \OCP\Util::addScript('files_versions', 'versionmodel'); + \OCP\Util::addScript('files_versions', 'versioncollection'); + \OCP\Util::addScript('files_versions', 'versionstabview'); + \OCP\Util::addScript('files_versions', 'filesplugin'); + } } diff --git a/apps/files_versions/tests/js/versioncollectionSpec.js b/apps/files_versions/tests/js/versioncollectionSpec.js new file mode 100644 index 00000000000..87065fa1d36 --- /dev/null +++ b/apps/files_versions/tests/js/versioncollectionSpec.js @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ +describe('OCA.Versions.VersionCollection', function() { + var VersionCollection = OCA.Versions.VersionCollection; + var collection, fileInfoModel; + + beforeEach(function() { + fileInfoModel = new OCA.Files.FileInfoModel({ + path: '/subdir', + name: 'some file.txt' + }); + collection = new VersionCollection(); + collection.setFileInfo(fileInfoModel); + }); + it('fetches the next page', function() { + collection.fetchNext(); + + expect(fakeServer.requests.length).toEqual(1); + expect(fakeServer.requests[0].url).toEqual( + OC.generateUrl('apps/files_versions/ajax/getVersions.php') + + '?source=%2Fsubdir%2Fsome%20file.txt&start=0' + ); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + data: { + endReached: false, + versions: [{ + version: 10000000, + size: 123, + name: 'some file.txt', + fullPath: '/subdir/some file.txt' + },{ + version: 15000000, + size: 150, + name: 'some file.txt', + path: '/subdir/some file.txt' + }] + } + }) + ); + + expect(collection.length).toEqual(2); + expect(collection.hasMoreResults()).toEqual(true); + + collection.fetchNext(); + + expect(fakeServer.requests.length).toEqual(2); + expect(fakeServer.requests[1].url).toEqual( + OC.generateUrl('apps/files_versions/ajax/getVersions.php') + + '?source=%2Fsubdir%2Fsome%20file.txt&start=2' + ); + fakeServer.requests[1].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + data: { + endReached: true, + versions: [{ + version: 18000000, + size: 123, + name: 'some file.txt', + path: '/subdir/some file.txt' + }] + } + }) + ); + + expect(collection.length).toEqual(3); + expect(collection.hasMoreResults()).toEqual(false); + + collection.fetchNext(); + + // no further requests + expect(fakeServer.requests.length).toEqual(2); + }); + it('properly parses the results', function() { + collection.fetchNext(); + + expect(fakeServer.requests.length).toEqual(1); + expect(fakeServer.requests[0].url).toEqual( + OC.generateUrl('apps/files_versions/ajax/getVersions.php') + + '?source=%2Fsubdir%2Fsome%20file.txt&start=0' + ); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + data: { + endReached: false, + versions: [{ + version: 10000000, + size: 123, + name: 'some file.txt', + path: '/subdir/some file.txt' + },{ + version: 15000000, + size: 150, + name: 'some file.txt', + path: '/subdir/some file.txt' + }] + } + }) + ); + + expect(collection.length).toEqual(2); + + var model = collection.at(0); + expect(model.get('id')).toEqual(10000000); + expect(model.get('timestamp')).toEqual(10000000); + expect(model.get('name')).toEqual('some file.txt'); + expect(model.get('fullPath')).toEqual('/subdir/some file.txt'); + expect(model.get('size')).toEqual(123); + + model = collection.at(1); + expect(model.get('id')).toEqual(15000000); + expect(model.get('timestamp')).toEqual(15000000); + expect(model.get('name')).toEqual('some file.txt'); + expect(model.get('fullPath')).toEqual('/subdir/some file.txt'); + expect(model.get('size')).toEqual(150); + }); + it('resets page counted when setting a new file info model', function() { + collection.fetchNext(); + + expect(fakeServer.requests.length).toEqual(1); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + data: { + endReached: true, + versions: [{ + version: 18000000, + size: 123, + name: 'some file.txt', + path: '/subdir/some file.txt' + }] + } + }) + ); + + expect(collection.hasMoreResults()).toEqual(false); + + collection.setFileInfo(fileInfoModel); + + expect(collection.hasMoreResults()).toEqual(true); + }); +}); + diff --git a/apps/files_versions/tests/js/versionmodelSpec.js b/apps/files_versions/tests/js/versionmodelSpec.js new file mode 100644 index 00000000000..0f1c06581d5 --- /dev/null +++ b/apps/files_versions/tests/js/versionmodelSpec.js @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ +describe('OCA.Versions.VersionModel', function() { + var VersionModel = OCA.Versions.VersionModel; + var model; + + beforeEach(function() { + model = new VersionModel({ + id: 10000000, + timestamp: 10000000, + fullPath: '/subdir/some file.txt', + name: 'some file.txt', + size: 150 + }); + }); + + it('returns the full path', function() { + expect(model.getFullPath()).toEqual('/subdir/some file.txt'); + }); + it('returns the preview url', function() { + expect(model.getPreviewUrl()) + .toEqual(OC.generateUrl('/apps/files_versions/preview') + + '?file=%2Fsubdir%2Fsome%20file.txt&version=10000000' + ); + }); + it('returns the download url', function() { + expect(model.getDownloadUrl()) + .toEqual(OC.generateUrl('/apps/files_versions/download.php') + + '?file=%2Fsubdir%2Fsome%20file.txt&revision=10000000' + ); + }); + describe('reverting', function() { + var revertEventStub; + var successStub; + var errorStub; + + beforeEach(function() { + revertEventStub = sinon.stub(); + errorStub = sinon.stub(); + successStub = sinon.stub(); + + model.on('revert', revertEventStub); + model.on('error', errorStub); + }); + it('tells the server to revert when calling the revert method', function() { + model.revert({ + success: successStub + }); + + expect(fakeServer.requests.length).toEqual(1); + expect(fakeServer.requests[0].url) + .toEqual( + OC.generateUrl('/apps/files_versions/ajax/rollbackVersion.php') + + '?file=%2Fsubdir%2Fsome+file.txt&revision=10000000' + ); + + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'success', + }) + ); + + expect(revertEventStub.calledOnce).toEqual(true); + expect(successStub.calledOnce).toEqual(true); + expect(errorStub.notCalled).toEqual(true); + }); + it('triggers error event when server returns a failure', function() { + model.revert({ + success: successStub + }); + + expect(fakeServer.requests.length).toEqual(1); + fakeServer.requests[0].respond( + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({ + status: 'error', + }) + ); + + expect(revertEventStub.notCalled).toEqual(true); + expect(successStub.notCalled).toEqual(true); + expect(errorStub.calledOnce).toEqual(true); + }); + }); +}); + diff --git a/apps/files_versions/tests/js/versionstabviewSpec.js b/apps/files_versions/tests/js/versionstabviewSpec.js new file mode 100644 index 00000000000..4435f38ef7e --- /dev/null +++ b/apps/files_versions/tests/js/versionstabviewSpec.js @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2015 + * + * This file is licensed under the Affero General Public License version 3 + * or later. + * + * See the COPYING-README file. + * + */ +describe('OCA.Versions.VersionsTabView', function() { + var VersionCollection = OCA.Versions.VersionCollection; + var VersionModel = OCA.Versions.VersionModel; + var VersionsTabView = OCA.Versions.VersionsTabView; + + var fetchStub, fileInfoModel, tabView, testVersions, clock; + + beforeEach(function() { + clock = sinon.useFakeTimers(Date.UTC(2015, 6, 17, 1, 2, 0, 3)); + var time1 = Date.UTC(2015, 6, 17, 1, 2, 0, 3) / 1000; + var time2 = Date.UTC(2015, 6, 15, 1, 2, 0, 3) / 1000; + + var version1 = new VersionModel({ + id: time1, + timestamp: time1, + name: 'some file.txt', + size: 140, + fullPath: '/subdir/some file.txt' + }); + var version2 = new VersionModel({ + id: time2, + timestamp: time2, + name: 'some file.txt', + size: 150, + fullPath: '/subdir/some file.txt' + }); + + testVersions = [version1, version2]; + + fetchStub = sinon.stub(VersionCollection.prototype, 'fetch'); + fileInfoModel = new OCA.Files.FileInfoModel({ + id: 123, + name: 'test.txt' + }); + tabView = new VersionsTabView(); + tabView.render(); + }); + + afterEach(function() { + fetchStub.restore(); + tabView.remove(); + clock.restore(); + }); + + describe('rendering', function() { + it('reloads matching versions when setting file info model', function() { + tabView.setFileInfo(fileInfoModel); + expect(fetchStub.calledOnce).toEqual(true); + }); + + it('renders loading icon while fetching versions', function() { + tabView.setFileInfo(fileInfoModel); + tabView.collection.trigger('request'); + + expect(tabView.$el.find('.loading').length).toEqual(1); + expect(tabView.$el.find('.versions li').length).toEqual(0); + }); + + it('renders versions', function() { + + tabView.setFileInfo(fileInfoModel); + tabView.collection.set(testVersions); + + var version1 = testVersions[0]; + var version2 = testVersions[1]; + var $versions = tabView.$el.find('.versions>li'); + expect($versions.length).toEqual(2); + var $item = $versions.eq(0); + expect($item.find('.downloadVersion').attr('href')).toEqual(version1.getDownloadUrl()); + expect($item.find('.versiondate').text()).toEqual('a few seconds ago'); + expect($item.find('.revertVersion').length).toEqual(1); + expect($item.find('.preview').attr('src')).toEqual(version1.getPreviewUrl()); + + $item = $versions.eq(1); + expect($item.find('.downloadVersion').attr('href')).toEqual(version2.getDownloadUrl()); + expect($item.find('.versiondate').text()).toEqual('2 days ago'); + expect($item.find('.revertVersion').length).toEqual(1); + expect($item.find('.preview').attr('src')).toEqual(version2.getPreviewUrl()); + }); + }); + + describe('More versions', function() { + var hasMoreResultsStub; + + beforeEach(function() { + tabView.collection.set(testVersions); + hasMoreResultsStub = sinon.stub(VersionCollection.prototype, 'hasMoreResults'); + }); + afterEach(function() { + hasMoreResultsStub.restore(); + }); + + it('shows "More versions" button when more versions are available', function() { + hasMoreResultsStub.returns(true); + tabView.collection.trigger('sync'); + + expect(tabView.$el.find('.showMoreVersions').hasClass('hidden')).toEqual(false); + }); + it('does not show "More versions" button when more versions are available', function() { + hasMoreResultsStub.returns(false); + tabView.collection.trigger('sync'); + + expect(tabView.$el.find('.showMoreVersions').hasClass('hidden')).toEqual(true); + }); + it('fetches and appends the next page when clicking the "More" button', function() { + hasMoreResultsStub.returns(true); + + expect(fetchStub.notCalled).toEqual(true); + + tabView.$el.find('.showMoreVersions').click(); + + expect(fetchStub.calledOnce).toEqual(true); + }); + it('appends version to the list when added to collection', function() { + var time3 = Date.UTC(2015, 6, 10, 1, 0, 0, 0) / 1000; + + var version3 = new VersionModel({ + id: time3, + timestamp: time3, + name: 'some file.txt', + size: 54, + fullPath: '/subdir/some file.txt' + }); + + tabView.collection.add(version3); + + expect(tabView.$el.find('.versions>li').length).toEqual(3); + + var $item = tabView.$el.find('.versions>li').eq(2); + expect($item.find('.downloadVersion').attr('href')).toEqual(version3.getDownloadUrl()); + expect($item.find('.versiondate').text()).toEqual('7 days ago'); + expect($item.find('.revertVersion').length).toEqual(1); + expect($item.find('.preview').attr('src')).toEqual(version3.getPreviewUrl()); + }); + }); + + describe('Reverting', function() { + var revertStub; + + beforeEach(function() { + revertStub = sinon.stub(VersionModel.prototype, 'revert'); + tabView.setFileInfo(fileInfoModel); + tabView.collection.set(testVersions); + }); + + afterEach(function() { + revertStub.restore(); + }); + + it('tells the model to revert when clicking "Revert"', function() { + tabView.$el.find('.revertVersion').eq(1).click(); + + expect(revertStub.calledOnce).toEqual(true); + }); + it('triggers busy state during revert', function() { + var busyStub = sinon.stub(); + fileInfoModel.on('busy', busyStub); + + tabView.$el.find('.revertVersion').eq(1).click(); + + expect(busyStub.calledOnce).toEqual(true); + expect(busyStub.calledWith(fileInfoModel, true)).toEqual(true); + + busyStub.reset(); + revertStub.getCall(0).args[0].success(); + + expect(busyStub.calledOnce).toEqual(true); + expect(busyStub.calledWith(fileInfoModel, false)).toEqual(true); + }); + it('updates the file info model with the information from the reverted revision', function() { + var changeStub = sinon.stub(); + fileInfoModel.on('change', changeStub); + + tabView.$el.find('.revertVersion').eq(1).click(); + + expect(changeStub.notCalled).toEqual(true); + + revertStub.getCall(0).args[0].success(); + + expect(changeStub.calledOnce).toEqual(true); + var changes = changeStub.getCall(0).args[0].changed; + expect(changes.size).toEqual(150); + expect(changes.mtime).toEqual(testVersions[1].get('timestamp') * 1000); + expect(changes.etag).toBeDefined(); + }); + it('shows notification on revert error', function() { + var notificationStub = sinon.stub(OC.Notification, 'showTemporary'); + + tabView.$el.find('.revertVersion').eq(1).click(); + + revertStub.getCall(0).args[0].error(); + + expect(notificationStub.calledOnce).toEqual(true); + + notificationStub.restore(); + }); + }); +}); + diff --git a/apps/provisioning_api/lib/apps.php b/apps/provisioning_api/lib/apps.php index 168f6f3cad8..80f6e7049c6 100644 --- a/apps/provisioning_api/lib/apps.php +++ b/apps/provisioning_api/lib/apps.php @@ -31,13 +31,20 @@ class Apps { /** @var \OCP\App\IAppManager */ private $appManager; + /** + * @param \OCP\App\IAppManager $appManager + */ public function __construct(\OCP\App\IAppManager $appManager) { $this->appManager = $appManager; } - public function getApps($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function getApps($parameters) { $apps = OC_App::listAllApps(); - $list = array(); + $list = []; foreach($apps as $app) { $list[] = $app['id']; } @@ -62,7 +69,11 @@ class Apps { } } - public function getAppInfo($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function getAppInfo($parameters) { $app = $parameters['appid']; $info = \OCP\App::getAppInfo($app); if(!is_null($info)) { @@ -72,13 +83,21 @@ class Apps { } } - public function enable($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function enable($parameters) { $app = $parameters['appid']; $this->appManager->enableApp($app); return new OC_OCS_Result(null, 100); } - public function disable($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function disable($parameters) { $app = $parameters['appid']; $this->appManager->disableApp($app); return new OC_OCS_Result(null, 100); diff --git a/apps/provisioning_api/lib/groups.php b/apps/provisioning_api/lib/groups.php index 91d0a1c6342..c6fbe12b34e 100644 --- a/apps/provisioning_api/lib/groups.php +++ b/apps/provisioning_api/lib/groups.php @@ -25,6 +25,8 @@ namespace OCA\Provisioning_API; use \OC_OCS_Result; use \OC_SubAdmin; +use OCP\IGroup; +use OCP\IUser; class Groups{ @@ -39,21 +41,25 @@ class Groups{ * @param \OCP\IUserSession $userSession */ public function __construct(\OCP\IGroupManager $groupManager, - \OCP\IUserSession $userSession) { + \OCP\IUserSession $userSession) { $this->groupManager = $groupManager; $this->userSession = $userSession; } /** * returns a list of groups + * + * @param array $parameters + * @return OC_OCS_Result */ - public function getGroups($parameters){ + public function getGroups($parameters) { $search = !empty($_GET['search']) ? $_GET['search'] : ''; $limit = !empty($_GET['limit']) ? $_GET['limit'] : null; $offset = !empty($_GET['offset']) ? $_GET['offset'] : null; $groups = $this->groupManager->search($search, $limit, $offset); $groups = array_map(function($group) { + /** @var IGroup $group */ return $group->getGID(); }, $groups); @@ -62,6 +68,9 @@ class Groups{ /** * returns an array of users in the group specified + * + * @param array $parameters + * @return OC_OCS_Result */ public function getGroup($parameters) { // Check if user is logged in @@ -71,7 +80,7 @@ class Groups{ } // Check the group exists - if(!$this->groupManager->groupExists($parameters['groupid'])){ + if(!$this->groupManager->groupExists($parameters['groupid'])) { return new OC_OCS_Result(null, \OCP\API::RESPOND_NOT_FOUND, 'The requested group could not be found'); } // Check subadmin has access to this group @@ -79,6 +88,7 @@ class Groups{ || in_array($parameters['groupid'], \OC_SubAdmin::getSubAdminsGroups($user->getUID()))){ $users = $this->groupManager->get($parameters['groupid'])->getUsers(); $users = array_map(function($user) { + /** @var IUser $user */ return $user->getUID(); }, $users); $users = array_values($users); @@ -90,23 +100,30 @@ class Groups{ /** * creates a new group + * + * @param array $parameters + * @return OC_OCS_Result */ - public function addGroup($parameters){ + public function addGroup($parameters) { // Validate name - $groupid = isset($_POST['groupid']) ? $_POST['groupid'] : ''; - if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $groupid ) || empty($groupid)){ + $groupId = isset($_POST['groupid']) ? $_POST['groupid'] : ''; + if( preg_match( '/[^a-zA-Z0-9 _\.@\-]/', $groupId ) || empty($groupId)){ \OCP\Util::writeLog('provisioning_api', 'Attempt made to create group using invalid characters.', \OCP\Util::ERROR); return new OC_OCS_Result(null, 101, 'Invalid group name'); } // Check if it exists - if($this->groupManager->groupExists($groupid)){ + if($this->groupManager->groupExists($groupId)){ return new OC_OCS_Result(null, 102); } - $this->groupManager->createGroup($groupid); + $this->groupManager->createGroup($groupId); return new OC_OCS_Result(null, 100); } - public function deleteGroup($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function deleteGroup($parameters) { // Check it exists if(!$this->groupManager->groupExists($parameters['groupid'])){ return new OC_OCS_Result(null, 101); @@ -118,6 +135,10 @@ class Groups{ } } + /** + * @param array $parameters + * @return OC_OCS_Result + */ public function getSubAdminsOfGroup($parameters) { $group = $parameters['groupid']; // Check group exists diff --git a/apps/provisioning_api/lib/users.php b/apps/provisioning_api/lib/users.php index f5b201a55ea..617e50b403e 100644 --- a/apps/provisioning_api/lib/users.php +++ b/apps/provisioning_api/lib/users.php @@ -48,10 +48,10 @@ class Users { * @param \OCP\IUserManager $userManager * @param \OCP\IConfig $config * @param \OCP\IGroupManager $groupManager - * @param \OCP\IUserSession $user + * @param \OCP\IUserSession $userSession */ public function __construct(\OCP\IUserManager $userManager, - \OCP\IConfig $config, + \OCP\IConfig $config, \OCP\IGroupManager $groupManager, \OCP\IUserSession $userSession) { $this->userManager = $userManager; @@ -62,8 +62,10 @@ class Users { /** * returns a list of users + * + * @return OC_OCS_Result */ - public function getUsers(){ + public function getUsers() { $search = !empty($_GET['search']) ? $_GET['search'] : ''; $limit = !empty($_GET['limit']) ? $_GET['limit'] : null; $offset = !empty($_GET['offset']) ? $_GET['offset'] : null; @@ -76,7 +78,10 @@ class Users { ]); } - public function addUser(){ + /** + * @return OC_OCS_Result + */ + public function addUser() { $userId = isset($_POST['userid']) ? $_POST['userid'] : null; $password = isset($_POST['password']) ? $_POST['password'] : null; if($this->userManager->userExists($userId)) { @@ -96,6 +101,9 @@ class Users { /** * gets user info + * + * @param array $parameters + * @return OC_OCS_Result */ public function getUser($parameters){ $userId = $parameters['userid']; @@ -150,8 +158,11 @@ class Users { /** * edit users + * + * @param array $parameters + * @return OC_OCS_Result */ - public function editUser($parameters){ + public function editUser($parameters) { $userId = $parameters['userid']; // Check if user is logged in @@ -230,7 +241,11 @@ class Users { return new OC_OCS_Result(null, 100); } - public function deleteUser($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function deleteUser($parameters) { // Check if user is logged in $user = $this->userSession->getUser(); if ($user === null) { @@ -253,6 +268,10 @@ class Users { } } + /** + * @param array $parameters + * @return OC_OCS_Result + */ public function getUsersGroups($parameters) { // Check if user is logged in $user = $this->userSession->getUser(); @@ -286,7 +305,11 @@ class Users { } - public function addToGroup($parameters){ + /** + * @param array $parameters + * @return OC_OCS_Result + */ + public function addToGroup($parameters) { // Check if user is logged in $user = $this->userSession->getUser(); if ($user === null) { @@ -317,6 +340,10 @@ class Users { return new OC_OCS_Result(null, 100); } + /** + * @param array $parameters + * @return OC_OCS_Result + */ public function removeFromGroup($parameters) { // Check if user is logged in $user = $this->userSession->getUser(); @@ -362,6 +389,9 @@ class Users { /** * Creates a subadmin + * + * @param array $parameters + * @return OC_OCS_Result */ public function addSubAdmin($parameters) { $group = $_POST['groupid']; @@ -393,6 +423,9 @@ class Users { /** * Removes a subadmin from a group + * + * @param array $parameters + * @return OC_OCS_Result */ public function removeSubAdmin($parameters) { $group = $parameters['_delete']['groupid']; @@ -414,7 +447,10 @@ class Users { } /** - * @Get the groups a user is a subadmin of + * Get the groups a user is a subadmin of + * + * @param array $parameters + * @return OC_OCS_Result */ public function getUserSubAdminGroups($parameters) { $user = $parameters['userid']; @@ -431,8 +467,8 @@ class Users { } /** - * @param $userId - * @param $data + * @param string $userId + * @param array $data * @return mixed * @throws \OCP\Files\NotFoundException */ diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php index 68fd1b698e0..60c2accdccb 100644 --- a/apps/user_ldap/appinfo/app.php +++ b/apps/user_ldap/appinfo/app.php @@ -59,9 +59,6 @@ if(count($configPrefixes) > 0) { OC_Group::useBackend($groupBackend); } -OCP\Backgroundjob::registerJob('OCA\user_ldap\lib\Jobs'); -OCP\Backgroundjob::registerJob('\OCA\User_LDAP\Jobs\CleanUp'); - \OCP\Util::connectHook( '\OCA\Files_Sharing\API\Server2Server', 'preLoginNameUsedAsUserName', diff --git a/apps/user_ldap/appinfo/install.php b/apps/user_ldap/appinfo/install.php index 0b3f84b8baf..f70eb746480 100644 --- a/apps/user_ldap/appinfo/install.php +++ b/apps/user_ldap/appinfo/install.php @@ -23,3 +23,6 @@ $state = OCP\Config::getSystemValue('ldapIgnoreNamingRules', 'doSet'); if($state === 'doSet') { OCP\Config::setSystemValue('ldapIgnoreNamingRules', false); } + +OCP\Backgroundjob::registerJob('OCA\user_ldap\lib\Jobs'); +OCP\Backgroundjob::registerJob('\OCA\User_LDAP\Jobs\CleanUp'); diff --git a/apps/user_ldap/appinfo/update.php b/apps/user_ldap/appinfo/update.php index 4907db0cdae..33a7219644b 100644 --- a/apps/user_ldap/appinfo/update.php +++ b/apps/user_ldap/appinfo/update.php @@ -34,3 +34,6 @@ if(version_compare($installedVersion, '0.6.2', '<')) { \OC::$server->getConfig()->deleteAppValue('user_ldap', $prefix . "ldap_nocase"); } } + +OCP\Backgroundjob::registerJob('OCA\user_ldap\lib\Jobs'); +OCP\Backgroundjob::registerJob('\OCA\User_LDAP\Jobs\CleanUp'); diff --git a/apps/user_ldap/appinfo/version b/apps/user_ldap/appinfo/version index b6160487433..844f6a91acb 100644 --- a/apps/user_ldap/appinfo/version +++ b/apps/user_ldap/appinfo/version @@ -1 +1 @@ -0.6.2 +0.6.3 diff --git a/apps/user_ldap/l10n/tr.js b/apps/user_ldap/l10n/tr.js index 8a4e0cad033..944d39928d0 100644 --- a/apps/user_ldap/l10n/tr.js +++ b/apps/user_ldap/l10n/tr.js @@ -32,11 +32,20 @@ OC.L10N.register( "Mappings cleared successfully!" : "Eşleştirmeler başarıyla temizlendi!", "Error while clearing the mappings." : "Eşleşmeler temizlenirken hata.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve Parola sağlayın.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP İşlem hatası. Anonim bağlamaya izin verilmiyor.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Kaydetme başarısız oldu. Veritabanının işlemde olduğundan emin olun. Devam etmeden yeniden yükleyin.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Kipi değiştirmek otomatik LDAP sorgularını etkinleştirecektir. LDAP'ınızın boyutlarına göre bu bir süre alacaktır. Kipi yine de değiştirmek istiyor musunuz?", "Mode switch" : "Kip değişimi", "Select attributes" : "Nitelikleri seç", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Kullanıcı bulunamadı. Lütfen oturum açtığınız nitelikleri ve kullanıcı adını kontrol edin. Etkili filtre (komut satırı doğrulaması için kopyala-yapıştır için): <br/>", + "User found and settings verified." : "Kullanıcı bulundu ve ayarlar doğrulandı.", "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin.", "An unspecified error occurred. Please check the settings and the log." : "Belirtilmeyen bir hata oluştu. Lütfen ayarları ve günlüğü denetleyin.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Arama filtresi, eşleşmeyen parantez sayısı sebebiyle oluşabilen sözdizimi sorunlarından dolayı geçersiz. Lütfen gözden geçirin.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD için bir bağlantı hatası oluştu, lütfen istemci, port ve kimlik bilgilerini kontrol edin.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "%uid yer tutucusu eksik. LDAP / AD sorgularında kullanıcı adı ile değiştirilecek.", + "Please provide a login name to test against" : "Lütfen deneme için kullanılacak bir kullanıcı adı girin", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP / AD sunucusu memberOf desteklemediğinden grup kutusu kapatıldı.", "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.", @@ -60,6 +69,9 @@ OC.L10N.register( "Verify settings and count groups" : "Ayarları doğrula ve grupları say", "When logging in, %s will find the user based on the following attributes:" : "Oturum açılırken, %s, aşağıdaki özniteliklere bağlı kullanıcıyı bulacak:", "LDAP / AD Username:" : "LDAP / AD Kullanıcı Adı:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "LDAP / AD kullanıcı adı ile oturum açmaya izin verir.", + "LDAP / AD Email Address:" : "LDAP / AD Eposta Adresi:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Bir eposta kimliği ile oturum açmaya izin verir. Mail ve mailPrimaryAddress'e izin verilir.", "Other Attributes:" : "Diğer Nitelikler:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Oturum açma girişimi olduğunda uygulanacak filtreyi tanımlar. %%uid, oturum işleminde kullanıcı adı ile değiştirilir. Örneğin: \"uid=%%uid\"", "Test Loginname" : "Oturum açma adını sına", diff --git a/apps/user_ldap/l10n/tr.json b/apps/user_ldap/l10n/tr.json index f3641a9a16d..553dfe6cdbd 100644 --- a/apps/user_ldap/l10n/tr.json +++ b/apps/user_ldap/l10n/tr.json @@ -30,11 +30,20 @@ "Mappings cleared successfully!" : "Eşleştirmeler başarıyla temizlendi!", "Error while clearing the mappings." : "Eşleşmeler temizlenirken hata.", "Anonymous bind is not allowed. Please provide a User DN and Password." : "Anonim atamaya izin verilmiyor. Lütfen bir Kullanıcı DN ve Parola sağlayın.", + "LDAP Operations error. Anonymous bind might not be allowed." : "LDAP İşlem hatası. Anonim bağlamaya izin verilmiyor.", + "Saving failed. Please make sure the database is in Operation. Reload before continuing." : "Kaydetme başarısız oldu. Veritabanının işlemde olduğundan emin olun. Devam etmeden yeniden yükleyin.", + "Switching the mode will enable automatic LDAP queries. Depending on your LDAP size they may take a while. Do you still want to switch the mode?" : "Kipi değiştirmek otomatik LDAP sorgularını etkinleştirecektir. LDAP'ınızın boyutlarına göre bu bir süre alacaktır. Kipi yine de değiştirmek istiyor musunuz?", "Mode switch" : "Kip değişimi", "Select attributes" : "Nitelikleri seç", + "User not found. Please check your login attributes and username. Effective filter (to copy-and-paste for command line validation): <br/>" : "Kullanıcı bulunamadı. Lütfen oturum açtığınız nitelikleri ve kullanıcı adını kontrol edin. Etkili filtre (komut satırı doğrulaması için kopyala-yapıştır için): <br/>", + "User found and settings verified." : "Kullanıcı bulundu ve ayarlar doğrulandı.", "Settings verified, but one user found. Only the first will be able to login. Consider a more narrow filter." : "Ayarlar doğrulandı ancak tek kullanıcı bulundu. Sadece ilk kullanıcı oturum açabilecek. Lütfen daha dar bir filtre seçin.", "An unspecified error occurred. Please check the settings and the log." : "Belirtilmeyen bir hata oluştu. Lütfen ayarları ve günlüğü denetleyin.", "The search filter is invalid, probably due to syntax issues like uneven number of opened and closed brackets. Please revise." : "Arama filtresi, eşleşmeyen parantez sayısı sebebiyle oluşabilen sözdizimi sorunlarından dolayı geçersiz. Lütfen gözden geçirin.", + "A connection error to LDAP / AD occurred, please check host, port and credentials." : "LDAP / AD için bir bağlantı hatası oluştu, lütfen istemci, port ve kimlik bilgilerini kontrol edin.", + "The %uid placeholder is missing. It will be replaced with the login name when querying LDAP / AD." : "%uid yer tutucusu eksik. LDAP / AD sorgularında kullanıcı adı ile değiştirilecek.", + "Please provide a login name to test against" : "Lütfen deneme için kullanılacak bir kullanıcı adı girin", + "The group box was disabled, because the LDAP / AD server does not support memberOf." : "LDAP / AD sunucusu memberOf desteklemediğinden grup kutusu kapatıldı.", "_%s group found_::_%s groups found_" : ["%s grup bulundu","%s grup bulundu"], "_%s user found_::_%s users found_" : ["%s kullanıcı bulundu","%s kullanıcı bulundu"], "Could not detect user display name attribute. Please specify it yourself in advanced ldap settings." : "Görüntülenecek kullanıcı adı özelliği algılanamadı. Lütfen gelişmiş ldap ayarlarına girerek kendiniz belirleyin.", @@ -58,6 +67,9 @@ "Verify settings and count groups" : "Ayarları doğrula ve grupları say", "When logging in, %s will find the user based on the following attributes:" : "Oturum açılırken, %s, aşağıdaki özniteliklere bağlı kullanıcıyı bulacak:", "LDAP / AD Username:" : "LDAP / AD Kullanıcı Adı:", + "Allows login against the LDAP / AD username, which is either uid or samaccountname and will be detected." : "LDAP / AD kullanıcı adı ile oturum açmaya izin verir.", + "LDAP / AD Email Address:" : "LDAP / AD Eposta Adresi:", + "Allows login against an email attribute. Mail and mailPrimaryAddress will be allowed." : "Bir eposta kimliği ile oturum açmaya izin verir. Mail ve mailPrimaryAddress'e izin verilir.", "Other Attributes:" : "Diğer Nitelikler:", "Defines the filter to apply, when login is attempted. %%uid replaces the username in the login action. Example: \"uid=%%uid\"" : "Oturum açma girişimi olduğunda uygulanacak filtreyi tanımlar. %%uid, oturum işleminde kullanıcı adı ile değiştirilir. Örneğin: \"uid=%%uid\"", "Test Loginname" : "Oturum açma adını sına", diff --git a/apps/user_ldap/lib/connection.php b/apps/user_ldap/lib/connection.php index 6f2fdce1b5f..f6b123babd0 100644 --- a/apps/user_ldap/lib/connection.php +++ b/apps/user_ldap/lib/connection.php @@ -206,7 +206,7 @@ class Connection extends LDAPUtility { } $key = $this->getCacheKey($key); - return unserialize(base64_decode($this->cache->get($key))); + return json_decode(base64_decode($this->cache->get($key))); } /** @@ -240,7 +240,7 @@ class Connection extends LDAPUtility { return null; } $key = $this->getCacheKey($key); - $value = base64_encode(serialize($value)); + $value = base64_encode(json_encode($value)); $this->cache->set($key, $value, $this->configuration->ldapCacheTTL); } diff --git a/apps/user_ldap/lib/proxy.php b/apps/user_ldap/lib/proxy.php index ef01213990c..2a423cb0e4b 100644 --- a/apps/user_ldap/lib/proxy.php +++ b/apps/user_ldap/lib/proxy.php @@ -161,7 +161,7 @@ abstract class Proxy { } $key = $this->getCacheKey($key); - return unserialize(base64_decode($this->cache->get($key))); + return json_decode(base64_decode($this->cache->get($key))); } /** @@ -185,7 +185,7 @@ abstract class Proxy { return; } $key = $this->getCacheKey($key); - $value = base64_encode(serialize($value)); + $value = base64_encode(json_encode($value)); $this->cache->set($key, $value, '2592000'); } diff --git a/autotest-external.sh b/autotest-external.sh index 65d53aaa95d..cb5a3dad503 100755 --- a/autotest-external.sh +++ b/autotest-external.sh @@ -17,6 +17,9 @@ BASEDIR=$PWD DBCONFIGS="sqlite mysql pgsql oci" PHPUNIT=$(which phpunit) +_XDEBUG_CONFIG=$XDEBUG_CONFIG +unset XDEBUG_CONFIG + function print_syntax { echo -e "Syntax: ./autotest-external.sh [dbconfigname] [startfile]\n" >&2 echo -e "\t\"dbconfigname\" can be one of: $DBCONFIGS" >&2 @@ -159,6 +162,9 @@ EOF mkdir "coverage-external-html-$1" # just enable files_external php ../occ app:enable files_external + if [[ "$_XDEBUG_CONFIG" ]]; then + export XDEBUG_CONFIG=$_XDEBUG_CONFIG + fi if [ -z "$NOCOVERAGE" ]; then "$PHPUNIT" --configuration phpunit-autotest-external.xml --log-junit "autotest-external-results-$1.xml" --coverage-clover "autotest-external-clover-$1.xml" --coverage-html "coverage-external-html-$1" RESULT=$? diff --git a/autotest.sh b/autotest.sh index 0e112bfda32..6a09fbfabac 100755 --- a/autotest.sh +++ b/autotest.sh @@ -32,6 +32,9 @@ fi PHP=$(which "$PHP_EXE") PHPUNIT=$(which phpunit) +_XDEBUG_CONFIG=$XDEBUG_CONFIG +unset XDEBUG_CONFIG + function print_syntax { echo -e "Syntax: ./autotest.sh [dbconfigname] [testfile]\n" >&2 echo -e "\t\"dbconfigname\" can be one of: $DBCONFIGS" >&2 @@ -217,6 +220,9 @@ function execute_tests { rm -rf "coverage-html-$DB" mkdir "coverage-html-$DB" "$PHP" -f enable_all.php | grep -i -C9999 error && echo "Error during setup" && exit 101 + if [[ "$_XDEBUG_CONFIG" ]]; then + export XDEBUG_CONFIG=$_XDEBUG_CONFIG + fi if [ -z "$NOCOVERAGE" ]; then "${PHPUNIT[@]}" --configuration phpunit-autotest.xml --log-junit "autotest-results-$DB.xml" --coverage-clover "autotest-clover-$DB.xml" --coverage-html "coverage-html-$DB" "$2" "$3" RESULT=$? diff --git a/config/config.sample.php b/config/config.sample.php index 234bf8e0fa3..f5e36e66cc4 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -1053,17 +1053,15 @@ $CONFIG = array( /** * Enables transactional file locking. - * This is disabled by default as it is still beta. + * This is enabled by default. * * Prevents concurrent processes from accessing the same files * at the same time. Can help prevent side effects that would * be caused by concurrent operations. Mainly relevant for * very large installations with many users working with * shared files. - * - * WARNING: BETA quality */ -'filelocking.enabled' => false, +'filelocking.enabled' => true, /** * Memory caching backend for file locking diff --git a/core/ajax/preview.php b/core/ajax/preview.php index fc98d80eb0e..baa0ed4ec61 100644 --- a/core/ajax/preview.php +++ b/core/ajax/preview.php @@ -31,6 +31,7 @@ $maxY = array_key_exists('y', $_GET) ? (int)$_GET['y'] : '36'; $scalingUp = array_key_exists('scalingup', $_GET) ? (bool)$_GET['scalingup'] : true; $keepAspect = array_key_exists('a', $_GET) ? true : false; $always = array_key_exists('forceIcon', $_GET) ? (bool)$_GET['forceIcon'] : true; +$mode = array_key_exists('mode', $_GET) ? $_GET['mode'] : 'fill'; if ($file === '') { //400 Bad Request @@ -56,6 +57,7 @@ if (!$info instanceof OCP\Files\FileInfo || !$always && !\OC::$server->getPrevie $preview->setMaxX($maxX); $preview->setMaxY($maxY); $preview->setScalingUp($scalingUp); + $preview->setMode($mode); $preview->setKeepAspect($keepAspect); $preview->showPreview(); } diff --git a/core/command/maintenance/mimetype/updatedb.php b/core/command/maintenance/mimetype/updatedb.php new file mode 100644 index 00000000000..37c401c0338 --- /dev/null +++ b/core/command/maintenance/mimetype/updatedb.php @@ -0,0 +1,96 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + */ + +namespace OC\Core\Command\Maintenance\Mimetype; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Input\InputOption; + +use OCP\Files\IMimeTypeDetector; +use OCP\Files\IMimeTypeLoader; + +class UpdateDB extends Command { + + const DEFAULT_MIMETYPE = 'application/octet-stream'; + + /** @var IMimeTypeDetector */ + protected $mimetypeDetector; + + /** @var IMimeTypeLoader */ + protected $mimetypeLoader; + + public function __construct( + IMimeTypeDetector $mimetypeDetector, + IMimeTypeLoader $mimetypeLoader + ) { + parent::__construct(); + $this->mimetypeDetector = $mimetypeDetector; + $this->mimetypeLoader = $mimetypeLoader; + } + + protected function configure() { + $this + ->setName('maintenance:mimetype:update-db') + ->setDescription('Update database mimetypes and update filecache') + ->addOption( + 'repair-filecache', + null, + InputOption::VALUE_NONE, + 'Repair filecache for all mimetypes, not just new ones' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $mappings = $this->mimetypeDetector->getAllMappings(); + + $totalFilecacheUpdates = 0; + $totalNewMimetypes = 0; + + foreach ($mappings as $ext => $mimetypes) { + if ($ext[0] === '_') { + // comment + continue; + } + $mimetype = $mimetypes[0]; + $existing = $this->mimetypeLoader->exists($mimetype); + // this will add the mimetype if it didn't exist + $mimetypeId = $this->mimetypeLoader->getId($mimetype); + + if (!$existing) { + $output->writeln('Added mimetype "'.$mimetype.'" to database'); + $totalNewMimetypes++; + } + + if (!$existing || $input->getOption('repair-filecache')) { + $touchedFilecacheRows = $this->mimetypeLoader->updateFilecache($ext, $mimetypeId); + if ($touchedFilecacheRows > 0) { + $output->writeln('Updated '.$touchedFilecacheRows.' filecache rows for mimetype "'.$mimetype.'"'); + } + $totalFilecacheUpdates += $touchedFilecacheRows; + } + } + + $output->writeln('Added '.$totalNewMimetypes.' new mimetypes'); + $output->writeln('Updated '.$totalFilecacheUpdates.' filecache rows'); + } +} diff --git a/core/command/maintenance/mimetypesjs.php b/core/command/maintenance/mimetype/updatejs.php index 8b01f0acf79..5de75d53a3f 100644 --- a/core/command/maintenance/mimetypesjs.php +++ b/core/command/maintenance/mimetype/updatejs.php @@ -18,27 +18,35 @@ * */ -namespace OC\Core\Command\Maintenance; +namespace OC\Core\Command\Maintenance\Mimetype; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class MimeTypesJS extends Command { +use OCP\Files\IMimeTypeDetector; + +class UpdateJS extends Command { + + /** @var IMimeTypeDetector */ + protected $mimetypeDetector; + + public function __construct( + IMimeTypeDetector $mimetypeDetector + ) { + parent::__construct(); + $this->mimetypeDetector = $mimetypeDetector; + } + protected function configure() { $this - ->setName('maintenance:mimetypesjs') + ->setName('maintenance:mimetype:update-js') ->setDescription('Update mimetypelist.js'); } protected function execute(InputInterface $input, OutputInterface $output) { // Fetch all the aliases - $aliases = json_decode(file_get_contents(\OC::$SERVERROOT . '/config/mimetypealiases.dist.json'), true); - - if (file_exists(\OC::$SERVERROOT . '/config/mimetypealiases.json')) { - $custom = get_object_vars(json_decode(file_get_contents(\OC::$SERVERROOT . '/config/mimetypealiases.json'))); - $aliases = array_merge($aliases, $custom); - } + $aliases = $this->mimetypeDetector->getAllAliases(); // Remove comments $keys = array_filter(array_keys($aliases), function($k) { @@ -49,23 +57,22 @@ class MimeTypesJS extends Command { } // Fetch all files - $dir = new \DirectoryIterator(dirname(__DIR__) . '/../img/filetypes'); + $dir = new \DirectoryIterator(\OC::$SERVERROOT.'/core/img/filetypes'); $files = []; foreach($dir as $fileInfo) { - if ($fileInfo->isFile()) { - $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); - $files[] = $file; - } + if ($fileInfo->isFile()) { + $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); + $files[] = $file; + } } //Remove duplicates $files = array_values(array_unique($files)); - // Fetch all themes! $themes = []; - $dirs = new \DirectoryIterator(dirname(__DIR__) . '/../../themes/'); + $dirs = new \DirectoryIterator(\OC::$SERVERROOT.'/themes/'); foreach($dirs as $dir) { //Valid theme dir if ($dir->isFile() || $dir->isDot()) { @@ -84,7 +91,7 @@ class MimeTypesJS extends Command { $themeIt = new \DirectoryIterator($themeDir); foreach ($themeIt as $fileInfo) { if ($fileInfo->isFile()) { - $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); + $file = preg_replace('/.[^.]*$/', '', $fileInfo->getFilename()); $themes[$theme][] = $file; } } @@ -110,7 +117,7 @@ OC.MimeTypeList={ '; //Output the JS - file_put_contents(dirname(__DIR__) . '/../js/mimetypelist.js', $js); + file_put_contents(\OC::$SERVERROOT.'/core/js/mimetypelist.js', $js); $output->writeln('<info>mimetypelist.js is updated'); } diff --git a/core/css/apps.css b/core/css/apps.css index 4118e6ea668..0371f2bbde7 100644 --- a/core/css/apps.css +++ b/core/css/apps.css @@ -629,3 +629,68 @@ em { .tabsContainer .tab { padding: 15px; } + +/* popover menu styles (use together with "bubble" class) */ +.popovermenu .menuitem, +.popovermenu .menuitem>span { + cursor: pointer; +} + +.popovermenu .menuitem { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; + filter: alpha(opacity=50); + opacity: .5; +} + +.popovermenu .menuitem:hover, +.popovermenu .menuitem:focus { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: alpha(opacity=100); + opacity: 1; +} + +.popovermenu { + padding: 4px 12px; +} + +.popovermenu li { + padding: 5px 0; +} + +.popovermenu .menuitem img { + padding: initial; +} + +.popovermenu a.menuitem, +.popovermenu label.menuitem, +.popovermenu .menuitem { + padding: 10px; + margin: -10px; +} + +.popovermenu.hidden { + display: none; +} + +.popovermenu .menuitem { + display: block; + line-height: 30px; + padding-left: 5px; + color: #000; + padding: 0; +} + +.popovermenu .menuitem .icon, +.popovermenu .menuitem .no-icon { + display: inline-block; + width: 16px; + margin-right: 10px; +} + +.popovermenu .menuitem { + opacity: 0.5; +} + +.popovermenu li:hover .menuitem { + opacity: 1; +} diff --git a/core/css/multiselect.css b/core/css/multiselect.css index 17fd81bf6c3..a9451964f59 100644 --- a/core/css/multiselect.css +++ b/core/css/multiselect.css @@ -93,7 +93,8 @@ div.multiselect>span:first-child { div.multiselect>span:last-child { position: absolute; - right: 13px; + right: 8px; + top: 8px; } ul.multiselectoptions input.new { diff --git a/core/css/styles.css b/core/css/styles.css index da4dc8b4d4d..9219068dc38 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -12,7 +12,18 @@ table, td, th { vertical-align:middle; } a { border:0; color:#000; text-decoration:none;} a, a *, input, input *, select, .button span, label { cursor:pointer; } ul { list-style:none; } +select { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background: url('../../core/img/actions/triangle-s.svg') no-repeat right 8px center rgba(240, 240, 240, 0.90); + outline: 0; + padding-right: 24px !important; +} +select:hover { + background-color: #fefefe; +} body { background-color: #ffffff; @@ -656,7 +667,7 @@ label.infield { position: absolute !important; height: 20px; width: 24px; - background-image: url("../img/actions/toggle.png"); + background-image: url('../img/actions/toggle.svg'); background-repeat: no-repeat; background-position: center; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=30)"; @@ -944,6 +955,7 @@ a.bookmarklet { background-color:#ddd; border:1px solid #ccc; padding:5px;paddin .ui-icon-circle-triangle-e{ background-image:url('../img/actions/play-next.svg'); } .ui-icon-circle-triangle-w{ background-image:url('../img/actions/play-previous.svg'); } + .ui-datepicker-prev,.ui-datepicker-next{ border:1px solid #ddd; background:#fff; } /* ---- DIALOGS ---- */ @@ -1131,3 +1143,12 @@ fieldset.warning legend + p, fieldset.update legend + p { @-ms-viewport { width: device-width; } + +/* hidden input type=file field */ +.hiddenuploadfield { + width: 0; + height: 0; + opacity: 0; + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; +} + diff --git a/core/img/filetypes/application-pdf.png b/core/img/filetypes/application-pdf.png Binary files differindex 1c0b18e2f51..4029f8aead1 100644 --- a/core/img/filetypes/application-pdf.png +++ b/core/img/filetypes/application-pdf.png diff --git a/core/img/filetypes/application-pdf.svg b/core/img/filetypes/application-pdf.svg index 5646f4caaac..9a472dba84b 100644 --- a/core/img/filetypes/application-pdf.svg +++ b/core/img/filetypes/application-pdf.svg @@ -1,5 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <path style="color:#000000;block-progression:tb;text-transform:none;text-indent:0" d="m2.3496 1.002c-0.1975 0.0382-0.3531 0.2333-0.3496 0.4375v13.122c0.000005 0.22905 0.20608 0.43749 0.43164 0.4375h11.139c0.22556-0.000006 0.43163-0.20845 0.43164-0.4375v-10.143c-0.004-0.06684-0.02269-0.1329-0.05469-0.19141l-3.3125-3.1992c-0.043-0.0164-0.08876-0.025544-0.13477-0.027344h-8.0684c-0.02684-0.0026-0.055191-0.0026-0.082031 0z" fill="#dc5047"/> - <path style="color:#000000;block-progression:tb;text-transform:none;text-indent:0" d="m7.3561 3h0.19315c0.18549 0 0.36359 0.065879 0.49263 0.1949 0.53227 0.5322 0.28209 1.8297 0.015948 2.9022-0.01613 0.048381-0.023832 0.089205-0.031897 0.11339 0.32259 0.91119 0.78197 1.6448 1.29 2.0641 0.20968 0.16127 0.44366 0.32261 0.70173 0.46775 0.36291-0.040318 0.70953-0.056697 1.0402-0.056697 1 0 1.6055 0.17735 1.8394 0.55634 0.08065 0.12902 0.11988 0.28168 0.09569 0.44295-0.0081 0.20159-0.07989 0.38817-0.22505 0.53331-0.1371 0.15321-0.37878 0.24096-0.73362 0.24096-0.61292 0-1.6141-0.18585-2.4206-0.59709-1.3871 0.15321-2.4193 0.33985-3.2499 0.60595-0.040323 0.01613-0.088854 0.03075-0.14531 0.05493-1 1.71-1.7408 2.477-2.394 2.477-0.1291 0-0.2594-0.032-0.3562-0.089l-0.3863-0.249-0.0248-0.041c-0.0565-0.145-0.073-0.283-0.0408-0.436 0.0887-0.427 0.5491-1.105 1.5169-1.71 0.1532-0.113 0.3951-0.242 0.7177-0.395 0.2419-0.4192 0.5001-0.9108 0.7744-1.451 0.4113-0.8306 0.6684-1.6522 0.87-2.3618v-0.00886c-0.2984-0.9757-0.4756-1.5639-0.1772-2.6364 0.0726-0.3064 0.3396-0.6219 0.638-0.6219zm0.1205 0.49965c-0.01613 0.024192-0.040576 0.065194-0.056705 0.097448-0.1371 0.33867-0.12878 0.92736 0.056705 1.6531l0.040757-0.031892c0.056453-0.25804 0.08097-0.48348 0.12936-0.66088l0.023036-0.12934c0.0806-0.4596 0.0644-0.6941-0.0727-0.8876zm0.065566 3.6463c-0.1856 0.5968-0.4523 1.2334-0.8152 1.9349-0.1613 0.3064-0.3395 0.5961-0.404 0.838l0.088602-0.0319c1.0242-0.3951 1.9936-0.6204 2.6952-0.7494-0.1209-0.0806-0.2346-0.17-0.3313-0.2587-0.4839-0.4112-0.9027-1.0071-1.2334-1.7328zm3.3616 2.2165c-0.05645 0-0.11171 0.0008653-0.18429 0.081503 0.58873 0.25804 1.1601 0.41106 1.531 0.41106 0.05645 0 0.10578-0.0079 0.15417-0.01595h0.0319c0.04032-0.01613 0.06459-0.02568 0.07266-0.10631-0.01614-0.0242-0.03234-0.05633-0.07266-0.08859-0.08065-0.08064-0.40375-0.28172-1.5328-0.28172zm-5.8622 1.4596c-0.16936 0.09677-0.30743 0.18531-0.38808 0.24982-0.5726 0.52414-0.9343 1.0561-0.97462 1.3625 0.36291-0.12095 0.83849-0.65276 1.3627-1.6123z" fill="#fff"/> + <path style="color:#000000;block-progression:tb;text-transform:none;text-indent:0" fill="#dc5047" d="m2.3496 1v0.002c-0.1975 0.0382-0.3531 0.2333-0.3496 0.4375v13.122c0 0.228 0.2061 0.436 0.4316 0.436h11.138c0.226 0 0.432-0.208 0.432-0.437v-10.143c-0.004-0.0669-0.023-0.1329-0.055-0.1914l-3.312-3.1993c-0.043-0.0164-0.089-0.0255-0.135-0.0273h-8.0684c-0.0268-0.0026-0.0552-0.0026-0.082 0zm5.0059 2h0.1933c0.1855 0 0.3632 0.0663 0.4922 0.1953 0.5323 0.5322 0.2837 1.8299 0.0176 2.9024-0.0161 0.0483-0.0251 0.0891-0.0332 0.1132 0.3226 0.9112 0.783 1.6452 1.291 2.0645 0.2097 0.1613 0.4431 0.3216 0.7016 0.4668 0.362-0.0403 0.71-0.0567 1.041-0.0567 1 0 1.604 0.1777 1.837 0.5567 0.081 0.129 0.12 0.2821 0.096 0.4433-0.008 0.2016-0.079 0.3885-0.224 0.5335-0.138 0.153-0.378 0.24-0.733 0.24-0.613 0-1.615-0.186-2.4217-0.5977-1.3871 0.1537-2.4194 0.3417-3.25 0.6077-0.0403 0.016-0.0881 0.03-0.1445 0.054-1 1.71-1.7414 2.477-2.3946 2.477-0.1291 0-0.2586-0.033-0.3554-0.09l-0.3868-0.248-0.0254-0.041c-0.0565-0.145-0.0732-0.282-0.041-0.435 0.0887-0.427 0.5498-1.106 1.5176-1.711 0.1532-0.113 0.3942-0.242 0.7168-0.395 0.2419-0.4191 0.5011-0.9109 0.7754-1.4511 0.4113-0.8306 0.6675-1.6517 0.8691-2.3613v-0.0098c-0.2984-0.9757-0.4741-1.5642-0.1757-2.6367 0.0726-0.3064 0.3383-0.6211 0.6367-0.6211zm0.1211 0.5c-0.0162 0.0242-0.0405 0.0654-0.0567 0.0977-0.1371 0.3386-0.1288 0.9266 0.0567 1.6523l0.041-0.0312c0.0564-0.2581 0.0805-0.4848 0.1289-0.6622l0.0234-0.1289c0.0806-0.4596 0.0649-0.6932-0.0722-0.8867l-0.1211-0.041zm0.0664 3.6465c-0.1856 0.5968-0.4535 1.2321-0.8164 1.9336-0.1613 0.3064-0.3398 0.596-0.4043 0.8379l0.0898-0.0313c1.0242-0.3951 1.9937-0.621 2.6953-0.75-0.1209-0.0806-0.2353-0.1691-0.332-0.2578-0.4839-0.4112-0.9017-1.0067-1.2324-1.7324zm3.361 2.2168c-0.056 0-0.113-0.0006-0.185 0.0801 0.588 0.258 1.16 0.4121 1.531 0.4121 0.056 0 0.106-0.0076 0.154-0.0157h0.034c0.04-0.0161 0.064-0.0267 0.072-0.1074-0.016-0.0242-0.032-0.0556-0.072-0.0879-0.081-0.0806-0.405-0.2812-1.534-0.2812zm-5.863 1.4587c-0.1693 0.097-0.3061 0.186-0.3867 0.25-0.5726 0.524-0.9343 1.055-0.9746 1.362 0.3629-0.121 0.8371-0.652 1.3613-1.612z"/> </svg> diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png Binary files differindex 43cc3abafe7..9be7361d1b6 100644 --- a/core/img/filetypes/application.png +++ b/core/img/filetypes/application.png diff --git a/core/img/filetypes/audio.png b/core/img/filetypes/audio.png Binary files differindex 32171285e8e..4eb8ab78e3f 100644 --- a/core/img/filetypes/audio.png +++ b/core/img/filetypes/audio.png diff --git a/core/img/filetypes/file.png b/core/img/filetypes/file.png Binary files differindex b56833a5763..3bd7463cfc9 100644 --- a/core/img/filetypes/file.png +++ b/core/img/filetypes/file.png diff --git a/core/img/filetypes/folder-drag-accept.png b/core/img/filetypes/folder-drag-accept.png Binary files differindex 58640b5cb5c..80ab53b72b9 100644 --- a/core/img/filetypes/folder-drag-accept.png +++ b/core/img/filetypes/folder-drag-accept.png diff --git a/core/img/filetypes/folder-external.png b/core/img/filetypes/folder-external.png Binary files differindex 56cb385a772..5262d72e627 100644 --- a/core/img/filetypes/folder-external.png +++ b/core/img/filetypes/folder-external.png diff --git a/core/img/filetypes/folder-public.png b/core/img/filetypes/folder-public.png Binary files differindex 4887ea6e767..17c3ee2a8d9 100644 --- a/core/img/filetypes/folder-public.png +++ b/core/img/filetypes/folder-public.png diff --git a/core/img/filetypes/folder-shared.png b/core/img/filetypes/folder-shared.png Binary files differindex 56c8ff36ed8..be5e59cbf28 100644 --- a/core/img/filetypes/folder-shared.png +++ b/core/img/filetypes/folder-shared.png diff --git a/core/img/filetypes/folder-starred.png b/core/img/filetypes/folder-starred.png Binary files differindex 09383b5e06b..b083a9d2d11 100644 --- a/core/img/filetypes/folder-starred.png +++ b/core/img/filetypes/folder-starred.png diff --git a/core/img/filetypes/folder.png b/core/img/filetypes/folder.png Binary files differindex 3dfb4391f2c..1dbb1154100 100644 --- a/core/img/filetypes/folder.png +++ b/core/img/filetypes/folder.png diff --git a/core/img/filetypes/image.png b/core/img/filetypes/image.png Binary files differindex 2a5441efdb7..0feaecf2830 100644 --- a/core/img/filetypes/image.png +++ b/core/img/filetypes/image.png diff --git a/core/img/filetypes/package-x-generic.png b/core/img/filetypes/package-x-generic.png Binary files differindex eb1470b0dff..287a1f18869 100644 --- a/core/img/filetypes/package-x-generic.png +++ b/core/img/filetypes/package-x-generic.png diff --git a/core/img/filetypes/text-calendar.png b/core/img/filetypes/text-calendar.png Binary files differindex dcb22b53e67..ff3ced62531 100644 --- a/core/img/filetypes/text-calendar.png +++ b/core/img/filetypes/text-calendar.png diff --git a/core/img/filetypes/text-code.png b/core/img/filetypes/text-code.png Binary files differindex 652ab3566ad..5505102f60e 100644 --- a/core/img/filetypes/text-code.png +++ b/core/img/filetypes/text-code.png diff --git a/core/img/filetypes/text-vcard.png b/core/img/filetypes/text-vcard.png Binary files differindex 81e7d3dc3b6..77ac138fe1c 100644 --- a/core/img/filetypes/text-vcard.png +++ b/core/img/filetypes/text-vcard.png diff --git a/core/img/filetypes/text.png b/core/img/filetypes/text.png Binary files differindex 13547961c76..5fca7cb69d7 100644 --- a/core/img/filetypes/text.png +++ b/core/img/filetypes/text.png diff --git a/core/img/filetypes/video.png b/core/img/filetypes/video.png Binary files differindex 5604a4a1891..308e81cca83 100644 --- a/core/img/filetypes/video.png +++ b/core/img/filetypes/video.png diff --git a/core/img/filetypes/x-office-document.png b/core/img/filetypes/x-office-document.png Binary files differindex 861ac965a7d..d9c5b890583 100644 --- a/core/img/filetypes/x-office-document.png +++ b/core/img/filetypes/x-office-document.png diff --git a/core/img/filetypes/x-office-presentation.png b/core/img/filetypes/x-office-presentation.png Binary files differindex fbe941e5c3f..5b3733b7121 100644 --- a/core/img/filetypes/x-office-presentation.png +++ b/core/img/filetypes/x-office-presentation.png diff --git a/core/img/filetypes/x-office-spreadsheet.png b/core/img/filetypes/x-office-spreadsheet.png Binary files differindex bf22ca23f09..5a20026ebdd 100644 --- a/core/img/filetypes/x-office-spreadsheet.png +++ b/core/img/filetypes/x-office-spreadsheet.png diff --git a/core/img/places/picture.png b/core/img/places/picture.png Binary files differindex b60da3b5fd8..171af526e9d 100644 --- a/core/img/places/picture.png +++ b/core/img/places/picture.png diff --git a/core/img/places/picture.svg b/core/img/places/picture.svg index b4c81b7a937..3e105dcd334 100644 --- a/core/img/places/picture.svg +++ b/core/img/places/picture.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> -<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> - <path style="block-progression:tb;color:#000000;text-transform:none;text-indent:0" d="m0.6875 4c-0.39495 0.0765-0.69461 0.4668-0.6875 0.875v22.25c0.00001 0.458 0.4239 0.875 0.875 0.875h30.25c0.4511-0.000012 0.87499-0.41692 0.875-0.875v-21.906c-0.001-0.6731-0.529-1.2229-1.031-1.219zm2.3125 3h26v10l-2-2-5 7-6.625-4-9.1875 7h-3.1875zm6 3c-1.6569 0-3 1.3431-3 3s1.3431 3 3 3 3-1.3431 3-3-1.3431-3-3-3z" fill="#fff"/> +<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"> + <path style="color:#000000;block-progression:tb;text-transform:none;text-indent:0" fill="#fff" d="m2.6876 4c-0.395 0.0765-0.6946 0.4668-0.6875 0.875v22.25c0 0.46 0.424 0.876 0.875 0.876h26.25c0.4511-0.000012 0.87498-0.41692 0.875-0.875v-21.906c-0.001-0.6731-0.529-1.2229-1.031-1.219zm1.3124 1.9999 24 0.000014v10l-2-2-6 8-6-6-8 8h-2zm5.0002 2c-1.6569 0-3 1.3431-3 3s1.3431 3 3 3 3-1.3431 3-3-1.3431-3-3-3z"/> </svg> diff --git a/core/js/multiselect.js b/core/js/multiselect.js index 96144d39ee0..41dc68ac051 100644 --- a/core/js/multiselect.js +++ b/core/js/multiselect.js @@ -53,7 +53,7 @@ settings.labels.push($(option).text().trim()); } }); - var button=$('<div class="multiselect button"><span>'+settings.title+'</span><span>▾</span></div>'); + var button=$('<div class="multiselect button"><span>'+settings.title+'</span><span class="icon-triangle-s"></span></div>'); var span=$('<span/>'); span.append(button); button.data('id',multiSelectId); diff --git a/core/l10n/af_ZA.js b/core/l10n/af_ZA.js index 7c95b0a0db4..a6f0448d1a5 100644 --- a/core/l10n/af_ZA.js +++ b/core/l10n/af_ZA.js @@ -109,6 +109,7 @@ OC.L10N.register( "Database host" : "Databasis gasheer", "Finish setup" : "Maak opstelling klaar", "Log out" : "Teken uit", + "Log in" : "Teken aan", "remember" : "onthou", "Alternative Logins" : "Alternatiewe aantekeninge", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Halo daar,<br><br>wou jou net laat weet dat %s <strong>%s</strong> met jou gedeel het.<br><a href=\"%s\">Sien alles!</a><br><br>" diff --git a/core/l10n/af_ZA.json b/core/l10n/af_ZA.json index a040afc6962..d5b747b5a32 100644 --- a/core/l10n/af_ZA.json +++ b/core/l10n/af_ZA.json @@ -107,6 +107,7 @@ "Database host" : "Databasis gasheer", "Finish setup" : "Maak opstelling klaar", "Log out" : "Teken uit", + "Log in" : "Teken aan", "remember" : "onthou", "Alternative Logins" : "Alternatiewe aantekeninge", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Halo daar,<br><br>wou jou net laat weet dat %s <strong>%s</strong> met jou gedeel het.<br><a href=\"%s\">Sien alles!</a><br><br>" diff --git a/core/l10n/bg_BG.js b/core/l10n/bg_BG.js index 52fdcccf13b..e7914ca5714 100644 --- a/core/l10n/bg_BG.js +++ b/core/l10n/bg_BG.js @@ -211,6 +211,7 @@ OC.L10N.register( "Search" : "Търсене", "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!", "Please contact your administrator." : "Моля, свържете се с администратора.", + "Log in" : "Вписване", "remember" : "запомняне", "Alternative Logins" : "Алтернативни методи на вписване", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здрасти,<br><br>само да те уведомя, че %s сподели <strong>%s</strong> с теб.\n<br><a href=\"%s\">Разгледай го!</a><br><br>.", diff --git a/core/l10n/bg_BG.json b/core/l10n/bg_BG.json index 0d8b4a21a19..271cb44435b 100644 --- a/core/l10n/bg_BG.json +++ b/core/l10n/bg_BG.json @@ -209,6 +209,7 @@ "Search" : "Търсене", "Server side authentication failed!" : "Удостоверяването от страна на сървъра е неуспешно!", "Please contact your administrator." : "Моля, свържете се с администратора.", + "Log in" : "Вписване", "remember" : "запомняне", "Alternative Logins" : "Алтернативни методи на вписване", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Здрасти,<br><br>само да те уведомя, че %s сподели <strong>%s</strong> с теб.\n<br><a href=\"%s\">Разгледай го!</a><br><br>.", diff --git a/core/l10n/ca.js b/core/l10n/ca.js index 853cd662472..1fa4f12a3e3 100644 --- a/core/l10n/ca.js +++ b/core/l10n/ca.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "No s'ha pogut enviar correu als usuaris següents: %s", + "Preparing update" : "Preparant l'actualització", "Turned on maintenance mode" : "Activat el mode de manteniment", "Turned off maintenance mode" : "Desactivat el mode de manteniment", "Maintenance mode is kept active" : "El mode de manteniment es manté activat", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Error de reparació:", "Following incompatible apps have been disabled: %s" : "Les següents apps incompatibles s'han deshabilitat: %s", "Following apps have been disabled: %s" : "Les aplicacions següents s'han deshabilitat: %s", + "Already up to date" : "Ja actualitzat", "File is too big" : "El fitxer és massa gran", "Invalid file provided" : "L'arxiu proporcionat no és vàlid", "No image or file provided" : "No s'han proporcionat imatges o fitxers", @@ -36,6 +38,13 @@ OC.L10N.register( "Thu." : "Dj.", "Fri." : "Dv.", "Sat." : "Ds.", + "Su" : "Dg", + "Mo" : "Dl", + "Tu" : "Dm", + "We" : "Dc", + "Th" : "Dj", + "Fr" : "Dv", + "Sa" : "Ds", "January" : "Gener", "February" : "Febrer", "March" : "Març", @@ -90,7 +99,14 @@ OC.L10N.register( "So-so password" : "Contrasenya passable", "Good password" : "Contrasenya bona", "Strong password" : "Contrasenya forta", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aquest servidor no té connexió a internet. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No hi ha configurada cap memòria cau. Per millorar el rendiment configureu una memòria cau si està disponible. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP no pot llegir /dev/urandom, cosa poc recomanable per raons de seguretat. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La versió de PHP ({version}) ja no està <a href=\"{phpLink}\">mantinguda per PHP</a>. Us recomanem que actualitzeu la versió per gaudir de les millores de rendiment i seguretat proporcionades per PHP.", "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>", "Shared" : "Compartit", "Shared with {recipients}" : "Compartit amb {recipients}", "Error" : "Error", @@ -155,6 +171,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "La actualització ha estat exitosa. Hi ha alertes.", "The update was successful. Redirecting you to ownCloud now." : "L'actualització ha estat correcte. Ara us redirigim a ownCloud.", "Couldn't reset password because the token is invalid" : "No es pot restablir la contrasenya perquè el testimoni no és vàlid", + "Couldn't reset password because the token is expired" : "No es pot restablir la contrasenya perquè el testimoni ha vençut", "Couldn't send reset email. Please make sure your username is correct." : "No s'ha pogut enviar el correu de restabliment. Assegureu-vos que el vostre nom d'usuari és correcte.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar el correu de restabliment perquè no hi ha cap correu electrònic per aquest usuari. Contacteu amb l'administrador.", "%s password reset" : "restableix la contrasenya %s", @@ -196,6 +213,7 @@ OC.L10N.register( "Message: %s" : "Missatge: %s", "File: %s" : "Fitxer: %s", "Line: %s" : "Línia: %s", + "Trace" : "Traça", "Security warning" : "Advertiment de seguretat", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", @@ -205,6 +223,7 @@ OC.L10N.register( "Data folder" : "Carpeta de dades", "Configure the database" : "Configura la base de dades", "Only %s is available." : "Només hi ha disponible %s", + "Install and activate additional PHP modules to choose other database types." : "Instal·la i activa mòduls PHP addicionals per seleccionar altres tipus de bases de dades.", "For more details check out the documentation." : "Per més detalls consulteu la documentació.", "Database user" : "Usuari de la base de dades", "Database password" : "Contrasenya de la base de dades", @@ -226,6 +245,7 @@ OC.L10N.register( "Please contact your administrator." : "Contacteu amb l'administrador.", "An internal error occured." : "S'ha produït un error intern.", "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.", + "Log in" : "Inici de sessió", "Wrong password. Reset it?" : "Contrasenya incorrecta. Voleu restablir-la?", "remember" : "recorda'm", "Alternative Logins" : "Acreditacions alternatives", @@ -238,6 +258,10 @@ OC.L10N.register( "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contacteu amb l'administrador. Si sou un administrador d'aquesta instància, configureu el paràmetre \"trusted_domain\" a config/config.php. Hi ha un exemple de configuració a config/config.sampe.php", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En funció de la teva configuració, com a administrador podries utilitzar el botó d'abaix per confiar en aquest domini.", "Add \"%s\" as trusted domain" : "Afegeix \"%s\" com a domini de confiança", + "App update required" : "Cal que actualitzeu la aplicació", + "%s will be updated to version %s" : "%s s'actualitzarà a la versió %s", + "These apps will be updated:" : "Aquestes aplicacions s'actualitzaran:", + "These incompatible apps will be disabled:" : "Aquestes aplicacions incompatibles es desactivaran:", "The theme %s has been disabled." : "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" : "Inicia l'actualització", diff --git a/core/l10n/ca.json b/core/l10n/ca.json index 56006bc7d17..55962a25362 100644 --- a/core/l10n/ca.json +++ b/core/l10n/ca.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "No s'ha pogut enviar correu als usuaris següents: %s", + "Preparing update" : "Preparant l'actualització", "Turned on maintenance mode" : "Activat el mode de manteniment", "Turned off maintenance mode" : "Desactivat el mode de manteniment", "Maintenance mode is kept active" : "El mode de manteniment es manté activat", @@ -11,6 +12,7 @@ "Repair error: " : "Error de reparació:", "Following incompatible apps have been disabled: %s" : "Les següents apps incompatibles s'han deshabilitat: %s", "Following apps have been disabled: %s" : "Les aplicacions següents s'han deshabilitat: %s", + "Already up to date" : "Ja actualitzat", "File is too big" : "El fitxer és massa gran", "Invalid file provided" : "L'arxiu proporcionat no és vàlid", "No image or file provided" : "No s'han proporcionat imatges o fitxers", @@ -34,6 +36,13 @@ "Thu." : "Dj.", "Fri." : "Dv.", "Sat." : "Ds.", + "Su" : "Dg", + "Mo" : "Dl", + "Tu" : "Dm", + "We" : "Dc", + "Th" : "Dj", + "Fr" : "Dv", + "Sa" : "Ds", "January" : "Gener", "February" : "Febrer", "March" : "Març", @@ -88,7 +97,14 @@ "So-so password" : "Contrasenya passable", "Good password" : "Contrasenya bona", "Strong password" : "Contrasenya forta", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "El servidor web no està configurat correctament per permetre la sincronització de fitxers perquè la interfície WebDAV sembla no funcionar correctament.", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "Aquest servidor no té connexió a internet. Això significa que algunes de les característiques com el muntatge d'emmagatzemament extern, les notificacions quant a actualitzacions o la instal·lació d'aplicacions de tercers no funcionarà. L'accés remot a fitxers i l'enviament de correus electrònics podria tampoc no funcionar. Us suggerim que habiliteu la connexió a internet per aquest servidor si voleu tenir totes les característiques.", + "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "La carpeta de dades i els vostres fitxers probablement són accessibles des d'Internet. El fitxer .htaccess no funciona. Us recomanem que configureu el servidor web de tal manera que la carpeta de dades no sigui accessible o que moveu la carpeta de dades fora de l'arrel de documents del servidor web.", + "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "No hi ha configurada cap memòria cau. Per millorar el rendiment configureu una memòria cau si està disponible. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.", + "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "PHP no pot llegir /dev/urandom, cosa poc recomanable per raons de seguretat. Podeu trobar més informació a la <a href=\"{docLink}\">documentació</a>.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "La versió de PHP ({version}) ja no està <a href=\"{phpLink}\">mantinguda per PHP</a>. Us recomanem que actualitzeu la versió per gaudir de les millores de rendiment i seguretat proporcionades per PHP.", "Error occurred while checking server setup" : "Hi ha hagut un error en comprovar la configuració del servidor", + "You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our <a href=\"{docUrl}\">security tips</a>." : "Esteu accedint aquesta web a través de HTTP. Us recomanem que configureu el servidor per requerir HTTPS tal i com es descriu als <a href=\"{docUrl}\">consells de seguretat</a>", "Shared" : "Compartit", "Shared with {recipients}" : "Compartit amb {recipients}", "Error" : "Error", @@ -153,6 +169,7 @@ "The update was successful. There were warnings." : "La actualització ha estat exitosa. Hi ha alertes.", "The update was successful. Redirecting you to ownCloud now." : "L'actualització ha estat correcte. Ara us redirigim a ownCloud.", "Couldn't reset password because the token is invalid" : "No es pot restablir la contrasenya perquè el testimoni no és vàlid", + "Couldn't reset password because the token is expired" : "No es pot restablir la contrasenya perquè el testimoni ha vençut", "Couldn't send reset email. Please make sure your username is correct." : "No s'ha pogut enviar el correu de restabliment. Assegureu-vos que el vostre nom d'usuari és correcte.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "No s'ha pogut enviar el correu de restabliment perquè no hi ha cap correu electrònic per aquest usuari. Contacteu amb l'administrador.", "%s password reset" : "restableix la contrasenya %s", @@ -194,6 +211,7 @@ "Message: %s" : "Missatge: %s", "File: %s" : "Fitxer: %s", "Line: %s" : "Línia: %s", + "Trace" : "Traça", "Security warning" : "Advertiment de seguretat", "Your data directory and files are probably accessible from the internet because the .htaccess file does not work." : "La carpeta de dades i els seus fitxers probablement són accessibles des d'internet perquè el fitxer .htaccess no funciona.", "For information how to properly configure your server, please see the <a href=\"%s\" target=\"_blank\">documentation</a>." : "Per informació de com configurar el servidor, comproveu la <a href=\"%s\" target=\"_blank\">documentació</a>.", @@ -203,6 +221,7 @@ "Data folder" : "Carpeta de dades", "Configure the database" : "Configura la base de dades", "Only %s is available." : "Només hi ha disponible %s", + "Install and activate additional PHP modules to choose other database types." : "Instal·la i activa mòduls PHP addicionals per seleccionar altres tipus de bases de dades.", "For more details check out the documentation." : "Per més detalls consulteu la documentació.", "Database user" : "Usuari de la base de dades", "Database password" : "Contrasenya de la base de dades", @@ -224,6 +243,7 @@ "Please contact your administrator." : "Contacteu amb l'administrador.", "An internal error occured." : "S'ha produït un error intern.", "Please try again or contact your administrator." : "Intenti-ho de nou o posi's en contacte amb el seu administrador.", + "Log in" : "Inici de sessió", "Wrong password. Reset it?" : "Contrasenya incorrecta. Voleu restablir-la?", "remember" : "recorda'm", "Alternative Logins" : "Acreditacions alternatives", @@ -236,6 +256,10 @@ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Contacteu amb l'administrador. Si sou un administrador d'aquesta instància, configureu el paràmetre \"trusted_domain\" a config/config.php. Hi ha un exemple de configuració a config/config.sampe.php", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "En funció de la teva configuració, com a administrador podries utilitzar el botó d'abaix per confiar en aquest domini.", "Add \"%s\" as trusted domain" : "Afegeix \"%s\" com a domini de confiança", + "App update required" : "Cal que actualitzeu la aplicació", + "%s will be updated to version %s" : "%s s'actualitzarà a la versió %s", + "These apps will be updated:" : "Aquestes aplicacions s'actualitzaran:", + "These incompatible apps will be disabled:" : "Aquestes aplicacions incompatibles es desactivaran:", "The theme %s has been disabled." : "S'ha desactivat el tema %s", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Assegureu-vos que heu fet una còpia de seguretat de la base de dades, del fitxer de configuració i de la carpeta de dades abans de continuar.", "Start update" : "Inicia l'actualització", diff --git a/core/l10n/cs_CZ.js b/core/l10n/cs_CZ.js index 8d57e0e76c0..54ed40e9a5b 100644 --- a/core/l10n/cs_CZ.js +++ b/core/l10n/cs_CZ.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Nebylo možné odeslat email následujícím uživatelům: %s", + "Preparing update" : "Příprava na aktualizaci", "Turned on maintenance mode" : "Zapnut režim údržby", "Turned off maintenance mode" : "Vypnut režim údržby", "Maintenance mode is kept active" : "Mód údržby je aktivní", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Chyba opravy:", "Following incompatible apps have been disabled: %s" : "Následující nekompatibilní aplikace byly zakázány: %s", "Following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s", + "Already up to date" : "Je již aktuální", "File is too big" : "Soubor je příliš velký", "Invalid file provided" : "Zadán neplatný soubor", "No image or file provided" : "Soubor nebo obrázek nebyl zadán", @@ -244,6 +246,7 @@ OC.L10N.register( "Please contact your administrator." : "Kontaktujte prosím svého správce systému.", "An internal error occured." : "Nastala vnitřní chyba.", "Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.", + "Log in" : "Přihlásit", "Wrong password. Reset it?" : "Nesprávné heslo. Resetovat?", "remember" : "zapamatovat", "Alternative Logins" : "Alternativní přihlášení", diff --git a/core/l10n/cs_CZ.json b/core/l10n/cs_CZ.json index e9f52cfa46d..da343b7791a 100644 --- a/core/l10n/cs_CZ.json +++ b/core/l10n/cs_CZ.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Nebylo možné odeslat email následujícím uživatelům: %s", + "Preparing update" : "Příprava na aktualizaci", "Turned on maintenance mode" : "Zapnut režim údržby", "Turned off maintenance mode" : "Vypnut režim údržby", "Maintenance mode is kept active" : "Mód údržby je aktivní", @@ -11,6 +12,7 @@ "Repair error: " : "Chyba opravy:", "Following incompatible apps have been disabled: %s" : "Následující nekompatibilní aplikace byly zakázány: %s", "Following apps have been disabled: %s" : "Následující aplikace byly vypnuty: %s", + "Already up to date" : "Je již aktuální", "File is too big" : "Soubor je příliš velký", "Invalid file provided" : "Zadán neplatný soubor", "No image or file provided" : "Soubor nebo obrázek nebyl zadán", @@ -242,6 +244,7 @@ "Please contact your administrator." : "Kontaktujte prosím svého správce systému.", "An internal error occured." : "Nastala vnitřní chyba.", "Please try again or contact your administrator." : "Prosím zkuste to znovu nebo kontaktujte vašeho správce.", + "Log in" : "Přihlásit", "Wrong password. Reset it?" : "Nesprávné heslo. Resetovat?", "remember" : "zapamatovat", "Alternative Logins" : "Alternativní přihlášení", diff --git a/core/l10n/cy_GB.js b/core/l10n/cy_GB.js index 5afe9c94ae5..27df5177fff 100644 --- a/core/l10n/cy_GB.js +++ b/core/l10n/cy_GB.js @@ -100,6 +100,7 @@ OC.L10N.register( "Finish setup" : "Gorffen sefydlu", "Log out" : "Allgofnodi", "Search" : "Chwilio", + "Log in" : "Mewngofnodi", "remember" : "cofio", "Alternative Logins" : "Mewngofnodiadau Amgen" }, diff --git a/core/l10n/cy_GB.json b/core/l10n/cy_GB.json index 1e37b240bc9..37f1aefb527 100644 --- a/core/l10n/cy_GB.json +++ b/core/l10n/cy_GB.json @@ -98,6 +98,7 @@ "Finish setup" : "Gorffen sefydlu", "Log out" : "Allgofnodi", "Search" : "Chwilio", + "Log in" : "Mewngofnodi", "remember" : "cofio", "Alternative Logins" : "Mewngofnodiadau Amgen" },"pluralForm" :"nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;" diff --git a/core/l10n/da.js b/core/l10n/da.js index 0482ceff99e..c8684b3483c 100644 --- a/core/l10n/da.js +++ b/core/l10n/da.js @@ -248,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "Kontakt venligst din administrator", "An internal error occured." : "Der skete en intern fejl.", "Please try again or contact your administrator." : "Kontakt venligst din administrator.", + "Log in" : "Log ind", "Wrong password. Reset it?" : "Forkert kodeord. Skal det nulstilles?", "remember" : "husk", "Alternative Logins" : "Alternative logins", diff --git a/core/l10n/da.json b/core/l10n/da.json index 2396b997877..067d5e6914d 100644 --- a/core/l10n/da.json +++ b/core/l10n/da.json @@ -246,6 +246,7 @@ "Please contact your administrator." : "Kontakt venligst din administrator", "An internal error occured." : "Der skete en intern fejl.", "Please try again or contact your administrator." : "Kontakt venligst din administrator.", + "Log in" : "Log ind", "Wrong password. Reset it?" : "Forkert kodeord. Skal det nulstilles?", "remember" : "husk", "Alternative Logins" : "Alternative logins", diff --git a/core/l10n/de.js b/core/l10n/de.js index 2662e0d895f..495ea72c710 100644 --- a/core/l10n/de.js +++ b/core/l10n/de.js @@ -237,6 +237,7 @@ OC.L10N.register( "Please contact your administrator." : "Bitte kontaktiere Deinen Administrator.", "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.", + "Log in" : "Anmelden", "Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?", "remember" : "merken", "Alternative Logins" : "Alternative Logins", diff --git a/core/l10n/de.json b/core/l10n/de.json index 2da213c6116..fc826c7fde2 100644 --- a/core/l10n/de.json +++ b/core/l10n/de.json @@ -235,6 +235,7 @@ "Please contact your administrator." : "Bitte kontaktiere Deinen Administrator.", "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", "Please try again or contact your administrator." : "Bitte versuche es noch einmal oder kontaktiere Deinen Administrator.", + "Log in" : "Anmelden", "Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?", "remember" : "merken", "Alternative Logins" : "Alternative Logins", diff --git a/core/l10n/de_DE.js b/core/l10n/de_DE.js index 6a77c3952c3..0a4689261a6 100644 --- a/core/l10n/de_DE.js +++ b/core/l10n/de_DE.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail gesendet werden: %s", + "Preparing update" : "Update vorbereiten", "Turned on maintenance mode" : "Wartungsmodus eingeschaltet ", "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet", "Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Reperaturfehler:", "Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s", "Following apps have been disabled: %s" : "Die folgenden Apps sind deaktiviert worden: %s", + "Already up to date" : "Bereits aktuell", "File is too big" : "Datei ist zu groß", "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", "No image or file provided" : "Es wurde weder ein Bild noch eine Datei zur Verfügung gestellt", @@ -36,6 +38,13 @@ OC.L10N.register( "Thu." : "Do", "Fri." : "Fr", "Sat." : "Sa", + "Su" : "So", + "Mo" : "Mo", + "Tu" : "Di", + "We" : "Mi", + "Th" : "Do", + "Fr" : "Fr", + "Sa" : "Sa", "January" : "Januar", "February" : "Februar", "March" : "März", @@ -236,6 +245,7 @@ OC.L10N.register( "Please contact your administrator." : "Bitte kontaktieren Sie Ihren Administrator.", "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", "Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.", + "Log in" : "Einloggen", "Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?", "remember" : "merken", "Alternative Logins" : "Alternative Logins", @@ -248,6 +258,10 @@ OC.L10N.register( "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie Administrator dieser Instanz sind, konfigurieren Sie bitte die „trusted_domain“-Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereitgestellt.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Wenn es Ihre Konfiguration zulässt, können Sie als Administrator gegebenenfalls den Button unten benutzen, um diese Domain als vertrauenswürdig einzustufen.", "Add \"%s\" as trusted domain" : "„%s“ als vertrauenswürdige Domain hinzufügen", + "App update required" : "App-Update notwendig", + "%s will be updated to version %s" : "%s wird auf Version %s aktualisiert", + "These apps will be updated:" : "Diese Apps werden aktualisiert:", + "These incompatible apps will be disabled:" : "Diese inkompatiblen Apps werden deaktiviert:", "The theme %s has been disabled." : "Das Thema %s wurde deaktiviert.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Stellen Sie vor dem Fortsetzen bitte sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.", "Start update" : "Aktualisierung starten", diff --git a/core/l10n/de_DE.json b/core/l10n/de_DE.json index fc6dc12aa17..a5f2d5857e3 100644 --- a/core/l10n/de_DE.json +++ b/core/l10n/de_DE.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "An folgende Benutzer konnte keine E-Mail gesendet werden: %s", + "Preparing update" : "Update vorbereiten", "Turned on maintenance mode" : "Wartungsmodus eingeschaltet ", "Turned off maintenance mode" : "Wartungsmodus ausgeschaltet", "Maintenance mode is kept active" : "Wartungsmodus wird aktiv gehalten", @@ -11,6 +12,7 @@ "Repair error: " : "Reperaturfehler:", "Following incompatible apps have been disabled: %s" : "Die folgenden inkompatiblen Apps sind deaktiviert worden: %s", "Following apps have been disabled: %s" : "Die folgenden Apps sind deaktiviert worden: %s", + "Already up to date" : "Bereits aktuell", "File is too big" : "Datei ist zu groß", "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", "No image or file provided" : "Es wurde weder ein Bild noch eine Datei zur Verfügung gestellt", @@ -34,6 +36,13 @@ "Thu." : "Do", "Fri." : "Fr", "Sat." : "Sa", + "Su" : "So", + "Mo" : "Mo", + "Tu" : "Di", + "We" : "Mi", + "Th" : "Do", + "Fr" : "Fr", + "Sa" : "Sa", "January" : "Januar", "February" : "Februar", "March" : "März", @@ -234,6 +243,7 @@ "Please contact your administrator." : "Bitte kontaktieren Sie Ihren Administrator.", "An internal error occured." : "Es ist ein interner Fehler aufgetreten.", "Please try again or contact your administrator." : "Bitte versuchen Sie es noch einmal oder kontaktieren Sie Ihren Administrator.", + "Log in" : "Einloggen", "Wrong password. Reset it?" : "Falsches Passwort. Soll es zurückgesetzt werden?", "remember" : "merken", "Alternative Logins" : "Alternative Logins", @@ -246,6 +256,10 @@ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Bitte kontaktieren Sie Ihren Administrator. Wenn Sie Administrator dieser Instanz sind, konfigurieren Sie bitte die „trusted_domain“-Einstellung in config/config.php. Eine Beispielkonfiguration wird unter config/config.sample.php bereitgestellt.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Wenn es Ihre Konfiguration zulässt, können Sie als Administrator gegebenenfalls den Button unten benutzen, um diese Domain als vertrauenswürdig einzustufen.", "Add \"%s\" as trusted domain" : "„%s“ als vertrauenswürdige Domain hinzufügen", + "App update required" : "App-Update notwendig", + "%s will be updated to version %s" : "%s wird auf Version %s aktualisiert", + "These apps will be updated:" : "Diese Apps werden aktualisiert:", + "These incompatible apps will be disabled:" : "Diese inkompatiblen Apps werden deaktiviert:", "The theme %s has been disabled." : "Das Thema %s wurde deaktiviert.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Stellen Sie vor dem Fortsetzen bitte sicher, dass die Datenbank, der Konfigurationsordner und der Datenordner gesichert wurden.", "Start update" : "Aktualisierung starten", diff --git a/core/l10n/el.js b/core/l10n/el.js index 03ecc018c05..28e9763e13c 100644 --- a/core/l10n/el.js +++ b/core/l10n/el.js @@ -248,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", "An internal error occured." : "Παρουσιάστηκε εσωτερικό σφάλμα.", "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.", + "Log in" : "Είσοδος", "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;", "remember" : "απομνημόνευση", "Alternative Logins" : "Εναλλακτικές Συνδέσεις", diff --git a/core/l10n/el.json b/core/l10n/el.json index 4e901e6606b..6c68066738a 100644 --- a/core/l10n/el.json +++ b/core/l10n/el.json @@ -246,6 +246,7 @@ "Please contact your administrator." : "Παρακαλώ επικοινωνήστε με τον διαχειριστή.", "An internal error occured." : "Παρουσιάστηκε εσωτερικό σφάλμα.", "Please try again or contact your administrator." : "Παρακαλώ δοκιμάστε ξανά ή επικοινωνήστε με τον διαχειριστή σας.", + "Log in" : "Είσοδος", "Wrong password. Reset it?" : "Λάθος Κωδικός. Επαναφορά;", "remember" : "απομνημόνευση", "Alternative Logins" : "Εναλλακτικές Συνδέσεις", diff --git a/core/l10n/eo.js b/core/l10n/eo.js index 78a571a798a..eee2a354958 100644 --- a/core/l10n/eo.js +++ b/core/l10n/eo.js @@ -129,6 +129,7 @@ OC.L10N.register( "Log out" : "Elsaluti", "Search" : "Serĉi", "Please contact your administrator." : "Bonvolu kontakti vian administranton.", + "Log in" : "Ensaluti", "remember" : "memori", "Alternative Logins" : "Alternativaj ensalutoj", "Thank you for your patience." : "Dankon pro via pacienco." diff --git a/core/l10n/eo.json b/core/l10n/eo.json index 401e9327560..fb1ad500032 100644 --- a/core/l10n/eo.json +++ b/core/l10n/eo.json @@ -127,6 +127,7 @@ "Log out" : "Elsaluti", "Search" : "Serĉi", "Please contact your administrator." : "Bonvolu kontakti vian administranton.", + "Log in" : "Ensaluti", "remember" : "memori", "Alternative Logins" : "Alternativaj ensalutoj", "Thank you for your patience." : "Dankon pro via pacienco." diff --git a/core/l10n/es_AR.js b/core/l10n/es_AR.js index 5cc18198864..bddadc44c1a 100644 --- a/core/l10n/es_AR.js +++ b/core/l10n/es_AR.js @@ -149,6 +149,7 @@ OC.L10N.register( "Search" : "Buscar", "Server side authentication failed!" : "¡Falló la autenticación del servidor!", "Please contact your administrator." : "Por favor, contacte a su administrador.", + "Log in" : "Iniciar sesión", "remember" : "recordame", "Alternative Logins" : "Nombre alternativos de usuarios", "This ownCloud instance is currently in single user mode." : "Esta instancia de ownCloud está en modo de usuario único.", diff --git a/core/l10n/es_AR.json b/core/l10n/es_AR.json index 8ccb4cedb4b..93a5b815740 100644 --- a/core/l10n/es_AR.json +++ b/core/l10n/es_AR.json @@ -147,6 +147,7 @@ "Search" : "Buscar", "Server side authentication failed!" : "¡Falló la autenticación del servidor!", "Please contact your administrator." : "Por favor, contacte a su administrador.", + "Log in" : "Iniciar sesión", "remember" : "recordame", "Alternative Logins" : "Nombre alternativos de usuarios", "This ownCloud instance is currently in single user mode." : "Esta instancia de ownCloud está en modo de usuario único.", diff --git a/core/l10n/et_EE.js b/core/l10n/et_EE.js index 3e517277f53..df638a3d7ee 100644 --- a/core/l10n/et_EE.js +++ b/core/l10n/et_EE.js @@ -217,6 +217,7 @@ OC.L10N.register( "Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.", "An internal error occured." : "Tekkis sisemine tõrge.", "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", + "Log in" : "Logi sisse", "remember" : "pea meeles", "Alternative Logins" : "Alternatiivsed sisselogimisviisid", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>annan teada, et %s jagas sinuga <strong>%s</strong>. <a href=\"%s\">Vaata seda!</a><br><br>", diff --git a/core/l10n/et_EE.json b/core/l10n/et_EE.json index 73839f889ca..edacdaedca9 100644 --- a/core/l10n/et_EE.json +++ b/core/l10n/et_EE.json @@ -215,6 +215,7 @@ "Please contact your administrator." : "Palun kontakteeru oma süsteemihalduriga.", "An internal error occured." : "Tekkis sisemine tõrge.", "Please try again or contact your administrator." : "Palun proovi uuesti või võta ühendust oma administraatoriga.", + "Log in" : "Logi sisse", "remember" : "pea meeles", "Alternative Logins" : "Alternatiivsed sisselogimisviisid", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>annan teada, et %s jagas sinuga <strong>%s</strong>. <a href=\"%s\">Vaata seda!</a><br><br>", diff --git a/core/l10n/eu.js b/core/l10n/eu.js index e215b870125..88b75072356 100644 --- a/core/l10n/eu.js +++ b/core/l10n/eu.js @@ -199,6 +199,7 @@ OC.L10N.register( "Search" : "Bilatu", "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", "Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.", + "Log in" : "Hasi saioa", "remember" : "gogoratu", "Alternative Logins" : "Beste erabiltzaile izenak", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s", diff --git a/core/l10n/eu.json b/core/l10n/eu.json index 9af46ca9cfb..51143f24767 100644 --- a/core/l10n/eu.json +++ b/core/l10n/eu.json @@ -197,6 +197,7 @@ "Search" : "Bilatu", "Server side authentication failed!" : "Zerbitzari aldeko autentifikazioak huts egin du!", "Please contact your administrator." : "Mesedez jarri harremetan zure administradorearekin.", + "Log in" : "Hasi saioa", "remember" : "gogoratu", "Alternative Logins" : "Beste erabiltzaile izenak", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Kaixo<br><br>%s-ek %s zurekin partekatu duela jakin dezazun.\nIkusi ezazu: %s", diff --git a/core/l10n/fi_FI.js b/core/l10n/fi_FI.js index 2893ce8ae2a..2c3c3c49617 100644 --- a/core/l10n/fi_FI.js +++ b/core/l10n/fi_FI.js @@ -248,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "Ota yhteys ylläpitäjään.", "An internal error occured." : "Tapahtui sisäinen virhe.", "Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.", + "Log in" : "Kirjaudu sisään", "Wrong password. Reset it?" : "Väärä salasana. Haluatko palauttaa salasanan?", "remember" : "muista", "Alternative Logins" : "Vaihtoehtoiset kirjautumiset", diff --git a/core/l10n/fi_FI.json b/core/l10n/fi_FI.json index 21316024e73..e0ac2410747 100644 --- a/core/l10n/fi_FI.json +++ b/core/l10n/fi_FI.json @@ -246,6 +246,7 @@ "Please contact your administrator." : "Ota yhteys ylläpitäjään.", "An internal error occured." : "Tapahtui sisäinen virhe.", "Please try again or contact your administrator." : "Yritä uudestaan tai ota yhteys ylläpitäjään.", + "Log in" : "Kirjaudu sisään", "Wrong password. Reset it?" : "Väärä salasana. Haluatko palauttaa salasanan?", "remember" : "muista", "Alternative Logins" : "Vaihtoehtoiset kirjautumiset", diff --git a/core/l10n/fr.js b/core/l10n/fr.js index 8b0fbdbe836..27bea200a63 100644 --- a/core/l10n/fr.js +++ b/core/l10n/fr.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Impossible d'envoyer un courriel aux utilisateurs suivants : %s", + "Preparing update" : "Préparation de la mise à jour", "Turned on maintenance mode" : "Mode de maintenance activé", "Turned off maintenance mode" : "Mode de maintenance désactivé", "Maintenance mode is kept active" : "Le mode de maintenance est laissé actif", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Erreur de réparation :", "Following incompatible apps have been disabled: %s" : "Les applications incompatibles suivantes ont été désactivées : %s", "Following apps have been disabled: %s" : "Les applications suivantes ont été désactivées : %s", + "Already up to date" : "Déjà à jour", "File is too big" : "Fichier trop volumineux", "Invalid file provided" : "Fichier non valide", "No image or file provided" : "Aucun fichier fourni", @@ -172,6 +174,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "La mise à jour a réussi, mais il y a eu des avertissements", "The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé vers ownCloud.", "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.", + "Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré.", "Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.", "%s password reset" : "Réinitialisation de votre mot de passe %s", @@ -245,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "Veuillez contacter votre administrateur.", "An internal error occured." : "Une erreur interne est survenue.", "Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.", + "Log in" : "Se connecter", "Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?", "remember" : "se souvenir de moi", "Alternative Logins" : "Identifiants alternatifs", diff --git a/core/l10n/fr.json b/core/l10n/fr.json index 2eb2a722298..ac12a4673d5 100644 --- a/core/l10n/fr.json +++ b/core/l10n/fr.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Impossible d'envoyer un courriel aux utilisateurs suivants : %s", + "Preparing update" : "Préparation de la mise à jour", "Turned on maintenance mode" : "Mode de maintenance activé", "Turned off maintenance mode" : "Mode de maintenance désactivé", "Maintenance mode is kept active" : "Le mode de maintenance est laissé actif", @@ -11,6 +12,7 @@ "Repair error: " : "Erreur de réparation :", "Following incompatible apps have been disabled: %s" : "Les applications incompatibles suivantes ont été désactivées : %s", "Following apps have been disabled: %s" : "Les applications suivantes ont été désactivées : %s", + "Already up to date" : "Déjà à jour", "File is too big" : "Fichier trop volumineux", "Invalid file provided" : "Fichier non valide", "No image or file provided" : "Aucun fichier fourni", @@ -170,6 +172,7 @@ "The update was successful. There were warnings." : "La mise à jour a réussi, mais il y a eu des avertissements", "The update was successful. Redirecting you to ownCloud now." : "La mise à jour a réussi. Vous êtes maintenant redirigé vers ownCloud.", "Couldn't reset password because the token is invalid" : "Impossible de réinitialiser le mot de passe car le jeton n'est pas valable.", + "Couldn't reset password because the token is expired" : "Impossible de réinitialiser le mot de passe car le jeton a expiré.", "Couldn't send reset email. Please make sure your username is correct." : "Impossible d'envoyer le courriel de réinitialisation. Veuillez vérifier que votre nom d'utilisateur est correct.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Impossible d'envoyer le courriel de réinitialisation car il n'y a aucune adresse de courriel pour cet utilisateur. Veuillez contacter votre administrateur.", "%s password reset" : "Réinitialisation de votre mot de passe %s", @@ -243,6 +246,7 @@ "Please contact your administrator." : "Veuillez contacter votre administrateur.", "An internal error occured." : "Une erreur interne est survenue.", "Please try again or contact your administrator." : "Veuillez réessayer ou contacter votre administrateur.", + "Log in" : "Se connecter", "Wrong password. Reset it?" : "Mot de passe incorrect. Réinitialiser ?", "remember" : "se souvenir de moi", "Alternative Logins" : "Identifiants alternatifs", diff --git a/core/l10n/gl.js b/core/l10n/gl.js index f53866cdc08..583931d5068 100644 --- a/core/l10n/gl.js +++ b/core/l10n/gl.js @@ -243,6 +243,7 @@ OC.L10N.register( "Please contact your administrator." : "Contacte co administrador.", "An internal error occured." : "Produciuse un erro interno.", "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", + "Log in" : "Acceder", "remember" : "lembrar", "Alternative Logins" : "Accesos alternativos", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ola,<br><br>só facerlle saber que %s compartiu <strong>%s</strong> con vostede.<br><a href=\"%s\">Véxao!</a><br><br>", diff --git a/core/l10n/gl.json b/core/l10n/gl.json index 1542d83210c..7d33ed6cc76 100644 --- a/core/l10n/gl.json +++ b/core/l10n/gl.json @@ -241,6 +241,7 @@ "Please contact your administrator." : "Contacte co administrador.", "An internal error occured." : "Produciuse un erro interno.", "Please try again or contact your administrator." : "Ténteo de novo ou póñase en contacto co administrador.", + "Log in" : "Acceder", "remember" : "lembrar", "Alternative Logins" : "Accesos alternativos", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Ola,<br><br>só facerlle saber que %s compartiu <strong>%s</strong> con vostede.<br><a href=\"%s\">Véxao!</a><br><br>", diff --git a/core/l10n/he.js b/core/l10n/he.js index 4692495cccb..3285a569d34 100644 --- a/core/l10n/he.js +++ b/core/l10n/he.js @@ -103,6 +103,7 @@ OC.L10N.register( "Finish setup" : "סיום התקנה", "Log out" : "התנתקות", "Search" : "חיפוש", + "Log in" : "כניסה", "remember" : "שמירת הססמה", "Alternative Logins" : "כניסות אלטרנטיביות" }, diff --git a/core/l10n/he.json b/core/l10n/he.json index fe873e0b02c..5db9f156d09 100644 --- a/core/l10n/he.json +++ b/core/l10n/he.json @@ -101,6 +101,7 @@ "Finish setup" : "סיום התקנה", "Log out" : "התנתקות", "Search" : "חיפוש", + "Log in" : "כניסה", "remember" : "שמירת הססמה", "Alternative Logins" : "כניסות אלטרנטיביות" },"pluralForm" :"nplurals=2; plural=(n != 1);" diff --git a/core/l10n/hr.js b/core/l10n/hr.js index 9d0c1ddeb49..44d9fab7740 100644 --- a/core/l10n/hr.js +++ b/core/l10n/hr.js @@ -199,6 +199,7 @@ OC.L10N.register( "Search" : "pretraži", "Server side authentication failed!" : "Autentikacija na strani poslužitelja nije uspjela!", "Please contact your administrator." : "Molimo kontaktirajte svog administratora.", + "Log in" : "Prijavite se", "remember" : "Sjetite se", "Alternative Logins" : "Alternativne prijave", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej, <br><br> vam upravo javlja da je %s podijelio <strong>%s</strong>s vama.<br><a href=\"%s\">POgledajte!</a><br><br>", diff --git a/core/l10n/hr.json b/core/l10n/hr.json index 1472b8aaa0d..7a6ce98346f 100644 --- a/core/l10n/hr.json +++ b/core/l10n/hr.json @@ -197,6 +197,7 @@ "Search" : "pretraži", "Server side authentication failed!" : "Autentikacija na strani poslužitelja nije uspjela!", "Please contact your administrator." : "Molimo kontaktirajte svog administratora.", + "Log in" : "Prijavite se", "remember" : "Sjetite se", "Alternative Logins" : "Alternativne prijave", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej, <br><br> vam upravo javlja da je %s podijelio <strong>%s</strong>s vama.<br><a href=\"%s\">POgledajte!</a><br><br>", diff --git a/core/l10n/hu_HU.js b/core/l10n/hu_HU.js index ff04fe9900c..7be9e243e88 100644 --- a/core/l10n/hu_HU.js +++ b/core/l10n/hu_HU.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Nem sikerült e-mailt küldeni a következő felhasználóknak: %s", + "Preparing update" : "Felkészülés a frissítésre", "Turned on maintenance mode" : "A karbantartási mód bekapcsolva", "Turned off maintenance mode" : "A karbantartási mód kikapcsolva", "Maintenance mode is kept active" : "Karbantartási mód aktiválva marad", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Javítás hiba:", "Following incompatible apps have been disabled: %s" : "A következő nem kompatibilis applikációk lettek tiltva: %s", "Following apps have been disabled: %s" : "A következő applikációk lettek tiltva: %s", + "Already up to date" : "Már a legfrissebb változat", "File is too big" : "A fájl túl nagy", "Invalid file provided" : "Érvénytelen fájl van megadva", "No image or file provided" : "Nincs kép vagy fájl megadva", @@ -245,6 +247,7 @@ OC.L10N.register( "Please contact your administrator." : "Kérjük, lépjen kapcsolatba a rendszergazdával.", "An internal error occured." : "Belső hiba történt.", "Please try again or contact your administrator." : "Kérem próbálja újra, vagy vegye fel a kapcsolatot a rendszergazdával.", + "Log in" : "Bejelentkezés", "Wrong password. Reset it?" : "Hibás jelszó. Visszaállítja?", "remember" : "emlékezzen", "Alternative Logins" : "Alternatív bejelentkezés", diff --git a/core/l10n/hu_HU.json b/core/l10n/hu_HU.json index d7c20ae181b..63447a4038a 100644 --- a/core/l10n/hu_HU.json +++ b/core/l10n/hu_HU.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Nem sikerült e-mailt küldeni a következő felhasználóknak: %s", + "Preparing update" : "Felkészülés a frissítésre", "Turned on maintenance mode" : "A karbantartási mód bekapcsolva", "Turned off maintenance mode" : "A karbantartási mód kikapcsolva", "Maintenance mode is kept active" : "Karbantartási mód aktiválva marad", @@ -11,6 +12,7 @@ "Repair error: " : "Javítás hiba:", "Following incompatible apps have been disabled: %s" : "A következő nem kompatibilis applikációk lettek tiltva: %s", "Following apps have been disabled: %s" : "A következő applikációk lettek tiltva: %s", + "Already up to date" : "Már a legfrissebb változat", "File is too big" : "A fájl túl nagy", "Invalid file provided" : "Érvénytelen fájl van megadva", "No image or file provided" : "Nincs kép vagy fájl megadva", @@ -243,6 +245,7 @@ "Please contact your administrator." : "Kérjük, lépjen kapcsolatba a rendszergazdával.", "An internal error occured." : "Belső hiba történt.", "Please try again or contact your administrator." : "Kérem próbálja újra, vagy vegye fel a kapcsolatot a rendszergazdával.", + "Log in" : "Bejelentkezés", "Wrong password. Reset it?" : "Hibás jelszó. Visszaállítja?", "remember" : "emlékezzen", "Alternative Logins" : "Alternatív bejelentkezés", diff --git a/core/l10n/id.js b/core/l10n/id.js index 9af2d3bad0c..0540b9ae0bd 100644 --- a/core/l10n/id.js +++ b/core/l10n/id.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Tidak dapat mengirim Email ke pengguna berikut: %s", + "Preparing update" : "Mempersiapkan pembaruan", "Turned on maintenance mode" : "Hidupkan mode perawatan", "Turned off maintenance mode" : "Matikan mode perawatan", "Maintenance mode is kept active" : "Mode Pemeliharaan masih aktif", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Kesalahan perbaikan:", "Following incompatible apps have been disabled: %s" : "Aplikasi tidak kompatibel berikut telah dinonaktifkan: %s", "Following apps have been disabled: %s" : "Aplikasi berikut telah dinonaktifkan: %s", + "Already up to date" : "Sudah yang terbaru", "File is too big" : "Berkas terlalu besar", "Invalid file provided" : "Berkas yang diberikan tidak sah", "No image or file provided" : "Tidak ada gambar atau berkas yang disediakan", @@ -172,6 +174,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", "The update was successful. Redirecting you to ownCloud now." : "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.", "Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah", + "Couldn't reset password because the token is expired" : "Tidak dapat menyetel ulang sandi karena token telah kadaluarsa", "Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.", "%s password reset" : "%s sandi disetel ulang", diff --git a/core/l10n/id.json b/core/l10n/id.json index 79a84db45c5..d03ae4ae4ec 100644 --- a/core/l10n/id.json +++ b/core/l10n/id.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Tidak dapat mengirim Email ke pengguna berikut: %s", + "Preparing update" : "Mempersiapkan pembaruan", "Turned on maintenance mode" : "Hidupkan mode perawatan", "Turned off maintenance mode" : "Matikan mode perawatan", "Maintenance mode is kept active" : "Mode Pemeliharaan masih aktif", @@ -11,6 +12,7 @@ "Repair error: " : "Kesalahan perbaikan:", "Following incompatible apps have been disabled: %s" : "Aplikasi tidak kompatibel berikut telah dinonaktifkan: %s", "Following apps have been disabled: %s" : "Aplikasi berikut telah dinonaktifkan: %s", + "Already up to date" : "Sudah yang terbaru", "File is too big" : "Berkas terlalu besar", "Invalid file provided" : "Berkas yang diberikan tidak sah", "No image or file provided" : "Tidak ada gambar atau berkas yang disediakan", @@ -170,6 +172,7 @@ "The update was successful. There were warnings." : "Pembaruan telah berhasil. Terdapat peringatan.", "The update was successful. Redirecting you to ownCloud now." : "Pembaruan sukses. Anda akan diarahkan ulang ke ownCloud.", "Couldn't reset password because the token is invalid" : "Tidak dapat menyetel ulang sandi karena token tidak sah", + "Couldn't reset password because the token is expired" : "Tidak dapat menyetel ulang sandi karena token telah kadaluarsa", "Couldn't send reset email. Please make sure your username is correct." : "Tidak dapat menyetel ulang email. Mohon pastikan nama pengguna Anda benar.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Tidak dapat menyetel ulang email karena tidak ada alamat email untuk nama pengguna ini. Silakan hubungi Administrator Anda.", "%s password reset" : "%s sandi disetel ulang", diff --git a/core/l10n/is.js b/core/l10n/is.js index c8fec41dc8f..64cc78ea048 100644 --- a/core/l10n/is.js +++ b/core/l10n/is.js @@ -248,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "Vinsamlegast hafðu samband við kerfisstjóra.", "An internal error occured." : "Innri villa kom upp.", "Please try again or contact your administrator." : "Vinsamlegast reyndu aftur eða hafðu samband við kerfisstjóra.", + "Log in" : "Skrá inn", "Wrong password. Reset it?" : "Rangt lykilorð. Endursetja?", "remember" : "muna eftir mér", "Alternative Logins" : "Aðrar Innskráningar", diff --git a/core/l10n/is.json b/core/l10n/is.json index 638e5267ea0..b6255b1764e 100644 --- a/core/l10n/is.json +++ b/core/l10n/is.json @@ -246,6 +246,7 @@ "Please contact your administrator." : "Vinsamlegast hafðu samband við kerfisstjóra.", "An internal error occured." : "Innri villa kom upp.", "Please try again or contact your administrator." : "Vinsamlegast reyndu aftur eða hafðu samband við kerfisstjóra.", + "Log in" : "Skrá inn", "Wrong password. Reset it?" : "Rangt lykilorð. Endursetja?", "remember" : "muna eftir mér", "Alternative Logins" : "Aðrar Innskráningar", diff --git a/core/l10n/ja.js b/core/l10n/ja.js index fbdd112cb08..9c8d681f379 100644 --- a/core/l10n/ja.js +++ b/core/l10n/ja.js @@ -245,6 +245,7 @@ OC.L10N.register( "Please contact your administrator." : "管理者に問い合わせてください。", "An internal error occured." : "内部エラーが発生しました。", "Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。", + "Log in" : "ログイン", "Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?", "remember" : "パスワードを保存", "Alternative Logins" : "代替ログイン", diff --git a/core/l10n/ja.json b/core/l10n/ja.json index c31bd5aba9e..ad18b1f98ed 100644 --- a/core/l10n/ja.json +++ b/core/l10n/ja.json @@ -243,6 +243,7 @@ "Please contact your administrator." : "管理者に問い合わせてください。", "An internal error occured." : "内部エラーが発生しました。", "Please try again or contact your administrator." : "もう一度試してみるか、管理者に問い合わせてください。", + "Log in" : "ログイン", "Wrong password. Reset it?" : "パスワードが間違っています。リセットしますか?", "remember" : "パスワードを保存", "Alternative Logins" : "代替ログイン", diff --git a/core/l10n/ka_GE.js b/core/l10n/ka_GE.js index eef607f316d..d6ae525c861 100644 --- a/core/l10n/ka_GE.js +++ b/core/l10n/ka_GE.js @@ -102,6 +102,7 @@ OC.L10N.register( "Finish setup" : "კონფიგურაციის დასრულება", "Log out" : "გამოსვლა", "Search" : "ძებნა", + "Log in" : "შესვლა", "remember" : "დამახსოვრება", "Alternative Logins" : "ალტერნატიული Login–ი" }, diff --git a/core/l10n/ka_GE.json b/core/l10n/ka_GE.json index dad6746fe94..85fecffe0c0 100644 --- a/core/l10n/ka_GE.json +++ b/core/l10n/ka_GE.json @@ -100,6 +100,7 @@ "Finish setup" : "კონფიგურაციის დასრულება", "Log out" : "გამოსვლა", "Search" : "ძებნა", + "Log in" : "შესვლა", "remember" : "დამახსოვრება", "Alternative Logins" : "ალტერნატიული Login–ი" },"pluralForm" :"nplurals=1; plural=0;" diff --git a/core/l10n/lb.js b/core/l10n/lb.js index 6bbc675150e..4fa998c42f7 100644 --- a/core/l10n/lb.js +++ b/core/l10n/lb.js @@ -120,6 +120,7 @@ OC.L10N.register( "Finishing …" : "Schléissen of ...", "Log out" : "Ofmellen", "Search" : "Sichen", + "Log in" : "Umellen", "remember" : "verhalen", "Alternative Logins" : "Alternativ Umeldungen", "Thank you for your patience." : "Merci fir deng Gedold." diff --git a/core/l10n/lb.json b/core/l10n/lb.json index 4a8fcce1136..0a201c98f1c 100644 --- a/core/l10n/lb.json +++ b/core/l10n/lb.json @@ -118,6 +118,7 @@ "Finishing …" : "Schléissen of ...", "Log out" : "Ofmellen", "Search" : "Sichen", + "Log in" : "Umellen", "remember" : "verhalen", "Alternative Logins" : "Alternativ Umeldungen", "Thank you for your patience." : "Merci fir deng Gedold." diff --git a/core/l10n/lt_LT.js b/core/l10n/lt_LT.js index 41f012b6f07..f36b66dcf52 100644 --- a/core/l10n/lt_LT.js +++ b/core/l10n/lt_LT.js @@ -156,6 +156,7 @@ OC.L10N.register( "Search" : "Ieškoti", "Server side authentication failed!" : "Autentikacija serveryje nepavyko!", "Please contact your administrator." : "Kreipkitės į savo sistemos administratorių.", + "Log in" : "Prisijungti", "remember" : "prisiminti", "Alternative Logins" : "Alternatyvūs prisijungimai", "This ownCloud instance is currently in single user mode." : "Ši ownCloud sistema yra vieno naudotojo veiksenoje.", diff --git a/core/l10n/lt_LT.json b/core/l10n/lt_LT.json index 7b6ad9e4907..5261b7ee070 100644 --- a/core/l10n/lt_LT.json +++ b/core/l10n/lt_LT.json @@ -154,6 +154,7 @@ "Search" : "Ieškoti", "Server side authentication failed!" : "Autentikacija serveryje nepavyko!", "Please contact your administrator." : "Kreipkitės į savo sistemos administratorių.", + "Log in" : "Prisijungti", "remember" : "prisiminti", "Alternative Logins" : "Alternatyvūs prisijungimai", "This ownCloud instance is currently in single user mode." : "Ši ownCloud sistema yra vieno naudotojo veiksenoje.", diff --git a/core/l10n/lv.js b/core/l10n/lv.js index 526ef6846c0..d7905ef30a7 100644 --- a/core/l10n/lv.js +++ b/core/l10n/lv.js @@ -119,6 +119,7 @@ OC.L10N.register( "Finish setup" : "Pabeigt iestatīšanu", "Log out" : "Izrakstīties", "Search" : "Meklēt", + "Log in" : "Ierakstīties", "remember" : "atcerēties", "Alternative Logins" : "Alternatīvās pieteikšanās" }, diff --git a/core/l10n/lv.json b/core/l10n/lv.json index c40bb4757d8..49188f77e89 100644 --- a/core/l10n/lv.json +++ b/core/l10n/lv.json @@ -117,6 +117,7 @@ "Finish setup" : "Pabeigt iestatīšanu", "Log out" : "Izrakstīties", "Search" : "Meklēt", + "Log in" : "Ierakstīties", "remember" : "atcerēties", "Alternative Logins" : "Alternatīvās pieteikšanās" },"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" diff --git a/core/l10n/mk.js b/core/l10n/mk.js index bbc073bce0b..e960bb4b7f6 100644 --- a/core/l10n/mk.js +++ b/core/l10n/mk.js @@ -168,6 +168,7 @@ OC.L10N.register( "Search" : "Барај", "Server side authentication failed!" : "Автентификацијата на серверската страна е неуспешна!", "Please contact your administrator." : "Ве молиме контактирајте го вашиот администратор.", + "Log in" : "Најава", "remember" : "запамти", "Alternative Logins" : "Алтернативни најавувања", "Contact your system administrator if this message persists or appeared unexpectedly." : "Контактирајте го вашиот систем администратор до колку оваа порака продолжи да се појавува или пак се појавува ненадејно.", diff --git a/core/l10n/mk.json b/core/l10n/mk.json index 88a4ee81934..722af208b2c 100644 --- a/core/l10n/mk.json +++ b/core/l10n/mk.json @@ -166,6 +166,7 @@ "Search" : "Барај", "Server side authentication failed!" : "Автентификацијата на серверската страна е неуспешна!", "Please contact your administrator." : "Ве молиме контактирајте го вашиот администратор.", + "Log in" : "Најава", "remember" : "запамти", "Alternative Logins" : "Алтернативни најавувања", "Contact your system administrator if this message persists or appeared unexpectedly." : "Контактирајте го вашиот систем администратор до колку оваа порака продолжи да се појавува или пак се појавува ненадејно.", diff --git a/core/l10n/nb_NO.js b/core/l10n/nb_NO.js index 352a0ce78a9..2dc995b2a98 100644 --- a/core/l10n/nb_NO.js +++ b/core/l10n/nb_NO.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Klarte ikke å sende mail til følgende brukere: %s", + "Preparing update" : "Forbereder oppdatering", "Turned on maintenance mode" : "Slo på vedlikeholdsmodus", "Turned off maintenance mode" : "Slo av vedlikeholdsmodus", "Maintenance mode is kept active" : "Vedlikeholdsmodus blir beholdt aktiv", @@ -13,6 +14,8 @@ OC.L10N.register( "Repair error: " : "Feil ved reparering: ", "Following incompatible apps have been disabled: %s" : "Følgende inkompatible apper har blitt deaktivert: %s", "Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s", + "Already up to date" : "Allerede oppdatert", + "File is too big" : "Filen er for stor", "Invalid file provided" : "Ugyldig fil oppgitt", "No image or file provided" : "Bilde eller fil ikke angitt", "Unknown filetype" : "Ukjent filtype", @@ -35,6 +38,13 @@ OC.L10N.register( "Thu." : "To.", "Fri." : "Fr.", "Sat." : "Lø.", + "Su" : "Sø", + "Mo" : "Ma", + "Tu" : "Ti", + "We" : "On", + "Th" : "To", + "Fr" : "Fr", + "Sa" : "Lø", "January" : "Januar", "February" : "Februar", "March" : "Mars", @@ -94,6 +104,8 @@ OC.L10N.register( "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.", "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din PHP-versjon ({version}) er ikke <a href=\"{phpLink}\">støttet av PHP</a> lenger. Vi oppfordrer deg til å oppgradere din PHP-versjon for å nyte fordel av ytelses- og sikkerhetsoppdateringer som tilbys av PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Konfigurasjon av reverse proxy-headers er ikke korrekt, eller du aksesserer ownCloud fra en \"trusted proxy\". Hvis du ikke aksesserer ownCloud fra en \"trusted proxy\", er dette en sikkerhetsrisiko som kan la en angriper forfalske IP-addressen sin slik den oppfattes av ownCloud. Mer informasjon i <a href=\"{docLink}\">dokumentasjonen</a>.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", @@ -162,6 +174,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.", "The update was successful. Redirecting you to ownCloud now." : "Oppdateringen var vellykket. Du omdirigeres nå til ownCloud.", "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.", + "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi token er utløpt.", "Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.", "%s password reset" : "%s tilbakestilling av passord", @@ -235,6 +248,8 @@ OC.L10N.register( "Please contact your administrator." : "Vennligst kontakt administratoren din.", "An internal error occured." : "Det oppstod en intern feil.", "Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.", + "Log in" : "Logg inn", + "Wrong password. Reset it?" : "Feil passord. Nullstille det?", "remember" : "husk", "Alternative Logins" : "Alternative innlogginger", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>Dette er en beskjed om at %s delte <strong>%s</strong> med deg.<br><a href=\"%s\">Vis den!</a><br><br>", @@ -246,6 +261,10 @@ OC.L10N.register( "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Vennligst kontakt administratoren. Hvis du er administrator for denne instansen, konfigurer innstillingen \"trusted_domain\" i config/config.php. En eksempelkonfigurasjon er gitt i config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Avhengig av konfigurasjonen kan du, som administrator, kanskje også bruke kanppen nedenfor til å stole på dette domenet.", "Add \"%s\" as trusted domain" : "Legg til \"%s\" som et tiltrodd domene", + "App update required" : "App-oppdatering kreves", + "%s will be updated to version %s" : "%s vil bli oppdatert til versjon %s", + "These apps will be updated:" : "Disse appene vil bli oppdatert:", + "These incompatible apps will be disabled:" : "Disse ikke-kompatible appene vil bli deaktivert:", "The theme %s has been disabled." : "Temaet %s har blitt deaktivert.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.", "Start update" : "Start oppdatering", diff --git a/core/l10n/nb_NO.json b/core/l10n/nb_NO.json index 22afa2b9c92..528913e424a 100644 --- a/core/l10n/nb_NO.json +++ b/core/l10n/nb_NO.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Klarte ikke å sende mail til følgende brukere: %s", + "Preparing update" : "Forbereder oppdatering", "Turned on maintenance mode" : "Slo på vedlikeholdsmodus", "Turned off maintenance mode" : "Slo av vedlikeholdsmodus", "Maintenance mode is kept active" : "Vedlikeholdsmodus blir beholdt aktiv", @@ -11,6 +12,8 @@ "Repair error: " : "Feil ved reparering: ", "Following incompatible apps have been disabled: %s" : "Følgende inkompatible apper har blitt deaktivert: %s", "Following apps have been disabled: %s" : "Følgende apper har blitt deaktivert: %s", + "Already up to date" : "Allerede oppdatert", + "File is too big" : "Filen er for stor", "Invalid file provided" : "Ugyldig fil oppgitt", "No image or file provided" : "Bilde eller fil ikke angitt", "Unknown filetype" : "Ukjent filtype", @@ -33,6 +36,13 @@ "Thu." : "To.", "Fri." : "Fr.", "Sat." : "Lø.", + "Su" : "Sø", + "Mo" : "Ma", + "Tu" : "Ti", + "We" : "On", + "Th" : "To", + "Fr" : "Fr", + "Sa" : "Lø", "January" : "Januar", "February" : "Februar", "March" : "Mars", @@ -92,6 +102,8 @@ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "Datamappen og filene dine er sannsynligvis tilgjengelige fra Internett. .htaccess-filen fungerer ikke. Vi anbefaler sterkt at du konfigurerer web-serveren slik at datamappen ikke kan aksesseres eller at du flytter datamappen ut av web-serverens dokumentrot.", "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Intet minne-cache er konfigurert. For å forbedre ytelsen, installer et minne-cache hvis tilgjengelig. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom kan ikke leses av PHP, noe som er sterkt frarådet av sikkerhetshensyn. Mer informasjon finnes i <a href=\"{docLink}\">dokumentasjonen</a>.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Din PHP-versjon ({version}) er ikke <a href=\"{phpLink}\">støttet av PHP</a> lenger. Vi oppfordrer deg til å oppgradere din PHP-versjon for å nyte fordel av ytelses- og sikkerhetsoppdateringer som tilbys av PHP.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Konfigurasjon av reverse proxy-headers er ikke korrekt, eller du aksesserer ownCloud fra en \"trusted proxy\". Hvis du ikke aksesserer ownCloud fra en \"trusted proxy\", er dette en sikkerhetsrisiko som kan la en angriper forfalske IP-addressen sin slik den oppfattes av ownCloud. Mer informasjon i <a href=\"{docLink}\">dokumentasjonen</a>.", "Error occurred while checking server setup" : "Feil oppstod ved sjekking av server-oppsett", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "HTTP-header \"{header}\" er ikke konfigurert lik \"{expected}\". Dette kan være en sikkerhetsrisiko og vi anbefaler at denne innstillingen endres.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP header \"Strict-Transport-Security\" er ikke konfigurert til minst \"{seconds}\" sekunder. For beste sikkerhet anbefaler vi at HSTS aktiveres som beskrevet i <a href=\"{docUrl}\">sikkerhetstips</a>.", @@ -160,6 +172,7 @@ "The update was successful. There were warnings." : "Oppdateringen var vellykket. Det oppstod advarsler.", "The update was successful. Redirecting you to ownCloud now." : "Oppdateringen var vellykket. Du omdirigeres nå til ownCloud.", "Couldn't reset password because the token is invalid" : "Klarte ikke å tilbakestille passordet fordi token er ugyldig.", + "Couldn't reset password because the token is expired" : "Klarte ikke å tilbakestille passordet fordi token er utløpt.", "Couldn't send reset email. Please make sure your username is correct." : "Klarte ikke å sende e-post for tilbakestilling av passord. Sjekk at brukernavnet ditt er korrekt.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Klarte ikke å sende e-post for tilbakestilling av passord fordi det ikke finnes noen e-postadresse for dette brukernavnet. Kontakt administratoren din.", "%s password reset" : "%s tilbakestilling av passord", @@ -233,6 +246,8 @@ "Please contact your administrator." : "Vennligst kontakt administratoren din.", "An internal error occured." : "Det oppstod en intern feil.", "Please try again or contact your administrator." : "Prøv igjen eller kontakt en administrator.", + "Log in" : "Logg inn", + "Wrong password. Reset it?" : "Feil passord. Nullstille det?", "remember" : "husk", "Alternative Logins" : "Alternative innlogginger", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hei,<br><br>Dette er en beskjed om at %s delte <strong>%s</strong> med deg.<br><a href=\"%s\">Vis den!</a><br><br>", @@ -244,6 +259,10 @@ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Vennligst kontakt administratoren. Hvis du er administrator for denne instansen, konfigurer innstillingen \"trusted_domain\" i config/config.php. En eksempelkonfigurasjon er gitt i config/config.sample.php.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Avhengig av konfigurasjonen kan du, som administrator, kanskje også bruke kanppen nedenfor til å stole på dette domenet.", "Add \"%s\" as trusted domain" : "Legg til \"%s\" som et tiltrodd domene", + "App update required" : "App-oppdatering kreves", + "%s will be updated to version %s" : "%s vil bli oppdatert til versjon %s", + "These apps will be updated:" : "Disse appene vil bli oppdatert:", + "These incompatible apps will be disabled:" : "Disse ikke-kompatible appene vil bli deaktivert:", "The theme %s has been disabled." : "Temaet %s har blitt deaktivert.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Forsikre deg om at databasen, config-mappen og datamappen er blitt sikkerhetskopiert før du fortsetter.", "Start update" : "Start oppdatering", diff --git a/core/l10n/pl.js b/core/l10n/pl.js index a26c2b1e2bd..3eda4c2ed9d 100644 --- a/core/l10n/pl.js +++ b/core/l10n/pl.js @@ -206,6 +206,7 @@ OC.L10N.register( "Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!", "Please contact your administrator." : "Skontaktuj się z administratorem", "Please try again or contact your administrator." : "Spróbuj ponownie lub skontaktuj się z administratorem.", + "Log in" : "Zaloguj", "remember" : "pamiętaj", "Alternative Logins" : "Alternatywne loginy", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Witam, <br><br>informuję, że %s udostępnianych zasobów <strong>%s</strong> jest z Tobą.<br><a href=\"%s\">Zobacz!</a><br><br>", diff --git a/core/l10n/pl.json b/core/l10n/pl.json index 0c3524c5cc4..94001147b74 100644 --- a/core/l10n/pl.json +++ b/core/l10n/pl.json @@ -204,6 +204,7 @@ "Server side authentication failed!" : "Uwierzytelnianie po stronie serwera nie powiodło się!", "Please contact your administrator." : "Skontaktuj się z administratorem", "Please try again or contact your administrator." : "Spróbuj ponownie lub skontaktuj się z administratorem.", + "Log in" : "Zaloguj", "remember" : "pamiętaj", "Alternative Logins" : "Alternatywne loginy", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Witam, <br><br>informuję, że %s udostępnianych zasobów <strong>%s</strong> jest z Tobą.<br><a href=\"%s\">Zobacz!</a><br><br>", diff --git a/core/l10n/pt_BR.js b/core/l10n/pt_BR.js index ad5cf69a798..8f1a2878aaa 100644 --- a/core/l10n/pt_BR.js +++ b/core/l10n/pt_BR.js @@ -248,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "Por favor, contate o administrador.", "An internal error occured." : "Ocorreu um erro interno.", "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.", + "Log in" : "Entrar", "Wrong password. Reset it?" : "Senha incorreta. Redefini-la?", "remember" : "lembrar", "Alternative Logins" : "Logins Alternativos", diff --git a/core/l10n/pt_BR.json b/core/l10n/pt_BR.json index bcc3522c430..d07686e7bdd 100644 --- a/core/l10n/pt_BR.json +++ b/core/l10n/pt_BR.json @@ -246,6 +246,7 @@ "Please contact your administrator." : "Por favor, contate o administrador.", "An internal error occured." : "Ocorreu um erro interno.", "Please try again or contact your administrator." : "Por favor tente novamente ou faça contato com o seu administrador.", + "Log in" : "Entrar", "Wrong password. Reset it?" : "Senha incorreta. Redefini-la?", "remember" : "lembrar", "Alternative Logins" : "Logins Alternativos", diff --git a/core/l10n/pt_PT.js b/core/l10n/pt_PT.js index 537efc34728..a5c899a5986 100644 --- a/core/l10n/pt_PT.js +++ b/core/l10n/pt_PT.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Não foi possível enviar a mensagem para os seguintes utilizadores: %s", + "Preparing update" : "A preparar atualização", "Turned on maintenance mode" : "Ativado o modo de manutenção", "Turned off maintenance mode" : "Desativado o modo de manutenção", "Maintenance mode is kept active" : "O modo de manutenção é mantido ativo", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "Corrija o erro:", "Following incompatible apps have been disabled: %s" : "As seguintes apps incompatíveis foram desativadas: %s", "Following apps have been disabled: %s" : "As seguintes apps foram desativadas: %s", + "Already up to date" : "Já está atualizado", "File is too big" : "O ficheiro é muito grande", "Invalid file provided" : "Ficheiro indicado inválido", "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem", @@ -36,6 +38,13 @@ OC.L10N.register( "Thu." : "Qui.", "Fri." : "Sex.", "Sat." : "Sáb.", + "Su" : "Dom", + "Mo" : "Seg", + "Tu" : "Ter", + "We" : "Qua", + "Th" : "Qui", + "Fr" : "Sex", + "Sa" : "Sáb", "January" : "Janeiro", "February" : "Fevereiro", "March" : "Março", @@ -159,6 +168,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "A atualização foi bem sucedida. Tem alguns avisos.", "The update was successful. Redirecting you to ownCloud now." : "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.", "Couldn't reset password because the token is invalid" : "Não foi possível repor a palavra-passe porque a senha é inválida", + "Couldn't reset password because the token is expired" : "Não foi possível repor a palavra-passe porque a senha expirou", "Couldn't send reset email. Please make sure your username is correct." : "Ocorreu um problema com o envio do e-mail, por favor confirme o seu utilizador.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contacte o administrador.", "%s password reset" : "%s reposição da palavra-passe", @@ -232,6 +242,7 @@ OC.L10N.register( "Please contact your administrator." : "Por favor contacte o administrador.", "An internal error occured." : "Ocorreu um erro interno.", "Please try again or contact your administrator." : "Por favor tente de novo ou contacte o administrador.", + "Log in" : "Iniciar Sessão", "Wrong password. Reset it?" : "Senha errada. Repô-la?", "remember" : "lembrar", "Alternative Logins" : "Contas de acesso alternativas", diff --git a/core/l10n/pt_PT.json b/core/l10n/pt_PT.json index 17c5b5dd587..736490eb273 100644 --- a/core/l10n/pt_PT.json +++ b/core/l10n/pt_PT.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Não foi possível enviar a mensagem para os seguintes utilizadores: %s", + "Preparing update" : "A preparar atualização", "Turned on maintenance mode" : "Ativado o modo de manutenção", "Turned off maintenance mode" : "Desativado o modo de manutenção", "Maintenance mode is kept active" : "O modo de manutenção é mantido ativo", @@ -11,6 +12,7 @@ "Repair error: " : "Corrija o erro:", "Following incompatible apps have been disabled: %s" : "As seguintes apps incompatíveis foram desativadas: %s", "Following apps have been disabled: %s" : "As seguintes apps foram desativadas: %s", + "Already up to date" : "Já está atualizado", "File is too big" : "O ficheiro é muito grande", "Invalid file provided" : "Ficheiro indicado inválido", "No image or file provided" : "Não foi fornecido nenhum ficheiro ou imagem", @@ -34,6 +36,13 @@ "Thu." : "Qui.", "Fri." : "Sex.", "Sat." : "Sáb.", + "Su" : "Dom", + "Mo" : "Seg", + "Tu" : "Ter", + "We" : "Qua", + "Th" : "Qui", + "Fr" : "Sex", + "Sa" : "Sáb", "January" : "Janeiro", "February" : "Fevereiro", "March" : "Março", @@ -157,6 +166,7 @@ "The update was successful. There were warnings." : "A atualização foi bem sucedida. Tem alguns avisos.", "The update was successful. Redirecting you to ownCloud now." : "A actualização foi concluída com sucesso. Vai ser redireccionado para o ownCloud agora.", "Couldn't reset password because the token is invalid" : "Não foi possível repor a palavra-passe porque a senha é inválida", + "Couldn't reset password because the token is expired" : "Não foi possível repor a palavra-passe porque a senha expirou", "Couldn't send reset email. Please make sure your username is correct." : "Ocorreu um problema com o envio do e-mail, por favor confirme o seu utilizador.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Ocorreu um problema com o envio do e-mail, por favor contacte o administrador.", "%s password reset" : "%s reposição da palavra-passe", @@ -230,6 +240,7 @@ "Please contact your administrator." : "Por favor contacte o administrador.", "An internal error occured." : "Ocorreu um erro interno.", "Please try again or contact your administrator." : "Por favor tente de novo ou contacte o administrador.", + "Log in" : "Iniciar Sessão", "Wrong password. Reset it?" : "Senha errada. Repô-la?", "remember" : "lembrar", "Alternative Logins" : "Contas de acesso alternativas", diff --git a/core/l10n/si_LK.js b/core/l10n/si_LK.js index be29a54e7b4..9be2cb088a6 100644 --- a/core/l10n/si_LK.js +++ b/core/l10n/si_LK.js @@ -82,6 +82,7 @@ OC.L10N.register( "Finish setup" : "ස්ථාපනය කිරීම අවසන් කරන්න", "Log out" : "නික්මීම", "Search" : "සොයන්න", + "Log in" : "ප්රවේශවන්න", "remember" : "මතක තබාගන්න" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/si_LK.json b/core/l10n/si_LK.json index 68638609324..7626f55acb1 100644 --- a/core/l10n/si_LK.json +++ b/core/l10n/si_LK.json @@ -80,6 +80,7 @@ "Finish setup" : "ස්ථාපනය කිරීම අවසන් කරන්න", "Log out" : "නික්මීම", "Search" : "සොයන්න", + "Log in" : "ප්රවේශවන්න", "remember" : "මතක තබාගන්න" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/sk_SK.js b/core/l10n/sk_SK.js index a08bc9d09f3..2953bc7e0c6 100644 --- a/core/l10n/sk_SK.js +++ b/core/l10n/sk_SK.js @@ -227,6 +227,7 @@ OC.L10N.register( "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.", "An internal error occured." : "Vyskytla sa vnútorná chyba.", "Please try again or contact your administrator." : "Skúste to znovu, alebo sa obráťte na vášho administrátora.", + "Log in" : "Prihlásiť sa", "remember" : "zapamätať", "Alternative Logins" : "Alternatívne prihlásenie", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Dobrý deň,<br><br>Používateľ %s zdieľa s vami súbor, alebo priečinok s názvom »%s«.<br><a href=\"%s\">Pre zobrazenie kliknite na túto linku!</a><br><br>", diff --git a/core/l10n/sk_SK.json b/core/l10n/sk_SK.json index fcb358cdf9c..f39e14ed02a 100644 --- a/core/l10n/sk_SK.json +++ b/core/l10n/sk_SK.json @@ -225,6 +225,7 @@ "Please contact your administrator." : "Kontaktujte prosím vášho administrátora.", "An internal error occured." : "Vyskytla sa vnútorná chyba.", "Please try again or contact your administrator." : "Skúste to znovu, alebo sa obráťte na vášho administrátora.", + "Log in" : "Prihlásiť sa", "remember" : "zapamätať", "Alternative Logins" : "Alternatívne prihlásenie", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Dobrý deň,<br><br>Používateľ %s zdieľa s vami súbor, alebo priečinok s názvom »%s«.<br><a href=\"%s\">Pre zobrazenie kliknite na túto linku!</a><br><br>", diff --git a/core/l10n/sv.js b/core/l10n/sv.js index a5a7895b2cc..27c1255f65b 100644 --- a/core/l10n/sv.js +++ b/core/l10n/sv.js @@ -201,6 +201,7 @@ OC.L10N.register( "Search" : "Sök", "Server side authentication failed!" : "Servern misslyckades med autentisering!", "Please contact your administrator." : "Kontakta din administratör.", + "Log in" : "Logga in", "remember" : "kom ihåg", "Alternative Logins" : "Alternativa inloggningar", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej där,<br><br>ville bara informera dig om att %s delade <strong>%s</strong> med dig.<br><a href=\"%s\">Visa den!</a><br><br>", diff --git a/core/l10n/sv.json b/core/l10n/sv.json index 307fd6afc78..befc73dfc44 100644 --- a/core/l10n/sv.json +++ b/core/l10n/sv.json @@ -199,6 +199,7 @@ "Search" : "Sök", "Server side authentication failed!" : "Servern misslyckades med autentisering!", "Please contact your administrator." : "Kontakta din administratör.", + "Log in" : "Logga in", "remember" : "kom ihåg", "Alternative Logins" : "Alternativa inloggningar", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Hej där,<br><br>ville bara informera dig om att %s delade <strong>%s</strong> med dig.<br><a href=\"%s\">Visa den!</a><br><br>", diff --git a/core/l10n/ta_LK.js b/core/l10n/ta_LK.js index 21025db2fa0..c58dea8366e 100644 --- a/core/l10n/ta_LK.js +++ b/core/l10n/ta_LK.js @@ -93,6 +93,7 @@ OC.L10N.register( "Finish setup" : "அமைப்பை முடிக்க", "Log out" : "விடுபதிகை செய்க", "Search" : "தேடுதல்", + "Log in" : "புகுபதிகை", "remember" : "ஞாபகப்படுத்துக" }, "nplurals=2; plural=(n != 1);"); diff --git a/core/l10n/ta_LK.json b/core/l10n/ta_LK.json index a7f28999023..60ff565dbf2 100644 --- a/core/l10n/ta_LK.json +++ b/core/l10n/ta_LK.json @@ -91,6 +91,7 @@ "Finish setup" : "அமைப்பை முடிக்க", "Log out" : "விடுபதிகை செய்க", "Search" : "தேடுதல்", + "Log in" : "புகுபதிகை", "remember" : "ஞாபகப்படுத்துக" },"pluralForm" :"nplurals=2; plural=(n != 1);" }
\ No newline at end of file diff --git a/core/l10n/th_TH.js b/core/l10n/th_TH.js index 142895dd1d0..f72fa3ee38b 100644 --- a/core/l10n/th_TH.js +++ b/core/l10n/th_TH.js @@ -248,6 +248,7 @@ OC.L10N.register( "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ", "An internal error occured." : "เกิดข้อผิดพลาดภายใน", "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Log in" : "เข้าสู่ระบบ", "Wrong password. Reset it?" : "รหัสผ่านผิด ตั้งค่าใหม่?", "remember" : "จดจำฉัน", "Alternative Logins" : "ทางเลือกการเข้าสู่ระบบ", diff --git a/core/l10n/th_TH.json b/core/l10n/th_TH.json index 88c74d1eb4c..d808685898d 100644 --- a/core/l10n/th_TH.json +++ b/core/l10n/th_TH.json @@ -246,6 +246,7 @@ "Please contact your administrator." : "กรุณาติดต่อผู้ดูแลระบบ", "An internal error occured." : "เกิดข้อผิดพลาดภายใน", "Please try again or contact your administrator." : "โปรดลองอีกครั้งหรือติดต่อผู้ดูแลระบบ", + "Log in" : "เข้าสู่ระบบ", "Wrong password. Reset it?" : "รหัสผ่านผิด ตั้งค่าใหม่?", "remember" : "จดจำฉัน", "Alternative Logins" : "ทางเลือกการเข้าสู่ระบบ", diff --git a/core/l10n/tr.js b/core/l10n/tr.js index bedc5ce7e26..c250f919892 100644 --- a/core/l10n/tr.js +++ b/core/l10n/tr.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "Şu kullanıcılara posta gönderilemedi: %s", + "Preparing update" : "Güncelleme hazırlanıyor", "Turned on maintenance mode" : "Bakım kipi etkinleştirildi", "Turned off maintenance mode" : "Bakım kipi kapatıldı", "Maintenance mode is kept active" : "Bakım kipi etkin tutuldu", @@ -13,6 +14,8 @@ OC.L10N.register( "Repair error: " : "Onarım hatası:", "Following incompatible apps have been disabled: %s" : "Aşağıdaki uyumsuz uygulamalar devre dışı bırakıldı: %s", "Following apps have been disabled: %s" : "Aşağıdaki uygulamalar devre dışı bırakıldı: %s", + "Already up to date" : "Zaten güncel", + "File is too big" : "Dosya çok büyük", "Invalid file provided" : "Geçersiz dosya sağlandı", "No image or file provided" : "Resim veya dosya belirtilmedi", "Unknown filetype" : "Bilinmeyen dosya türü", @@ -35,6 +38,13 @@ OC.L10N.register( "Thu." : "Per.", "Fri." : "Cum.", "Sat." : "Cmt.", + "Su" : "Pa", + "Mo" : "Pt", + "Tu" : "Sa", + "We" : "Ça", + "Th" : "Pe", + "Fr" : "Cu", + "Sa" : "Ct", "January" : "Ocak", "February" : "Şubat", "March" : "Mart", @@ -94,6 +104,8 @@ OC.L10N.register( "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye <a href=\"{docLink}\">belgelendirmemizden</a> ulaşabilirsiniz.", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi <a href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Kullandığınız PHP sürümü ({version}) artık <a href=\"{phpLink}\">PHP tarafından desteklenmiyor</a>. PHP tarafından sağlanan performans ve güvenlik güncellemelerinden faydalanmak için PHP sürümünüzü güncellemenizi öneririz.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırması hatalı veya ownCloud'a güvenilen bir vekil sunucusundan erişiyorsunuz. ownCloud'a güvenilen bir vekil sunucusundan erişmiyorsanız bu bir güvenlik problemidir ve bir saldırganın IP adresinizi taklit etmesine izin verebilir. Ayrıntılı bilgiyi <a href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> belirtilen HSTS etkinleştirmesini öneririz.", @@ -162,6 +174,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "Güncelleme başarılı. Uyarılar mevcut.", "The update was successful. Redirecting you to ownCloud now." : "Güncelleme başarılı. Şimdi ownCloud'a yönlendiriliyorsunuz.", "Couldn't reset password because the token is invalid" : "Belirteç geçersiz olduğundan parola sıfırlanamadı", + "Couldn't reset password because the token is expired" : "Jeton zaman aşımına uğradığından parola sıfırlanamadı", "Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Sıfırlama e-postası, bu kullanıcı için bir e-posta adresi olmadığından gönderilemedi. Lütfen yöneticiniz ile iletişime geçin.", "%s password reset" : "%s parola sıfırlama", @@ -235,6 +248,8 @@ OC.L10N.register( "Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.", "An internal error occured." : "Dahili bir hata oluştu.", "Please try again or contact your administrator." : "Lütfen yeniden deneyin veya yöneticinizle iletişim kurun.", + "Log in" : "Giriş yap", + "Wrong password. Reset it?" : "Hatalı parola. Sıfırlansın mı?", "remember" : "hatırla", "Alternative Logins" : "Alternatif Girişler", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Merhaba, <br><br>%s kullanıcısının sizinle <strong>%s</strong> paylaşımında bulunduğunu bildirmek istedik.<br><a href=\"%s\">Paylaşımı gör!</a><br><br>", @@ -246,6 +261,10 @@ OC.L10N.register( "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Lütfen yöneticiniz ile iletişime geçin. Eğer bu örneğin bir yöneticisi iseniz, config/config.php dosyası içerisindeki \"trusted_domain\" ayarını yapılandırın. Bu yapılandırmanın bir örneği config/config.sample.php dosyasında verilmiştir.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Yapılandırmanıza bağlı olarak, bir yönetici olarak bu alan adına güvenmek için aşağıdaki düğmeyi de kullanabilirsiniz.", "Add \"%s\" as trusted domain" : "\"%s\" alan adını güvenilir olarak ekle", + "App update required" : "Uygulama güncellemesi gerekli", + "%s will be updated to version %s" : "%s, %s sürümüne güncellenecek", + "These apps will be updated:" : "Bu uygulamalar güncellenecek:", + "These incompatible apps will be disabled:" : "Bu uyumsuz uygulamalar kapatılacaklar:", "The theme %s has been disabled." : "%s teması devre dışı bırakıldı.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Devam etmeden önce lütfen veritabanının, yapılandırma ve veri klasörlerinin yedeklenmiş olduğundan emin olun.", "Start update" : "Güncellemeyi başlat", diff --git a/core/l10n/tr.json b/core/l10n/tr.json index 3925a97627d..6fa7aa63c1e 100644 --- a/core/l10n/tr.json +++ b/core/l10n/tr.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "Şu kullanıcılara posta gönderilemedi: %s", + "Preparing update" : "Güncelleme hazırlanıyor", "Turned on maintenance mode" : "Bakım kipi etkinleştirildi", "Turned off maintenance mode" : "Bakım kipi kapatıldı", "Maintenance mode is kept active" : "Bakım kipi etkin tutuldu", @@ -11,6 +12,8 @@ "Repair error: " : "Onarım hatası:", "Following incompatible apps have been disabled: %s" : "Aşağıdaki uyumsuz uygulamalar devre dışı bırakıldı: %s", "Following apps have been disabled: %s" : "Aşağıdaki uygulamalar devre dışı bırakıldı: %s", + "Already up to date" : "Zaten güncel", + "File is too big" : "Dosya çok büyük", "Invalid file provided" : "Geçersiz dosya sağlandı", "No image or file provided" : "Resim veya dosya belirtilmedi", "Unknown filetype" : "Bilinmeyen dosya türü", @@ -33,6 +36,13 @@ "Thu." : "Per.", "Fri." : "Cum.", "Sat." : "Cmt.", + "Su" : "Pa", + "Mo" : "Pt", + "Tu" : "Sa", + "We" : "Ça", + "Th" : "Pe", + "Fr" : "Cu", + "Sa" : "Ct", "January" : "Ocak", "February" : "Şubat", "March" : "Mart", @@ -92,6 +102,8 @@ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "data dizininiz ve dosyalarınız büyük ihtimalle İnternet üzerinden erişilebilir. .htaccess dosyası çalışmıyor. Web sunucunuzu yapılandırarak data dizinine erişimi kapatmanızı veya data dizinini web sunucu belge dizini dışına almanızı şiddetle tavsiye ederiz.", "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Hafıza önbelleği ayarlanmamış. Performansın artması için mümkünse lütfen bir memcache ayarlayın. Detaylı bilgiye <a href=\"{docLink}\">belgelendirmemizden</a> ulaşabilirsiniz.", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Güvenlik sebepleri ile şiddetle kaçınılması gereken /dev/urandom PHP tarafından okunamıyor. Daha fazla bilgi <a href=\"{docLink}\">belgelendirmemizde</a> bulunabilir.", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "Kullandığınız PHP sürümü ({version}) artık <a href=\"{phpLink}\">PHP tarafından desteklenmiyor</a>. PHP tarafından sağlanan performans ve güvenlik güncellemelerinden faydalanmak için PHP sürümünüzü güncellemenizi öneririz.", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "Ters vekil sunucu başlık yapılandırması hatalı veya ownCloud'a güvenilen bir vekil sunucusundan erişiyorsunuz. ownCloud'a güvenilen bir vekil sunucusundan erişmiyorsanız bu bir güvenlik problemidir ve bir saldırganın IP adresinizi taklit etmesine izin verebilir. Ayrıntılı bilgiyi <a href=\"{docLink}\">belgelendirmemizde</a> bulabilirsiniz.", "Error occurred while checking server setup" : "Sunucu yapılandırması denetlenirken hata oluştu", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP başlığı \"{expected}\" ile eşleşmek üzere yapılandırılmamış. Bu muhtemel bir güvenlik veya gizlilik riski olduğundan bu ayarı düzeltmenizi öneririz.", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "\"Strict-Transport-Security\" HTTP başlığı en az \"{seconds}\" saniye olarak ayarlanmış. İyileştirilmiş güvenlik için <a href=\"{docUrl}\">güvenlik ipuçlarımızda</a> belirtilen HSTS etkinleştirmesini öneririz.", @@ -160,6 +172,7 @@ "The update was successful. There were warnings." : "Güncelleme başarılı. Uyarılar mevcut.", "The update was successful. Redirecting you to ownCloud now." : "Güncelleme başarılı. Şimdi ownCloud'a yönlendiriliyorsunuz.", "Couldn't reset password because the token is invalid" : "Belirteç geçersiz olduğundan parola sıfırlanamadı", + "Couldn't reset password because the token is expired" : "Jeton zaman aşımına uğradığından parola sıfırlanamadı", "Couldn't send reset email. Please make sure your username is correct." : "Sıfırlama e-postası gönderilemedi. Lütfen kullanıcı adınızın doğru olduğundan emin olun.", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "Sıfırlama e-postası, bu kullanıcı için bir e-posta adresi olmadığından gönderilemedi. Lütfen yöneticiniz ile iletişime geçin.", "%s password reset" : "%s parola sıfırlama", @@ -233,6 +246,8 @@ "Please contact your administrator." : "Lütfen sistem yöneticiniz ile iletişime geçin.", "An internal error occured." : "Dahili bir hata oluştu.", "Please try again or contact your administrator." : "Lütfen yeniden deneyin veya yöneticinizle iletişim kurun.", + "Log in" : "Giriş yap", + "Wrong password. Reset it?" : "Hatalı parola. Sıfırlansın mı?", "remember" : "hatırla", "Alternative Logins" : "Alternatif Girişler", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Merhaba, <br><br>%s kullanıcısının sizinle <strong>%s</strong> paylaşımında bulunduğunu bildirmek istedik.<br><a href=\"%s\">Paylaşımı gör!</a><br><br>", @@ -244,6 +259,10 @@ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "Lütfen yöneticiniz ile iletişime geçin. Eğer bu örneğin bir yöneticisi iseniz, config/config.php dosyası içerisindeki \"trusted_domain\" ayarını yapılandırın. Bu yapılandırmanın bir örneği config/config.sample.php dosyasında verilmiştir.", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "Yapılandırmanıza bağlı olarak, bir yönetici olarak bu alan adına güvenmek için aşağıdaki düğmeyi de kullanabilirsiniz.", "Add \"%s\" as trusted domain" : "\"%s\" alan adını güvenilir olarak ekle", + "App update required" : "Uygulama güncellemesi gerekli", + "%s will be updated to version %s" : "%s, %s sürümüne güncellenecek", + "These apps will be updated:" : "Bu uygulamalar güncellenecek:", + "These incompatible apps will be disabled:" : "Bu uyumsuz uygulamalar kapatılacaklar:", "The theme %s has been disabled." : "%s teması devre dışı bırakıldı.", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "Devam etmeden önce lütfen veritabanının, yapılandırma ve veri klasörlerinin yedeklenmiş olduğundan emin olun.", "Start update" : "Güncellemeyi başlat", diff --git a/core/l10n/uk.js b/core/l10n/uk.js index ab5689e64f1..e73f854f5e1 100644 --- a/core/l10n/uk.js +++ b/core/l10n/uk.js @@ -229,6 +229,7 @@ OC.L10N.register( "Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.", "An internal error occured." : "Виникла внутрішня помилка.", "Please try again or contact your administrator." : "Будь ласка, спробуйте ще раз або зверніться до адміністратора.", + "Log in" : "Увійти", "remember" : "запам'ятати", "Alternative Logins" : "Альтернативні імена користувача", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто повідомляємо вам, що %s поділився »%s« з вами.<br><a href=\"%s\">Перегляньте!</a><br><br>", diff --git a/core/l10n/uk.json b/core/l10n/uk.json index 7d92acb3cc9..09326dcf44e 100644 --- a/core/l10n/uk.json +++ b/core/l10n/uk.json @@ -227,6 +227,7 @@ "Please contact your administrator." : "Будь ласка, зверніться до вашого Адміністратора.", "An internal error occured." : "Виникла внутрішня помилка.", "Please try again or contact your administrator." : "Будь ласка, спробуйте ще раз або зверніться до адміністратора.", + "Log in" : "Увійти", "remember" : "запам'ятати", "Alternative Logins" : "Альтернативні імена користувача", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "Агов,<br><br>просто повідомляємо вам, що %s поділився »%s« з вами.<br><a href=\"%s\">Перегляньте!</a><br><br>", diff --git a/core/l10n/vi.js b/core/l10n/vi.js index c51c1563fe4..229a99b2c29 100644 --- a/core/l10n/vi.js +++ b/core/l10n/vi.js @@ -141,6 +141,7 @@ OC.L10N.register( "Search" : "Tìm kiếm", "Server side authentication failed!" : "Xác thực phía máy chủ không thành công!", "Please contact your administrator." : "Vui lòng liên hệ với quản trị viên.", + "Log in" : "Đăng nhập", "remember" : "ghi nhớ", "Alternative Logins" : "Đăng nhập khác", "This ownCloud instance is currently in single user mode." : "OwnCloud trong trường hợp này đang ở chế độ người dùng duy nhất.", diff --git a/core/l10n/vi.json b/core/l10n/vi.json index ba8015cafb4..e2f6e5a7ecc 100644 --- a/core/l10n/vi.json +++ b/core/l10n/vi.json @@ -139,6 +139,7 @@ "Search" : "Tìm kiếm", "Server side authentication failed!" : "Xác thực phía máy chủ không thành công!", "Please contact your administrator." : "Vui lòng liên hệ với quản trị viên.", + "Log in" : "Đăng nhập", "remember" : "ghi nhớ", "Alternative Logins" : "Đăng nhập khác", "This ownCloud instance is currently in single user mode." : "OwnCloud trong trường hợp này đang ở chế độ người dùng duy nhất.", diff --git a/core/l10n/zh_CN.js b/core/l10n/zh_CN.js index e82635fe946..e8f87ff5900 100644 --- a/core/l10n/zh_CN.js +++ b/core/l10n/zh_CN.js @@ -2,6 +2,7 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "无法发送邮件到用户: %s ", + "Preparing update" : "正在准备更新", "Turned on maintenance mode" : "启用维护模式", "Turned off maintenance mode" : "关闭维护模式", "Maintenance mode is kept active" : "维护模式已被启用", @@ -13,6 +14,7 @@ OC.L10N.register( "Repair error: " : "修复错误:", "Following incompatible apps have been disabled: %s" : "下列不兼容应用已经被禁用:%s", "Following apps have been disabled: %s" : "下列应用已经被禁用:%s", + "Already up to date" : "已经是最新", "File is too big" : "文件太大", "Invalid file provided" : "提供了无效文件", "No image or file provided" : "没有提供图片或文件", @@ -36,6 +38,13 @@ OC.L10N.register( "Thu." : "周四", "Fri." : "周五", "Sat." : "周六", + "Su" : "Su", + "Mo" : "Mo", + "Tu" : "Tu", + "We" : "We", + "Th" : "Th", + "Fr" : "Fr", + "Sa" : "Sa", "January" : "一月", "February" : "二月", "March" : "三月", @@ -95,6 +104,8 @@ OC.L10N.register( "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。", "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的<a href=\"{docLink}\">文档</a> 。", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看<a href=\"{docLink}\">文档</a>了解详情。", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "你的 PHP 版本 ({version}) 不再被 <a href=\"{phpLink}\"> PHP </a>支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 <a href=\"{docLink}\">文档</a>。", "Error occurred while checking server setup" : "当检查服务器启动时出错", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\">安全提示</a>启用 HSTS。", @@ -163,6 +174,7 @@ OC.L10N.register( "The update was successful. There were warnings." : "更新成功。有警告。", "The update was successful. Redirecting you to ownCloud now." : "更新成功。正在重定向至 ownCloud。", "Couldn't reset password because the token is invalid" : "令牌无效,无法重置密码", + "Couldn't reset password because the token is expired" : "无法重设密码,因为令牌已过期", "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。", "%s password reset" : "重置 %s 的密码", @@ -236,6 +248,8 @@ OC.L10N.register( "Please contact your administrator." : "请联系你的管理员。", "An internal error occured." : "发生了内部错误。", "Please try again or contact your administrator." : "请重试或联系管理员。", + "Log in" : "登录", + "Wrong password. Reset it?" : "密码错误。要重置么?", "remember" : "记住", "Alternative Logins" : "其他登录方式", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨、你好,<br><br>只想让你知道 %s 分享了 <strong>%s</strong> 给你。<br><a href=\"%s\">现在查看!</a><br><br>", @@ -247,6 +261,10 @@ OC.L10N.register( "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "请联系你的系统管理员。如果你是系统管理员,配置config/config.php文件中参数\"trusted_domain\" 设置。可以在config/config.sample.php文件中找到例子。", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "基于你的配置,作为系统管理员,你可能还能点击下面的按钮来信任这个域。", "Add \"%s\" as trusted domain" : "添加 \"%s\"为信任域", + "App update required" : "必须的应用更新", + "%s will be updated to version %s" : "%s 将会更新至版本 %s", + "These apps will be updated:" : "以下应用将被更新:", + "These incompatible apps will be disabled:" : "这些不兼容的应用程序将被禁用:", "The theme %s has been disabled." : "%s 主题已被禁用。", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。", "Start update" : "开始更新", diff --git a/core/l10n/zh_CN.json b/core/l10n/zh_CN.json index d47be1b0c5d..7bed1beaa9c 100644 --- a/core/l10n/zh_CN.json +++ b/core/l10n/zh_CN.json @@ -1,5 +1,6 @@ { "translations": { "Couldn't send mail to following users: %s " : "无法发送邮件到用户: %s ", + "Preparing update" : "正在准备更新", "Turned on maintenance mode" : "启用维护模式", "Turned off maintenance mode" : "关闭维护模式", "Maintenance mode is kept active" : "维护模式已被启用", @@ -11,6 +12,7 @@ "Repair error: " : "修复错误:", "Following incompatible apps have been disabled: %s" : "下列不兼容应用已经被禁用:%s", "Following apps have been disabled: %s" : "下列应用已经被禁用:%s", + "Already up to date" : "已经是最新", "File is too big" : "文件太大", "Invalid file provided" : "提供了无效文件", "No image or file provided" : "没有提供图片或文件", @@ -34,6 +36,13 @@ "Thu." : "周四", "Fri." : "周五", "Sat." : "周六", + "Su" : "Su", + "Mo" : "Mo", + "Tu" : "Tu", + "We" : "We", + "Th" : "Th", + "Fr" : "Fr", + "Sa" : "Sa", "January" : "一月", "February" : "二月", "March" : "三月", @@ -93,6 +102,8 @@ "Your data directory and your files are probably accessible from the Internet. The .htaccess file is not working. We strongly suggest that you configure your web server in a way that the data directory is no longer accessible or you move the data directory outside the web server document root." : "你的数据目录和你的文件可能从互联网被访问到。.htaccess 文件不工作。我们强烈建议你配置你的网页服务器,使数据目录不再可访问,或者将数据目录移动到网页服务器根文档目录之外。", "No memory cache has been configured. To enhance your performance please configure a memcache if available. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "内存缓存未配置。如果可用,请配置 memcache 来增强性能。更多信息请查看我们的<a href=\"{docLink}\">文档</a> 。", "/dev/urandom is not readable by PHP which is highly discouraged for security reasons. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "/dev/urandom 无法被 PHP 读取,处于安全原因,这是强烈不推荐的。请查看<a href=\"{docLink}\">文档</a>了解详情。", + "Your PHP version ({version}) is no longer <a href=\"{phpLink}\">supported by PHP</a>. We encourage you to upgrade your PHP version to take advantage of performance and security updates provided by PHP." : "你的 PHP 版本 ({version}) 不再被 <a href=\"{phpLink}\"> PHP </a>支持。我们建议您升级您的PHP版本,以便获得 PHP 性能和安全提升。", + "The reverse proxy headers configuration is incorrect, or you are accessing ownCloud from a trusted proxy. If you are not accessing ownCloud from a trusted proxy, this is a security issue and can allow an attacker to spoof their IP address as visible to ownCloud. Further information can be found in our <a href=\"{docLink}\">documentation</a>." : "反向代理头配置不正确,或者您正从一个受信任的代理访问ownCloud。如果你不是通过受信任的代理访问 ownCloud,这将引发一个安全问题,可能由于 ownCloud IP 地址可见导致欺骗攻击。更多信息可以查看我们的 <a href=\"{docLink}\">文档</a>。", "Error occurred while checking server setup" : "当检查服务器启动时出错", "The \"{header}\" HTTP header is not configured to equal to \"{expected}\". This is a potential security or privacy risk and we recommend adjusting this setting." : "\"{header}\" HTTP 头部没有配置和 \"{expected}\" 的一样。这是一个潜在的安全或者隐私风险,我们调整这项设置。", "The \"Strict-Transport-Security\" HTTP header is not configured to least \"{seconds}\" seconds. For enhanced security we recommend enabling HSTS as described in our <a href=\"{docUrl}\">security tips</a>." : "HTTP 严格传输安全(Strict-Transport-Security)报头未配置到至少“{seconds}”秒。处于增强安全性考虑,我们推荐按照<a href=\"{docUrl}\">安全提示</a>启用 HSTS。", @@ -161,6 +172,7 @@ "The update was successful. There were warnings." : "更新成功。有警告。", "The update was successful. Redirecting you to ownCloud now." : "更新成功。正在重定向至 ownCloud。", "Couldn't reset password because the token is invalid" : "令牌无效,无法重置密码", + "Couldn't reset password because the token is expired" : "无法重设密码,因为令牌已过期", "Couldn't send reset email. Please make sure your username is correct." : "无法发送重置邮件,请检查您的用户名是否正确。", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "此用户名的电子邮件地址不存在导致无法发送重置邮件,请联系管理员。", "%s password reset" : "重置 %s 的密码", @@ -234,6 +246,8 @@ "Please contact your administrator." : "请联系你的管理员。", "An internal error occured." : "发生了内部错误。", "Please try again or contact your administrator." : "请重试或联系管理员。", + "Log in" : "登录", + "Wrong password. Reset it?" : "密码错误。要重置么?", "remember" : "记住", "Alternative Logins" : "其他登录方式", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨、你好,<br><br>只想让你知道 %s 分享了 <strong>%s</strong> 给你。<br><a href=\"%s\">现在查看!</a><br><br>", @@ -245,6 +259,10 @@ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "请联系你的系统管理员。如果你是系统管理员,配置config/config.php文件中参数\"trusted_domain\" 设置。可以在config/config.sample.php文件中找到例子。", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "基于你的配置,作为系统管理员,你可能还能点击下面的按钮来信任这个域。", "Add \"%s\" as trusted domain" : "添加 \"%s\"为信任域", + "App update required" : "必须的应用更新", + "%s will be updated to version %s" : "%s 将会更新至版本 %s", + "These apps will be updated:" : "以下应用将被更新:", + "These incompatible apps will be disabled:" : "这些不兼容的应用程序将被禁用:", "The theme %s has been disabled." : "%s 主题已被禁用。", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "在继续之前,请确认数据库、配置文件夹和数据文件夹已经备份。", "Start update" : "开始更新", diff --git a/core/l10n/zh_HK.js b/core/l10n/zh_HK.js index fc1bef316a9..2766bd30007 100644 --- a/core/l10n/zh_HK.js +++ b/core/l10n/zh_HK.js @@ -68,6 +68,7 @@ OC.L10N.register( "Database name" : "資料庫名稱", "Log out" : "登出", "Search" : "尋找", + "Log in" : "登入", "remember" : "記住" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/zh_HK.json b/core/l10n/zh_HK.json index 2a6230797c1..0029a47794e 100644 --- a/core/l10n/zh_HK.json +++ b/core/l10n/zh_HK.json @@ -66,6 +66,7 @@ "Database name" : "資料庫名稱", "Log out" : "登出", "Search" : "尋找", + "Log in" : "登入", "remember" : "記住" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/l10n/zh_TW.js b/core/l10n/zh_TW.js index 29ef83f2614..beab7ca0e17 100644 --- a/core/l10n/zh_TW.js +++ b/core/l10n/zh_TW.js @@ -2,17 +2,28 @@ OC.L10N.register( "core", { "Couldn't send mail to following users: %s " : "無法寄送郵件給這些使用者:%s", + "Preparing update" : "準備更新", "Turned on maintenance mode" : "已啓用維護模式", "Turned off maintenance mode" : "已停用維護模式", + "Maintenance mode is kept active" : "維護模式維持在開啟狀態", "Updated database" : "已更新資料庫", "Checked database schema update" : "已檢查資料庫格式更新", "Checked database schema update for apps" : "已檢查應用程式的資料庫格式更新", "Updated \"%s\" to %s" : "已更新 %s 到 %s", + "Repair warning: " : "修復警告:", + "Repair error: " : "修復錯誤", + "Following incompatible apps have been disabled: %s" : "以下不相容的應用程式已經被停用:%s", + "Following apps have been disabled: %s" : "以下應用程式已經被停用:%s", + "Already up to date" : "已經是最新版", + "File is too big" : "檔案太大", + "Invalid file provided" : "提供的檔案無效", "No image or file provided" : "未提供圖片或檔案", "Unknown filetype" : "未知的檔案類型", "Invalid image" : "無效的圖片", "No temporary profile picture available, try again" : "沒有臨時用的大頭貼,請再試一次", "No crop data provided" : "未設定剪裁", + "No valid crop data provided" : "未提供有效的剪裁設定", + "Crop is not square" : "剪裁設定不是正方形", "Sunday" : "週日", "Monday" : "週一", "Tuesday" : "週二", @@ -27,6 +38,13 @@ OC.L10N.register( "Thu." : "四", "Fri." : "五", "Sat." : "六", + "Su" : "日", + "Mo" : "一", + "Tu" : "二", + "We" : "三", + "Th" : "四", + "Fr" : "五", + "Sa" : "六", "January" : "一月", "February" : "二月", "March" : "三月", @@ -81,7 +99,9 @@ OC.L10N.register( "So-so password" : "普通的密碼", "Good password" : "好的密碼", "Strong password" : "很強的密碼", - "Error occurred while checking server setup" : "檢查伺服器配置時發生錯誤", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器無法提供檔案同步功能,因為 WebDAV 界面有問題", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。", + "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "Shared" : "已分享", "Shared with {recipients}" : "與 {recipients} 分享", "Error" : "錯誤", @@ -101,8 +121,10 @@ OC.L10N.register( "Set expiration date" : "指定到期日", "Expiration" : "過期", "Expiration date" : "到期日", + "An error occured. Please try again" : "發生錯誤,請重試", "Adding user..." : "新增使用者……", "group" : "群組", + "remote" : "遠端", "Resharing is not allowed" : "不允許重新分享", "Shared in {item} with {user}" : "已和 {user} 分享 {item}", "Unshare" : "取消分享", @@ -111,6 +133,7 @@ OC.L10N.register( "can edit" : "可編輯", "access control" : "存取控制", "create" : "建立", + "change" : "更動", "delete" : "刪除", "Password protected" : "受密碼保護", "Error unsetting expiration date" : "取消到期日設定失敗", @@ -127,8 +150,11 @@ OC.L10N.register( "No tags selected for deletion." : "沒有選擇要刪除的標籤", "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 到版本 {version} ,請稍候", "Please reload the page." : "請重新整理頁面", + "The update was unsuccessful. " : "更新失敗", + "The update was successful. There were warnings." : "更新成功,有警告訊息", "The update was successful. Redirecting you to ownCloud now." : "升級成功,正將您重新導向至 ownCloud 。", "Couldn't reset password because the token is invalid" : "無法重設密碼因為 token 無效", + "Couldn't reset password because the token is expired" : "無法重設密碼,因為 token 過期", "Couldn't send reset email. Please make sure your username is correct." : "無法寄送重設 email ,請確認您的帳號輸入正確", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "無法寄送重設 email ,因為這個帳號沒有設定 email 地址,請聯絡您的系統管理員", "%s password reset" : "%s 密碼重設", @@ -186,6 +212,9 @@ OC.L10N.register( "Search" : "搜尋", "Server side authentication failed!" : "伺服器端認證失敗!", "Please contact your administrator." : "請聯絡系統管理員。", + "An internal error occured." : "發生內部錯誤", + "Please try again or contact your administrator." : "請重試或聯絡系統管理員", + "Wrong password. Reset it?" : "密碼錯誤,重設密碼?", "remember" : "記住", "Alternative Logins" : "其他登入方法", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨,<br><br>%s 與你分享了<strong>%s</strong>。<br><a href=\"%s\">檢視</a><br><br>", @@ -197,10 +226,15 @@ OC.L10N.register( "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "請聯絡您的系統管理員,如果您就是系統管理員,請設定 config/config.php 中的 \"trusted_domain\" 選項。範例設定提供於 config/config.sample.php", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "依照設定而定,您身為系統管理員可能也可以使用底下的按鈕來信任這個網域", "Add \"%s\" as trusted domain" : "將 %s 加入到信任的網域", + "App update required" : "需要更新應用程式", + "%s will be updated to version %s" : "%s 將會更新至版本 %s", + "These apps will be updated:" : "將會更新這些應用程式", + "These incompatible apps will be disabled:" : "將會停用這些不相容的應用程式", "The theme %s has been disabled." : "主題 %s 已經被停用", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "在繼續之前,請備份資料庫、config 目錄及資料目錄", "Start update" : "開始升級", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "在大型安裝上,為了避免升級請求逾時,你也可以在安裝目錄執行下列指令:", + "This %s instance is currently in maintenance mode, which may take a while." : "這個 %s 安裝目前處於維護模式,需要一段時間恢復。", "This page will refresh itself when the %s instance is available again." : "%s 安裝恢復可用之後,本頁會自動重新整理" }, "nplurals=1; plural=0;"); diff --git a/core/l10n/zh_TW.json b/core/l10n/zh_TW.json index bf1e1a5ff5b..81af556d8f3 100644 --- a/core/l10n/zh_TW.json +++ b/core/l10n/zh_TW.json @@ -1,16 +1,27 @@ { "translations": { "Couldn't send mail to following users: %s " : "無法寄送郵件給這些使用者:%s", + "Preparing update" : "準備更新", "Turned on maintenance mode" : "已啓用維護模式", "Turned off maintenance mode" : "已停用維護模式", + "Maintenance mode is kept active" : "維護模式維持在開啟狀態", "Updated database" : "已更新資料庫", "Checked database schema update" : "已檢查資料庫格式更新", "Checked database schema update for apps" : "已檢查應用程式的資料庫格式更新", "Updated \"%s\" to %s" : "已更新 %s 到 %s", + "Repair warning: " : "修復警告:", + "Repair error: " : "修復錯誤", + "Following incompatible apps have been disabled: %s" : "以下不相容的應用程式已經被停用:%s", + "Following apps have been disabled: %s" : "以下應用程式已經被停用:%s", + "Already up to date" : "已經是最新版", + "File is too big" : "檔案太大", + "Invalid file provided" : "提供的檔案無效", "No image or file provided" : "未提供圖片或檔案", "Unknown filetype" : "未知的檔案類型", "Invalid image" : "無效的圖片", "No temporary profile picture available, try again" : "沒有臨時用的大頭貼,請再試一次", "No crop data provided" : "未設定剪裁", + "No valid crop data provided" : "未提供有效的剪裁設定", + "Crop is not square" : "剪裁設定不是正方形", "Sunday" : "週日", "Monday" : "週一", "Tuesday" : "週二", @@ -25,6 +36,13 @@ "Thu." : "四", "Fri." : "五", "Sat." : "六", + "Su" : "日", + "Mo" : "一", + "Tu" : "二", + "We" : "三", + "Th" : "四", + "Fr" : "五", + "Sa" : "六", "January" : "一月", "February" : "二月", "March" : "三月", @@ -79,7 +97,9 @@ "So-so password" : "普通的密碼", "Good password" : "好的密碼", "Strong password" : "很強的密碼", - "Error occurred while checking server setup" : "檢查伺服器配置時發生錯誤", + "Your web server is not yet set up properly to allow file synchronization because the WebDAV interface seems to be broken." : "您的網頁伺服器無法提供檔案同步功能,因為 WebDAV 界面有問題", + "This server has no working Internet connection. This means that some of the features like mounting external storage, notifications about updates or installation of third-party apps will not work. Accessing files remotely and sending of notification emails might not work, either. We suggest to enable Internet connection for this server if you want to have all features." : "伺服器沒有網際網路連線,有些功能,像是外部儲存、更新版通知將無法運作。從遠端存取資料或是寄送 email 通知可能也無法運作。建議您設定好網際網路連線以使用所有功能。", + "Error occurred while checking server setup" : "檢查伺服器設定時發生錯誤", "Shared" : "已分享", "Shared with {recipients}" : "與 {recipients} 分享", "Error" : "錯誤", @@ -99,8 +119,10 @@ "Set expiration date" : "指定到期日", "Expiration" : "過期", "Expiration date" : "到期日", + "An error occured. Please try again" : "發生錯誤,請重試", "Adding user..." : "新增使用者……", "group" : "群組", + "remote" : "遠端", "Resharing is not allowed" : "不允許重新分享", "Shared in {item} with {user}" : "已和 {user} 分享 {item}", "Unshare" : "取消分享", @@ -109,6 +131,7 @@ "can edit" : "可編輯", "access control" : "存取控制", "create" : "建立", + "change" : "更動", "delete" : "刪除", "Password protected" : "受密碼保護", "Error unsetting expiration date" : "取消到期日設定失敗", @@ -125,8 +148,11 @@ "No tags selected for deletion." : "沒有選擇要刪除的標籤", "Updating {productName} to version {version}, this may take a while." : "正在更新 {productName} 到版本 {version} ,請稍候", "Please reload the page." : "請重新整理頁面", + "The update was unsuccessful. " : "更新失敗", + "The update was successful. There were warnings." : "更新成功,有警告訊息", "The update was successful. Redirecting you to ownCloud now." : "升級成功,正將您重新導向至 ownCloud 。", "Couldn't reset password because the token is invalid" : "無法重設密碼因為 token 無效", + "Couldn't reset password because the token is expired" : "無法重設密碼,因為 token 過期", "Couldn't send reset email. Please make sure your username is correct." : "無法寄送重設 email ,請確認您的帳號輸入正確", "Couldn't send reset email because there is no email address for this username. Please contact your administrator." : "無法寄送重設 email ,因為這個帳號沒有設定 email 地址,請聯絡您的系統管理員", "%s password reset" : "%s 密碼重設", @@ -184,6 +210,9 @@ "Search" : "搜尋", "Server side authentication failed!" : "伺服器端認證失敗!", "Please contact your administrator." : "請聯絡系統管理員。", + "An internal error occured." : "發生內部錯誤", + "Please try again or contact your administrator." : "請重試或聯絡系統管理員", + "Wrong password. Reset it?" : "密碼錯誤,重設密碼?", "remember" : "記住", "Alternative Logins" : "其他登入方法", "Hey there,<br><br>just letting you know that %s shared <strong>%s</strong> with you.<br><a href=\"%s\">View it!</a><br><br>" : "嗨,<br><br>%s 與你分享了<strong>%s</strong>。<br><a href=\"%s\">檢視</a><br><br>", @@ -195,10 +224,15 @@ "Please contact your administrator. If you are an administrator of this instance, configure the \"trusted_domain\" setting in config/config.php. An example configuration is provided in config/config.sample.php." : "請聯絡您的系統管理員,如果您就是系統管理員,請設定 config/config.php 中的 \"trusted_domain\" 選項。範例設定提供於 config/config.sample.php", "Depending on your configuration, as an administrator you might also be able to use the button below to trust this domain." : "依照設定而定,您身為系統管理員可能也可以使用底下的按鈕來信任這個網域", "Add \"%s\" as trusted domain" : "將 %s 加入到信任的網域", + "App update required" : "需要更新應用程式", + "%s will be updated to version %s" : "%s 將會更新至版本 %s", + "These apps will be updated:" : "將會更新這些應用程式", + "These incompatible apps will be disabled:" : "將會停用這些不相容的應用程式", "The theme %s has been disabled." : "主題 %s 已經被停用", "Please make sure that the database, the config folder and the data folder have been backed up before proceeding." : "在繼續之前,請備份資料庫、config 目錄及資料目錄", "Start update" : "開始升級", "To avoid timeouts with larger installations, you can instead run the following command from your installation directory:" : "在大型安裝上,為了避免升級請求逾時,你也可以在安裝目錄執行下列指令:", + "This %s instance is currently in maintenance mode, which may take a while." : "這個 %s 安裝目前處於維護模式,需要一段時間恢復。", "This page will refresh itself when the %s instance is available again." : "%s 安裝恢復可用之後,本頁會自動重新整理" },"pluralForm" :"nplurals=1; plural=0;" }
\ No newline at end of file diff --git a/core/register_command.php b/core/register_command.php index 72c7b28e9ae..d3c04ad0671 100644 --- a/core/register_command.php +++ b/core/register_command.php @@ -79,7 +79,8 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { ); $application->add(new OC\Core\Command\Encryption\ShowKeyStorageRoot($util)); - $application->add(new OC\Core\Command\Maintenance\MimeTypesJS()); + $application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateDB(\OC::$server->getMimeTypeDetector(), \OC::$server->getMimeTypeLoader())); + $application->add(new OC\Core\Command\Maintenance\Mimetype\UpdateJS(\OC::$server->getMimeTypeDetector())); $application->add(new OC\Core\Command\Maintenance\Mode(\OC::$server->getConfig())); $application->add(new OC\Core\Command\Maintenance\Repair(new \OC\Repair(\OC\Repair::getRepairSteps()), \OC::$server->getConfig())); $application->add(new OC\Core\Command\Maintenance\SingleUser(\OC::$server->getConfig())); diff --git a/core/templates/installation.php b/core/templates/installation.php index 8db55e4bdab..716cb1af6af 100644 --- a/core/templates/installation.php +++ b/core/templates/installation.php @@ -53,7 +53,7 @@ script('core', [ <label for="adminpass" class="infield"><?php p($l->t( 'Password' )); ?></label> <img class="svg" id="adminpass-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""> <input type="checkbox" id="show" name="show"> - <label for="show"></label> + <label for="show" class="svg"></label> <div class="strengthify-wrapper"></div> </p> </fieldset> @@ -149,7 +149,7 @@ script('core', [ </fieldset> <?php endif; ?> <?php endif; ?> - + <div class="icon-loading-dark float-spinner"> </div> <?php if(!$_['dbIsSet'] OR count($_['errors']) > 0): ?> diff --git a/core/templates/layout.base.php b/core/templates/layout.base.php index 43d692c0364..b01820a05bb 100644 --- a/core/templates/layout.base.php +++ b/core/templates/layout.base.php @@ -8,6 +8,7 @@ <?php p($theme->getTitle()); ?> </title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="referrer" content="never"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> <meta name="theme-color" content="<?php p($theme->getMailHeaderColor()); ?>"> <link rel="shortcut icon" type="image/png" href="<?php print_unescaped(image_path('', 'favicon.png')); ?>"> diff --git a/core/templates/layout.guest.php b/core/templates/layout.guest.php index 0fd7521271d..56b762d3266 100644 --- a/core/templates/layout.guest.php +++ b/core/templates/layout.guest.php @@ -8,6 +8,7 @@ <?php p($theme->getTitle()); ?> </title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="referrer" content="never"> <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> <meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>"> <meta name="theme-color" content="<?php p($theme->getMailHeaderColor()); ?>"> diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 59fced353d1..0910047032d 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -15,6 +15,7 @@ ?> </title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="referrer" content="never"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"> <meta name="apple-itunes-app" content="app-id=<?php p($theme->getiTunesAppId()); ?>"> <meta name="apple-mobile-web-app-capable" content="yes"> diff --git a/core/templates/login.php b/core/templates/login.php index 50ca6febf08..513988876e1 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -57,7 +57,7 @@ script('core', [ <img class="svg" id="password-icon" src="<?php print_unescaped(image_path('', 'actions/password.svg')); ?>" alt=""/> </p> - <input type="submit" id="submit" class="login primary icon-confirm" value="" disabled="disabled"/> + <input type="submit" id="submit" class="login primary icon-confirm" title="<?php p($l->t('Log in')); ?>" value="" disabled="disabled"/> <?php if (isset($_['invalidpassword']) && ($_['invalidpassword'])): ?> <a id="lost-password" class="warning" href=""> diff --git a/lib/autoloader.php b/lib/autoloader.php index 23285f61e73..41a040b3f54 100644 --- a/lib/autoloader.php +++ b/lib/autoloader.php @@ -27,6 +27,8 @@ namespace OC; +use \OCP\AutoloadNotAllowedException; + class Autoloader { private $useGlobalClassPath = true; @@ -34,13 +36,34 @@ class Autoloader { private $classPaths = array(); + private $validRoots = []; + /** * Optional low-latency memory cache for class to path mapping. + * * @var \OC\Memcache\Cache */ protected $memoryCache; /** + * Autoloader constructor. + * + * @param string[] $validRoots + */ + public function __construct(array $validRoots) { + $this->validRoots = $validRoots; + } + + /** + * Add a path to the list of valid php roots for auto loading + * + * @param string $root + */ + public function addValidRoot($root) { + $this->validRoots[] = stream_resolve_include_path($root); + } + + /** * disable the usage of the global classpath \OC::$CLASSPATH */ public function disableGlobalClassPath() { @@ -102,6 +125,15 @@ class Autoloader { return $paths; } + protected function isValidPath($fullPath) { + foreach ($this->validRoots as $root) { + if (substr($fullPath, 0, strlen($root) + 1) === $root . '/') { + return true; + } + } + throw new AutoloadNotAllowedException($fullPath); + } + /** * Load the specified class * @@ -119,7 +151,7 @@ class Autoloader { $pathsToRequire = array(); foreach ($this->findClass($class) as $path) { $fullPath = stream_resolve_include_path($path); - if ($fullPath) { + if ($fullPath && $this->isValidPath($fullPath)) { $pathsToRequire[] = $fullPath; } } @@ -138,6 +170,7 @@ class Autoloader { /** * Sets the optional low-latency cache for class to path mapping. + * * @param \OC\Memcache\Cache $memoryCache Instance of memory cache. */ public function setMemoryCache(\OC\Memcache\Cache $memoryCache = null) { diff --git a/lib/base.php b/lib/base.php index aceac2e53c3..a4b5e9e01bf 100644 --- a/lib/base.php +++ b/lib/base.php @@ -115,9 +115,6 @@ class OC { * the app path list is empty or contains an invalid path */ public static function initPaths() { - // calculate the root directories - OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); - // ensure we can find OC_Config set_include_path( OC::$SERVERROOT . '/lib' . PATH_SEPARATOR . @@ -519,10 +516,20 @@ class OC { } public static function init() { + // calculate the root directories + OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4)); + // register autoloader $loaderStart = microtime(true); require_once __DIR__ . '/autoloader.php'; - self::$loader = new \OC\Autoloader(); + self::$loader = new \OC\Autoloader([ + OC::$SERVERROOT . '/lib', + OC::$SERVERROOT . '/core', + OC::$SERVERROOT . '/settings', + OC::$SERVERROOT . '/ocs', + OC::$SERVERROOT . '/ocs-provider', + OC::$SERVERROOT . '/3rdparty' + ]); spl_autoload_register(array(self::$loader, 'load')); $loaderEnd = microtime(true); @@ -533,7 +540,7 @@ class OC { // setup 3rdparty autoloader $vendorAutoLoad = OC::$THIRDPARTYROOT . '/3rdparty/autoload.php'; if (!file_exists($vendorAutoLoad)) { - throw new \RuntimeException('Composer autoloader not found, unable to continue. Check the folder "3rdparty".'); + throw new \RuntimeException('Composer autoloader not found, unable to continue. Check the folder "3rdparty". Running "git submodule update --init" will initialize the git submodule that handles the subfolder "3rdparty".'); } require_once $vendorAutoLoad; @@ -663,7 +670,7 @@ class OC { self::registerCacheHooks(); self::registerFilesystemHooks(); - if (\OC::$server->getSystemConfig()->getValue('enable_previews', true)) { + if ($systemConfig->getValue('enable_previews', true)) { self::registerPreviewHooks(); } self::registerShareHooks(); diff --git a/lib/l10n/cs_CZ.js b/lib/l10n/cs_CZ.js index 8885ecd6e10..715b834d2bf 100644 --- a/lib/l10n/cs_CZ.js +++ b/lib/l10n/cs_CZ.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Nelze přečíst soubor", "App directory already exists" : "Adresář aplikace již existuje", "Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s", + "Archive does not contain a directory named %s" : "Archiv neobsahuje adresář pojmenovaný %s", "No source specified when installing app" : "Nebyl zadán zdroj při instalaci aplikace", "No href specified when installing app from http" : "Nebyl zadán odkaz pro instalaci aplikace z HTTP", "No path specified when installing app from local file" : "Nebyla zadána cesta pro instalaci aplikace z místního souboru", diff --git a/lib/l10n/cs_CZ.json b/lib/l10n/cs_CZ.json index c5f50a73848..891b30850ab 100644 --- a/lib/l10n/cs_CZ.json +++ b/lib/l10n/cs_CZ.json @@ -47,6 +47,7 @@ "Can't read file" : "Nelze přečíst soubor", "App directory already exists" : "Adresář aplikace již existuje", "Can't create app folder. Please fix permissions. %s" : "Nelze vytvořit složku aplikace. Opravte práva souborů. %s", + "Archive does not contain a directory named %s" : "Archiv neobsahuje adresář pojmenovaný %s", "No source specified when installing app" : "Nebyl zadán zdroj při instalaci aplikace", "No href specified when installing app from http" : "Nebyl zadán odkaz pro instalaci aplikace z HTTP", "No path specified when installing app from local file" : "Nebyla zadána cesta pro instalaci aplikace z místního souboru", diff --git a/lib/l10n/da.js b/lib/l10n/da.js index 42f367d21c2..d644d7d3426 100644 --- a/lib/l10n/da.js +++ b/lib/l10n/da.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Der skete en fejl ved deling af %s, brugeren %s eksistere ikke", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Der skete en fejl ved deling af %s, brugeren %s er ikke medlem af nogle grupper som %s er medlem af", "Sharing %s failed, because this item is already shared with %s" : "Der skete en fejl ved deling af %s, objektet er allerede delt med %s", + "Sharing %s failed, because this item is already shared with user %s" : "Deling af %s mislykkedes, fordi dette element allerede er delt med brugeren %s", "Sharing %s failed, because the group %s does not exist" : "Der skete en fejl ved deling af %s, gruppen %s eksistere ikke", "Sharing %s failed, because %s is not a member of the group %s" : "Der skete en fejl ved deling af %s, fordi %s ikke er medlem af gruppen %s", "You need to provide a password to create a public link, only protected links are allowed" : "Du skal angive et kodeord for at oprette et offentligt link - kun beskyttede links er tilladt", diff --git a/lib/l10n/da.json b/lib/l10n/da.json index 0e20adc31bf..d57ea2a92ae 100644 --- a/lib/l10n/da.json +++ b/lib/l10n/da.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "Der skete en fejl ved deling af %s, brugeren %s eksistere ikke", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Der skete en fejl ved deling af %s, brugeren %s er ikke medlem af nogle grupper som %s er medlem af", "Sharing %s failed, because this item is already shared with %s" : "Der skete en fejl ved deling af %s, objektet er allerede delt med %s", + "Sharing %s failed, because this item is already shared with user %s" : "Deling af %s mislykkedes, fordi dette element allerede er delt med brugeren %s", "Sharing %s failed, because the group %s does not exist" : "Der skete en fejl ved deling af %s, gruppen %s eksistere ikke", "Sharing %s failed, because %s is not a member of the group %s" : "Der skete en fejl ved deling af %s, fordi %s ikke er medlem af gruppen %s", "You need to provide a password to create a public link, only protected links are allowed" : "Du skal angive et kodeord for at oprette et offentligt link - kun beskyttede links er tilladt", diff --git a/lib/l10n/el.js b/lib/l10n/el.js index b47cc7e36d2..ee9ad8efd42 100644 --- a/lib/l10n/el.js +++ b/lib/l10n/el.js @@ -88,6 +88,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν υπάρχει", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν είναι μέλος καμίας ομάδας στην οποία ο χρήστης %s είναι μέλος", "Sharing %s failed, because this item is already shared with %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αντικείμενο είναι διαμοιρασμένο ήδη με τον χρήστη %s", + "Sharing %s failed, because this item is already shared with user %s" : "Αποτυχία διαμοιρασμού με %s, διότι αυτό το αντικείμενο διαμοιράζεται ήδη με τον χρήστη %s", "Sharing %s failed, because the group %s does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί η ομάδα χρηστών %s δεν υπάρχει", "Sharing %s failed, because %s is not a member of the group %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν είναι μέλος της ομάδας %s", "You need to provide a password to create a public link, only protected links are allowed" : "Πρέπει να εισάγετε έναν κωδικό για να δημιουργήσετε έναν δημόσιο σύνδεσμο. Μόνο προστατευμένοι σύνδεσμοι επιτρέπονται", diff --git a/lib/l10n/el.json b/lib/l10n/el.json index d82aec00129..d0235598f7e 100644 --- a/lib/l10n/el.json +++ b/lib/l10n/el.json @@ -86,6 +86,7 @@ "Sharing %s failed, because the user %s does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν υπάρχει", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν είναι μέλος καμίας ομάδας στην οποία ο χρήστης %s είναι μέλος", "Sharing %s failed, because this item is already shared with %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί το αντικείμενο είναι διαμοιρασμένο ήδη με τον χρήστη %s", + "Sharing %s failed, because this item is already shared with user %s" : "Αποτυχία διαμοιρασμού με %s, διότι αυτό το αντικείμενο διαμοιράζεται ήδη με τον χρήστη %s", "Sharing %s failed, because the group %s does not exist" : "Ο διαμοιρασμός του %s απέτυχε, γιατί η ομάδα χρηστών %s δεν υπάρχει", "Sharing %s failed, because %s is not a member of the group %s" : "Ο διαμοιρασμός του %s απέτυχε, γιατί ο χρήστης %s δεν είναι μέλος της ομάδας %s", "You need to provide a password to create a public link, only protected links are allowed" : "Πρέπει να εισάγετε έναν κωδικό για να δημιουργήσετε έναν δημόσιο σύνδεσμο. Μόνο προστατευμένοι σύνδεσμοι επιτρέπονται", diff --git a/lib/l10n/es.js b/lib/l10n/es.js index e08ed66f1b5..3f1d751fc1e 100644 --- a/lib/l10n/es.js +++ b/lib/l10n/es.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Se ha fallado al compartir %s, ya que el usuario %s no existe", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se ha fallado al compartir %s, ya que el usuario %s no es miembro de ningún grupo del que %s sea miembro", "Sharing %s failed, because this item is already shared with %s" : "Se falló al compartir %s, ya que este elemento ya está compartido con %s", + "Sharing %s failed, because this item is already shared with user %s" : "Compartiendo %s falló, porque este objeto ya se comparte con el usuario %s", "Sharing %s failed, because the group %s does not exist" : "Se falló al compartir %s, ya que el grupo %s no existe", "Sharing %s failed, because %s is not a member of the group %s" : "Se falló al compartir %s, ya que %s no es miembro del grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Es necesario definir una contraseña para crear un enlace publico. Solo los enlaces protegidos están permitidos", diff --git a/lib/l10n/es.json b/lib/l10n/es.json index f9bca103231..75b8060b819 100644 --- a/lib/l10n/es.json +++ b/lib/l10n/es.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "Se ha fallado al compartir %s, ya que el usuario %s no existe", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Se ha fallado al compartir %s, ya que el usuario %s no es miembro de ningún grupo del que %s sea miembro", "Sharing %s failed, because this item is already shared with %s" : "Se falló al compartir %s, ya que este elemento ya está compartido con %s", + "Sharing %s failed, because this item is already shared with user %s" : "Compartiendo %s falló, porque este objeto ya se comparte con el usuario %s", "Sharing %s failed, because the group %s does not exist" : "Se falló al compartir %s, ya que el grupo %s no existe", "Sharing %s failed, because %s is not a member of the group %s" : "Se falló al compartir %s, ya que %s no es miembro del grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Es necesario definir una contraseña para crear un enlace publico. Solo los enlaces protegidos están permitidos", diff --git a/lib/l10n/fi_FI.js b/lib/l10n/fi_FI.js index d82d26645db..6960162e0ab 100644 --- a/lib/l10n/fi_FI.js +++ b/lib/l10n/fi_FI.js @@ -82,6 +82,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s is the item owner" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s on kohteen omistaja", "Sharing %s failed, because the user %s does not exist" : "Kohteen %s jakaminen epäonnistui, koska käyttäjää %s ei ole olemassa", "Sharing %s failed, because this item is already shared with %s" : "Kohteen %s jakaminen epäonnistui, koska kohde on jo jaettu käyttäjän %s kanssa", + "Sharing %s failed, because this item is already shared with user %s" : "Kohteen %s jakaminen epäonnistui, koska kohde on jo jaettu käyttäjän %s kanssa", "Sharing %s failed, because the group %s does not exist" : "Kohteen %s jakaminen epäonnistui, koska ryhmää %s ei ole olemassa", "Sharing %s failed, because %s is not a member of the group %s" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s ei ole ryhmän %s jäsen", "You need to provide a password to create a public link, only protected links are allowed" : "Anna salasana luodaksesi julkisen linkin. Vain suojatut linkit ovat sallittuja", diff --git a/lib/l10n/fi_FI.json b/lib/l10n/fi_FI.json index de6d474e467..7d23189b358 100644 --- a/lib/l10n/fi_FI.json +++ b/lib/l10n/fi_FI.json @@ -80,6 +80,7 @@ "Sharing %s failed, because the user %s is the item owner" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s on kohteen omistaja", "Sharing %s failed, because the user %s does not exist" : "Kohteen %s jakaminen epäonnistui, koska käyttäjää %s ei ole olemassa", "Sharing %s failed, because this item is already shared with %s" : "Kohteen %s jakaminen epäonnistui, koska kohde on jo jaettu käyttäjän %s kanssa", + "Sharing %s failed, because this item is already shared with user %s" : "Kohteen %s jakaminen epäonnistui, koska kohde on jo jaettu käyttäjän %s kanssa", "Sharing %s failed, because the group %s does not exist" : "Kohteen %s jakaminen epäonnistui, koska ryhmää %s ei ole olemassa", "Sharing %s failed, because %s is not a member of the group %s" : "Kohteen %s jakaminen epäonnistui, koska käyttäjä %s ei ole ryhmän %s jäsen", "You need to provide a password to create a public link, only protected links are allowed" : "Anna salasana luodaksesi julkisen linkin. Vain suojatut linkit ovat sallittuja", diff --git a/lib/l10n/fr.js b/lib/l10n/fr.js index 873abd44ad0..d0abd693e0c 100644 --- a/lib/l10n/fr.js +++ b/lib/l10n/fr.js @@ -90,6 +90,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Le partage de %s a échoué car l'utilisateur %s n'existe pas", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Le partage de %s a échoué car l'utilisateur %s n'est membre d'aucun groupe auquel %s appartient", "Sharing %s failed, because this item is already shared with %s" : "Le partage de %s a échoué car cet objet est déjà partagé avec %s", + "Sharing %s failed, because this item is already shared with user %s" : "Le partage de %s a échoué car cet élément est déjà partagé avec l'utilisateur %s", "Sharing %s failed, because the group %s does not exist" : "Le partage de %s a échoué car le groupe %s n'existe pas", "Sharing %s failed, because %s is not a member of the group %s" : "Le partage de %s a échoué car %s n'est pas membre du groupe %s", "You need to provide a password to create a public link, only protected links are allowed" : "Vous devez fournir un mot de passe pour créer un lien public, seuls les liens protégés sont autorisées.", diff --git a/lib/l10n/fr.json b/lib/l10n/fr.json index 440f2ddd84d..d0a90797df9 100644 --- a/lib/l10n/fr.json +++ b/lib/l10n/fr.json @@ -88,6 +88,7 @@ "Sharing %s failed, because the user %s does not exist" : "Le partage de %s a échoué car l'utilisateur %s n'existe pas", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Le partage de %s a échoué car l'utilisateur %s n'est membre d'aucun groupe auquel %s appartient", "Sharing %s failed, because this item is already shared with %s" : "Le partage de %s a échoué car cet objet est déjà partagé avec %s", + "Sharing %s failed, because this item is already shared with user %s" : "Le partage de %s a échoué car cet élément est déjà partagé avec l'utilisateur %s", "Sharing %s failed, because the group %s does not exist" : "Le partage de %s a échoué car le groupe %s n'existe pas", "Sharing %s failed, because %s is not a member of the group %s" : "Le partage de %s a échoué car %s n'est pas membre du groupe %s", "You need to provide a password to create a public link, only protected links are allowed" : "Vous devez fournir un mot de passe pour créer un lien public, seuls les liens protégés sont autorisées.", diff --git a/lib/l10n/id.js b/lib/l10n/id.js index 432ea5c0192..2114b34eddd 100644 --- a/lib/l10n/id.js +++ b/lib/l10n/id.js @@ -49,6 +49,7 @@ OC.L10N.register( "Can't read file" : "Tidak dapat membaca berkas", "App directory already exists" : "Direktori Apl sudah ada", "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", + "Archive does not contain a directory named %s" : "Arsip tidak berisi direktori yang bernama %s", "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal apl", "No href specified when installing app from http" : "Href tidak ditentukan saat menginstal apl dari http", "No path specified when installing app from local file" : "Lokasi tidak ditentukan saat menginstal apl dari berkas lokal", diff --git a/lib/l10n/id.json b/lib/l10n/id.json index 6aeffa363da..cdc17b6ce8e 100644 --- a/lib/l10n/id.json +++ b/lib/l10n/id.json @@ -47,6 +47,7 @@ "Can't read file" : "Tidak dapat membaca berkas", "App directory already exists" : "Direktori Apl sudah ada", "Can't create app folder. Please fix permissions. %s" : "Tidak dapat membuat folder apl. Silakan perbaiki perizinan. %s", + "Archive does not contain a directory named %s" : "Arsip tidak berisi direktori yang bernama %s", "No source specified when installing app" : "Tidak ada sumber yang ditentukan saat menginstal apl", "No href specified when installing app from http" : "Href tidak ditentukan saat menginstal apl dari http", "No path specified when installing app from local file" : "Lokasi tidak ditentukan saat menginstal apl dari berkas lokal", diff --git a/lib/l10n/it.js b/lib/l10n/it.js index d0c0022fd06..d0cf725013b 100644 --- a/lib/l10n/it.js +++ b/lib/l10n/it.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Condivisione di %s non riuscita, poiché l'utente %s non esiste", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Condivisione di %s non riuscita, poiché l'utente %s non appartiene ad alcun gruppo di cui %s è membro", "Sharing %s failed, because this item is already shared with %s" : "Condivisione di %s non riuscita, poiché l'oggetto è già condiviso con %s", + "Sharing %s failed, because this item is already shared with user %s" : "Condivisione di %s non riuscita, poiché l'oggetto è già condiviso con l'utente %s", "Sharing %s failed, because the group %s does not exist" : "Condivisione di %s non riuscita, poiché il gruppo %s non esiste", "Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti", diff --git a/lib/l10n/it.json b/lib/l10n/it.json index 1183b588eb2..81038c0e425 100644 --- a/lib/l10n/it.json +++ b/lib/l10n/it.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "Condivisione di %s non riuscita, poiché l'utente %s non esiste", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Condivisione di %s non riuscita, poiché l'utente %s non appartiene ad alcun gruppo di cui %s è membro", "Sharing %s failed, because this item is already shared with %s" : "Condivisione di %s non riuscita, poiché l'oggetto è già condiviso con %s", + "Sharing %s failed, because this item is already shared with user %s" : "Condivisione di %s non riuscita, poiché l'oggetto è già condiviso con l'utente %s", "Sharing %s failed, because the group %s does not exist" : "Condivisione di %s non riuscita, poiché il gruppo %s non esiste", "Sharing %s failed, because %s is not a member of the group %s" : "Condivisione di %s non riuscita, poiché %s non appartiene al gruppo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Devi fornire una password per creare un collegamento pubblico, sono consentiti solo i collegamenti protetti", diff --git a/lib/l10n/nl.js b/lib/l10n/nl.js index d08e8294dfb..5abae786d34 100644 --- a/lib/l10n/nl.js +++ b/lib/l10n/nl.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Delen van %s is mislukt, omdat gebruiker %s niet bestaat", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Delen van %s is mislukt, omdat gebruiker %s geen lid is van een groep waar %s lid van is", "Sharing %s failed, because this item is already shared with %s" : "Delen van %s is mislukt, omdat het object al wordt gedeeld met %s", + "Sharing %s failed, because this item is already shared with user %s" : "Delen van %s is mislukt, omdat het object al wordt gedeeld met gebruiker %s", "Sharing %s failed, because the group %s does not exist" : "Delen van %s is mislukt, omdat groep %s niet bestaat", "Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s", "You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan", diff --git a/lib/l10n/nl.json b/lib/l10n/nl.json index 8d0b5dc7169..4e4eaf8b52a 100644 --- a/lib/l10n/nl.json +++ b/lib/l10n/nl.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "Delen van %s is mislukt, omdat gebruiker %s niet bestaat", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Delen van %s is mislukt, omdat gebruiker %s geen lid is van een groep waar %s lid van is", "Sharing %s failed, because this item is already shared with %s" : "Delen van %s is mislukt, omdat het object al wordt gedeeld met %s", + "Sharing %s failed, because this item is already shared with user %s" : "Delen van %s is mislukt, omdat het object al wordt gedeeld met gebruiker %s", "Sharing %s failed, because the group %s does not exist" : "Delen van %s is mislukt, omdat groep %s niet bestaat", "Sharing %s failed, because %s is not a member of the group %s" : "Delen van %s is mislukt, omdat %s geen lid is van groep %s", "You need to provide a password to create a public link, only protected links are allowed" : "U moet een wachtwoord verstrekken om een openbare koppeling te maken, alleen beschermde links zijn toegestaan", diff --git a/lib/l10n/pt_BR.js b/lib/l10n/pt_BR.js index a53e5f01a16..402a7cbc51a 100644 --- a/lib/l10n/pt_BR.js +++ b/lib/l10n/pt_BR.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "Compartilhamento %s falhou, porque o usuário %s não existe", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Compartilhamento %s falhou, porque o usuário %s não é membro de nenhum grupo que o usuário %s pertença", "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou, porque este ítem já está compartilhado com %s", + "Sharing %s failed, because this item is already shared with user %s" : "Compartilhamento de %s falhou, porque esse item já é compartilhada com o usuário %s", "Sharing %s failed, because the group %s does not exist" : "Compartilhamento %s falhou, porque o grupo %s não existe", "Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos", diff --git a/lib/l10n/pt_BR.json b/lib/l10n/pt_BR.json index cef167c2098..255272b8cb8 100644 --- a/lib/l10n/pt_BR.json +++ b/lib/l10n/pt_BR.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "Compartilhamento %s falhou, porque o usuário %s não existe", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "Compartilhamento %s falhou, porque o usuário %s não é membro de nenhum grupo que o usuário %s pertença", "Sharing %s failed, because this item is already shared with %s" : "Compartilhamento %s falhou, porque este ítem já está compartilhado com %s", + "Sharing %s failed, because this item is already shared with user %s" : "Compartilhamento de %s falhou, porque esse item já é compartilhada com o usuário %s", "Sharing %s failed, because the group %s does not exist" : "Compartilhamento %s falhou, porque o grupo %s não existe", "Sharing %s failed, because %s is not a member of the group %s" : "Compartilhamento %s falhou, porque %s não é membro do grupo %s", "You need to provide a password to create a public link, only protected links are allowed" : "Você precisa fornecer uma senha para criar um link público, apenas links protegidos são permitidos", diff --git a/lib/l10n/th_TH.js b/lib/l10n/th_TH.js index 2ff86f599e9..6092f348cb5 100644 --- a/lib/l10n/th_TH.js +++ b/lib/l10n/th_TH.js @@ -91,6 +91,7 @@ OC.L10N.register( "Sharing %s failed, because the user %s does not exist" : "การแชร์ %s ล้มเหลวเนื่องจากไม่ได้มีผู้ใช้ %s อยู่", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "การแชร์ %s ล้มเหลวเนื่องจากผู้ใช้ %s ไม่ได้เป็นสมาชิกของกลุ่มใดๆ %s เป็นสมาชิกของ", "Sharing %s failed, because this item is already shared with %s" : "การแชร์ %s ล้มเหลวเพราะรายการนี้ถูกแชร์กับ %s", + "Sharing %s failed, because this item is already shared with user %s" : "%s ที่กำลังแชร์ล้มเหลว เพราะรายการนี้ได้ถูกแชร์กับผู้ใช้ %s", "Sharing %s failed, because the group %s does not exist" : "การแชร์ %s ล้มเหลวเพราะไม่มีกลุ่ม %s อยู่", "Sharing %s failed, because %s is not a member of the group %s" : "การแชร์ %s ล้มเหลวเพราะ %s ไม่ได้เป็นสมาชิกของกลุ่ม %s", "You need to provide a password to create a public link, only protected links are allowed" : "คุณจำเป็นต้องระบุรหัสผ่านเพื่อสร้างลิงค์สาธารณะ, ลิงค์ที่มีการป้องกันเท่านั้นที่ได้รับอนุญาต", diff --git a/lib/l10n/th_TH.json b/lib/l10n/th_TH.json index a215b67a180..a872236a70d 100644 --- a/lib/l10n/th_TH.json +++ b/lib/l10n/th_TH.json @@ -89,6 +89,7 @@ "Sharing %s failed, because the user %s does not exist" : "การแชร์ %s ล้มเหลวเนื่องจากไม่ได้มีผู้ใช้ %s อยู่", "Sharing %s failed, because the user %s is not a member of any groups that %s is a member of" : "การแชร์ %s ล้มเหลวเนื่องจากผู้ใช้ %s ไม่ได้เป็นสมาชิกของกลุ่มใดๆ %s เป็นสมาชิกของ", "Sharing %s failed, because this item is already shared with %s" : "การแชร์ %s ล้มเหลวเพราะรายการนี้ถูกแชร์กับ %s", + "Sharing %s failed, because this item is already shared with user %s" : "%s ที่กำลังแชร์ล้มเหลว เพราะรายการนี้ได้ถูกแชร์กับผู้ใช้ %s", "Sharing %s failed, because the group %s does not exist" : "การแชร์ %s ล้มเหลวเพราะไม่มีกลุ่ม %s อยู่", "Sharing %s failed, because %s is not a member of the group %s" : "การแชร์ %s ล้มเหลวเพราะ %s ไม่ได้เป็นสมาชิกของกลุ่ม %s", "You need to provide a password to create a public link, only protected links are allowed" : "คุณจำเป็นต้องระบุรหัสผ่านเพื่อสร้างลิงค์สาธารณะ, ลิงค์ที่มีการป้องกันเท่านั้นที่ได้รับอนุญาต", diff --git a/lib/private/activitymanager.php b/lib/private/activitymanager.php index a973db7206f..fc250173536 100644 --- a/lib/private/activitymanager.php +++ b/lib/private/activitymanager.php @@ -244,15 +244,27 @@ class ActivityManager implements IManager { * @return array */ public function getNotificationTypes($languageCode) { + $filesNotificationTypes = []; + $sharingNotificationTypes = []; + $notificationTypes = array(); foreach ($this->getExtensions() as $c) { $result = $c->getNotificationTypes($languageCode); if (is_array($result)) { + if (class_exists('\OCA\Files\Activity') && $c instanceof \OCA\Files\Activity) { + $filesNotificationTypes = $result; + continue; + } + if (class_exists('\OCA\Files_Sharing\Activity') && $c instanceof \OCA\Files_Sharing\Activity) { + $sharingNotificationTypes = $result; + continue; + } + $notificationTypes = array_merge($notificationTypes, $result); } } - return $notificationTypes; + return array_merge($filesNotificationTypes, $sharingNotificationTypes, $notificationTypes); } /** diff --git a/lib/private/app.php b/lib/private/app.php index f1a1d27ae66..f6a81f9945f 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -105,7 +105,6 @@ class OC_App { ob_start(); foreach ($apps as $app) { if ((is_null($types) or self::isType($app, $types)) && !in_array($app, self::$loadedApps)) { - self::$loadedApps[] = $app; self::loadApp($app); } } @@ -122,6 +121,8 @@ class OC_App { * @throws \OC\NeedsUpdateException */ public static function loadApp($app, $checkUpgrade = true) { + self::$loadedApps[] = $app; + \OC::$loader->addValidRoot(self::getAppPath($app)); if (is_file(self::getAppPath($app) . '/appinfo/app.php')) { \OC::$server->getEventLogger()->start('load_app_' . $app, 'Load app: ' . $app); if ($checkUpgrade and self::shouldUpgrade($app)) { diff --git a/lib/private/appconfig.php b/lib/private/appconfig.php index b88df10dddd..7ee64980fd0 100644 --- a/lib/private/appconfig.php +++ b/lib/private/appconfig.php @@ -28,23 +28,11 @@ * along with this program. If not, see <http://www.gnu.org/licenses/> * */ -/* - * - * The following SQL statement is just a help for developers and will not be - * executed! - * - * CREATE TABLE `appconfig` ( - * `appid` VARCHAR( 255 ) NOT NULL , - * `configkey` VARCHAR( 255 ) NOT NULL , - * `configvalue` VARCHAR( 255 ) NOT NULL - * ) - * - */ namespace OC; -use OC\DB\Connection; use OCP\IAppConfig; +use OCP\IDBConnection; /** * This class provides an easy way for apps to store config values in the @@ -52,54 +40,32 @@ use OCP\IAppConfig; */ class AppConfig implements IAppConfig { /** - * @var \OC\DB\Connection $conn + * @var \OCP\IDBConnection $conn */ protected $conn; private $cache = array(); - private $appsLoaded = array(); - - /** - * @var string[] - */ - private $apps = null; - /** - * @param Connection $conn + * @param IDBConnection $conn */ - public function __construct(Connection $conn) { + public function __construct(IDBConnection $conn) { $this->conn = $conn; + $this->configLoaded = false; } /** * @param string $app - * @return string[] - */ - private function getAppCache($app) { - if (!isset($this->cache[$app])) { - $this->cache[$app] = array(); - } - return $this->cache[$app]; - } - - /** - * @param string $app - * @return \string[] + * @return array */ private function getAppValues($app) { - $appCache = $this->getAppCache($app); - if (array_search($app, $this->appsLoaded) === false) { - $query = 'SELECT `configvalue`, `configkey` FROM `*PREFIX*appconfig`' - . ' WHERE `appid` = ?'; - $result = $this->conn->executeQuery($query, array($app)); - while ($row = $result->fetch()) { - $appCache[$row['configkey']] = $row['configvalue']; - } - $this->appsLoaded[] = $app; + $this->loadConfigValues(); + + if (isset($this->cache[$app])) { + return $this->cache[$app]; } - $this->cache[$app] = $appCache; - return $appCache; + + return []; } /** @@ -111,18 +77,9 @@ class AppConfig implements IAppConfig { * entry in the appconfig table. */ public function getApps() { - if (is_array($this->apps)) { - return $this->apps; - } - $query = 'SELECT DISTINCT `appid` FROM `*PREFIX*appconfig` ORDER BY `appid`'; - $result = $this->conn->executeQuery($query); + $this->loadConfigValues(); - $apps = array(); - while ($appid = $result->fetchColumn()) { - $apps[] = $appid; - } - $this->apps = $apps; - return $apps; + return $this->getSortedKeys($this->cache); } /** @@ -135,8 +92,17 @@ class AppConfig implements IAppConfig { * not returned. */ public function getKeys($app) { - $values = $this->getAppValues($app); - $keys = array_keys($values); + $this->loadConfigValues(); + + if (isset($this->cache[$app])) { + return $this->getSortedKeys($this->cache[$app]); + } + + return []; + } + + public function getSortedKeys($data) { + $keys = array_keys($data); sort($keys); return $keys; } @@ -153,12 +119,13 @@ class AppConfig implements IAppConfig { * not exist the default value will be returned */ public function getValue($app, $key, $default = null) { - $values = $this->getAppValues($app); - if (isset($values[$key])) { - return $values[$key]; - } else { - return $default; + $this->loadConfigValues(); + + if ($this->hasKey($app, $key)) { + return $this->cache[$app][$key]; } + + return $default; } /** @@ -169,8 +136,9 @@ class AppConfig implements IAppConfig { * @return bool */ public function hasKey($app, $key) { - $values = $this->getAppValues($app); - return array_key_exists($key, $values); + $this->loadConfigValues(); + + return isset($this->cache[$app][$key]); } /** @@ -179,11 +147,9 @@ class AppConfig implements IAppConfig { * @param string $app app * @param string $key key * @param string $value value - * @return void + * @return bool True if the value was inserted or updated, false if the value was the same */ public function setValue($app, $key, $value) { - $inserted = false; - // Does the key exist? no: insert, yes: update. if (!$this->hasKey($app, $key)) { $inserted = (bool) $this->conn->insertIfNotExist('*PREFIX*appconfig', [ 'appid' => $app, @@ -193,29 +159,32 @@ class AppConfig implements IAppConfig { 'appid', 'configkey', ]); - } - if (!$inserted) { - $oldValue = $this->getValue($app, $key); - if($oldValue === strval($value)) { - return; + if ($inserted) { + if (!isset($this->cache[$app])) { + $this->cache[$app] = []; + } + + $this->cache[$app][$key] = $value; + return true; } - $data = array( - 'configvalue' => $value, - ); - $where = array( - 'appid' => $app, - 'configkey' => $key, - ); - $this->conn->update('*PREFIX*appconfig', $data, $where); - } - if (!isset($this->cache[$app])) { - $this->cache[$app] = array(); - } - if (is_array($this->apps) and array_search($app, $this->apps) === false) { - $this->apps[$app] = $app; } + + $sql = $this->conn->getQueryBuilder(); + $sql->update('appconfig') + ->set('configvalue', $sql->createParameter('configvalue')) + ->where($sql->expr()->eq('appid', $sql->createParameter('app'))) + ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey'))) + ->andWhere($sql->expr()->neq('configvalue', $sql->createParameter('configvalue'))) + ->setParameter('configvalue', $value) + ->setParameter('app', $app) + ->setParameter('configkey', $key) + ->setParameter('configvalue', $value); + $changedRow = (bool) $sql->execute(); + $this->cache[$app][$key] = $value; + + return $changedRow; } /** @@ -226,14 +195,17 @@ class AppConfig implements IAppConfig { * @return boolean|null */ public function deleteKey($app, $key) { - $where = array( - 'appid' => $app, - 'configkey' => $key, - ); - $this->conn->delete('*PREFIX*appconfig', $where); - if (isset($this->cache[$app]) and isset($this->cache[$app][$key])) { - unset($this->cache[$app][$key]); - } + $this->loadConfigValues(); + + $sql = $this->conn->getQueryBuilder(); + $sql->delete('appconfig') + ->where($sql->expr()->eq('appid', $sql->createParameter('app'))) + ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey'))) + ->setParameter('app', $app) + ->setParameter('configkey', $key); + $sql->execute(); + + unset($this->cache[$app][$key]); } /** @@ -245,38 +217,65 @@ class AppConfig implements IAppConfig { * Removes all keys in appconfig belonging to the app. */ public function deleteApp($app) { - $where = array( - 'appid' => $app, - ); - $this->conn->delete('*PREFIX*appconfig', $where); + $this->loadConfigValues(); + + $sql = $this->conn->getQueryBuilder(); + $sql->delete('appconfig') + ->where($sql->expr()->eq('appid', $sql->createParameter('app'))) + ->setParameter('app', $app); + $sql->execute(); + unset($this->cache[$app]); - unset($this->apps[$app]); } /** - * get multiply values, either the app or key can be used as wildcard by setting it to false + * get multiple values, either the app or key can be used as wildcard by setting it to false * * @param string|false $app * @param string|false $key * @return array|false */ public function getValues($app, $key) { - if (($app !== false) == ($key !== false)) { + if (($app !== false) === ($key !== false)) { return false; } - if ($app !== false) { + if ($key === false) { return $this->getAppValues($app); } else { - $query = 'SELECT `configvalue`, `appid` FROM `*PREFIX*appconfig` WHERE `configkey` = ?'; - $result = $this->conn->executeQuery($query, array($key)); + $configs = []; + foreach ($this->getApps() as $appId) { + if ($this->hasKey($appId, $key)) { + $configs[$appId] = $this->getValue($appId, $key); + } + } + + return $configs; + } + } - $values = array(); - while ($row = $result->fetch((\PDO::FETCH_ASSOC))) { - $values[$row['appid']] = $row['configvalue']; + /** + * Load all the app config values + */ + protected function loadConfigValues() { + if ($this->configLoaded) return; + + $this->cache = []; + + $sql = $this->conn->getQueryBuilder(); + $sql->select('*') + ->from('appconfig'); + $result = $sql->execute(); + + while ($row = $result->fetch()) { + if (!isset($this->cache[$row['appid']])) { + $this->cache[$row['appid']] = []; } - return $values; + $this->cache[$row['appid']][$row['configkey']] = $row['configvalue']; } + $result->closeCursor(); + + $this->configLoaded = true; } } diff --git a/lib/private/appframework/http.php b/lib/private/appframework/http.php index e7b0d1e2cab..dee9818f4bc 100644 --- a/lib/private/appframework/http.php +++ b/lib/private/appframework/http.php @@ -121,7 +121,7 @@ class Http extends BaseHttp { // if etag or lastmodified have not changed, return a not modified if ((isset($this->server['HTTP_IF_NONE_MATCH']) - && trim($this->server['HTTP_IF_NONE_MATCH']) === $ETag) + && trim(trim($this->server['HTTP_IF_NONE_MATCH']), '"') === (string)$ETag) || diff --git a/lib/private/backgroundjob/joblist.php b/lib/private/backgroundjob/joblist.php index f297bccbc7d..deadadfb77e 100644 --- a/lib/private/backgroundjob/joblist.php +++ b/lib/private/backgroundjob/joblist.php @@ -26,6 +26,7 @@ namespace OC\BackgroundJob; use OCP\BackgroundJob\IJobList; +use OCP\AutoloadNotAllowedException; class JobList implements IJobList { /** @@ -185,15 +186,20 @@ class JobList implements IJobList { /** * @var Job $job */ - if (!class_exists($class)) { - // job from disabled app or old version of an app, no need to do anything - return null; + try { + if (!class_exists($class)) { + // job from disabled app or old version of an app, no need to do anything + return null; + } + $job = new $class(); + $job->setId($row['id']); + $job->setLastRun($row['last_run']); + $job->setArgument(json_decode($row['argument'], true)); + return $job; + } catch (AutoloadNotAllowedException $e) { + // job is from a disabled app, ignore } - $job = new $class(); - $job->setId($row['id']); - $job->setLastRun($row['last_run']); - $job->setArgument(json_decode($row['argument'], true)); - return $job; + return null; } /** diff --git a/lib/private/eventsource.php b/lib/private/eventsource.php index c69671c1a75..e2be808e726 100644 --- a/lib/private/eventsource.php +++ b/lib/private/eventsource.php @@ -59,6 +59,17 @@ class OC_EventSource implements \OCP\IEventSource { $this->fallback = isset($_GET['fallback']) and $_GET['fallback'] == 'true'; if ($this->fallback) { $this->fallBackId = (int)$_GET['fallback_id']; + /** + * FIXME: The default content-security-policy of ownCloud forbids inline + * JavaScript for security reasons. IE starting on Windows 10 will + * however also obey the CSP which will break the event source fallback. + * + * As a workaround thus we set a custom policy which allows the execution + * of inline JavaScript. + * + * @link https://github.com/owncloud/core/issues/14286 + */ + header("Content-Security-Policy: default-src 'none'; script-src 'unsafe-inline'"); header("Content-Type: text/html"); echo str_repeat('<span></span>' . PHP_EOL, 10); //dummy data to keep IE happy } else { diff --git a/lib/private/files.php b/lib/private/files.php index 6268bf8a129..0172f1ca6af 100644 --- a/lib/private/files.php +++ b/lib/private/files.php @@ -86,15 +86,6 @@ class OC_Files { */ public static function get($dir, $files, $only_header = false) { $view = \OC\Files\Filesystem::getView(); - $xsendfile = false; - if (\OC::$server->getLockingProvider() instanceof NoopLockingProvider) { - if (isset($_SERVER['MOD_X_SENDFILE_ENABLED']) || - isset($_SERVER['MOD_X_SENDFILE2_ENABLED']) || - isset($_SERVER['MOD_X_ACCEL_REDIRECT_ENABLED']) - ) { - $xsendfile = true; - } - } if (is_array($files) && count($files) === 1) { $files = $files[0]; @@ -129,9 +120,6 @@ class OC_Files { if ($get_type === self::FILE) { $zip = false; - if ($xsendfile && \OC::$server->getEncryptionManager()->isEnabled()) { - $xsendfile = false; - } } else { $zip = new ZipStreamer(false); } @@ -176,17 +164,7 @@ class OC_Files { $zip->finalize(); set_time_limit($executionTime); } else { - if ($xsendfile) { - /** @var $storage \OC\Files\Storage\Storage */ - list($storage) = $view->resolvePath($filename); - if ($storage->isLocal()) { - self::addSendfileHeader($filename); - } else { - \OC\Files\Filesystem::readfile($filename); - } - } else { - \OC\Files\Filesystem::readfile($filename); - } + \OC\Files\Filesystem::readfile($filename); } if ($get_type === self::FILE) { $view->unlockFile($filename, ILockingProvider::LOCK_SHARED); @@ -203,40 +181,6 @@ class OC_Files { } /** - * @param false|string $filename - */ - private static function addSendfileHeader($filename) { - if (isset($_SERVER['MOD_X_SENDFILE_ENABLED'])) { - $filename = \OC\Files\Filesystem::getLocalFile($filename); - header("X-Sendfile: " . $filename); - } - if (isset($_SERVER['MOD_X_SENDFILE2_ENABLED'])) { - $filename = \OC\Files\Filesystem::getLocalFile($filename); - if (isset($_SERVER['HTTP_RANGE']) && - preg_match("/^bytes=([0-9]+)-([0-9]*)$/", $_SERVER['HTTP_RANGE'], $range)) { - $filelength = filesize($filename); - if ($range[2] === "") { - $range[2] = $filelength - 1; - } - header("Content-Range: bytes $range[1]-$range[2]/" . $filelength); - header("HTTP/1.1 206 Partial content"); - header("X-Sendfile2: " . str_replace(",", "%2c", rawurlencode($filename)) . " $range[1]-$range[2]"); - } else { - header("X-Sendfile: " . $filename); - } - } - - if (isset($_SERVER['MOD_X_ACCEL_REDIRECT_ENABLED'])) { - if (isset($_SERVER['MOD_X_ACCEL_REDIRECT_PREFIX'])) { - $filename = $_SERVER['MOD_X_ACCEL_REDIRECT_PREFIX'] . \OC\Files\Filesystem::getLocalFile($filename); - } else { - $filename = \OC::$WEBROOT . '/data' . \OC\Files\Filesystem::getRoot() . $filename; - } - header("X-Accel-Redirect: " . $filename); - } - } - - /** * @param string $dir * @param ZipStreamer $zip * @param string $internalDir diff --git a/lib/private/files/cache/cache.php b/lib/private/files/cache/cache.php index 8cf097421d4..5c04da1f0d5 100644 --- a/lib/private/files/cache/cache.php +++ b/lib/private/files/cache/cache.php @@ -35,6 +35,8 @@ namespace OC\Files\Cache; +use \OCP\Files\IMimeTypeLoader; + /** * Metadata cache for a storage * @@ -66,8 +68,8 @@ class Cache { */ protected $storageCache; - protected static $mimetypeIds = array(); - protected static $mimetypes = array(); + /** @var IMimeTypeLoader */ + protected $mimetypeLoader; /** * @param \OC\Files\Storage\Storage|string $storage @@ -83,6 +85,7 @@ class Cache { } $this->storageCache = new Storage($storage); + $this->mimetypeLoader = \OC::$server->getMimeTypeLoader(); } /** @@ -95,72 +98,6 @@ class Cache { } /** - * Get the numeric id for a mimetype - * - * Mimetypes are stored as integers in the cache to prevent duplicated data of the (usually) fairly limited amount of unique mimetypes - * If the supplied mimetype does not yet have a numeric id a new one will be generated - * - * @param string $mime - * @return int - */ - public function getMimetypeId($mime) { - if (empty($mime)) { - // Can not insert empty string into Oracle NOT NULL column. - $mime = 'application/octet-stream'; - } - if (empty(self::$mimetypeIds)) { - $this->loadMimetypes(); - } - - if (!isset(self::$mimetypeIds[$mime])) { - try { - $connection = \OC_DB::getConnection(); - $connection->insertIfNotExist('*PREFIX*mimetypes', [ - 'mimetype' => $mime, - ]); - $this->loadMimetypes(); - } catch (\Doctrine\DBAL\DBALException $e) { - \OCP\Util::writeLog('core', 'Exception during mimetype insertion: ' . $e->getmessage(), \OCP\Util::DEBUG); - return -1; - } - } - - return self::$mimetypeIds[$mime]; - } - - - /** - * Get the mimetype (as string) from a mimetype id - * - * @param int $id - * @return string | null the mimetype for the id or null if the id is not known - */ - public function getMimetype($id) { - if (empty(self::$mimetypes)) { - $this->loadMimetypes(); - } - - return isset(self::$mimetypes[$id]) ? self::$mimetypes[$id] : null; - } - - /** - * Load all known mimetypes and mimetype ids from the database - * - * @throws \OC\DatabaseException - */ - public function loadMimetypes() { - self::$mimetypeIds = self::$mimetypes = array(); - - $result = \OC_DB::executeAudited('SELECT `id`, `mimetype` FROM `*PREFIX*mimetypes`', array()); - if ($result) { - while ($row = $result->fetchRow()) { - self::$mimetypeIds[$row['mimetype']] = $row['id']; - self::$mimetypes[$row['id']] = $row['mimetype']; - } - } - } - - /** * get the stored metadata of a file or folder * * the returned cache entry contains at least the following values: @@ -222,8 +159,8 @@ class Cache { $data['storage_mtime'] = (int)$data['storage_mtime']; $data['encrypted'] = (bool)$data['encrypted']; $data['storage'] = $this->storageId; - $data['mimetype'] = $this->getMimetype($data['mimetype']); - $data['mimepart'] = $this->getMimetype($data['mimepart']); + $data['mimetype'] = $this->mimetypeLoader->getMimetypeById($data['mimetype']); + $data['mimepart'] = $this->mimetypeLoader->getMimetypeById($data['mimepart']); if ($data['storage_mtime'] == 0) { $data['storage_mtime'] = $data['mtime']; } @@ -258,8 +195,8 @@ class Cache { $result = \OC_DB::executeAudited($sql, array($fileId)); $files = $result->fetchAll(); foreach ($files as &$file) { - $file['mimetype'] = $this->getMimetype($file['mimetype']); - $file['mimepart'] = $this->getMimetype($file['mimepart']); + $file['mimetype'] = $this->mimetypeLoader->getMimetypeById($file['mimetype']); + $file['mimepart'] = $this->mimetypeLoader->getMimetypeById($file['mimepart']); if ($file['storage_mtime'] == 0) { $file['storage_mtime'] = $file['mtime']; } @@ -385,9 +322,9 @@ class Cache { $params[] = md5($value); $queryParts[] = '`path_hash`'; } elseif ($name === 'mimetype') { - $params[] = $this->getMimetypeId(substr($value, 0, strpos($value, '/'))); + $params[] = $this->mimetypeLoader->getId(substr($value, 0, strpos($value, '/'))); $queryParts[] = '`mimepart`'; - $value = $this->getMimetypeId($value); + $value = $this->mimetypeLoader->getId($value); } elseif ($name === 'storage_mtime') { if (!isset($data['mtime'])) { $params[] = $value; @@ -613,7 +550,6 @@ class Cache { * @return array an array of cache entries where the name matches the search pattern */ public function search($pattern) { - // normalize pattern $pattern = $this->normalize($pattern); @@ -630,8 +566,8 @@ class Cache { $files = array(); while ($row = $result->fetchRow()) { - $row['mimetype'] = $this->getMimetype($row['mimetype']); - $row['mimepart'] = $this->getMimetype($row['mimepart']); + $row['mimetype'] = $this->mimetypeLoader->getMimetypeById($row['mimetype']); + $row['mimepart'] = $this->mimetypeLoader->getMimetypeById($row['mimepart']); $files[] = $row; } return $files; @@ -652,12 +588,12 @@ class Cache { } $sql = 'SELECT `fileid`, `storage`, `path`, `parent`, `name`, `mimetype`, `mimepart`, `size`, `mtime`, `encrypted`, `etag`, `permissions` FROM `*PREFIX*filecache` WHERE ' . $where . ' AND `storage` = ?'; - $mimetype = $this->getMimetypeId($mimetype); + $mimetype = $this->mimetypeLoader->getId($mimetype); $result = \OC_DB::executeAudited($sql, array($mimetype, $this->getNumericStorageId())); $files = array(); while ($row = $result->fetchRow()) { - $row['mimetype'] = $this->getMimetype($row['mimetype']); - $row['mimepart'] = $this->getMimetype($row['mimepart']); + $row['mimetype'] = $this->mimetypeLoader->getMimetypeById($row['mimetype']); + $row['mimepart'] = $this->mimetypeLoader->getMimetypeById($row['mimepart']); $files[] = $row; } return $files; diff --git a/lib/private/files/type/detection.php b/lib/private/files/type/detection.php index ba286637df3..3dc3975fb2a 100644 --- a/lib/private/files/type/detection.php +++ b/lib/private/files/type/detection.php @@ -6,6 +6,7 @@ * @author Robin Appelman <icewind@owncloud.com> * @author Roeland Jago Douma <roeland@famdouma.nl> * @author Thomas Tanghus <thomas@tanghus.net> + * @author Robin McCorkell <rmccorkell@owncloud.com> * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -101,16 +102,23 @@ class Detection implements IMimeTypeDetector { return; } - $file = file_get_contents($this->configDir . '/mimetypealiases.dist.json'); - $this->mimeTypeAlias = get_object_vars(json_decode($file)); + $this->mimeTypeAlias = json_decode(file_get_contents($this->configDir . '/mimetypealiases.dist.json'), true); if (file_exists($this->configDir . '/mimetypealiases.json')) { - $custom = get_object_vars(json_decode(file_get_contents($this->configDir . '/mimetypealiases.json'))); + $custom = json_decode(file_get_contents($this->configDir . '/mimetypealiases.json'), true); $this->mimeTypeAlias = array_merge($this->mimeTypeAlias, $custom); } } /** + * @return array + */ + public function getAllAliases() { + $this->loadAliases(); + return $this->mimeTypeAlias; + } + + /** * Add mimetype mappings if they are not yet present */ private function loadMappings() { @@ -118,20 +126,26 @@ class Detection implements IMimeTypeDetector { return; } - $dist = file_get_contents($this->configDir . '/mimetypemapping.dist.json'); - $mimetypemapping = get_object_vars(json_decode($dist)); + $mimetypemapping = json_decode(file_get_contents($this->configDir . '/mimetypemapping.dist.json'), true); //Check if need to load custom mappings if (file_exists($this->configDir . '/mimetypemapping.json')) { - $custom = file_get_contents($this->configDir . '/mimetypemapping.json'); - $custom_mapping = get_object_vars(json_decode($custom)); - $mimetypemapping = array_merge($mimetypemapping, $custom_mapping); + $custom = json_decode(file_get_contents($this->configDir . '/mimetypemapping.json'), true); + $mimetypemapping = array_merge($mimetypemapping, $custom); } $this->registerTypeArray($mimetypemapping); } /** + * @return array + */ + public function getAllMappings() { + $this->loadMappings(); + return $this->mimetypes; + } + + /** * detect mimetype only based on filename, content of file is not used * * @param string $path diff --git a/lib/private/files/type/loader.php b/lib/private/files/type/loader.php new file mode 100644 index 00000000000..df893306615 --- /dev/null +++ b/lib/private/files/type/loader.php @@ -0,0 +1,165 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Files\Type; + +use OCP\Files\IMimeTypeLoader; +use OCP\IDBConnection; + +use Doctrine\DBAL\Exception\UniqueConstraintViolationException; + +/** + * Mimetype database loader + * + * @package OC\Files\Type + */ +class Loader implements IMimeTypeLoader { + + /** @var IDBConnection */ + private $dbConnection; + + /** @var array [id => mimetype] */ + protected $mimetypes; + + /** @var array [mimetype => id] */ + protected $mimetypeIds; + + /** + * @param IDBConnection $dbConnection + */ + public function __construct(IDBConnection $dbConnection) { + $this->dbConnection = $dbConnection; + $this->mimetypes = []; + $this->mimetypeIds = []; + } + + /** + * Get a mimetype from its ID + * + * @param int $id + * @return string|null + */ + public function getMimetypeById($id) { + if (!$this->mimetypes) { + $this->loadMimetypes(); + } + if (isset($this->mimetypes[$id])) { + return $this->mimetypes[$id]; + } + return null; + } + + /** + * Get a mimetype ID, adding the mimetype to the DB if it does not exist + * + * @param string $mimetype + * @return int + */ + public function getId($mimetype) { + if (!$this->mimetypeIds) { + $this->loadMimetypes(); + } + if (isset($this->mimetypeIds[$mimetype])) { + return $this->mimetypeIds[$mimetype]; + } + return $this->store($mimetype); + } + + /** + * Test if a mimetype exists in the database + * + * @param string $mimetype + * @return bool + */ + public function exists($mimetype) { + if (!$this->mimetypeIds) { + $this->loadMimetypes(); + } + return isset($this->mimetypeIds[$mimetype]); + } + + /** + * Store a mimetype in the DB + * + * @param string $mimetype + * @param int inserted ID + */ + protected function store($mimetype) { + try { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->insert('mimetypes') + ->values([ + 'mimetype' => $qb->createNamedParameter($mimetype) + ]); + $qb->execute(); + } catch (UniqueConstraintViolationException $e) { + // something inserted it before us + } + + $fetch = $this->dbConnection->getQueryBuilder(); + $fetch->select('id') + ->from('mimetypes') + ->where( + $fetch->expr()->eq('mimetype', $fetch->createNamedParameter($mimetype) + )); + $row = $fetch->execute()->fetch(); + + $this->mimetypes[$row['id']] = $mimetype; + $this->mimetypeIds[$mimetype] = $row['id']; + return $row['id']; + } + + /** + * Load all mimetypes from DB + */ + private function loadMimetypes() { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('id', 'mimetype') + ->from('mimetypes'); + $results = $qb->execute()->fetchAll(); + + foreach ($results as $row) { + $this->mimetypes[$row['id']] = $row['mimetype']; + $this->mimetypeIds[$row['mimetype']] = $row['id']; + } + } + + /** + * Update filecache mimetype based on file extension + * + * @param string $ext file extension + * @param int $mimetypeId + * @return int number of changed rows + */ + public function updateFilecache($ext, $mimetypeId) { + $update = $this->dbConnection->getQueryBuilder(); + $update->update('filecache') + ->set('mimetype', $update->createNamedParameter($mimetypeId)) + ->where($update->expr()->neq( + 'mimetype', $update->createNamedParameter($mimetypeId) + )) + ->andWhere($update->expr()->like( + $update->createFunction('LOWER(`name`)'), $update->createNamedParameter($ext) + )); + return $update->execute(); + } + +} diff --git a/lib/private/json.php b/lib/private/json.php index e32e937c01a..ac72f02f609 100644 --- a/lib/private/json.php +++ b/lib/private/json.php @@ -167,6 +167,6 @@ class OC_JSON{ if (is_array($data)) { array_walk_recursive($data, array('OC_JSON', 'to_string')); } - return json_encode($data); + return json_encode($data, JSON_HEX_TAG); } } diff --git a/lib/private/memcache/memcached.php b/lib/private/memcache/memcached.php index 1503851fd73..e99303ecc15 100644 --- a/lib/private/memcache/memcached.php +++ b/lib/private/memcache/memcached.php @@ -89,6 +89,11 @@ class Memcached extends Cache implements IMemcache { public function clear($prefix = '') { $prefix = $this->getNamespace() . $prefix; $allKeys = self::$cache->getAllKeys(); + if ($allKeys === false) { + // newer Memcached doesn't like getAllKeys(), flush everything + self::$cache->flush(); + return true; + } $keys = array(); $prefixLength = strlen($prefix); foreach ($allKeys as $key) { diff --git a/lib/private/notification/action.php b/lib/private/notification/action.php new file mode 100644 index 00000000000..6de8a1a4bbc --- /dev/null +++ b/lib/private/notification/action.php @@ -0,0 +1,167 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + + +class Action implements IAction { + + /** @var string */ + protected $label; + + /** @var string */ + protected $labelParsed; + + /** @var string */ + protected $link; + + /** @var string */ + protected $requestType; + + /** @var string */ + protected $icon; + + /** + * Constructor + */ + public function __construct() { + $this->label = ''; + $this->labelParsed = ''; + $this->link = ''; + $this->requestType = ''; + $this->icon = ''; + } + + /** + * @param string $label + * @return $this + * @throws \InvalidArgumentException if the label is invalid + * @since 8.2.0 + */ + public function setLabel($label) { + if (!is_string($label) || $label === '' || isset($label[32])) { + throw new \InvalidArgumentException('The given label is invalid'); + } + $this->label = $label; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getLabel() { + return $this->label; + } + + /** + * @param string $label + * @return $this + * @throws \InvalidArgumentException if the label is invalid + * @since 8.2.0 + */ + public function setParsedLabel($label) { + if (!is_string($label) || $label === '') { + throw new \InvalidArgumentException('The given parsed label is invalid'); + } + $this->labelParsed = $label; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getParsedLabel() { + return $this->labelParsed; + } + + /** + * @param string $link + * @param string $requestType + * @return $this + * @throws \InvalidArgumentException if the link is invalid + * @since 8.2.0 + */ + public function setLink($link, $requestType) { + if (!is_string($link) || $link === '' || isset($link[256])) { + throw new \InvalidArgumentException('The given link is invalid'); + } + if (!in_array($requestType, ['GET', 'POST', 'PUT', 'DELETE'], true)) { + throw new \InvalidArgumentException('The given request type is invalid'); + } + $this->link = $link; + $this->requestType = $requestType; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getLink() { + return $this->link; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getRequestType() { + return $this->requestType; + } + + /** + * @param string $icon + * @return $this + * @throws \InvalidArgumentException if the icon is invalid + * @since 8.2.0 + */ + public function setIcon($icon) { + if (!is_string($icon) || $icon === '' || isset($icon[64])) { + throw new \InvalidArgumentException('The given icon is invalid'); + } + $this->icon = $icon; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getIcon() { + return $this->icon; + } + + /** + * @return bool + */ + public function isValid() { + return $this->label !== '' && $this->link !== ''; + } + + /** + * @return bool + */ + public function isValidParsed() { + return $this->labelParsed !== '' && $this->link !== ''; + } +} diff --git a/lib/private/notification/iaction.php b/lib/private/notification/iaction.php new file mode 100644 index 00000000000..da6728f5c52 --- /dev/null +++ b/lib/private/notification/iaction.php @@ -0,0 +1,109 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + +/** + * Interface IAction + * + * @package OC\Notification + * @since 8.2.0 + * + * DEVELOPER NOTE: + * The notification api is experimental only in 8.2.0! Do not start using it, + * if you can not prepare an update for the next version afterwards. + */ +interface IAction { + /** + * @param string $label + * @return $this + * @throws \InvalidArgumentException if the label is invalid + * @since 8.2.0 + */ + public function setLabel($label); + + /** + * @return string + * @since 8.2.0 + */ + public function getLabel(); + + /** + * @param string $label + * @return $this + * @throws \InvalidArgumentException if the label is invalid + * @since 8.2.0 + */ + public function setParsedLabel($label); + + /** + * @return string + * @since 8.2.0 + */ + public function getParsedLabel(); + + /** + * @param string $link + * @param string $requestType + * @return $this + * @throws \InvalidArgumentException if the link is invalid + * @since 8.2.0 + */ + public function setLink($link, $requestType); + + /** + * @return string + * @since 8.2.0 + */ + public function getLink(); + + /** + * @return string + * @since 8.2.0 + */ + public function getRequestType(); + + /** + * @param string $icon + * @return $this + * @throws \InvalidArgumentException if the icon is invalid + * @since 8.2.0 + */ + public function setIcon($icon); + + /** + * @return string + * @since 8.2.0 + */ + public function getIcon(); + + /** + * @return bool + * @since 8.2.0 + */ + public function isValid(); + + /** + * @return bool + * @since 8.2.0 + */ + public function isValidParsed(); +} diff --git a/lib/private/notification/iapp.php b/lib/private/notification/iapp.php new file mode 100644 index 00000000000..eda66423f3a --- /dev/null +++ b/lib/private/notification/iapp.php @@ -0,0 +1,56 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + +/** + * Interface IApp + * + * @package OC\Notification + * @since 8.2.0 + * + * DEVELOPER NOTE: + * The notification api is experimental only in 8.2.0! Do not start using it, + * if you can not prepare an update for the next version afterwards. + */ +interface IApp { + /** + * @param INotification $notification + * @return null + * @throws \InvalidArgumentException When the notification is not valid + * @since 8.2.0 + */ + public function notify(INotification $notification); + + /** + * @param INotification $notification + * @return null + * @since 8.2.0 + */ + public function markProcessed(INotification $notification); + + /** + * @param INotification $notification + * @return int + * @since 8.2.0 + */ + public function getCount(INotification $notification); +} diff --git a/lib/private/notification/imanager.php b/lib/private/notification/imanager.php new file mode 100644 index 00000000000..0cd92b33251 --- /dev/null +++ b/lib/private/notification/imanager.php @@ -0,0 +1,56 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + +/** + * Interface IManager + * + * @package OC\Notification + * @since 8.2.0 + * + * DEVELOPER NOTE: + * The notification api is experimental only in 8.2.0! Do not start using it, + * if you can not prepare an update for the next version afterwards. + */ +interface IManager extends IApp, INotifier { + /** + * @param \Closure $service The service must implement IApp, otherwise a + * \InvalidArgumentException is thrown later + * @return null + * @since 8.2.0 + */ + public function registerApp(\Closure $service); + + /** + * @param \Closure $service The service must implement INotifier, otherwise a + * \InvalidArgumentException is thrown later + * @return null + * @since 8.2.0 + */ + public function registerNotifier(\Closure $service); + + /** + * @return INotification + * @since 8.2.0 + */ + public function createNotification(); +} diff --git a/lib/private/notification/inotification.php b/lib/private/notification/inotification.php new file mode 100644 index 00000000000..faf5db1d24c --- /dev/null +++ b/lib/private/notification/inotification.php @@ -0,0 +1,241 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + +/** + * Interface INotification + * + * @package OC\Notification + * @since 8.2.0 + * + * DEVELOPER NOTE: + * The notification api is experimental only in 8.2.0! Do not start using it, + * if you can not prepare an update for the next version afterwards. + */ +interface INotification { + /** + * @param string $app + * @return $this + * @throws \InvalidArgumentException if the app id are invalid + * @since 8.2.0 + */ + public function setApp($app); + + /** + * @return string + * @since 8.2.0 + */ + public function getApp(); + + /** + * @param string $user + * @return $this + * @throws \InvalidArgumentException if the user id are invalid + * @since 8.2.0 + */ + public function setUser($user); + + /** + * @return string + * @since 8.2.0 + */ + public function getUser(); + + /** + * @param int $timestamp + * @return $this + * @throws \InvalidArgumentException if the timestamp are invalid + * @since 8.2.0 + */ + public function setTimestamp($timestamp); + + /** + * @return int + * @since 8.2.0 + */ + public function getTimestamp(); + + /** + * @param string $type + * @param int $id + * @return $this + * @throws \InvalidArgumentException if the object type or id are invalid + * @since 8.2.0 + */ + public function setObject($type, $id); + + /** + * @return string + * @since 8.2.0 + */ + public function getObjectType(); + + /** + * @return int + * @since 8.2.0 + */ + public function getObjectId(); + + /** + * @param string $subject + * @param array $parameters + * @return $this + * @throws \InvalidArgumentException if the subject or parameters are invalid + * @since 8.2.0 + */ + public function setSubject($subject, array $parameters = []); + + /** + * @return string + * @since 8.2.0 + */ + public function getSubject(); + + /** + * @return string[] + * @since 8.2.0 + */ + public function getSubjectParameters(); + + /** + * @param string $subject + * @return $this + * @throws \InvalidArgumentException if the subject are invalid + * @since 8.2.0 + */ + public function setParsedSubject($subject); + + /** + * @return string + * @since 8.2.0 + */ + public function getParsedSubject(); + + /** + * @param string $message + * @param array $parameters + * @return $this + * @throws \InvalidArgumentException if the message or parameters are invalid + * @since 8.2.0 + */ + public function setMessage($message, array $parameters = []); + + /** + * @return string + * @since 8.2.0 + */ + public function getMessage(); + + /** + * @return string[] + * @since 8.2.0 + */ + public function getMessageParameters(); + + /** + * @param string $message + * @return $this + * @throws \InvalidArgumentException if the message are invalid + * @since 8.2.0 + */ + public function setParsedMessage($message); + + /** + * @return string + * @since 8.2.0 + */ + public function getParsedMessage(); + + /** + * @param string $link + * @return $this + * @throws \InvalidArgumentException if the link are invalid + * @since 8.2.0 + */ + public function setLink($link); + + /** + * @return string + * @since 8.2.0 + */ + public function getLink(); + + /** + * @param string $icon + * @return $this + * @throws \InvalidArgumentException if the icon are invalid + * @since 8.2.0 + */ + public function setIcon($icon); + + /** + * @return string + * @since 8.2.0 + */ + public function getIcon(); + + /** + * @return IAction + * @since 8.2.0 + */ + public function createAction(); + + /** + * @param IAction $action + * @return $this + * @throws \InvalidArgumentException if the action are invalid + * @since 8.2.0 + */ + public function addAction(IAction $action); + + /** + * @return IAction[] + * @since 8.2.0 + */ + public function getActions(); + + /** + * @param IAction $action + * @return $this + * @throws \InvalidArgumentException if the action are invalid + * @since 8.2.0 + */ + public function addParsedAction(IAction $action); + + /** + * @return IAction[] + * @since 8.2.0 + */ + public function getParsedActions(); + + /** + * @return bool + * @since 8.2.0 + */ + public function isValid(); + + /** + * @return bool + * @since 8.2.0 + */ + public function isValidParsed(); +} diff --git a/lib/private/notification/inotifier.php b/lib/private/notification/inotifier.php new file mode 100644 index 00000000000..22531229e3f --- /dev/null +++ b/lib/private/notification/inotifier.php @@ -0,0 +1,43 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + +/** + * Interface INotifier + * + * @package OC\Notification + * @since 8.2.0 + * + * DEVELOPER NOTE: + * The notification api is experimental only in 8.2.0! Do not start using it, + * if you can not prepare an update for the next version afterwards. + */ +interface INotifier { + /** + * @param INotification $notification + * @param string $languageCode The code of the language that should be used to prepare the notification + * @return INotification + * @throws \InvalidArgumentException When the notification was not prepared by a notifier + * @since 8.2.0 + */ + public function prepare(INotification $notification, $languageCode); +} diff --git a/lib/private/notification/manager.php b/lib/private/notification/manager.php new file mode 100644 index 00000000000..9635925e38e --- /dev/null +++ b/lib/private/notification/manager.php @@ -0,0 +1,191 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + + +class Manager implements IManager { + /** @var IApp */ + protected $apps; + + /** @var INotifier */ + protected $notifiers; + + /** @var \Closure */ + protected $appsClosures; + + /** @var \Closure */ + protected $notifiersClosures; + + public function __construct() { + $this->apps = []; + $this->notifiers = []; + $this->appsClosures = []; + $this->notifiersClosures = []; + } + + /** + * @param \Closure $service The service must implement IApp, otherwise a + * \InvalidArgumentException is thrown later + * @return null + * @since 8.2.0 + */ + public function registerApp(\Closure $service) { + $this->appsClosures[] = $service; + $this->apps = []; + } + + /** + * @param \Closure $service The service must implement INotifier, otherwise a + * \InvalidArgumentException is thrown later + * @return null + * @since 8.2.0 + */ + public function registerNotifier(\Closure $service) { + $this->notifiersClosures[] = $service; + $this->notifiers = []; + } + + /** + * @return IApp[] + */ + protected function getApps() { + if (!empty($this->apps)) { + return $this->apps; + } + + $this->apps = []; + foreach ($this->appsClosures as $closure) { + $app = $closure(); + if (!($app instanceof IApp)) { + throw new \InvalidArgumentException('The given notification app does not implement the IApp interface'); + } + $this->apps[] = $app; + } + + return $this->apps; + } + + /** + * @return INotifier[] + */ + protected function getNotifiers() { + if (!empty($this->notifiers)) { + return $this->notifiers; + } + + $this->notifiers = []; + foreach ($this->notifiersClosures as $closure) { + $notifier = $closure(); + if (!($notifier instanceof INotifier)) { + throw new \InvalidArgumentException('The given notification app does not implement the INotifier interface'); + } + $this->notifiers[] = $notifier; + } + + return $this->notifiers; + } + + /** + * @return INotification + * @since 8.2.0 + */ + public function createNotification() { + return new Notification(); + } + + /** + * @param INotification $notification + * @return null + * @throws \InvalidArgumentException When the notification is not valid + * @since 8.2.0 + */ + public function notify(INotification $notification) { + if (!$notification->isValid()) { + throw new \InvalidArgumentException('The given notification is invalid'); + } + + $apps = $this->getApps(); + + foreach ($apps as $app) { + try { + $app->notify($notification); + } catch (\InvalidArgumentException $e) { + } + } + } + + /** + * @param INotification $notification + * @param string $languageCode The code of the language that should be used to prepare the notification + * @return INotification + * @throws \InvalidArgumentException When the notification was not prepared by a notifier + * @since 8.2.0 + */ + public function prepare(INotification $notification, $languageCode) { + $notifiers = $this->getNotifiers(); + + foreach ($notifiers as $notifier) { + try { + $notification = $notifier->prepare($notification, $languageCode); + } catch (\InvalidArgumentException $e) { + continue; + } + + if (!($notification instanceof INotification) || !$notification->isValidParsed()) { + throw new \InvalidArgumentException('The given notification has not been handled'); + } + } + + if (!($notification instanceof INotification) || !$notification->isValidParsed()) { + throw new \InvalidArgumentException('The given notification has not been handled'); + } + + return $notification; + } + + /** + * @param INotification $notification + * @return null + */ + public function markProcessed(INotification $notification) { + $apps = $this->getApps(); + + foreach ($apps as $app) { + $app->markProcessed($notification); + } + } + + /** + * @param INotification $notification + * @return int + */ + public function getCount(INotification $notification) { + $apps = $this->getApps(); + + $count = 0; + foreach ($apps as $app) { + $count += $app->getCount($notification); + } + + return $count; + } +} diff --git a/lib/private/notification/notification.php b/lib/private/notification/notification.php new file mode 100644 index 00000000000..40fe39a956e --- /dev/null +++ b/lib/private/notification/notification.php @@ -0,0 +1,446 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Notification; + + +class Notification implements INotification { + /** @var string */ + protected $app; + + /** @var string */ + protected $user; + + /** @var int */ + protected $timestamp; + + /** @var string */ + protected $objectType; + + /** @var int */ + protected $objectId; + + /** @var string */ + protected $subject; + + /** @var array */ + protected $subjectParameters; + + /** @var string */ + protected $subjectParsed; + + /** @var string */ + protected $message; + + /** @var array */ + protected $messageParameters; + + /** @var string */ + protected $messageParsed; + + /** @var string */ + protected $link; + + /** @var string */ + protected $icon; + + /** @var array */ + protected $actions; + + /** @var array */ + protected $actionsParsed; + + /** + * Constructor + */ + public function __construct() { + $this->app = ''; + $this->user = ''; + $this->timestamp = 0; + $this->objectType = ''; + $this->objectId = 0; + $this->subject = ''; + $this->subjectParameters = []; + $this->subjectParsed = ''; + $this->message = ''; + $this->messageParameters = []; + $this->messageParsed = ''; + $this->link = ''; + $this->icon = ''; + $this->actions = []; + $this->actionsParsed = []; + } + + /** + * @param string $app + * @return $this + * @throws \InvalidArgumentException if the app id is invalid + * @since 8.2.0 + */ + public function setApp($app) { + if (!is_string($app) || $app === '' || isset($app[32])) { + throw new \InvalidArgumentException('The given app name is invalid'); + } + $this->app = $app; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getApp() { + return $this->app; + } + + /** + * @param string $user + * @return $this + * @throws \InvalidArgumentException if the user id is invalid + * @since 8.2.0 + */ + public function setUser($user) { + if (!is_string($user) || $user === '' || isset($user[64])) { + throw new \InvalidArgumentException('The given user id is invalid'); + } + $this->user = $user; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getUser() { + return $this->user; + } + + /** + * @param int $timestamp + * @return $this + * @throws \InvalidArgumentException if the timestamp is invalid + * @since 8.2.0 + */ + public function setTimestamp($timestamp) { + if (!is_int($timestamp)) { + throw new \InvalidArgumentException('The given timestamp is invalid'); + } + $this->timestamp = $timestamp; + return $this; + } + + /** + * @return int + * @since 8.2.0 + */ + public function getTimestamp() { + return $this->timestamp; + } + + /** + * @param string $type + * @param int $id + * @return $this + * @throws \InvalidArgumentException if the object type or id is invalid + * @since 8.2.0 + */ + public function setObject($type, $id) { + if (!is_string($type) || $type === '' || isset($type[64])) { + throw new \InvalidArgumentException('The given object type is invalid'); + } + $this->objectType = $type; + + if (!is_int($id)) { + throw new \InvalidArgumentException('The given object id is invalid'); + } + $this->objectId = $id; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getObjectType() { + return $this->objectType; + } + + /** + * @return int + * @since 8.2.0 + */ + public function getObjectId() { + return $this->objectId; + } + + /** + * @param string $subject + * @param array $parameters + * @return $this + * @throws \InvalidArgumentException if the subject or parameters are invalid + * @since 8.2.0 + */ + public function setSubject($subject, array $parameters = []) { + if (!is_string($subject) || $subject === '' || isset($subject[64])) { + throw new \InvalidArgumentException('The given subject is invalid'); + } + $this->subject = $subject; + + if (!is_array($parameters)) { + throw new \InvalidArgumentException('The given subject parameters are invalid'); + } + $this->subjectParameters = $parameters; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getSubject() { + return $this->subject; + } + + /** + * @return string[] + * @since 8.2.0 + */ + public function getSubjectParameters() { + return $this->subjectParameters; + } + + /** + * @param string $subject + * @return $this + * @throws \InvalidArgumentException if the subject are invalid + * @since 8.2.0 + */ + public function setParsedSubject($subject) { + if (!is_string($subject) || $subject === '') { + throw new \InvalidArgumentException('The given parsed subject is invalid'); + } + $this->subjectParsed = $subject; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getParsedSubject() { + return $this->subjectParsed; + } + + /** + * @param string $message + * @param array $parameters + * @return $this + * @throws \InvalidArgumentException if the message or parameters are invalid + * @since 8.2.0 + */ + public function setMessage($message, array $parameters = []) { + if (!is_string($message) || $message === '' || isset($message[64])) { + throw new \InvalidArgumentException('The given message is invalid'); + } + $this->message = $message; + + if (!is_array($parameters)) { + throw new \InvalidArgumentException('The given message parameters are invalid'); + } + $this->messageParameters = $parameters; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getMessage() { + return $this->message; + } + + /** + * @return string[] + * @since 8.2.0 + */ + public function getMessageParameters() { + return $this->messageParameters; + } + + /** + * @param string $message + * @return $this + * @throws \InvalidArgumentException if the message are invalid + * @since 8.2.0 + */ + public function setParsedMessage($message) { + if (!is_string($message) || $message === '') { + throw new \InvalidArgumentException('The given parsed message is invalid'); + } + $this->messageParsed = $message; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getParsedMessage() { + return $this->messageParsed; + } + + /** + * @param string $link + * @return $this + * @throws \InvalidArgumentException if the link are invalid + * @since 8.2.0 + */ + public function setLink($link) { + if (!is_string($link) || $link === '' || isset($link[4000])) { + throw new \InvalidArgumentException('The given link is invalid'); + } + $this->link = $link; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getLink() { + return $this->link; + } + + /** + * @param string $icon + * @return $this + * @throws \InvalidArgumentException if the icon are invalid + * @since 8.2.0 + */ + public function setIcon($icon) { + if (!is_string($icon) || $icon === '' || isset($icon[64])) { + throw new \InvalidArgumentException('The given icon is invalid'); + } + $this->icon = $icon; + return $this; + } + + /** + * @return string + * @since 8.2.0 + */ + public function getIcon() { + return $this->icon; + } + + /** + * @return IAction + * @since 8.2.0 + */ + public function createAction() { + return new Action(); + } + + /** + * @param IAction $action + * @return $this + * @throws \InvalidArgumentException if the action are invalid + * @since 8.2.0 + */ + public function addAction(IAction $action) { + if (!$action->isValid()) { + throw new \InvalidArgumentException('The given action is invalid'); + } + $this->actions[] = $action; + return $this; + } + + /** + * @return IAction[] + * @since 8.2.0 + */ + public function getActions() { + return $this->actions; + } + + /** + * @param IAction $action + * @return $this + * @throws \InvalidArgumentException if the action are invalid + * @since 8.2.0 + */ + public function addParsedAction(IAction $action) { + if (!$action->isValidParsed()) { + throw new \InvalidArgumentException('The given parsed action is invalid'); + } + $this->actionsParsed[] = $action; + return $this; + } + + /** + * @return IAction[] + * @since 8.2.0 + */ + public function getParsedActions() { + return $this->actionsParsed; + } + + /** + * @return bool + * @since 8.2.0 + */ + public function isValid() { + return + $this->isValidCommon() + && + $this->getSubject() !== '' + ; + } + + /** + * @return bool + * @since 8.2.0 + */ + public function isValidParsed() { + return + $this->isValidCommon() + && + $this->getParsedSubject() !== '' + ; + } + + /** + * @return bool + */ + protected function isValidCommon() { + return + $this->getApp() !== '' + && + $this->getUser() !== '' + && + $this->getTimestamp() !== 0 + && + $this->getObjectType() !== '' + && + $this->getObjectId() !== 0 + ; + } +} diff --git a/lib/private/preview.php b/lib/private/preview.php index 5dcab476a4f..978da1161c2 100644 --- a/lib/private/preview.php +++ b/lib/private/preview.php @@ -38,6 +38,9 @@ class Preview { //the thumbnail folder const THUMBNAILS_FOLDER = 'thumbnails'; + const MODE_FILL = 'fill'; + const MODE_COVER = 'cover'; + //config private $maxScaleFactor; /** @var int maximum width allowed for a preview */ @@ -56,6 +59,7 @@ class Preview { private $scalingUp; private $mimeType; private $keepAspect = false; + private $mode = self::MODE_FILL; //used to calculate the size of the preview to generate /** @var int $maxPreviewWidth max width a preview can have */ @@ -332,6 +336,19 @@ class Preview { } /** + * Set whether to cover or fill the specified dimensions + * + * @param string $mode + * + * @return \OC\Preview + */ + public function setMode($mode) { + $this->mode = $mode; + + return $this; + } + + /** * Sets whether we need to generate a preview which keeps the aspect ratio of the original file * * @param bool $keepAspect @@ -531,14 +548,22 @@ class Preview { * @param int $askedWidth * @param int $askedHeight * + * @param int $originalWidth + * @param int $originalHeight * @return \int[] */ - private function applyAspectRatio($askedWidth, $askedHeight) { - $originalRatio = $this->maxPreviewWidth / $this->maxPreviewHeight; + private function applyAspectRatio($askedWidth, $askedHeight, $originalWidth = 0, $originalHeight = 0) { + if(!$originalWidth){ + $originalWidth= $this->maxPreviewWidth; + } + if (!$originalHeight) { + $originalHeight = $this->maxPreviewHeight; + } + $originalRatio = $originalWidth / $originalHeight; // Defines the box in which the preview has to fit $scaleFactor = $this->scalingUp ? $this->maxScaleFactor : 1; - $askedWidth = min($askedWidth, $this->maxPreviewWidth * $scaleFactor); - $askedHeight = min($askedHeight, $this->maxPreviewHeight * $scaleFactor); + $askedWidth = min($askedWidth, $originalWidth * $scaleFactor); + $askedHeight = min($askedHeight, $originalHeight * $scaleFactor); if ($askedWidth / $originalRatio < $askedHeight) { // width restricted @@ -551,6 +576,32 @@ class Preview { } /** + * Resizes the boundaries to cover the area + * + * @param int $askedWidth + * @param int $askedHeight + * @param int $previewWidth + * @param int $previewHeight + * @return \int[] + */ + private function applyCover($askedWidth, $askedHeight, $previewWidth, $previewHeight) { + $originalRatio = $previewWidth / $previewHeight; + // Defines the box in which the preview has to fit + $scaleFactor = $this->scalingUp ? $this->maxScaleFactor : 1; + $askedWidth = min($askedWidth, $previewWidth * $scaleFactor); + $askedHeight = min($askedHeight, $previewHeight * $scaleFactor); + + if ($askedWidth / $originalRatio > $askedHeight) { + // height restricted + $askedHeight = round($askedWidth / $originalRatio); + } else { + $askedWidth = round($askedHeight * $originalRatio); + } + + return [(int)$askedWidth, (int)$askedHeight]; + } + + /** * Makes sure an upscaled preview doesn't end up larger than the max dimensions defined in the * config * @@ -791,7 +842,15 @@ class Preview { */ if ($this->keepAspect) { list($askedWidth, $askedHeight) = - $this->applyAspectRatio($askedWidth, $askedHeight); + $this->applyAspectRatio($askedWidth, $askedHeight, $previewWidth, $previewHeight); + } + + if ($this->mode === self::MODE_COVER) { + list($scaleWidth, $scaleHeight) = + $this->applyCover($askedWidth, $askedHeight, $previewWidth, $previewHeight); + } else { + $scaleWidth = $askedWidth; + $scaleHeight = $askedHeight; } /** @@ -799,7 +858,7 @@ class Preview { * Takes the scaling ratio into consideration */ list($newPreviewWidth, $newPreviewHeight) = $this->scale( - $image, $askedWidth, $askedHeight, $previewWidth, $previewHeight + $image, $scaleWidth, $scaleHeight, $previewWidth, $previewHeight ); // The preview has been resized and should now have the asked dimensions @@ -1000,6 +1059,9 @@ class Preview { if ($this->keepAspect && !$isMaxPreview) { $previewPath .= '-with-aspect'; } + if ($this->mode === self::MODE_COVER) { + $previewPath .= '-cover'; + } $previewPath .= '.png'; return $previewPath; diff --git a/lib/private/route/router.php b/lib/private/route/router.php index 33669452f2d..7b7849a6da0 100644 --- a/lib/private/route/router.php +++ b/lib/private/route/router.php @@ -169,8 +169,9 @@ class Router implements IRouter { $this->useCollection('root'); require_once 'settings/routes.php'; require_once 'core/routes.php'; - - // include ocs routes + } + if ($this->loaded) { + // include ocs routes, must be loaded last for /ocs prefix require_once 'ocs/routes.php'; $collection = $this->getCollection('ocs'); $collection->addPrefix('/ocs'); diff --git a/lib/private/server.php b/lib/private/server.php index acafb7b2dff..59d03c2df97 100644 --- a/lib/private/server.php +++ b/lib/private/server.php @@ -53,6 +53,7 @@ use OC\Lock\DBLockingProvider; use OC\Lock\MemcacheLockingProvider; use OC\Lock\NoopLockingProvider; use OC\Mail\Mailer; +use OC\Notification\Manager; use OC\Security\CertificateManager; use OC\Security\Crypto; use OC\Security\Hasher; @@ -177,8 +178,6 @@ class Server extends SimpleContainer implements IServerContainer { $manager = $c->getUserManager(); $session = new \OC\Session\Memory(''); - $cryptoWrapper = $c->getSessionCryptoWrapper(); - $session = $cryptoWrapper->wrapSession($session); $userSession = new \OC\User\Session($manager, $session); $userSession->listen('\OC\User', 'preCreateUser', function ($uid, $password) { @@ -252,7 +251,7 @@ class Server extends SimpleContainer implements IServerContainer { if($config->getSystemValue('installed', false) && !(defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { $v = \OC_App::getAppVersions(); - $v['core'] = implode('.', \OC_Util::getVersion()); + $v['core'] = md5(file_get_contents(\OC::$SERVERROOT . '/version.php')); $version = implode(',', $v); $instanceId = \OC_Util::getInstanceId(); $path = \OC::$SERVERROOT; @@ -451,13 +450,13 @@ class Server extends SimpleContainer implements IServerContainer { ); }); $this->registerService('LockingProvider', function (Server $c) { - if ($c->getConfig()->getSystemValue('filelocking.enabled', false) or (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { + if ($c->getConfig()->getSystemValue('filelocking.enabled', true) or (defined('PHPUNIT_RUN') && PHPUNIT_RUN)) { /** @var \OC\Memcache\Factory $memcacheFactory */ $memcacheFactory = $c->getMemCacheFactory(); $memcache = $memcacheFactory->createLocking('lock'); -// if (!($memcache instanceof \OC\Memcache\NullCache)) { -// return new MemcacheLockingProvider($memcache); -// } + if (!($memcache instanceof \OC\Memcache\NullCache)) { + return new MemcacheLockingProvider($memcache); + } return new DBLockingProvider($c->getDatabaseConnection(), $c->getLogger()); } return new NoopLockingProvider(); @@ -470,6 +469,14 @@ class Server extends SimpleContainer implements IServerContainer { $c->getURLGenerator(), \OC::$configDir); }); + $this->registerService('MimeTypeLoader', function(Server $c) { + return new \OC\Files\Type\Loader( + $c->getDatabaseConnection() + ); + }); + $this->registerService('NotificationManager', function() { + return new Manager(); + }); $this->registerService('CapabilitiesManager', function (Server $c) { $manager = new \OC\CapabilitiesManager(); $manager->registerCapability(function() use ($c) { @@ -1011,6 +1018,15 @@ class Server extends SimpleContainer implements IServerContainer { } /** + * Get the MimeTypeLoader + * + * @return \OCP\Files\IMimeTypeLoader + */ + public function getMimeTypeLoader() { + return $this->query('MimeTypeLoader'); + } + + /** * Get the manager of all the capabilities * * @return \OC\CapabilitiesManager @@ -1030,6 +1046,16 @@ class Server extends SimpleContainer implements IServerContainer { } /** + * Get the Notification Manager + * + * @return \OC\Notification\IManager + * @since 8.2.0 + */ + public function getNotificationManager() { + return $this->query('NotificationManager'); + } + + /** * @return \OC\Session\CryptoWrapper */ public function getSessionCryptoWrapper() { diff --git a/lib/private/session/cryptosessiondata.php b/lib/private/session/cryptosessiondata.php index 60d22b25e97..6826ede5e33 100644 --- a/lib/private/session/cryptosessiondata.php +++ b/lib/private/session/cryptosessiondata.php @@ -32,22 +32,47 @@ use OCP\Security\ICrypto; class CryptoSessionData implements \ArrayAccess, ISession { /** @var ISession */ protected $session; - /** @var \OCP\Security\ICrypto */ protected $crypto; - /** @var string */ protected $passphrase; + /** @var array */ + protected $sessionValues; + /** @var bool */ + protected $isModified = false; + CONST encryptedSessionName = 'encrypted_session_data'; /** * @param ISession $session * @param ICrypto $crypto * @param string $passphrase */ - public function __construct(ISession $session, ICrypto $crypto, $passphrase) { + public function __construct(ISession $session, + ICrypto $crypto, + $passphrase) { $this->crypto = $crypto; $this->session = $session; $this->passphrase = $passphrase; + $this->initializeSession(); + } + + /** + * Close session if class gets destructed + */ + public function __destruct() { + $this->close(); + } + + protected function initializeSession() { + $encryptedSessionData = $this->session->get(self::encryptedSessionName); + try { + $this->sessionValues = json_decode( + $this->crypto->decrypt($encryptedSessionData, $this->passphrase), + true + ); + } catch (\Exception $e) { + $this->sessionValues = []; + } } /** @@ -57,8 +82,8 @@ class CryptoSessionData implements \ArrayAccess, ISession { * @param mixed $value */ public function set($key, $value) { - $encryptedValue = $this->crypto->encrypt(json_encode($value), $this->passphrase); - $this->session->set($key, $encryptedValue); + $this->sessionValues[$key] = $value; + $this->isModified = true; } /** @@ -68,17 +93,11 @@ class CryptoSessionData implements \ArrayAccess, ISession { * @return string|null Either the value or null */ public function get($key) { - $encryptedValue = $this->session->get($key); - if ($encryptedValue === null) { - return null; + if(isset($this->sessionValues[$key])) { + return $this->sessionValues[$key]; } - try { - $value = $this->crypto->decrypt($encryptedValue, $this->passphrase); - return json_decode($value); - } catch (\Exception $e) { - return null; - } + return null; } /** @@ -88,7 +107,7 @@ class CryptoSessionData implements \ArrayAccess, ISession { * @return bool */ public function exists($key) { - return $this->session->exists($key); + return isset($this->sessionValues[$key]); } /** @@ -97,20 +116,29 @@ class CryptoSessionData implements \ArrayAccess, ISession { * @param string $key */ public function remove($key) { - $this->session->remove($key); + $this->isModified = true; + unset($this->sessionValues[$key]); + $this->session->remove(self::encryptedSessionName); } /** * Reset and recreate the session */ public function clear() { + $this->sessionValues = []; + $this->isModified = true; $this->session->clear(); } /** - * Close the session and release the lock + * Close the session and release the lock, also writes all changed data in batch */ public function close() { + if($this->isModified) { + $encryptedValue = $this->crypto->encrypt(json_encode($this->sessionValues), $this->passphrase); + $this->session->set(self::encryptedSessionName, $encryptedValue); + $this->isModified = false; + } $this->session->close(); } diff --git a/lib/private/session/internal.php b/lib/private/session/internal.php index 77197887754..8ee21272104 100644 --- a/lib/private/session/internal.php +++ b/lib/private/session/internal.php @@ -32,6 +32,10 @@ namespace OC\Session; * @package OC\Session */ class Internal extends Session { + /** + * @param string $name + * @throws \Exception + */ public function __construct($name) { session_name($name); set_error_handler(array($this, 'trapError')); @@ -42,10 +46,6 @@ class Internal extends Session { } } - public function __destruct() { - $this->close(); - } - /** * @param string $key * @param integer $value diff --git a/lib/private/share/share.php b/lib/private/share/share.php index d0c69badb46..6ad36d60fe8 100644 --- a/lib/private/share/share.php +++ b/lib/private/share/share.php @@ -37,6 +37,7 @@ namespace OC\Share; +use OC\Files\Filesystem; use OCP\IUserSession; use OCP\IDBConnection; use OCP\IConfig; @@ -120,6 +121,7 @@ class Share extends Constants { */ public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false) { + Filesystem::initMountPoints($ownerUser); $shares = $sharePaths = $fileTargets = array(); $publicShare = false; $remoteShare = false; @@ -701,6 +703,18 @@ class Share extends Constants { throw new \Exception($message_t); } } + if ($checkExists = self::getItems($itemType, $itemSource, self::SHARE_TYPE_USER, + $shareWith, null, self::FORMAT_NONE, null, 1, true, true)) { + // Only allow the same share to occur again if it is the same + // owner and is not a user share, this use case is for increasing + // permissions for a specific user + if ($checkExists['uid_owner'] != $uidOwner || $checkExists['share_type'] == $shareType) { + $message = 'Sharing %s failed, because this item is already shared with user %s'; + $message_t = $l->t('Sharing %s failed, because this item is already shared with user %s', array($itemSourceName, $shareWith)); + \OC_Log::write('OCP\Share', sprintf($message, $itemSourceName, $shareWith), \OC_Log::ERROR); + throw new \Exception($message_t); + } + } } else if ($shareType === self::SHARE_TYPE_GROUP) { if (!\OC_Group::groupExists($shareWith)) { $message = 'Sharing %s failed, because the group %s does not exist'; @@ -751,7 +765,7 @@ class Share extends Constants { } // Generate hash of password - same method as user passwords - if (!empty($shareWith)) { + if (is_string($shareWith) && $shareWith !== '') { self::verifyPassword($shareWith); $shareWith = \OC::$server->getHasher()->hash($shareWith); } else { diff --git a/lib/private/updater.php b/lib/private/updater.php index f73fa8ff655..71e9732c307 100644 --- a/lib/private/updater.php +++ b/lib/private/updater.php @@ -212,19 +212,26 @@ class Updater extends BasicEmitter { } /** + * Return version from which this version is allowed to upgrade from + * + * @return string allowed previous version + */ + private function getAllowedPreviousVersion() { + // this should really be a JSON file + require \OC::$SERVERROOT . '/version.php'; + return implode('.', $OC_VersionCanBeUpgradedFrom); + } + + /** * Whether an upgrade to a specified version is possible * @param string $oldVersion * @param string $newVersion + * @param string $allowedPreviousVersion * @return bool */ - public function isUpgradePossible($oldVersion, $newVersion) { - $oldVersion = explode('.', $oldVersion); - $newVersion = explode('.', $newVersion); - - if($newVersion[0] > ($oldVersion[0] + 1) || $oldVersion[0] > $newVersion[0]) { - return false; - } - return true; + public function isUpgradePossible($oldVersion, $newVersion, $allowedPreviousVersion) { + return (version_compare($allowedPreviousVersion, $oldVersion, '<=') + && version_compare($oldVersion, $newVersion, '<=')); } /** @@ -259,8 +266,9 @@ class Updater extends BasicEmitter { */ private function doUpgrade($currentVersion, $installedVersion) { // Stop update if the update is over several major versions - if (!self::isUpgradePossible($installedVersion, $currentVersion)) { - throw new \Exception('Updates between multiple major versions are unsupported.'); + $allowedPreviousVersion = $this->getAllowedPreviousVersion(); + if (!self::isUpgradePossible($installedVersion, $currentVersion, $allowedPreviousVersion)) { + throw new \Exception('Updates between multiple major versions and downgrades are unsupported.'); } // Update .htaccess files diff --git a/lib/private/util.php b/lib/private/util.php index 0fda55496dc..eb1de5be5a4 100644 --- a/lib/private/util.php +++ b/lib/private/util.php @@ -1054,6 +1054,7 @@ class OC_Util { return $id; } + protected static $encryptedToken; /** * Register an get/post call. Important to prevent CSRF attacks. * @@ -1066,6 +1067,11 @@ class OC_Util { * @see OC_Util::isCallRegistered() */ public static function callRegister() { + // Use existing token if function has already been called + if(isset(self::$encryptedToken)) { + return self::$encryptedToken; + } + // Check if a token exists if (!\OC::$server->getSession()->exists('requesttoken')) { // No valid token found, generate a new one. @@ -1078,7 +1084,8 @@ class OC_Util { // Encrypt the token to mitigate breach-like attacks $sharedSecret = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(10); - return \OC::$server->getCrypto()->encrypt($requestToken, $sharedSecret) . ':' . $sharedSecret; + self::$encryptedToken = \OC::$server->getCrypto()->encrypt($requestToken, $sharedSecret) . ':' . $sharedSecret; + return self::$encryptedToken; } /** @@ -1449,8 +1456,12 @@ class OC_Util { if ($config->getSystemValue('installed', false)) { $installedVersion = $config->getSystemValue('version', '0.0.0'); $currentVersion = implode('.', OC_Util::getVersion()); - if (version_compare($currentVersion, $installedVersion, '>')) { + $versionDiff = version_compare($currentVersion, $installedVersion); + if ($versionDiff > 0) { return true; + } else if ($versionDiff < 0) { + // downgrade attempt, throw exception + throw new \OC\HintException('Downgrading is not supported and is likely to cause unpredictable issues (from ' . $installedVersion . ' to ' . $currentVersion . ')'); } // also check for upgrades for apps (independently from the user) diff --git a/lib/public/appframework/http/jsonresponse.php b/lib/public/appframework/http/jsonresponse.php index 456a5616d4d..1a509200dd7 100644 --- a/lib/public/appframework/http/jsonresponse.php +++ b/lib/public/appframework/http/jsonresponse.php @@ -64,7 +64,7 @@ class JSONResponse extends Response { * @throws \Exception If data could not get encoded */ public function render() { - $response = json_encode($this->data); + $response = json_encode($this->data, JSON_HEX_TAG); if($response === false) { throw new \Exception(sprintf('Could not json_encode due to invalid ' . 'non UTF-8 characters in the array: %s', var_export($this->data, true))); diff --git a/lib/public/autoloadnotallowedexception.php b/lib/public/autoloadnotallowedexception.php new file mode 100644 index 00000000000..edb7121c065 --- /dev/null +++ b/lib/public/autoloadnotallowedexception.php @@ -0,0 +1,36 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + */ + +namespace OCP; + +/** + * Exception for when a not allowed path is attempted to be autoloaded + * @since 8.2.0 + */ +class AutoloadNotAllowedException extends \DomainException { + /** + * @param string $path + * @since 8.2.0 + */ + public function __construct($path) { + parent::__construct('Autoload path not allowed: '.$path); + } +} + diff --git a/lib/public/files/imimetypeloader.php b/lib/public/files/imimetypeloader.php new file mode 100644 index 00000000000..24937ea9b86 --- /dev/null +++ b/lib/public/files/imimetypeloader.php @@ -0,0 +1,59 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCP\Files; + +/** + * Interface IMimeTypeLoader + * @package OCP\Files + * @since 8.2.0 + * + * Interface to load mimetypes + **/ +interface IMimeTypeLoader { + + /** + * Get a mimetype from its ID + * + * @param int $id + * @return string|null + * @since 8.2.0 + */ + public function getMimetypeById($id); + + /** + * Get a mimetype ID, adding the mimetype to the DB if it does not exist + * + * @param string $mimetype + * @return int + * @since 8.2.0 + */ + public function getId($mimetype); + + /** + * Test if a mimetype exists in the database + * + * @param string $mimetype + * @return bool + * @since 8.2.0 + */ + public function exists($mimetype); +} diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php index a6d83156de3..8be23dff214 100644 --- a/lib/public/iservercontainer.php +++ b/lib/public/iservercontainer.php @@ -440,6 +440,13 @@ interface IServerContainer { */ public function getMimeTypeDetector(); + /** + * Get the MimeTypeLoader + * + * @return \OCP\Files\IMimeTypeLoader + * @since 8.2.0 + */ + public function getMimeTypeLoader(); /** * Get the EventDispatcher @@ -448,4 +455,12 @@ interface IServerContainer { * @since 8.2.0 */ public function getEventDispatcher(); + + /** + * Get the Notification Manager + * + * @return \OC\Notification\IManager + * @since 8.2.0 + */ + public function getNotificationManager(); } diff --git a/ocs/routes.php b/ocs/routes.php index f8e6f33c48a..9a8625bcc31 100644 --- a/ocs/routes.php +++ b/ocs/routes.php @@ -104,31 +104,33 @@ API::register( ); // Server-to-Server Sharing -$s2s = new \OCA\Files_Sharing\API\Server2Server(); -API::register('post', +if (\OC::$server->getAppManager()->isEnabledForUser('files_sharing')) { + $s2s = new \OCA\Files_Sharing\API\Server2Server(); + API::register('post', '/cloud/shares', array($s2s, 'createShare'), 'files_sharing', API::GUEST_AUTH -); + ); -API::register('post', + API::register('post', '/cloud/shares/{id}/accept', array($s2s, 'acceptShare'), 'files_sharing', API::GUEST_AUTH -); + ); -API::register('post', + API::register('post', '/cloud/shares/{id}/decline', array($s2s, 'declineShare'), 'files_sharing', API::GUEST_AUTH -); + ); -API::register('post', + API::register('post', '/cloud/shares/{id}/unshare', array($s2s, 'unshare'), 'files_sharing', API::GUEST_AUTH -); + ); +} diff --git a/settings/controller/checksetupcontroller.php b/settings/controller/checksetupcontroller.php index 33f94fe4238..ca4eb255f6b 100644 --- a/settings/controller/checksetupcontroller.php +++ b/settings/controller/checksetupcontroller.php @@ -143,7 +143,7 @@ class CheckSetupController extends Controller { } $features = (string)$this->l10n->t('installing and updating apps via the app store or Federated Cloud Sharing'); - if(OC_Util::getEditionString() !== '') { + if(!$this->config->getSystemValue('appstoreenabled', true)) { $features = (string)$this->l10n->t('Federated Cloud Sharing'); } diff --git a/settings/l10n/cs_CZ.js b/settings/l10n/cs_CZ.js index 7ca3772718e..ceee37922cf 100644 --- a/settings/l10n/cs_CZ.js +++ b/settings/l10n/cs_CZ.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle instalační dokumentace a php konfiguraci na serveru, hlavně při použití php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", diff --git a/settings/l10n/cs_CZ.json b/settings/l10n/cs_CZ.json index ef0fab25d17..2dbe29a8cab 100644 --- a/settings/l10n/cs_CZ.json +++ b/settings/l10n/cs_CZ.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php není nejspíše správně nastaveno pro dotazování na proměnné hodnoty systému. Test s getenv(\"PATH\") vrací pouze prázdnou odpověď.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Zkontrolujte prosím konfiguraci php podle instalační dokumentace a php konfiguraci na serveru, hlavně při použití php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfigurace je nastavena pouze pro čtení. Toto znemožňuje některá nastavení přes webové rozhraní. Dále musí být pro každou změnu povolen zápis do konfiguračního souboru ručně.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP je patrně nastaveno tak, aby odstraňovalo bloky komentářů. Toto bude mít za následek nedostupnost množství hlavních aplikací.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Toto je pravděpodobně způsobeno aplikacemi pro urychlení načítání jako jsou Zend OPcache nebo eAccelerator.", diff --git a/settings/l10n/da.js b/settings/l10n/da.js index e7c7baf4e32..a8ad193c646 100644 --- a/settings/l10n/da.js +++ b/settings/l10n/da.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lader ikke til at være korrekt opsat til at forespørge miljøvariablerne i systemet. Testen med getenv(\"PATH\") returnerer blot et tomt svar.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Tjek venligst dokumentationen til installation for noterne til konfiguration af php og konfigurationen af php for din server, særligt når php-fpm anvendes.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator", diff --git a/settings/l10n/da.json b/settings/l10n/da.json index 4656d407098..bb8f5cfba3c 100644 --- a/settings/l10n/da.json +++ b/settings/l10n/da.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lader ikke til at være korrekt opsat til at forespørge miljøvariablerne i systemet. Testen med getenv(\"PATH\") returnerer blot et tomt svar.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Tjek venligst dokumentationen til installation for noterne til konfiguration af php og konfigurationen af php for din server, særligt når php-fpm anvendes.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfiguration er blevet slået til. Dette forhindrer indstillinger af nogle konfigurationer via webgrænsefladen. I tillæg skal filen gøres skrivbar manuelt for hver opdatering.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP opsætning blokere \"inline doc blocks\". dette gør at flere grundlæggende apps utilgængelige", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette er sansynligvis forårsaget af et accelerator eller cache som Zend OPcache eller eAccelerator", diff --git a/settings/l10n/de.js b/settings/l10n/de.js index b74a5364d1a..79c5d57cf13 100644 --- a/settings/l10n/de.js +++ b/settings/l10n/de.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfe die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", diff --git a/settings/l10n/de.json b/settings/l10n/de.json index d0e658c3c0f..0d0d2eef602 100644 --- a/settings/l10n/de.json +++ b/settings/l10n/de.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfe die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Deines Servers, insbesondere dann, wenn Du PHP-FPM einsetzt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", diff --git a/settings/l10n/de_DE.js b/settings/l10n/de_DE.js index 9c1b5e3fd94..31276630dc0 100644 --- a/settings/l10n/de_DE.js +++ b/settings/l10n/de_DE.js @@ -115,7 +115,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfen Sie die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzen.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", diff --git a/settings/l10n/de_DE.json b/settings/l10n/de_DE.json index 046b412337f..e3fd49d2857 100644 --- a/settings/l10n/de_DE.json +++ b/settings/l10n/de_DE.json @@ -113,7 +113,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP scheint zur Abfrage von Systemumgebungsvariablen nicht richtig eingerichtet zu sein. Der Test mit getenv (\"PATH\") liefert nur eine leere Antwort zurück.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Bitten überprüfen Sie die Installationsdokumentation auf Hinweise zur PHP-Konfiguration sowie die PHP-Konfiguration Ihres Servers, insbesondere dann, wenn Sie PHP-FPM einsetzen.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Die schreibgeschützte Konfiguration wurde aktiviert. Dies verhindert das Setzen einiger Einstellungen über die Web-Schnittstelle. Weiterhin muss bei jedem Update der Schreibzugriff auf die Datei händisch aktiviert werden.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP ist offenbar so konfiguriert, dass PHPDoc-Blöcke in der Anweisung entfernt werden. Dadurch sind mehrere Kern-Apps nicht erreichbar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dies wird wahrscheinlich durch Zwischenspeicher/Beschleuniger wie etwa Zend OPcache oder eAccelerator verursacht.", diff --git a/settings/l10n/el.js b/settings/l10n/el.js index 859bfe296cf..21b70a65740 100644 --- a/settings/l10n/el.js +++ b/settings/l10n/el.js @@ -119,7 +119,7 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την τεκμηρίωση της εγκατάστασης για τις σημειώσεις σχετικά με τη διαμόρφωση της php και τη διαμόρφωση της php στο διακομιστή σας, ειδικά όταν χρησιμοποιείτε php-fpm.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση της εγκατάστασης ↗</a> για τις σημειώσεις σχετικά με τη διαμόρφωση της php και τη διαμόρφωση της php στο διακομιστή σας, ειδικά όταν χρησιμοποιείτε php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Η ρύθμιση \"μόνο ανάγνωση\" έχει ενεργοποιηθεί. Αυτό εμποδίζει τον καθορισμό κάποιων ρυθμίσεων μέσω της διεπαφής web. Επιπλέον, το αρχείο πρέπει να γίνει χειροκίνητα εγγράψιμο πριν από κάθε διαδικασία ενημέρωσης.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.", diff --git a/settings/l10n/el.json b/settings/l10n/el.json index a0b1f0c7f13..87aca13d1bd 100644 --- a/settings/l10n/el.json +++ b/settings/l10n/el.json @@ -117,7 +117,7 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Η php δεν φαίνεται να είναι σωστά ρυθμισμένη για ερωτήματα σε μεταβλητές περιβάλλοντος του συστήματος. Η δοκιμή με την εντολή getenv(\"PATH\") επιστρέφει κενή απάντηση.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την τεκμηρίωση της εγκατάστασης για τις σημειώσεις σχετικά με τη διαμόρφωση της php και τη διαμόρφωση της php στο διακομιστή σας, ειδικά όταν χρησιμοποιείτε php-fpm.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Παρακαλούμε ελέγξτε την <a target=\"_blank\" href=\"%s\">τεκμηρίωση της εγκατάστασης ↗</a> για τις σημειώσεις σχετικά με τη διαμόρφωση της php και τη διαμόρφωση της php στο διακομιστή σας, ειδικά όταν χρησιμοποιείτε php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Η ρύθμιση \"μόνο ανάγνωση\" έχει ενεργοποιηθεί. Αυτό εμποδίζει τον καθορισμό κάποιων ρυθμίσεων μέσω της διεπαφής web. Επιπλέον, το αρχείο πρέπει να γίνει χειροκίνητα εγγράψιμο πριν από κάθε διαδικασία ενημέρωσης.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Ο PHP φαίνεται να είναι ρυθμισμένος ώστε να αφαιρεί μπλοκ εσωτερικών κειμένων (inline doc). Αυτό θα καταστήσει κύριες εφαρμογές μη-διαθέσιμες.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Αυτό πιθανόν προκλήθηκε από προσωρινή μνήμη (cache)/επιταχυντή όπως τη Zend OPcache ή τον eAccelerator.", diff --git a/settings/l10n/en_GB.js b/settings/l10n/en_GB.js index af0d61512e3..3385448f4e4 100644 --- a/settings/l10n/en_GB.js +++ b/settings/l10n/en_GB.js @@ -112,7 +112,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.", diff --git a/settings/l10n/en_GB.json b/settings/l10n/en_GB.json index bac57ed2974..7a426bbc1f4 100644 --- a/settings/l10n/en_GB.json +++ b/settings/l10n/en_GB.json @@ -110,7 +110,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator.", diff --git a/settings/l10n/es.js b/settings/l10n/es.js index 51c22653ad8..efb56b54c38 100644 --- a/settings/l10n/es.js +++ b/settings/l10n/es.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php parece que no está configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") sólo retorna una respuesta vacía.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor, verifique la documentación de instalación para las notas de configuración de php y la configuración de php en tu servidor, específicamente donde se está usando php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.", @@ -132,6 +131,7 @@ OC.L10N.register( "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwrite.cli.url\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor revise las <a target=\"_blank\" href=\"%s\">guías de instalación ↗</a>, y compruebe los errores o avisos en el <a ref=\"#log-section\">registro</a>.", + "All checks passed." : "Ha pasado todos los controles", "Open documentation" : "Documentación abierta", "Allow apps to use the Share API" : "Permitir a las aplicaciones utilizar la API de Compartición", "Allow users to share via link" : "Permite a los usuarios compartir por medio de enlaces", @@ -155,6 +155,10 @@ OC.L10N.register( "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos.", "Enable server-side encryption" : "Habilitar cifrado en el servidor", "Please read carefully before activating server-side encryption: " : "Por favor lea cuidadosamente antes de activar el cifrado del lado del servidor.", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "El cifrado en el lado servidor es un proceso de una sola vía. Una vez el cifrado está habilitado, todos los archivos desde este punto en adelante serán cifrados en el servidor y no será posible deshabilitar el cifrado posteriormente. ", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Cualquiera que tenga acceso a este servidor ownCloud, puede descifrar estos archivos, simplemente leyendo la contraseña que se guarda en texto plano en los archivos de sesión. El cifrado del lado servidor, no protege por tanto de administradores malintencionados, pero es ùtil para proteger los datos en almacenes de datos externos de accesos no autorizados. ", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Dependiendo del módulo de cifrado seleccionado, el tamaño de los archivos se puede ver incrementado (hasta un 35%% o más para las opciones por defecto).", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Deberia salvar de forma regular las claves de cifrado para evitar la perdida de datos (data/<user>/files_encryption and data/files_encryption)", "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final. ¿Realmente quiere activar el cifrado?", "Enable encryption" : "Habilitar cifrado", "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado el modulo de cifrado. Por favor habilite un modulo de cifrado en el menú de aplicaciones.", diff --git a/settings/l10n/es.json b/settings/l10n/es.json index 3c0fefc7cfa..f7e3ce433b7 100644 --- a/settings/l10n/es.json +++ b/settings/l10n/es.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php parece que no está configurado correctamente para solicitar las variables de entorno del sistema. La prueba con getenv(\"PATH\") sólo retorna una respuesta vacía.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor, verifique la documentación de instalación para las notas de configuración de php y la configuración de php en tu servidor, específicamente donde se está usando php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Se ha habilitado la configuración de sólo lectura. Esto evita que ajustar algunas configuraciones a través de la interfaz web. Además, el archivo debe hacerse modificable manualmente para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP está aparentemente configurado para eliminar bloques de documentos en línea. Esto hará que varias aplicaciones principales no estén accesibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Probablemente esto venga a causa de la caché o un acelerador, tales como Zend OPcache o eAccelerator.", @@ -130,6 +129,7 @@ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Si su instalación no está ubicada en la raíz del dominio y usa el cron del sistema, puede haber problemas al generarse los URL. Para evitarlos, configure la opción \"overwrite.cli.url\" en su archivo config.php para que use la ruta de la raíz del sitio web de su instalación (sugerencia: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "No fue posible ejecutar cronjob vía CLI. Han aparecido los siguientes errores técnicos:", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Por favor revise las <a target=\"_blank\" href=\"%s\">guías de instalación ↗</a>, y compruebe los errores o avisos en el <a ref=\"#log-section\">registro</a>.", + "All checks passed." : "Ha pasado todos los controles", "Open documentation" : "Documentación abierta", "Allow apps to use the Share API" : "Permitir a las aplicaciones utilizar la API de Compartición", "Allow users to share via link" : "Permite a los usuarios compartir por medio de enlaces", @@ -153,6 +153,10 @@ "Use system's cron service to call the cron.php file every 15 minutes." : "Usar el servicio cron del sistema para llamar al archivo cron.php cada 15 minutos.", "Enable server-side encryption" : "Habilitar cifrado en el servidor", "Please read carefully before activating server-side encryption: " : "Por favor lea cuidadosamente antes de activar el cifrado del lado del servidor.", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "El cifrado en el lado servidor es un proceso de una sola vía. Una vez el cifrado está habilitado, todos los archivos desde este punto en adelante serán cifrados en el servidor y no será posible deshabilitar el cifrado posteriormente. ", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Cualquiera que tenga acceso a este servidor ownCloud, puede descifrar estos archivos, simplemente leyendo la contraseña que se guarda en texto plano en los archivos de sesión. El cifrado del lado servidor, no protege por tanto de administradores malintencionados, pero es ùtil para proteger los datos en almacenes de datos externos de accesos no autorizados. ", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Dependiendo del módulo de cifrado seleccionado, el tamaño de los archivos se puede ver incrementado (hasta un 35%% o más para las opciones por defecto).", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Deberia salvar de forma regular las claves de cifrado para evitar la perdida de datos (data/<user>/files_encryption and data/files_encryption)", "This is the final warning: Do you really want to enable encryption?" : "Esta es la advertencia final. ¿Realmente quiere activar el cifrado?", "Enable encryption" : "Habilitar cifrado", "No encryption module loaded, please enable an encryption module in the app menu." : "No se ha cargado el modulo de cifrado. Por favor habilite un modulo de cifrado en el menú de aplicaciones.", diff --git a/settings/l10n/et_EE.js b/settings/l10n/et_EE.js index 372d07bd51e..f2efb0221e6 100644 --- a/settings/l10n/et_EE.js +++ b/settings/l10n/et_EE.js @@ -109,6 +109,7 @@ OC.L10N.register( "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.", "System locale can not be set to a one which supports UTF-8." : "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.", "This means that there might be problems with certain characters in file names." : "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.", + "All checks passed." : "Kõik kontrollid on läbitud.", "Open documentation" : "Ava dokumentatsioon", "Allow apps to use the Share API" : "Luba rakendustel kasutada Share API-t", "Allow users to share via link" : "Luba kasutajatel lingiga jagamist ", diff --git a/settings/l10n/et_EE.json b/settings/l10n/et_EE.json index 5908d9e4149..b30857398ff 100644 --- a/settings/l10n/et_EE.json +++ b/settings/l10n/et_EE.json @@ -107,6 +107,7 @@ "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP moodul 'fileinfo' puudub. Soovitame tungivalt see lisada saavutamaks parimaid tulemusi failitüüpide tuvastamisel.", "System locale can not be set to a one which supports UTF-8." : "Süsteemi lokaliseeringuks ei saa panna sellist, mis toetab UTF-8-t.", "This means that there might be problems with certain characters in file names." : "See tähendab, et võib esineda probleeme failide nimedes mõnede sümbolitega.", + "All checks passed." : "Kõik kontrollid on läbitud.", "Open documentation" : "Ava dokumentatsioon", "Allow apps to use the Share API" : "Luba rakendustel kasutada Share API-t", "Allow users to share via link" : "Luba kasutajatel lingiga jagamist ", diff --git a/settings/l10n/fa.js b/settings/l10n/fa.js index ca8d2b41081..96a724cae10 100644 --- a/settings/l10n/fa.js +++ b/settings/l10n/fa.js @@ -110,6 +110,9 @@ OC.L10N.register( "Cheers!" : "سلامتی!", "Forum" : "انجمن", "Get the apps to sync your files" : "برنامه ها را دریافت کنید تا فایل هایتان را همگام سازید", + "Desktop client" : "نرم افزار دسکتاپ", + "Android app" : "اپ اندروید", + "iOS app" : "اپ iOS", "Show First Run Wizard again" : "راهبری کمکی اجرای اول را دوباره نمایش بده", "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "شما استفاده کردید از <strong>%s</strong> از میزان در دسترس <strong>%s</strong>", "Password" : "گذرواژه", diff --git a/settings/l10n/fa.json b/settings/l10n/fa.json index 9dc390ea8cc..354e56e1ffc 100644 --- a/settings/l10n/fa.json +++ b/settings/l10n/fa.json @@ -108,6 +108,9 @@ "Cheers!" : "سلامتی!", "Forum" : "انجمن", "Get the apps to sync your files" : "برنامه ها را دریافت کنید تا فایل هایتان را همگام سازید", + "Desktop client" : "نرم افزار دسکتاپ", + "Android app" : "اپ اندروید", + "iOS app" : "اپ iOS", "Show First Run Wizard again" : "راهبری کمکی اجرای اول را دوباره نمایش بده", "You have used <strong>%s</strong> of the available <strong>%s</strong>" : "شما استفاده کردید از <strong>%s</strong> از میزان در دسترس <strong>%s</strong>", "Password" : "گذرواژه", diff --git a/settings/l10n/fi_FI.js b/settings/l10n/fi_FI.js index 63456c91a95..cbbdba36bd5 100644 --- a/settings/l10n/fi_FI.js +++ b/settings/l10n/fi_FI.js @@ -115,6 +115,7 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Tarkista <a target=\"_blank\" href=\"%s\">asennusohjeet ↗</a> PHP-asetusten osalta, erityisesti jos käytössäsi on php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Vain luku -asetukset on otettu käyttöön. Tämä estää joidenkin asetusten määrittämisen selainkäyttöliittymän kautta. Lisäksi kyseinen tiedostoon tulee asettaa kirjoitusoikeus käsin joka päivityksen yhteydessä.", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Palvelimesi käyttöjärjestelmä on Microsoft Windows. Suosittelemme käyttämään parhaan mahdollisen käyttökokemuksen saavuttamiseksi Linuxia.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s alta version %2$s on asennettu. Vakauden ja suorituskyvyn vuoksi suosittelemme päivittämään uudempaan versioon %1$s.", @@ -149,6 +150,7 @@ OC.L10N.register( "Enable server-side encryption" : "Käytä palvelinpään salausta", "Please read carefully before activating server-side encryption: " : "Lue tarkasti, ennen kuin otat palvelinpään salauksen käyttöön:", "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Salausta ei voi perua. Kun salaus on käytössä, kaikki tiedostot siitä hetkestä eteenpäin palvelimella on salattu, eikä salausta voi enää poistaa käytöstä.", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Varmista, että otat säännöllisesti varmuuskopiot salausavaimista, jotta et menetä kaikkia tietoja pysyvästi (data/<käyttäjä>/files_encryption ja data/files_encryption)", "This is the final warning: Do you really want to enable encryption?" : "Tämä on viimeinen varoitus: haluatko varmasti ottaa salauksen käyttöön?", "Enable encryption" : "Käytä salausta", "No encryption module loaded, please enable an encryption module in the app menu." : "Salausmoduulia ei ole käytössä. Ota salausmoduuli käyttöön sovellusvalikosta.", diff --git a/settings/l10n/fi_FI.json b/settings/l10n/fi_FI.json index 932c3950528..f4b6bb41749 100644 --- a/settings/l10n/fi_FI.json +++ b/settings/l10n/fi_FI.json @@ -113,6 +113,7 @@ "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Tarkista <a target=\"_blank\" href=\"%s\">asennusohjeet ↗</a> PHP-asetusten osalta, erityisesti jos käytössäsi on php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Vain luku -asetukset on otettu käyttöön. Tämä estää joidenkin asetusten määrittämisen selainkäyttöliittymän kautta. Lisäksi kyseinen tiedostoon tulee asettaa kirjoitusoikeus käsin joka päivityksen yhteydessä.", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "Palvelimesi käyttöjärjestelmä on Microsoft Windows. Suosittelemme käyttämään parhaan mahdollisen käyttökokemuksen saavuttamiseksi Linuxia.", "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s alta version %2$s on asennettu. Vakauden ja suorituskyvyn vuoksi suosittelemme päivittämään uudempaan versioon %1$s.", @@ -147,6 +148,7 @@ "Enable server-side encryption" : "Käytä palvelinpään salausta", "Please read carefully before activating server-side encryption: " : "Lue tarkasti, ennen kuin otat palvelinpään salauksen käyttöön:", "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Salausta ei voi perua. Kun salaus on käytössä, kaikki tiedostot siitä hetkestä eteenpäin palvelimella on salattu, eikä salausta voi enää poistaa käytöstä.", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Varmista, että otat säännöllisesti varmuuskopiot salausavaimista, jotta et menetä kaikkia tietoja pysyvästi (data/<käyttäjä>/files_encryption ja data/files_encryption)", "This is the final warning: Do you really want to enable encryption?" : "Tämä on viimeinen varoitus: haluatko varmasti ottaa salauksen käyttöön?", "Enable encryption" : "Käytä salausta", "No encryption module loaded, please enable an encryption module in the app menu." : "Salausmoduulia ei ole käytössä. Ota salausmoduuli käyttöön sovellusvalikosta.", diff --git a/settings/l10n/fr.js b/settings/l10n/fr.js index d07fe9ebf26..c20bef29b3c 100644 --- a/settings/l10n/fr.js +++ b/settings/l10n/fr.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(\"PATH\") retourne seulement une réponse vide. ", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Veuillez verifier la documentation d'installation concernant les instructions de configuration de php ainsi que la configuration de votre serveur, en particulier dans le cas où vous utilisez php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture avant chaque mise à jour.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP est apparemment configuré pour supprimer les blocs de documentation internes. Cela rendra plusieurs applications de base inaccessibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/fr.json b/settings/l10n/fr.json index 0688759770c..b86a44adaf0 100644 --- a/settings/l10n/fr.json +++ b/settings/l10n/fr.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php ne semble pas être configuré de manière à récupérer les valeurs des variables d’environnement. Le test de la commande getenv(\"PATH\") retourne seulement une réponse vide. ", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Veuillez verifier la documentation d'installation concernant les instructions de configuration de php ainsi que la configuration de votre serveur, en particulier dans le cas où vous utilisez php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuration est en mode lecture seule. Ceci empêche la modification de certaines configurations via l'interface web. De plus, le fichier doit être passé manuellement en lecture-écriture avant chaque mise à jour.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP est apparemment configuré pour supprimer les blocs de documentation internes. Cela rendra plusieurs applications de base inaccessibles.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La raison est probablement l'utilisation d'un cache / accélérateur tel que Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/gl.js b/settings/l10n/gl.js index 650b1d471cc..dc2a23f5a08 100644 --- a/settings/l10n/gl.js +++ b/settings/l10n/gl.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Semella que PHP non está configurado correctamente para consultar as variábeis de entorno do sistema. A proba con getenv(\"PATH\") só devolve unha resposta baleira.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Consulte a documentación de instalación para ver as notas de configuración de PHP e a configuración PHP do servidor, especialmente se emprega php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/gl.json b/settings/l10n/gl.json index 1d2bf9b137e..65939eeb397 100644 --- a/settings/l10n/gl.json +++ b/settings/l10n/gl.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Semella que PHP non está configurado correctamente para consultar as variábeis de entorno do sistema. A proba con getenv(\"PATH\") só devolve unha resposta baleira.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Consulte a documentación de instalación para ver as notas de configuración de PHP e a configuración PHP do servidor, especialmente se emprega php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Foi activada a restrición da configuración a só lectura. Isto impide o estabelecemento dalgunhas configuracións a través da interface web. Ademais, ten que facer escribíbel manualmente o ficheiro para cada actualización.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Parece que PHP foi configuración para substituír bloques de documentos en liña. Isto fará que varias aplicacións sexan inaccesíbeis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isto probabelmente se debe unha caché/acelerador como Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/hu_HU.js b/settings/l10n/hu_HU.js index 4532c5c243e..0766f2b55aa 100644 --- a/settings/l10n/hu_HU.js +++ b/settings/l10n/hu_HU.js @@ -27,6 +27,7 @@ OC.L10N.register( "No user supplied" : "Nincs megadva felhasználó", "Please provide an admin recovery password, otherwise all user data will be lost" : "Adja meg az admin helyreállítási jelszót, máskülönben az összes felhasználói adat elveszik!", "Wrong admin recovery password. Please check the password and try again." : "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A háttér-alrendszer nem támogatja a jelszómódosítást, de felhasználó titkosítási kulcsát sikeresen frissítettük.", "Unable to change password" : "Nem sikerült megváltoztatni a jelszót", "Enabled" : "Engedélyezve", "Not enabled" : "Tiltva", @@ -59,6 +60,7 @@ OC.L10N.register( "Approved" : "Jóváhagyott", "Experimental" : "Kísérleti", "All" : "Mind", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!", "Update to %s" : "Frissítés erre: %s", "Please wait...." : "Kérjük várj...", "Error while disabling app" : "Hiba az alkalmazás letiltása közben", @@ -109,13 +111,18 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik, hogy a PHP nem tudja olvasni a rendszer környezeti változóit. A getenv(\"PATH\") teszt visszatérési értéke üres.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "A szervered Microsoft Windowson fut. A legjobb felhasználói élményért erősen javasoljuk, hogy Linuxot használj.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.", "System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs állományai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.", "This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.", + "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s", + "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwrite.cli.url\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:", + "All checks passed." : "Minden ellenőrzés sikeres.", "Open documentation" : "Dokumentáció megnyitása", "Allow apps to use the Share API" : "Lehetővé teszi, hogy a programmodulok is használhassák a megosztást", "Allow users to share via link" : "Engedjük meg az állományok linkekkel történő megosztását", @@ -138,6 +145,9 @@ OC.L10N.register( "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.", "Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.", "Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése", + "Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "A szerveroldali titkosítás egyirányú folyamat. Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később nem lehet visszafordítani.", + "This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?", "Enable encryption" : "Titkosítás engedélyezése", "No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.", "Select default encryption module:" : "Alapértelmezett titkosítási modul:", diff --git a/settings/l10n/hu_HU.json b/settings/l10n/hu_HU.json index a416a2f33ed..4f1801fdef4 100644 --- a/settings/l10n/hu_HU.json +++ b/settings/l10n/hu_HU.json @@ -25,6 +25,7 @@ "No user supplied" : "Nincs megadva felhasználó", "Please provide an admin recovery password, otherwise all user data will be lost" : "Adja meg az admin helyreállítási jelszót, máskülönben az összes felhasználói adat elveszik!", "Wrong admin recovery password. Please check the password and try again." : "Hibás admin helyreállítási jelszó. Ellenőrizze a jelszót és próbálja újra!", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "A háttér-alrendszer nem támogatja a jelszómódosítást, de felhasználó titkosítási kulcsát sikeresen frissítettük.", "Unable to change password" : "Nem sikerült megváltoztatni a jelszót", "Enabled" : "Engedélyezve", "Not enabled" : "Tiltva", @@ -57,6 +58,7 @@ "Approved" : "Jóváhagyott", "Experimental" : "Kísérleti", "All" : "Mind", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "Ez az alkalmazás még nincs biztonságilag ellenőrizve és vagy új, vagy ismert instabil. Telepítés csak saját felelősségre!", "Update to %s" : "Frissítés erre: %s", "Please wait...." : "Kérjük várj...", "Error while disabling app" : "Hiba az alkalmazás letiltása közben", @@ -107,13 +109,18 @@ "NT LAN Manager" : "NT LAN Manager", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "Úgy tűnik, hogy a PHP nem tudja olvasni a rendszer környezeti változóit. A getenv(\"PATH\") teszt visszatérési értéke üres.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Kérjük ellenőrizd a <a target=\"_blank\" href=\"%s\">telepítési dokumentációt ↗</a> a PHP konfigurációs beállításaival kapcsolatban, főleg ha PHP-FPM-et használsz.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Úgy tűnik, hogy a PHP úgy van beállítva, hogy eltávolítja programok belsejében elhelyezett szövegblokkokat. Emiatt a rendszer több alapvető fontosságú eleme működésképtelen lesz.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ezt valószínűleg egy gyorsítótár ill. kódgyorsító, mint pl, a Zend, OPcache vagy eAccelererator okozza.", "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "A szervered Microsoft Windowson fut. A legjobb felhasználói élményért erősen javasoljuk, hogy Linuxot használj.", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "A 'fileinfo' PHP modul hiányzik. Erősen javasolt ennek a modulnak a telepítése, mert ezzel lényegesen jobb a MIME-típusok felismerése.", "System locale can not be set to a one which supports UTF-8." : "A rendszer lokalizációs állományai között nem sikerült olyat beállítani, ami támogatja az UTF-8-at.", "This means that there might be problems with certain characters in file names." : "Ez azt jelenti, hogy probléma lehet bizonyos karakterekkel a fájlnevekben.", + "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "Feltétlenül javasoljuk, hogy telepítse a szükséges csomagokat ahhoz, hogy a rendszere támogassa a következő lokalizációk valamelyikét: %s", + "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Ha a telepítése nem a webkiszolgáló gyökerében van, és a rendszer cron szolgáltatását használja, akkor problémák lehetnek az URL-ek képzésével. Ezek elkerülése érdekében állítsa be a config.php-ban az \"overwrite.cli.url\" paramétert a telepítés által használt webútvonalra. (Javasolt beállítás: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Az ütemezett feladat (cronjob) nem futott le parancssorból. A következő hibák tűntek fel:", + "All checks passed." : "Minden ellenőrzés sikeres.", "Open documentation" : "Dokumentáció megnyitása", "Allow apps to use the Share API" : "Lehetővé teszi, hogy a programmodulok is használhassák a megosztást", "Allow users to share via link" : "Engedjük meg az állományok linkekkel történő megosztását", @@ -136,6 +143,9 @@ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "A cron.php webcron szolgáltatásként van regisztrálva, hogy 15 percenként egyszer lefuttassa a cron.php-t.", "Use system's cron service to call the cron.php file every 15 minutes." : "A rendszer cron szolgáltatását használjuk, mely a cron.php állományt futtatja le 15 percenként.", "Enable server-side encryption" : "Szerveroldali titkosítás engedélyezése", + "Please read carefully before activating server-side encryption: " : "Kérjük, ezt olvasd el figyelmesen mielőtt engedélyezed a szerveroldali titkosítást:", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "A szerveroldali titkosítás egyirányú folyamat. Ha egyszer engedélyezve lett a titkosítás, akkor onnantól kezdve a szerveren az összes fájl titkosításra kerül, melyet később nem lehet visszafordítani.", + "This is the final warning: Do you really want to enable encryption?" : "Ez az utolsó figyelmeztetés: Biztosan szeretnéd engedélyezni a titkosítást?", "Enable encryption" : "Titkosítás engedélyezése", "No encryption module loaded, please enable an encryption module in the app menu." : "Nincs titkosítási modul betöltve, kérjük engedélyezd a titkosítási modult az alkalmazások menüben.", "Select default encryption module:" : "Alapértelmezett titkosítási modul:", diff --git a/settings/l10n/id.js b/settings/l10n/id.js index d0303b7b221..344805ec1e9 100644 --- a/settings/l10n/id.js +++ b/settings/l10n/id.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon periksa dokumentasi instalasi untuk catatan konfigurasi php dan konfigurasi php server Anda, terutama saat menggunakan ph-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP tampaknya disetel menjadi strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", @@ -132,6 +131,7 @@ OC.L10N.register( "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon periksa dua kali <a target=\"_blank\" href=\"%s\">panduan instalasi ↗</a>, dan periksa segala kesalahan atau peringatan pada <a href=\"#log-section\">log</a>.", + "All checks passed." : "Semua pemeriksaan lulus.", "Open documentation" : "Buka dokumentasi", "Allow apps to use the Share API" : "Izinkan aplikasi untuk menggunakan API Pembagian", "Allow users to share via link" : "Izinkan pengguna untuk membagikan via tautan", @@ -154,6 +154,12 @@ OC.L10N.register( "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.", "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", + "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Enkripsi server-side adalah proses sekali jalan. Setelah enkripsi diaktifkan, semua berkas mulai saat ini dan selanjutnya akan dienkripsi pada server dan tidak mungkin untuk menonaktifkan enkripsi di lain waktu", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Siapa saja yang memiliki hak akses pada server ownCloud dapat mendeskripsi berkas-berkas Anda dengan mencegat permintaan atau membaca sandi pengguna yang disimpan dalam berkas-berkas sesi teks biasa. Enkripsi server-side tidak serta merta melindungi dari administrator jahat tetapi akan berguna untuk melindungi data Anda pada penyimpanan eksternal.", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Tergantung pada modul enkripsi yang sebenarnya, pada umumnya ukuran berkas akan bertambah (sekitar 35%% atau lebih ketika menggunakan modul standar)", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Anda disarankan mencadangkan semua kunci enkripsi Anda secara berkala untuk mencegah kehilangan data pemanen (data/<user>/files_encryption dan data/files_encryption)", + "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", "Enable encryption" : "Aktifkan enkripsi", "No encryption module loaded, please enable an encryption module in the app menu." : "Tidak ada modul enkripsi yang dimuat, mohon aktifkan modul enkripsi di menu aplikasi.", "Select default encryption module:" : "Pilih modul enkripsi baku:", diff --git a/settings/l10n/id.json b/settings/l10n/id.json index 11d6c52359c..5d238d81822 100644 --- a/settings/l10n/id.json +++ b/settings/l10n/id.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "kelihatannya php tidak diatur dengan benar untuk variabel lingkungan sistem kueri. Pemeriksaan dengan getenv(\"PATH\") hanya mengembalikan respon kosong.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Mohon periksa dokumentasi instalasi untuk catatan konfigurasi php dan konfigurasi php server Anda, terutama saat menggunakan ph-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Konfig Hanya-Baca telah diaktifkan. Ini akan mencegah setelan beberapa konfigurasi melalui antarmuka-web. Selanjutnya, berkas perlu dibuat dapat-dibaca secara manual untuk setiap pembaruan.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP tampaknya disetel menjadi strip inline doc blocks. Hal ini akan membuat beberapa aplikasi inti tidak dapat diakses.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Hal ini kemungkinan disebabkan oleh cache/akselerator seperti Zend OPcache atau eAccelerator.", @@ -130,6 +129,7 @@ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Jika instalasi Anda tidak di root domain dan menggunakan sistem cron, hal tersebut dapat menyebabkan masalah dengan pembuatan URL. Untuk mencegah masalah tersebut, mohon atur opsi \"overwrite.cli.url\" pada berkas config.php Anda ke jalur lokasi webroot instalasi Anda (Disarankan: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Tidak mungkin untuk mengeksekusi cronjob via CLI. Kesalahan teknis berikut muncul:", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Mohon periksa dua kali <a target=\"_blank\" href=\"%s\">panduan instalasi ↗</a>, dan periksa segala kesalahan atau peringatan pada <a href=\"#log-section\">log</a>.", + "All checks passed." : "Semua pemeriksaan lulus.", "Open documentation" : "Buka dokumentasi", "Allow apps to use the Share API" : "Izinkan aplikasi untuk menggunakan API Pembagian", "Allow users to share via link" : "Izinkan pengguna untuk membagikan via tautan", @@ -152,6 +152,12 @@ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php didaftarkan pada layanan webcron untuk memanggil cron.php setiap 15 menit melalui http.", "Use system's cron service to call the cron.php file every 15 minutes." : "Gunakan layanan cron sistem untuk memanggil berkas cron.php setiap 15 menit.", "Enable server-side encryption" : "Aktifkan enkripsi sisi-server", + "Please read carefully before activating server-side encryption: " : "Mohon baca dengan teliti sebelum mengaktifkan enkripsi server-side:", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Enkripsi server-side adalah proses sekali jalan. Setelah enkripsi diaktifkan, semua berkas mulai saat ini dan selanjutnya akan dienkripsi pada server dan tidak mungkin untuk menonaktifkan enkripsi di lain waktu", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "Siapa saja yang memiliki hak akses pada server ownCloud dapat mendeskripsi berkas-berkas Anda dengan mencegat permintaan atau membaca sandi pengguna yang disimpan dalam berkas-berkas sesi teks biasa. Enkripsi server-side tidak serta merta melindungi dari administrator jahat tetapi akan berguna untuk melindungi data Anda pada penyimpanan eksternal.", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Tergantung pada modul enkripsi yang sebenarnya, pada umumnya ukuran berkas akan bertambah (sekitar 35%% atau lebih ketika menggunakan modul standar)", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Anda disarankan mencadangkan semua kunci enkripsi Anda secara berkala untuk mencegah kehilangan data pemanen (data/<user>/files_encryption dan data/files_encryption)", + "This is the final warning: Do you really want to enable encryption?" : "Ini adalah peringatan terakhir: Apakah Anda yakin ingin mengaktifkan enkripsi?", "Enable encryption" : "Aktifkan enkripsi", "No encryption module loaded, please enable an encryption module in the app menu." : "Tidak ada modul enkripsi yang dimuat, mohon aktifkan modul enkripsi di menu aplikasi.", "Select default encryption module:" : "Pilih modul enkripsi baku:", diff --git a/settings/l10n/it.js b/settings/l10n/it.js index 55493ffbcd6..e51d43544a8 100644 --- a/settings/l10n/it.js +++ b/settings/l10n/it.js @@ -119,7 +119,7 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la documentazione di installazione per le note di configurazione di php e la configurazione del tuo server, specialmente quando utilizzi php-fpm.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.", @@ -256,7 +256,7 @@ OC.L10N.register( "Issued By" : "Emesso da", "Valid until %s" : "Valido fino al %s", "Import root certificate" : "Importa certificato radice", - "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di ownCloud{linkclose}, il {githubopen}codice sorgente{linkclose} è licenziato nei termini della {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di ownCloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Mostra posizione di archiviazione", "Show last log in" : "Mostra ultimo accesso", "Show user backend" : "Mostra il motore utente", diff --git a/settings/l10n/it.json b/settings/l10n/it.json index a3dd09a0b4b..66b16c14433 100644 --- a/settings/l10n/it.json +++ b/settings/l10n/it.json @@ -117,7 +117,7 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php non sembra essere configurato correttamente per interrogare le variabili d'ambiente di sistema. Il test con getenv(\"PATH\") restituisce solo una risposta vuota.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la documentazione di installazione per le note di configurazione di php e la configurazione del tuo server, specialmente quando utilizzi php-fpm.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Controlla la <a target=\"_blank\" href=\"%s\">documentazione di installazione↗</a> per le note di configurazione di php e la configurazione del tuo server, in particolare quando utilizzi php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configurazione di sola lettura è stata abilitata. Ciò impedisce l'impostazione di alcune configurazioni tramite l'interfaccia web. Inoltre, i file devono essere resi scrivibili manualmente per ogni aggiornamento.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Sembra che PHP sia configurato per rimuovere i blocchi di documentazione in linea. Ciò renderà inaccessibili diverse applicazioni principali.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ciò è causato probabilmente da una cache/acceleratore come Zend OPcache o eAccelerator.", @@ -254,7 +254,7 @@ "Issued By" : "Emesso da", "Valid until %s" : "Valido fino al %s", "Import root certificate" : "Importa certificato radice", - "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di ownCloud{linkclose}, il {githubopen}codice sorgente{linkclose} è licenziato nei termini della {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", + "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "Sviluppato dalla {communityopen}comunità di ownCloud{linkclose}, il {githubopen}codice sorgente{linkclose} è rilasciato nei termini della licenza {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}.", "Show storage location" : "Mostra posizione di archiviazione", "Show last log in" : "Mostra ultimo accesso", "Show user backend" : "Mostra il motore utente", diff --git a/settings/l10n/ko.js b/settings/l10n/ko.js index 5e3bc7183f1..0bb2fbef5ac 100644 --- a/settings/l10n/ko.js +++ b/settings/l10n/ko.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "설치 문서를 참조하여 php 설정 방법 및 php 설정을 변경하십시오. php-fpm을 사용한다면 더 주의하십시오.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP에서 인라인 doc 블록을 삭제하도록 설정되어 있습니다. 일부 코어 앱에 접근할 수 없을 수도 있습니다.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Zend OPcache, eAccelerator 같은 캐시/가속기 문제일 수도 있습니다.", diff --git a/settings/l10n/ko.json b/settings/l10n/ko.json index b9cc5084cc4..f5d774aba65 100644 --- a/settings/l10n/ko.json +++ b/settings/l10n/ko.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php가 시스템 환경 변수를 올바르게 조회할 수 있도록 설정되지 않았습니다. getenv(\"PATH\")의 값이 비어 있습니다.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "설치 문서를 참조하여 php 설정 방법 및 php 설정을 변경하십시오. php-fpm을 사용한다면 더 주의하십시오.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "읽기 전용 설정이 활성화되었습니다. 이 상태에서는 웹 인터페이스를 통하여 일부 설정을 변경할 수 없습니다. 또한 매 업데이트마다 파일을 쓸 수 있는 상태로 변경해야 합니다.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP에서 인라인 doc 블록을 삭제하도록 설정되어 있습니다. 일부 코어 앱에 접근할 수 없을 수도 있습니다.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Zend OPcache, eAccelerator 같은 캐시/가속기 문제일 수도 있습니다.", diff --git a/settings/l10n/nb_NO.js b/settings/l10n/nb_NO.js index efdcc9b6de8..a3c071b3f2f 100644 --- a/settings/l10n/nb_NO.js +++ b/settings/l10n/nb_NO.js @@ -115,7 +115,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Sjekk installasjonsdokumentasjonen for notiser om PHP-konfigurering og om konfigurering av serveren, spesielt ved bruk av php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.", diff --git a/settings/l10n/nb_NO.json b/settings/l10n/nb_NO.json index b3d673e7df3..485cd207008 100644 --- a/settings/l10n/nb_NO.json +++ b/settings/l10n/nb_NO.json @@ -113,7 +113,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP ser ikke ut til å være satt opp riktig for å lese systemets miljøvariabler. Testen med getenv(\"PATH\") returnerer bare et tomt svar.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Sjekk installasjonsdokumentasjonen for notiser om PHP-konfigurering og om konfigurering av serveren, spesielt ved bruk av php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Den skrivebeskyttede konfigurasjonen er blitt aktivert. Dette forhindrer setting av visse konfigureringer via web-grensesnittet. Videre må config-filen gjøres skrivbar manuelt for hver oppdatering.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Det ser ut for at PHP er satt opp til å fjerne innebygde doc blocks. Dette gjør at flere av kjerneapplikasjonene blir utilgjengelige.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dette forårsakes sannsynligvis av en bufrer/akselerator, som f.eks. Zend OPcache eller eAccelerator.", diff --git a/settings/l10n/nl.js b/settings/l10n/nl.js index 6fef65aabc4..d11b77a2183 100644 --- a/settings/l10n/nl.js +++ b/settings/l10n/nl.js @@ -119,7 +119,7 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de documentatie voor php configuratieinstellingen en de php configuratie van uw server, zeker als php-fpm wordt gebruikt.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de <a target=\"_blank\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratie notities en de php configuratie van uw server, zeker als php-fpm wordt gebruikt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", diff --git a/settings/l10n/nl.json b/settings/l10n/nl.json index 978b70e7996..a47e0b11403 100644 --- a/settings/l10n/nl.json +++ b/settings/l10n/nl.json @@ -117,7 +117,7 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "php lijkt niet goed te zijn ingesteld om systeemomgevingsvariabelen te bevragen. De test met getenv(\"PATH\") gaf een leeg resultaat.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de documentatie voor php configuratieinstellingen en de php configuratie van uw server, zeker als php-fpm wordt gebruikt.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verifieer de <a target=\"_blank\" href=\"%s\">installatiedocumentatie ↗</a> voor php configuratie notities en de php configuratie van uw server, zeker als php-fpm wordt gebruikt.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "De Alleen-lezen config is geactiveerd. Dit voorkomt het via de webinterface wijzigen van verschillende instellingen. Bovendien moet het bestand voor elke aanpassing handmatig op beschrijfbaar worden ingesteld.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP is blijkbaar zo ingesteld dat inline doc blokken worden gestript. Hierdoor worden verschillende kernmodules onbruikbaar.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Dit wordt vermoedelijk veroorzaakt door een cache/accelerator, zoals Zend OPcache of eAccelerator.", diff --git a/settings/l10n/oc.js b/settings/l10n/oc.js index a8f78ecb65b..c4e745e368e 100644 --- a/settings/l10n/oc.js +++ b/settings/l10n/oc.js @@ -108,7 +108,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "sembla que php es pas configurat de manièra a recuperar las valors de las variablas d’environament. Lo test de la comanda getenv(\"PATH\") torna solament una responsa voida. ", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verificatz la documentacion d'installacion a prepaus de las instruccions de configuracion de php e tanben de la configuracion de vòstre servidor, en particular dins lo cas qu'utilizatz php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuracion es en mòde lectura sola. Aquò empacha la modificacion de certanas configuracions via l'interfàcia web. Amai, lo fichièr deu èsser passat manualament en lectura-escritura per cada mesa a jorn.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP es aparentament configurat per suprimir los blòts de documentacion intèrnes. Aquò rendrà mantuna aplicacion de basa inaccessiblas.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La rason es probablament l'utilizacion d'un escondedor / accelerador tal coma Zend OPcache o eAccelerator.", diff --git a/settings/l10n/oc.json b/settings/l10n/oc.json index 2830cf64518..9a2d5a5bc2d 100644 --- a/settings/l10n/oc.json +++ b/settings/l10n/oc.json @@ -106,7 +106,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "sembla que php es pas configurat de manièra a recuperar las valors de las variablas d’environament. Lo test de la comanda getenv(\"PATH\") torna solament una responsa voida. ", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Verificatz la documentacion d'installacion a prepaus de las instruccions de configuracion de php e tanben de la configuracion de vòstre servidor, en particular dins lo cas qu'utilizatz php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "La configuracion es en mòde lectura sola. Aquò empacha la modificacion de certanas configuracions via l'interfàcia web. Amai, lo fichièr deu èsser passat manualament en lectura-escritura per cada mesa a jorn.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP es aparentament configurat per suprimir los blòts de documentacion intèrnes. Aquò rendrà mantuna aplicacion de basa inaccessiblas.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "La rason es probablament l'utilizacion d'un escondedor / accelerador tal coma Zend OPcache o eAccelerator.", diff --git a/settings/l10n/pt_BR.js b/settings/l10n/pt_BR.js index d6d7fad0759..14cc0211bef 100644 --- a/settings/l10n/pt_BR.js +++ b/settings/l10n/pt_BR.js @@ -119,7 +119,7 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parecem esta configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor, verifique a documentação de instalação para as notas de configuração do PHP e a configuração do PHP do seu servidor, especialmente quando se utiliza php-fpm.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique o <a target=\"_blank\" href=\"%s\">documento de instalação ↗</a> para as notas de configuração do PHP e configuração do PHP do seu servidor, especialmente quando usando PHP-FPM.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/pt_BR.json b/settings/l10n/pt_BR.json index d06ae0f7dd7..2f056645a0c 100644 --- a/settings/l10n/pt_BR.json +++ b/settings/l10n/pt_BR.json @@ -117,7 +117,7 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "O PHP não parecem esta configurado corretamente para consultar as variáveis de ambiente do sistema. O teste com getenv(\"PATH\") só retorna uma resposta vazia.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor, verifique a documentação de instalação para as notas de configuração do PHP e a configuração do PHP do seu servidor, especialmente quando se utiliza php-fpm.", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Por favor verifique o <a target=\"_blank\" href=\"%s\">documento de instalação ↗</a> para as notas de configuração do PHP e configuração do PHP do seu servidor, especialmente quando usando PHP-FPM.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "A configuração Somente-Leitura foi habilitada. Isso impede que algumas configurações sejam definidas via a interface web. Além disso, o arquivo precisa ter permissão de escrita manual para cada atualização.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP é, aparentemente, a configuração para retirar blocos doc inline. Isso fará com que vários aplicativos do núcleo fiquem inacessíveis.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Isso provavelmente é causado por uma cache/acelerador, como Zend OPcache ou eAccelerator.", diff --git a/settings/l10n/pt_PT.js b/settings/l10n/pt_PT.js index df4df129c49..627eae28e74 100644 --- a/settings/l10n/pt_PT.js +++ b/settings/l10n/pt_PT.js @@ -2,6 +2,7 @@ OC.L10N.register( "settings", { "APCu" : "APCu", + "Redis" : "Redis", "Security & setup warnings" : "Avisos de configuração e segurança", "Sharing" : "Partilha", "External Storage" : "Armazenamento Externo", @@ -143,6 +144,7 @@ OC.L10N.register( "Execute one task with each page loaded" : "Executar uma tarefa com cada página carregada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registado num serviço webcron para chamar a página cron.php por http a cada 15 minutos.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.", + "Enable encryption" : "Ative a encriptação", "Start migration" : "Iniciar migração", "This is used for sending out notifications." : "Isto é utilizado para enviar notificações", "Send mode" : "Modo de Envio", diff --git a/settings/l10n/pt_PT.json b/settings/l10n/pt_PT.json index 44a1bc88916..f845e56a976 100644 --- a/settings/l10n/pt_PT.json +++ b/settings/l10n/pt_PT.json @@ -1,5 +1,6 @@ { "translations": { "APCu" : "APCu", + "Redis" : "Redis", "Security & setup warnings" : "Avisos de configuração e segurança", "Sharing" : "Partilha", "External Storage" : "Armazenamento Externo", @@ -141,6 +142,7 @@ "Execute one task with each page loaded" : "Executar uma tarefa com cada página carregada", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php está registado num serviço webcron para chamar a página cron.php por http a cada 15 minutos.", "Use system's cron service to call the cron.php file every 15 minutes." : "Usar o serviço sistema cron para ligar o ficheiro cron.php a cada 15 minutos.", + "Enable encryption" : "Ative a encriptação", "Start migration" : "Iniciar migração", "This is used for sending out notifications." : "Isto é utilizado para enviar notificações", "Send mode" : "Modo de Envio", diff --git a/settings/l10n/ru.js b/settings/l10n/ru.js index d715cc41398..7ccef65d29f 100644 --- a/settings/l10n/ru.js +++ b/settings/l10n/ru.js @@ -119,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к документации по установке для получения заметок по настройке php, а также к настройкам php вашего сервера, особенно это касается php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", diff --git a/settings/l10n/ru.json b/settings/l10n/ru.json index ac2aa38d849..88dc9a5ba5d 100644 --- a/settings/l10n/ru.json +++ b/settings/l10n/ru.json @@ -117,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP был установлен неверно. Запрос getenv(\"PATH\") возвращает пустые результаты.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Пожалуйста обратитесь к документации по установке для получения заметок по настройке php, а также к настройкам php вашего сервера, особенно это касается php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Конфигурационный файл в режиме только для чтения. В связи с этим некоторые настройки веб-интерфейса невозможно изменить. Учтите, что для установки обновлений, вам потребуется самостоятельно разрешить запись в конфигурационный файл.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "Очевидно, PHP настроен на вычищение блоков встроенной документации. Это сделает несколько центральных приложений недоступными.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Возможно это вызвано кешем/ускорителем вроде Zend OPcache или eAccelerator.", diff --git a/settings/l10n/sr.js b/settings/l10n/sr.js index f63cedbe918..d89fe14c546 100644 --- a/settings/l10n/sr.js +++ b/settings/l10n/sr.js @@ -115,7 +115,6 @@ OC.L10N.register( "SSL" : "ССЛ", "TLS" : "ТЛС", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ПХП није подешен да може да провери системске променљиве. Проба са getenv(\"PATH\") враћа празан одговор.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Погледајте инсталациону документацију за ПХП и серверска подешавања, посебно кад се користи php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Омогућена је Само-читај конфигурација. То спречава постављање неке конфигурације преко веб-интерфејса. Осим тога, фајлу мора бити ручно омогућено уписивање код сваког освежавања.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "ПХП је очигледно подешен да се скида уметнуте док блокова. То ће учинити неколико кључних апликација недоступним.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ово је вероватно изазвано кешом или акцелератором као што су ЗендОПкеш или еАкцелератор.", diff --git a/settings/l10n/sr.json b/settings/l10n/sr.json index 9d3767e0df6..e360fcb863c 100644 --- a/settings/l10n/sr.json +++ b/settings/l10n/sr.json @@ -113,7 +113,6 @@ "SSL" : "ССЛ", "TLS" : "ТЛС", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ПХП није подешен да може да провери системске променљиве. Проба са getenv(\"PATH\") враћа празан одговор.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Погледајте инсталациону документацију за ПХП и серверска подешавања, посебно кад се користи php-fpm.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Омогућена је Само-читај конфигурација. То спречава постављање неке конфигурације преко веб-интерфејса. Осим тога, фајлу мора бити ручно омогућено уписивање код сваког освежавања.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "ПХП је очигледно подешен да се скида уметнуте док блокова. То ће учинити неколико кључних апликација недоступним.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Ово је вероватно изазвано кешом или акцелератором као што су ЗендОПкеш или еАкцелератор.", diff --git a/settings/l10n/th_TH.js b/settings/l10n/th_TH.js index 043f3429bf3..d72dc37b703 100644 --- a/settings/l10n/th_TH.js +++ b/settings/l10n/th_TH.js @@ -119,7 +119,7 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ไม่ได้ติดตั้งphp อย่างถูกต้องค้นหาตัวแปรสภาพแวดล้อมของระบบการทดสอบกับ getenv(\"PATH\") ส่งกลับเฉพาะการตอบสนองที่ว่างเปล่า", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "กรุณาตรวจสอบเอกสารการติดตั้งสำหรับการบันทึกการตั้งค่าและการกำหนดค่า PHP ของเซิร์ฟเวอร์ของคุณโดยเฉพาะอย่างยิ่งเมื่อใช้ PHP-FPM", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "กรุณาตรวจสอบ <a target=\"_blank\" href=\"%s\">เอกสารการติดตั้ง</a> สำหรับการตั้งค่าและบันทึก php ของเซิร์ฟเวอร์ของคุณโดยเฉพาะอย่างยิ่งเมื่อใช้ php-fpm", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "ตั้งค่าให้สามารถอ่านได้อย่างเดียวถูกเปิดใช้งาน นี้จะช่วยป้องกันการตั้งค่าผ่านทางบางเว็บอินเตอร์เฟซ นอกจากนี้จะต้องเขียนไฟล์ด้วยตนเองสำหรับทุกการอัพเดท", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "เห็นได้ชัดว่าการตั้งค่า PHP จะตัดบล็อคเอกสารแบบอินไลน์ ซึ่งจะทำให้แอพพลิเคชันอีกหลายแกนไม่สามารถเข้าถึงได้", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "นี้อาจเกิดจาก cache/accelerator อย่างเช่น Zend OPcache หรือ eAccelerator", diff --git a/settings/l10n/th_TH.json b/settings/l10n/th_TH.json index e67cc01f279..f2e4af2f838 100644 --- a/settings/l10n/th_TH.json +++ b/settings/l10n/th_TH.json @@ -117,7 +117,7 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "ไม่ได้ติดตั้งphp อย่างถูกต้องค้นหาตัวแปรสภาพแวดล้อมของระบบการทดสอบกับ getenv(\"PATH\") ส่งกลับเฉพาะการตอบสนองที่ว่างเปล่า", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "กรุณาตรวจสอบเอกสารการติดตั้งสำหรับการบันทึกการตั้งค่าและการกำหนดค่า PHP ของเซิร์ฟเวอร์ของคุณโดยเฉพาะอย่างยิ่งเมื่อใช้ PHP-FPM", + "Please check the <a target=\"_blank\" href=\"%s\">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm." : "กรุณาตรวจสอบ <a target=\"_blank\" href=\"%s\">เอกสารการติดตั้ง</a> สำหรับการตั้งค่าและบันทึก php ของเซิร์ฟเวอร์ของคุณโดยเฉพาะอย่างยิ่งเมื่อใช้ php-fpm", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "ตั้งค่าให้สามารถอ่านได้อย่างเดียวถูกเปิดใช้งาน นี้จะช่วยป้องกันการตั้งค่าผ่านทางบางเว็บอินเตอร์เฟซ นอกจากนี้จะต้องเขียนไฟล์ด้วยตนเองสำหรับทุกการอัพเดท", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "เห็นได้ชัดว่าการตั้งค่า PHP จะตัดบล็อคเอกสารแบบอินไลน์ ซึ่งจะทำให้แอพพลิเคชันอีกหลายแกนไม่สามารถเข้าถึงได้", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "นี้อาจเกิดจาก cache/accelerator อย่างเช่น Zend OPcache หรือ eAccelerator", diff --git a/settings/l10n/tr.js b/settings/l10n/tr.js index 889b2c31d99..e23662341fb 100644 --- a/settings/l10n/tr.js +++ b/settings/l10n/tr.js @@ -10,6 +10,7 @@ OC.L10N.register( "Cron" : "Cron", "Email server" : "E-posta sunucusu", "Log" : "Günlük", + "Server status" : "Sunucu durumu", "Tips & tricks" : "İpuçları ve hileler", "Updates" : "Güncellemeler", "Authentication error" : "Kimlik doğrulama hatası", @@ -30,7 +31,9 @@ OC.L10N.register( "Unable to change password" : "Parola değiştirilemiyor", "Enabled" : "Etkin", "Not enabled" : "Etkin değil", + "installing and updating apps via the app store or Federated Cloud Sharing" : "uygulama mağazası ve Birleşmiş Bulut Paylaşımından uygulama kurma ve güncelleme", "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL eskide kalmış bir sürüm %s kullanıyor (%s). Lütfen işletim sisteminizi güncelleyin yoksa %s gibi özellikler düzgün çalışmayacaktır.", "A problem occurred, please check your log files (Error: %s)" : "Bir problem oluştu, lütfen log dosyalarını kontrol edin (Hata: %s)", "Migration Completed" : "Taşınma Tamamlandı", "Group already exists." : "Grup zaten mevcut.", @@ -75,6 +78,7 @@ OC.L10N.register( "Uninstalling ...." : "Kaldırılıyor ....", "Error while uninstalling app" : "Uygulama kaldırılırken hata", "Uninstall" : "Kaldır", + "An error occurred: {message}" : "Bir hata oluştu: {message}", "Select a profile picture" : "Bir profil fotoğrafı seçin", "Very weak password" : "Çok güçsüz parola", "Weak password" : "Güçsüz parola", @@ -115,7 +119,6 @@ OC.L10N.register( "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistem değişkenleri sorgusuna uygun olarak ayarlanmamış görünüyor. getenv(\"PATH\") komutu sadece boş bir cevap döndürüyor.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lütfen kurulum belgelendirmesindeki php ayarlama notlarını ve sunucudaki özellikle php-fpm kullanırken php ayarlamalarını kontrol edin.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.", @@ -128,6 +131,7 @@ OC.L10N.register( "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar oluşabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwrite.cli.url\" seçeneğini ayarlayın (Önerilen: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lütfen <a target=\"_blank\" href=\"%s\">kurulum rehberlerini ↗</a> iki kez denetleyip <a href=\"#log-section\">günlük</a> içerisindeki hata ve uyarılara bakın.", + "All checks passed." : "Tüm kontroller geçildi.", "Open documentation" : "Belgelendirmeyi aç", "Allow apps to use the Share API" : "Uygulamaların paylaşım API'sini kullanmasına izin ver", "Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşmasına izin ver", @@ -150,6 +154,12 @@ OC.L10N.register( "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden her 15 dakikada bir çağrılması için webcron hizmetine kaydedilir.", "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını her 15 dakikada bir çağırmak için sistem cron hizmetini kullan.", "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", + "Please read carefully before activating server-side encryption: " : "Lütfen sunucu tarafında şifrelemeyi etkinleştirmeden önce dikkatlice okuyun: ", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Sunucu tarafında şifreleme tek yönlü bir işlemdir. Bir defa etkinleştirildiğinde sunucudaki tüm dosyalar şifrelenir ve ileri bir tarihte şifrelemeyi iptal etmek mümkün değildir", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "ownCloud sunucunuza erişimi olan biri isteklere müdahale ederek veya oturum dosyalarında düz metin olarak saklanan parolayı kullanarak dosyalarınızın şifrelenmesini çözebilir. Bu nedenle sunucu tarafında şifreleme işlemi kötü niyetli sistem yöneticisine karşı koruma sağlamaz ama verinizi harici depolamada tutmanız durumunda yararlıdır.", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Gerçek şifreleme modülüne bağlı olarak genel dosya boyutu artar (35%% veya varsayılan modül kullanıldığında daha fazla)", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Veri kaybının önüne geçmek için düzenli olarak tüm şifreleme anahtarlarınızı yedeklemelisiniz (data/<user>/files_encryption and data/files_encryption)", + "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", "Enable encryption" : "Şifrelemeyi aç", "No encryption module loaded, please enable an encryption module in the app menu." : "Hiç şifrelenme modülü yüklenmemiş, lütfen uygulama menüsünden bir şifreleme modülü etkinleştirin.", "Select default encryption module:" : "Öntanımlı şifreleme modülünü seçin:", @@ -195,6 +205,7 @@ OC.L10N.register( "licensed" : "lisanslı", "Documentation:" : "Belgelendirme:", "User documentation" : "Kullanıcı belgelendirmesi", + "Admin documentation" : "Yönetici belgelendirmesi", "Show description …" : "Açıklamayı göster...", "Hide description …" : "Açıklamayı gizle...", "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:", @@ -233,6 +244,7 @@ OC.L10N.register( "Upload new" : "Yeni yükle", "Select new from Files" : "Dosyalardan seç", "Remove image" : "Resmi kaldır", + "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Png veya jpg'den biri olmalıdır. İdeal olanı karedir ama kırpmanıza izin verilecektir. Dosya boyutu 20MB'ı geçemez.", "Your avatar is provided by your original account." : "Görüntü resminiz, özgün hesabınız tarafından sağlanıyor.", "Cancel" : "İptal", "Choose as profile image" : "Profil resmi olarak seç", diff --git a/settings/l10n/tr.json b/settings/l10n/tr.json index d4cc45eff69..8c7a39f0a2a 100644 --- a/settings/l10n/tr.json +++ b/settings/l10n/tr.json @@ -8,6 +8,7 @@ "Cron" : "Cron", "Email server" : "E-posta sunucusu", "Log" : "Günlük", + "Server status" : "Sunucu durumu", "Tips & tricks" : "İpuçları ve hileler", "Updates" : "Güncellemeler", "Authentication error" : "Kimlik doğrulama hatası", @@ -28,7 +29,9 @@ "Unable to change password" : "Parola değiştirilemiyor", "Enabled" : "Etkin", "Not enabled" : "Etkin değil", + "installing and updating apps via the app store or Federated Cloud Sharing" : "uygulama mağazası ve Birleşmiş Bulut Paylaşımından uygulama kurma ve güncelleme", "Federated Cloud Sharing" : "Birleşmiş Bulut Paylaşımı", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL eskide kalmış bir sürüm %s kullanıyor (%s). Lütfen işletim sisteminizi güncelleyin yoksa %s gibi özellikler düzgün çalışmayacaktır.", "A problem occurred, please check your log files (Error: %s)" : "Bir problem oluştu, lütfen log dosyalarını kontrol edin (Hata: %s)", "Migration Completed" : "Taşınma Tamamlandı", "Group already exists." : "Grup zaten mevcut.", @@ -73,6 +76,7 @@ "Uninstalling ...." : "Kaldırılıyor ....", "Error while uninstalling app" : "Uygulama kaldırılırken hata", "Uninstall" : "Kaldır", + "An error occurred: {message}" : "Bir hata oluştu: {message}", "Select a profile picture" : "Bir profil fotoğrafı seçin", "Very weak password" : "Çok güçsüz parola", "Weak password" : "Güçsüz parola", @@ -113,7 +117,6 @@ "SSL" : "SSL", "TLS" : "TLS", "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP sistem değişkenleri sorgusuna uygun olarak ayarlanmamış görünüyor. getenv(\"PATH\") komutu sadece boş bir cevap döndürüyor.", - "Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm." : "Lütfen kurulum belgelendirmesindeki php ayarlama notlarını ve sunucudaki özellikle php-fpm kullanırken php ayarlamalarını kontrol edin.", "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "Salt Okunur yapılandırma etkinleştirilmiş. Bu, bazı ayarların web arayüzü ile yapılandırılmasını önler. Ayrıca, bu dosya her güncelleme sırasında el ile yazılabilir yapılmalıdır.", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP satırıçi doc bloklarını ayıklamak üzere yapılandırılmış gibi görünüyor. Bu, bazı çekirdek (core) uygulamalarını erişilemez yapacak.", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "Bu, muhtemelen Zend OPcache veya eAccelerator gibi bir önbellek/hızlandırıcı nedeniyle gerçekleşir.", @@ -126,6 +129,7 @@ "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "Eğer kurulumunuz alan adının köküne yapılmamışsa ve sistem cron'u kullanıyorsa, URL oluşturma ile ilgili sorunlar oluşabilir. Bu sorunların önüne geçmek için, kurulumunuzun web kök yolundaki config.php dosyasında \"overwrite.cli.url\" seçeneğini ayarlayın (Önerilen: \"%s\")", "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "Bu CLI ile cronjobı çalıştırmak mümkün değildi. Aşağıdaki teknik hatalar ortaya çıkmıştır:", "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "Lütfen <a target=\"_blank\" href=\"%s\">kurulum rehberlerini ↗</a> iki kez denetleyip <a href=\"#log-section\">günlük</a> içerisindeki hata ve uyarılara bakın.", + "All checks passed." : "Tüm kontroller geçildi.", "Open documentation" : "Belgelendirmeyi aç", "Allow apps to use the Share API" : "Uygulamaların paylaşım API'sini kullanmasına izin ver", "Allow users to share via link" : "Kullanıcıların bağlantı ile paylaşmasına izin ver", @@ -148,6 +152,12 @@ "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php, http üzerinden her 15 dakikada bir çağrılması için webcron hizmetine kaydedilir.", "Use system's cron service to call the cron.php file every 15 minutes." : "Cron.php dosyasını her 15 dakikada bir çağırmak için sistem cron hizmetini kullan.", "Enable server-side encryption" : "Sunucu taraflı şifrelemeyi aç", + "Please read carefully before activating server-side encryption: " : "Lütfen sunucu tarafında şifrelemeyi etkinleştirmeden önce dikkatlice okuyun: ", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "Sunucu tarafında şifreleme tek yönlü bir işlemdir. Bir defa etkinleştirildiğinde sunucudaki tüm dosyalar şifrelenir ve ileri bir tarihte şifrelemeyi iptal etmek mümkün değildir", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "ownCloud sunucunuza erişimi olan biri isteklere müdahale ederek veya oturum dosyalarında düz metin olarak saklanan parolayı kullanarak dosyalarınızın şifrelenmesini çözebilir. Bu nedenle sunucu tarafında şifreleme işlemi kötü niyetli sistem yöneticisine karşı koruma sağlamaz ama verinizi harici depolamada tutmanız durumunda yararlıdır.", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "Gerçek şifreleme modülüne bağlı olarak genel dosya boyutu artar (35%% veya varsayılan modül kullanıldığında daha fazla)", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "Veri kaybının önüne geçmek için düzenli olarak tüm şifreleme anahtarlarınızı yedeklemelisiniz (data/<user>/files_encryption and data/files_encryption)", + "This is the final warning: Do you really want to enable encryption?" : "Bu son uyarıdır: Şifrelemeyi etkinleştirmek istiyor musunuz?", "Enable encryption" : "Şifrelemeyi aç", "No encryption module loaded, please enable an encryption module in the app menu." : "Hiç şifrelenme modülü yüklenmemiş, lütfen uygulama menüsünden bir şifreleme modülü etkinleştirin.", "Select default encryption module:" : "Öntanımlı şifreleme modülünü seçin:", @@ -193,6 +203,7 @@ "licensed" : "lisanslı", "Documentation:" : "Belgelendirme:", "User documentation" : "Kullanıcı belgelendirmesi", + "Admin documentation" : "Yönetici belgelendirmesi", "Show description …" : "Açıklamayı göster...", "Hide description …" : "Açıklamayı gizle...", "This app cannot be installed because the following dependencies are not fulfilled:" : "Bu uygulama, aşağıdaki bağımlılıklar sağlanmadığından yüklenemiyor:", @@ -231,6 +242,7 @@ "Upload new" : "Yeni yükle", "Select new from Files" : "Dosyalardan seç", "Remove image" : "Resmi kaldır", + "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "Png veya jpg'den biri olmalıdır. İdeal olanı karedir ama kırpmanıza izin verilecektir. Dosya boyutu 20MB'ı geçemez.", "Your avatar is provided by your original account." : "Görüntü resminiz, özgün hesabınız tarafından sağlanıyor.", "Cancel" : "İptal", "Choose as profile image" : "Profil resmi olarak seç", diff --git a/settings/l10n/zh_CN.js b/settings/l10n/zh_CN.js index 36835692c25..6fa83464bc0 100644 --- a/settings/l10n/zh_CN.js +++ b/settings/l10n/zh_CN.js @@ -3,12 +3,14 @@ OC.L10N.register( { "APCu" : "APCu", "Redis" : "Redis", + "Security & setup warnings" : "安全 & 设置警告", "Sharing" : "共享", "Server-side encryption" : "服务器端加密", "External Storage" : "外部存储", "Cron" : "计划任务", "Email server" : "电子邮件服务器", "Log" : "日志", + "Server status" : "服务器状态", "Tips & tricks" : "技巧提示", "Updates" : "更新", "Authentication error" : "认证错误", @@ -25,20 +27,45 @@ OC.L10N.register( "No user supplied" : "没有满足的用户", "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码,否则所有用户的数据都将遗失。", "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码。请检查密码并重试。", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持密码更改,但用户的加密密钥已成功更新。", "Unable to change password" : "不能更改密码", "Enabled" : "开启", "Not enabled" : "未启用", + "installing and updating apps via the app store or Federated Cloud Sharing" : "通过应用程序商店或联合云共享安装和更新应用程序", "Federated Cloud Sharing" : "联合云共享", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL使用了过时 %s 版本 (%s)。请更新你的操作系统或功能比如 %s 将无法可靠地工作。", + "A problem occurred, please check your log files (Error: %s)" : "出现了故障,请检查你的日志文件 (错误: %s)", "Migration Completed" : "迁移完成", + "Group already exists." : "组已经存在。", + "Unable to add group." : "无法添加组。", + "Unable to delete group." : "无法删除组", + "log-level out of allowed range" : "日志级别超出允许的范围", "Saved" : "已保存", "test email settings" : "测试电子邮件设置", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题。请修改您的设置。 (错误: %s)", "Email sent" : "邮件已发送", "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。", + "Invalid mail address" : "无效的电子邮件地址", + "A user with that name already exists." : "使用该名称的用户已存在。", + "Unable to create user." : "无法创建用户。", + "Your %s account was created" : "你的帐户 %s 已创建", + "Unable to delete user." : "不能删除用户", + "Forbidden" : "被禁止", + "Invalid user" : "用户无效", + "Unable to change mail address" : "无法更改邮箱地址", "Email saved" : "电子邮件已保存", "Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?", "Add trusted domain" : "添加信任域", + "Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移", + "Migration started …" : "迁移开始...", "Sending..." : "正在发送...", + "Official" : "官方", + "Approved" : "已认可", + "Experimental" : "实验", "All" : "全部", + "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "官方应用是由 ownCloud 社区开发。他们提供 ownCloud 的功能核心并准备用于生产。", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "已认可的应用是由值得信赖的开发商开发,并已通过了一个粗略的安全检查。他们放在一个开放的代码库并且维护人员认为他们是稳定的差不多可以正常使用。", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。", "Update to %s" : "更新为 %s", "Please wait...." : "请稍等....", "Error while disabling app" : "禁用 app 时出错", @@ -51,6 +78,7 @@ OC.L10N.register( "Uninstalling ...." : "卸载中....", "Error while uninstalling app" : "卸载应用时发生了一个错误", "Uninstall" : "卸载", + "An error occurred: {message}" : "发生错误: {message}", "Select a profile picture" : "选择头像", "Very weak password" : "非常弱的密码", "Weak password" : "弱密码", @@ -59,18 +87,22 @@ OC.L10N.register( "Strong password" : "强密码", "Valid until {date}" : "有效期至 {date}", "Delete" : "删除", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误。请上传 ASCII 编码的 PEM 证书。", "Groups" : "组", "Unable to delete {objName}" : "无法删除 {objName}", "Error creating group" : "创建组时出错", "A valid group name must be provided" : "请提供一个有效的组名称", "deleted {groupName}" : "已删除 {groupName}", "undo" : "撤销", + "no group" : "没有组", "never" : "从不", "deleted {userName}" : "已删除 {userName}", "add group" : "增加组", + "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密码会导致数据丢失,因为数据恢复不适用于此用户", "A valid username must be provided" : "必须提供合法的用户名", "Error creating user" : "创建用户出错", "A valid password must be provided" : "必须提供合法的密码", + "A valid email must be provided" : "必须提供合法的用户名", "__language_name__" : "简体中文", "Sync clients" : "客户端", "Personal info" : "个人信息", @@ -86,11 +118,20 @@ OC.L10N.register( "NT LAN Manager" : "NT LAN 管理器", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\\\"PATH\\\") 测试只返回一个空值。", + "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "只读配置已启用。这样可防止通过 WEB 接口设置一些配置。此外,每次更新后该文件需要手动设置为可写。", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除行内 <doc> 块,这将导致数个核心应用无法访问。", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能是由缓存/加速器造成的,例如 Zend OPcache 或 eAccelerator。", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "你的服务器是运行于 Microsoft Windows 系统。我们强烈推荐使用 Linux 系统以获得最佳的用户体验。比如中文文件夹和文件名支持。", + "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s 下版本 %2$s 已安装。基于稳定和性能的原因,我们强烈建议更新至 %1$s 版本。", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.", "System locale can not be set to a one which supports UTF-8." : "系统语系无法设置为支持 UTF-8 的语系。", "This means that there might be problems with certain characters in file names." : "这意味着一些文件名中的特定字符可能有问题。", + "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %s.", + "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")", + "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "请点击检查 <a target=\\\"_blank\\\" href=\\\"%s\\\"> 安装向导 ↗</a>, 点击 <a href=\\\"#log-section\\\"> 日志 </a>查看详细错误和警告。", + "All checks passed." : "所有检查已通过。", "Open documentation" : "打开文档", "Allow apps to use the Share API" : "允许应用软件使用共享API", "Allow users to share via link" : "允许用户通过链接分享文件", @@ -106,12 +147,25 @@ OC.L10N.register( "Allow users to send mail notification for shared files to other users" : "允许用户发送共享文件的邮件通知给其他用户", "Exclude groups from sharing" : "在分享中排除组", "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。", + "Last cron job execution: %s." : "上次定时任务执行于: %s.", + "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。", "Cron was not executed yet!" : "定时任务还未被执行!", "Execute one task with each page loaded" : "每个页面加载后执行一个任务", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。", "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。", "Enable server-side encryption" : "启用服务器端加密", + "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "服务器端加密是一个单向的过程。一旦启用加密,从该点向前所有文件都将在服务器上进行加密,它将无法在以后禁用加密", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "只要有权访问您的 ownCloud 服务器就可能解密你的文件,通过截获请求或读出以纯文本会话文件存储的用户密码。服务端加密。它不仅让你免遭恶意的管理员查看隐私,在保护你在外部托管的存储中的数据也非常有用。", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "根据实际加密模块上的一般文件大小而增加 (使用默认的模块时,35%% 以上)", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "你应该定期备份所有加密密钥,以防数据永久丢失 (data/<user>/files_encryption 和 data/files_encryption)", + "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?", "Enable encryption" : "启用加密", + "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。", + "Select default encryption module:" : "选择默认的加密模块:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。", + "Start migration" : "开始迁移", "This is used for sending out notifications." : "这被用于发送通知。", "Send mode" : "发送模式", "Encryption" : "加密", @@ -124,26 +178,49 @@ OC.L10N.register( "Credentials" : "凭证", "SMTP Username" : "SMTP 用户名", "SMTP Password" : "SMTP 密码", + "Store credentials" : "存储凭据", "Test email settings" : "测试电子邮件设置", "Send email" : "发送邮件", "Log level" : "日志级别", + "Download logfile" : "下载日志文件", "More" : "更多", "Less" : "更少", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", + "Transactional File Locking is enabled." : "事务文件锁定已启用。", + "Transactional File Locking is disabled." : "事务文件锁定已禁用。", + "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "要迁移到另一个数据库请使用命令行工具: 'occ db:convert-type', 或者查看 <a target=\\\"_blank\\\" href=\\\"%s\\\"> 相关文档 ↗</a>.", + "How to do backups" : "如何做备份", "Advanced monitoring" : "高级监控", "Performance tuning" : "性能优化", "Improving the config.php" : "正在优化 config.php", "Theming" : "主题", + "Hardening and security guidance" : "强化和安全指南", "Version" : "版本", + "Developer documentation" : "开发者文档", + "Experimental applications ahead" : "未来的实验应用", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验应用程序没有在安全性的问题上作过多检查,新的或已知的不稳定 BUG 都在开发中。安装它们可能会导致数据丢失或安全漏洞。", "by" : "被", + "licensed" : "许可", "Documentation:" : "文档:", "User documentation" : "用户文档", + "Admin documentation" : "管理员文档", + "Show description …" : "显示描述...", + "Hide description …" : "隐藏描述...", + "This app cannot be installed because the following dependencies are not fulfilled:" : "此应用程序无法安装,因为以下依赖性不满足:", "Enable only for specific groups" : "仅对特定的组开放", "Uninstall App" : "卸载应用", + "Enable experimental apps" : "启用实验性应用程序", + "No apps found for your version" : "未找到适合当前版本的应用", + "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "亲,<br><br>现在我们为你开通了 %s 私有云帐户。<br><br>你的用户名: %s<br>访问网址: <a href=\\\"%s\\\">%s</a><br><br>", "Cheers!" : "干杯!", + "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "亲,\\n\\n 现在我们为你开通了 %s 私有去帐户。\\n\\n 你的用户名: %s\\n 访问网址: %s\\n 你的初始密码需要咨询系统管理员。或者你也可以在登录页面输入任意密码登录,\\n登录窗口将出现忘记密码链接,点击通过注册邮箱重设初始密码。\\n\\n", "Administrator documentation" : "管理员文档", "Online documentation" : "在线文档", "Forum" : "论坛", + "Issue tracker" : "问题跟踪", + "Commercial support" : "商业支持", "Get the apps to sync your files" : "安装应用进行文件同步", "Desktop client" : "桌面客户端", "Android app" : "Android 应用", @@ -156,13 +233,18 @@ OC.L10N.register( "Current password" : "当前密码", "New password" : "新密码", "Change password" : "修改密码", + "Full name" : "全名", + "No display name set" : "不显示名称设置", "Email" : "电子邮件", "Your email address" : "您的电子邮件", "Fill in an email address to enable password recovery and receive notifications" : "填入电子邮件地址从而启用密码恢复和接收通知", + "No email address set" : "尚未设置 Email 地址", + "You are member of the following groups:" : "您是以下组的成员:", "Profile picture" : "联系人图片", "Upload new" : "上传新的", "Select new from Files" : "从文件中选择一个新的", "Remove image" : "移除图片", + "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "png 或 jpg。正方形比较理想但你也可以之后对其进行裁剪。文件大小最大不允许超过 20MB。", "Your avatar is provided by your original account." : "您的头像由您的原始账户所提供。", "Cancel" : "取消", "Choose as profile image" : "用作头像", @@ -172,10 +254,15 @@ OC.L10N.register( "Valid until" : "有效期至", "Issued By" : "授权由", "Valid until %s" : "有效期至 %s", + "Import root certificate" : "导入根证书", "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "由 {communityopen}ownCloud 社区{linkclose}开发,{githubopen}源代码{linkclose}在 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr> 许可证{linkclose}下发布。", "Show storage location" : "显示存储位置", "Show last log in" : "显示最后登录", + "Show user backend" : "显示用户后端", + "Send email to new user" : "发送电子邮件给新用户", + "Show email address" : "显示邮件地址", "Username" : "用户名", + "E-Mail" : "E-Mail", "Create" : "创建", "Admin Recovery Password" : "管理恢复密码", "Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件", @@ -188,6 +275,7 @@ OC.L10N.register( "Unlimited" : "无限", "Other" : "其它", "Full Name" : "全名", + "Group Admin for" : "设为以下组管理员", "Quota" : "配额", "Storage Location" : "存储空间位置", "User Backend" : "用户后端", diff --git a/settings/l10n/zh_CN.json b/settings/l10n/zh_CN.json index e965deb8be7..8b34997b2a7 100644 --- a/settings/l10n/zh_CN.json +++ b/settings/l10n/zh_CN.json @@ -1,12 +1,14 @@ { "translations": { "APCu" : "APCu", "Redis" : "Redis", + "Security & setup warnings" : "安全 & 设置警告", "Sharing" : "共享", "Server-side encryption" : "服务器端加密", "External Storage" : "外部存储", "Cron" : "计划任务", "Email server" : "电子邮件服务器", "Log" : "日志", + "Server status" : "服务器状态", "Tips & tricks" : "技巧提示", "Updates" : "更新", "Authentication error" : "认证错误", @@ -23,20 +25,45 @@ "No user supplied" : "没有满足的用户", "Please provide an admin recovery password, otherwise all user data will be lost" : "请提供管理员恢复密码,否则所有用户的数据都将遗失。", "Wrong admin recovery password. Please check the password and try again." : "错误的管理员恢复密码。请检查密码并重试。", + "Backend doesn't support password change, but the user's encryption key was successfully updated." : "后端不支持密码更改,但用户的加密密钥已成功更新。", "Unable to change password" : "不能更改密码", "Enabled" : "开启", "Not enabled" : "未启用", + "installing and updating apps via the app store or Federated Cloud Sharing" : "通过应用程序商店或联合云共享安装和更新应用程序", "Federated Cloud Sharing" : "联合云共享", + "cURL is using an outdated %s version (%s). Please update your operating system or features such as %s will not work reliably." : "cURL使用了过时 %s 版本 (%s)。请更新你的操作系统或功能比如 %s 将无法可靠地工作。", + "A problem occurred, please check your log files (Error: %s)" : "出现了故障,请检查你的日志文件 (错误: %s)", "Migration Completed" : "迁移完成", + "Group already exists." : "组已经存在。", + "Unable to add group." : "无法添加组。", + "Unable to delete group." : "无法删除组", + "log-level out of allowed range" : "日志级别超出允许的范围", "Saved" : "已保存", "test email settings" : "测试电子邮件设置", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "在发送电子邮件时出现问题。请修改您的设置。 (错误: %s)", "Email sent" : "邮件已发送", "You need to set your user email before being able to send test emails." : "在发送测试邮件前您需要设置您的用户电子邮件。", + "Invalid mail address" : "无效的电子邮件地址", + "A user with that name already exists." : "使用该名称的用户已存在。", + "Unable to create user." : "无法创建用户。", + "Your %s account was created" : "你的帐户 %s 已创建", + "Unable to delete user." : "不能删除用户", + "Forbidden" : "被禁止", + "Invalid user" : "用户无效", + "Unable to change mail address" : "无法更改邮箱地址", "Email saved" : "电子邮件已保存", "Are you really sure you want add \"{domain}\" as trusted domain?" : "你真的希望添加 \"{domain}\" 为信任域?", "Add trusted domain" : "添加信任域", + "Migration in progress. Please wait until the migration is finished" : "迁移正在进行中。请等待,直到完成迁移", + "Migration started …" : "迁移开始...", "Sending..." : "正在发送...", + "Official" : "官方", + "Approved" : "已认可", + "Experimental" : "实验", "All" : "全部", + "Official apps are developed by and within the ownCloud community. They offer functionality central to ownCloud and are ready for production use." : "官方应用是由 ownCloud 社区开发。他们提供 ownCloud 的功能核心并准备用于生产。", + "Approved apps are developed by trusted developers and have passed a cursory security check. They are actively maintained in an open code repository and their maintainers deem them to be stable for casual to normal use." : "已认可的应用是由值得信赖的开发商开发,并已通过了一个粗略的安全检查。他们放在一个开放的代码库并且维护人员认为他们是稳定的差不多可以正常使用。", + "This app is not checked for security issues and is new or known to be unstable. Install at your own risk." : "此应用未检查安全问题,它是新的或已知是不稳定的。安装风险自担。", "Update to %s" : "更新为 %s", "Please wait...." : "请稍等....", "Error while disabling app" : "禁用 app 时出错", @@ -49,6 +76,7 @@ "Uninstalling ...." : "卸载中....", "Error while uninstalling app" : "卸载应用时发生了一个错误", "Uninstall" : "卸载", + "An error occurred: {message}" : "发生错误: {message}", "Select a profile picture" : "选择头像", "Very weak password" : "非常弱的密码", "Weak password" : "弱密码", @@ -57,18 +85,22 @@ "Strong password" : "强密码", "Valid until {date}" : "有效期至 {date}", "Delete" : "删除", + "An error occurred. Please upload an ASCII-encoded PEM certificate." : "出现了一个错误。请上传 ASCII 编码的 PEM 证书。", "Groups" : "组", "Unable to delete {objName}" : "无法删除 {objName}", "Error creating group" : "创建组时出错", "A valid group name must be provided" : "请提供一个有效的组名称", "deleted {groupName}" : "已删除 {groupName}", "undo" : "撤销", + "no group" : "没有组", "never" : "从不", "deleted {userName}" : "已删除 {userName}", "add group" : "增加组", + "Changing the password will result in data loss, because data recovery is not available for this user" : "更改密码会导致数据丢失,因为数据恢复不适用于此用户", "A valid username must be provided" : "必须提供合法的用户名", "Error creating user" : "创建用户出错", "A valid password must be provided" : "必须提供合法的密码", + "A valid email must be provided" : "必须提供合法的用户名", "__language_name__" : "简体中文", "Sync clients" : "客户端", "Personal info" : "个人信息", @@ -84,11 +116,20 @@ "NT LAN Manager" : "NT LAN 管理器", "SSL" : "SSL", "TLS" : "TLS", + "php does not seem to be setup properly to query system environment variables. The test with getenv(\"PATH\") only returns an empty response." : "PHP 似乎没有设置好查询的系统环境变量。 用 getenv(\\\"PATH\\\") 测试只返回一个空值。", + "The Read-Only config has been enabled. This prevents setting some configurations via the web-interface. Furthermore, the file needs to be made writable manually for every update." : "只读配置已启用。这样可防止通过 WEB 接口设置一些配置。此外,每次更新后该文件需要手动设置为可写。", "PHP is apparently setup to strip inline doc blocks. This will make several core apps inaccessible." : "PHP 被设置为移除行内 <doc> 块,这将导致数个核心应用无法访问。", "This is probably caused by a cache/accelerator such as Zend OPcache or eAccelerator." : "这可能是由缓存/加速器造成的,例如 Zend OPcache 或 eAccelerator。", + "Your server is running on Microsoft Windows. We highly recommend Linux for optimal user experience." : "你的服务器是运行于 Microsoft Windows 系统。我们强烈推荐使用 Linux 系统以获得最佳的用户体验。比如中文文件夹和文件名支持。", + "%1$s below version %2$s is installed, for stability and performance reasons we recommend to update to a newer %1$s version." : "%1$s 下版本 %2$s 已安装。基于稳定和性能的原因,我们强烈建议更新至 %1$s 版本。", "The PHP module 'fileinfo' is missing. We strongly recommend to enable this module to get best results with mime-type detection." : "PHP模块'文件信息'丢失. 我们强烈建议启用此模块以便mime类型检测取得最佳结果.", "System locale can not be set to a one which supports UTF-8." : "系统语系无法设置为支持 UTF-8 的语系。", "This means that there might be problems with certain characters in file names." : "这意味着一些文件名中的特定字符可能有问题。", + "We strongly suggest installing the required packages on your system to support one of the following locales: %s." : "我们强烈建议安装在系统上所需的软件包支持以下区域设置之一: %s.", + "If your installation is not installed in the root of the domain and uses system cron, there can be issues with the URL generation. To avoid these problems, please set the \"overwrite.cli.url\" option in your config.php file to the webroot path of your installation (Suggested: \"%s\")" : "如果你不是安装在网域根目录而且又使用系统定时计划任务,那么可以导致 URL 链接生成问题。为了避免这些问题,请在你的 Config.php 文件中设置 \\\"overwrite.cli.url\\\" 选项为 webroot 安装根目录 (建议: \\\"%s\\\")", + "It was not possible to execute the cronjob via CLI. The following technical errors have appeared:" : "由于下面的错误,无法通过 CLI 执行定时计划任务:", + "Please double check the <a target=\"_blank\" href=\"%s\">installation guides ↗</a>, and check for any errors or warnings in the <a href=\"#log-section\">log</a>." : "请点击检查 <a target=\\\"_blank\\\" href=\\\"%s\\\"> 安装向导 ↗</a>, 点击 <a href=\\\"#log-section\\\"> 日志 </a>查看详细错误和警告。", + "All checks passed." : "所有检查已通过。", "Open documentation" : "打开文档", "Allow apps to use the Share API" : "允许应用软件使用共享API", "Allow users to share via link" : "允许用户通过链接分享文件", @@ -104,12 +145,25 @@ "Allow users to send mail notification for shared files to other users" : "允许用户发送共享文件的邮件通知给其他用户", "Exclude groups from sharing" : "在分享中排除组", "These groups will still be able to receive shares, but not to initiate them." : "这些组将仍可以获取分享,但无法向他人分享。", + "Last cron job execution: %s." : "上次定时任务执行于: %s.", + "Last cron job execution: %s. Something seems wrong." : "上次定时任务执行于: %s. 似乎有些问题。", "Cron was not executed yet!" : "定时任务还未被执行!", "Execute one task with each page loaded" : "每个页面加载后执行一个任务", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "cron.php 已注册于一个 webcron 服务来通过 http 每 15 分钟执行 cron.php。", "Use system's cron service to call the cron.php file every 15 minutes." : "使用系统 CRON 服务每 15 分钟执行一次 cron.php 文件。", "Enable server-side encryption" : "启用服务器端加密", + "Please read carefully before activating server-side encryption: " : "在激活服务器端加密之前,请仔细阅读:", + "Server-side encryption is a one way process. Once encryption is enabled, all files from that point forward will be encrypted on the server and it will not be possible to disable encryption at a later date" : "服务器端加密是一个单向的过程。一旦启用加密,从该点向前所有文件都将在服务器上进行加密,它将无法在以后禁用加密", + "Anyone who has privileged access to your ownCloud server can decrypt your files either by intercepting requests or reading out user passwords which are stored in plain text session files. Server-side encryption does therefore not protect against malicious administrators but is useful for protecting your data on externally hosted storage." : "只要有权访问您的 ownCloud 服务器就可能解密你的文件,通过截获请求或读出以纯文本会话文件存储的用户密码。服务端加密。它不仅让你免遭恶意的管理员查看隐私,在保护你在外部托管的存储中的数据也非常有用。", + "Depending on the actual encryption module the general file size is increased (by 35%% or more when using the default module)" : "根据实际加密模块上的一般文件大小而增加 (使用默认的模块时,35%% 以上)", + "You should regularly backup all encryption keys to prevent permanent data loss (data/<user>/files_encryption and data/files_encryption)" : "你应该定期备份所有加密密钥,以防数据永久丢失 (data/<user>/files_encryption 和 data/files_encryption)", + "This is the final warning: Do you really want to enable encryption?" : "这是最后一次警告:你真的想启用加密?", "Enable encryption" : "启用加密", + "No encryption module loaded, please enable an encryption module in the app menu." : "没有加载加密模块,请在 APP 应用菜单中启用加密模块。", + "Select default encryption module:" : "选择默认的加密模块:", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one. Please enable the \"Default encryption module\" and run 'occ encryption:migrate'" : "你需要升级你的加密密钥 (旧版 ownCloud <= 8.0) 。 请在应用中启用 \\\"Default encryption module\\\" 并运行 'occ encryption:migrate'", + "You need to migrate your encryption keys from the old encryption (ownCloud <= 8.0) to the new one." : "您需要将加密密钥从旧版(ownCloud<=8.0)迁移到新版。", + "Start migration" : "开始迁移", "This is used for sending out notifications." : "这被用于发送通知。", "Send mode" : "发送模式", "Encryption" : "加密", @@ -122,26 +176,49 @@ "Credentials" : "凭证", "SMTP Username" : "SMTP 用户名", "SMTP Password" : "SMTP 密码", + "Store credentials" : "存储凭据", "Test email settings" : "测试电子邮件设置", "Send email" : "发送邮件", "Log level" : "日志级别", + "Download logfile" : "下载日志文件", "More" : "更多", "Less" : "更少", + "The logfile is bigger than 100 MB. Downloading it may take some time!" : "日志文件超过 100 MB。下载可能需要一些时间!", + "Transactional File Locking is enabled." : "事务文件锁定已启用。", + "Transactional File Locking is disabled." : "事务文件锁定已禁用。", + "SQLite is used as database. For larger installations we recommend to switch to a different database backend." : "SQLite 被用作数据库。对于较大数据量的安装和使用,我们建议您切换到不同的数据库后端。", "Especially when using the desktop client for file syncing the use of SQLite is discouraged." : "特别当使用桌面客户端来同步文件时,不鼓励使用 SQLite 。", + "To migrate to another database use the command line tool: 'occ db:convert-type', or see the <a target=\"_blank\" href=\"%s\">documentation ↗</a>." : "要迁移到另一个数据库请使用命令行工具: 'occ db:convert-type', 或者查看 <a target=\\\"_blank\\\" href=\\\"%s\\\"> 相关文档 ↗</a>.", + "How to do backups" : "如何做备份", "Advanced monitoring" : "高级监控", "Performance tuning" : "性能优化", "Improving the config.php" : "正在优化 config.php", "Theming" : "主题", + "Hardening and security guidance" : "强化和安全指南", "Version" : "版本", + "Developer documentation" : "开发者文档", + "Experimental applications ahead" : "未来的实验应用", + "Experimental apps are not checked for security issues, new or known to be unstable and under heavy development. Installing them can cause data loss or security breaches." : "实验应用程序没有在安全性的问题上作过多检查,新的或已知的不稳定 BUG 都在开发中。安装它们可能会导致数据丢失或安全漏洞。", "by" : "被", + "licensed" : "许可", "Documentation:" : "文档:", "User documentation" : "用户文档", + "Admin documentation" : "管理员文档", + "Show description …" : "显示描述...", + "Hide description …" : "隐藏描述...", + "This app cannot be installed because the following dependencies are not fulfilled:" : "此应用程序无法安装,因为以下依赖性不满足:", "Enable only for specific groups" : "仅对特定的组开放", "Uninstall App" : "卸载应用", + "Enable experimental apps" : "启用实验性应用程序", + "No apps found for your version" : "未找到适合当前版本的应用", + "Hey there,<br><br>just letting you know that you now have an %s account.<br><br>Your username: %s<br>Access it: <a href=\"%s\">%s</a><br><br>" : "亲,<br><br>现在我们为你开通了 %s 私有云帐户。<br><br>你的用户名: %s<br>访问网址: <a href=\\\"%s\\\">%s</a><br><br>", "Cheers!" : "干杯!", + "Hey there,\n\njust letting you know that you now have an %s account.\n\nYour username: %s\nAccess it: %s\n\n" : "亲,\\n\\n 现在我们为你开通了 %s 私有去帐户。\\n\\n 你的用户名: %s\\n 访问网址: %s\\n 你的初始密码需要咨询系统管理员。或者你也可以在登录页面输入任意密码登录,\\n登录窗口将出现忘记密码链接,点击通过注册邮箱重设初始密码。\\n\\n", "Administrator documentation" : "管理员文档", "Online documentation" : "在线文档", "Forum" : "论坛", + "Issue tracker" : "问题跟踪", + "Commercial support" : "商业支持", "Get the apps to sync your files" : "安装应用进行文件同步", "Desktop client" : "桌面客户端", "Android app" : "Android 应用", @@ -154,13 +231,18 @@ "Current password" : "当前密码", "New password" : "新密码", "Change password" : "修改密码", + "Full name" : "全名", + "No display name set" : "不显示名称设置", "Email" : "电子邮件", "Your email address" : "您的电子邮件", "Fill in an email address to enable password recovery and receive notifications" : "填入电子邮件地址从而启用密码恢复和接收通知", + "No email address set" : "尚未设置 Email 地址", + "You are member of the following groups:" : "您是以下组的成员:", "Profile picture" : "联系人图片", "Upload new" : "上传新的", "Select new from Files" : "从文件中选择一个新的", "Remove image" : "移除图片", + "Either png or jpg. Ideally square but you will be able to crop it. The file is not allowed to exceed the maximum size of 20 MB." : "png 或 jpg。正方形比较理想但你也可以之后对其进行裁剪。文件大小最大不允许超过 20MB。", "Your avatar is provided by your original account." : "您的头像由您的原始账户所提供。", "Cancel" : "取消", "Choose as profile image" : "用作头像", @@ -170,10 +252,15 @@ "Valid until" : "有效期至", "Issued By" : "授权由", "Valid until %s" : "有效期至 %s", + "Import root certificate" : "导入根证书", "Developed by the {communityopen}ownCloud community{linkclose}, the {githubopen}source code{linkclose} is licensed under the {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr>{linkclose}." : "由 {communityopen}ownCloud 社区{linkclose}开发,{githubopen}源代码{linkclose}在 {licenseopen}<abbr title=\"Affero General Public License\">AGPL</abbr> 许可证{linkclose}下发布。", "Show storage location" : "显示存储位置", "Show last log in" : "显示最后登录", + "Show user backend" : "显示用户后端", + "Send email to new user" : "发送电子邮件给新用户", + "Show email address" : "显示邮件地址", "Username" : "用户名", + "E-Mail" : "E-Mail", "Create" : "创建", "Admin Recovery Password" : "管理恢复密码", "Enter the recovery password in order to recover the users files during password change" : "输入恢复密码来在更改密码的时候恢复用户文件", @@ -186,6 +273,7 @@ "Unlimited" : "无限", "Other" : "其它", "Full Name" : "全名", + "Group Admin for" : "设为以下组管理员", "Quota" : "配额", "Storage Location" : "存储空间位置", "User Backend" : "用户后端", diff --git a/settings/l10n/zh_TW.js b/settings/l10n/zh_TW.js index dcb8b512597..c386c8e3c3c 100644 --- a/settings/l10n/zh_TW.js +++ b/settings/l10n/zh_TW.js @@ -1,11 +1,15 @@ OC.L10N.register( "settings", { + "APCu" : "APCu", + "Redis" : "Redis", + "Security & setup warnings" : "安全及設定警告", "Sharing" : "分享", + "Server-side encryption" : "伺服器端加密", "External Storage" : "外部儲存", "Cron" : "工作排程", "Email server" : "郵件伺服器", - "Log" : "紀錄", + "Log" : "紀錄檔", "Server status" : "伺服器狀態", "Tips & tricks" : "技巧 & 提示", "Updates" : "更新", @@ -28,13 +32,28 @@ OC.L10N.register( "Not enabled" : "無啟動", "Migration Completed" : "遷移已完成", "Group already exists." : "群組已存在", + "Unable to add group." : "無法新增群組", + "Unable to delete group." : "無法刪除群組", + "log-level out of allowed range" : "log-level 超過允許範圍", "Saved" : "已儲存", "test email settings" : "測試郵件設定", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "寄出郵件時發生問題,請檢查您的設定。(錯誤訊息:%s)", "Email sent" : "Email 已寄出", "You need to set your user email before being able to send test emails." : "在準備要寄出測試郵件時您需要設定您的使用者郵件。", - "Email saved" : "Email已儲存", + "Invalid mail address" : "無效的 email 地址", + "A user with that name already exists." : "同名的使用者已經存在", + "Unable to create user." : "無法建立使用者", + "Your %s account was created" : "您的 %s 帳號已經建立", + "Unable to delete user." : "無法移除使用者", + "Forbidden" : "存取被拒", + "Invalid user" : "無效的使用者", + "Unable to change mail address" : "無法更改 email 地址", + "Email saved" : "Email 已儲存", "Migration started …" : "遷移開始中 ...", "Sending..." : "寄送中...", + "Official" : "官方", + "Approved" : "已批准", + "Experimental" : "實驗性質", "All" : "所有", "Please wait...." : "請稍候...", "Error while disabling app" : "停用應用程式錯誤", @@ -44,12 +63,17 @@ OC.L10N.register( "Updating...." : "更新中...", "Error while updating app" : "更新應用程式錯誤", "Updated" : "已更新", + "Uninstalling ...." : "正在解除安裝…", + "Error while uninstalling app" : "移除應用程式錯誤", + "Uninstall" : "解除安裝", + "An error occurred: {message}" : "發生錯誤:{message}", "Select a profile picture" : "選擇大頭貼", "Very weak password" : "非常弱的密碼", "Weak password" : "弱的密碼", "So-so password" : "普通的密碼", "Good password" : "好的密碼", "Strong password" : "很強的密碼", + "Valid until {date}" : "{date} 前有效", "Delete" : "刪除", "Groups" : "群組", "undo" : "復原", @@ -79,10 +103,10 @@ OC.L10N.register( "Allow users to send mail notification for shared files" : "允許使用者寄送有關分享檔案的郵件通知", "days" : "天", "Allow resharing" : "允許轉貼分享", - "Cron was not executed yet!" : "排程沒有執行!", + "Cron was not executed yet!" : "排程沒有執行!", "Execute one task with each page loaded" : "當頁面載入時,執行", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每15分鐘呼叫 cron.php", - "This is used for sending out notifications." : "這是使用於寄送通知。", + "This is used for sending out notifications." : "寄送通知用", "Send mode" : "寄送模式", "Encryption" : "加密", "From address" : "寄件地址", @@ -90,17 +114,25 @@ OC.L10N.register( "Authentication required" : "必須驗證", "Server address" : "伺服器位址", "Port" : "連接埠", - "Credentials" : "認證", + "Credentials" : "帳密", "SMTP Username" : "SMTP 帳號", "SMTP Password" : "SMTP 密碼", + "Store credentials" : "儲存帳密", "Test email settings" : "測試郵件設定", "Send email" : "寄送郵件", "Log level" : "紀錄層級", + "Download logfile" : "下載記錄檔", "More" : "更多", "Less" : "更少", - "How to do backups" : "如何輩分", + "How to do backups" : "如何備份", + "Advanced monitoring" : "進階監控", + "Performance tuning" : "效能調校", + "Improving the config.php" : "改進 config.php", + "Theming" : "佈景主題", + "Hardening and security guidance" : "增強安全性", "Version" : "版本", "Developer documentation" : "開發者說明文件", + "Experimental applications ahead" : "以下是實驗性質的應用程式", "by" : "由", "licensed" : "許可證", "Documentation:" : "文件:", @@ -148,6 +180,7 @@ OC.L10N.register( "Choose as profile image" : "設定為大頭貼", "Language" : "語言", "Help translate" : "幫助翻譯", + "Common Name" : "Common Name", "Show storage location" : "顯示儲存位置", "Show last log in" : "顯示最近登入", "Show user backend" : "顯示用戶後台", @@ -170,7 +203,7 @@ OC.L10N.register( "Quota" : "容量限制", "Storage Location" : "儲存位置", "User Backend" : "用戶後台", - "Last Login" : "最近登入", + "Last Login" : "上次登入", "change full name" : "變更全名", "set new password" : "設定新密碼", "change email address" : "更改電子郵件地址", diff --git a/settings/l10n/zh_TW.json b/settings/l10n/zh_TW.json index 372265a8d36..40433325edc 100644 --- a/settings/l10n/zh_TW.json +++ b/settings/l10n/zh_TW.json @@ -1,9 +1,13 @@ { "translations": { + "APCu" : "APCu", + "Redis" : "Redis", + "Security & setup warnings" : "安全及設定警告", "Sharing" : "分享", + "Server-side encryption" : "伺服器端加密", "External Storage" : "外部儲存", "Cron" : "工作排程", "Email server" : "郵件伺服器", - "Log" : "紀錄", + "Log" : "紀錄檔", "Server status" : "伺服器狀態", "Tips & tricks" : "技巧 & 提示", "Updates" : "更新", @@ -26,13 +30,28 @@ "Not enabled" : "無啟動", "Migration Completed" : "遷移已完成", "Group already exists." : "群組已存在", + "Unable to add group." : "無法新增群組", + "Unable to delete group." : "無法刪除群組", + "log-level out of allowed range" : "log-level 超過允許範圍", "Saved" : "已儲存", "test email settings" : "測試郵件設定", + "A problem occurred while sending the email. Please revise your settings. (Error: %s)" : "寄出郵件時發生問題,請檢查您的設定。(錯誤訊息:%s)", "Email sent" : "Email 已寄出", "You need to set your user email before being able to send test emails." : "在準備要寄出測試郵件時您需要設定您的使用者郵件。", - "Email saved" : "Email已儲存", + "Invalid mail address" : "無效的 email 地址", + "A user with that name already exists." : "同名的使用者已經存在", + "Unable to create user." : "無法建立使用者", + "Your %s account was created" : "您的 %s 帳號已經建立", + "Unable to delete user." : "無法移除使用者", + "Forbidden" : "存取被拒", + "Invalid user" : "無效的使用者", + "Unable to change mail address" : "無法更改 email 地址", + "Email saved" : "Email 已儲存", "Migration started …" : "遷移開始中 ...", "Sending..." : "寄送中...", + "Official" : "官方", + "Approved" : "已批准", + "Experimental" : "實驗性質", "All" : "所有", "Please wait...." : "請稍候...", "Error while disabling app" : "停用應用程式錯誤", @@ -42,12 +61,17 @@ "Updating...." : "更新中...", "Error while updating app" : "更新應用程式錯誤", "Updated" : "已更新", + "Uninstalling ...." : "正在解除安裝…", + "Error while uninstalling app" : "移除應用程式錯誤", + "Uninstall" : "解除安裝", + "An error occurred: {message}" : "發生錯誤:{message}", "Select a profile picture" : "選擇大頭貼", "Very weak password" : "非常弱的密碼", "Weak password" : "弱的密碼", "So-so password" : "普通的密碼", "Good password" : "好的密碼", "Strong password" : "很強的密碼", + "Valid until {date}" : "{date} 前有效", "Delete" : "刪除", "Groups" : "群組", "undo" : "復原", @@ -77,10 +101,10 @@ "Allow users to send mail notification for shared files" : "允許使用者寄送有關分享檔案的郵件通知", "days" : "天", "Allow resharing" : "允許轉貼分享", - "Cron was not executed yet!" : "排程沒有執行!", + "Cron was not executed yet!" : "排程沒有執行!", "Execute one task with each page loaded" : "當頁面載入時,執行", "cron.php is registered at a webcron service to call cron.php every 15 minutes over http." : "已經與 webcron 服務註冊好,將會每15分鐘呼叫 cron.php", - "This is used for sending out notifications." : "這是使用於寄送通知。", + "This is used for sending out notifications." : "寄送通知用", "Send mode" : "寄送模式", "Encryption" : "加密", "From address" : "寄件地址", @@ -88,17 +112,25 @@ "Authentication required" : "必須驗證", "Server address" : "伺服器位址", "Port" : "連接埠", - "Credentials" : "認證", + "Credentials" : "帳密", "SMTP Username" : "SMTP 帳號", "SMTP Password" : "SMTP 密碼", + "Store credentials" : "儲存帳密", "Test email settings" : "測試郵件設定", "Send email" : "寄送郵件", "Log level" : "紀錄層級", + "Download logfile" : "下載記錄檔", "More" : "更多", "Less" : "更少", - "How to do backups" : "如何輩分", + "How to do backups" : "如何備份", + "Advanced monitoring" : "進階監控", + "Performance tuning" : "效能調校", + "Improving the config.php" : "改進 config.php", + "Theming" : "佈景主題", + "Hardening and security guidance" : "增強安全性", "Version" : "版本", "Developer documentation" : "開發者說明文件", + "Experimental applications ahead" : "以下是實驗性質的應用程式", "by" : "由", "licensed" : "許可證", "Documentation:" : "文件:", @@ -146,6 +178,7 @@ "Choose as profile image" : "設定為大頭貼", "Language" : "語言", "Help translate" : "幫助翻譯", + "Common Name" : "Common Name", "Show storage location" : "顯示儲存位置", "Show last log in" : "顯示最近登入", "Show user backend" : "顯示用戶後台", @@ -168,7 +201,7 @@ "Quota" : "容量限制", "Storage Location" : "儲存位置", "User Backend" : "用戶後台", - "Last Login" : "最近登入", + "Last Login" : "上次登入", "change full name" : "變更全名", "set new password" : "設定新密碼", "change email address" : "更改電子郵件地址", diff --git a/settings/languageCodes.php b/settings/languageCodes.php index 729cc3c6af3..8c58079c2cb 100644 --- a/settings/languageCodes.php +++ b/settings/languageCodes.php @@ -26,6 +26,7 @@ return array( 'el'=>'Ελληνικά', +'en'=>'English', 'fa'=>'فارسى', 'fi_FI'=>'Suomi', 'hi'=>'हिन्दी', diff --git a/settings/templates/admin.php b/settings/templates/admin.php index 9c161281846..75b7161142f 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -73,7 +73,7 @@ if ($_['getenvServerNotWorking']) { ?> <li> <?php p($l->t('php does not seem to be setup properly to query system environment variables. The test with getenv("PATH") only returns an empty response.')); ?><br> - <?php p($l->t('Please check the installation documentation for php configuration notes and the php configuration of your server, especially when using php-fpm.')); ?> + <?php print_unescaped($l->t('Please check the <a target="_blank" href="%s">installation documentation ↗</a> for php configuration notes and the php configuration of your server, especially when using php-fpm.', link_to_docs('admin-php-fpm'))); ?> </li> <?php } @@ -554,16 +554,16 @@ if ($_['cronErrors']) { </ul> </div> +<?php if (!empty($_['updaterAppPanel'])): ?> + <div id="updater"><?php print_unescaped($_['updaterAppPanel']); ?></div> +<?php endif; ?> + <div class="section"> <h2><?php p($l->t('Version'));?></h2> <strong><?php p($theme->getTitle()); ?></strong> <?php p(OC_Util::getHumanVersion()) ?> <?php include('settings.development.notice.php'); ?> </div> -<?php if (!empty($_['updaterAppPanel'])): ?> - <div id="updater"><?php print_unescaped($_['updaterAppPanel']); ?></div> -<?php endif; ?> - <div class="section credits-footer"> <p><?php print_unescaped($theme->getShortFooter()); ?></p> </div> diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 490133c9f25..c0adaf9c5a3 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -83,7 +83,7 @@ if($_['passwordChangeSupported']) { placeholder="<?php echo $l->t('New password');?>" data-typetoggle="#personal-show" autocomplete="off" autocapitalize="off" autocorrect="off" /> - <input type="checkbox" id="personal-show" name="show" /><label for="personal-show"></label> + <input type="checkbox" id="personal-show" name="show" /><label for="personal-show" class="svg"></label> <input id="passwordbutton" type="submit" value="<?php echo $l->t('Change password');?>" /> <br/> <div class="strengthify-wrapper"></div> diff --git a/settings/users.php b/settings/users.php index d4e51900ddd..843995a57f9 100644 --- a/settings/users.php +++ b/settings/users.php @@ -41,7 +41,7 @@ $groupManager = \OC_Group::getManager(); // Set the sort option: SORT_USERCOUNT or SORT_GROUPNAME $sortGroupsBy = \OC\Group\MetaData::SORT_USERCOUNT; -if (class_exists('\OCA\user_ldap\GROUP_LDAP')) { +if (\OC_App::isEnabled('user_ldap')) { $isLDAPUsed = $groupManager->isBackendUsed('\OCA\user_ldap\GROUP_LDAP') || $groupManager->isBackendUsed('\OCA\user_ldap\Group_Proxy'); diff --git a/tests/bootstrap.php b/tests/bootstrap.php index bd94ca67754..86bedc3f325 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -8,9 +8,10 @@ if ($configDir) { require_once __DIR__ . '/../lib/base.php'; -// load minimum set of apps -OC_App::loadApps(array('authentication')); -OC_App::loadApps(array('filesystem', 'logging')); +\OC::$loader->addValidRoot(OC::$SERVERROOT . '/tests'); + +// load all enabled apps +\OC_App::loadApps(); if (!class_exists('PHPUnit_Framework_TestCase')) { require_once('PHPUnit/Autoload.php'); diff --git a/tests/core/command/maintenance/mimetype/updatedbtest.php b/tests/core/command/maintenance/mimetype/updatedbtest.php new file mode 100644 index 00000000000..217301102c5 --- /dev/null +++ b/tests/core/command/maintenance/mimetype/updatedbtest.php @@ -0,0 +1,184 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Core\Command\Maintenance\Mimetype; + +use OC\Core\Command\Maintenance\Mimetype\UpdateDB; +use Test\TestCase; +use OCP\Files\IMimeTypeDetector; +use OCP\Files\IMimeTypeLoader; + +class UpdateDBTest extends TestCase { + /** @var IMimeTypeDetector */ + protected $detector; + /** @var IMimeTypeLoader */ + protected $loader; + + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleInput; + /** @var \PHPUnit_Framework_MockObject_MockObject */ + protected $consoleOutput; + + /** @var \Symfony\Component\Console\Command\Command */ + protected $command; + + protected function setUp() { + parent::setUp(); + + $this->detector = $this->getMockBuilder('OC\Files\Type\Detection') + ->disableOriginalConstructor() + ->getMock(); + $this->loader = $this->getMockBuilder('OC\Files\Type\Loader') + ->disableOriginalConstructor() + ->getMock(); + + $this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); + $this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); + + $this->command = new UpdateDB($this->detector, $this->loader); + } + + public function testNoop() { + $this->consoleInput->method('getOption') + ->with('repair-filecache') + ->willReturn(false); + + $this->detector->expects($this->once()) + ->method('getAllMappings') + ->willReturn([ + 'ext' => ['testing/existingmimetype'] + ]); + $this->loader->expects($this->once()) + ->method('exists') + ->with('testing/existingmimetype') + ->willReturn(true); + + $this->loader->expects($this->never()) + ->method('updateFilecache'); + + $this->consoleOutput->expects($this->at(0)) + ->method('writeln') + ->with('Added 0 new mimetypes'); + $this->consoleOutput->expects($this->at(1)) + ->method('writeln') + ->with('Updated 0 filecache rows'); + + self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function testAddMimetype() { + $this->consoleInput->method('getOption') + ->with('repair-filecache') + ->willReturn(false); + + $this->detector->expects($this->once()) + ->method('getAllMappings') + ->willReturn([ + 'ext' => ['testing/existingmimetype'], + 'new' => ['testing/newmimetype'] + ]); + $this->loader->expects($this->exactly(2)) + ->method('exists') + ->will($this->returnValueMap([ + ['testing/existingmimetype', true], + ['testing/newmimetype', false], + ])); + $this->loader->expects($this->exactly(2)) + ->method('getId') + ->will($this->returnValueMap([ + ['testing/existingmimetype', 1], + ['testing/newmimetype', 2], + ])); + + $this->loader->expects($this->once()) + ->method('updateFilecache') + ->with('new', 2) + ->willReturn(3); + + $this->consoleOutput->expects($this->at(0)) + ->method('writeln') + ->with('Added mimetype "testing/newmimetype" to database'); + $this->consoleOutput->expects($this->at(1)) + ->method('writeln') + ->with('Updated 3 filecache rows for mimetype "testing/newmimetype"'); + + $this->consoleOutput->expects($this->at(2)) + ->method('writeln') + ->with('Added 1 new mimetypes'); + $this->consoleOutput->expects($this->at(3)) + ->method('writeln') + ->with('Updated 3 filecache rows'); + + self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function testSkipComments() { + $this->detector->expects($this->once()) + ->method('getAllMappings') + ->willReturn([ + '_comment' => 'some comment in the JSON' + ]); + $this->loader->expects($this->never()) + ->method('exists'); + + self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function testRepairFilecache() { + $this->consoleInput->method('getOption') + ->with('repair-filecache') + ->willReturn(true); + + $this->detector->expects($this->once()) + ->method('getAllMappings') + ->willReturn([ + 'ext' => ['testing/existingmimetype'], + ]); + $this->loader->expects($this->exactly(1)) + ->method('exists') + ->will($this->returnValueMap([ + ['testing/existingmimetype', true], + ])); + $this->loader->expects($this->exactly(1)) + ->method('getId') + ->will($this->returnValueMap([ + ['testing/existingmimetype', 1], + ])); + + $this->loader->expects($this->once()) + ->method('updateFilecache') + ->with('ext', 1) + ->willReturn(3); + + $this->consoleOutput->expects($this->at(0)) + ->method('writeln') + ->with('Updated 3 filecache rows for mimetype "testing/existingmimetype"'); + + $this->consoleOutput->expects($this->at(1)) + ->method('writeln') + ->with('Added 0 new mimetypes'); + $this->consoleOutput->expects($this->at(2)) + ->method('writeln') + ->with('Updated 3 filecache rows'); + + self::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } +} diff --git a/tests/karma.config.js b/tests/karma.config.js index 7b3877f7766..d3280b2939a 100644 --- a/tests/karma.config.js +++ b/tests/karma.config.js @@ -71,6 +71,16 @@ module.exports = function(config) { testFiles: ['apps/files_external/tests/js/*.js'] }, { + name: 'files_versions', + srcFiles: [ + // need to enforce loading order... + 'apps/files_versions/js/versionmodel.js', + 'apps/files_versions/js/versioncollection.js', + 'apps/files_versions/js/versionstabview.js' + ], + testFiles: ['apps/files_versions/tests/js/**/*.js'] + }, + { name: 'settings', srcFiles: [ 'settings/js/apps.js', diff --git a/tests/lib/appconfig.php b/tests/lib/appconfig.php index 5a2cb3f88fc..5ea446aee51 100644 --- a/tests/lib/appconfig.php +++ b/tests/lib/appconfig.php @@ -7,49 +7,123 @@ * See the COPYING-README file. */ -class Test_Appconfig extends \Test\TestCase { +namespace Test\Lib; + +use Test\TestCase; + +class AppConfig extends TestCase { /** @var \OCP\IAppConfig */ protected $appConfig; /** @var \OCP\IDBConnection */ protected $connection; + protected $originalConfig; + public function setUp() { parent::setUp(); $this->connection = \OC::$server->getDatabaseConnection(); - $this->registerAppConfig(new \OC\AppConfig(\OC::$server->getDatabaseConnection())); - - $query = $this->connection->prepare('DELETE FROM `*PREFIX*appconfig` WHERE `appid` = ?'); - $query->execute(array('testapp')); - $query->execute(array('someapp')); - $query->execute(array('123456')); - $query->execute(array('anotherapp')); - - $query = $this->connection->prepare('INSERT INTO `*PREFIX*appconfig` VALUES (?, ?, ?)'); - - $query->execute(array('testapp', 'enabled', 'true')); - $query->execute(array('testapp', 'installed_version', '1.2.3')); - $query->execute(array('testapp', 'depends_on', 'someapp')); - $query->execute(array('testapp', 'deletethis', 'deletethis')); - $query->execute(array('testapp', 'key', 'value')); - - $query->execute(array('someapp', 'key', 'value')); - $query->execute(array('someapp', 'otherkey', 'othervalue')); - - $query->execute(array('123456', 'key', 'value')); - $query->execute(array('123456', 'enabled', 'false')); - - $query->execute(array('anotherapp', 'key', 'value')); - $query->execute(array('anotherapp', 'enabled', 'false')); + $sql = $this->connection->getQueryBuilder(); + $sql->select('*') + ->from('appconfig'); + $result = $sql->execute(); + $this->originalConfig = $result->fetchAll(); + $result->closeCursor(); + + $sql = $this->connection->getQueryBuilder(); + $sql->delete('appconfig'); + $sql->execute(); + + $this->registerAppConfig(new \OC\AppConfig($this->connection)); + + $sql = $this->connection->getQueryBuilder(); + $sql->insert('appconfig') + ->values([ + 'appid' => $sql->createParameter('appid'), + 'configkey' => $sql->createParameter('configkey'), + 'configvalue' => $sql->createParameter('configvalue'), + ]); + + $sql->setParameters([ + 'appid' => 'testapp', + 'configkey' => 'enabled', + 'configvalue' => 'true', + ])->execute(); + $sql->setParameters([ + 'appid' => 'testapp', + 'configkey' => 'installed_version', + 'configvalue' => '1.2.3', + ])->execute(); + $sql->setParameters([ + 'appid' => 'testapp', + 'configkey' => 'depends_on', + 'configvalue' => 'someapp', + ])->execute(); + $sql->setParameters([ + 'appid' => 'testapp', + 'configkey' => 'deletethis', + 'configvalue' => 'deletethis', + ])->execute(); + $sql->setParameters([ + 'appid' => 'testapp', + 'configkey' => 'key', + 'configvalue' => 'value', + ])->execute(); + + $sql->setParameters([ + 'appid' => 'someapp', + 'configkey' => 'key', + 'configvalue' => 'value', + ])->execute(); + $sql->setParameters([ + 'appid' => 'someapp', + 'configkey' => 'otherkey', + 'configvalue' => 'othervalue', + ])->execute(); + + $sql->setParameters([ + 'appid' => '123456', + 'configkey' => 'key', + 'configvalue' => 'value', + ])->execute(); + $sql->setParameters([ + 'appid' => '123456', + 'configkey' => 'enabled', + 'configvalue' => 'false', + ])->execute(); + + $sql->setParameters([ + 'appid' => 'anotherapp', + 'configkey' => 'key', + 'configvalue' => 'value', + ])->execute(); + $sql->setParameters([ + 'appid' => 'anotherapp', + 'configkey' => 'enabled', + 'configvalue' => 'false', + ])->execute(); } public function tearDown() { - $query = $this->connection->prepare('DELETE FROM `*PREFIX*appconfig` WHERE `appid` = ?'); - $query->execute(array('testapp')); - $query->execute(array('someapp')); - $query->execute(array('123456')); - $query->execute(array('anotherapp')); + $sql = $this->connection->getQueryBuilder(); + $sql->delete('appconfig'); + $sql->execute(); + + $sql = $this->connection->getQueryBuilder(); + $sql->insert('appconfig') + ->values([ + 'appid' => $sql->createParameter('appid'), + 'configkey' => $sql->createParameter('configkey'), + 'configvalue' => $sql->createParameter('configvalue'), + ]); + + foreach ($this->originalConfig as $configs) { + $sql->setParameter('appid', $configs['appid']) + ->setParameter('configkey', $configs['configkey']) + ->setParameter('configvalue', $configs['configvalue']); + $sql->execute(); + } $this->registerAppConfig(new \OC\AppConfig(\OC::$server->getDatabaseConnection())); parent::tearDown(); @@ -61,217 +135,179 @@ class Test_Appconfig extends \Test\TestCase { * @param \OCP\IAppConfig $appConfig */ protected function registerAppConfig($appConfig) { - \OC::$server->registerService('AppConfig', function ($c) use ($appConfig) { + \OC::$server->registerService('AppConfig', function () use ($appConfig) { return $appConfig; }); } - public function getAppConfigs() { - return [ - [new \OC\AppConfig(\OC::$server->getDatabaseConnection())], - ]; - } + public function testGetApps() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testGetApps($callable) { - $query = \OC_DB::prepare('SELECT DISTINCT `appid` FROM `*PREFIX*appconfig` ORDER BY `appid`'); - $result = $query->execute(); - $expected = array(); - while ($row = $result->fetchRow()) { - $expected[] = $row['appid']; - } - sort($expected); - $apps = call_user_func([$callable, 'getApps']); - $this->assertEquals($expected, $apps); + $this->assertEquals([ + 'anotherapp', + 'someapp', + 'testapp', + '123456', + ], $config->getApps()); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testGetKeys($callable) { - $query = \OC_DB::prepare('SELECT `configkey` FROM `*PREFIX*appconfig` WHERE `appid` = ?'); - $result = $query->execute(array('testapp')); - $expected = array(); - while($row = $result->fetchRow()) { - $expected[] = $row["configkey"]; - } - sort($expected); - $keys = call_user_func([$callable, 'getKeys'], 'testapp'); - $this->assertEquals($expected, $keys); + public function testGetKeys() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $keys = $config->getKeys('testapp'); + $this->assertEquals([ + 'deletethis', + 'depends_on', + 'enabled', + 'installed_version', + 'key', + ], $keys); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testGetValue($callable) { - $value = call_user_func([$callable, 'getValue'], 'testapp', 'installed_version'); + public function testGetValue() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $value = $config->getValue('testapp', 'installed_version'); $this->assertConfigKey('testapp', 'installed_version', $value); - $value = call_user_func([$callable, 'getValue'], 'testapp', 'nonexistant'); + $value = $config->getValue('testapp', 'nonexistant'); $this->assertNull($value); - $value = call_user_func([$callable, 'getValue'], 'testapp', 'nonexistant', 'default'); + $value = $config->getValue('testapp', 'nonexistant', 'default'); $this->assertEquals('default', $value); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testHasKey($callable) { - $value = call_user_func([$callable, 'hasKey'], 'testapp', 'installed_version'); - $this->assertTrue($value); + public function testHasKey() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); - $value = call_user_func([$callable, 'hasKey'], 'nonexistant', 'nonexistant'); - $this->assertFalse($value); + $this->assertTrue($config->hasKey('testapp', 'installed_version')); + $this->assertFalse($config->hasKey('testapp', 'nonexistant')); + $this->assertFalse($config->hasKey('nonexistant', 'nonexistant')); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testSetValue($callable) { - call_user_func([$callable, 'setValue'], 'testapp', 'installed_version', '1.33.7'); + public function testSetValueUpdate() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $this->assertEquals('1.2.3', $config->getValue('testapp', 'installed_version')); + $this->assertConfigKey('testapp', 'installed_version', '1.2.3'); + + $this->assertFalse($config->setValue('testapp', 'installed_version', '1.2.3')); + + $this->assertEquals('1.2.3', $config->getValue('testapp', 'installed_version')); + $this->assertConfigKey('testapp', 'installed_version', '1.2.3'); + + $this->assertTrue($config->setValue('testapp', 'installed_version', '1.33.7')); + + + $this->assertEquals('1.33.7', $config->getValue('testapp', 'installed_version')); $this->assertConfigKey('testapp', 'installed_version', '1.33.7'); - call_user_func([$callable, 'setValue'], 'someapp', 'somekey', 'somevalue'); + $config->setValue('someapp', 'somekey', 'somevalue'); $this->assertConfigKey('someapp', 'somekey', 'somevalue'); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testDeleteKey($callable) { - call_user_func([$callable, 'deleteKey'], 'testapp', 'deletethis'); - $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*appconfig` WHERE `appid` = ? AND `configkey` = ?'); - $query->execute(array('testapp', 'deletethis')); - $result = (bool)$query->fetchRow(); + public function testSetValueInsert() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $this->assertFalse($config->hasKey('someapp', 'somekey')); + $this->assertNull($config->getValue('someapp', 'somekey')); + + $this->assertTrue($config->setValue('someapp', 'somekey', 'somevalue')); + + $this->assertTrue($config->hasKey('someapp', 'somekey')); + $this->assertEquals('somevalue', $config->getValue('someapp', 'somekey')); + $this->assertConfigKey('someapp', 'somekey', 'somevalue'); + + $this->assertFalse($config->setValue('someapp', 'somekey', 'somevalue')); + } + + public function testDeleteKey() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $this->assertTrue($config->hasKey('testapp', 'deletethis')); + + $config->deleteKey('testapp', 'deletethis'); + + $this->assertFalse($config->hasKey('testapp', 'deletethis')); + + $sql = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $sql->select('configvalue') + ->from('appconfig') + ->where($sql->expr()->eq('appid', $sql->createParameter('appid'))) + ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey'))) + ->setParameter('appid', 'testapp') + ->setParameter('configkey', 'deletethis'); + $query = $sql->execute(); + $result = $query->fetch(); + $query->closeCursor(); $this->assertFalse($result); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testDeleteApp($callable) { - call_user_func([$callable, 'deleteApp'], 'someapp'); - $query = \OC_DB::prepare('SELECT `configkey` FROM `*PREFIX*appconfig` WHERE `appid` = ?'); - $query->execute(array('someapp')); - $result = (bool)$query->fetchRow(); + public function testDeleteApp() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $this->assertTrue($config->hasKey('someapp', 'otherkey')); + + $config->deleteApp('someapp'); + + $this->assertFalse($config->hasKey('someapp', 'otherkey')); + + $sql = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $sql->select('configvalue') + ->from('appconfig') + ->where($sql->expr()->eq('appid', $sql->createParameter('appid'))) + ->setParameter('appid', 'someapp'); + $query = $sql->execute(); + $result = $query->fetch(); + $query->closeCursor(); $this->assertFalse($result); } - /** - * @dataProvider getAppConfigs - * - * @param mixed $callable - */ - public function testGetValues($callable) { - $this->assertFalse(call_user_func([$callable, 'getValues'], 'testapp', 'enabled')); + public function testGetValuesNotAllowed() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); - $query = \OC_DB::prepare('SELECT `configkey`, `configvalue` FROM `*PREFIX*appconfig` WHERE `appid` = ?'); - $query->execute(array('testapp')); - $expected = array(); - while ($row = $query->fetchRow()) { + $this->assertFalse($config->getValues('testapp', 'enabled')); + + $this->assertFalse($config->getValues(false, false)); + } + + public function testGetValues() { + $config = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + + $sql = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $sql->select(['configkey', 'configvalue']) + ->from('appconfig') + ->where($sql->expr()->eq('appid', $sql->createParameter('appid'))) + ->setParameter('appid', 'testapp'); + $query = $sql->execute(); + $expected = []; + while ($row = $query->fetch()) { $expected[$row['configkey']] = $row['configvalue']; } - $values = call_user_func([$callable, 'getValues'], 'testapp', false); + $query->closeCursor(); + + $values = $config->getValues('testapp', false); $this->assertEquals($expected, $values); - $query = \OC_DB::prepare('SELECT `appid`, `configvalue` FROM `*PREFIX*appconfig` WHERE `configkey` = ?'); - $query->execute(array('enabled')); - $expected = array(); - while ($row = $query->fetchRow()) { + $sql = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $sql->select(['appid', 'configvalue']) + ->from('appconfig') + ->where($sql->expr()->eq('configkey', $sql->createParameter('configkey'))) + ->setParameter('configkey', 'enabled'); + $query = $sql->execute(); + $expected = []; + while ($row = $query->fetch()) { $expected[$row['appid']] = $row['configvalue']; } - $values = call_user_func([$callable, 'getValues'], false, 'enabled'); - $this->assertEquals($expected, $values); - } + $query->closeCursor(); - public function testSetValueUnchanged() { - $statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false); - $statementMock->expects($this->once()) - ->method('fetch') - ->will($this->returnValue(false)); - - $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false); - $connectionMock->expects($this->once()) - ->method('executeQuery') - ->with($this->equalTo('SELECT `configvalue`, `configkey` FROM `*PREFIX*appconfig`' - .' WHERE `appid` = ?'), $this->equalTo(array('bar'))) - ->will($this->returnValue($statementMock)); - $connectionMock->expects($this->once()) - ->method('insertIfNotExist') - ->with($this->equalTo('*PREFIX*appconfig'), - $this->equalTo( - array( - 'appid' => 'bar', - 'configkey' => 'foo', - 'configvalue' => 'v1', - ) - ), $this->equalTo(['appid', 'configkey'])) - ->willReturn(1); - $connectionMock->expects($this->never()) - ->method('update'); - - $appconfig = new OC\AppConfig($connectionMock); - $appconfig->setValue('bar', 'foo', 'v1'); - $appconfig->setValue('bar', 'foo', 'v1'); - $appconfig->setValue('bar', 'foo', 'v1'); - } - - public function testSetValueUnchanged2() { - $statementMock = $this->getMock('\Doctrine\DBAL\Statement', array(), array(), '', false); - $statementMock->expects($this->once()) - ->method('fetch') - ->will($this->returnValue(false)); - - $connectionMock = $this->getMock('\OC\DB\Connection', array(), array(), '', false); - $connectionMock->expects($this->once()) - ->method('executeQuery') - ->with($this->equalTo('SELECT `configvalue`, `configkey` FROM `*PREFIX*appconfig`' - .' WHERE `appid` = ?'), $this->equalTo(array('bar'))) - ->will($this->returnValue($statementMock)); - $connectionMock->expects($this->once()) - ->method('insertIfNotExist') - ->with($this->equalTo('*PREFIX*appconfig'), - $this->equalTo( - array( - 'appid' => 'bar', - 'configkey' => 'foo', - 'configvalue' => 'v1', - ) - ), $this->equalTo(['appid', 'configkey'])) - ->willReturn(1); - $connectionMock->expects($this->once()) - ->method('update') - ->with($this->equalTo('*PREFIX*appconfig'), - $this->equalTo(array('configvalue' => 'v2')), - $this->equalTo(array('appid' => 'bar', 'configkey' => 'foo')) - ); - - $appconfig = new OC\AppConfig($connectionMock); - $appconfig->setValue('bar', 'foo', 'v1'); - $appconfig->setValue('bar', 'foo', 'v2'); - $appconfig->setValue('bar', 'foo', 'v2'); + $values = $config->getValues(false, 'enabled'); + $this->assertEquals($expected, $values); } public function testSettingConfigParallel() { - $appConfig1 = new OC\AppConfig(\OC::$server->getDatabaseConnection()); - $appConfig2 = new OC\AppConfig(\OC::$server->getDatabaseConnection()); + $appConfig1 = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); + $appConfig2 = new \OC\AppConfig(\OC::$server->getDatabaseConnection()); $appConfig1->getValue('testapp', 'foo', 'v1'); $appConfig2->getValue('testapp', 'foo', 'v1'); @@ -286,12 +322,19 @@ class Test_Appconfig extends \Test\TestCase { * @param string $app * @param string $key * @param string $expected - * @throws \OC\DatabaseException */ protected function assertConfigKey($app, $key, $expected) { - $query = \OC_DB::prepare('SELECT `configvalue` FROM `*PREFIX*appconfig` WHERE `appid` = ? AND `configkey` = ?'); - $result = $query->execute([$app, $key]); - $actual = $result->fetchRow(); + $sql = \OC::$server->getDatabaseConnection()->getQueryBuilder(); + $sql->select('configvalue') + ->from('appconfig') + ->where($sql->expr()->eq('appid', $sql->createParameter('appid'))) + ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey'))) + ->setParameter('appid', $app) + ->setParameter('configkey', $key); + $query = $sql->execute(); + $actual = $query->fetch(); + $query->closeCursor(); + $this->assertEquals($expected, $actual['configvalue']); } } diff --git a/tests/lib/appframework/http/HttpTest.php b/tests/lib/appframework/http/HttpTest.php index e9be3e73904..4bcc8305db4 100644 --- a/tests/lib/appframework/http/HttpTest.php +++ b/tests/lib/appframework/http/HttpTest.php @@ -65,6 +65,14 @@ class HttpTest extends \Test\TestCase { } + public function testQuotedEtagMatchReturnsNotModified() { + $http = new Http(array('HTTP_IF_NONE_MATCH' => '"hi"')); + + $header = $http->getStatusHeader(Http::STATUS_OK, null, 'hi'); + $this->assertEquals('HTTP/1.1 304 Not Modified', $header); + } + + public function testLastModifiedMatchReturnsNotModified() { $dateTime = new \DateTime(null, new \DateTimeZone('GMT')); $dateTime->setTimestamp('12'); diff --git a/tests/lib/appframework/http/JSONResponseTest.php b/tests/lib/appframework/http/JSONResponseTest.php index 692237f57b2..a98f5fc894a 100644 --- a/tests/lib/appframework/http/JSONResponseTest.php +++ b/tests/lib/appframework/http/JSONResponseTest.php @@ -66,13 +66,27 @@ class JSONResponseTest extends \Test\TestCase { $this->assertEquals($expected, $this->json->render()); } + /** + * @return array + */ + public function renderDataProvider() { + return [ + [ + ['test' => 'hi'], '{"test":"hi"}', + ], + [ + ['<h1>test' => '<h1>hi'], '{"\u003Ch1\u003Etest":"\u003Ch1\u003Ehi"}', + ], + ]; + } - public function testRender() { - $params = array('test' => 'hi'); - $this->json->setData($params); - - $expected = '{"test":"hi"}'; - + /** + * @dataProvider renderDataProvider + * @param array $input + * @param string $expected + */ + public function testRender(array $input, $expected) { + $this->json->setData($input); $this->assertEquals($expected, $this->json->render()); } diff --git a/tests/lib/autoloader.php b/tests/lib/autoloader.php index bf63094a9ef..6d9d3bd8eba 100644 --- a/tests/lib/autoloader.php +++ b/tests/lib/autoloader.php @@ -16,7 +16,7 @@ class AutoLoader extends TestCase { protected function setUp() { parent::setUp(); - $this->loader = new \OC\AutoLoader(); + $this->loader = new \OC\AutoLoader([]); } public function testLeadingSlashOnClassName() { diff --git a/tests/lib/files/type/loadertest.php b/tests/lib/files/type/loadertest.php new file mode 100644 index 00000000000..7f87afd2f4d --- /dev/null +++ b/tests/lib/files/type/loadertest.php @@ -0,0 +1,93 @@ +<?php +/** + * @author Robin McCorkell <rmccorkell@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OC\Files\Type; + +use \OC\Files\Type\Loader; +use \OCP\IDBConnection; + +class LoaderTest extends \Test\TestCase { + /** @var IDBConnection */ + protected $db; + /** @var Loader */ + protected $loader; + + protected function setUp() { + $this->db = \OC::$server->getDatabaseConnection(); + $this->loader = new Loader($this->db); + } + + protected function tearDown() { + $deleteMimetypes = $this->db->getQueryBuilder(); + $deleteMimetypes->delete('mimetypes') + ->where($deleteMimetypes->expr()->like( + 'mimetype', $deleteMimetypes->createPositionalParameter('testing/%') + )); + $deleteMimetypes->execute(); + } + + + public function testGetMimetype() { + $qb = $this->db->getQueryBuilder(); + $qb->insert('mimetypes') + ->values([ + 'mimetype' => $qb->createPositionalParameter('testing/mymimetype') + ]); + $qb->execute(); + + $this->assertTrue($this->loader->exists('testing/mymimetype')); + $mimetypeId = $this->loader->getId('testing/mymimetype'); + $this->assertNotNull($mimetypeId); + + $mimetype = $this->loader->getMimetypeById($mimetypeId); + $this->assertEquals('testing/mymimetype', $mimetype); + } + + public function testGetNonexistentMimetype() { + $this->assertFalse($this->loader->exists('testing/nonexistent')); + // hopefully this ID doesn't exist + $this->assertNull($this->loader->getMimetypeById(12345)); + } + + public function testStore() { + $this->assertFalse($this->loader->exists('testing/mymimetype')); + $mimetypeId = $this->loader->getId('testing/mymimetype'); + + $qb = $this->db->getQueryBuilder(); + $qb->select('mimetype') + ->from('mimetypes') + ->where($qb->expr()->eq('id', $qb->createPositionalParameter($mimetypeId))); + + $mimetype = $qb->execute()->fetch(); + $this->assertEquals('testing/mymimetype', $mimetype['mimetype']); + + $this->assertEquals('testing/mymimetype', $this->loader->getMimetypeById($mimetypeId)); + $this->assertEquals($mimetypeId, $this->loader->getId('testing/mymimetype')); + } + + public function testStoreExists() { + $mimetypeId = $this->loader->getId('testing/mymimetype'); + $mimetypeId2 = $this->loader->getId('testing/mymimetype'); + + $this->assertEquals($mimetypeId, $mimetypeId2); + } + +} diff --git a/tests/lib/memcache/memcached.php b/tests/lib/memcache/memcached.php index 51a78996dd4..3ea9216029a 100644 --- a/tests/lib/memcache/memcached.php +++ b/tests/lib/memcache/memcached.php @@ -26,4 +26,27 @@ class Memcached extends Cache { parent::setUp(); $this->instance = new \OC\Memcache\Memcached($this->getUniqueID()); } + + public function testClear() { + // Memcached is sometimes broken with clear(), so we don't test it thoroughly + $value='ipsum lorum'; + $this->instance->set('1_value1', $value); + $this->instance->set('1_value2', $value); + $this->instance->set('2_value1', $value); + $this->instance->set('3_value1', $value); + + $this->assertTrue($this->instance->clear('1_')); + + $this->assertFalse($this->instance->hasKey('1_value1')); + $this->assertFalse($this->instance->hasKey('1_value2')); + //$this->assertTrue($this->instance->hasKey('2_value1')); + //$this->assertTrue($this->instance->hasKey('3_value1')); + + $this->assertTrue($this->instance->clear()); + + $this->assertFalse($this->instance->hasKey('1_value1')); + $this->assertFalse($this->instance->hasKey('1_value2')); + $this->assertFalse($this->instance->hasKey('2_value1')); + $this->assertFalse($this->instance->hasKey('3_value1')); + } } diff --git a/tests/lib/notification/actiontest.php b/tests/lib/notification/actiontest.php new file mode 100644 index 00000000000..e319c250cc7 --- /dev/null +++ b/tests/lib/notification/actiontest.php @@ -0,0 +1,236 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Notification; + + +use OC\Notification\Action; +use OC\Notification\IAction; +use Test\TestCase; + +class ActionTest extends TestCase { + /** @var IAction */ + protected $action; + + public function setUp() { + parent::setUp(); + $this->action = new Action(); + } + + public function dataSetLabel() { + return [ + ['test1'], + [str_repeat('a', 1)], + [str_repeat('a', 32)], + ]; + } + + /** + * @dataProvider dataSetLabel + * @param string $label + */ + public function testSetLabel($label) { + $this->assertSame('', $this->action->getLabel()); + $this->action->setLabel($label); + $this->assertSame($label, $this->action->getLabel()); + } + + public function dataSetLabelInvalid() { + return [ + [true], + [false], + [0], + [1], + [''], + [str_repeat('a', 33)], + [[]], + [[str_repeat('a', 33)]], + ]; + } + + /** + * @dataProvider dataSetLabelInvalid + * @param string $label + * + * @expectedException \InvalidArgumentException + */ + public function testSetLabelInvalid($label) { + $this->action->setLabel($label); + } + + public function dataSetParsedLabel() { + return [ + ['test1'], + [str_repeat('a', 1)], + [str_repeat('a', 32)], + ]; + } + + /** + * @dataProvider dataSetParsedLabel + * @param string $label + */ + public function testSetParsedLabel($label) { + $this->assertSame('', $this->action->getParsedLabel()); + $this->action->setParsedLabel($label); + $this->assertSame($label, $this->action->getParsedLabel()); + } + + public function dataSetParsedLabelInvalid() { + return [ + [true], + [false], + [0], + [1], + [''], + [[]], + [[str_repeat('a', 33)]], + ]; + } + + /** + * @dataProvider dataSetParsedLabelInvalid + * @param string $label + * + * @expectedException \InvalidArgumentException + */ + public function testSetParsedLabelInvalid($label) { + $this->action->setParsedLabel($label); + } + + public function dataSetLink() { + return [ + ['test1', 'GET'], + ['test2', 'POST'], + [str_repeat('a', 1), 'PUT'], + [str_repeat('a', 256), 'DELETE'], + ]; + } + + /** + * @dataProvider dataSetLink + * @param string $link + * @param string $type + */ + public function testSetLink($link, $type) { + $this->assertSame('', $this->action->getLink()); + $this->action->setLink($link, $type); + $this->assertSame($link, $this->action->getLink()); + $this->assertSame($type, $this->action->getRequestType()); + } + + public function dataSetLinkInvalid() { + return [ + // Invalid link + [true, 'GET'], + [false, 'GET'], + [0, 'GET'], + [1, 'GET'], + ['', 'GET'], + [str_repeat('a', 257), 'GET'], + [[], 'GET'], + [[str_repeat('a', 257)], 'GET'], + + // Invalid type + ['url', 'notGET'], + ['url', true], + ['url', false], + ['url', 0], + ['url', 1], + ['url', []], + ['url', ['GET']], + ]; + } + + /** + * @dataProvider dataSetLinkInvalid + * @param string $link + * @param string $type + * + * @expectedException \InvalidArgumentException + */ + public function testSetLinkInvalid($link, $type) { + $this->action->setLink($link, $type); + } + + public function dataSetIcon() { + return [ + ['test1'], + [str_repeat('a', 1)], + [str_repeat('a', 64)], + ]; + } + + /** + * @dataProvider dataSetIcon + * @param string $icon + */ + public function testSetIcon($icon) { + $this->assertSame('', $this->action->getIcon()); + $this->action->setIcon($icon); + $this->assertSame($icon, $this->action->getIcon()); + } + + public function dataSetIconInvalid() { + return [ + [true], + [false], + [0], + [1], + [''], + [str_repeat('a', 65)], + [[]], + [[str_repeat('a', 65)]], + ]; + } + + /** + * @dataProvider dataSetIconInvalid + * @param string $icon + * + * @expectedException \InvalidArgumentException + */ + public function testSetIconInvalid($icon) { + $this->action->setIcon($icon); + } + + public function testIsValid() { + $this->assertFalse($this->action->isValid()); + $this->assertFalse($this->action->isValidParsed()); + $this->action->setLabel('label'); + $this->assertFalse($this->action->isValid()); + $this->assertFalse($this->action->isValidParsed()); + $this->action->setLink('link', 'GET'); + $this->assertTrue($this->action->isValid()); + $this->assertFalse($this->action->isValidParsed()); + } + + public function testIsValidParsed() { + $this->assertFalse($this->action->isValid()); + $this->assertFalse($this->action->isValidParsed()); + $this->action->setParsedLabel('label'); + $this->assertFalse($this->action->isValid()); + $this->assertFalse($this->action->isValidParsed()); + $this->action->setLink('link', 'GET'); + $this->assertFalse($this->action->isValid()); + $this->assertTrue($this->action->isValidParsed()); + } +} diff --git a/tests/lib/notification/managertest.php b/tests/lib/notification/managertest.php new file mode 100644 index 00000000000..fa2a0586f90 --- /dev/null +++ b/tests/lib/notification/managertest.php @@ -0,0 +1,345 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Notification; + +use OC\Notification\Manager; +use OC\Notification\IManager; +use Test\TestCase; + +class ManagerTest extends TestCase { + /** @var IManager */ + protected $manager; + + public function setUp() { + parent::setUp(); + $this->manager = new Manager(); + } + + public function testRegisterApp() { + $app = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + + $closure = function() use ($app) { + return $app; + }; + + $this->assertEquals([], $this->invokePrivate($this->manager, 'getApps')); + + $this->manager->registerApp($closure); + + $this->assertEquals([$app], $this->invokePrivate($this->manager, 'getApps')); + $this->assertEquals([$app], $this->invokePrivate($this->manager, 'getApps')); + + $this->manager->registerApp($closure); + + $this->assertEquals([$app, $app], $this->invokePrivate($this->manager, 'getApps')); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testRegisterAppInvalid() { + $notifier = $this->getMockBuilder('OC\Notification\INotifier') + ->disableOriginalConstructor() + ->getMock(); + + $closure = function() use ($notifier) { + return $notifier; + }; + + $this->manager->registerApp($closure); + + $this->invokePrivate($this->manager, 'getApps'); + } + + public function testRegisterNotifier() { + $notifier = $this->getMockBuilder('OC\Notification\INotifier') + ->disableOriginalConstructor() + ->getMock(); + + $closure = function() use ($notifier) { + return $notifier; + }; + + $this->assertEquals([], $this->invokePrivate($this->manager, 'getNotifiers')); + + $this->manager->registerNotifier($closure); + + $this->assertEquals([$notifier], $this->invokePrivate($this->manager, 'getNotifiers')); + $this->assertEquals([$notifier], $this->invokePrivate($this->manager, 'getNotifiers')); + + $this->manager->registerNotifier($closure); + + $this->assertEquals([$notifier, $notifier], $this->invokePrivate($this->manager, 'getNotifiers')); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testRegisterNotifierInvalid() { + $app = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + + $closure = function() use ($app) { + return $app; + }; + + $this->manager->registerNotifier($closure); + + $this->invokePrivate($this->manager, 'getNotifiers'); + } + + public function testCreateNotification() { + $action = $this->manager->createNotification(); + $this->assertInstanceOf('OC\Notification\INotification', $action); + } + + public function testNotify() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification->expects($this->once()) + ->method('isValid') + ->willReturn(true); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */ + $app = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + $app->expects($this->once()) + ->method('notify') + ->with($notification); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */ + $app2 = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + $app2->expects($this->once()) + ->method('notify') + ->with($notification); + + $this->manager->registerApp(function() use ($app) { + return $app; + }); + $this->manager->registerApp(function() use ($app2) { + return $app2; + }); + + $this->manager->notify($notification); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testNotifyInvalid() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification->expects($this->once()) + ->method('isValid') + ->willReturn(false); + + $this->manager->notify($notification); + } + + public function testPrepare() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification->expects($this->once()) + ->method('isValidParsed') + ->willReturn(true); + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification2 */ + $notification2 = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification2->expects($this->exactly(2)) + ->method('isValidParsed') + ->willReturn(true); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */ + $notifier = $this->getMockBuilder('OC\Notification\INotifier') + ->disableOriginalConstructor() + ->getMock(); + $notifier->expects($this->once()) + ->method('prepare') + ->with($notification, 'en') + ->willReturnArgument(0); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier2 */ + $notifier2 = $this->getMockBuilder('OC\Notification\INotifier') + ->disableOriginalConstructor() + ->getMock(); + $notifier2->expects($this->once()) + ->method('prepare') + ->with($notification, 'en') + ->willReturn($notification2); + + $this->manager->registerNotifier(function() use ($notifier) { + return $notifier; + }); + $this->manager->registerNotifier(function() use ($notifier2) { + return $notifier2; + }); + + $this->assertEquals($notification2, $this->manager->prepare($notification, 'en')); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testPrepareInvalid() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification->expects($this->once()) + ->method('isValidParsed') + ->willReturn(false); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */ + $notifier = $this->getMockBuilder('OC\Notification\INotifier') + ->disableOriginalConstructor() + ->getMock(); + $notifier->expects($this->once()) + ->method('prepare') + ->with($notification, 'de') + ->willReturnArgument(0); + + $this->manager->registerNotifier(function() use ($notifier) { + return $notifier; + }); + + $this->manager->prepare($notification, 'de'); + } + + public function testPrepareNotifierThrows() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification->expects($this->once()) + ->method('isValidParsed') + ->willReturn(true); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $notifier */ + $notifier = $this->getMockBuilder('OC\Notification\INotifier') + ->disableOriginalConstructor() + ->getMock(); + $notifier->expects($this->once()) + ->method('prepare') + ->with($notification, 'de') + ->willThrowException(new \InvalidArgumentException); + + $this->manager->registerNotifier(function() use ($notifier) { + return $notifier; + }); + + $this->assertEquals($notification, $this->manager->prepare($notification, 'de')); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testPrepareNoNotifier() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + $notification->expects($this->once()) + ->method('isValidParsed') + ->willReturn(false); + + $this->manager->prepare($notification, 'en'); + } + + public function testMarkProcessed() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */ + $app = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + $app->expects($this->once()) + ->method('markProcessed') + ->with($notification); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */ + $app2 = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + $app2->expects($this->once()) + ->method('markProcessed') + ->with($notification); + + $this->manager->registerApp(function() use ($app) { + return $app; + }); + $this->manager->registerApp(function() use ($app2) { + return $app2; + }); + + $this->manager->markProcessed($notification); + } + + public function testGetCount() { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('OC\Notification\INotification') + ->disableOriginalConstructor() + ->getMock(); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app */ + $app = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + $app->expects($this->once()) + ->method('getCount') + ->with($notification) + ->willReturn(21); + + /** @var \OC\Notification\IApp|\PHPUnit_Framework_MockObject_MockObject $app2 */ + $app2 = $this->getMockBuilder('OC\Notification\IApp') + ->disableOriginalConstructor() + ->getMock(); + $app2->expects($this->once()) + ->method('getCount') + ->with($notification) + ->willReturn(42); + + $this->manager->registerApp(function() use ($app) { + return $app; + }); + $this->manager->registerApp(function() use ($app2) { + return $app2; + }); + + $this->assertSame(63, $this->manager->getCount($notification)); + } +} diff --git a/tests/lib/notification/notificationtest.php b/tests/lib/notification/notificationtest.php new file mode 100644 index 00000000000..a790a53eaa7 --- /dev/null +++ b/tests/lib/notification/notificationtest.php @@ -0,0 +1,601 @@ +<?php +/** + * @author Joas Schilling <nickvergessen@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * 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, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Test\Notification; + + +use OC\Notification\Notification; +use OC\Notification\INotification; +use Test\TestCase; + +class NotificationTest extends TestCase { + /** @var INotification */ + protected $notification; + + public function setUp() { + parent::setUp(); + $this->notification = new Notification(); + } + + protected function dataValidString($maxLength) { + $dataSets = [ + ['test1'], + [str_repeat('a', 1)], + ]; + if ($maxLength !== false) { + $dataSets[] = [str_repeat('a', $maxLength)]; + } + return $dataSets; + } + + protected function dataInvalidString($maxLength) { + $dataSets = [ + [true], + [false], + [0], + [1], + [''], + [[]], + ]; + if ($maxLength !== false) { + $dataSets[] = [str_repeat('a', $maxLength + 1)]; + $dataSets[] = [[str_repeat('a', $maxLength + 1)]]; + } + return $dataSets; + } + + protected function dataValidInt() { + return [ + [0], + [1], + [time()], + ]; + } + + protected function dataInvalidInt() { + return [ + [true], + [false], + [''], + ['a'], + [str_repeat('a', 256)], + [[]], + [['a']], + [[str_repeat('a', 256)]], + ]; + } + + public function dataSetApp() { + return $this->dataValidString(32); + } + + /** + * @dataProvider dataSetApp + * @param string $app + */ + public function testSetApp($app) { + $this->assertSame('', $this->notification->getApp()); + $this->notification->setApp($app); + $this->assertSame($app, $this->notification->getApp()); + } + + public function dataSetAppInvalid() { + return $this->dataInvalidString(32); + } + + /** + * @dataProvider dataSetAppInvalid + * @param mixed $app + * + * @expectedException \InvalidArgumentException + */ + public function testSetAppInvalid($app) { + $this->notification->setApp($app); + } + + public function dataSetUser() { + return $this->dataValidString(64); + } + + /** + * @dataProvider dataSetUser + * @param string $user + */ + public function testSetUser($user) { + $this->assertSame('', $this->notification->getUser()); + $this->notification->setUser($user); + $this->assertSame($user, $this->notification->getUser()); + } + + public function dataSetUserInvalid() { + return $this->dataInvalidString(64); + } + + /** + * @dataProvider dataSetUserInvalid + * @param mixed $user + * + * @expectedException \InvalidArgumentException + */ + public function testSetUserInvalid($user) { + $this->notification->setUser($user); + } + + public function dataSetTimestamp() { + return $this->dataValidInt(); + } + + /** + * @dataProvider dataSetTimestamp + * @param int $timestamp + */ + public function testSetTimestamp($timestamp) { + $this->assertSame(0, $this->notification->getTimestamp()); + $this->notification->setTimestamp($timestamp); + $this->assertSame($timestamp, $this->notification->getTimestamp()); + } + + public function dataSetTimestampInvalid() { + return $this->dataInvalidInt(); + } + + /** + * @dataProvider dataSetTimestampInvalid + * @param mixed $timestamp + * + * @expectedException \InvalidArgumentException + */ + public function testSetTimestampInvalid($timestamp) { + $this->notification->setTimestamp($timestamp); + } + + public function dataSetObject() { + return [ + ['a', 1], + [str_repeat('a', 64), time()], + ]; + } + + /** + * @dataProvider dataSetObject + * @param string $type + * @param int $id + */ + public function testSetObject($type, $id) { + $this->assertSame('', $this->notification->getObjectType()); + $this->assertSame(0, $this->notification->getObjectId()); + $this->notification->setObject($type, $id); + $this->assertSame($type, $this->notification->getObjectType()); + $this->assertSame($id, $this->notification->getObjectId()); + } + + public function dataSetObjectTypeInvalid() { + return $this->dataInvalidString(64); + } + + /** + * @dataProvider dataSetObjectTypeInvalid + * @param mixed $type + * + * @expectedException \InvalidArgumentException + * @expectedMessage 'The given object type is invalid' + */ + public function testSetObjectTypeInvalid($type) { + $this->notification->setObject($type, 1337); + } + + public function dataSetObjectIdInvalid() { + return $this->dataInvalidInt(); + } + + /** + * @dataProvider dataSetObjectIdInvalid + * @param mixed $id + * + * @expectedException \InvalidArgumentException + * @expectedMessage 'The given object id is invalid' + */ + public function testSetObjectIdInvalid($id) { + $this->notification->setObject('object', $id); + } + + public function dataSetSubject() { + return [ + ['a', []], + [str_repeat('a', 64), [str_repeat('a', 160)]], + [str_repeat('a', 64), array_fill(0, 160, 'a')], + ]; + } + + /** + * @dataProvider dataSetSubject + * @param string $subject + * @param array $parameters + */ + public function testSetSubject($subject, $parameters) { + $this->assertSame('', $this->notification->getSubject()); + $this->assertSame([], $this->notification->getSubjectParameters()); + $this->notification->setSubject($subject, $parameters); + $this->assertSame($subject, $this->notification->getSubject()); + $this->assertSame($parameters, $this->notification->getSubjectParameters()); + } + + public function dataSetSubjectInvalidSubject() { + return $this->dataInvalidString(64); + } + + /** + * @dataProvider dataSetSubjectInvalidSubject + * @param mixed $subject + * + * @expectedException \InvalidArgumentException + */ + public function testSetSubjectInvalidSubject($subject) { + $this->notification->setSubject($subject, []); + } + + public function dataSetParsedSubject() { + return $this->dataValidString(false); + } + + /** + * @dataProvider dataSetParsedSubject + * @param string $subject + */ + public function testSetParsedSubject($subject) { + $this->assertSame('', $this->notification->getParsedSubject()); + $this->notification->setParsedSubject($subject); + $this->assertSame($subject, $this->notification->getParsedSubject()); + } + + public function dataSetParsedSubjectInvalid() { + return $this->dataInvalidString(false); + } + + /** + * @dataProvider dataSetParsedSubjectInvalid + * @param mixed $subject + * + * @expectedException \InvalidArgumentException + */ + public function testSetParsedSubjectInvalid($subject) { + $this->notification->setParsedSubject($subject); + } + + public function dataSetMessage() { + return [ + ['a', []], + [str_repeat('a', 64), [str_repeat('a', 160)]], + [str_repeat('a', 64), array_fill(0, 160, 'a')], + ]; + } + + /** + * @dataProvider dataSetMessage + * @param string $message + * @param array $parameters + */ + public function testSetMessage($message, $parameters) { + $this->assertSame('', $this->notification->getMessage()); + $this->assertSame([], $this->notification->getMessageParameters()); + $this->notification->setMessage($message, $parameters); + $this->assertSame($message, $this->notification->getMessage()); + $this->assertSame($parameters, $this->notification->getMessageParameters()); + } + + public function dataSetMessageInvalidMessage() { + return $this->dataInvalidString(64); + } + + /** + * @dataProvider dataSetMessageInvalidMessage + * @param mixed $message + * + * @expectedException \InvalidArgumentException + */ + public function testSetMessageInvalidMessage($message) { + $this->notification->setMessage($message, []); + } + + public function dataSetParsedMessage() { + return $this->dataValidString(false); + } + + /** + * @dataProvider dataSetParsedMessage + * @param string $message + */ + public function testSetParsedMessage($message) { + $this->assertSame('', $this->notification->getParsedMessage()); + $this->notification->setParsedMessage($message); + $this->assertSame($message, $this->notification->getParsedMessage()); + } + + public function dataSetParsedMessageInvalid() { + return $this->dataInvalidString(false); + } + + /** + * @dataProvider dataSetParsedMessageInvalid + * @param mixed $message + * + * @expectedException \InvalidArgumentException + */ + public function testSetParsedMessageInvalid($message) { + $this->notification->setParsedMessage($message); + } + + public function dataSetLink() { + return $this->dataValidString(4000); + } + + /** + * @dataProvider dataSetLink + * @param string $link + */ + public function testSetLink($link) { + $this->assertSame('', $this->notification->getLink()); + $this->notification->setLink($link); + $this->assertSame($link, $this->notification->getLink()); + } + + public function dataSetLinkInvalid() { + return $this->dataInvalidString(4000); + } + + /** + * @dataProvider dataSetLinkInvalid + * @param mixed $link + * + * @expectedException \InvalidArgumentException + */ + public function testSetLinkInvalid($link) { + $this->notification->setLink($link); + } + + public function dataSetIcon() { + return $this->dataValidString(64); + } + + /** + * @dataProvider dataSetIcon + * @param string $icon + */ + public function testSetIcon($icon) { + $this->assertSame('', $this->notification->getIcon()); + $this->notification->setIcon($icon); + $this->assertSame($icon, $this->notification->getIcon()); + } + + public function dataSetIconInvalid() { + return $this->dataInvalidString(64); + } + + /** + * @dataProvider dataSetIconInvalid + * @param mixed $icon + * + * @expectedException \InvalidArgumentException + */ + public function testSetIconInvalid($icon) { + $this->notification->setIcon($icon); + } + + public function testCreateAction() { + $action = $this->notification->createAction(); + $this->assertInstanceOf('OC\Notification\IAction', $action); + } + + public function testAddAction() { + /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action = $this->getMockBuilder('OC\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action->expects($this->once()) + ->method('isValid') + ->willReturn(true); + $action->expects($this->never()) + ->method('isValidParsed'); + + $this->notification->addAction($action); + + $this->assertEquals([$action], $this->notification->getActions()); + $this->assertEquals([], $this->notification->getParsedActions()); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testAddActionInvalid() { + /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action = $this->getMockBuilder('OC\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action->expects($this->once()) + ->method('isValid') + ->willReturn(false); + $action->expects($this->never()) + ->method('isValidParsed'); + + $this->notification->addAction($action); + } + + public function testAddParsedAction() { + /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action = $this->getMockBuilder('OC\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action->expects($this->once()) + ->method('isValidParsed') + ->willReturn(true); + $action->expects($this->never()) + ->method('isValid'); + + $this->notification->addParsedAction($action); + + $this->assertEquals([$action], $this->notification->getParsedActions()); + $this->assertEquals([], $this->notification->getActions()); + } + + /** + * @expectedException \InvalidArgumentException + */ + public function testAddParsedActionInvalid() { + /** @var \OC\Notification\IAction|\PHPUnit_Framework_MockObject_MockObject $action */ + $action = $this->getMockBuilder('OC\Notification\IAction') + ->disableOriginalConstructor() + ->getMock(); + $action->expects($this->once()) + ->method('isValidParsed') + ->willReturn(false); + $action->expects($this->never()) + ->method('isValid'); + + $this->notification->addParsedAction($action); + } + + public function dataIsValid() { + return [ + [false, '', false], + [true, '', false], + [false, 'a', false], + [true, 'a', true], + ]; + } + + /** + * @dataProvider dataIsValid + * + * @param bool $isValidCommon + * @param string $subject + * @param bool $expected + */ + public function testIsValid($isValidCommon, $subject, $expected) { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('\OC\Notification\Notification') + ->setMethods([ + 'isValidCommon', + 'getSubject', + ]) + ->getMock(); + + $notification->expects($this->once()) + ->method('isValidCommon') + ->willReturn($isValidCommon); + + $notification->expects(!$isValidCommon ? $this->never() : $this->once()) + ->method('getSubject') + ->willReturn($subject); + + $notification->expects($this->never()) + ->method('getParsedSubject') + ->willReturn($subject); + + $this->assertEquals($expected, $notification->isValid()); + } + + /** + * @dataProvider dataIsValid + * + * @param bool $isValidCommon + * @param string $subject + * @param bool $expected + */ + public function testIsParsedValid($isValidCommon, $subject, $expected) { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('\OC\Notification\Notification') + ->setMethods([ + 'isValidCommon', + 'getParsedSubject', + ]) + ->getMock(); + + $notification->expects($this->once()) + ->method('isValidCommon') + ->willReturn($isValidCommon); + + $notification->expects(!$isValidCommon ? $this->never() : $this->once()) + ->method('getParsedSubject') + ->willReturn($subject); + + $notification->expects($this->never()) + ->method('getSubject') + ->willReturn($subject); + + $this->assertEquals($expected, $notification->isValidParsed()); + } + + public function dataIsValidCommon() { + return [ + ['', '', 0, '', 0, false], + ['app', '', 0, '', 0, false], + ['app', 'user', 0, '', 0, false], + ['app', 'user', time(), '', 0, false], + ['app', 'user', time(), 'type', 0, false], + ['app', 'user', time(), 'type', 42, true], + ]; + } + + /** + * @dataProvider dataIsValidCommon + * + * @param string $app + * @param string $user + * @param int $timestamp + * @param string $objectType + * @param int $objectId + * @param bool $expected + */ + public function testIsValidCommon($app, $user, $timestamp, $objectType, $objectId, $expected) { + /** @var \OC\Notification\INotification|\PHPUnit_Framework_MockObject_MockObject $notification */ + $notification = $this->getMockBuilder('\OC\Notification\Notification') + ->setMethods([ + 'getApp', + 'getUser', + 'getTimestamp', + 'getObjectType', + 'getObjectId', + ]) + ->getMock(); + + $notification->expects($this->any()) + ->method('getApp') + ->willReturn($app); + + $notification->expects($this->any()) + ->method('getUser') + ->willReturn($user); + + $notification->expects($this->any()) + ->method('getTimestamp') + ->willReturn($timestamp); + + $notification->expects($this->any()) + ->method('getObjectType') + ->willReturn($objectType); + + $notification->expects($this->any()) + ->method('getObjectId') + ->willReturn($objectId); + + $this->assertEquals($expected, $this->invokePrivate($notification, 'isValidCommon')); + } +} diff --git a/tests/lib/repair/repairmimetypes.php b/tests/lib/repair/repairmimetypes.php index 40ffc14612b..76d4d7cc656 100644 --- a/tests/lib/repair/repairmimetypes.php +++ b/tests/lib/repair/repairmimetypes.php @@ -22,8 +22,17 @@ class RepairMimeTypes extends \Test\TestCase { protected function setUp() { parent::setUp(); - $this->storage = new \OC\Files\Storage\Temporary([]); + $this->savedMimetypeLoader = \OC::$server->getMimeTypeLoader(); + $this->mimetypeLoader = $this->getMockBuilder('\OC\Files\Type\Loader') + ->setConstructorArgs([\OC::$server->getDatabaseConnection()]) + ->setMethods(null) + ->getMock(); + \OC::$server->registerService('MimeTypeLoader', function ($c) { + return $this->mimetypeLoader; + }); + + $this->storage = new \OC\Files\Storage\Temporary([]); $this->repair = new \OC\Repair\RepairMimeTypes(); } @@ -33,7 +42,9 @@ class RepairMimeTypes extends \Test\TestCase { \OC_DB::executeAudited($sql, [$this->storage->getId()]); $this->clearMimeTypes(); - DummyFileCache::clearCachedMimeTypes(); + \OC::$server->registerService('MimeTypeLoader', function($c) { + return $this->savedMimetypeLoader; + }); parent::tearDown(); } @@ -86,8 +97,7 @@ class RepairMimeTypes extends \Test\TestCase { $this->repair->run(); // force mimetype reload - DummyFileCache::clearCachedMimeTypes(); - $this->storage->getCache()->loadMimeTypes(); + self::invokePrivate($this->mimetypeLoader, 'loadMimetypes'); $this->checkEntries($fixedMimeTypes); } @@ -434,14 +444,3 @@ class RepairMimeTypes extends \Test\TestCase { } } -/** - * Dummy class to access protected members - */ -class DummyFileCache extends \OC\Files\Cache\Cache { - - public static function clearCachedMimeTypes() { - self::$mimetypeIds = []; - self::$mimetypes = []; - } -} - diff --git a/tests/lib/server.php b/tests/lib/server.php index e73fc8b3ab1..96a476bd4d1 100644 --- a/tests/lib/server.php +++ b/tests/lib/server.php @@ -104,6 +104,8 @@ class Server extends \Test\TestCase { ['NavigationManager', '\OC\NavigationManager'], ['NavigationManager', '\OCP\INavigationManager'], + ['NotificationManager', '\OC\Notification\Manager'], + ['NotificationManager', '\OC\Notification\IManager'], ['UserCache', '\OC\Cache\File'], ['UserCache', '\OCP\ICache'], diff --git a/tests/lib/session/cryptowrappingtest.php b/tests/lib/session/cryptowrappingtest.php index 12b3c905b7f..e1fadbf933f 100644 --- a/tests/lib/session/cryptowrappingtest.php +++ b/tests/lib/session/cryptowrappingtest.php @@ -57,26 +57,17 @@ class CryptoWrappingTest extends TestCase { $this->instance = new CryptoSessionData($this->wrappedSession, $this->crypto, 'PASS'); } - public function testWrappingSet() { - $unencryptedValue = 'foobar'; - - $this->wrappedSession->expects($this->once()) - ->method('set') - ->with('key', $this->crypto->encrypt(json_encode($unencryptedValue))); - $this->instance->set('key', $unencryptedValue); - } - public function testUnwrappingGet() { $unencryptedValue = 'foobar'; $encryptedValue = $this->crypto->encrypt($unencryptedValue); $this->wrappedSession->expects($this->once()) ->method('get') - ->with('key') + ->with('encrypted_session_data') ->willReturnCallback(function () use ($encryptedValue) { return $encryptedValue; }); - $this->assertSame($unencryptedValue, $this->wrappedSession->get('key')); + $this->assertSame($unencryptedValue, $this->wrappedSession->get('encrypted_session_data')); } } diff --git a/tests/lib/template.php b/tests/lib/template.php index db58238eae8..6e62d3955f1 100644 --- a/tests/lib/template.php +++ b/tests/lib/template.php @@ -1,31 +1,31 @@ <?php -/** -* ownCloud -* -* @author Bernhard Posselt -* @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library 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 library. If not, see <http://www.gnu.org/licenses/>. -* -*/ +/** + * ownCloud + * + * @author Bernhard Posselt + * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library 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 library. If not, see <http://www.gnu.org/licenses/>. + * + */ class Test_TemplateFunctions extends \Test\TestCase { protected function setUp() { parent::setUp(); - $loader = new \OC\Autoloader(); + $loader = new \OC\Autoloader([OC::$SERVERROOT . '/lib']); $loader->load('OC_Template'); } @@ -60,7 +60,7 @@ class Test_TemplateFunctions extends \Test\TestCase { // --------------------------------------------------------------------------- // Test relative_modified_date with dates only // --------------------------------------------------------------------------- - public function testRelativeDateToday(){ + public function testRelativeDateToday() { $currentTime = 1380703592; $elementTime = $currentTime; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -74,7 +74,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('today', $result); } - public function testRelativeDateYesterday(){ + public function testRelativeDateYesterday() { $currentTime = 1380703592; $elementTime = $currentTime - 24 * 3600; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -88,7 +88,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('yesterday', $result); } - public function testRelativeDate2DaysAgo(){ + public function testRelativeDate2DaysAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 48 * 3600; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -102,7 +102,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('2 days ago', $result); } - public function testRelativeDateLastMonth(){ + public function testRelativeDateLastMonth() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 31; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -115,7 +115,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('last month', $result); } - public function testRelativeDateMonthsAgo(){ + public function testRelativeDateMonthsAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 65; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -128,7 +128,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('4 months ago', $result); } - public function testRelativeDateLastYear(){ + public function testRelativeDateLastYear() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 365; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -141,7 +141,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('last year', $result); } - public function testRelativeDateYearsAgo(){ + public function testRelativeDateYearsAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 365.25 * 2; $result = (string)relative_modified_date($elementTime, $currentTime, true); @@ -158,7 +158,7 @@ class Test_TemplateFunctions extends \Test\TestCase { // Test relative_modified_date with timestamps only (date + time value) // --------------------------------------------------------------------------- - public function testRelativeTimeSecondsAgo(){ + public function testRelativeTimeSecondsAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 5; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -166,7 +166,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('seconds ago', $result); } - public function testRelativeTimeMinutesAgo(){ + public function testRelativeTimeMinutesAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 190; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -174,7 +174,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('3 minutes ago', $result); } - public function testRelativeTimeHoursAgo(){ + public function testRelativeTimeHoursAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 7500; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -182,7 +182,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('2 hours ago', $result); } - public function testRelativeTime2DaysAgo(){ + public function testRelativeTime2DaysAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 48 * 3600; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -196,7 +196,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('2 days ago', $result); } - public function testRelativeTimeLastMonth(){ + public function testRelativeTimeLastMonth() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 31; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -209,7 +209,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('last month', $result); } - public function testRelativeTimeMonthsAgo(){ + public function testRelativeTimeMonthsAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 65; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -222,7 +222,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('4 months ago', $result); } - public function testRelativeTimeLastYear(){ + public function testRelativeTimeLastYear() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 365; $result = (string)relative_modified_date($elementTime, $currentTime, false); @@ -235,7 +235,7 @@ class Test_TemplateFunctions extends \Test\TestCase { $this->assertEquals('last year', $result); } - public function testRelativeTimeYearsAgo(){ + public function testRelativeTimeYearsAgo() { $currentTime = 1380703592; $elementTime = $currentTime - 86400 * 365.25 * 2; $result = (string)relative_modified_date($elementTime, $currentTime, false); diff --git a/tests/lib/updater.php b/tests/lib/updater.php index 28577071b4c..763858acf5d 100644 --- a/tests/lib/updater.php +++ b/tests/lib/updater.php @@ -67,14 +67,68 @@ class UpdaterTest extends \Test\TestCase { */ public function versionCompatibilityTestData() { return [ - ['1.0.0.0', '2.2.0', true], - ['1.1.1.1', '2.0.0', true], - ['5.0.3', '4.0.3', false], - ['12.0.3', '13.4.5', true], - ['1', '2', true], - ['2', '2', true], - ['6.0.5', '6.0.6', true], - ['5.0.6', '7.0.4', false], + ['1', '2', '1', true], + ['2', '2', '2', true], + ['6.0.5.0', '6.0.6.0', '5.0', true], + ['5.0.6.0', '7.0.4.0', '6.0', false], + // allow upgrading within the same major release + ['8.0.0.0', '8.0.0.0', '8.0', true], + ['8.0.0.0', '8.0.0.4', '8.0', true], + ['8.0.0.0', '8.0.1.0', '8.0', true], + ['8.0.0.0', '8.0.2.0', '8.0', true], + // does not allow downgrading within the same major release + ['8.0.1.0', '8.0.0.0', '8.0', false], + ['8.0.2.0', '8.0.1.0', '8.0', false], + ['8.0.0.4', '8.0.0.0', '8.0', false], + // allows upgrading within the patch version + ['8.0.0.0', '8.0.0.1', '8.0', true], + ['8.0.0.0', '8.0.0.2', '8.0', true], + // does not allow downgrading within the same major release + ['8.0.0.1', '8.0.0.0', '8.0', false], + ['8.0.0.2', '8.0.0.0', '8.0', false], + // allow upgrading to the next major release + ['8.0.0.0', '8.1.0.0', '8.0', true], + ['8.0.0.0', '8.1.1.0', '8.0', true], + ['8.0.0.0', '8.1.1.5', '8.0', true], + ['8.0.0.2', '8.1.1.5', '8.0', true], + ['8.1.0.0', '8.2.0.0', '8.1', true], + ['8.1.0.2', '8.2.0.4', '8.1', true], + ['8.1.0.5', '8.2.0.1', '8.1', true], + ['8.1.0.0', '8.2.1.0', '8.1', true], + ['8.1.0.2', '8.2.1.5', '8.1', true], + ['8.1.0.5', '8.2.1.1', '8.1', true], + // does not allow downgrading to the previous major release + ['8.1.0.0', '8.0.0.0', '7.0', false], + ['8.1.1.0', '8.0.0.0', '7.0', false], + // does not allow skipping major releases + ['8.0.0.0', '8.2.0.0', '8.1', false], + ['8.0.0.0', '8.2.1.0', '8.1', false], + ['8.0.0.0', '9.0.1.0', '8.2', false], + ['8.0.0.0', '10.0.0.0', '9.3', false], + // allows updating to the next major release + ['8.2.0.0', '9.0.0.0', '8.2', true], + ['8.2.0.0', '9.0.0.0', '8.2', true], + ['8.2.0.0', '9.0.1.0', '8.2', true], + ['8.2.0.0', '9.0.1.1', '8.2', true], + ['8.2.0.2', '9.0.1.1', '8.2', true], + ['8.2.2.0', '9.0.1.0', '8.2', true], + ['8.2.2.2', '9.0.1.1', '8.2', true], + ['9.0.0.0', '9.1.0.0', '9.0', true], + ['9.0.0.0', '9.1.0.2', '9.0', true], + ['9.0.0.2', '9.1.0.1', '9.0', true], + ['9.1.0.0', '9.2.0.0', '9.1', true], + ['9.2.0.0', '9.3.0.0', '9.2', true], + ['9.3.0.0', '10.0.0.0', '9.3', true], + // does not allow updating to the next major release (first number) + ['9.0.0.0', '8.2.0.0', '8.1', false], + // other cases + ['8.0.0.0', '8.1.5.0', '8.0', true], + ['8.2.0.0', '9.0.0.0', '8.2', true], + ['8.2.0.0', '9.1.0.0', '9.0', false], + ['9.0.0.0', '8.1.0.0', '8.0', false], + ['9.0.0.0', '8.0.0.0', '7.0', false], + ['9.1.0.0', '8.0.0.0', '7.0', false], + ['8.2.0.0', '8.1.0.0', '8.0', false], ]; } @@ -106,9 +160,9 @@ class UpdaterTest extends \Test\TestCase { * @param string $newVersion * @param bool $result */ - public function testIsUpgradePossible($oldVersion, $newVersion, $result) { + public function testIsUpgradePossible($oldVersion, $newVersion, $allowedVersion, $result) { $updater = new Updater($this->httpHelper, $this->config); - $this->assertSame($result, $updater->isUpgradePossible($oldVersion, $newVersion)); + $this->assertSame($result, $updater->isUpgradePossible($oldVersion, $newVersion, $allowedVersion)); } public function testCheckInCache() { diff --git a/tests/settings/controller/CheckSetupControllerTest.php b/tests/settings/controller/CheckSetupControllerTest.php index 414b1b91e17..2a8a6548ebb 100644 --- a/tests/settings/controller/CheckSetupControllerTest.php +++ b/tests/settings/controller/CheckSetupControllerTest.php @@ -384,6 +384,11 @@ class CheckSetupControllerTest extends TestCase { } public function testIsUsedTlsLibOutdatedWithOlderOpenSsl() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(true)); $this->checkSetupController ->expects($this->once()) ->method('getCurlVersion') @@ -391,7 +396,25 @@ class CheckSetupControllerTest extends TestCase { $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.1c). Please update your operating system or features such as installing and updating apps via the app store or Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated')); } + public function testIsUsedTlsLibOutdatedWithOlderOpenSslAndWithoutAppstore() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(false)); + $this->checkSetupController + ->expects($this->once()) + ->method('getCurlVersion') + ->will($this->returnValue(['ssl_version' => 'OpenSSL/1.0.1c'])); + $this->assertSame('cURL is using an outdated OpenSSL version (OpenSSL/1.0.1c). Please update your operating system or features such as Federated Cloud Sharing will not work reliably.', $this->invokePrivate($this->checkSetupController, 'isUsedTlsLibOutdated')); + } + public function testIsUsedTlsLibOutdatedWithOlderOpenSsl1() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(true)); $this->checkSetupController ->expects($this->once()) ->method('getCurlVersion') @@ -416,6 +439,11 @@ class CheckSetupControllerTest extends TestCase { } public function testIsBuggyNss400() { + $this->config + ->expects($this->once()) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(true)); $this->checkSetupController ->expects($this->once()) ->method('getCurlVersion') diff --git a/themes/example/defaults.php b/themes/example/defaults.php index 0dd0d46bd9c..6fea8fa8a49 100644 --- a/themes/example/defaults.php +++ b/themes/example/defaults.php @@ -20,54 +20,32 @@ class OC_Theme { - private $themeEntity; - private $themeName; - private $themeTitle; - private $themeBaseUrl; - private $themeDocBaseUrl; - private $themeSyncClientUrl; - private $themeSlogan; - private $themeMailHeaderColor; - - /* put your custom text in these variables */ - function __construct() { - $this->themeEntity = 'Custom Cloud Co.'; - $this->themeName = 'Custom Cloud'; - $this->themeTitle = 'Custom Cloud'; - $this->themeBaseUrl = 'https://owncloud.org'; - $this->themeDocBaseUrl = 'https://doc.owncloud.org'; - $this->themeSyncClientUrl = 'https://owncloud.org/install'; - $this->themeSlogan = 'Your custom cloud, personalized for you!'; - $this->themeMailHeaderColor = '#745bca'; - } - /* nothing after this needs to be adjusted */ - public function getBaseUrl() { - return $this->themeBaseUrl; + return 'https://owncloud.org'; } public function getSyncClientUrl() { - return $this->themeSyncClientUrl; + return 'https://owncloud.org/install'; } public function getDocBaseUrl() { - return $this->themeDocBaseUrl; + return 'https://doc.owncloud.org'; } public function getTitle() { - return $this->themeTitle; + return 'Custom Cloud'; } public function getName() { - return $this->themeName; + return 'Custom Cloud'; } public function getEntity() { - return $this->themeEntity; + return 'Custom Cloud Co.'; } public function getSlogan() { - return $this->themeSlogan; + return 'Your custom cloud, personalized for you!'; } public function getShortFooter() { @@ -89,7 +67,7 @@ class OC_Theme { } public function getMailHeaderColor() { - return $this->themeMailHeaderColor; + return '#745bca'; } } diff --git a/version.php b/version.php index a115f4b26be..a6b49d9dc74 100644 --- a/version.php +++ b/version.php @@ -2,6 +2,7 @@ /** * @author Frank Karlitschek <frank@owncloud.org> * @author Lukas Reschke <lukas@owncloud.com> + * @author Vincent Petry <pvince81@owncloud.com> * * @copyright Copyright (c) 2015, ownCloud, Inc. * @license AGPL-3.0 @@ -22,14 +23,16 @@ // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel // when updating major/minor version number. -$OC_Version=array(8, 2, 0, 4); +$OC_Version = [8, 2, 0, 4]; // The human readable string -$OC_VersionString='8.2 pre alpha'; +$OC_VersionString = '8.2 pre alpha'; + +$OC_VersionCanBeUpgradedFrom = [8, 1]; // The ownCloud channel -$OC_Channel='git'; +$OC_Channel = 'git'; // The build number -$OC_Build=''; +$OC_Build = ''; |